교재 목차
MODULE 15 / 16
15
Part 15 · 개발 실전·운영

잘 굴러가게, 그리고 안전하게

에이전트에게 일을 맡기는 법은 익혔다. 이제 그 결과가 새벽 세 시에도 무너지지 않게 만들 차례다. 깃으로 되돌릴 길을 깔고, 에러를 사람보다 빨리 추적하고, 코드를 자동으로 검수하고, 새는 비밀을 막고, 어떤 일에 어떤 모델을 붙일지 고른다.


Lesson 63

깃과 버전관리

에이전트에게 코드를 맡기기 전에 가장 먼저 깔아야 할 건 멋진 기능이 아니다. 언제든 되돌아갈 수 있는 ‘세이브 지점’이다.

1모듈에서 ‘되돌릴 수 있으면 과감해진다’고 했다. 깃은 그 되돌리기를 코드 세계에서 가능하게 만드는 장치다.

깃은 파일의 시간여행 장치에 가깝다. 작업이 일정 단계에 이를 때마다 도장을 찍어 두면, 나중에 어느 도장이든 골라 그 시점으로 통째로 돌아갈 수 있다. 그 도장 하나하나를 커밋(commit)이라 부른다.

에이전트가 한 번에 수십 개 파일을 고치는 시대에는 이 도장이 안전벨트가 된다. 마음에 안 들면 통째로 직전 커밋으로 되돌리면 그만이기 때문이다.

네 동작이면 충분하다

깃의 명령어는 수십 개지만, 에이전트와 일할 때 실제로 쓰는 건 손에 꼽는다. 흐름만 머리에 넣으면 된다.

클로드 코드는 이 흐름을 알아서 처리한다. “지금까지 작업 커밋해줘”라고만 해도 바뀐 파일을 살펴 적절한 메시지로 도장을 찍는다. 다만 무엇을 커밋에 담을지는 사람이 정해 주는 편이 안전하다.

깃 흐름 — 작업 → 커밋 → 리뷰 → 배포의 한 방향 흐름
그림 1. 깃 흐름. 작업한 변경을 커밋으로 박제하고, 리뷰로 검수한 뒤 배포로 흘려보낸다. 막히면 직전 커밋으로 되돌린다.
브랜치는 ‘평행 우주’

큰 작업은 브랜치(branch)를 따로 떼어 한다. 본줄기(메인)는 그대로 두고 옆 가지에서 마음껏 실험하다, 잘되면 합치고(merge) 망치면 가지째 버린다. 에이전트에게 모험적인 작업을 맡길 때 특히 유용하다.

붙여넣기 프롬프트 · 안전한 커밋 습관
지금 변경사항을 커밋해줘.
- 먼저 git status로 무엇이 바뀌었는지 목록으로 보여줘
- 관련 없는 변경은 한 커밋에 섞지 말고, 주제별로 나눠서 커밋해줘
- 커밋 메시지는 한국어로 "무엇을 왜" 한 줄씩
- 커밋 전에 어떤 파일을 어느 커밋에 담을지 계획을 먼저 보여주고,
  내가 "진행"이라고 답하면 그때 커밋해줘
브랜치 분기·되돌리기 변형 포함 전체는 prompts/m15/01-안전한-커밋.md
실습 63

첫 도장 찍고 되돌려보기

  1. 연습용 폴더에서 에이전트에게 “여기를 깃 저장소로 만들고 지금 상태를 첫 커밋으로 찍어줘”라고 한다.
  2. 파일 하나를 일부러 망가뜨린 뒤 “방금 바꾼 파일을 직전 커밋 상태로 되돌려줘”라고 한다.
  3. 되돌아왔는지 파일을 열어 확인한다.

목표: ‘도장 찍기 → 망가뜨리기 → 되돌리기’를 한 번 성공시켜, 깃이 진짜 안전벨트임을 손으로 확인하는 것.

한 문장 요약

커밋은 코드 세계의 세이브 지점이다.

세이브가 있으면 실패가 두렵지 않다. 에이전트에게 과감히 맡기는 자신감은 ‘언제든 직전 커밋으로 돌아갈 수 있다’는 데서 나온다.


Lesson 64

디버깅·에러 해결

에러 메시지는 욕설이 아니라 단서다. 그리고 에이전트는 그 단서를 사람보다 끈질기게 따라간다.

문제는 ‘에러를 없애는 능력’이 아니라 ‘왜 났는지 정확히 짚는 능력’이다. 원인을 모른 채 고치면 다른 곳이 터진다.

초보일수록 에러 창을 보면 곧장 코드를 바꾸고 싶어진다. 하지만 좋은 디버깅은 손이 아니라 눈에서 시작한다. 먼저 재현하고, 다음에 원인을 좁히고, 마지막에 고친다. 이 순서를 건너뛰면 ‘고친 것 같은’ 착각만 쌓인다.

에이전트에게 디버깅을 맡기는 법

핵심은 에이전트에게 ‘답’이 아니라 ‘증상’을 주는 것이다. 무엇을 했고, 무엇을 기대했고, 실제로 뭐가 나왔는지 — 이 세 가지를 던지면 추적이 시작된다.

  1. 증상을 정확히 전달한다“안 돼요”는 단서가 아니다. 실행한 명령, 기대한 결과, 실제로 나온 에러 메시지를 그대로 붙여넣는다.
  2. 가설부터 세우게 한다곧장 고치게 하지 말고 “원인 후보를 가능성 순으로 나열해줘”라고 한다. 추측이 아니라 추적이 되도록.
  3. 가장 작은 재현을 만든다문제를 일으키는 최소한의 조건으로 좁힌다. 범위가 줄면 원인은 저절로 드러난다.
  4. 고치고, 다시 깨지지 않게 못 박는다같은 에러가 재발하지 않도록 검증(테스트)을 하나 남긴다.
자주 하는 실수

에러 메시지를 “대충 이런 에러가 나요”라고 요약해서 전달하면 추적이 빗나간다. 메시지·줄 번호·스택은 토씨 하나 빼지 말고 통째로 붙여넣는 게 가장 빠른 길이다. 에이전트에게 정보는 많을수록 좋다.

실습 64

가설 → 재현 → 수정

  1. 작은 코드에 일부러 버그를 심는다(예: 변수명 오타).
  2. 실행해 에러를 띄우고, 그 메시지를 통째로 에이전트에게 준다.
  3. “바로 고치지 말고 원인 후보부터 나열해줘”라고 요청한 뒤, 가장 그럴듯한 가설을 골라 검증시킨다.
  4. 수정 후 같은 버그를 막을 검증 하나를 남기게 한다.

목표: ‘고치기’보다 ‘원인 짚기’가 먼저라는 리듬을 익히는 것. 추적의 습관이 디버깅 실력이다.

한 문장 요약

고치기 전에, 왜 났는지부터 짚는다.

증상을 정확히 주고 가설을 먼저 세우게 하면, 에이전트는 추측을 멈추고 추적을 시작한다. 그래야 한 번 고친 버그가 두 번 돌아오지 않는다.


Lesson 65

코드리뷰·검증 자동화

에이전트가 짠 코드를 또 다른 에이전트에게 검수시킨다. 만든 사람과 보는 사람을 나누는 순간, 품질이 한 단계 올라간다.

사람 세계에서도 자기가 쓴 글의 오타는 잘 안 보인다. 코드도 같다. 그래서 ‘짠 쪽’과 ‘보는 쪽’을 분리한다.

이걸 11모듈의 ‘적대적 검증’과 같은 원리로 보면 된다. 한 에이전트가 코드를 만들면, 역할이 다른 에이전트(또는 같은 에이전트의 ‘리뷰어 모드’)가 트집을 잡는 눈으로 다시 읽는다. 칭찬이 아니라 결함을 찾는 게 임무다.

여기에 더해, 사람이 매번 확인하기 번거로운 검사는 자동으로 굴러가게 만든다. 커밋할 때마다 테스트가 돌고, 형식이 점검되고, 위험한 패턴이 걸러지게 해두는 것이다.

두 층의 안전망

9모듈에서 배운 훅(hook)이 여기서 빛난다. “커밋 직전에 테스트를 돌리고, 실패하면 커밋을 막아라” 같은 규칙을 훅으로 걸어 두면, 깜빡해서 깨진 코드를 올리는 사고가 구조적으로 사라진다.

만든 쪽과 보는 쪽을 섞지 말 것

“이 코드 좋아?”라고 물으면 에이전트는 칭찬하기 쉽다. “리뷰어로서 결함만 찾아라”라고 역할을 못 박아야 비판적 시선이 켜진다. 만든 맥락과 검수 맥락을 분리하는 것 자체가 품질 장치다.

붙여넣기 프롬프트 · 적대적 코드리뷰
지금부터 너는 깐깐한 시니어 리뷰어다. 방금 변경된 코드를 검수해줘.
- 칭찬은 생략하고, 결함·위험·놓친 경우만 지적해줘
- 각 지적에 심각도(높음/중간/낮음)를 붙여줘
- 보안·경계값(빈 값, 음수, 아주 큰 값)·실패 처리를 특히 집중해서 봐줘
- 마지막에, 사람이 매번 확인하기 번거로운 검사는
  어떤 자동 검증(테스트·훅)으로 못 박을지 제안해줘
검증 자동화(훅 연동) 변형 포함 전체는 prompts/m15/02-적대적-코드리뷰.md
실습 65

리뷰어 모드로 내 코드 털기

  1. 레슨 64에서 고친 코드를 가져온다.
  2. 위 프롬프트를 붙여넣어 ‘리뷰어 모드’로 결함만 지적받는다.
  3. 지적 중 ‘높음’ 하나를 골라 고치고, 같은 문제를 막을 검증을 추가하게 한다.

목표: ‘만든 맥락’과 ‘검수 맥락’을 분리하면 보이지 않던 결함이 드러난다는 걸 체감하는 것.

한 문장 요약

만드는 눈과 보는 눈을 나누면, 품질이 올라간다.

리뷰는 사람·에이전트의 판단으로, 검증은 기계의 자동 규칙으로. 두 층을 겹치면 깜빡함과 자기 편애를 모두 막을 수 있다.


Lesson 66

보안 점검

사고의 90%는 화려한 해킹이 아니라, 실수로 흘린 비밀번호 한 줄에서 시작된다.

에이전트가 코드를 빠르게 만들수록, 사람이 미처 못 본 ‘새는 구멍’도 빠르게 늘어난다. 그래서 속도에 안전 점검을 한 박자 끼워 넣어야 한다.

가장 흔한 사고는 어렵지 않다. API 키나 비밀번호를 코드에 그대로 적어 두고, 그걸 깃에 커밋해 버리는 것이다. 한 번 올라간 비밀은 지워도 기록에 남는다. 그래서 비밀은 코드에 넣지 않고, 따로 보관한다(환경변수·비밀 저장소).

에이전트는 이런 점검을 지치지 않고 반복하는 데 강하다. “민감정보가 노출된 곳, 검증 없이 외부 입력을 믿는 곳을 찾아라”라고 시키면 코드 전체를 훑어 목록을 만든다.

가장 자주 새는 네 구멍

비밀 노출
API 키·비밀번호·토큰을 코드에 직접 적음. 환경변수로 빼고, 실수로 올렸으면 즉시 폐기·재발급.
입력 미검증
사용자·외부가 준 값을 그대로 믿음. 빈 값·이상한 값·악의적 값을 거른 뒤 사용.
과한 권한
필요 이상으로 넓은 접근 권한. 9모듈의 권한 사다리대로 ‘딱 필요한 만큼만’.
의존성 위험
가져다 쓴 외부 라이브러리에 알려진 취약점. 정기적으로 점검·갱신.
이미 올렸다면

비밀을 깃에 커밋한 걸 뒤늦게 알았다면, 코드에서 지우는 것으로 끝이 아니다. 해당 키·비밀번호를 즉시 폐기하고 새로 발급받아야 한다. 기록에 남은 비밀은 ‘이미 유출된 것’으로 취급하는 게 안전하다.

실습 66

새는 구멍 찾기

  1. 연습 코드에 일부러 가짜 API 키 한 줄을 박아 둔다.
  2. 에이전트에게 “민감정보 노출과 입력 미검증을 위험도 순으로 점검해줘”라고 한다.
  3. 지적받은 키를 환경변수로 분리하고, 그 파일을 깃 추적에서 빼는 것까지 시킨다.

목표: 가장 흔한 사고(비밀 노출)를 한 번 막아보며, 보안 점검을 ‘커밋 전 루틴’으로 몸에 붙이는 것.

한 문장 요약

비밀은 코드에 넣지 않는다.

화려한 공격보다 흔한 실수가 더 위험하다. 비밀을 코드 밖으로 빼고, 외부 입력을 의심하고, 권한을 좁히는 것 — 이 셋만 지켜도 사고 대부분은 막힌다.


Lesson 67

모델 선택 전략

택배 한 상자 옮기는 데 트럭을 부르지 않고, 이삿짐을 자전거에 싣지 않는다. 모델 선택도 똑같다 — 일의 무게에 맞춰 고른다.

가장 똑똑한 모델을 늘 쓰는 게 정답 같지만, 실무에서는 ‘과하지도 모자라지도 않게’ 고르는 감각이 더 중요하다. 속도·비용·정확함은 함께 가지 않기 때문이다.

클로드 모델은 크게 세 결로 나뉜다. 가장 깊이 생각하는 Opus, 균형이 좋은 Sonnet, 빠르고 가벼운 Haiku다. 이름은 바뀔 수 있어도 ‘무거운 추론 · 균형 · 경량 속도’라는 세 자리는 그대로다.

요령은 단순하다. 까다로운 설계·복잡한 디버깅·중요한 의사결정처럼 ‘틀리면 비싼’ 일에는 가장 강한 모델을. 분류·요약·간단한 변환처럼 ‘많고 가벼운’ 일에는 빠른 모델을. 그 사이의 일상 작업 대부분은 균형 모델로 충분하다.

한 작업 안에서도 섞어 쓴다

11모듈의 오케스트레이션을 떠올려 보자. 전체를 지휘하는 ‘대장’ 에이전트는 강한 모델로 두되, 잘게 쪼개 병렬로 돌리는 ‘일꾼’들은 빠른 모델로 두는 식이다. 비싼 두뇌를 꼭 필요한 자리에만 배치하는 것이다.

모델 선택 매트릭스 — Opus·Sonnet·Haiku를 일의 무게에 따라 고른다
그림 2. 모델 선택 매트릭스. 세로축은 일의 난이도, 가로축은 양·속도 요구. 어느 칸의 일이냐에 따라 붙일 모델이 달라진다.
무거움Opus어려운 설계 · 복잡한 디버깅 · 틀리면 비싼 판단
균형Sonnet일상 코딩 · 리뷰 · 대부분의 실무 작업
경량Haiku분류 · 요약 · 간단 변환 · 많고 빠르게
고르는 순서

먼저 균형 모델로 시작해 보고, 결과가 아쉬우면 더 강한 모델로 올린다. 반대로 같은 작업을 대량 반복할 거라면 더 가벼운 모델로 내려 비용·속도를 챙긴다. ‘처음부터 최강’이 아니라 ‘맞을 때까지 조절’이 실무 감각이다.

실습 67

같은 일, 두 모델

  1. 가벼운 작업 하나(예: 긴 문서 한 줄 요약)를 고른다.
  2. 균형 모델과 경량 모델로 각각 시켜 결과·체감 속도를 비교한다.
  3. 이번엔 어려운 작업 하나(예: 까다로운 로직 설계)로 바꿔, 어느 모델이 ‘값을 하는지’ 직접 느껴본다.

목표: 모델 선택을 머리가 아니라 손으로 익히는 것. 일의 무게와 모델의 무게를 맞추는 감각을 만든다.

모듈 15 마무리

일의 무게에 모델의 무게를 맞춘다.

깃으로 되돌릴 길을 깔고(63), 에러를 추적하고(64), 코드를 검수하고(65), 비밀을 지키고(66), 일에 맞는 모델을 골랐다(67). 이제 흩어진 기술을 하나로 묶을 차례 — 다음 모듈에서 통합 프로젝트로 전체 워크플로우를 완성한다.

출처 · 더 읽을거리

이 모듈의 근거 문서

  1. 문서Pro Git (한국어판)
    깃의 커밋·브랜치·되돌리기 개념을 가장 차분하게 설명하는 공개 교재. 레슨 63의 바탕.
    git-scm.com/book/ko/v2
  2. 문서Anthropic — Claude Code 공식 문서
    에이전트로 커밋·리뷰·디버깅을 굴리는 실무 흐름과 훅 연동.
    docs.anthropic.com/en/docs/claude-code
  3. 표준OWASP Top 10
    웹 애플리케이션에서 가장 흔한 보안 위험 목록. 레슨 66 점검 항목의 근거.
    owasp.org/www-project-top-ten
  4. 문서Anthropic — Models overview
    Opus·Sonnet·Haiku의 위치와 용도 비교. 레슨 67 모델 선택의 기준.
    docs.anthropic.com/en/docs/about-claude/models