Skip to content

f-lab-edu/cyber-monday

Repository files navigation

Cyber Monday

1. 개요

다양한 할인으로 발생한 사용자들의 대량 주문 트래픽에 대해 안정적인 서비스를 제공하는 경험을 해보고자 시작한 쿠폰/세일 중심 프로젝트입니다.

사이버 먼데이는 연휴가 끝난 후 일상생활에 복귀한 소비자들에게 온라인으로 물건을 구매하도록 독려한 데서 나왔습니다. 이 서비스는 월요일에 몰려드는 사용자들에 앞서 주문에 대해 빠르고 정확한 피드백을 받도록 안정적인 서비스를 제공하는 것이 목표입니다.

2. 기술 스택

  • JDK 21

  • Spring Boot 3.5.10

  • Spring Security 6.5.5

  • Spring Cloud OpenFeign 4.3.0

  • Spring Data JPA

  • Redis 7.2

  • Kafka 3.9.1

  • MySQL 8.4.8

  • Amazon Web Service

3. ERD

사이먼데이ERD

4. 사용자 시나리오

대표 케이스만 기입했습니다. 모든 케이스를 확인하려면 사용자 시나리오 위키를 참고해 주세요.

CASE 7 : 쿠폰 다운로드

CASE 7-1 : 상품 상세 화면에서 브랜드 전용 쿠폰 다운로드

  1. 홈에서 상품을 클릭해 상품 상세 화면으로 들어간다
  2. 상품 사진 오른쪽에는 쿠폰을 다운받을 수 있는 버튼이 보인다
    • 만약 이미 다운로드 받은 쿠폰이라면 버튼은 비활성화된다
    • 쿠폰의 전체 수량이 모두 소진된 경우에는 버튼이 "소진됨" 상태로 표시된다
  3. 상품 상세 화면에서 발급된 쿠폰을 다운로드한다
    • 만약 해당 쿠폰을 이미 다운로드 받았거나 다운로드받으면 다운로드 버튼이 비활성화되며, 사용할 때까지 쿠폰을 다운로드 받을 수 없게 된다
    • 쿠폰을 사용했다면 다시 새로 받을 수 있다
    • 쿠폰을 다운받으려 할 때 순간 쿠폰이 소진되었다면 "쿠폰이 소진되었습니다"라는 안내창이 보이며, 쿠폰이 다운로드되지 않는다
      • 쿠폰 다운로드 버튼은 "소진됨" 상태로 표시된다
  4. 쿠폰이 다운로드되면 "쿠폰을 성공적으로 받았습니다"라는 안내창이 보인다

CASE 8 : 상품 주문하기

CASE 8-1 : 상품 상세 화면에서 상품 주문

  1. 홈에서 원하는 상품의 상세 화면으로 들어간다
  2. "구매하기" 버튼을 누른다
  3. 원하는 개수만큼 수량을 선택한다
  4. "주문하기" 버튼을 눌러 주문 화면으로 들어간다
    • 버튼을 짧은 시간에 여러 번 눌러도, 동일 요청은 1회만 처리되도록(멱등하게) 동작한다
  5. 주문 화면에서 배송 정보를 입력한다
  6. 주문 전체에 적용할 쿠폰을 선택해 적용한다
    • 전체 주문에 배송비 무료/장바구니 할인 쿠폰/브랜드 쿠폰 등을 섞어서 최대 2개까지 선택할 수 있다
    • 단, 배송비 무료 쿠폰, 장바구니 할인 쿠폰은 동시에 사용할 수 없다 (둘 중 하나만 사용 가능)
    • 다른 쿠폰을 선택해서 적용할 쿠폰을 바꿀 수 있다
  7. 적립금을 사용하여 총구매 가격을 낮춘다
    • 적립금은 5천 원부터 사용할 수 있다
    • 적립금은 쿠폰 적용 후 최종 결제금액의 10%까지만 사용할 수 있다
    • 10% 이상을 넘기는 금액이면 "적립금은 최대 총 금액의 10%까지만 적용 가능합니다"는 안내가 나온다
      • 이 안내가 나오면 적립금을 다시 적용해야 한다
  8. 적립금은 최대 적용하기 버튼을 누르면 최종 결제금액의 10%까지 할인한 금액이 계산되어 화면에 적용된다
  9. 결제 방법을 선택하고 '결제하기'를 누르면 결제 화면으로 이동하여 결제를 진행한다
    • 버튼을 짧은 시간에 여러 번 눌러도, 동일 요청은 1회만 처리되도록(멱등하게) 동작한다
    • 결제 방법에는 카드 결제, 퀵계좌이체 중 하나를 고를 수 있다
    • 동시에 구매가 몰리면, 주문 화면까지는 들어왔더라도 결제 단계에서 품절 안내가 발생할 수 있다
  10. 결제에 성공하면 구매한 각 물품의 재고가 차감된다
  11. 결제를 완료하면 주문 번호가 생성되고, 결제 완료 화면으로 넘어간다
    • 결제 완료 후, 적립금과 쿠폰 사용 반영은 수 초 지연될 수 있다
      • 반영이 지연되는 동안에도 주문 자체는 완료 상태이다
    • 결제한 총금액의 5%만큼 적립금이 쌓인다
    • 마이 페이지 주문내역에 해당 주문 정보와 함께 "주문완료"상태의 데이터가 쌓인다

5. flow chart

대표 케이스만 기입했습니다. 모든 케이스를 확인하려면 flow chart 위키를 참고해 주세요.

CASE 7 : 쿠폰 다운로드

CASE 7-1 : 상품 상세 화면에서 브랜드 전용 쿠폰 다운로드

image

CASE 8 : 상품 주문하기

CASE 8-1 : 상품 상세 화면에서 상품 주문

image

6. API 목록

판매자(셀러), 백오피스 기능은 생략했습니다. 사용자의 화면을 중심으로 API 구조도를 나타냈습니다.

도메인 메뉴 기능 우선순위
회원 회원가입 소셜로그인 인증 1
- - 인증 후 회원가입 처리 2
- 로그인 소셜로그인 3
- 마이페이지 사용자 정보 조회 4
- - 소지한 적립금 조회 5
- 회원 탈퇴 아이디 삭제(soft delete) 34
- 주문 적립금 차감 30
- - 적립금 적용 29
- - 사용 가능 적립금 조회 28
- - 적립금 추가 31
- - 적립금 반환 32
상품 상품 조회 상품 정보 조회 6
- 주문 재고 개수 확인 7
- - 재고 차감 10
주문 주문 주문하기 9
- - 결제하기 33
- - 최종 결제 금액 계산 8
- - 주문 완료 데이터 추가 11
- 주문 내역 주문내역 조회 12
- 주문 취소 주문 취소 13
쿠폰 주문 소지한 쿠폰 사용 15
- 쿠폰 조회 사용 가능한 쿠폰 조회 21
- - 브랜드 쿠폰 조회 22
- - 받은 쿠폰 조회 23
- - 받을 수 있는 쿠폰 조회 24
- 다운로드 쿠폰 다운로드 25
- 주문 사용가능 쿠폰 조회 14
- 등록 쿠폰 등록 26
- - 쿠폰 번호 확인 27
- 주문 취소 쿠폰 복구 16
장바구니 상품 장바구니에 상품 추가 17
- 장바구니 장바구니 상품 조회 18
- - 장바구니 상품 수량 변경 19
- - 장바구니 상품 삭제 20

About

대량의 트래픽이 몰리는 온라인 판매 행사를 가정한 쿠폰/할인 중점 백엔드 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages