입금 웹훅 구조를 레지스트리 패턴으로 전환해 은행 추가 용이성 개선
목차
배경
연락처 송금 기능에 입금 통보 받을 은행이 한 곳 더 늘어남. 기존엔 진입 컨트롤러에서 은행 코드별 if-else로 분기하던 구조라 추가할 때마다 같은 파일을 또 건드려야 했음. 이번에 인터넷전문은행 한 곳 더 붙이라는 요청 받았는데, 같은 자리를 또 손대기 싫어서 레지스트리 패턴으로 갈아엎기로 함.
무엇을 바꿨나
- 결제대행사 웹훅 수신 진입점은 그대로 두고, 은행 코드별로 핸들러를 찾아 위임하는 레지스트리를 둠
- 공통 입금 후처리(파트너 잔액 갱신, 송금 큐 상태 전이, 알림 발송)는 유틸로 분리
- 신규 은행 핸들러는 인터페이스만 구현하면 자동 등록되게 함
| 변경 전 | 변경 후 |
|---|---|
| 컨트롤러에서 은행별 분기 | 진입점은 위임만 |
| 후처리 로직 중복 | 공통 유틸로 통합 |
| 은행 추가 = 컨트롤러 수정 | 핸들러 클래스 하나 추가 |
삽질
처음엔 인터페이스 하나 빼고 빈 등록만 하면 끝날 줄 알았음. 근데 입금 통보 페이로드가 은행마다 미묘하게 달라서, 공통 DTO로 받자니 옵셔널 필드가 폭증함. 결국 핸들러가 자기 페이로드를 직접 파싱하고 표준 입금 이벤트로 변환해서 유틸에 넘기는 식으로 정리. 컨트롤러는 raw body + 헤더만 던져줌.
웹훅 수신
→ 은행코드 추출
→ 레지스트리.find(은행코드)
→ 핸들러.parse(raw)
→ 공통유틸.처리(표준이벤트)
검증
- 이커머스 파트너 두 곳 대상 입금 시뮬레이션으로 잔액·큐 상태 동일성 확인
- 기존 은행 회귀 케이스 8건 모두 통과
- 신규 인터넷전문은행 페이로드는 결제 플랫폼 샌드박스로 5건 받아 처리 결과 비교
느낀 점과 남은 일
- 핸들러 패턴 자체는 흔한데, 결제 도메인에서는 도메인 이벤트 표준화가 절반임을 다시 체감. 입력 모양이 다 달라서 표준화 안 하면 결국 if-else가 유틸 안으로 옮겨갈 뿐
- 핸들러별 테스트 픽스처가 핸들러 폴더에 흩어져 있어서, 한 번 모아둘 예정
- 입금 실패·중복 통보 처리는 유틸에서 일괄 처리 중인데, 은행마다 재시도 정책이 달라서 후속으로 분리 필요
다음
댓글 0
첫 댓글 달아줘.