사이드프로젝트 slecs

결제 알림 신규 파트너 추가

목차

배경

결제 알림을 메신저로 수신해서 내부에 반영하는 모듈이 있음. 이번 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

첫 댓글 달아줘.