2강 계획 검토 중심 ⏱ 약 35~40분

 

0. 학습 목표

→ Plan mode에서 구현 전 변경 범위를 정하고, 요구사항과 성공 증거로 계획을 검토합니다.

더보기
  • Claude Code를 Plan mode로 전환하고 현재 모드 표시로 코드가 수정되지 않는 계획 단계인지 확인합니다.
  • src/inventory.pytests/test_inventory.py를 대상으로 정상 입력 유지, 공백 상품명 거부, ValueError 예외 계약과 경계 테스트 두 개가 포함된 계획을 요청합니다.
  • 최종 Plan 문서에서 수량 검증·별도 검증 파일·테스트 도구 변경 같은 범위 밖 작업을 제거하고, 두 소스 파일이 아직 바뀌지 않았는지 확인합니다.

 

1. 문제를 변경 요구사항과 시작 상태로 정리하기

→ 공백 상품명 문제의 범위를 정하고, 계획 전 코드와 테스트 상태를 기준점으로 남깁니다.

더보기

현재 재고 함수는 정상 입력 테스트 두 개를 통과하지만 공백 세 칸으로 이루어진 상품명도 그대로 반환합니다.

이번 강의에서는 바로 코드를 고치지 않습니다. 먼저 Claude Code의 Plan mode에서 어떤 파일을 어떻게 바꿀지 검토합니다. 이 과정을 거치면 필요한 수정만 남기고 기존 정상 동작을 실수로 바꾸는 일을 줄일 수 있습니다.

 

Plan mode에서 Claude Code는 프로젝트를 읽고 변경 계획을 제안하지만 소스 파일은 수정하지 않습니다.

계획을 제안하는 역할은 Claude Code가 맡습니다.

변경 범위와 예외 조건, 테스트 사례가 요구사항에 맞는지 판단하는 역할은 학생이 맡습니다.

 

1.1 공백 상품명 문제를 변경 요구사항으로 바꾸기

현재 코드와 실행 결과에서 확인한 사실은 다음과 같습니다.

  • create_inventory_item("키보드", 3){"name": "키보드", "quantity": 3}을 반환합니다.
  • 기존 정상 입력 테스트 두 개는 통과합니다.
  • create_inventory_item(" ", 3)도 오류 없이 공백 상품명을 반환합니다.
  • 현재 테스트에는 빈 문자열과 공백 문자열을 확인하는 사례가 없습니다.

이번 강의에서는 이 문제를 다음 요구사항으로 다룹니다.

  1. 정상 상품명을 전달하면 지금과 같은 재고 항목을 반환합니다.
  2. 빈 문자열 ""은 상품명으로 허용하지 않습니다.
  3. 공백으로만 구성된 문자열 " "도 상품명으로 허용하지 않습니다.
  4. 잘못된 상품명에는 ValueError를 발생시킵니다.
  5. 예외 메시지는 상품명은 비어 있을 수 없습니다.로 통일합니다.
  6. 변경 대상은 src/inventory.pytests/test_inventory.py로 제한합니다.

이 요구사항에는 정상 상품명의 앞뒤 공백 제거, 상품명 자료형 검사, 수량 검증이 포함되지 않습니다. 이번 문제를 해결하는 데 필요하지 않은 작업까지 한꺼번에 추가하면 어떤 변경이 테스트 결과에 영향을 주었는지 판단하기 어려워집니다.

 

 

 

 

1.2 소스 파일과 정상 테스트의 변경 전 상태 확인하기

Plan mode를 시작하기 전에 프로젝트의 현재 상태를 확인합니다.

# 실습 위치 안내
[대주제] Claude
└─ [현재 소주제] VS Code에서 Claude Code 사용
   ├─ ✓ 0강 Claude Code 확장 설정과 재고 프로젝트 확인
   ├─ ✓ 1강 선택 코드와 @-mention으로 문제 설명 요청
   ├─ ▶ 2강 Plan 모드에서 상품명 검증 계획 검토
   │  ├─ ▶ 현재 실습: 변경 전 정상 테스트 다시 확인
   │  │  ├─ 대상: src/inventory.py, tests/test_inventory.py
   │  │  ├─ 작성: 없음
   │  │  └─ 확인: 기존 테스트 2개 통과와 파일 변경 표시 없음
   │  ├─ ○ Plan 모드에서 변경 계획 요청
   │  └─ ○ 범위 밖 작업을 제거하고 최종 계획 확인
   ├─ ○ 3강 계획에 맞는 코드 차이 검토와 반영
   └─ ○ 4강 통합 터미널 테스트와 실패 수정

 

VS Code Explorer에서 src/inventory.pytests/test_inventory.py에 저장되지 않은 변경 표시가 없는지 확인합니다. 통합 터미널의 현재 위치가 $HOME/claude-course-workspace인지 확인한 뒤 기존 테스트를 실행합니다.

 

쉘 프롬프트VS Code 통합 터미널 · Bash

# 상품명 검증을 계획하기 전에 기존 정상 입력 테스트 두 개를 다시 확인한다.
cd "$HOME/claude-course-workspace"
python -m unittest -v

 

다음처럼 기존 테스트 두 개가 ok로 끝나고 마지막에 OK가 표시되어야 합니다.

test_returns_name (tests.test_inventory.CreateInventoryItemTest.test_returns_name) ... ok
test_returns_quantity (tests.test_inventory.CreateInventoryItemTest.test_returns_quantity) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

 

실행 시간은 환경마다 다를 수 있습니다. 테스트 두 개의 ok와 마지막 OK를 확인하면 됩니다. 이 결과는 검증 기능이 이미 있다는 뜻이 아닙니다. 변경 전 정상 동작이 무엇인지 확인한 결과입니다.

 

2. Plan mode에서 두 파일의 변경 계획 요청하기

→ 실제 모드를 확인한 뒤 대상 파일과 요구사항을 지정하여 구현 전 계획만 요청합니다.

더보기

2.1 Claude Code를 Plan mode로 전환하기

Claude Code 사이드바의 프롬프트 상자 아래에서 현재 권한 모드를 확인합니다. 0강에서 설정한 새 대화라면 Manual(Ask before edits)로 표시됩니다. 모드 표시를 누르고 Plan mode를 선택합니다. Plan mode는 소스 파일을 수정하지 않고 프로젝트를 읽어 변경 계획을 제안하는 방식입니다.

[화면 캡쳐: Claude Code 사이드바의 프롬프트 상자 아래 모드 선택 메뉴에서  Ask before edits 가  Plan mode 로 바뀐 화면]

 

Plan mode는 채팅으로 “계획만 세워 줘”라고 요청하는 표현과 다릅니다. 프롬프트를 보내기 전에 실제 모드 표시가 Plan mode인지 확인해야 합니다. 현재 동작 방식은 Anthropic의 권한 모드 공식 안내VS Code 공식 안내를 기준으로 합니다.

 

Use Claude Code in VS Code - Claude Code Docs

Install and configure the Claude Code extension for VS Code. Get AI coding assistance with inline diffs, @-mentions, plan review, and keyboard shortcuts.

code.claude.com

 

 

Choose a permission mode - Claude Code Docs

Control whether Claude asks before editing files or running commands. Cycle modes with Shift+Tab in the CLI or use the mode selector in VS Code, Desktop, and claude.ai.

code.claude.com

 

 

 

 

2.2 두 파일과 요구사항을 지정하여 계획 요청하기

src/inventory.pytests/test_inventory.py를 각각 열어 상품명 검증 코드와 경계 입력 테스트가 아직 추가되지 않았는지 확인합니다. Claude Code 프롬프트에서 두 파일을 @-mention으로 지정한 뒤 요구사항을 전달합니다.

[화면 캡쳐: Claude Code 사이드바가 Plan mode인 상태에서 프롬프트에  @src/inventory.py 와  @tests/test_inventory.py 가 참조된 화면]

 

 

클로드 프롬프트Claude Code 사이드바 · Plan mode

# 목적: 소스 파일을 수정하기 전에 공백 상품명 검증의 변경 범위와 테스트 계획을 검토한다.
@src/inventory.py와 @tests/test_inventory.py를 읽고 변경 계획만 작성해 주세요.

요구사항은 다음과 같습니다.

1. 정상 상품명과 수량은 현재와 같은 딕셔너리로 반환해야 합니다.
2. 빈 문자열 ""과 공백으로만 구성된 문자열 "   "은 상품명으로 허용하지 않습니다.
3. 잘못된 상품명에는 ValueError를 발생시킵니다.
4. 예외 메시지는 "상품명은 비어 있을 수 없습니다."로 통일합니다.
5. 기존 정상 입력 테스트 두 개를 유지합니다.
6. 빈 문자열과 공백 문자열을 각각 확인하는 테스트를 추가합니다.
7. 변경 대상은 src/inventory.py와 tests/test_inventory.py 두 파일로 제한합니다.

계획에는 파일별 변경 내용, 유지할 기존 동작, 추가할 테스트 입력과 기대 결과,
마지막에 실행할 테스트 명령을 포함해 주세요.
아직 소스 파일을 수정하거나 구현 코드를 작성하지 마세요.

 

Claude Code가 계획을 만들면 VS Code에서 Markdown 문서 형태로 열어 검토할 수 있습니다. 계획 문서에 의견을 남기면 구현을 시작하기 전에 범위를 다시 조정할 수 있습니다.

 

[화면 캡쳐: VS Code 편집기에 Claude Code가 제안한 Plan 문서가 열리고 변경 파일과 테스트 계획이 표시된 화면]

 

3. 계획을 요구사항에 대조하고 범위 확정하기

→ 계획의 길이가 아니라 변경 파일·예외 계약·테스트와 제외 범위를 근거로 승인 가능 여부를 판단합니다.

더보기

3.1 Plan 문서를 요구사항과 대조하기

계획의 문장 수나 자세한 정도보다 실제 요구사항이 빠짐없이 반영되었는지 확인합니다.

적절한 계획은 다음 내용을 포함해야 합니다.

확인할

항목

계획에 들어가야 할

내용

판단 이유
변경 파일 src/inventory.py, tests/test_inventory.py 두 파일 현재 문제와 테스트를 해결하는 데 필요한 범위입니다.
검증 위치 딕셔너리를 반환하기 전에 상품명을 검사 잘못된 값이 결과에 들어가기 전에 중단해야 합니다.
경계 조건 """ "을 모두 거부 빈 문자열 검사만으로는 공백 문자열을 놓칠 수 있습니다.
예외 계약 ValueError와 정해진 메시지 사용 호출 코드와 테스트가 같은 실패 결과를 확인할 수 있습니다.
기존 동작 정상 상품명과 수량은 그대로 반환 문제와 관계없는 현재 동작을 유지해야 합니다.
테스트 기존 2개 유지, 잘못된 입력 테스트 2개 추가 수정 후 정상 동작과 경계 조건을 함께 확인합니다.
실행 확인 python -m unittest -v 실행 최종 판단은 계획의 설명이 아니라 테스트 결과로 내립니다.

name.strip()으로 눈에 보이는 문자가 남는지 확인할 수 있습니다. 다만 정상 상품명의 앞뒤 공백까지 제거하여 다른 값으로 반환하는 작업은 이번 요구사항에 없습니다. 계획에서 name = name.strip()처럼 입력값 자체를 바꾸겠다고 제안한다면, 공백 여부 확인에만 strip()을 사용하고 정상 입력의 반환값은 유지하도록 수정 의견을 남깁니다.

다음 제안은 이번 계획에서 제외합니다.

  • 별도의 validator.py 파일이나 검증 클래스를 새로 만드는 작업
  • create_inventory_item 함수명이나 반환 딕셔너리 구조를 바꾸는 작업
  • unittestpytest로 교체하는 작업
  • 수량의 자료형이나 최소값을 검사하는 작업
  • 상품명 자료형 검사와 길이 제한을 함께 추가하는 작업

이 항목들이 항상 나쁜 설계라는 뜻은 아닙니다. 현재 강의에서 확인한 문제를 해결하는 데 필요하지 않으므로 이번 변경에서 제외하는 것입니다.

 

 

 

 

3.2 범위가 넓은 계획에 수정 의견 남기기

Claude Code가 필요 이상의 구조 변경을 제안하거나 테스트 사례를 빠뜨렸다면 계획을 승인하지 않습니다. Plan 문서의 관련 위치에 인라인 댓글을 남기거나 Claude Code 사이드바에서 다음 요청을 보냅니다.

[화면 캡쳐: Claude Code 사이드바의 Plan mode 프롬프트 입력 영역과 수정할 계획 문서가 함께 보이는 화면]

 

클로드 프롬프트Claude Code 사이드바 · Plan mode

# 목적: 공백 상품명 문제를 해결하는 데 필요한 범위만 남도록 변경 계획을 수정한다.
방금 계획을 다음 기준으로 수정해 주세요.

- 변경 파일은 src/inventory.py와 tests/test_inventory.py 두 개만 유지합니다.
- 별도 검증 파일이나 클래스는 만들지 않습니다.
- 정상 입력의 반환값과 기존 테스트 두 개는 유지합니다.
- 빈 문자열 ""과 공백 문자열 "   "을 각각 확인하는 테스트를 포함합니다.
- ValueError와 "상품명은 비어 있을 수 없습니다." 메시지를 계획에 명시합니다.
- 수량 검증, 상품명 자료형 검사와 테스트 도구 변경은 제외합니다.
- strip()은 공백 여부를 판단할 때만 사용하고 정상 상품명의 값을 바꾸지 않습니다.

수정된 파일별 계획과 실행할 테스트 명령만 다시 제시해 주세요.
아직 소스 파일은 수정하지 마세요.

 

수정된 계획을 받으면 처음 계획과 표현을 비교하는 데 시간을 쓰지 않습니다. 위의 검토 표를 다시 적용하여 필요한 항목이 들어왔고 범위 밖 작업이 사라졌는지 확인합니다.

[화면 캡쳐: 수정된 Plan 문서에 두 변경 파일, ValueError 조건, 기존 테스트 유지, 경계 입력 테스트 두 개와 unittest 실행 명령이 표시된 화면]

 

 

 

 

3.3 최종 계획을 다음 강의의 판단 기준으로 확정하기

검토를 마친 계획은 다음 흐름으로 정리되어야 합니다.

  1. src/inventory.py에서 상품명이 비었거나 공백으로만 구성되었는지 반환 전에 검사합니다.
  2. 조건에 해당하면 ValueError("상품명은 비어 있을 수 없습니다.")를 발생시킵니다.
  3. 정상 상품명과 수량을 반환하는 기존 동작은 바꾸지 않습니다.
  4. tests/test_inventory.py의 기존 테스트 두 개를 유지합니다.
  5. 빈 문자열과 공백 문자열에서 같은 ValueError와 메시지를 확인하는 테스트를 각각 추가합니다.
  6. python -m unittest -v를 실행하여 정상 입력과 잘못된 입력 테스트를 함께 확인합니다.

여기까지 확인해도 이번 강의에서는 구현 승인 항목을 선택하지 않습니다. 계획 승인 옵션은 Plan mode를 종료하고 실제 편집을 시작할 수 있기 때문입니다. Claude Code 대화와 최종 계획을 그대로 둔 채 소스 파일에 변경 표시가 없는지 다시 확인합니다. 현재 두 테스트를 다시 실행했을 때 여전히 2개가 통과하는 것이 정상입니다.

다음 강의에서는 같은 대화에서 검토를 마친 계획의 구현을 요청합니다. 그때 side-by-side 코드 차이를 열고 조건식, 예외 유형과 메시지, 기존 동작 유지, 테스트 추가가 이번 계획과 일치하는지 하나씩 판단합니다.

 

 

 

 

3.4 Plan mode 문제를 원인별로 확인하기

  • 모드 표시가 Ask before edits라면 프롬프트를 보내기 전에 Plan mode로 다시 바꿉니다.
  • 계획에 세 번째 파일이나 구조 변경이 포함되면 승인하지 않고 범위를 두 파일로 좁히는 의견을 보냅니다.
  • 빈 문자열 테스트만 있고 공백 문자열 테스트가 없으면 두 입력을 서로 다른 테스트로 계획하도록 요청합니다.
  • 정상 입력 테스트를 삭제하거나 바꾸겠다는 내용이 있으면 기존 테스트 두 개를 유지하도록 요청합니다.
  • 소스 파일에 변경 표시가 생겼다면 구현을 계속하지 않습니다. 현재 모드를 확인하고 변경을 되돌린 뒤 0강의 완성 코드와 대조하여 시작 상태를 복구합니다.

이번 강의를 마칠 때 필요한 결과는 긴 계획서가 아닙니다. 두 파일만 변경하고, 정상 동작은 유지하며, 두 잘못된 입력을 같은 예외 계약으로 검증하고, 전체 테스트로 결과를 판단한다는 계획이면 충분합니다.

다음 강의 — 확정한 Plan을 기준으로 side-by-side 코드 차이를 검토하고 필요한 변경만 반영합니다.