TIL

11장 결제 시스템

1단계: 문제 이해 및 설계 범위 확정

2단계: 계략적 설계안 제시 및 동의 구하기

대금 수신 흐름

  1. 사용자가 주문 버튼을 클릭해 결제 이벤트가 결제 서비스로 전송
  2. 결제 서비스는 결제 이벤트를 데이터베이스에 저장
  3. 결제 실행자는 결제 주문을 데이터베이스에 저장
  4. 결제 실행자가 외부 PSP를 호출하여 신용 카드 결제를 처리
  5. 결제 실행자가 결제를 성공적으로 처리하고 나면 결제 서비스는 지갑을 갱신하여 특정 판매자의 잔고를 기록
  6. 지갑 서버는 갱신된 잔고 정보를 데이터베이스에 저장
  7. 지갑 서비스가 판매자 잔고를 성공적으로 갱신하면 결제 서비스는 원장을 호출
  8. 원장 서비스는 새 원장 정보를 데이터베이스에 추가
graph TD
    사용자((사용자))
    결제서비스[결제 서비스]
    DB[(데이터베이스)]
    결제실행자[결제 실행자]
    PSP[외부 PSP]
    지갑[지갑 서비스]
    원장[원장 서비스]
    
    사용자 -->|1 결제 이벤트| 결제서비스
    결제서비스 -->|2 결제 이벤트 저장| DB
    결제실행자 -->|3 주문 저장| DB
    결제실행자 -->|4 카드결제 요청| PSP
    PSP -->|4-1 결제 처리 완료| 결제실행자
    결제실행자 -->|4-2 결제 완료| 결제서비스
    결제서비스 -->|5 잔고 갱신| 지갑
    지갑 -->|6 잔고 정보 저장| DB
    지갑 -->|7 갱신 완료| 결제서비스
    결제서비스 -->|7-1 원장 갱신 요청| 원장
    원장 -->|8 원장 정보 저장| DB

결제 서비스 API

결제 서비스 데이터 모델

복식부기 원장 시스템

외부 결제 페이지

대금 정산 흐름

3단계: 상세 설계

PSP 연동

graph LR
    subgraph PSP[PSP]
        C[PSP API]
    end
    subgraph 클라이언트_브라우저[Client Browser]
        A[구매 페이지]
        E[결제 페이지]
        F[결제 완료 페이지]
    end
		subgraph 결제_시스템[결제 시스템]
        B[결제 서비스]
        D[(DB)]
    end

    A -->|1 구매 요청| B
    B <-->|2 결제 생성 및 결제 토큰 반환| C
    B -->|3 토큰 저장| D
    B -->|4 PSP 결제 페이지 표시 | E
    E -->|5 결제 시작 요청| C
    C -->|6 결제 결과 반환| E
    E -->|7 완표 페이지로 리다이렉트| F
    C -->|8 웹훅 전송 최종 결과| B

조정

결제 지연 처리

내부 서비스 간 커뮤니케이션

결제 실패 처리

정확히 한 번 전달

일관성

결제 보안