결제 전환 목표 아키텍처 정의 #2

Open
forge-bot wants to merge 4 commits from forge/SPRING-ARC-VERIFIED-1783826844-attempt-2 into main
4 changed files with 53 additions and 0 deletions

View file

@ -0,0 +1,3 @@
# SPRING-ARC-VERIFIED-1783826844-attempt-2
Forge 이슈 작업 브랜치 `forge/SPRING-ARC-VERIFIED-1783826844-attempt-2`.

View file

@ -0,0 +1,14 @@
# 결제 전환 목표 아키텍처 정의
## Context
결제 처리 시스템은 다양한 결제 수단과의 통합을 요구하며, 도메인 객체를 통해 결제 업무를 표준화하고 통제할 수 있어야 한다. 시스템 내부에서 외부 결제 게이트웨이와의 통신을 추상화하기 위해 포트 인터페이스를 사용한다.
## Decision
결제 처리의 성공과 실패를 명확하게 정의하고, 특정 외부와의 상호작용을 가진 경우에만 결제 작업을 수행하도록 의사 결정을 내렸다. 외부 결제 게이트웨이는 도메인에서 직접 참조되기보다는 포트 인터페이스로 접근한다.
## Alternatives
1. **직접 참조**: 도메인이 외부 시스템을 직접 호출하는 방식 (회피됨)
2. **포트-어댑터 패턴**: 도메인에서 포트를 사용하고, 외부 시스템과의 통신을 어댑터가 처리 (선택됨)
## Consequences
이 아키텍처 접근 방식은 결제 처리 시스템을 유연하게 만들어 주며, 외부 결제 시스템의 변경에 대한 내성을 제공한다. 그러나 초기 구현 시 추가적인 설계와 구현이 요구된다.

View file

@ -0,0 +1,7 @@
| 패키지 | 책임 | 금지 의존성 |
|------------|-----------------------------------------------|----------------
| controller | 사용자 요청을 처리하고 응답을 반환 | domain에 직접 의존하지 않음
| service | 비즈니스 로직을 수행하고, controller와 repository를 연결 | 외부 결제 gateway에 직접 의존하지 않음 |
| repository | 데이터베이스와의 상호작용을 관리 | service에 의존하지 않음
| domain | 도메인 객체와 그 관련 비즈니스 규칙을 정의 | 기타 패키지에 의존하지 않음
| integration | 외부 시스템과의 통합을 처리 | business logic에 의존하지 않음

View file

@ -0,0 +1,29 @@
sequenceDiagram
participant C as Controller
participant S as Service
participant R as Repository
participant DB as Database
participant E as External Payment Gateway
C->>S: 결제 요청
S->>R: 결제 정보 요청
R->>DB: 결제 정보 저장
DB-->>R: 저장 성공
S->>E: 결제 진행
E-->>S: 결제 성공
S->>C: 결제 성공 응답
note over C: 외부 실패와 같은 경우
S->>E: 결제 진행
E-->>S: 결제 실패
S->>R: 데이터 롤백
R->>DB: 롤백 처리
DB-->>R: 롤백 성공
S->>C: 결제 실패 응답
note over C: DB 실패의 경우
S->>R: 결제 정보 요청
R->>DB: 결제 정보 저장
DB-->>R: 저장 실패
R-->>S: 에러 응답
S->>C: 결제 실패 응답