Home > Back-End > 결제 서비스 MSA 아키텍쳐 전환 > 1. 결제 서비스 인터페이스 추상화

1. 결제 서비스 인터페이스 추상화
Spring Boot 3.4.0 Java 21 Interface Port and Adapter Pattern

결제 서비스의 핵심 기능들을 추상화한 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은 결제 처리 과정에서 발생하는 다양한 상황을 처리하기 위한 콜백 인터페이스입니다. 주요 기능은 다음과 같습니다:

  • 성공/실패 상황에 대한 별도 처리
  • 처리 과정의 로깅
  • 비동기 처리 지원
  • 예외 상황 핸들링

이러한 인터페이스 추상화를 통해 결제 시스템은:

  1. 구현체 교체의 용이성
  2. 테스트 용이성
  3. 시스템 결합도 감소
  4. 확장성 향상

등의 이점을 얻을 수 있습니다.