[Claude Code] 첫 세션과 승인 루프 (1)
이번 스텝의 목표: Claude가 제안하면 내가 검토한 후 수락/거절/재지시로 이어지는 루프를 손에 익히는 것. 코드 품질은 아직 X
Step 1. 실습 저장소 만들기
실습 저장소에 해당하는 실습 폴더를 만들고
mkdir cc-lab && cd cc-lab
실습 폴더를 git 로컬 저장소로 선언한다.
git init
그 다음 실습 파일로서 다음과 같이 파이썬 코드를 작성한다.
# cart.py — 장바구니 결제 금액 계산
SHIPPING_FEE = 3000
FREE_SHIPPING_THRESHOLD = 50000
def subtotal(items):
"""items: [{"name": str, "price": int, "qty": int}, ...]"""
total = 0
for item in items:
total += item["price"] * item["qty"]
return total
def checkout(items, coupon_rate=0.0):
amount = subtotal(items)
if amount > FREE_SHIPPING_THRESHOLD:
shipping = 0
else:
shipping = SHIPPING_FEE
amount = amount - amount * coupon_rate
return int(amount + shipping)
if __name__ == "__main__":
cart = [
{"name": "머그컵", "price": 12000, "qty": 2},
{"name": "노트", "price": 3000, "qty": 2},
]
print(checkout(cart, coupon_rate=0.1))
그 다음 첫 커밋을 진행한다.
git add .
git commit -m "feat: 첫 번째 커밋"
그리고 다음 명령어를 통해 vscode를 연다.
code .
그리고 우측 상단의 Claude Code 아이콘을 클릭하여 패널을 연다.

학습 단계이므로 Manual 모드를 사용한다.

이제 프롬프트를 보내기 전에 생각해봐야할 부분이 있다. (예측안)
Claude가 답하기까지 파일을 몇 번 읽을까? 파일 읽기 말고 다른 도구도 쓸까? 승인 요청이 뜰까, 안 뜰까?
프롬프트 A — 읽기 전용
@cart.py 이 파일이 무슨 일을 하는지 3문장으로 설명해 줘.
그리고 금액 계산에서 경계값 때문에 논란이 될 만한 지점 2곳을 짚어줘.
아직 코드는 절대 수정하지 마.
@를 치면 파일 자동완성이 뜬다. 퍼지 매칭(Fuzzy Matching)을 지원해서 이름 일부만 쳐도 찾아준다.
프롬프트 A에 대한 예측안에 대답 결과는
Claude가 답하기까지 파일을 몇 번 읽을까?
@cart.py 와 같이 파일을 클로드에게 짚어줬기 때문에 Read와 같은 읽기는 0번 일어났다.
파일 읽기 말고 다른 도구도 쓸까?
Bash를 통해 경계값을 계산 도구로 활용했다.
승인 요청이 뜰까, 안 뜰까?
Bash 실행에 대한 승인 요청은 있었고 편집에 대한 승인 요청은 없었다.
프롬프트 B — 첫 수정, 그리고 일부러 거절해보기
무료배송 기준을 "50,000원 초과"가 아니라 "50,000원 이상"으로 바꿔줘.
이번엔 diff가 뜨고 편집 승인을 요청할 겁니다.

여기서 일부러 거절(No)하고, 대신 이렇게 답한다.
아니, 비교 연산자만 바꾸지 말고 FREE_SHIPPING_THRESHOLD 옆에
"이상(>=) 기준"이라는 주석도 같이 넣어줘.
거절 → 재지시 → 새 제안을 받는 이 왕복이 Claude Code 사용의 실제 리듬이다. 이를 겪어야 나중에 "마음에 안 드는 결과를 그냥 받아들이는" 습관이 안 생긴다.
수락한 뒤 터미널에서 git diff HEAD 로 실제로 뭐가 바뀌었는지 확인해보자.

Manual 모드와 Edit automatically 모드의 차이를 한 문장으로.
: Manual은 편집 전 허락을 구하고, Edit automatically는 묻지 않고 편집한다.
diff 화면에서 Claude가 제안한 내용을 내가 직접 손대고 수락하면, Claude는 그 사실을 아는가 모르는가?
: 안다. diff 뷰에서 제안 내용을 직접 고친 뒤 수락하면, 파일이 원래 제안과 같다고 가정하지 않도록 Claude에게 사용자가 수정했다는 사실이 전달된다.
이번 스텝 정리
- 승인 기준은 읽기/쓰기가 아니라 도구 종류. Read·Grep·Glob은 무승인, Bash는 명령 단위, Edit는 diff 단위
- @파일은 이름 자동완성이 아니라 내용을 메시지에 실어 보내는 것. 그래서 Read가 생략됨
- "수정하지 마" ≠ "실행하지 마". Claude는 추론 대신 측정하러 감
- 거절은 중단이고, 방향은 내가 준다