[ 2주차 과제 ] 스프린트 계획, 이커머스 요구사항 분석
              
          2025. 3. 29. 14:22ㆍ향해99 8기
설계가 명확하면, "코드를 치는 행위" 는 목표를 달성하는 "수단" 이 된다.
설계가 명확하지 않으면, "코드를 치는 행위" 는 불필요한 "노동" 이 된다.
url : https://miro.com/app/board/uXjVIJECixo=/
API Specs
기본과제
1️⃣ 주요 잔액 충전 / 조회 API
- 결제에 사용될 금액을 충전하는 API 를 작성합니다.
- 사용자 식별자 및 충전할 금액을 받아 잔액을 충전합니다. POST /api/v1/points/{userId}
- 입력값 사용자 ID , 충전 금액
- 입력값 검사
- 입력받은 사용자 ID가 유효한지(음수가 아닌지)
- 입력받은 사용자 ID에 따른 사용자가 실제로 존재하는지
- 충전 금액이 음수가 아닌지
- 충전 금액은 1회 최대 1_000_000원
- 누적 금액은 최대 5_000_000원
 
- 충전 이력 남기기
- 충전 완료
 
- 사용자 식별자를 통해 해당 사용자의 잔액을 조회합니다. GET /api/v1/points/{userId}
- 입력값은 사용자 ID
- 입력받은 사용자 ID에 따른 유저가 실제 존재하는지 검증
- 없을 시 Exception
 
- 사용자 ID로 포인트 조회
- 조회 완료
 
2️⃣ 기본 상품 조회 API
- 상품 정보 ( ID, 이름, 가격, 잔여수량 ) 을 조회하는 API 를 작성합니다. GET /api/v1/products
- 페이징 할지 말지
- cursor? offset?
 
 
- 페이징 할지 말지
- 조회시점의 상품별 잔여수량이 정확하면 좋습니다. 
- 이거먼소리임?(김정연)
- 캐싱을 고려한거 같은데 .. RDB라서 신경 안써도 될 것 같다.
 
3️⃣ 주요 선착순 쿠폰 기능
- 선착순 쿠폰 발급 API 및 보유 쿠폰 목록 조회 API 를 작성합니다.
- 사용자는 보유 쿠폰 목록을 조회할 수 있습니다. GET /api/v1/coupons?userId={userId}
- PASS
 
- 사용자는 선착순으로 할인 쿠폰을 발급받을 수 있습니다. POST /api/v1/coupons/{couponId}/issue
- couponID에 따른 coupon이 실제로 존재하는지 확인
- 잔여 수량(remain_amount)가 0이라면 발급 실패
- 1 사용자당 1번만 발급받을 수 있기 때문에 발급을 이미 받았다면 실패
- 발급 수량이 남아있다면 쿠폰 발급 성공
- 잔여 수량(remain_amount) 차감
- 쿠폰 발급 완료
 
- 주문 시에 유효한 할인 쿠폰을 함께 제출하면, 전체 주문금액에 대해 할인 혜택을 부여받을 수 있습니다.
4️⃣ 주요 주문 / 결제 API
- 사용자 식별자와 쿠폰 ID, (상품 ID, 수량) 목록을 입력받아 주문. POST /api/v1/orders
- 입력값 검증
- 사용자 ID에 따른 사용자가 실제로 존재하는지 검증
- 상품 ID에 따른 상품이 실제로 존재하는지 검증
- 수량이 음수가 아닌지 검증
 
- 구매하고자 하는 상품 수량이 재고보다 크면 주문 실패
- 쿠폰을 적용한다.
- 쿠폰 ID를 검증해서 실제 사용자가 보유한 쿠폰인지 검증
- 쿠폰의 유효기간(시작날짜, 종료날짜)을 검증
- 쿠폰의 적용 정책(discount_policy)에 할인된 주문 금액 반환
- 쿠폰 상태(is_used = true)
 
- 주문 완료. 주문 상태(orders_status = NOT_PAID)
- 주문 상태가 5분 동안 NOT_PAID 상태라면 orders_status = FAILED, 재고 롤백, 쿠폰 롤백
 
- 주문 이력 저장
 
- 입력값 검증
- 
- 사용자 식별자와 주문 ID를 받아서 결제 POST /api/v1/payments
- 입력값 검증
- 사용자가 실제로 존재하는 지 검증
- 주문이 실제로 존재하는 지 검증
 
- 사용자 포인트 조회
- 보유 포인트가 결제 금액보다 작으면 실패
- 포인트 차감
- 포인트 차감 이력 남기기
- 결제 완료
- 주문 상태 (orders_status = PAID) 변경
- 주문 정보 데이터 플랫폼에 전송
- 결제 다 잘되었는데 데이터 플랫폼 전송이 실패 -> 롤백?
 
- 입력값 검증
 
- 사용자 식별자와 주문 ID를 받아서 결제 POST /api/v1/payments
5️⃣ 기본 상위 상품 조회 API
- 최근 3일간 가장 많이 팔린 5개 상품 조회 GET /api/v1/products/best
- 00시에 스케쥴러 실행
 
'향해99 8기' 카테고리의 다른 글
| [ 3주차 과제 ] 이커머스 Clean + Layered Architecture 설계 (0) | 2025.04.05 | 
|---|---|
| [ 2주차 과제 ] API명세, API에러 상황 정리, API에러 상황 정의 (0) | 2025.04.03 | 
| [ 2주차 과제 ] 시퀀스 다이어그램, ERD (0) | 2025.04.01 | 
| [ 1주차 과제 ] 포인트 충전/사용에 대한 정책 (0) | 2025.03.25 | 
| [ 1주차 과제 ] TDD 로 개발하기 Q&A (0) | 2025.03.24 |