[ 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) 변경
      • 주문 정보 데이터 플랫폼에 전송
      • 결제 다 잘되었는데 데이터 플랫폼 전송이 실패 -> 롤백?

5️⃣  기본 상위 상품 조회 API

  • 최근 3일간 가장 많이 팔린 5개 상품 조회 GET /api/v1/products/best
    • 00시에 스케쥴러 실행