프레임워크 없이 만드는 AI 에이전트 입문

프레임워크 없이 Python과 while 문 하나로 AI 에이전트를 직접 만듭니다. 도구 설계, 실패와 비용, 기억, 사람 승인, 평가, 웹 화면을 한 편씩 붙여 마지막에는 실패하는 테스트를 스스로 고치는 작은 코딩 에이전트를 완성합니다.

  • 초급
  • 수업 17개
  • 2시간 43분
  • 수업 자료 21개
  • 수강 기한 12개월
강사 Dante

FROM SCRATCH #1 · AGENT

직접 만든 에이전트가 실패하는 테스트를 고칩니다

8편 실제 녹화: 에이전트가 diff를 보여 주고 허락을 받은 뒤 테스트를 다시 돌리는 장면

8편에서 완성하는 에이전트의 실제 녹화 화면이에요. 테스트를 돌리고, 실패 메시지와 코드를 읽고, 고칠 내용을 diff로 보여 주며 허락을 받은 뒤 다시 테스트합니다. 모델을 다섯 번 불렀고, 실제로 청구된 돈은 $0.000560이었습니다.

영상 수업
17
본편 9 + 과제 해설 8, 약 2시간 43분
PDF 튜토리얼·풀이·부록
20
모두 228쪽
과제와 정답 코드
24
1~8편 과제 3개씩
1편 실습 실제 청구액
$0.0007
실습 파일 3개를 한 번씩

QUESTION

"테스트 좀 고쳐 줘"라고 하면, 코딩 에이전트 안에서는 무슨 일이 일어날까요?

Claude Code나 Codex에게 부탁하면 알아서 파일을 열고, 테스트를 돌리고, 코드를 고칩니다. 그런데 막상 직접 만들어 보려면 어디서부터 시작해야 할지 막막하죠. 결론부터 말하면, 그 뼈대는 while 문 하나입니다. 아래는 1편에서 실제로 쓰는 코드예요.

# ep01/03_agent.py (47~67행)
while turn < MAX_TURNS:
    turn += 1
    response = client.chat.completions.create(
        model=os.environ["MODEL"],
        tools=tools,
        messages=messages,
    )
    message = response.choices[0].message
    messages.append(message.model_dump(exclude_none=True))

    if not message.tool_calls:
        print(message.content)
        break

    for call in message.tool_calls:
        # 모델은 요청서만 쓴다. 실행은 우리 코드가 한다
        result = run_tool(call.function.name, json.loads(call.function.arguments))
        messages.append({"role": "tool", "tool_call_id": call.id, "content": result})

화면에 맞게 try/except와 print 몇 줄을 줄였습니다. 원본은 공개 저장소의 python/ep01 폴더에 있습니다. 모델에게 묻고, 모델이 도구를 써 달라고 하면 실행해서 결과를 돌려주고, 다시 묻습니다. 이 강의는 이 루프에서 출발해 한 편에 부품 하나씩 붙여 갑니다.

WHY FROM SCRATCH

프레임워크로 시작할까요, 바닥부터 시작할까요?

프레임워크가 나쁘다는 이야기는 아닙니다. 다만 처음 배울 때는 프레임워크가 감춰 주는 부분이 바로 우리가 알아야 할 부분이에요. 둘의 장단점을 솔직하게 놓고 보면 이렇습니다.

프레임워크 튜토리얼로 시작하면

  • 몇 줄이면 돌아가는 에이전트가 생깁니다
  • 메모리·도구 연결 같은 기능이 이미 들어 있습니다
  • 하지만 모델이 같은 파일을 열 번 읽을 때, 어디를 고쳐야 할지 잘 안 보입니다
  • 비용이 왜 이만큼 나왔는지 설명하기 어렵습니다

FROM SCRATCH로 시작하면

  • 모델이 도구를 "직접" 실행하지 않고 요청서(tool_calls)만 쓴다는 걸 코드로 봅니다
  • 대화 기록을 매번 통째로 다시 보내서 입력 토큰이 늘어나는 걸 숫자로 봅니다
  • 회차 상한·비용 상한·사람 승인을 내 손으로 겁니다
  • 직접 쓰는 코드가 더 많습니다. 배포·운영 기능은 이번 강의에 없어요

OpenAI Python SDK와 표준 라이브러리로 만들고, 웹 화면(7편)과 연습용 가짜 서버(3편)에만 FastAPI를 씁니다. 구조를 알고 나면 어떤 프레임워크 문서를 봐도 "아, 이게 그 루프구나" 하고 읽힐 겁니다.

POINT 01

바닥부터, 루프를 직접 씁니다

1편의 첫 에이전트는 도구 정의까지 포함해 67줄입니다. 그 안의 while 문은 21줄이고요. 여기에 2편부터 도구 등록표, 안전장치, 기억, 사람 승인, 평가, 웹 화면을 한 편씩 붙이고, 8편에서 그 부품을 한 루프에 모읍니다.

1편 · 첫 에이전트는 67줄
1편 · 첫 에이전트는 67줄
8편 · 지금까지 만든 부품을 한 루프에
8편 · 지금까지 만든 부품을 한 루프에

POINT 02

실제 API, 실제 청구액

영상 속 터미널과 브라우저는 모두 실제 OpenRouter 호출을 녹화한 것입니다. 비용도 가격표로 계산한 추정치가 아니라, 응답에 들어 있는 실제 청구액(usage.cost)으로 봅니다. 가격표 계산과 실제 청구액이 다르다는 것도 여기서 처음 보게 될 거예요.

1편 실습 파일 세 개
$0.0007
실제 청구액 $0.000704
8편 테스트 한 번 고치기
$0.00056
모델 호출 5번
같은 모델, 다른 제공업체
약 10배
출력 100만 토큰 $0.42 vs $4.20
0편 · 같은 질문, 매번 다른 토큰 수와 청구액
0편 · 같은 질문, 매번 다른 토큰 수와 청구액
3편 과제 해설 · 같은 질문, DeepSeek $0.000437 vs GLM $0.000286
3편 과제 해설 · 같은 질문, DeepSeek $0.000437 vs GLM $0.000286

POINT 03

예상과 달랐던 결과까지 그대로 공개합니다

강의를 만들면서 실제로 돌려 보니, 대본을 쓸 때의 예상과 다른 결과가 여러 번 나왔습니다. 결과를 예상에 맞춰 고치지 않고, 나온 그대로 영상과 튜토리얼에 담았어요.

2편 · 도구 설계

설명을 망가뜨렸는데, 성적이 같았다

도구 설명을 "파일을 읽는다" 한마디로 망가뜨리고 두 모델로 세 번씩 돌렸습니다. API 호출·도구 호출·에러·TODO 개수가 좋은 설명과 똑같이 4·6·0·4였어요. 그럼 설명은 왜 잘 써야 할까요?

3편 · 실패와 비용

같은 모델, 제공업체만 바꿨더니 약 9배

일부러 비싼 제공업체로만 보내 보니 실제 청구액이 싼 곳의 약 9배였고, 가격표로 계산한 값과도 크게 달랐습니다. 그래서 4편부터는 가격 상한을 코드에 넣어요.

5편 · 사람 승인

막았더니, 모델이 우회로를 찾았다

rm을 금지 목록에 넣자 두 모델 모두 python -c로, 다시 막히자 줄바꿈을 섞은 명령으로 돌아왔습니다. 그 기록과 고친 코드를 그대로 보여 드립니다.

6편 · 평가

회의록엔 "금요일"뿐인데, 날짜를 지어냈다

일곱 문제 평가에서는 두 모델 모두 만점이었는데, 회의록에 없는 배포 날짜를 묻는 함정 문제 하나에 점수가 갈렸죠. "잘 된다"를 숫자로 재야 하는 이유예요.

WHAT YOU BUILD

마지막에는 이런 걸 만듭니다

7편 · 브라우저에서 보는 실시간 로그

7편 실제 녹화: 브라우저에 회차별 진행 상황이 한 줄씩 올라오는 화면

같은 루프를 FastAPI 서버에 올려, 모델이 한 회차를 끝낼 때마다 진행 상황이 한 줄씩 올라오게 합니다. 루프는 그대로 두고 바깥 껍데기만 바꾸는 거죠.

6편 · 평가 점수표

6편 평가 24번 실행 결과 표

평가 세트를 여러 번 돌려 통과율·평균 비용·평균 호출 수를 냅니다. 녹화에서는 24번 실행에 22번 통과, 전체 실제 청구액은 $0.005959였어요.

CURRICULUM

본편 9개 + 과제 해설 8개

1~8편 본편 끝에 과제가 세 개씩 나오고, 바로 다음 수업이 그 과제를 푸는 해설 영상입니다. 먼저 혼자 풀어 보고, 막히면 해설을 보세요. 0편과 1편은 로그인하면 결제 전에도 볼 수 있습니다.

5개 섹션 · 17개 수업 · 2시간 43분

0. 오리엔테이션1개 수업 · 11분
  1. 01오리엔테이션: 무엇을 만들고 무엇이 필요한가미리보기이번 강의에서 만들 것(8편의 코딩 에이전트, 7편의 웹 화면)과 에이전트 부품 8가지, 필요한 기초 지식을 훑고 실습 준비를 점검합니다.자료 2개10:59
1. 에이전트의 뼈대: 루프와 도구4개 수업 · 33분
  1. 02에이전트는 결국 while 문이다 (tool_calls 루프)미리보기도구가 없으면 모델은 글만 냅니다. 도구를 알려주면 tool_calls라는 요청서를 쓰고, 그 요청을 실행해 돌려주는 while 문을 붙이면 에이전트가 됩니다.자료 1개6:20
  2. 03[과제 해설] 1편: 3단계 질문·description·list_files1편 과제 세 개(파일 세 개를 거쳐야 답이 나오는 질문, description 짧게 바꾸기, list_files 도구 추가)를 풀어 봅니다. 영상을 보기 전에 먼저 직접 풀어 보세요.자료 1개7:16
  3. 04도구 설계: 등록표와 description이 바꾸는 행동read_file·list_files·write_file을 도구 등록표(dict)로 묶고, 같은 질문에 나쁜 설명과 좋은 설명을 줬을 때 모델의 호출이 어떻게 달라지는지 비교합니다.자료 1개11:20
  4. 05[과제 해설] 2편: search_text·결과 자르기·호출 비용search_text 도구 만들기, 너무 긴 결과를 잘라 돌려주기, 회차마다 보내는 글자 수 세기를 풉니다.자료 1개8:20
2. 실패·비용과 기억4개 수업 · 39분
  1. 06실패와 비용: 안전장치·재시도·실제 청구액무한 반복, 같은 호출 반복, 깨진 JSON, 없는 도구, API 오류를 일부러 만들고 최대 회차·비용 상한·반복 감지·재시도로 막아 봅니다. usage.cost로 실제 청구액도 확인합니다.자료 1개12:41
  2. 07[과제 해설] 3편: 비용 CSV·DeepSeek vs GLM·토큰 줄이기회차별 비용을 CSV로 남기고, 같은 질문을 DeepSeek과 GLM으로 돌려 비교하고, 오래된 도구 결과를 줄여 입력 토큰을 아낍니다.자료 1개8:36
  3. 08기억: 세션 저장·오래된 결과 줄이기·요약·메모 도구messages가 곧 단기 기억이라 계속 커집니다. 세션 저장·이어 하기, 오래된 tool 결과 생략, 앞부분 요약, save_note/recall_notes 메모 도구까지 만들어 봅니다.자료 1개11:54
  4. 09[과제 해설] 4편: 메모 날짜·메모 지우기·저장 전 확인메모에 날짜 붙이기, 오래된 메모를 지우는 도구, 저장하기 전에 사람에게 묻기를 풉니다.자료 1개6:09
3. 사람 승인과 평가4개 수업 · 38분
  1. 10사람 승인: diff 미리 보기·허용 목록파일 쓰기·명령 실행 같은 위험한 도구는 실행 전에 사람에게 묻습니다. 바뀔 내용을 diff로 보여 주고, 거절도 결과로 모델에게 돌려줍니다.자료 1개10:35
  2. 11[과제 해설] 5편: 허용 목록·항상 허용·승인 기록허용 목록을 넓히는 법, "이번 세션 동안 항상 허용" 옵션, 승인 기록 남기기를 풉니다.자료 1개7:57
  3. 12평가: 평가 세트로 통과율·비용 재기같은 질문도 결과가 달라지니 한두 번 돌려 보고 판단하면 안 됩니다. cases.json으로 평가 세트를 만들고 자동 채점해 통과율·평균 비용·평균 호출 수를 냅니다.자료 1개12:35
  4. 13[과제 해설] 6편: 설명 고치기·케이스 추가·yield실패한 케이스를 보고 도구 설명을 고쳐 통과율 올리기, 케이스 추가하기, yield로 진행 상황을 밖으로 내보내기(7편 준비)를 풉니다.자료 1개6:41
4. 웹 화면과 종합 프로젝트4개 수업 · 41분
  1. 14웹 화면: FastAPI·SSE로 회차별 실시간 로그루프를 run_agent 제너레이터로 분리하고 FastAPI로 감싸 브라우저에서 회차별 진행 상황을 실시간으로 봅니다. 루프는 그대로, 바깥 껍데기만 바뀝니다.자료 1개13:05
  2. 15[과제 해설] 7편: 웹 승인 버튼·비용 표시·대화 이어 하기웹 화면에 승인 버튼 붙이기(5편 연결), 비용 이벤트 표시(3편 연결), 대화 이어 하기(4편 연결)를 풉니다.자료 1개8:30
  3. 16종합: 실패하는 테스트를 고치는 미니 코딩 에이전트1~7편 부품을 한 파일에 모아, 테스트를 돌리고 → 실패를 읽고 → diff를 보여 주며 승인받아 고치고 → 다시 테스트하는 에이전트를 완성합니다. eval_fix.py로 버그 3종을 고치는지 평가도 합니다.자료 1개13:23
  4. 17[과제 해설] 8편: 버그 추가·항상 허용·반복 감지버그를 하나 더 심어 평가에 추가하기, "이번 세션 동안 항상 허용", 같은 호출 반복 감지를 풉니다.자료 1개6:13

WHAT YOU GET

영상만 있는 강의가 아닙니다

영상 17개, 약 2시간 43분

본편 9개(0~8편, 1시간 43분)와 과제 해설 8개(약 1시간). 영상에는 자막이 들어가 있고, 배경 음악은 없습니다.

PDF 20개, 모두 228쪽

편마다 글 튜토리얼과 과제 풀이(193쪽)에, 입문자를 위한 부록 2개(파이썬 기초 문법 정리 19쪽 · 에이전트 기초 개념 정리 16쪽)를 더했습니다.

공개 코드 저장소

github.com/dante01yoon/agent-from-scratch의 python/ 폴더. 편마다 독립 폴더라 어느 편부터 봐도 실행됩니다.

과제 24개 정답 코드

1~8편 과제 세 개씩, 모두 정답 코드와 해설 영상이 있습니다. 3편 연습용 가짜 서버, 8편 버그를 심은 샘플 프로젝트와 평가 스크립트도 함께예요.

수업 자료 21개 (PDF 20 · ZIP 1)

수강 신청 후 각 수업 화면의 ‘수업 자료’에서 내려받을 수 있습니다.

  • primer-python-basics.pdf
  • primer-agent-concepts.pdf
  • agent-from-scratch-code.zip

FOR YOU?

이 강의가 맞는지 먼저 확인해 보세요

이런 분께 추천해요

  • Python 기초는 알지만 AI API로 무언가를 만들어 본 적은 없는 개발자
  • 프레임워크로 에이전트를 만들어 봤는데, 그 안에서 무슨 일이 일어나는지 궁금한 분
  • 코딩 에이전트를 매일 쓰면서 "이게 어떻게 돌아가지?"가 궁금했던 분
  • 사내 자동화용 작은 에이전트를 만들고, 비용과 실패를 스스로 통제하고 싶은 분

이런 분께는 맞지 않아요

  • Python을 처음 배우는 분. 함수·dict·반복문은 안다고 가정합니다(0편에서 짧게 다시 훑기는 해요)
  • LangChain·LangGraph 같은 특정 프레임워크 사용법을 배우고 싶은 분
  • 모델 학습·파인튜닝이나 RAG(벡터 검색)를 지금 배우고 싶은 분
  • 배포·운영까지 다루는 실서비스 강의를 찾는 분. 7·8편 서버는 교육용으로 내 컴퓨터에서만 엽니다

SETUP & COST

수강 환경과 실습 비용

API 비용이 걱정되시죠? 강의를 따라 한 번씩 실행하면 편당 1센트 안팎이었습니다. 아래는 2026-10-04 OpenRouter 실제 청구액이에요.

항목내용
OSmacOS·Linux에서 녹화·검증. Windows는 WSL(Ubuntu) 권장
Python3.10 이상, 패키지 관리는 uv
SDKOpenAI Python SDK, 7편은 FastAPI
모델OpenRouter 경유 DeepSeek V4 Pro(기본), GLM 5.3 Flash(대안). MODEL 한 줄로 교체
계정OpenRouter API 키 (크레딧 충전 필요)
실습실제 청구액
1편 · 실습 파일 세 개를 한 번씩$0.000704
4편 · 본편 파일 다섯 개를 한 번씩$0.0019
6편 · 평가 24번 실행$0.005959
7편 · 웹에서 질문 한 번 (호출 3번)$0.000195
8편 · 에이전트가 테스트를 한 번 고치기$0.000560~0.000596

반복 실험까지 포함해 제작 중 가장 많이 든 편도 약 $0.20이었습니다. 모델 ID와 가격은 바뀌니 실습 전에 OpenRouter에서 다시 확인하세요.

INSTRUCTOR

강사 소개

강사

단테

단테의 From Scratch

직접 만들고, 직접 돌려 보고, 숫자로 말한다. 프레임워크 없이 바닥부터 만들고, 실제 API로 실행해 녹화하고, 결과는 실제 청구액·통과율 같은 숫자로 보여 줍니다. 예상과 다른 결과가 나오면 그대로 공개합니다.

From Scratch는 시리즈입니다. 이번 #1은 입문이고, 이 강의에는 입문 범위의 보강만 업데이트로 더해 갑니다. 실전(MCP·여러 에이전트·검색/RAG), 운영(배포·모니터링·평가 자동화), 프레임워크 비교는 각각 별도 강의로 만들 계획입니다(모두 예정, 공개 날짜 미정).

FAQ

자주 묻는 질문

API 비용이 얼마나 드나요?

강의를 따라 한 번씩 실행하면 편당 1센트 안팎이었습니다(2026-10-04 실제 청구액). 3편에서 회차·비용 상한을 거는 법을 배우니, 실험을 크게 늘리기 전에 3편까지 먼저 보세요. OpenRouter는 크레딧을 먼저 충전해 쓰는 방식이라 최소 충전 금액은 OpenRouter 화면에서 확인하세요.

영상 속 모델이나 가격이 지금과 다르면요?

.env의 MODEL 한 줄만 바꾸면 도구 호출을 지원하는 다른 모델로 돌릴 수 있습니다. 6편에서 만드는 평가 스크립트로 새 모델이 기존만큼 잘하는지 숫자로 확인할 수도 있어요.

Windows에서도 되나요?

코드는 Python이라 대부분 그대로 돕니다. 다만 영상과 튜토리얼의 명령은 macOS·Linux 셸 기준이고, 5편 명령 실행 도구가 Unix 명령을 써서 WSL(Ubuntu)을 권합니다.

중간 편부터 들어도 되나요?

네. 코드가 편마다 독립 폴더라 어느 편부터 실행해도 됩니다. 다만 1편의 루프 구조는 모든 편의 바탕이라 1편은 꼭 보길 권해요.

수강 기한은 얼마나 되나요?

결제일로부터 12개월 동안 들을 수 있습니다. 미리보기(0편·1편)는 로그인하면 결제 전에도 볼 수 있습니다.

수업 자료는 어디서 받나요?

수강 신청 후 각 수업 화면의 "수업 자료"에서 PDF와 코드 zip을 내려받습니다.

영상의 모델 ID·가격·청구액은 2026-10-04 OpenRouter 기준이고, 이 페이지의 숫자는 모두 강의 제작 중 실제로 실행하고 녹화한 기록에서 가져왔습니다.

※ 명확한 음성 전달을 위해, 제작·검토를 마친 대본을 강사 본인 목소리 기반의 음성 합성(TTS)으로 읽었습니다.

₩80,000