|
| 1 | +# 요구사항 명세서 (Requirements Specification) |
| 2 | + |
| 3 | +## 1. 개요 |
| 4 | + |
| 5 | +### 1.1 태스크 목표 정의 |
| 6 | + |
| 7 | +#### 해결하고자 하는 문제 |
| 8 | +- 기존 대형 이커머스는 상품 위주의 탐색 경험으로, 사용자가 좋아하는 상품을 발견하고 모으는 즐거움이 부족 |
| 9 | +- 구매 시 매번 결제 정보를 입력해야 하는 번거로움으로 인한 구매 전환 장벽 존재 |
| 10 | +- 사용자의 취향과 관심사를 반영한 개인화된 쇼핑 경험 부재 |
| 11 | + |
| 12 | +#### 태스크 목표 |
| 13 | +- 좋아요 기능을 통해 사용자가 관심 있는 상품을 손쉽게 큐레이션할 수 있는 환경 제공 |
| 14 | +- 포인트 선충전 모델로 구매 전환 장벽을 낮추고 빠른 결제 경험 제공 |
| 15 | +- 사용자 행동 데이터(좋아요, 구매 패턴)를 수집하여 향후 추천/랭킹 시스템 구축 기반 마련 |
| 16 | + |
| 17 | +#### 2주차 구현 범위 |
| 18 | +본 명세서는 다음 기능의 설계 및 구현을 다룹니다: |
| 19 | +- **상품 탐색**: 상품 목록 조회, 상품 상세 조회, 브랜드 조회 |
| 20 | +- **좋아요 관리**: 좋아요 등록/취소, 좋아요한 상품 목록 조회 (멱등성 보장) |
| 21 | +- **주문 처리**: 주문 생성 및 결제 (재고 차감, 포인트 차감, 외부 시스템 연동) |
| 22 | + |
| 23 | +#### 제외 범위 |
| 24 | +다음 기능은 1주차에서 구현 완료되었으며, 본 명세서에서는 다루지 않습니다: |
| 25 | +- 회원가입 및 내 정보 조회 |
| 26 | +- 포인트 충전 및 보유 포인트 조회 |
| 27 | +- 인증/인가 (X-USER-ID 헤더 기반 식별) |
| 28 | + |
| 29 | +### 1.2 기대 효과 |
| 30 | + |
| 31 | +- **사용자 재방문율 증가**: 좋아요 기능을 통한 관심 상품 큐레이션으로 재방문 유도 |
| 32 | +- **전환율 향상**: 포인트 선충전 모델로 구매 시 결제 단계를 최소화하여 전환 장벽 감소 |
| 33 | +- **데이터 기반 확장 가능성**: 사용자 행동 데이터를 수집하여 향후 추천/랭킹 시스템 구축 기반 마련 |
| 34 | + |
| 35 | +--- |
| 36 | + |
| 37 | +## 2. 도메인 용어집 |
| 38 | + |
| 39 | +### Products 도메인 |
| 40 | + |
| 41 | +**핵심 개념:** |
| 42 | +- **브랜드 (Brand)**: 상품을 생산하고 제공하는 패션 브랜드 또는 제조사 |
| 43 | +- **상품 (Product)**: 구매 가능한 개별 패션 아이템. 가격, 소속 브랜드, 재고 수량 정보를 포함 |
| 44 | + |
| 45 | +**상태:** |
| 46 | +- **판매중 (AVAILABLE)**: 재고가 있어 구매 가능한 상태 |
| 47 | +- **품절 (OUT_OF_STOCK)**: 재고가 소진되어 구매 불가능한 상태 |
| 48 | +- **단종 (DISCONTINUED)**: 더 이상 판매하지 않는 상태 |
| 49 | + |
| 50 | +### Likes 도메인 |
| 51 | + |
| 52 | +**핵심 개념:** |
| 53 | +- **좋아요 (ProductLike)**: 사용자가 특정 상품에 대해 표시하는 관심 표현. 사용자는 각 상품에 최대 1개의 좋아요만 등록 가능 |
| 54 | + |
| 55 | +### Orders 도메인 |
| 56 | + |
| 57 | +**핵심 개념:** |
| 58 | +- **주문 (Order)**: 사용자가 특정 상품의 구매를 요청하고 결제를 완료한 거래 단위 |
| 59 | +- **결제 (Payment)**: 주문에 대한 포인트 차감 및 결제 처리 정보 |
| 60 | + |
| 61 | +**주문 상태:** |
| 62 | +- **접수됨 (PLACED)**: 주문이 시스템에 접수된 상태 |
| 63 | +- **결제 완료됨 (PAID)**: 결제가 완료되어 처리 대기 중인 상태 |
| 64 | + |
| 65 | +**결제 상태:** |
| 66 | +- **준비 (READY)**: 결제가 준비된 상태 |
| 67 | +- **완료 (PAID)**: 결제가 완료된 상태 |
| 68 | + |
| 69 | +**행위:** |
| 70 | +- **주문하다 (place)**: 사용자가 상품을 주문하는 행위 |
| 71 | +- **결제하다 (pay)**: 주문에 대한 결제를 완료하는 행위 |
| 72 | + |
| 73 | +### 공통 |
| 74 | + |
| 75 | +**핵심 개념:** |
| 76 | +- **사용자 (User)**: 감성 이커머스 플랫폼에 가입하여 상품을 탐색하고 구매하는 개인. "구매자"와 동일한 의미로 사용 |
| 77 | +- **포인트 (Point)**: 사용자가 사전에 충전하여 보유한 가상 화폐 잔액. 상품 구매 시 결제 수단으로 사용됨 |
| 78 | + |
| 79 | +--- |
| 80 | + |
| 81 | +## 3. 유스케이스 명세 |
| 82 | + |
| 83 | +### 3.1 주요 사용자 |
| 84 | +- **구매자**: 패션 상품을 탐색하고 구매하는 일반 사용자 |
| 85 | + |
| 86 | +### 3.2 구매자의 목표 |
| 87 | + |
| 88 | +1. **관심 있는 상품 탐색 및 좋아요로 관리하기** |
| 89 | + - 다양한 상품 둘러보기 |
| 90 | + - 마음에 드는 상품 좋아요로 저장 |
| 91 | + - 좋아요 한 상품 다시 보기 |
| 92 | + |
| 93 | +2. **상품 주문 및 결제하기** |
| 94 | + - 원하는 상품 주문 요청 |
| 95 | + - 포인트 차감 및 재고 확보 |
| 96 | + - 주문 완료 처리 |
| 97 | + |
| 98 | +### 3.3 유스케이스 시나리오 |
| 99 | + |
| 100 | +#### 유스케이스 1: 관심 있는 상품 탐색 및 좋아요로 관리하기 |
| 101 | + |
| 102 | +**주요 시나리오:** |
| 103 | +1. 사용자가 상품 목록 화면에 진입한다 |
| 104 | +2. 시스템은 최신 등록된 상품 목록을 조회한다 (각 상품의 좋아요 수 포함) |
| 105 | +3. 사용자가 관심 있는 상품의 상세 정보를 조회한다 (좋아요 수 포함) |
| 106 | +4. 사용자가 해당 상품에 좋아요를 등록한다 |
| 107 | +5. 시스템은 좋아요를 저장하고 해당 상품의 좋아요 수를 1 증가시킨다 |
| 108 | +6. 사용자가 "내가 좋아요 한 상품 목록"을 조회하여 저장한 상품들을 확인한다 |
| 109 | + |
| 110 | +**대체 시나리오 1 (브랜드별 상품 필터링):** |
| 111 | +1. 사용자가 브랜드 정보를 조회한다 |
| 112 | +2. 사용자가 특정 브랜드를 선택하여 해당 브랜드의 상품만 필터링한다 |
| 113 | +3. 시스템은 선택된 브랜드의 상품 목록을 조회하여 반환한다 |
| 114 | +4. 해당 브랜드에 상품이 없으면 빈 목록을 표시한다 |
| 115 | + |
| 116 | +**대체 시나리오 2 (정렬 기준 변경):** |
| 117 | +1. 사용자가 정렬 기준을 선택한다 (최신순/가격낮은순/인기순) |
| 118 | +2. 시스템은 선택된 기준으로 상품을 정렬하여 반환한다 |
| 119 | + |
| 120 | +**대체 시나리오 3 (좋아요 중복 등록 - 멱등성):** |
| 121 | +1. 사용자가 이미 좋아요를 등록한 상품에 다시 좋아요를 등록한다 |
| 122 | +2. 시스템은 오류 없이 성공 응답을 반환하며, 좋아요 상태는 변경되지 않는다 |
| 123 | +3. 상품의 좋아요 수는 증가하지 않는다 |
| 124 | + |
| 125 | +**대체 시나리오 4 (좋아요 취소):** |
| 126 | +1. 사용자가 좋아요를 등록한 상품의 좋아요를 취소한다 |
| 127 | +2. 시스템은 좋아요를 제거하고 해당 상품의 좋아요 수를 1 감소시킨다 |
| 128 | +3. 사용자가 "내가 좋아요 한 상품 목록"에서 해당 상품이 제거된 것을 확인한다 |
| 129 | + |
| 130 | +**대체 시나리오 5 (좋아요 취소 중복 요청 - 멱등성):** |
| 131 | +1. 사용자가 좋아요를 등록하지 않은 상품에 좋아요 취소를 요청한다 |
| 132 | +2. 시스템은 오류 없이 성공 응답을 반환하며, 좋아요 상태는 변경되지 않는다 |
| 133 | +3. 상품의 좋아요 수는 감소하지 않는다 |
| 134 | + |
| 135 | +**예외 시나리오 1 (존재하지 않는 상품):** |
| 136 | +1. 사용자가 존재하지 않는 상품에 좋아요를 등록하거나 상세 조회를 시도한다 |
| 137 | +2. 시스템은 "상품을 찾을 수 없음" 오류를 반환한다 |
| 138 | + |
| 139 | +**예외 시나리오 2 (잘못된 정렬 기준):** |
| 140 | +1. 사용자가 지원하지 않는 정렬 기준을 입력한다 |
| 141 | +2. 시스템은 "지원하지 않는 정렬 기준" 오류를 반환한다 |
| 142 | + |
| 143 | +--- |
| 144 | + |
| 145 | +#### 유스케이스 2: 상품 주문 및 결제하기 |
| 146 | + |
| 147 | +**주요 시나리오:** |
| 148 | +1. 사용자가 원하는 상품을 선택하고 주문을 요청한다 |
| 149 | +2. 시스템은 상품 재고를 차감한다 |
| 150 | +3. 시스템은 주문을 접수 상태로 생성한다 |
| 151 | +4. 시스템은 결제를 준비 상태로 생성한다 |
| 152 | +5. 시스템은 사용자의 포인트를 차감한다 |
| 153 | +6. 시스템은 외부 PG 시스템에 결제 요청을 전송한다 |
| 154 | +7. 사용자에게 주문 생성 완료 응답을 반환한다 (결제 준비 상태) |
| 155 | + |
| 156 | +**대체 시나리오 1 (전액 포인트 결제):** |
| 157 | +1. 사용자가 상품 주문을 요청한다 |
| 158 | +2. 시스템은 재고를 차감한다 |
| 159 | +3. 시스템은 주문을 접수 상태로 생성한다 |
| 160 | +4. 시스템은 결제를 준비 상태로 생성한다 |
| 161 | +5. 시스템은 포인트를 차감한다 (전액 결제 가능) |
| 162 | +6. 외부 PG 호출을 스킵하고 결제를 완료 처리한다 |
| 163 | +7. 사용자에게 주문 완료 응답을 반환한다 |
| 164 | + |
| 165 | +**예외 시나리오 1 (재고 부족):** |
| 166 | +1. 사용자가 상품 주문을 요청한다 |
| 167 | +2. 시스템이 재고 차감을 시도하지만 재고가 부족하여 실패한다 |
| 168 | +3. 시스템은 "재고 부족" 오류를 반환한다 |
| 169 | +4. 주문이 생성되지 않으며, 포인트도 차감되지 않는다 |
| 170 | + |
| 171 | +**예외 시나리오 2 (포인트 부족):** |
| 172 | +1. 사용자가 상품 주문을 요청한다 |
| 173 | +2. 시스템이 재고를 차감한다 |
| 174 | +3. 시스템이 포인트 차감을 시도하지만 잔액이 부족하여 실패한다 |
| 175 | +4. 시스템은 트랜잭션을 롤백한다 |
| 176 | +5. 시스템은 "포인트 부족" 오류를 반환한다 |
| 177 | +6. 주문 및 결제가 생성되지 않는다 |
| 178 | + |
| 179 | +**예외 시나리오 3 (외부 PG 시스템 실패):** |
| 180 | +1. 사용자가 상품 주문을 요청한다 |
| 181 | +2. 시스템이 재고, 포인트 차감 및 주문/결제 생성을 시도한다 |
| 182 | +3. 외부 PG 시스템에 결제 요청 전송 시 오류가 발생한다 |
| 183 | +4. 시스템은 트랜잭션을 롤백한다 |
| 184 | +5. 시스템은 "결제 요청 실패" 오류를 반환한다 |
| 185 | +6. 주문 및 결제가 생성되지 않으며, 재고와 포인트도 차감되지 않는다 |
| 186 | + |
| 187 | +--- |
| 188 | + |
| 189 | +## 4. 기술 요구사항 |
| 190 | + |
| 191 | +### 4.1 데이터 정합성 |
| 192 | + |
| 193 | +**주문 처리 (재고/포인트 차감)** |
| 194 | +- 강한 일관성 (Strong Consistency) 필요 |
| 195 | +- 재고 차감, 포인트 차감, 주문 생성, 결제 생성이 모두 성공하거나 모두 실패해야 함 |
| 196 | +- 트랜잭션 롤백을 통한 원자성 보장 |
| 197 | + |
| 198 | +**좋아요 카운트** |
| 199 | +- 최종 일관성 (Eventual Consistency) 허용 |
| 200 | +- 좋아요 수는 대략적인 인기도 지표로, 실시간 정확성 불필요 |
| 201 | +- 사용자의 좋아요 등록/취소 상태는 즉시 반영되어야 함 |
| 202 | + |
| 203 | +### 4.2 에러 처리 |
| 204 | + |
| 205 | +**주문 생성 실패** |
| 206 | +- 재고 부족: 재고 부족 정보 제공 |
| 207 | +- 포인트 부족: 포인트 잔액 부족 정보 제공 |
| 208 | +- 외부 PG 시스템 실패: 결제 요청 실패 정보 전달 (전체 롤백) |
| 209 | + |
| 210 | +**좋아요 처리** |
| 211 | +- 존재하지 않는 상품: "상품을 찾을 수 없음" 명확히 구분 |
| 212 | +- 멱등성 보장: 중복 요청에도 사용자에게 성공 응답 전달 |
0 commit comments