Compare commits

..

6 commits

6 changed files with 55 additions and 71 deletions

View file

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

View file

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

View file

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

View file

@ -1,35 +1,24 @@
# ADR for Payment Boundary Definition
# ADR: 결제 경계 정의
## 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. **통계 서비스**: 결제 관련 데이터 분석 및 리포팅을 담당합니다.
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.
이들 서비스는 마이크로서비스 아키텍처를 기반으로 하며, 각 서비스 간의 의존성을 최소화합니다. 통신은 REST API를 통해 이루어지며, 필요 시 메시지 큐를 활용합니다.
## Alternatives
1. **모놀리식 아키텍처**: 모든 결제 기능을 단일 애플리케이션으로 구축.
- **장점**: 단순한 배포 및 관리.
- **단점**: 확장성이 떨어지고, 하나의 서비스 장애가 전체 시스템에 영향을 미칠 수 있음.
- **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.
2. **하이브리드 아키텍처**: 결제 서비스의 일부를 별도 서비스로 분리하되, 나머지는 모놀리식으로 유지.
- **장점**: 서비스의 독립적 확장 가능성.
- **단점**: 서비스 간 의존성 문제가 발생할 수 있음.
## 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 | 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 |
|---------------|-----------------------------------------------|-------------------------|
| controller | 사용자 요청을 받고 응답을 생성 | service, repository, domain |
| service | 비즈니스 로직을 처리 | controller, repository |
| repository | 데이터 저장 및 조회 | service, controller |
| domain | 도메인 모델 및 비즈니스 규칙 정의 | controller, service |
| integration | 외부 결제 게이트웨이와의 통신 | repository, domain |

View file

@ -1,37 +1,38 @@
```mermaid
sequenceDiagram
participant User as User
participant Checkout as Checkout Service
participant Payment as Payment Gateway
participant DB as Database
participant User
participant Controller
participant Service
participant Gateway
participant Database
%% 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
User->>Controller: 결제 요청
Controller->>Service: 결제 처리 요청
Service->>Gateway: 결제 요청 전달
Gateway-->>Service: 결제 성공
Service->>Database: 결제 정보 저장
Database-->>Service: 저장 완료
Service-->>Controller: 결제 성공 응답
Controller-->>User: 결제 성공 메시지
%% 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 External Failure
Service->>Gateway: 결제 요청 전달
Gateway-->>Service: 결제 실패
Service-->>Controller: 결제 실패 응답
Controller-->>User: 결제 실패 메시지
end
%% 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
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: 오류 발생 시 롤백
```