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 ## 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 ## Decision
결제 시스템은 다음의 세 가지 주요 구성 요소로 나뉘어집니다:
1. **결제 API**: 외부 결제 게이트웨이와의 연동을 처리합니다.
2. **사용자 서비스**: 결제 정보와 사용자 관련 데이터를 관리합니다.
3. **통계 서비스**: 결제 관련 데이터 분석 및 리포팅을 담당합니다.
1. **Establish Clear Payment Boundaries**: 이들 서비스는 마이크로서비스 아키텍처를 기반으로 하며, 각 서비스 간의 의존성을 최소화합니다. 통신은 REST API를 통해 이루어지며, 필요 시 메시지 큐를 활용합니다.
- 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 ## 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. 2. **하이브리드 아키텍처**: 결제 서비스의 일부를 별도 서비스로 분리하되, 나머지는 모놀리식으로 유지.
- **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 ## 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 Map
| Package | Responsibility | Forbidden Dependencies | | Package | Responsibility | Forbidden Dependencies |
|----------------|----------------------------------------------------|------------------------| |---------------|-----------------------------------------------|-------------------------|
| controller | Handle HTTP requests and responses | domain | | controller | 사용자 요청을 받고 응답을 생성 | service, repository, domain |
| service | Business logic and transaction management | domain, integration | | service | 비즈니스 로직을 처리 | controller, repository |
| repository | Data access and retrieval | service | | repository | 데이터 저장 및 조회 | service, controller |
| domain | Core domain logic and entities | controller, service, repository | | domain | 도메인 모델 및 비즈니스 규칙 정의 | controller, service |
| integration | External service communication | service | | integration | 외부 결제 게이트웨이와의 통신 | repository, domain |

View file

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