Learning
레슨 7 / 8·25분

실전: 시스템 설계 문서

실전 프로젝트: 쇼핑몰 시스템 설계 문서

지금까지 배운 모든 Mermaid 다이어그램을 활용하여 실제 프로젝트의 설계 문서를 작성해 봅니다. 쇼핑몰 시스템을 예시로 전체 아키텍처, API 흐름, 데이터 모델, 프로젝트 일정을 문서화합니다.

1단계: 시스템 아키텍처 (플로우차트)

mermaid
graph TB
    subgraph 클라이언트
        Web[웹 브라우저]
        Mobile[모바일 앱]
    end

    subgraph API_Gateway[API Gateway]
        LB[로드 밸런서]
        Auth[인증 미들웨어]
    end

    subgraph 서비스
        UserSvc[사용자 서비스]
        ProductSvc[상품 서비스]
        OrderSvc[주문 서비스]
        PaymentSvc[결제 서비스]
        NotiSvc[알림 서비스]
    end

    subgraph 데이터
        PostgreDB[(PostgreSQL)]
        Redis[(Redis Cache)]
        S3[(파일 스토리지)]
        MQ[메시지 큐]
    end

    Web --> LB
    Mobile --> LB
    LB --> Auth
    Auth --> UserSvc
    Auth --> ProductSvc
    Auth --> OrderSvc
    OrderSvc --> PaymentSvc
    PaymentSvc --> MQ
    MQ --> NotiSvc

    UserSvc --> PostgreDB
    ProductSvc --> PostgreDB
    ProductSvc --> Redis
    OrderSvc --> PostgreDB
    ProductSvc --> S3

2단계: 주문 흐름 (시퀀스 다이어그램)

mermaid
sequenceDiagram
    autonumber
    actor User as 고객
    participant FE as 프론트엔드
    participant GW as API Gateway
    participant Order as 주문 서비스
    participant Product as 상품 서비스
    participant Payment as 결제 서비스
    participant Noti as 알림 서비스

    User->>FE: 주문하기 클릭
    FE->>GW: POST /api/orders

    GW->>Product: 재고 확인
    Product-->>GW: 재고 있음

    GW->>Order: 주문 생성

    alt 결제 성공
        Order->>Payment: 결제 요청
        Payment-->>Order: 결제 완료
        Order->>Noti: 주문 확인 알림
        Noti-->>User: 이메일/SMS 발송
        Order-->>GW: 주문 성공
        GW-->>FE: 200 OK
        FE-->>User: 주문 완료 화면
    else 결제 실패
        Order->>Payment: 결제 요청
        Payment-->>Order: 결제 실패
        Order-->>GW: 결제 오류
        GW-->>FE: 400 Error
        FE-->>User: 결제 실패 안내
    end

3단계: 주문 상태 관리 (상태도)

mermaid
stateDiagram-v2
    [*] --> 장바구니
    장바구니 --> 주문접수 : 주문하기
    주문접수 --> 결제대기 : 주문 확인
    결제대기 --> 결제완료 : 결제 성공
    결제대기 --> 주문취소 : 결제 실패/시간 초과
    결제완료 --> 상품준비 : 판매자 확인
    상품준비 --> 배송중 : 출고
    배송중 --> 배송완료 : 수령 확인
    배송완료 --> 구매확정 : 자동 확정 (7일)
    배송완료 --> 반품요청 : 반품 신청
    반품요청 --> 반품진행 : 반품 승인
    반품진행 --> 환불완료 : 환불 처리
    구매확정 --> [*]
    주문취소 --> [*]
    환불완료 --> [*]

4단계: 데이터 모델 (ER 다이어그램)

mermaid
erDiagram
    CUSTOMER {
        int id PK
        string name
        string email UK
        string phone
        date joined_at
    }
    PRODUCT {
        int id PK
        string name
        string description
        float price
        int stock
        int category_id FK
    }
    CATEGORY {
        int id PK
        string name
        int parent_id FK
    }
    ORDER {
        int id PK
        int customer_id FK
        string status
        float total
        date created_at
    }
    ORDER_ITEM {
        int id PK
        int order_id FK
        int product_id FK
        int quantity
        float price
    }
    PAYMENT {
        int id PK
        int order_id FK
        string method
        string status
        float amount
        date paid_at
    }

    CUSTOMER ||--o{ ORDER : "주문"
    ORDER ||--|{ ORDER_ITEM : "포함"
    PRODUCT ||--o{ ORDER_ITEM : "주문됨"
    CATEGORY ||--o{ PRODUCT : "분류"
    ORDER ||--|| PAYMENT : "결제"

5단계: 프로젝트 일정 (간트 차트)

mermaid
gantt
    title 쇼핑몰 개발 프로젝트
    dateFormat YYYY-MM-DD
    axisFormat %m/%d

    section 설계
    요구사항 분석      :done, a1, 2024-01-01, 5d
    시스템 설계        :done, a2, after a1, 5d
    DB 설계           :done, a3, after a1, 4d

    section 백엔드
    사용자 서비스      :active, b1, after a2, 10d
    상품 서비스        :active, b2, after a3, 10d
    주문/결제 서비스   :b3, after b1, 12d

    section 프론트엔드
    상품 목록/상세     :c1, after a2, 14d
    장바구니/결제      :c2, after c1, 10d

    section QA
    통합 테스트        :crit, d1, after b3, 7d
    출시              :milestone, after d1, 0d
💡

실무에서는 이러한 다이어그램들을 Markdown 문서나 Wiki에 함께 작성하여 팀원들과 공유합니다. 코드와 함께 버전 관리가 되므로 설계 변경 이력도 추적할 수 있습니다.