말로 요청(스킬 막음) 1회차 · Claude Code · Opus 5.5 · 클로드의 마지막 답 원문 · 목록

결론: 지금 상태로는 main에 합치면 안 됩니다. 새로 추가된 기능 세 개(생일 2배, 하루 한도, 포인트 사용)에 모두 버그가 있습니다. 아래 문제는 전부 feature 브랜치 코드를 직접 실행해서 확인했습니다.

반드시 고쳐야 할 문제

1. 생일 배율이 계속 커지고, 생일이 지나도 돌아오지 않음 — points.py:34-35 self.rate = self.rate * 2가 지갑에 저장된 비율 자체를 바꿔 버립니다. - 실행 결과(10,000원 결제): 생일 첫 결제 1,000P → 같은 날 두 번째 결제 2,000P(4배) → 생일 다음 날에도 2,000P - 생일에 결제할 때마다 2배씩 계속 불어나고, 이후로는 평생 그 비율로 적립됩니다. - 고치는 법: 값을 저장하지 말고 결제할 때마다 계산하기. rate = POINT_RATE * 2 if self._is_birthday(today) else POINT_RATE로 바꾸고 self.rate는 지웁니다.

2. 포인트를 쓸 때 만료된 적립분부터 깎임 — points.py:54 balance()는 만료된 적립분을 빼고 계산하는데, use()는 만료 여부를 보지 않고 가장 오래된 적립분부터 차감합니다. - 실행 결과: 만료된 500P와 유효한 500P가 있을 때 500P를 쓰면 만료분만 깎이고 잔액은 그대로 500P입니다. - 결국 손님은 이미 사라진 포인트로 결제하고 유효한 포인트는 줄지 않습니다. 가게 쪽에서 보면 포인트가 공짜로 나가는 셈입니다. - 고치는 법: 반복문에서 만료된 적립분은 건너뛰기.

3. 포인트를 쓰면 하루 적립 한도가 다시 생김 — points.py:37 earned_today를 "오늘 적립한 양"이 아니라 "오늘 적립분 중 아직 남은 양"으로 계산합니다. use()가 이 남은 양을 줄이기 때문에 한도에 여유가 다시 생깁니다. - 실행 결과: 5,000P 적립(한도 도달) → 5,000P 사용 → 같은 날 다시 5,000P 적립 - 고치는 법: 적립 기록에 처음 적립한 양을 따로 남겨 두고, 한도는 그 값으로 계산하기.

4. use()에 음수를 넣으면 포인트가 늘어남 — points.py:51 - 실행 결과: 잔액 500P에서 use(-1000) → 잔액 1,500P - 고치는 법: points <= 0이면 ValueError를 내도록 입력 검사 추가.

이번 변경 전부터 있던 문제 (같이 고치는 걸 권장)

5. 만료일이 하루 빠름 — points.py:45 규칙은 "적립한 날을 1일째로 쳐서 365일째까지 사용 가능"인데, 코드는 < EXPIRE_DAYS - 1(즉 < 364)이라 365일째에 이미 잔액이 0이 됩니다. 실행해 보니 364일째는 500P, 365일째는 0P였습니다. 올바른 조건은 < EXPIRE_DAYS입니다. 이번에 추가된 use()도 이 balance() 결과를 쓰기 때문에 이번 기회에 함께 고치는 게 좋습니다.

사소한 문제

1~4번(그리고 가능하면 5번)을 고친 뒤 합치는 것을 권합니다. 원하면 수정 코드와 테스트를 작성해 드릴게요.