구독 결제 - PAYPAL
구독 결제 - PAYPAL
카테고리 : 물류
구독 결제 - PAYPAL
- 구독 결제 - PAYPAL
- 프로젝트 개요
- 프로젝트 주요 기능
- 구독 결제 프로세스 및 아키텍처
- 구독 생성 Flow Chart
- 구독 생성 Sequence Diagram
- 구독 변경 Flow Chart
- 구독 변경 Sequence Diagram
- 구독 해지 Flow Chart
- 구독 해지 Sequence Diagram
- 페이팔 구독 결제 성공 웹훅 Sequence Diagram
- 페이팔 인보이스 결제 성공 웹훅 Sequence Diagram
- 페이팔 구독 결제 실패로 인한 상태 변경 웹훅 Sequence Diagram
- 관리자 구독 취소 Sequence Diagram
- 사용자가 직접 PayPal에서 구독 취소하는 경우 Sequence Diagram
- 페이팔 환불 웹훅 Sequence Diagram
- API
- 성과 및 기여도
프로젝트 개요
해당 프로젝트는 사용자를 위한 정기 구독(Paypal) 결제 시스템을 도입하는 것을 목표로 합니다. 사용자가 보다 원활하게 SaaS 서비스를 이용할 수 있도록 Paypal을 통한 구독 결제 및 관리 시스템을 구축했습니다.
- 프로젝트명: 구독 결제 - PAYPAL
- 프로젝트 일정
- Kickoff: 2024년 7월 15일
- Demo Day: 2024년 7월 31일
- 결제 기능 출시: 2024년 8월 14일
- 프로젝트 종료: 2024년 8월 26일
- 정식 오픈: 2024년 8월 27일
- 역할: 백엔드 개발자
- 프로젝트 목적:
- PayPal 기반의 정기 구독 결제 기능 추가
- 정기 구독 관리 시스템 구축 (결제, 취소, 일시 정지, 갱신 등)
- 기존 프라이싱 플랜 재구성 및 SaaS 고객 대상 맞춤형 플랜 도입
- 사용자의 플랜 변경(업그레이드/다운그레이드) 지원
- SaaS 서비스 내에서 구독 관리 및 결제 내역 제공
- 자동 결제 프로세스 구축 및 결제 실패 처리 대응 시스템 개발
- 프로젝트 팀 구성:
- 백엔드 개발: 4명
- 프론트엔드 개발: 2명
- 기획: 1명
- 디자인: 1명
- QA: 1명
- 기술 스택:
- 백엔드: Java, Spring Boot
- API 설계: RESTful API
- 결제 시스템: PayPal Subscriptions API
- 데이터베이스: MSSQL, Redis
- 배포 및 운영: Azure DevOps
- 로그 관리: Slack API 연동 (에러 로그 자동 전송)
- 보안: Spring Security, JWT 인증
프로젝트 주요 기능
Pricing Plan 개편
- 기존 프라이싱 플랜을 개선하여 글로벌 유저 친화적인 플랜 도입
- 월간/연간 결제 모델 추가 (연간 결제 시 할인 제공)
- Free Trial 사용자에 대한 프로모션 및 유료 전환 유도
- SaaS 내 구독 관리 페이지 제공
PayPal 정기 구독 결제 시스템 구축
- PayPal API를 활용한 정기 결제 시스템 연동
- 사용자의 결제 정보 저장 및 정기 결제 자동화
- 결제 실패 시 구독 취소 또는 복구 처리 로직 구현
- 유료 결제 성공/실패 알림 메일 전송
- PayPal의 Subscription API를 활용하여 월간 및 연간 결제 옵션 제공
- 구독 시작일과 결제 일정을 자동으로 설정
- 사용자의 결제 상태 변경(결제 성공, 실패, 취소) 시 실시간 업데이트 처리
Paypal 기반 구독 관리
- Paypal을 통한 일시 중지/취소 처리
- 사용자가 Paypal에서 구독을 일시 정지할 경우, 내부 시스템에서 확인 후 구독을 자동 일시 중지
- Paypal에서 구독 취소 시, SaaS 구독도 자동 취소
- Slack 연동 CX 지원
- Paypal을 통한 구독 취소 및 일시 중지 이벤트 발생 시, Slack 알림을 통해 CX(Customer Experience)팀이 즉시 확인 가능
사용자 구독 관리 기능
- 사용자가 SaaS 내에서 구독 정보 확인 및 변경 가능
- 구독 변경 시 차액 계산 후 추가 결제 또는 크레딧 환불 지원
- 구독 취소 및 환불 요청 기능 제공
- 구독 변경/취소 시 확인 이메일 자동 발송
- 사용자가 PayPal 내에서 직접 구독 취소 가능
- SaaS에서 구독 취소 요청 시 PayPal과 연동하여 즉시 처리
백오피스 기능
- 운영팀이 백오피스에서 프라이싱 플랜 및 결제 내역 관리 가능
- 구독 정산 확인 및 관리 기능 추가
- SaaS 내 플랜 부여 및 변경 기능 제공
정기 결제 시스템
- Trial 및 유료 플랜 전환 프로세스
- 신규 사용자는 2주간 무료 Trial을 이용할 수 있으며, Trial 종료 후 유료 구독이 자동 시작됨.
- Trial 기간 중 유료 구독을 결제할 경우, 즉시 Trial이 종료되고 유료 플랜이 시작됨.
- Trial 중 정기 구독을 결제한 사용자에게는 400 Credit이 추가 지급됨.
- 정기 결제 성공 처리
- 결제가 정상적으로 이루어지면 이메일을 통해 결제 확인 알림이 자동 전송됨.
- 결제 실패 정책
- 최초 결제 실패 시 5일 간격으로 두 차례(5일 후, 10일 후) 추가 결제 시도를 진행.
- 최종 결제 실패 시, 구독이 자동 취소되고 해당 사용자의 플랜이 만료 처리됨.
구독 결제 프로세스 및 아키텍처
구독 생성 Flow Chart
flowchart TD
A[Front Page]:::yellow
B[Backend API]:::red
C[PayPal SDK/API]:::gray
D[구독 결제]
E[구독 소개 페이지]:::yellow
F[구독 주문 페이지]:::yellow
G[플랜 조회 API]:::red
H[PayPal 구독 생성 요청]:::gray
I{"PayPal 구독 성공?"}:::black
J[구독 생성 API 호출]:::red
K[PayPal 구독 활성화]:::gray
L[PayPal 결제 확인]:::gray
M{"결제 성공?"}:::black
N[구독 성공 페이지]:::yellow
O[구독 실패 페이지]:::yellow
P[PayPal 구독 취소]:::gray
D --> E
E -->|조회 요청| G
G --> F
F --> H
H --> I
I -- No --> O
I -- Yes --> J
J --> K
K --> L
L --> M
M -- Yes --> N
M -- No --> P
P --> O
classDef yellow fill:#FFD700,stroke:#333,stroke-width:2px;
classDef red fill:#FF6666,stroke:#333,stroke-width:2px;
classDef gray fill:#BEBEBE,stroke:#333,stroke-width:2px;
classDef black fill:#444,stroke:#fff,stroke-width:2px,color:#fff;
구독 생성 Sequence Diagram
sequenceDiagram
participant FRONT
participant SaaS
participant MEMBERSHIP_API
participant PAYMENT_API
participant PAYPAL
participant ALARM_CENTER
participant SLACK
FRONT->>PAYPAL: 구독 생성 요청 (상태: continue)
PAYPAL-->>FRONT: 구독 성공 응답 (상태: continue)
FRONT->>SaaS: 구독 데이터 생성 요청
SaaS->>MEMBERSHIP_API: 구독 생성 요청
alt 기존 구독 있음
MEMBERSHIP_API-->>SaaS: 구독 실패 응답
SaaS-->>FRONT: 구독 실패 응답
else
alt 기존 구독이 트라이얼 플랜
MEMBERSHIP_API-->>SaaS: 크레딧 400 충전 후 신규 구독 생성 응답
else 신규 구독
MEMBERSHIP_API-->>SaaS: 구독 생성 결과 응답
end
SaaS->>PAYMENT_API: 구독 결제 정보 저장
PAYMENT_API->>PAYPAL: 구독 상태 활성화 (상태: active)
PAYMENT_API->>PAYPAL: 결제 상태 확인
PAYPAL-->>PAYMENT_API: 결제 상태 응답
alt 결제 성공
PAYMENT_API-->>SaaS: 구독 결제 정보 응답
SaaS-->>FRONT: 성공 응답
par
PAYMENT_API-)ALARM_CENTER: 구독 시작 메일 발송
PAYMENT_API-)SLACK: 구독 시작 알림
end
else 결제 실패
PAYMENT_API->>PAYPAL: 구독 취소 요청 (상태: cancel)
PAYMENT_API-->>SaaS: 실패 응답
SaaS->>MEMBERSHIP_API: 구독 롤백 요청
MEMBERSHIP_API-->>SaaS: 구독 롤백 응답
SaaS-->>FRONT: 실패 응답
PAYMENT_API-)SLACK: 구독 실패 알림
end
end
구독 변경 Flow Chart
flowchart TD
A[Front Page]:::yellow
B[Backend API]:::red
C[PayPal SDK/API]:::gray
D[구독 변경]
E[구독 변경 페이지]:::yellow
F[구독 주문 페이지]:::yellow
G[플랜 조회 API]:::red
H[PayPal 구독 변경 요청]:::gray
I{"PayPal 구독 성공?"}:::black
J[구독 변경 API 호출]:::red
K[기존 구독 취소 & 변경 구독 활성화]:::gray
M{"변경 성공?"}:::black
N[구독 성공 페이지]:::yellow
O[구독 실패 페이지]:::yellow
P[PayPal 구독 취소]:::gray
D --> E
E -->|조회 요청| G
G --> F
F --> H
H --> I
I -- No --> O
I -- Yes --> J
J --> K
K --> M
M -- Yes --> N
M -- No --> P
P --> O
classDef yellow fill:#FFD700,stroke:#333,stroke-width:2px;
classDef red fill:#FF6666,stroke:#333,stroke-width:2px;
classDef gray fill:#BEBEBE,stroke:#333,stroke-width:2px;
classDef black fill:#444,stroke:#fff,stroke-width:2px,color:#fff;
구독 변경 Sequence Diagram
sequenceDiagram
participant FRONT
participant SaaS
participant MEMBERSHIP_API
participant PAYMENT_API
participant PAYPAL
participant ALARM_CENTER
participant SLACK
FRONT->>PAYPAL: 구독 생성 요청 (상태: continue, 시작일: 기존 구독 끝나는 시점)
PAYPAL-->>FRONT: 구독 성공 응답 (상태: continue, 시작일: 기존 구독 끝나는 시점)
FRONT->>SaaS: 구독 변경 요청
SaaS->>MEMBERSHIP_API: 구독 변경 요청
alt 기존 구독이 트라이얼 플랜
MEMBERSHIP_API-->>SaaS: 구독 변경 불가 응답 (트라이얼 플랜 변경 불가)
SaaS-->>FRONT: 구독 변경 실패 응답
else 기존 구독 없음
MEMBERSHIP_API-->>SaaS: 구독 변경 불가 응답 (변경할 기존 구독 없음)
SaaS-->>FRONT: 구독 변경 실패 응답
else 기존 구독 있음
MEMBERSHIP_API-->>SaaS: 기존 구독 만료 후 변경 구독 생성 완료 응답
SaaS->>PAYMENT_API: 변경 구독 결제 정보 저장 요청
PAYMENT_API->>PAYPAL: 기존 구독 취소 요청
PAYPAL-->>PAYMENT_API: 기존 구독 취소 응답
alt 기존 구독 취소 성공
PAYMENT_API->>PAYPAL: 변경 구독 상태 활성화 (상태: active)
PAYMENT_API-->>SaaS: 변경 구독 결제 정보 생성 응답
SaaS-->>FRONT: 성공 응답
par
PAYMENT_API-)ALARM_CENTER: 구독 변경 메일 발송
PAYMENT_API-)SLACK: 구독 변경 알림
end
else 기존 구독 취소 실패
PAYMENT_API-->>SaaS: 실패 응답
SaaS->>MEMBERSHIP_API: 구독 롤백 요청
MEMBERSHIP_API-->>SaaS: 구독 롤백 응답
SaaS-->>FRONT: 실패 응답
PAYMENT_API-)SLACK: 구독 실패 알림
end
end
구독 해지 Flow Chart
flowchart TD
A[구독 해지]
B[구독 변경 페이지]:::yellow
C{"구독 해지?"}:::black
D[End]
E[구독 해지 API]:::red
F[PayPal 구독 취소]:::gray
A --> B
B --> C
C -- NO --> B
C -- YES --> D
C --> E
E -.-> F
classDef yellow fill:#FFD700,stroke:#333,stroke-width:2px;
classDef red fill:#FF6666,stroke:#333,stroke-width:2px;
classDef gray fill:#BEBEBE,stroke:#333,stroke-width:2px;
classDef black fill:#444,stroke:#fff,stroke-width:2px,color:#fff;
구독 해지 Sequence Diagram
sequenceDiagram
participant FRONT
participant SaaS
participant MEMBERSHIP_API
participant PAYMENT_API
participant PAYPAL
FRONT->>SaaS: 구독 해제 요청
SaaS->>PAYMENT_API: 구독 해제 요청
PAYMENT_API->>PAYPAL: 구독 취소 요청
PAYPAL-->>PAYMENT_API: 구독 취소 완료 응답
PAYMENT_API-->>SaaS: 구독 결제 정보 삭제 및 PAYPAL 구독 취소 성공 응답
SaaS->>MEMBERSHIP_API: 구독 해제 요청 (구독 만료일을 현재 구독 만료일로 설정)
MEMBERSHIP_API-->>SaaS: 구독 해제 성공 응답
SaaS-->>FRONT: 구독 해제 완료 응답
페이팔 구독 결제 성공 웹훅 Sequence Diagram
sequenceDiagram
participant PAYPAL
participant PAYMENT_API
participant ALARM_CENTER
participant SLACK
PAYPAL--)PAYMENT_API: 결제 성공 웹훅 이벤트 전송
PAYMENT_API->>PAYMENT_API: 웹훅 검증 (구독 결제 여부 확인)
alt 구독 결제 성공
PAYMENT_API->>PAYMENT_API: 결제 내역 저장
PAYMENT_API-)ALARM_CENTER: 결제 성공 메일 발송 (비동기)
PAYMENT_API-)SLACK: 결제 성공 알림 전송 (비동기)
end
페이팔 인보이스 결제 성공 웹훅 Sequence Diagram
sequenceDiagram
participant PAYPAL
participant PAYMENT_API
participant SLACK
PAYPAL--)PAYMENT_API: 인보이스 결제 성공 웹훅 이벤트 전송
PAYMENT_API->>PAYMENT_API: 인보이스 아이템 타입에 맞는 결제 내역 저장
PAYMENT_API-)SLACK: 인보이스 결제 성공 알림 전송 (비동기)
페이팔 구독 결제 실패로 인한 상태 변경 웹훅 Sequence Diagram
sequenceDiagram
participant PAYPAL
participant PAYMENT_API
participant MEMBERSHIP_API
participant AZURE_SERVICE_BUS
participant ALARM_CENTER
participant SLACK
PAYPAL->>PAYPAL: 결제 실패 감지 (1차 시도)
PAYPAL--)PAYMENT_API: 결제 실패 웹훅 이벤트 전송
PAYMENT_API-)SLACK: 결제 실패 알림 전송 (비동기)
PAYPAL->>PAYPAL: 5일 후 재결제 시도 (2차 시도)
PAYPAL--)PAYMENT_API: 결제 실패 웹훅 이벤트 전송
PAYMENT_API-)SLACK: 결제 실패 알림 전송 (비동기)
PAYPAL->>PAYPAL: 5일 후 재결제 시도 (3차 시도)
PAYPAL--)PAYMENT_API: 결제 실패 웹훅 이벤트 전송
PAYMENT_API-)SLACK: 결제 실패 알림 전송 (비동기)
alt 모든 결제 시도 실패
PAYPAL->>PAYPAL: 구독 상태를 SUSPEND로 변경
PAYPAL--)PAYMENT_API: 웹훅 이벤트 전송 (구독 상태: SUSPEND)
PAYMENT_API->>PAYPAL: 구독 취소 요청
PAYPAL--)PAYMENT_API: 구독 취소 완료 응답
PAYMENT_API->>PAYMENT_API: 구독 결제 정보 삭제
PAYMENT_API->>AZURE_SERVICE_BUS: 구독 취소 메시지 큐에 전송
PAYMENT_API-)ALARM_CENTER: 구독 취소 메일 전송 (비동기)
PAYMENT_API-)SLACK: 구독 취소 알림 전송 (비동기)
MEMBERSHIP_API--)AZURE_SERVICE_BUS: 구독 취소 요청 메시지 수신
MEMBERSHIP_API->>MEMBERSHIP_API: 구독 취소 처리 (구독 만료일 업데이트)
end
관리자 구독 취소 Sequence Diagram
sequenceDiagram
participant BACKOFFICE
participant SaaS
participant PAYMENT_API
participant PAYPAL
participant MEMBERSHIP_API
BACKOFFICE->>SaaS: 구독 취소 요청
SaaS->>PAYMENT_API: 구독 취소 요청
PAYMENT_API->>PAYPAL: 구독 취소 요청
PAYPAL--)PAYMENT_API: 구독 취소 완료 응답
PAYMENT_API-->>SaaS: 구독 취소 성공 응답
SaaS->>MEMBERSHIP_API: 구독 정보 취소 요청
MEMBERSHIP_API->>MEMBERSHIP_API: 구독 상태를 '취소'로 업데이트
사용자가 직접 PayPal에서 구독 취소하는 경우 Sequence Diagram
sequenceDiagram
participant PAYPAL
participant PAYMENT_API
participant MEMBERSHIP_API
participant AZURE_SERVICE_BUS
participant ALARM_CENTER
participant SLACK
PAYPAL--)PAYMENT_API: 웹훅 이벤트 전송 (구독 상태: CANCEL)
PAYMENT_API->>PAYMENT_API: 구독 결제 정보 삭제
PAYMENT_API->>AZURE_SERVICE_BUS: 구독 취소 메시지 큐에 전송
PAYMENT_API-)SLACK: 구독 취소 알림 전송 (비동기)
MEMBERSHIP_API--)AZURE_SERVICE_BUS: 구독 취소 요청 메시지 수신
MEMBERSHIP_API->>MEMBERSHIP_API: 구독 취소 처리
페이팔 환불 웹훅 Sequence Diagram
sequenceDiagram
participant PAYPAL
participant PAYMENT_AP
PAYPAL--)PAYMENT_API: 환불 웹훅 이벤트 전송
PAYMENT_API->>PAYMENT_API: 웹훅 검증 (환불 여부 확인)
PAYMENT_API->>PAYMENT_API: 기존 결제 내역 조회
PAYMENT_API->>PAYMENT_API: 결제 상태를 '환불'로 업데이트
API
구독 결제 및 플랜 관리
- 플랜 가격 조회: 구독 가능한 플랜별 가격을 확인할 수 있음.
- 구독 생성: 사용자가 특정 플랜을 선택하여 구독할 수 있음.
- 구독 변경: 기존 구독을 다른 플랜으로 변경할 수 있음.
- 구독 취소 및 해제: 사용자가 구독을 취소하거나 즉시 해제할 수 있음.
- 구독 업그레이드: 기존 플랜을 업그레이드하여 추가 기능을 이용 가능.
사용자 구독 정보 관리
- 현재 및 미래 구독 조회: 로그인한 사용자의 현재 및 예정된 구독 정보를 확인 가능.
- 구독 상태 조회: 사용자의 구독 활성 상태를 확인 가능.
- 구독 크레딧 관리: 사용자가 보유한 크레딧 정보를 조회 가능.
결제 및 인보이스 관리
- 구독 결제 처리: 다양한 결제 수단(PayPal 등)을 통해 결제 가능.
- 결제 내역 조회: 사용자의 결제 내역을 확인할 수 있음.
- 인보이스 발행: 사용자의 결제 내역에 대한 인보이스를 생성하여 발행 가능.
성과 및 기여도
- PayPal 기반 글로벌 정기 구독 시스템 구축
- 장애 발생 시 실시간 알림으로 운영 대응 시간 단축
- 결제 실패 복구 및 구독 유지 기능을 통한 고객 만족도 향상
- Webhook 기반 결제 상태 동기화 및 결제 실패 예외 처리 로직 구현