개발 slecs

비회원 결제에 쿠폰 라우팅·정산 연동 SMS 발송 추가

목차

비회원 구매 흐름에 쿠폰 라우팅 붙이기

이커머스 쪽 비회원 결제 플로우에 쿠폰을 끼워 넣는 작업을 함. 회원이면 마이페이지에서 쿠폰함을 거치는데, 비회원은 그 단계가 통째로 비어있어서 결제 직후 어디로 보내야 할지 분기가 필요했음.

처음엔 단순히 "비회원이면 결제 완료 화면, 회원이면 쿠폰함" 정도로 생각했는데, 실제로는 케이스가 더 많음.

  • 파트너가 쿠폰을 직접 발송한 케이스 → 파트너 도메인 페이지로 회귀
  • 일반 이커머스 결제 후 쿠폰 자동 지급 → 비회원 쿠폰 조회 페이지
  • 관리자 수동 발급 → 별도 안내 화면

라우팅 키를 주문 origin + 쿠폰 발급 채널 두 개로 잡아서, 컨트롤러 진입점에서 분기시켰음. 비회원은 토큰 기반으로 단건 조회만 열어주고, 회원은 기존 세션 흐름 그대로.

파트너 SMS 발송

쿠폰이 발급되면 파트너가 자체 SMS로 안내해야 하는 요건이 있었는데, 처음엔 "그냥 발송하면 되겠지" 했다가 한 번 데였음. 발송 시점을 결제 완료가 아니라 정산 확정 시점에 걸어야 한다는 걸 뒤늦게 발견함. 환불·취소 시 잘못된 안내가 나가면 파트너 CS가 폭발하기 때문.

시점 상태 SMS
결제 직후 PENDING 발송 안 함
정산 확정 CONFIRMED 발송
홀딩 중 취소 CANCELLED 발송 안 함

PENDING 단계에선 큐에만 적재하고, 확정 훅에서 큐를 비우는 식으로 정리. 이 부분은 결제대행사 쪽 정산 사이클이랑 맞물려서 한 번에 떨어지지 않음. 핀테크 입출금처럼 익월 후정산 항목도 있어서, 발송 트리거를 정산 이벤트가 아닌 잔액 반영 이벤트에 거는 게 더 안전했음.

관리자 화면 컬럼 추가

엑셀 다운로드 설정을 코드 곳곳에 흩뿌리는 게 너무 싫어서, 이번에 컬럼 정의를 한 군데로 모았음.

order_export:
  columns:
    - { key: orderNo,   label: 주문번호 }
    - { key: payOrigin, label: 결제경로 }
    - { key: couponCh,  label: 쿠폰채널 }
    - { key: smsStatus, label: 안내발송 }

레지스트리 한 곳만 고치면 화면·엑셀·검색 필터가 같이 따라옴. 한 군데에 몰아넣으니 컬럼 순서 바뀐다고 매번 PR 두세 개 날리는 일이 사라져서 만족.

회고

  • 라우팅은 origin + channel 조합으로 잡는 게 if 사다리보다 훨씬 깔끔
  • SMS 트리거는 결제 완료가 아닌 잔액 반영 시점에 — 환불 케이스 안전판
  • 화면 메타데이터는 한 곳에 모아두면 PR 부담 급감

다음

댓글 0

첫 댓글 달아줘.