/advanced/session-01
01중급과정180분 (이론 45 + 실습 135)

왜 잘 되다가 무너지는가

“AI 탓이 아니라 설계 탓입니다”

02이 차시를 마치면

  • 1.바이브 코딩에서 반복적으로 나타나는 3대 실패 유형(맥락 유실·은근한 회귀·검증 없는 완료)을 예시와 함께 구별해 설명할 수 있다.
  • 2.컨텍스트가 왜 무한한 자원이 아니라 예산처럼 유한한지 설명할 수 있다.
  • 3.에이전틱 엔지니어링이 기존 바이브 코딩과 무엇이 다른지 자신의 말로 설명할 수 있다.
  • 4.자신의 프로젝트에서 3대 실패 유형이 실제로 있었는지 점검해 진단 리포트를 작성할 수 있다.

03왜 필요한가

기본과정에서 만든 예약 접수 서비스를 두 달째 계속 고치고 있다고 해보자. 처음 몇 주는 AI에게 요청만 하면 척척 됐다. 그런데 최근엔 이상한 일이 반복된다. 지난주에 분명히 '이용자 이름은 한글만 허용해줘'라고 못박아뒀는데, 오늘 새 화면을 추가해달라고 하니 그 규칙을 까맣게 잊은 채 영문 이름도 통과되는 코드를 짜준다. 결제 화면을 새로 넣는 작업을 부탁했더니, 며칠 전엔 잘 되던 예약 취소 버튼이 어느새 눌러도 반응이 없다. 그리고 AI는 매번 '완료했습니다, 정상적으로 작동합니다'라고 자신 있게 말하지만 막상 브라우저를 열어보면 화면이 하얗게 비어 있다.

  • 규칙을 다시 설명하는 데 매번 시간을 쓰고, 그마저도 다음 세션에서 또 잊혀진다.
  • 새 기능을 넣을 때마다 예전에 되던 기능이 깨졌는지 일일이 확인해야 해서 속도가 오히려 느려진다.
  • '완료했다'는 말을 믿고 넘어갔다가 나중에 더 큰 문제로 발견돼 원인 추적에 시간이 걸린다.
  • 문제가 반복되면 'AI가 못 미덥다'는 결론으로 넘어가 버려, 정작 고쳐야 할 나의 작업 방식(설계)은 그대로 남는다.

04개념 설명

실패 유형 1 — 맥락 유실: 왜 규칙을 잊는가

AI는 대화가 길어질수록 앞부분 내용을 사람처럼 '기억'하는 게 아니라, 매번 대화 전체를 다시 읽어 들이는 방식으로 동작한다. 담을 수 있는 양(컨텍스트 윈도우)을 넘어서는 시점부터 오래된 내용이 잘리거나 요약되어 사라진다. 세션 초반에 정한 규칙이 창 뒤로 밀려나면, AI 입장에서는 '처음 듣는 요청'이 되어버린다.

사람도 마찬가지로 영향을 받는다. 새 채팅을 열 때마다 프로젝트 맥락을 처음부터 다시 설명해야 한다면, 그 설명 자체가 매번 드는 비용이다. 이 문제는 누군가 잘못해서 생기는 게 아니라 구조적으로 생기는 것이고, 다음 차시(컨텍스트 엔지니어링)에서 해결법을 다룬다.

01세션 시작규칙을 정한다
02대화가 길어짐
03컨텍스트 윈도우 초과
04규칙 소실AI에겐 처음 듣는 요청
  • 대화가 길어질수록 오래된 지시가 밀려나 사라진다
  • 새 세션을 열 때마다 맥락 설명 비용이 든다
  • '말했잖아'는 AI에게 통하지 않는다 — 파일로 남겨야 한다

실패 유형 2 — 은근한 회귀: 고치다가 부순다

새 기능을 요청하면 AI는 관련 있어 보이는 코드만 좁게 보고 수정한다. 문제는 그 '관련 있어 보이는 범위' 판단을 AI가 매번 새로 하기 때문에, 다른 기능이 같은 코드를 공유하고 있다는 사실을 놓치기 쉽다는 점이다. 결제 화면을 넣으려고 건드린 코드 한 줄이 예약 취소 버튼과 같은 함수를 쓰고 있었다면, 결제는 잘 되고 취소는 조용히 멈춘다.

더 큰 문제는 이 회귀가 에러로 나타나지 않는다는 것이다. 화면은 뜨고 버튼도 눌리지만 원하는 동작을 안 한다. 에러 메시지가 없으니 AI도, 사람도 알아채기 어렵다.

겉보기엔

화면도 뜨고 버튼도 눌린다

정상 동작하는 것처럼 보인다

실제로는

공유 코드가 조용히 깨졌다

에러 없이 깨져서 알아채기 어렵다

  • 새 기능 추가가 기존 기능을 조용히 깨뜨린다
  • 에러 없이 깨지기 때문에 알아채기 어렵다
  • 자주 커밋해두면 '언제부터 깨졌는지'를 되짚을 수 있다

실패 유형 3 — 검증 없는 완료: '됐습니다'의 함정

AI는 코드를 작성한 뒤, 그 코드가 문법적으로 말이 되면 '완료했다'고 보고하는 경향이 있다. 실제로 눌러보고, 데이터를 넣어보고, 화면에 뜨는지 확인하는 절차가 기본으로 포함되어 있지 않다. 사람도 이 말을 곧이곧대로 믿고 다음 요청으로 넘어가기 쉽다 — 특히 바쁠 때는 더더욱.

검증 없는 완료가 위험한 이유는 하나가 아니라 여러 개가 누적된다는 데 있다. 세 번째 요청에서 생긴 미검증 버그가 열 번째 요청 즈음엔 어디서 왔는지 찾기 어려운 상태가 된다.

AI 보고

"완료했습니다"

문법적으로 말이 되면 완료로 보고한다

실제로는

직접 눌러보기 전까진 증명되지 않은 상태

미검증 버그가 쌓이면 원인 추적 비용이 기하급수적으로 는다

  • '완료했습니다'는 보고이지 증명이 아니다
  • 직접 눌러보기 전까진 안 된 것으로 간주한다
  • 검증을 건너뛴 완료가 쌓이면 원인 추적 비용이 기하급수적으로 는다

컨텍스트는 예산이다, 그래서 에이전틱 엔지니어링이 필요하다

세 실패는 각기 달라 보이지만 하나의 뿌리를 공유한다 — AI에게 맥락을 매번 새로 만들어 채워 넣어야 한다는 점이다. 컨텍스트는 공짜로 무한히 쓸 수 있는 자원이 아니라, 한 세션 안에 담을 수 있는 양이 정해진 예산이다. 예산을 그때그때 즉흥적으로 쓰면 중요한 규칙이 먼저 밀려나고, 확인 절차는 생략되고, 이전에 뭘 했는지는 흐릿해진다.

바이브 코딩이 'AI에게 그때그때 요청해서 결과를 받는 것'이었다면, 에이전틱 엔지니어링은 'AI가 반복해서 같은 방식으로 일하도록 주변 장치(규칙 파일, 스펙, 자동 검증, 체크포인트)를 설계하는 것'이다. 이번 차시부터 10차시까지는 그 장치들을 하나씩 만든다.

구분의미
바이브 코딩그때그때 요청해서 결과를 받는 것
에이전틱 엔지니어링반복 가능하게 주변 장치를 설계하는 것
컨텍스트는 무한하지 않은 예산이다
  • 컨텍스트는 무한하지 않은 예산이다
  • 에이전틱 엔지니어링 = AI를 둘러싼 반복 가능한 작업 구조 설계
  • 이후 차시들은 이 정의를 실제 장치로 하나씩 구현한다

05실습 가이드

  1. 1. 진단 대상 프로젝트 열기

    • 기본과정에서 만든 프로젝트(또는 최근 두 달 이상 계속 고쳐온 아무 프로젝트)를 VS Code로 연다.
    • Claude Code 사이드바 또는 통합 터미널을 열어 연결 상태를 확인한다.
    • P1-1 프롬프트로 프로젝트 현재 상태(규칙 존재 여부, 최근 변경 이력, 구조)를 훑어보게 한다.

    예상 결과 — 프로젝트의 규칙 존재 여부, 최근 변경 이력, 구조에 대한 요약을 받는다.

    안 될 때 — 마땅한 프로젝트가 없다면, 기본과정 실습 중 하나(예: 04차시 자동화 스크립트)를 이어서 진단 대상으로 삼아도 된다.

  2. 2. 맥락 유실 재현하기

    • 이전에 AI에게 명시적으로 요청했던 규칙 하나를 떠올린다(예: 디자인 색상, 이름 형식, 특정 라이브러리 금지 등).
    • 그 규칙을 다시 언급하지 않은 채 P1-2 프롬프트로 새 기능을 요청한다.
    • 받은 결과 코드에서 그 규칙이 지켜졌는지 눈으로 확인한다.

    예상 결과 — 규칙이 지켜지지 않은 사례를 최소 하나 확보하거나, 지켜졌다면 왜 지켜졌는지(예: README에 있었다)를 확인한다.

    안 될 때 — 규칙이 뚜렷하게 기억나지 않으면, 지금 임의로 규칙 하나를 정해 대화 초반에 알려준 뒤 대화를 충분히 길게 이어가다 같은 실험을 해본다.

  3. 3. git 로그로 회귀 의심 지점 찾기

    • 터미널에서 git log --oneline으로 지금까지의 커밋 이력을 훑어본다.
    • P1-3 프롬프트로 같은 파일·함수를 여러 번 건드린 커밋들을 짝지어 받는다.
    • 짝지어진 커밋 중 하나를 골라 git diff [커밋1] [커밋2]로 실제 변경 내용을 비교해본다.

    예상 결과 — 회귀 가능성이 있는 지점(중복 수정된 파일·함수) 목록과, 실제로 비교해본 diff 하나를 확보한다.

    안 될 때 — git 이력이 거의 없다면(커밋을 자주 안 했다면), 그 자체가 '커밋을 자주 하지 않았다'는 진단 결과가 된다 — 02차시에서 체크포인트 습관을 다룬다.

  4. 4. 완료 보고된 기능 직접 확인하기

    • P1-4 프롬프트로 지금까지 추가된 기능별 수동 테스트 체크리스트를 받는다.
    • 체크리스트를 하나씩 따라가며 실제로 클릭·입력해본다.
    • 기대와 다르게 동작하는 항목이 있으면 표시해둔다.

    예상 결과 — 기능별 체크리스트를 완주하고, 정상 동작·비정상 동작 여부가 항목별로 표시된다.

    안 될 때 — 체크리스트가 너무 길면 최근에 추가된 기능 5개만 골라 진행해도 된다.

  5. 5. 이상 동작 원인 추정하기

    • 4단계에서 표시해둔 비정상 동작 중 하나를 골라 P1-5(복구 프롬프트)로 원인을 물어본다.
    • AI가 짚어준 커밋을 git show로 직접 열어 실제 원인이 맞는지 확인한다.

    예상 결과 — 비정상 동작의 원인이 된 것으로 추정되는 커밋과 그 근거를 확보한다.

    안 될 때 — 원인이 명확히 안 잡히면 '원인 불명'으로 리포트에 남겨도 된다 — 원인을 완벽히 찾는 것이 아니라 이런 사고가 실제로 일어난다는 걸 확인하는 것이 이번 차시의 목적이다.

  6. 6. 진단 리포트 작성하기

    • 2~5단계에서 확보한 사례들을 정리해 P1-6 프롬프트로 AI에게 리포트 작성을 요청한다.
    • 리포트 파일을 프로젝트 루트에 diagnosis-report.md 같은 이름으로 저장한다.
    • 리포트를 처음부터 끝까지 읽으며 실제 겪은 내용과 다르게 쓰인 부분이 없는지 확인한다.

    예상 결과 — 3대 실패 유형별 사례와 예방 문장이 담긴 마크다운 리포트 파일이 생성된다.

    안 될 때 — 세 유형 중 하나라도 사례를 못 찾았다면 '이번 프로젝트에서는 발견하지 못함'이라고 정직하게 적는다 — 없는 사례를 지어내지 않는다.

  7. 7. 저장소에 기록해두기

    • git add와 git commit으로 리포트 파일을 커밋한다.
    • 커밋 메시지에 '진단: 3대 실패 유형 점검'처럼 이번 실습의 목적이 드러나게 적는다.

    예상 결과 — 진단 리포트가 저장소 커밋 이력에 남는다.

    안 될 때 — 아직 Git 저장소가 아니라면 git init부터 진행한다. 이번 실습에서 '커밋이 안 돼 있었다'는 사실 자체도 진단 결과에 포함시킨다.

06실전 프롬프트

P1-1프로젝트 상태 훑어보기

사용 시점 — 실습 1단계 — 진단을 시작하며 프로젝트 현재 상태를 파악할 때

지금 이 프로젝트를 처음 보는 사람 입장에서 훑어봐줘.

1. README나 규칙 파일이 있는지, 있다면 뭐라고 적혀 있는지
2. 최근 커밋 로그를 보고 최근 두 달 동안 어떤 기능이 추가됐는지
3. 지금 폴더 구조에서 헷갈리는 부분이 있는지

진단이 목적이니까 고치지 말고, 관찰한 내용만 알려줘.

기대 결과 — 프로젝트의 현재 상태(규칙 존재 여부, 최근 변경 이력, 구조)를 요약해서 받는다.

P1-2맥락 유실 재현해보기

사용 시점 — 실습 2단계 — 예전에 정한 규칙이 지금도 지켜지는지 확인할 때

예전에(또는 방금) 너한테 [지켜야 할 규칙 하나, 예: 버튼 색은 항상 파란색만 쓴다]라고 말한 적이 있어.

지금 새로 [간단한 기능 하나]를 추가해줘. 이번 요청에는 그 규칙을 다시 안 알려줄 거야.

결과 코드에 그 규칙이 반영됐는지 내가 직접 확인해볼게.

기대 결과 — 규칙이 지켜졌는지 여부를 눈으로 확인할 수 있는 결과물을 받는다.

P1-3은근한 회귀 의심 지점 찾기

사용 시점 — 실습 3단계 — git 로그 기반으로 회귀 여부를 점검할 때

최근 커밋 로그를 봐줘. 지난 [2개월] 동안 추가되거나 변경된 기능 목록을 뽑아줘.

그 중에서 서로 같은 파일이나 같은 함수를 건드린 커밋들이 있으면 짝지어서 알려줘.
같은 부분을 여러 번 건드렸다면, 나중 수정이 이전 기능을 깨뜨렸을 가능성이 있는 지점이니까 표시해줘.

기대 결과 — 겹쳐서 수정된 파일·함수 목록을 받아, 회귀 의심 지점을 좁힌다.

P1-4완료 보고된 기능 체크리스트 뽑기

사용 시점 — 실습 4단계 — 검증 없는 완료 사례를 찾을 때

지금까지 이 프로젝트에 추가된 기능들을 커밋 메시지 기준으로 목록화해줘.

각 기능마다 내가 직접 클릭하거나 값을 넣어서 확인해볼 수 있는 테스트 방법을 한 줄씩 적어줘.
나는 그 목록을 보면서 하나씩 직접 확인해볼 거야.

기대 결과 — 기능별 수동 테스트 체크리스트를 받는다.

P1-5이상 동작의 원인 추정하기 복구용

사용 시점 — 진단 실습 중 예상과 다른 동작(에러거나 이해 안 되는 결과)을 만났을 때

방금 확인해보니 이런 문제가 있어.

[관찰한 문제: 예 - 예전에 됐던 버튼이 안 눌린다]

이게 최근에(또는 언제부터) 이렇게 됐는지 커밋 이력에서 추정해줘.
원인이 될 만한 커밋을 짚어주고, 왜 그렇게 생각하는지도 설명해줘.

기대 결과 — 회귀 추정 원인과 근거 커밋을 안내받는다.

P1-6진단 리포트로 정리하기

사용 시점 — 실습 6단계 — 발견한 사례들을 리포트로 종합할 때

지금까지 확인한 내용을 정리해서 진단 리포트를 만들어줘.

- 맥락 유실 사례: [발견한 내용, 없으면 '없음'이라고 적어줘]
- 은근한 회귀 사례: [발견한 내용]
- 검증 없는 완료 사례: [발견한 내용]

각 사례마다 무슨 일이 있었는지 한 문단, 앞으로 어떻게 예방할지 한 문장씩 적어줘.
마크다운 문서 하나로 정리해줘.

기대 결과 — 3대 실패 유형별로 정리된 마크다운 진단 리포트를 받는다.

07이것만은 주의

08자가 점검

0 / 6 완료0%
x

09과제

이번 실습에서 다룬 프로젝트가 아니라, 자신이 관리하는 다른 프로젝트(또는 동료의 프로젝트)를 하나 더 골라 같은 3단계 진단(맥락 유실·은근한 회귀·검증 없는 완료)을 반복해보고, 두 프로젝트의 진단 결과를 비교해 공통적으로 반복되는 원인이 있는지 정리한다.

제출 형식 — 두 번째 프로젝트의 진단 리포트(.md)와, 두 리포트를 비교한 3~5문장 요약을 함께 제출한다.

10더 알아보기

  • Claude Code 공식 문서 — 프로젝트 메모리(CLAUDE.md) — 다음 차시 실습 전에 훑어보면 좋다
  • 자신의 git log — 가장 훌륭한 참고자료는 이미 자신의 프로젝트 안에 있다
에이전틱 엔지니어링(Agentic Engineering)
— AI가 반복해서 같은 품질로 일하도록 규칙·스펙·검증·체크포인트 같은 주변 장치를 설계하는 작업.
컨텍스트 윈도우(Context Window)
— AI가 한 번에 참고할 수 있는 대화·코드·문서의 최대 분량. 이 한도를 넘으면 오래된 내용부터 밀려난다.
회귀(Regression)
— 새로운 변경으로 인해 이전에 정상 동작하던 기능이 깨지는 현상.

다음 차시 예고 — 다음 차시(컨텍스트 엔지니어링)에서는 오늘 진단한 '맥락 유실' 문제를 실제로 해결한다. 규칙 파일을 계층적으로 구성하고, 그 규칙이 정말 지켜지는지 검증하는 법을 다룬다.