⚡ AI 인텔리전스 레이더
🧪 전문가반 · 코드로 만드는 AI 엔지니어

🧪 파트 6 · 코드로 직접 만들기

18회차 · 코드 토대 — AI가 짠 코드를 직접 읽고 고치기

백두산 (Doosan Baek) · 게시 2026-06-13 · 최종 수정 2026-07-10

이 회차에서 배우는 것

🎯 트랙 목표'도구로 쓰기'에서 '코드로 만들기'로 — AI 보조 탈피
🐍 파이썬 기본자료구조·함수·예외·async·타입힌트, venv·pip
🧰 개발 기본기터미널·Git·.env 복습 + JS 비동기·fetch 다시 보기
🔧 실습AI가 짜준 50줄 파이썬 스크립트를 이해·수정·확장
✅ 완료 기준AI 없이 100줄 스크립트 버그를 스스로 잡기

이 트랙은 지금까지와 결이 다릅니다. 1~17회차가 '완성된 AI·도구를 잘 쓰는 법'이었다면, 여기서부터는 그 기능들을 '코드로 직접 만드는 법'입니다. RAG·에이전트·평가·서빙을 남의 도구가 아니라 내 코드로 구현해, '도구를 쓰는 사람'에서 'AI 시스템을 만드는 엔지니어'로 넘어갑니다. 실습장은 특정 레포가 아니라 '여러분이 맨바닥부터 만드는 프로젝트' — 트랙 내내 '내 자료로 답하는 AI 비서'(RAG 챗봇)를 한 단계씩 쌓아, 완성하면 그대로 포트폴리오가 됩니다. 오해 마세요 — 이 트랙은 AI를 끊는 게 아니라 오히려 더 많이 씁니다. 다만 '결과를 이해하고 판단하는' 운전대를 내가 잡는 게 다릅니다. 그래서 토대(18~19회차)만 의도적으로 직접 써보고, 20회차부터는 AI로 빠르게 만들되 검증은 내가 합니다. 18회차는 그 토대: AI가 짜준 코드를 '줄 단위로 이해하고 고치는' 힘을 기릅니다.

🧭 이 트랙은 뭐가 다른가 — '쓰기'에서 '만들기'로

7~10회차에서 Claude Code로 앱을 만들 때, 코드는 대부분 AI가 짰습니다. 그걸로 충분한 일도 많지만 — RAG 품질을 높이거나, 평가 점수를 만들거나, 서빙을 안정화하려면 '왜 이렇게 도는지'를 내가 알아야 합니다. 이 트랙의 목표는 한 문장입니다: AI가 짠 코드를 줄 단위로 설명·수정할 수 있는 상태.

🎮 'AI는 적극 쓰되, 운전대는 내가' — 이 트랙 4원칙

오해부터 풀고 갑니다 — 이 트랙은 'AI 금지'가 아닙니다. AI는 계속, 오히려 더 많이 씁니다. 다만 그 결과를 '이해하고 판단하는 운전대'를 내가 잡는다는 게 차이예요.

✂️ 지금은 안 할 것 (초반 시간 낭비 방지)

🐍 배울 것 ① 파이썬 기본 — AI 엔지니어의 공용어

AI·데이터 생태계의 사실상 표준 언어는 파이썬입니다(라이브러리가 다 여기 모여 있어요). 5회차에서 HTML·CSS·JS를 '개념만' 봤듯, 여기선 파이썬을 '코드를 읽고 고칠 만큼'만 익힙니다. 외울 필요 없이 아래 다섯 감만 잡으면 됩니다.

# 파이썬 한눈에 — 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회차에서 본 '환경 격리'의 파이썬판입니다.

  1. 프로젝트 폴더에서: python3 -m venv .venv (전용 도구함 생성)
  2. 켜기: source .venv/bin/activate (맥·리눅스) — 프롬프트 앞에 (.venv) 표시됨
  3. 설치: pip install anthropic openai (필요한 라이브러리)
  4. 기록: pip freeze > requirements.txt (남이 같은 환경을 재현할 수 있게)

🧰 배울 것 ③ 터미널·Git·.env — 7~8회차 복습 + 코드 관점

🔁 비동기·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&current=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 저장')
  1. ① 그대로 실행해 본다: 'python3 starter.py' → weather.json이 생기는지 확인.
  2. ② 이번 실습만 AI 없이, 각 줄에 '무엇을·왜' 한국어 주석을 직접 단다. 막히는 줄만 AI에 '왜 필요해?'라고 물어 확인('읽는 근육' 만들기).
  3. ③ 직접 확장 — 도시를 하나 더(예: 부산 latitude=35.18, longitude=129.08) 추가해 두 도시 결과를 한 파일에 저장하도록 고친다.
  4. ④ 일부러 버그(예: 좌표 빼먹기)를 내보고, 빨간 스택트레이스의 첫 줄·끝 줄만 보고 원인을 찾아 고친다.

✅ 완료 기준 (체크포인트 — 숫자로 닫기)

📚 자료

📌 18회차 핵심