Skip to content

Comments

[volume-2] 요구사항 명세, 시퀀스 다이어그램, 클래스 다이어그램, ERD 작성#57

Open
najang wants to merge 9 commits intoLoopers-dev-lab:najangfrom
najang:volume-2
Open

[volume-2] 요구사항 명세, 시퀀스 다이어그램, 클래스 다이어그램, ERD 작성#57
najang wants to merge 9 commits intoLoopers-dev-lab:najangfrom
najang:volume-2

Conversation

@najang
Copy link

@najang najang commented Feb 12, 2026

📌 Summary

  • 배경: User 도메인만 구현된 상태에서, 커머스 핵심 기능(브랜드/상품/좋아요/장바구니/주문)의 설계가 필요하다.
  • 목표: 요구사항 명세, 시퀀스 다이어그램, 클래스 다이어그램, ERD를 통해 구현 전 설계를 확정한다.
  • 결과: 사용자/어드민 API 전체 흐름, 도메인 모델, DB 스키마 설계 완료. 4개 문서 간 교차 검증 수행.

🧭 Context & Decision

문제 정의

  • 현재 동작/제약: User 도메인만 구현되어 있으며, 나머지 도메인의 설계 명세가 없다.
  • 문제(또는 리스크): 설계 없이 구현 시 도메인 간 의존성, 동시성 제어, 트랜잭션 경계에서 일관성이 깨질 수 있다.
  • 성공 기준(완료 정의): 4개 설계 문서(요구사항, 시퀀스, 클래스, ERD) 간 불일치가 없고, 구현 착수 가능한 수준의 명세가 완성된다.

선택지와 결정

  • 고려한 대안:
    • A: 재고 동시성 제어 — 낙관적 락(Optimistic Lock + @Version)
    • B: 재고 동시성 제어 — 비관적 락(Pessimistic Lock + SELECT FOR UPDATE)
  • 최종 결정: B (비관적 락). productId 오름차순으로 락을 획득하여 데드락 방지.
  • 트레이드오프: 비관적 락은 처리량이 낮지만, 재고 차감의 정확성이 더 중요한 주문 도메인에 적합하다.
  • 추후 개선 여지(있다면): 트래픽 증가 시 Redis 기반 분산 락 또는 메시지 큐 기반 비동기 처리 검토.

🏗️ Design Overview

변경 범위

  • 영향 받는 모듈/도메인: Brand, Product, Like, CartItem, Order, OrderItem (신규 도메인 6개)
  • 신규 추가: docs/design/01-requirements.md, 02-sequence-diagrams.md, 03-class-diagram.md, 04-erd.md
  • 제거/대체: 없음

주요 컴포넌트 책임

  • Brand: 브랜드 정보 관리. 삭제 시 연관 상품 연쇄 soft delete.
  • Product: 상품 정보, 재고 차감/복원, 좋아요 수 관리. 비관적 락 대상.
  • Like: 사용자-상품 좋아요 관계. 복합 키(userId + productId), 물리 삭제.
  • CartItem: 장바구니 아이템. 동일 상품 수량 누적, soft delete.
  • Order: 주문 Aggregate Root. 상태 전이 규칙 관리 (ORDERED→SHIPPING→DELIVERED, ORDERED→CANCELLED).
  • OrderItem: 주문 시점 스냅샷(상품명/가격/브랜드명) 보존. Order를 통해서만 접근.

🔁 Flow Diagram

Main Flow

sequenceDiagram
  autonumber
  participant Client
  participant API
  participant UseCase
  participant Domain
  participant DB

  Client->>API: 주문 요청 (POST /api/v1/orders)
  API->>UseCase: 주문 생성

  rect rgb(230, 245, 255)
    Note over UseCase,DB: 트랜잭션: 재고 차감 + 주문 생성
    UseCase->>Domain: 상품 조회 (비관적 락, productId 오름차순)
    Domain->>DB: SELECT FOR UPDATE
    DB-->>Domain: 상품 정보
    Domain-->>UseCase: 판매 가능 검증 + 재고 차감
    UseCase->>Domain: 주문 생성 (스냅샷 포함)
    Domain->>DB: 주문 + 주문아이템 저장
  end

  rect rgb(255, 250, 230)
    Note over UseCase,DB: 별도 트랜잭션: 장바구니 정리
    UseCase->>Domain: 장바구니 아이템 삭제
  end

  UseCase-->>API: 주문 정보
  API-->>Client: 201 Created
Loading

Checklist

  • 상품/브랜드/좋아요/주문 도메인이 모두 포함되어 있는가?
  • 기능 요구사항이 유저 중심으로 정리되어 있는가?
  • 시퀀스 다이어그램에서 책임 객체가 드러나는가?
  • 클래스 구조가 도메인 설계를 잘 표현하고 있는가?
  • ERD 설계 시 데이터 정합성을 고려하여 구성하였는가?

@coderabbitai
Copy link

coderabbitai bot commented Feb 12, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant