결제 서비스의 핵심 기능들을 추상화한 PaymentPort 인터페이스에 대해 설명합니다.
이 인터페이스는 포트 앤 어댑터 패턴(헥사고날 아키텍처)을 적용하여 결제 시스템의 핵심 비즈니스 로직과 외부 시스템과의 통신을 분리하는 역할을 합니다.
인터페이스 구조
public interface PaymentPort {
PaymentResponse payment(PaymentPayload payload, PaymentAdapterRunnable<BaseResponse> runnable);
ReadResponse read(ReadPayload payload);
RefundResponse refund(RefundPayload payload, PaymentAdapterRunnable<RefundResponse> runnable);
KakaoTalkResponse sendBill(KakaoTalkPayload payload, PaymentAdapterRunnable<KakaoTalkResponse> runnable);
DestroyResponse destroy(DestroyPayload payload, PaymentAdapterRunnable<DestroyResponse> successRunnable);
default PaymentCallbackResponse callback(PaymentCallbackPayload payload, String hash) {
return null;
}
}
주요 메서드 설명
1. payment() - 결제 요청
- 실제 결제 처리를 수행하는 메서드
PaymentAdapterRunnable을 통해 결제 처리 중 발생하는 이벤트를 처리할 수 있는 콜백 제공- 결제 요청에 대한 응답으로
PaymentResponse반환
2. read() - 결제 조회
- 결제 정보를 조회하는 메서드
- 단순 조회이므로 별도의 runnable 콜백이 필요하지 않음
ReadPayload를 통해 조회 조건을 전달받아ReadResponse로 결과 반환
3. refund() - 환불 요청
- 결제 취소 및 환불 처리를 수행하는 메서드
- 환불 처리 시 발생하는 이벤트를 처리하기 위한 runnable 콜백 포함
- 환불 처리 결과를
RefundResponse로 반환
4. sendBill() - 결제 청구서 전송
- 결제 청구서를 생성하고 전송하는 메서드
- 청구서 전송 과정의 이벤트를 처리하기 위한 runnable 콜백 포함
- 청구서 전송 결과를
KakaoTalkResponse로 반환
5. destroy() - 결제 청구서 파기
- 기존에 생성된 결제 청구서를 파기하는 메서드
- 청구서 파기 처리 결과를 이벤트로 처리하기 위한 runnable 콜백 포함
- 파기 처리 결과를
DestroyResponse로 반환
6. callback() - 결제 요청 결과 콜백
- 결제 요청 후 외부 시스템(PG사)으로부터 결제 요청 결과 응답을 처리하는 메서드
default메서드로 구현되어 필요한 경우에만 오버라이드하여 사용 가능- 해시값을 통한 검증 로직 포함
PaymentAdapterRunnable의 역할
각 메서드에서 사용되는 PaymentAdapterRunnable은 결제 처리 과정에서 발생하는 다양한 상황을 처리하기 위한 콜백 인터페이스입니다. 주요 기능은 다음과 같습니다:
- 성공/실패 상황에 대한 별도 처리
- 처리 과정의 로깅
- 비동기 처리 지원
- 예외 상황 핸들링
이러한 인터페이스 추상화를 통해 결제 시스템은:
- 구현체 교체의 용이성
- 테스트 용이성
- 시스템 결합도 감소
- 확장성 향상
등의 이점을 얻을 수 있습니다.