레슨 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 --> S32단계: 주문 흐름 (시퀀스 다이어그램)
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: 결제 실패 안내
end3단계: 주문 상태 관리 (상태도)
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에 함께 작성하여 팀원들과 공유합니다. 코드와 함께 버전 관리가 되므로 설계 변경 이력도 추적할 수 있습니다.