이 트랙은 지금까지와 결이 다릅니다. 1~17회차가 '완성된 AI·도구를 잘 쓰는 법'이었다면, 여기서부터는 그 기능들을 '코드로 직접 만드는 법'입니다. RAG·에이전트·평가·서빙을 남의 도구가 아니라 내 코드로 구현해, '도구를 쓰는 사람'에서 'AI 시스템을 만드는 엔지니어'로 넘어갑니다. 실습장은 특정 레포가 아니라 '여러분이 맨바닥부터 만드는 프로젝트' — 트랙 내내 '내 자료로 답하는 AI 비서'(RAG 챗봇)를 한 단계씩 쌓아, 완성하면 그대로 포트폴리오가 됩니다. 오해 마세요 — 이 트랙은 AI를 끊는 게 아니라 오히려 더 많이 씁니다. 다만 '결과를 이해하고 판단하는' 운전대를 내가 잡는 게 다릅니다. 그래서 토대(18~19회차)만 의도적으로 직접 써보고, 20회차부터는 AI로 빠르게 만들되 검증은 내가 합니다. 18회차는 그 토대: AI가 짜준 코드를 '줄 단위로 이해하고 고치는' 힘을 기릅니다.
🧭 이 트랙은 뭐가 다른가 — '쓰기'에서 '만들기'로
7~10회차에서 Claude Code로 앱을 만들 때, 코드는 대부분 AI가 짰습니다. 그걸로 충분한 일도 많지만 — RAG 품질을 높이거나, 평가 점수를 만들거나, 서빙을 안정화하려면 '왜 이렇게 도는지'를 내가 알아야 합니다. 이 트랙의 목표는 한 문장입니다: AI가 짠 코드를 줄 단위로 설명·수정할 수 있는 상태.
- 전제 — 7~10회차에서 터미널·Git·Claude Code를 한 번은 써봤다(완전 초심자는 그 회차부터).
- 방식 — 글로만 읽지 않는다. 매 회차 이 레포에 동작하는 기능을 추가한다.
- 도달점 — AI로 빠르게 만들되, 그 결과를 줄 단위로 설명·수정할 수 있게 된다.
🎮 'AI는 적극 쓰되, 운전대는 내가' — 이 트랙 4원칙
오해부터 풀고 갑니다 — 이 트랙은 'AI 금지'가 아닙니다. AI는 계속, 오히려 더 많이 씁니다. 다만 그 결과를 '이해하고 판단하는 운전대'를 내가 잡는다는 게 차이예요.
- ① 토대는 직접 먼저 → 그다음 AI로 리뷰·개선 — 기초 근육이 잡히는 토대 회차(20~21)에서만 손이 느려도 직접 써본다. 뒤로 갈수록 AI로 빠르게 만든다.
- ② 만든 건 내가 검증 — AI가 짠 코드도 '왜 이렇게 도는지' 설명·수정할 수 있어야 한다. 특히 RAG·평가·서빙은 AI가 '돌아가지만 조용히 틀린' 코드를 짜기 쉬운 영역.
- ③ 프로젝트 기반 — 모든 실습이 AI Radar에 실제 기능을 남긴다(튜토리얼 따라치기로 끝내지 않기).
- ④ 숫자로 닫기 — '되는 것 같다'가 아니라 측정 가능한 완료 기준으로 끝낸다.
✂️ 지금은 안 할 것 (초반 시간 낭비 방지)
- 쿠버네티스·분산학습 깊게 파기 ❌ (트랙 뒤에서 맛만)
- 모델 파인튜닝·사전학습부터 시작 ❌ (현업 AI 플랫폼 일의 대부분은 기성 모델 활용 — 11회차 'RAG vs 파인튜닝' 참고)
- 수학 교과서 완독 후 시작 ❌ (필요한 개념만 그때그때)
🐍 배울 것 ① 파이썬 기본 — AI 엔지니어의 공용어
AI·데이터 생태계의 사실상 표준 언어는 파이썬입니다(라이브러리가 다 여기 모여 있어요). 5회차에서 HTML·CSS·JS를 '개념만' 봤듯, 여기선 파이썬을 '코드를 읽고 고칠 만큼'만 익힙니다. 외울 필요 없이 아래 다섯 감만 잡으면 됩니다.
- 자료구조 — list[], dict{}, set, tuple. JSON의 배열·객체와 거의 1:1.
- 함수 — def 이름(인자): … return. 반복되는 일을 묶는 단위.
- 예외 처리 — try / except. 에러가 나도 프로그램이 통째로 죽지 않게.
- async / await — 느린 작업(API 호출)을 기다리는 동안 멈추지 않게. JS의 async와 같은 개념.
- 타입 힌트 — def f(x: int) -> str. '이 칸엔 숫자, 결과는 문자열'이라고 적어두는 메모(버그·자동완성에 유리).
# 파이썬 한눈에 — JS를 안다면 거의 번역만 하면 된다
from typing import Optional
def summarize(tools: list[dict], top: int = 3) -> list[str]:
'''점수 높은 순으로 상위 top개 이름만 반환'''
try:
ranked = sorted(tools, key=lambda t: t['score'], reverse=True)
return [t['name'] for t in ranked[:top]]
except KeyError as e:
print(f'필드 누락: {e}') # 에러를 삼키지 말고 남긴다
return []
📦 배울 것 ② 가상환경(venv)·pip — 프로젝트별 도구함 격리
파이썬 라이브러리를 전역에 막 깔면 프로젝트끼리 버전이 충돌합니다. venv는 '이 프로젝트 전용 도구함'을 따로 만드는 것 — 5회차에서 본 '환경 격리'의 파이썬판입니다.
- 프로젝트 폴더에서: python3 -m venv .venv (전용 도구함 생성)
- 켜기: source .venv/bin/activate (맥·리눅스) — 프롬프트 앞에 (.venv) 표시됨
- 설치: pip install anthropic openai (필요한 라이브러리)
- 기록: pip freeze > requirements.txt (남이 같은 환경을 재현할 수 있게)
🧰 배울 것 ③ 터미널·Git·.env — 7~8회차 복습 + 코드 관점
- 터미널 — cd / ls / 실행. 7회차에서 이미 사용. 이제 'python script.py'로 직접 실행한다.
- Git — add / commit / branch / diff. 8회차 복습. 이제 'AI가 만든 diff'를 내가 읽고 판단한다.
- .env + python-dotenv — API 키를 코드 밖에. JS에서 .env 로더가 하던 일을 파이썬에선 load_dotenv()로.
- 에러 읽기 — 빨간 스택트레이스를 통째로. 8회차의 '에러를 복사해 Claude에' 습관에 더해, 이제 첫 줄·끝 줄을 내가 먼저 해석한다.
🔁 비동기·fetch 한 번 짚기 — API 호출의 공통 형태
7~9회차에서 앱이 API를 부르는 걸 봤죠. 코드로 직접 만들 때도 형태는 같습니다 — '요청 → 응답(보통 JSON) → 값 꺼내기'. 아래에서 만들 파이썬 스타터가 정확히 그 흐름이라, 이 한 파일만 완전히 이해하면 19회차의 LLM API 호출도 같은 골격으로 읽힙니다. (느린 호출을 동시에 여러 개 할 땐 async/await를 쓰지만, 지금은 한 번에 하나씩이면 충분.)
🔧 만들 것 — AI가 짜준 스타터를 이해하고 → 직접 고치기
오늘의 실습입니다. 트랙 관통 프로젝트('내 자료로 답하는 AI 비서')의 맨 앞 벽돌 — '외부에서 데이터를 받아 다루는' 기본기를 깝니다. 아래 스타터는 AI에게 받았다고 치고(또는 직접 받아서), 먼저 내가 줄별로 이해한 뒤 직접 고쳐 확장합니다. API 키도 설치도 필요 없어 바로 돌아갑니다.
# starter.py — AI가 짜준 출발점. 공개 무료 API(Open-Meteo, 키 불필요)에서
# 서울 날씨를 받아 weather.json으로 저장한다. 먼저 줄별로 이해해보자.
import json
import urllib.request
URL = ('https://api.open-meteo.com/v1/forecast'
'?latitude=37.57&longitude=126.98¤t=temperature_2m')
def fetch_weather() -> dict:
with urllib.request.urlopen(URL) as res: # API에 요청 → 응답 받기
return json.loads(res.read()) # JSON 문자열 → 파이썬 dict
if __name__ == '__main__':
data = fetch_weather()
temp = data['current']['temperature_2m'] # 중첩 dict에서 값 꺼내기
with open('weather.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f'서울 현재 기온: {temp}도 → weather.json 저장')
- ① 그대로 실행해 본다: 'python3 starter.py' → weather.json이 생기는지 확인.
- ② 이번 실습만 AI 없이, 각 줄에 '무엇을·왜' 한국어 주석을 직접 단다. 막히는 줄만 AI에 '왜 필요해?'라고 물어 확인('읽는 근육' 만들기).
- ③ 직접 확장 — 도시를 하나 더(예: 부산 latitude=35.18, longitude=129.08) 추가해 두 도시 결과를 한 파일에 저장하도록 고친다.
- ④ 일부러 버그(예: 좌표 빼먹기)를 내보고, 빨간 스택트레이스의 첫 줄·끝 줄만 보고 원인을 찾아 고친다.
✅ 완료 기준 (체크포인트 — 숫자로 닫기)
- 스타터의 모든 줄에 '무엇을·왜' 주석을 내 말로 달았다 (빈 줄 없음).
- 도시 추가 확장이 동작해, 결과 JSON에 두 도시가 모두 들어간다.
- AI 없이, 일부러 심거나 우연히 만난 버그 1개를 스택트레이스만 보고 스스로 고쳤다.
📚 자료
- Andrej Karpathy — 'Intro to Large Language Models', 'Let's build GPT' (큰 그림·개념 잡기)
- 파이썬 공식 튜토리얼(docs.python.org) — 필요한 부분만 골라 읽기
- Git 공식 핸드북(git-scm.com/book) — add·commit·branch·diff 위주
📌 18회차 핵심
- 이 트랙은 'AI 금지'가 아니라 'AI를 쓰되 운전대는 내가'. 도달점은 'AI가 짠 코드를 줄 단위로 설명·수정'.
- 파이썬은 'AI 공용어' — JS를 안다면 문법 다른 사촌 정도. 읽고 고칠 만큼만.
- venv·pip·.env로 환경을 격리하고 비밀은 코드 밖에 둔다.
- 오늘의 결과물: 스타터 스크립트 완전 해설 + 직접 확장(도시 추가) — 트랙 프로젝트의 첫 벽돌.