개발 slecs

결제 수단별 충전 수수료 정책을 타입으로 분리해 독립 관리

목차

충전 수수료 입력 필드 분리 및 UI 개선

충전 수수료 입력 필드 분리 및 UI 개선 기능을 구현했음.

배경

결제 수단별로 수수료 구조가 다른데, 단일 계산 로직으로 처리하면 요율 변경 시 사이드 이펙트가 생기기 쉬움. 타입별로 분리하면 각자 독립적으로 변경할 수 있음.

구현 방식

수수료 타입을 Enum으로 정의하고, 타입별 정책을 DB에서 관리하도록 했음.

코드 예시

public enum FeeType {
    CARD_PAYMENT("카드 결제 수수료"),
    VACCOUNT_CHARGE("가상계좌 수수료"),
    WITHDRAWAL("출금 수수료"),
    REFUND("환불 수수료");

    private final String label;
}

// 수수료 계산
public long calculateFee(FeeType type, long amount) {
    FeePolicy policy = feePolicyRepo.findByType(type)
        .orElseThrow(() -> new IllegalStateException("수수료 정책 미설정: " + type));
    return (long) Math.floor(amount * policy.getRate()) + policy.getFixedAmount();
}

검토 포인트

고정 금액 + 요율의 조합이 가장 유연함. 예를 들어 '거래금액의 1.5% + 기본료 550원' 같은 형태가 많음. 두 가지를 모두 지원하도록 정책 모델을 설계했음.

정리

수수료 타입이 분리되어 각 타입의 요율을 독립적으로 변경할 수 있게 됐음.

다음

댓글 0

첫 댓글 달아줘.