diff --git a/.forge/SPRING-ARC-QUALITY-1783831207-attempt-2.md b/.forge/SPRING-ARC-QUALITY-1783831207-attempt-2.md new file mode 100644 index 0000000..3523128 --- /dev/null +++ b/.forge/SPRING-ARC-QUALITY-1783831207-attempt-2.md @@ -0,0 +1,3 @@ +# SPRING-ARC-QUALITY-1783831207-attempt-2 + +Forge 이슈 작업 브랜치 `forge/SPRING-ARC-QUALITY-1783831207-attempt-2`. diff --git a/.forge/iss-155aa95ea6df-attempt-1.md b/.forge/iss-155aa95ea6df-attempt-1.md deleted file mode 100644 index 8eb76f5..0000000 --- a/.forge/iss-155aa95ea6df-attempt-1.md +++ /dev/null @@ -1,3 +0,0 @@ -# iss-155aa95ea6df-attempt-1 - -Forge 이슈 작업 브랜치 `forge/iss-155aa95ea6df-attempt-1`. diff --git a/.forge/iss-155aa95ea6df-attempt-2.md b/.forge/iss-155aa95ea6df-attempt-2.md new file mode 100644 index 0000000..b17bde5 --- /dev/null +++ b/.forge/iss-155aa95ea6df-attempt-2.md @@ -0,0 +1,3 @@ +# iss-155aa95ea6df-attempt-2 + +Forge 이슈 작업 브랜치 `forge/iss-155aa95ea6df-attempt-2`. diff --git a/.forge/iss-8fd82b653bff-attempt-1.md b/.forge/iss-8fd82b653bff-attempt-1.md new file mode 100644 index 0000000..642c13c --- /dev/null +++ b/.forge/iss-8fd82b653bff-attempt-1.md @@ -0,0 +1,3 @@ +# iss-8fd82b653bff-attempt-1 + +Forge 이슈 작업 브랜치 `forge/iss-8fd82b653bff-attempt-1`. diff --git a/docs/architecture/adr-payment-boundary.md b/docs/architecture/adr-payment-boundary.md new file mode 100644 index 0000000..a552851 --- /dev/null +++ b/docs/architecture/adr-payment-boundary.md @@ -0,0 +1,35 @@ +# 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. **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 + +- **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. \ No newline at end of file diff --git a/docs/architecture/package-map.md b/docs/architecture/package-map.md new file mode 100644 index 0000000..0cfee4d --- /dev/null +++ b/docs/architecture/package-map.md @@ -0,0 +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 | \ No newline at end of file diff --git a/docs/architecture/transaction-sequence.md b/docs/architecture/transaction-sequence.md index 5d7e5c3..7aeb9e7 100644 --- a/docs/architecture/transaction-sequence.md +++ b/docs/architecture/transaction-sequence.md @@ -1,25 +1,37 @@ ```mermaid sequenceDiagram - participant User - participant PaymentGateway - participant Bank + participant User as User + participant Checkout as Checkout Service + participant Payment as Payment Gateway + participant DB as Database %% Normal flow - User ->> PaymentGateway: Request Payment - PaymentGateway ->> Bank: Process Payment - Bank -->> PaymentGateway: Payment Approved - PaymentGateway -->> User: Payment Confirmation + User->>Checkout: Initiate Checkout + Checkout->>DB: Save Order + DB-->>Checkout: Order Confirmation + Checkout->>Payment: Process Payment + Payment-->>Checkout: Payment Success + Checkout->>User: Payment Successful - %% External failure branch - User ->> PaymentGateway: Request Payment - PaymentGateway ->> Bank: Process Payment - Bank -->> PaymentGateway: Payment Declined - PaymentGateway -->> User: Payment Declined Message + %% 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 - %% DB failure branch - User ->> PaymentGateway: Request Payment - PaymentGateway ->> Bank: Process Payment - Bank -->> PaymentGateway: DB Error - PaymentGateway -->> User: Payment Failed Due to Error - Note over PaymentGateway: Rollback transaction if needed + %% 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 ``` \ No newline at end of file