📚 문서 목록
- 1️⃣ 요구사항 분석 문서
- 2️⃣ 마일스톤 문서
- 3️⃣ 다이어그램 문서
- 4️⃣ ERD 문서
- 5️⃣ API 명세
다음은 E-커머스 전반적인 기능에 대한 내용을 포함하고 있다.
사용자는 잔액을 충전하거나 조회할 수 있으며, 선착순으로 제공되는 쿠폰을 발급받아 보유 쿠폰 목록을 확인할 수 있다.
사용자는 상위 상품 Top5, 상품 목록을 조회할 수 있다. 해당 상품 중 1개 혹은 여러 개의 상품을 골라 주문이 가능하다.
주문/결제 시에는, 사용자의 충전한 잔액과 쿠폰(주문 금액에 대한 할인)을 사용할 수 있다. 주문/결제 완료 시에는 외부 데이터 플랫폼으로 데이터가 전송되어야 한다.
✅ 기능적 요구사항
[잔액 조회]
- 사용자는 유효해야한다. (사용자 검증)
- 잔액이 없다면, 0을 반환한다. (
empty
의 개념으로 반환) - 잔액을 조회한다.
[잔액 충전]
- 사용자는 유효해야한다. (사용자 검증)
- 충전 금액은 0보다 큰 양수여야 한다. (자연수)
- 잔고 정보가 존재하지 않으면, 새로 생성 후 충전 금액을 저장한다.
- 잔고가 이미 존재하면, 기존 금액에 충전 금액을 더하여 업데이트한다.
- 충전한 금액이 최대 잔액 1,000만원을 넘기면 안된다.
- 잔액을 충전한다.
- 잔액 충전이 완료되면 잔고 이력 테이블에 저장한다. (거래 타입, 거래 금액 - 충전, 사용)
☑️ 비기능적 요구사항
- 동시에 충전 시, 최대금액을 초과하지 않게 동시성이 보장되어야 한다. (동시성 제어)
✅ 기능적 요구사항
[상품 조회]
- 상품 정보 (상품 ID, 상품이름, 상품가격, 재고 수) 목록을 조회한다.
- 조회 시, 가져오는 재고 수는 재고 테이블에서 가져온다.
- 조회 시, 판매가능 상태의 상품만 조회된다.
☑️ 비기능적 요구사항
- 조회 시점에, 상품별 재고수량은 정확하면 좋다. (동시성 제어, 캐싱 주의)
✅ 기능적 요구사항
[보유 쿠폰 목록 조회]
- 사용자는 유효해야한다. (사용자 검증)
- 쿠폰 정보 (ID, 쿠폰이름, 할인율, 만료기간) 목록을 조회한다.
- 이때, 사용가능한 쿠폰 정보를 조회해야 한다.
[선착순 쿠폰 발급]
- 사용자는 유효해야한다. (사용자 검증)
- 쿠폰이 존재해야 한다. (쿠폰 검증)
- 이미 발급 받은 쿠폰인지 검증 한다. (쿠폰 중복 발급 검증)
- 쿠폰은 발급 가능한 상태이여야 한다. (쿠폰 상태 검증)
- 쿠폰 발급 가능한 수량이 있어야 한다. (쿠폰 수량 검증)
- 현재 일자가 쿠폰 만료일자 이전이여야 한다. (쿠폰 만료 검증)
- 사용자 식별자와 쿠폰 식별자를 받아 선착순 쿠폰을 발급하여 저장한다.
☑️ 비기능적 요구사항
- 쿠폰 발급 시, 동시성이 보장되어야 한다. (공정모드 - 순서보장)
✅ 기능적 요구사항
[주문 생성]
- 사용자는 유효해야한다. (사용자 검증)
- 상품 목록에 대한 상품 식별자에 대해서 상품이 존재하는지 검증한다. (상품 검증)
- 쿠폰 ID 존재 시, 쿠폰이 사용 가능한지 검증한다.
- 주문 총 금액을 계산한다.
- 주문을 생성한다.
- 주문상품을 생성한다.
[결제 완료]
- 주문 총 금액 잔고가 충분한지 검증한다.
- 잔고를 차감한다.
- 쿠폰 ID 존재 시, 쿠폰을 사용한다.
- 구매하려고 하는 수량 보다 큰 재고가 존재하는지 검증한다. (상품 재고 검증)
- 상품 재고를 차감한다.
- 결제 완료 처리한다.
[외부 플랫폼 주문 전송]
- 주문/결제 완료 시, 외부 데이터 플랫폼으로 주문을 전송한다.
☑️ 비기능적 요구사항
- 주문/결제 실패 시, 트랜잭션 보장이 필요하다.
- 외부 데이터 플랫폼 주문 정보 전송은 Mock 처리 한다.
- 재고 관리 및 잔액 차감, 쿠폰 사용이 정상적이도록 동시성 보장이 필요하다.
✅ 기능적 요구사항
- 주문 및 결제가 완료된 최근 3일간 가장 많이 팔린 상위 5개 상품 정보 목록을 조회한다.
- 일 배치를 통한 집계성 데이터 저장
☑️ 비기능적 요구사항
- 배치 스케줄러를 통한 주문상품 통계
- 성능으로 인한 캐싱 고려 필요 (실시간 성 데이터가 아니기 때문에)