1강. 선택 코드와 @-mention으로 재고 함수의 입력 문제 찾기

0. 학습 목표
→ 공백 상품명 문제를 직접 재현하고 관련 코드만 전달하여 Claude Code의 설명을 실제 근거로 판단합니다.
- 정상 입력 테스트와 공백 세 칸을 전달한 실행 결과를 비교하여 현재 테스트가 놓친 문제를 재현합니다.
create_inventory_item()함수 범위를 선택하고@tests/test_inventory.py를 참조하여 문제와 가까운 문맥만 전달합니다.Claude Code의 설명이 함수의 검증 조건 누락과 테스트의 경계 입력 누락을 실제 두 파일에서 찾았는지 판단합니다. 이 과정에서는 파일을 수정하지 않습니다.
1. 정상 테스트가 놓친 공백 상품명 재현하기
→ 현재 함수와 테스트를 확인하고 정상 입력과 공백 입력의 실행 결과를 비교합니다.
>> 테스트가 모두 통과했다고 해서 상품명 검증이 끝난 것은 아닙니다. 현재 테스트는 정상 상품명만 확인하므로 공백 세 칸도 상품명으로 저장될 수 있습니다. 먼저 이 동작을 직접 재현합니다.
🛠 실습 환경
작업 위치: $HOME/claude-course-workspace
준비 확인: Claude Code 사이드바의 Ask before edits + python -m unittest -v의 정상 테스트 2개 통과
환경 차이: 다른 셸을 사용하면 경로 표현과 명령 입력 방법이 달라질 수 있습니다.
# 실습 위치 안내
[대주제] Claude
└─ [현재 소주제] VS Code에서 Claude Code 사용
├─ ✓ 0강 Claude Code 확장 설정과 재고 프로젝트 확인
├─ ▶ 1강 선택 코드와 @-mention으로 문제 설명 요청
│ ├─ ▶ 현재 실습: 정상 테스트와 공백 입력의 결과 비교
│ │ ├─ 대상: src/inventory.py의 create_inventory_item 함수
│ │ ├─ 입력: 상품명 " ", 수량 3
│ │ └─ 확인: 공백 상품명이 그대로 반환되는지 판단
│ └─ ○ 관련 함수와 테스트를 Claude Code에 전달
├─ ○ 2강 Plan 모드에서 검증 계획 검토
├─ ○ 3강 코드 차이 검토와 상품명 검증 반영
└─ ○ 4강 통합 터미널 테스트와 실패 수정
1.1 현재 함수와 테스트 확인하기
현재 프로젝트에는 재고 항목 하나를 만드는 함수와 정상 입력 테스트 두 개가 있습니다.
src/inventory.py
# 상품명과 수량으로 재고 항목을 생성한다.
def create_inventory_item(name: str, quantity: int) -> dict[str, object]:
return {"name": name, "quantity": quantity}
tests/test_inventory.py
# 정상 상품명과 수량이 결과에 들어가는지 확인한다.
import unittest
from src.inventory import create_inventory_item
class CreateInventoryItemTest(unittest.TestCase):
def test_returns_name(self) -> None:
item = create_inventory_item("키보드", 3)
self.assertEqual(item["name"], "키보드")
def test_returns_quantity(self) -> None:
item = create_inventory_item("마우스", 5)
self.assertEqual(item["quantity"], 5)
if __name__ == "__main__":
unittest.main()
첫 번째 테스트는 정상 상품명이 반환되는지 확인합니다. 두 번째 테스트는 정상 수량이 반환되는지 확인합니다. 빈 문자열이나 공백으로만 구성된 상품명을 전달하는 테스트는 없습니다.
1.2 정상 입력 테스트 실행하기
기존 테스트를 실행하여 현재 두 테스트가 통과하는지 확인합니다. 이 결과는 정상 입력에 대한 현재 동작이 유지되고 있다는 뜻입니다. 잘못된 입력까지 안전하게 처리한다는 뜻은 아닙니다.

쉘 프롬프트 — 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를 확인하면 됩니다. 테스트가 실패한다면 공백 상품명 문제를 조사하기 전에 파일 내용과 실행 위치를 확인합니다. src와 tests 폴더가 보이는 프로젝트 루트에서 같은 명령을 다시 실행합니다.
1.3 공백 상품명 결과 확인하기
이제 기존 테스트에 없는 입력을 함수에 직접 전달합니다. 공백은 화면에서 보이지 않으므로 반환된 문자열을 repr()로 출력하여 따옴표 안의 공백을 확인합니다. (Bash 터미널(Linux, macOS, Git Bash 등)에서 파이썬 코드를 별도 파일 생성 없이 즉시 실행하기 위해 Here-Doc(<<) 문법을 사용)

쉘 프롬프트 — VS Code 통합 터미널 · Bash
# 공백으로만 구성된 상품명이 저장되는 현재 동작을 재현한다.
python3 - <<'PY'
# 반환된 상품명의 공백을 repr로 확인한다.
from src.inventory import create_inventory_item
item = create_inventory_item(" ", 3)
print(repr(item))
PY
현재 함수에는 상품명을 검사하는 조건이 없으므로 다음 결과가 나옵니다.
{'name': ' ', 'quantity': 3}
프로그램은 오류를 발생시키지 않고 공백 세 칸을 상품명으로 저장했습니다. 기존 테스트가 통과한 이유는 함수가 안전해서가 아니라, 테스트가 정상 입력만 사용했기 때문입니다.
2. 관련 코드만 Claude Code에 전달하기
→ 함수 선택과 파일 참조로 답변 근거를 좁히고 파일 수정 없이 문제 설명만 요청합니다.
Claude Code는 문제를 설명할 수 있지만, 그 설명이 맞는지는 실제 코드와 실행 결과로 판단해야 합니다.
이번 강의에서는 파일을 수정하지 않습니다.
Claude Code가 요청을 처리할 때 참고하는 코드와 파일을 문맥(context)이라고 합니다.
편집기에서 선택한 코드는 Claude Code가 자동으로 볼 수 있습니다.
@-mention은 프롬프트에서 특정 파일이나 폴더를 명시적으로 참조하는 방법입니다.
2.1 create_inventory_item 함수 선택하기
src/inventory.py를 열고 create_inventory_item() 함수 전체를 선택합니다. Claude Code 프롬프트 상자 아래에 선택한 줄 수가 표시되는지 확인합니다. 선택 표시가 숨김 상태라면 해당 표시를 눌러 Claude Code가 선택 영역을 볼 수 있게 합니다.

Windows와 Linux에서는 편집기에 포커스를 둔 상태에서 Alt+K를 누르면 현재 파일과 선택한 줄 범위가 포함된 @-mention을 프롬프트에 삽입할 수 있습니다. 이 단축키를 사용하지 않아도 선택한 코드는 자동으로 전달됩니다.
2.2 테스트 파일을 @-mention으로 참조하기
이번에는 문제와 가까운 두 자료를 사용합니다.
src/inventory.py의create_inventory_item()함수: 공백 상품명이 저장되는 원인을 확인할 코드tests/test_inventory.py: 기존 테스트가 어떤 입력만 확인하는지 판단할 근거
>> 프로젝트 전체를 읽지 못하게 제한하는 것이 목적은 아닙니다.
관련성이 분명한 코드와 테스트부터 전달하면 Claude Code의 설명을 실제 근거와 대조하기 쉬워집니다.
필요한 정보가 부족할 때만 문맥을 넓힙니다.
함수 선택을 유지하고 테스트 파일은 프롬프트에서 @tests/test_inventory.py로 지정합니다.

2.3 파일 수정 없이 문제 설명 요청하기
아직 변경 계획이나 코드를 받을 단계가 아니므로 파일을 수정하지 말라는 조건을 분명히 씁니다.

클로드 프롬프트 — Claude Code 사이드바 · Ask before edits
# 목적: 공백 상품명 문제가 발생하는 이유와 현재 테스트의 누락을 실제 코드에서 찾는다.
선택한 create_inventory_item 함수와 @tests/test_inventory.py를 근거로 답해 주세요.
1. 공백으로만 구성된 상품명이 허용되는 이유를 실제 코드 조건을 기준으로 설명해 주세요.
2. 현재 테스트가 이 문제를 찾지 못하는 이유를 테스트 입력을 기준으로 설명해 주세요.
3. 추가해야 할 테스트 입력과 기대 결과를 제안해 주세요.
아직 파일을 수정하지 마세요. 변경 계획이나 수정 코드를 작성하지 말고 문제 설명만 제공해 주세요.
Claude Code의 답변 표현은 실행할 때마다 달라질 수 있습니다. 문장 모양이 아니라 답변이 어떤 코드와 테스트를 근거로 삼았는지 확인합니다.
3. 설명의 근거를 확인하고 변경 요구사항 정리하기
→ Claude Code의 설명을 실제 두 파일과 대조하고 다음 Plan 단계에 전달할 요구사항을 정리합니다.
3.1 Claude Code 설명과 실제 코드 대조하기
Claude Code의 답변을 받은 뒤 바로 맞다고 판단하지 않습니다. 다음 네 가지를 실제 파일과 비교합니다.
| 확인할 내용 | 실제 코드에서 확인할 근거 | 적절한 설명의 방향 |
| 공백 상품명이 허용되는 원인 | create_inventory_item()이 name을 검사하지 않고 그대로 반환합니다. |
공백 여부를 검사하는 조건이 없다고 설명합니다. |
| 기존 테스트의 누락 | 두 테스트 모두 "키보드", "마우스"와 같은 정상 상품명만 사용합니다. |
빈 문자열과 공백 문자열을 확인하는 테스트가 없다고 설명합니다. |
| 추가할 테스트 입력 | ""와 " "를 전달하는 사례가 없습니다. |
두 입력에서 명확한 예외를 기대하는 테스트를 제안합니다. |
| 요청 범위 준수 | 이번 요청은 설명만 요구했습니다. | 파일을 변경하거나 수정 코드를 적용하지 않습니다. |
여기서 중요한 판단은 공백을 제거하면 됩니다라는 해결 문장 자체가 아닙니다. 현재 함수에 실제 검증 조건이 없고, 현재 테스트에도 잘못된 입력 사례가 없다는 두 근거가 답변에 함께 있어야 합니다.

3.2 문맥을 좁혀 다시 요청하기
답변이 빈 문자열만 언급하고 공백 문자열을 빠뜨렸거나, 선택하지 않은 파일을 근거로 결론을 내렸다면 문맥과 질문을 다시 좁힙니다.

클로드 프롬프트 — Claude Code 사이드바 · Ask before edits
# 목적: 공백 문자열 문제와 두 파일의 근거만 다시 확인한다.
방금 답변을 선택한 create_inventory_item 함수와 @tests/test_inventory.py만 기준으로 다시 설명해 주세요.
빈 문자열 ""와 공백 세 칸 " "을 구분하여 다루고,
각 문제가 현재 함수의 어느 동작과 현재 테스트의 어떤 누락에서 발생하는지 적어 주세요.
파일은 수정하지 마세요.
Claude Code가 파일 변경을 제안하면 변경을 승인하지 않습니다. 이번 강의의 결과는 수정된 코드가 아니라, 공백 상품명 문제와 테스트 누락을 실제 근거로 설명할 수 있는 상태입니다.
3.3 Plan 모드에 전달할 요구사항 정리하기
- 정상 상품명과 수량을 전달하면 기존과 같은 재고 항목을 반환합니다.
- 빈 문자열
""은 상품명으로 저장하지 않습니다. - 공백으로만 구성된 문자열
" "도 상품명으로 저장하지 않습니다. - 잘못된 상품명에는 테스트에서 확인할 수 있는 명확한 예외를 사용합니다.
- 변경 대상은
src/inventory.py와tests/test_inventory.py로 제한합니다.
아직 어떤 조건문을 작성할지 결정하지 않습니다. 다음 강의에서는 이 요구사항을 Claude Code의 Plan 모드에 전달하고, 소스 파일을 바꾸기 전에 변경 범위와 테스트 사례가 적절한지 검토합니다.

이번 강의를 마칠 때는 기존 테스트 두 개의 통과, 공백 상품명이 그대로 반환되는 실행 결과, Claude Code 설명과 실제 두 파일의 일치를 확인할 수 있어야 합니다. 이 세 근거 중 하나라도 확인하지 못했다면 다음 강의로 넘어가기 전에 실행 위치, 선택 영역과 @-mention을 다시 확인합니다.
→ 다음 개별 강의
이번에 정리한 정상 동작, 빈 문자열·공백 문자열, 명확한 예외와 두 변경 파일을 Plan 모드에 전달합니다. 코드를 바꾸기 전에 변경 범위와 테스트 사례가 적절한지 검토합니다.