개발 slecs

등급별 수수료 정책 조회와 정산 멱등성 처리 개선

목차

refactor: 불필요한 pageTitle 속성 제거 및 등급별 수수료 정책 조회 쿼리 추가

정산 및 수수료 로직은 버그 하나가 금전 오류로 직결되는 영역이라 신중하게 접근해야 함.

수수료 계산 구조

유통 단계별로 수수료가 누적되는 구조임. 최하위 파트너가 가장 높은 요율을 부담하고, 상위로 갈수록 낮아지며 그 차액이 각 단계의 수익임.

단계 요율 수익
최하위 1.0% 없음 (내기만 함)
상위 A 0.8% 0.2%
상위 B 0.5% 0.3%

멱등성 처리

정산 배치가 중복 실행되더라도 같은 결과가 나와야 함. settlement_key를 UNIQUE로 걸고 중복 INSERT 시 IGNORE 처리.

INSERT IGNORE INTO settlement_log
  (settlement_key, partner_sn, amount, status)
VALUES
  (#{key}, #{partnerSn}, #{amount}, 'CONFIRMED')

PENDING → CONFIRMED 전환

가상계좌: 입금 확인 + 2시간  CONFIRMED
카드: 결제 승인 + 3  CONFIRMED
취소/환불 (홀딩 ): 전부 CANCELLED (잔액 변동 없음)

PENDING 없이 즉시 차감하는 구현은 취소 처리가 복잡해짐. 상태 머신으로 관리하는 게 맞음.

리팩토링 시 주의사항

리팩토링은 기능을 바꾸지 않는 게 원칙임. 같은 동작을 더 읽기 좋은 코드로 표현하는 것.

좋은 리팩토링 나쁜 리팩토링
중복 코드 메서드 추출 동시에 기능 변경
변수명 의미있게 변경 테스트 없이 진행
복잡한 조건식 단순화 한 번에 대규모 변경

코드 리뷰 부담을 줄이려면 리팩토링 커밋과 기능 변경 커밋을 분리하는 게 좋음.

댓글 0

첫 댓글 달아줘.