결제 알림 신규 파트너 추가
목차
배경
결제 알림을 메신저로 수신해서 내부에 반영하는 모듈이 있음. 이번 v3.1에서 두 가지를 손봤음.
- 신규 파트너 은행을 수신 대상에 추가
- 채팅방 URL 검색 로직 개선
기존 로직이 prefix 매칭이라 신규 파트너의 URL 패턴을 못 잡고 빠지는 문제가 있었음. 알림이 들어와도 어느 파트너 채널인지 식별이 안 되니 그대로 드랍됨.
신규 파트너 추가
기존엔 정해진 몇몇 파트너만 처리. 신규 채널이 들어오니 알림 포맷이 미묘하게 다름. 금액 위치, 잔액 표기 단어, 거래일시 포맷 전부 살짝씩 다르게 옴. 한 군데에 if 분기로 우겨넣다가는 수습이 안 될 것 같아서, 파트너별 파서 후보를 두고 매칭되는 첫 파서를 쓰는 식으로 정리했음.
// 의사코드
parsers.stream()
.filter(p -> p.supports(payload))
.findFirst()
.map(p -> p.parse(payload))
.orElseThrow(...);
URL 검색 로직 개선
기존은 채팅방 식별을 위해 URL prefix를 비교했음. 근데 신규 파트너는 같은 도메인 안에서 query string으로 채널을 구분함. prefix만 보면 전부 같은 채팅방으로 인식돼서 라우팅이 깨짐.
| 항목 | 기존 | 개선 |
|---|---|---|
| 매칭 방식 | prefix 비교 | host + path + query 조합 |
| 신규 파트너 | 매칭 실패 | 정상 매칭 |
| 미일치 시 | 무시하고 종료 | 경고 로그 + 폴백 |
정규식 한 줄로 처리할까 고민했는데, host/path/query를 분리해서 비교하는 쪽이 더 명확해서 그 방향으로 갔음. 정규식은 새 파트너 추가될 때마다 깨지기 쉽다는 걸 한두 번 겪어봤음.
회고
- 파트너 늘어날수록 분기 비대해지는 게 명확하니, 한 군데만 더 추가되면 진짜로 전략 패턴으로 분리하기로 함
- 메시지 파싱 단의 단위 테스트가 부족했음. 신규 파트너 샘플 페이로드를 fixture로 박아두고 회귀 테스트 자산으로 만듦
- prefix 매칭처럼 "지금까지 잘 됐던" 로직은 새 케이스 들어올 때 가장 먼저 의심해야 함. 안 깨졌다는 건 아직 안 만났다는 뜻일 뿐임
- 외부 채널 연동 모듈은 신규 파트너 한 곳 추가가 항상 "그냥 한 줄"로 안 끝남. 다음에 견적 낼 땐 1.5배쯤 잡아두기로
다음
댓글 0
첫 댓글 달아줘.