Compare commits

..

11 commits

Author SHA1 Message Date
615d10ff93 Merge pull request '결제 전환 목표 아키텍처 정의 (1/2) (1/2)' (#5) from forge/SPRING-ARC-QUALITY-1783831207-attempt-2 into main 2026-07-12 04:44:43 +00:00
6a5098ebe1 결제 전환 목표 아키텍처 정의 (1/2) (1/2) (SPRING-ARC-QUALITY-1783831207)
All checks were successful
ci / test (pull_request) Successful in 7s
2026-07-12 04:44:23 +00:00
ce291ba9ec Merge pull request '결제 전환 목표 아키텍처 정의 (1/2) (2/2)' (#4) from forge/iss-8fd82b653bff-attempt-1 into main 2026-07-12 04:44:14 +00:00
0541f0a989 결제 전환 목표 아키텍처 정의 (1/2) (2/2) (iss-8fd82b653bff)
All checks were successful
ci / test (pull_request) Successful in 7s
2026-07-12 04:43:52 +00:00
5dd7302aa9 forge: open work branch for iss-8fd82b653bff-attempt-1 2026-07-12 04:42:44 +00:00
64d285762e 결제 전환 목표 아키텍처 정의 (1/2) (SPRING-ARC-QUALITY-1783831207) 2026-07-12 04:42:18 +00:00
4ac5045734 Merge pull request '결제 전환 목표 아키텍처 정의 (2/2)' (#3) from forge/iss-155aa95ea6df-attempt-2 into main 2026-07-12 04:42:07 +00:00
040b29aa5a 결제 전환 목표 아키텍처 정의 (2/2) (iss-155aa95ea6df)
All checks were successful
ci / test (pull_request) Successful in 6s
2026-07-12 04:41:46 +00:00
2bc7c0718b forge: open work branch for iss-155aa95ea6df-attempt-2 2026-07-12 04:41:39 +00:00
73f993754f 결제 전환 목표 아키텍처 정의 (SPRING-ARC-QUALITY-1783831207) 2026-07-12 04:41:00 +00:00
b141cac6bc forge: open work branch for SPRING-ARC-QUALITY-1783831207-attempt-2 2026-07-12 04:40:47 +00:00
6 changed files with 71 additions and 55 deletions

View file

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

View file

@ -0,0 +1,3 @@
# iss-155aa95ea6df-attempt-2
Forge 이슈 작업 브랜치 `forge/iss-155aa95ea6df-attempt-2`.

View file

@ -0,0 +1,3 @@
# iss-8fd82b653bff-attempt-1
Forge 이슈 작업 브랜치 `forge/iss-8fd82b653bff-attempt-1`.

View file

@ -1,24 +1,35 @@
# ADR: 결제 경계 정의
# ADR for Payment Boundary Definition
## Context
이 문서에서는 결제 시스템의 아키텍처 경계를 정의합니다. 결제 처리는 시스템의 핵심 기능 중 하나이며, 다른 서비스들과의 통합이 필요합니다. 또한 보안과 데이터 전송의 무결성을 보장하는 것이 필수적입니다.
In the payment processing system, clarity and delineation of boundaries are critical for ensuring security, maintainability, and scalability. Understanding the interactions between different components that handle payment transactions will help manage risks associated with payment data and integrations with external systems.
The current system lacks a well-defined architecture for its payment processing boundaries. This has led to difficulties in isolating payment-related components, enforcing security measures, and integrating with third-party payment providers.
## Decision
결제 시스템은 다음의 세 가지 주요 구성 요소로 나뉘어집니다:
1. **결제 API**: 외부 결제 게이트웨이와의 연동을 처리합니다.
2. **사용자 서비스**: 결제 정보와 사용자 관련 데이터를 관리합니다.
3. **통계 서비스**: 결제 관련 데이터 분석 및 리포팅을 담당합니다.
이들 서비스는 마이크로서비스 아키텍처를 기반으로 하며, 각 서비스 간의 의존성을 최소화합니다. 통신은 REST API를 통해 이루어지며, 필요 시 메시지 큐를 활용합니다.
1. **Establish Clear Payment Boundaries**:
- Define a dedicated Payment Service responsible for handling all payment transactions.
- Separate the payment logic from other business logic to adhere to the single responsibility principle.
- The Payment Service will interact with external payment gateways, ensuring that sensitive payment data remains secure and encapsulated.
2. **Adopt Event-Driven Architecture**:
- Introduce an event bus for communication between the Payment Service and other components (e.g., Order Service, Notification Service). This will allow for decoupled interactions and better scalability.
- Utilize events such as `PaymentProcessed`, `PaymentFailed`, and `RefundProcessed` to notify other services about payment outcomes.
3. **Implement Strong Authentication and Authorization**:
- All access to the Payment Service must go through an authentication layer, verifying the identity and permissions of the calling service.
- Enforce strict access controls to sensitive payment processing endpoints.
## Alternatives
1. **모놀리식 아키텍처**: 모든 결제 기능을 단일 애플리케이션으로 구축.
- **장점**: 단순한 배포 및 관리.
- **단점**: 확장성이 떨어지고, 하나의 서비스 장애가 전체 시스템에 영향을 미칠 수 있음.
2. **하이브리드 아키텍처**: 결제 서비스의 일부를 별도 서비스로 분리하되, 나머지는 모놀리식으로 유지.
- **장점**: 서비스의 독립적 확장 가능성.
- **단점**: 서비스 간 의존성 문제가 발생할 수 있음.
- **Tightly Coupled Monolithic Approach**: Keeping the payment logic embedded within a monolithic application, which would simplify communications at the cost of flexibility and security. Not recommended due to increased risk and reduced scalability.
- **Using Microservices Without Boundaries**: Deploying multiple microservices interacting directly with each other without a clear Payment Service, leading to potential security vulnerabilities and a tangled codebase. Not recommended due to maintainability concerns.
## Consequences
선택한 마이크로서비스 아키텍처는 확장성과 유지보수성을 보장할 수 있습니다. 그러나 초기 구현의 복잡성이 증가하며, 서비스 간의 데이터 일관성을 유지하기 위한 추가적인 노력이 필요합니다. 각 서비스는 독립적으로 배포가 가능하므로 더 빠른 피처 릴리즈가 가능합니다. 또한, 결제 처리를 별도로 분리함으로써 보안 요구사항을 더 잘 충족할 수 있습니다.
Implementing these boundaries will lead to:
- Increased security around payment processing, protecting sensitive customer data.
- Improved maintainability, as the payment logic is separate from other business functionalities.
- Greater scalability, with an event-driven model allowing for easier integration of additional services as needed.
- Enhanced resilience through decoupling, allowing individual services to scale and handle failures independently.

View file

@ -1,9 +1,9 @@
# Package Map
| Package | Responsibility | Forbidden Dependencies |
|---------------|-----------------------------------------------|-------------------------|
| controller | 사용자 요청을 받고 응답을 생성 | service, repository, domain |
| service | 비즈니스 로직을 처리 | controller, repository |
| repository | 데이터 저장 및 조회 | service, controller |
| domain | 도메인 모델 및 비즈니스 규칙 정의 | controller, service |
| integration | 외부 결제 게이트웨이와의 통신 | repository, domain |
|----------------|----------------------------------------------------|------------------------|
| controller | Handle HTTP requests and responses | domain |
| service | Business logic and transaction management | domain, integration |
| repository | Data access and retrieval | service |
| domain | Core domain logic and entities | controller, service, repository |
| integration | External service communication | service |

View file

@ -1,38 +1,37 @@
```mermaid
sequenceDiagram
participant User
participant Controller
participant Service
participant Gateway
participant Database
participant User as User
participant Checkout as Checkout Service
participant Payment as Payment Gateway
participant DB as Database
User->>Controller: 결제 요청
Controller->>Service: 결제 처리 요청
Service->>Gateway: 결제 요청 전달
Gateway-->>Service: 결제 성공
Service->>Database: 결제 정보 저장
Database-->>Service: 저장 완료
Service-->>Controller: 결제 성공 응답
Controller-->>User: 결제 성공 메시지
%% Normal flow
User->>Checkout: Initiate Checkout
Checkout->>DB: Save Order
DB-->>Checkout: Order Confirmation
Checkout->>Payment: Process Payment
Payment-->>Checkout: Payment Success
Checkout->>User: Payment Successful
alt External Failure
Service->>Gateway: 결제 요청 전달
Gateway-->>Service: 결제 실패
Service-->>Controller: 결제 실패 응답
Controller-->>User: 결제 실패 메시지
end
%% External failure
User->>Checkout: Initiate Checkout
Checkout->>DB: Save Order
DB-->>Checkout: Order Confirmation
Checkout->>Payment: Process Payment
Payment-->>Checkout: Payment Failure
Checkout->>DB: Rollback Order
DB-->>Checkout: Order Rollback
Checkout->>User: Payment Failed
alt DB Failure
Service->>Gateway: 결제 요청 전달
Gateway-->>Service: 결제 성공
Service->>Database: 결제 정보 저장
Database-->>Service: 저장 실패
Service-->>Controller: 결제 처리 실패 응답
Controller-->>User: 결제 처리 실패 메시지
end
Service->>Database: Transaction Commit
note right of Database: 저장 완료
Service->>Database: Transaction Rollback
note right of Database: 오류 발생 시 롤백
%% DB failure
User->>Checkout: Initiate Checkout
Checkout->>DB: Save Order
DB-->>Checkout: Order Confirmation
Checkout->>Payment: Process Payment
Payment-->>Checkout: Payment Success
Checkout->>DB: Commit Order
DB-->>Checkout: Error
Checkout->>DB: Rollback Order
DB-->>Checkout: Order Rollback
Checkout->>User: Payment Successful, Order Error
```