← 프로젝트 소개

WORKLOAD STUDIO · STUDY NOTES

내 프로젝트를
내 말로 설명하기

코드가 낯설어도 괜찮습니다. 먼저 화면에서 일어나는 일을 이해하고, 그 일을 맡은 코드를 하나씩 찾아봅니다. 연휴 동안 다섯 번, 읽고 설명하고 확인하는 학습 노트입니다.

2026.10.04 기준 · 5회 / 회당 45–60분 · 질문 27개 · 유료 실행 없이 학습

BEFORE YOU START

암기보다 설명 한 문장

각 회차는 개념 읽기 10분, 질문에 먼저 답해 보기 15분, 과제 15–25분, 자기 점검 5분으로 진행하세요. 여유가 있다면 회차마다 코드 읽기와 설명 연습을 더해 2–3시간으로 늘려도 됩니다. 날짜에 맞추기보다 이해한 범위를 확인하세요. 질문을 누르면 답이 열립니다. 답을 읽기 전에 현재 생각을 한 줄 적으면 이해가 바뀌는 지점을 찾기 쉽습니다.

완료 기준은 코드를 전부 읽는 것이 아닙니다. 무엇을 만들었는지, 왜 나누었는지, 어디까지 확인했는지를 구분해 말하는 것입니다. 서비스 접근 권한이 없어도 종이 과제로 모두 학습할 수 있습니다.

THE BIG PICTURE

요청에서 결과, 그리고 정리까지

아래는 역할을 이해하기 위한 흐름도입니다. 실제 통신 경로나 모든 상태를 빠짐없이 나타낸 설계도는 아닙니다.

  1. 1 · 화면요청·모델·장비·목표 설정
  2. 2 · API입력 검증·작업 접수·상태 보관
  3. 3 · workerGPU 준비·측정 실행
  4. 4 · 모델 서버입력에 대한 실제 추론
  5. 5 · 결과지표·오류·조건 저장과 조회
  6. 6 · 장비 정리삭제 요청과 완료 확인

옆에서 계속 확인하는 역할: 화면은 서버 상태를 다시 조회하고, reaper는 남은 장비를 살핍니다. 결과 저장과 삭제 완료는 따로 확인합니다. 무료 로컬 검증에서는 실제 GPU·모델 추론 대신 모의 응답으로 흐름을 점검합니다.

1회차 · 45분

01내 서비스는 무슨 일을 하는가

Workload Studio는 AI 모델을 새로 학습시키는 서비스가 아니라, 정해진 요청을 모델에 보내고 속도·실패·목표 충족 여부를 확인하는 실험 도구입니다. 식당에 손님을 얼마나 받아도 기다림이 길어지지 않는지 시험하는 일에 가깝습니다. 화면은 주문서, API는 접수 창구, worker는 실제 작업 담당자로 생각해 보세요.

Q1.1이 프로젝트를 한 문장으로 설명한다면?

AI 추론 실험의 조건을 정하고, GPU 준비부터 측정·결과 보관·장비 정리까지 이어 주는 개인용 서비스입니다. 여기서 추론은 이미 만들어진 모델이 입력에 대한 출력을 계산하는 일입니다. 학습 플랫폼이나 다중 사용자 운영 실적이라고 소개하지 않습니다.

Q1.2프런트엔드와 백엔드는 각각 무엇을 맡나요?

React 화면은 요청 조건을 보여 주고 사용자 조작을 받습니다. Python 백엔드는 조건을 검증하고 작업과 결과를 관리합니다. 화면에서 버튼을 숨기는 것만으로 잘못된 실행을 막을 수 없으므로 서버도 조건을 검사해야 합니다.

Q1.3API와 GPU 모델 서버는 같은 서버인가요?

역할이 다릅니다. 서비스 API는 실험을 접수하고 상태를 알려 줍니다. 모델 서버는 GPU에서 모델을 실행해 응답을 만듭니다. API에 접속할 수 있다는 사실만으로 GPU 준비나 추론 성공이 확인되지는 않습니다.

Q1.4worker와 reaper를 왜 나누나요?

worker는 오래 걸리는 준비와 실행을 담당합니다. reaper는 남은 장비와 작업을 살피는 독립 정리 프로세스입니다. 실행 담당자가 중단되더라도 장비 정리를 다시 시도할 수 있어야 하기 때문입니다. 분리했다고 삭제 성공이 자동 보장되는 것은 아니며 확인 근거가 필요합니다.

Q1.5로컬 검증에서 결과가 나오면 GPU 성능을 측정한 건가요?

아닙니다. local fake는 가짜 응답으로 입력·실행·결과 표시 흐름을 확인합니다. 합성 요청을 만들거나 설정 파일을 내보내는 일도 추론 측정이 아닙니다. 실제 모델과 장비가 응답한 결과인지 출처부터 확인해야 합니다.

목차로 돌아가기 ↑

2회차 · 50분

02버튼을 누른 뒤, 요청은 어디로 가는가

HTTP는 화면과 서버가 요청·응답을 주고받는 약속입니다. 오래 걸리는 실험은 접수와 완료가 떨어져 있습니다. 택배 접수 번호를 받은 뒤 배송 상태를 확인하듯, 작업을 식별하는 값으로 서버의 상태를 다시 조회합니다. JSON은 그 요청·상태·결과를 이름과 값으로 표현하는 데이터 형식입니다.

Q2.1요청 성공과 실험 성공은 어떻게 다른가요?

서버가 실행 요청을 받아들였다는 응답은 접수 성공입니다. 이후 모델 준비나 추론에서 실패할 수 있습니다. HTTP 응답만 보지 말고 작업 상태와 저장 결과, 오류를 따로 확인해야 합니다.

Q2.2비동기는 무엇이고 왜 필요한가요?

사용자가 한 요청의 응답을 기다리는 동안 모든 작업을 붙잡아 두지 않는 방식입니다. GPU 준비는 오래 걸릴 수 있어 서버 작업을 접수한 뒤 화면은 진행 상태를 조회합니다. 비동기 자체가 GPU 계산을 빠르게 만드는 것은 아닙니다.

Q2.3polling은 무엇인가요?

화면이 서버에 일정 간격으로 지금 상태를 묻는 방식입니다. 진행 화면의 내용은 서버에서 받은 상태를 바탕으로 바뀝니다. 한 번 조회에 실패한 것과 실제 작업이 실패한 것은 구분해야 합니다.

Q2.4새로고침하면 왜 저장된 실행 조건이 필요한가요?

브라우저의 일시적인 기억은 사라질 수 있습니다. 실행 당시 서버에 저장한 조건을 다시 읽어야 어떤 장비와 모델을 사용했는지 복원할 수 있습니다. 현재 재고 목록으로 과거 장비를 추측하면 기록이 달라질 수 있습니다.

Q2.5코드를 읽기 전에 JSON에서 무엇을 보면 되나요?

필드 이름, 값의 종류, 값이 없을 때의 의미부터 봅니다. 숫자 0과 알 수 없음은 다릅니다. 결과가 없다는 것이 오류 0건이나 비용 0원을 뜻하지 않습니다. 예제 데이터를 읽을 때도 측정값인지 상태 정보인지 먼저 구분하세요.

목차로 돌아가기 ↑

3회차 · 50분

03실패와 취소를 상태로 이해하기

상태는 지금 확인한 사실을 이름으로 남긴 것입니다. 준비 중, 실행 중, 취소 접수, 정리 중, 종료는 서로 다릅니다. 특히 외부 GPU를 빌리는 일은 요청을 보낸 뒤 응답이 끊길 수 있습니다. 이때 “모른다”를 기록하는 것이 무조건 성공이나 실패로 처리하는 것보다 정확합니다.

Q3.1취소 버튼을 누르면 바로 과금이 끝나나요?

취소 요청 접수와 외부 장비 삭제는 별개입니다. 서버가 취소를 받아도 정리에 시간이 걸리거나 삭제 확인이 실패할 수 있습니다. 삭제 완료 근거 전에는 비용 발생 가능성을 남겨야 합니다.

Q3.2GPU 생성 응답이 없으면 다시 생성하면 되지 않나요?

첫 요청으로 장비가 만들어졌지만 응답만 사라졌을 수 있습니다. 곧바로 재요청하면 중복 대여가 생길 수 있습니다. 이 프로젝트는 생성 결과 미확정 상태를 남기고 별도 감시와 제한된 복구 절차로 다룹니다.

Q3.3지금 장비가 없으면 과거에도 비용이 없었다고 할 수 있나요?

없습니다. 현재 조회는 현재 상태의 근거입니다. 과거에 잠시 생성되었다가 삭제되었는지와 실제 청구 내역은 별도 확인이 필요합니다. “현재 없음”을 “과거 생성 실패”나 “청구액 0원”으로 바꾸면 안 됩니다.

Q3.4연결 오류 때 화면은 무엇을 알려 줘야 하나요?

마지막으로 확인한 상태와 최신 조회가 실패했다는 사실을 함께 알려야 합니다. 화면 연결이 끊겼다고 GPU도 멈췄다고 표시하면 안 됩니다. 다시 조회할 방법과 정리·과금 상태가 아직 불확실하다는 안내가 필요합니다.

Q3.5테스트가 통과했으면 취소 기능 검증이 끝난 건가요?

자동 테스트는 정해진 조건의 동작을 확인합니다. 모의 브라우저 검증은 실제 유료 장비 취소·삭제와 다릅니다. 이 프로젝트도 취소 접수 복원과 오류 안내의 모의 검증, 실제 유료 취소, 첫 사용자 이해도 확인을 구분합니다.

목차로 돌아가기 ↑

4회차 · 60분

04빠르다는 말을 숫자로 나누기

성능은 숫자 하나가 아닙니다. 사용자가 얼마나 기다리는지와 전체 요청을 얼마나 처리하는지를 함께 봐야 합니다. 같은 모델이라도 입력 길이, 출력 길이, 동시에 보내는 요청 수가 달라지면 결과가 달라집니다. 비교하려면 먼저 실험 조건을 맞춰야 합니다.

Q4.1토큰은 글자 수인가요?

모델이 문장을 처리하는 작은 단위입니다. 한 글자나 한 단어와 항상 일치하지 않고 토크나이저에 따라 달라집니다. 입력 토큰 수와 실제 생성된 출력 토큰 수를 구별해야 합니다. 출력 제한 64는 반드시 64개가 생성됐다는 뜻이 아닙니다.

Q4.2TTFT와 전체 지연 시간은 어떻게 다른가요?

TTFT는 요청 후 첫 토큰이 오기까지의 시간입니다. 전체 지연은 응답 완료까지의 시간입니다. 첫 글자가 빨리 보여도 이후 생성이 느리면 완료는 늦을 수 있습니다. 측정 시작·종료 기준과 단위도 확인해야 합니다.

Q4.3동시성과 처리량을 왜 함께 보나요?

동시성은 동시에 처리 중인 요청 수이고, 처리량은 일정 시간 동안 처리한 양입니다. 요청을 더 많이 겹치면 처리량이 늘 수도 있지만 대기 시간이 길어지거나 오류가 생길 수 있습니다. 높은 동시성이 항상 좋은 설정은 아닙니다.

Q4.4p95와 SLO는 무엇인가요?

p95는 지연 시간을 순서대로 놓았을 때 약 95%가 그 값 이하인 지점을 나타냅니다. 평균에 가려진 느린 요청을 보는 데 씁니다. SLO는 허용 지연 같은 목표 조건입니다. 작은 표본의 p95는 흔들리기 쉬우므로 표본 수와 계산 기준을 함께 봅니다.

Q4.5성공 16/16이면 모델 품질까지 확인했나요?

아닙니다. 2026년 10월 4일의 실제 GPU 실행은 정해진 조건에서 16개 요청의 SLO 충족과 오류 0건, 결과 저장·자동 삭제 흐름을 확인한 사례입니다. 답변의 정확성이나 모든 부하에서의 안정성을 증명하지 않습니다. 실제 청구 총액도 별도 확인 대상입니다.

Q4.6공유 prefix를 맞추면 캐시 효과를 증명하나요?

공유 prefix는 요청 앞부분의 같은 토큰 구간입니다. 이를 만드는 것은 캐시를 시험할 입력을 준비하는 일입니다. 실제 서버 설정과 캐시 사용 여부, 비교 조건을 확인해야 효과를 말할 수 있습니다. 준비된 토큰의 일치만으로 캐시 적중이나 성능 향상을 단정하지 않습니다.

목차로 돌아가기 ↑

5회차 · 60분

05에이전트가 좋은 선택을 했는지 검증하기

이 프로젝트에서 정책은 다음에 어떤 동시성을 측정할지 고르는 방법입니다. 규칙 정책과 OpenAI 정책에 같은 종류의 도구·측정 제한을 두고 결과를 비교합니다. 모델이 그럴듯한 이유를 말하는 것보다 실제 선택이 참조 측정에서 어떻게 평가되는지가 중요합니다.

Q5.1에이전트와 측정 도구는 무엇이 다른가요?

정책은 허용된 다음 동시성이나 중단을 고르고, 도구는 정해진 실행 계약에 따라 측정합니다. OpenAI 정책이 직접 GPU를 대여하는 구조는 아닙니다. 정책이 요청했다고 모든 조건을 받아들이지 않습니다. 서버가 지원 여부와 예산을 검사해야 하며, 지원하지 않는 도착 간격이나 prefix 요구를 조용히 버려서는 안 됩니다.

Q5.2왜 규칙 정책도 비교하나요?

측정을 적게 하는 효과가 AI 때문인지, 단순한 탐색 규칙만으로도 가능한지 구별하기 위해서입니다. AI 결과만 보면 측정 제한 자체의 효과를 AI의 성과로 오해할 수 있습니다. 같은 제약의 대조군이 필요합니다.

Q5.36세션과 54건은 각각 무엇을 세나요?

같은 RTX 4090·모델 서버에서 규칙과 OpenAI 정책을 각각 3세션 실행했습니다. 세션마다 정책 측정 3건과 전수 참조 측정 6건이 있어 정책 18건 + 참조 36건 = 총 54건입니다. 54개의 독립된 서버나 54세션을 뜻하지 않습니다.

Q5.4측정을 50% 줄였으니 비용도 50% 절감했나요?

입증하지 못했습니다. 두 정책 모두 전수 6회 대신 3회 측정했습니다. GPU 준비·대기 시간과 API 비용 등이 있고, 검증용 참조 측정도 수행했습니다. 실제 청구액을 확인하지 않았으므로 측정 횟수 감소를 시간·청구액 감소로 바꿔 말할 수 없습니다.

Q5.5OpenAI가 규칙보다 우수했다고 말할 수 있나요?

참조 최댓값 선택은 규칙 0/3, OpenAI 2/3이었지만 참조에서 실패한 조건 선택은 각각 1/3이었습니다. 작은 표본, 고정 순서, 공유 서버, 세션 간 경계 변동이 있어 일반적 우위는 판단할 수 없습니다. 관측 결과와 일반적인 결론을 분리해야 합니다.

Q5.6다음 연구는 무엇이고 NPU 비교는 어디까지 했나요?

먼저 세션마다 달라진 성공·실패 경계를 다시 확인하는 일이 필요합니다. 이후 모델과 GPU를 하나씩 확대하고, RNGD·Warboy 같은 NPU는 접근성과 지원 조건을 확인한 뒤 비교합니다. 현재 GPU 실측을 NPU 성능 근거로 소개하지 않습니다.

목차로 돌아가기 ↑

READ THE EVIDENCE

숫자와 결론을 분리해 읽기

아래는 프로젝트 로드맵의 stage-8에 기록된 제한된 정책 평가입니다. 뒤이어 수행한 통합 화면의 16요청 실행과는 다른 검증입니다.

동일 RTX 4090·모델 서버의 정책 평가 6세션
비교 항목규칙 정책OpenAI 정책
세션 수33
세션당 정책 / 참조 측정3회 / 6회3회 / 6회
참조 최댓값 선택0/32/3
참조에서 실패한 조건 선택1/31/3

순서는 규칙 → OpenAI → OpenAI → 규칙 → 규칙 → OpenAI였습니다. 같은 서버를 공유했고 순서를 무작위로 바꾼 대규모 실험이 아닙니다. 한 세션의 참조 결과는 동시성 증가에 따라 단순하게 변하지 않았으며, 세션 사이에도 성공·실패 경계가 달랐습니다.

KEEP THIS NEARBY

막힐 때 돌아오는 용어 사전

워크로드
모델에 보내는 요청들의 길이·도착 시점·빈도 등 작업 특성.
Trace
요청별 길이와 시점 등을 담은 기록. 원문 프롬프트와 같은 뜻은 아닙니다.
추론
이미 학습된 모델이 입력을 받아 출력을 계산하는 과정.
엔드포인트
요청을 받는 서버의 주소와 경로. 주소가 있다는 것과 준비 완료는 별개입니다.
API
프로그램끼리 요청과 결과를 주고받는 약속.
JSON
이름과 값으로 구조화한 데이터 형식.
비동기 작업
접수와 완료 시점이 떨어져 있어 상태를 나중에 확인하는 작업.
상태 복원
서버에 남은 기록으로 화면의 진행 상태를 다시 보여 주는 일.
Pod
이 프로젝트의 클라우드 GPU 실행에서 빌려 쓰는 작업 환경 단위.
토크나이저
텍스트를 모델이 처리할 토큰으로 나누는 도구.
동시성
같은 시점에 처리 중인 요청 수. 초당 요청 수와 다릅니다.
처리량
일정 시간 동안 처리한 요청이나 토큰의 양. 단위를 함께 읽습니다.
SLO
허용 지연 등 실험이 충족해야 할 목표 조건.
참조 측정
정책 선택을 평가하려고 비교 후보들을 측정한 결과. 언제나 변하지 않는 정답은 아닙니다.
정책
관측 결과를 보고 다음 행동이나 후보를 고르는 규칙.
아티팩트
실행 조건·결과 등 나중에 다시 확인할 수 있게 저장한 산출물.
digest
내용 변경 여부를 확인하는 해시 값. 내용 자체가 사실임을 보증하지는 않습니다.

READ ONE PATH AT A TIME

코드는 이 순서로 찾아보기

아래는 비공개 저장소 안의 실제 상대 경로입니다. 공개 링크가 아니며, 저장소 접근 권한이 있는 개인 작업 환경에서 여세요. 파일 전체를 외우지 말고 입력 → 검사 → 실행 → 반환 또는 저장을 찾아 옆에 한국어로 적으세요.

  1. 전체 현황

    docs/implementation-handoff.md

    날짜가 뒤인 기록부터 읽고 구현, 확인한 검증, 남은 한계를 나누세요. 예전 기록은 당시의 상태입니다.

  2. 다음 연구

    web/public/roadmap.json

    stage-8의 결과와 stage-9·10의 계획을 구분하세요.

  3. 화면의 입구

    web/src/app/App.tsx

    import가 가리키는 화면과 화면을 선택하는 조건부터 찾으세요. 모든 문법을 이해할 필요는 없습니다.

  4. 서버의 입구

    src/rngd_workload_studio/api.py

    어떤 기능의 경로를 등록하는지 읽고 관심 기능 한 개만 따라가세요.

  5. GPU 요청 접수

    src/rngd_workload_studio/execution/cloud/routes.py

    어떤 입력을 받고 어떤 검사를 한 뒤 작업으로 넘기는지 찾으세요.

  6. GPU 정리와 재확인

    src/rngd_workload_studio/execution/cloud/lifecycle.py

    삭제 요청·삭제 확인·생성 미확정을 구분하는 분기를 읽으세요. GPU 정리를 담당하는 코드입니다.

  7. 무료 모의 응답

    src/rngd_workload_studio/execution/fake_server.py

    실제 모델 실행과 다른 응답 생성 경로를 확인하세요.

  8. 정책 실행

    src/rngd_workload_studio/agent/session_runner.py

    정책 선택과 측정 도구 실행이 어떤 순서로 이어지는지 찾으세요.

  9. 정책 평가

    src/rngd_workload_studio/agent/evaluation.py

    정책의 선택과 참조 결과를 비교할 때 무엇을 성공·실패로 다루는지 읽으세요.

처음 보는 문법에서는 import는 “다른 파일에서 가져오기”, 함수는 “이름 붙인 작업”, if는 “조건에 따라 갈림”, return은 “결과 돌려주기”로 읽어 보세요. await를 만나면 외부 응답을 기다리는 지점인지 살펴보세요. 정확한 동작은 호출한 함수까지 확인해야 합니다.

MAKE IT YOUR OWN

마지막 과제: 90초 설명하기

  1. 무슨 문제를 다루나요? — AI 추론 조건과 실행 결과를 확인하는 문제.
  2. 어떻게 나눴나요? — 화면, API, 실행 담당, 정리 담당의 역할.
  3. 무엇이 어려웠나요? — 생성 응답 미확정, 취소와 삭제의 차이, 새로고침 복구.
  4. 무엇을 확인했나요? — 실제 GPU 실행 흐름과 제한된 정책 비교.
  5. 무엇은 아직 모르나요? — 일반적 정책 우위, 실제 비용 절감, NPU 비교.

코드 작성 기여도도 정확하게

직접 코드를 작성하지 않았다면 그렇게 말해도 됩니다. “AI 도구의 도움으로 구현한 프로젝트를 학습 중이며, 현재는 실행 흐름과 검증 한계를 설명할 수 있습니다”처럼 자신의 현재 이해와 기여를 구분하세요. 요구사항 결정이나 테스트를 직접 수행했다는 말도 실제로 한 범위에서만 사용하세요.

설명이 막힌 부분을 다음 공부 주제로 남기세요. 함수 하나를 읽고 입력·실패 조건·저장 결과를 설명할 수 있게 되면, 그때부터 이해한 코드의 범위를 구체적으로 넓혀 갈 수 있습니다.

프로젝트 소개를 다시 읽기 →