Dana Okafor백엔드 엔지니어 · 과제: 이중 청구 수정 · Claude Code · 2시간 40분
Lemonsignal 검증 완료 89%높은 적합도
- AI에게 수정을 맡기기 전에 원인을 찾았습니다.
- AI의 수정을 그대로 믿지 않고 테스트했습니다.
- 첫 번째 서비스에서 만든 것으로 두 번째 서비스도 수정했습니다.
- 이해 우수 AI로 이중 청구를 재현하게 하고, 수정에 앞서 결제 한 건을 코드에서 끝까지 따라갔습니다. 턴 2
- 지시 양호 로그와 관련 파일을 주고, 바꾸면 안 되는 부분을 알려 주었습니다. 턴 4
- 검증 우수 AI의 첫 수정에 테스트를 돌려 보고 거부했습니다. 직접 만든 수정은 테스트로 입증했습니다. 턴 12, 19
- 수정 우수 첫 수정이 왜 틀렸는지, 대신 어디를 봐야 하는지 알려 주었습니다. 턴 13
- 승인 양호 테스트를 갖춘 작은 변경에, 테스트하지 않은 부분을 적은 메모를 덧붙였습니다.
- 재사용 우수 절차를 스킬로 저장하고, 그 스킬로 환불 서비스를 수정했습니다.
직무 역량
- 근본 원인 찾기기준 초과
- 테스트로 수정 입증하기기준 초과
- 다른 사람이 유지보수할 수 있는 코드기준 충족
제출한 그대로의 작업물입니다. 각 표시는 결과에 나온 역량을 가리킵니다.
변경 메모 게이트웨이가 재시도해도 주문당 한 번만 청구
- 원인: 게이트웨이 시간 초과 후 재시도가 두 번째 청구를 만들었습니다.
- 수정: 청구마다 주문에 해당하는 키를 붙여, 재시도하면 새 청구를 만들지 않고 첫 청구를 돌려줍니다.
- 테스트: 시간 초과 후 재시도해도 이제 한 번만 청구됩니다. 테스트 48개 모두 통과했습니다.
- 테스트하지 않은 부분: 아직 사용하지 않는 부분 매입.
payments/charge.py수정 내용
def create_charge(order, card):
- return gateway.charge(order.total, card)
+ key = f"order-{order.id}"
+ return gateway.charge(order.total, card,
+ idempotency_key=key)
tests/test_charge.py수정 전 실패, 수정 후 통과
+def test_retry_charges_once(gw, order, card):
+ gw.fail_next_with(Timeout)
+ create_charge(order, card)
+ create_charge(order, card) # the retry
+ assert gw.charges_for(order) == 1
refunds/refund.py환불 서비스에 적용한 같은 수정
def create_refund(charge, amount):
- return gateway.refund(charge.id, amount)
+ key = f"refund-{charge.id}"
+ return gateway.refund(charge.id, amount,
+ idempotency_key=key)