자동화 slecs

결제 콜백 자동수신으로 수동 입금 매칭 루프 제거

목차

자동수신 결과를 받기 시작함

결제대행사에서 보내는 자동 입금 결과를 그동안 사람이 하루 한 번 손으로 매칭하던 구조였음. 누락 건이 가끔 생겼고, 정산 마감 직전에 발견되면 새벽에 다시 들어와 메우는 일이 반복됐음. 이번에 콜백을 받는 엔드포인트를 새로 붙여서 그 루프를 끊었음.

신규 API에서 챙긴 포인트는 세 가지였음.

  • 멱등성: 같은 거래번호로 두 번, 세 번 들어와도 결과는 한 번만 반영. 외부에서 재시도하는 게 표준 동작이라 클라이언트가 떨면 서버가 막아줘야 함.
  • 시그니처 검증: 인입 트래픽이 외부망에서 바로 들어오니 위변조 차단을 1차로 걸어둠. 검증 실패는 422 대신 401로 떨어뜨림.
  • 원본 페이로드 보관: 들어온 그대로 저장. 분쟁 났을 때 우리 파싱 로직에 의존하지 않고 원본을 들고 회의 들어갈 수 있어야 함.

핵심 흐름은 이런 모양이었음.

요청 수신
 → 시그니처 검증
 → 멱등키 조회
   ├ hit  → 200 OK + 기존 결과
   └ miss → 결과 반영 → 멱등키 저장 → 200 OK

스타일 규칙은 왜 같이 들어갔는가

콜백을 받기 시작하면 파트너 쪽 화면에 노출되는 상태 뱃지 종류가 늘어남. 그런데 기존 CSS가 두 파일에서 색을 따로 정의하고 있었음. 한쪽은 진한 회색, 다른 쪽은 연한 회색. 같은 "처리중"인데 페이지를 옮기면 색이 바뀌어 보이는 이슈가 있었음.

따로 PR을 쪼갤까 잠깐 고민했지만 같은 사용자 시나리오에서 만지는 게 맞다고 판단해 한 커밋에 묶었음. 리뷰어 입장에서도 "API 만들고 → 그 결과가 어디 보이는지" 한 번에 따라가는 게 편함.

회고

잘한 것 아쉬운 것
멱등성을 처음부터 설계에 박음 테스트가 정상 흐름 위주
원본 페이로드 통째로 적재 시그니처 키가 단일 키, 로테이션 없음
API와 UI 일관성을 한 커밋에 묶음 CSS를 토큰화 안 하고 값만 통일

특히 시그니처 키 로테이션은 다음에 꼭 짚어야 함. 외부 콜백을 받는 모든 엔드포인트가 같은 약점을 공유함. CSS도 색 변수로 빼두지 않으면 같은 문제가 다른 페이지에서 또 반복됨. 한 번 더 정리할 차례.

다음

댓글 0

첫 댓글 달아줘.