다양한 할인으로 발생한 사용자들의 대량 주문 트래픽에 대해 안정적인 서비스를 제공하는 경험을 해보고자 시작한 쿠폰/세일 중심 프로젝트입니다.
사이버 먼데이는 연휴가 끝난 후 일상생활에 복귀한 소비자들에게 온라인으로 물건을 구매하도록 독려한 데서 나왔습니다. 이 서비스는 월요일에 몰려드는 사용자들에 앞서 주문에 대해 빠르고 정확한 피드백을 받도록 안정적인 서비스를 제공하는 것이 목표입니다.
-
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
대표 케이스만 기입했습니다. 모든 케이스를 확인하려면 사용자 시나리오 위키를 참고해 주세요.
- 홈에서 상품을 클릭해 상품 상세 화면으로 들어간다
- 상품 사진 오른쪽에는 쿠폰을 다운받을 수 있는 버튼이 보인다
- 만약 이미 다운로드 받은 쿠폰이라면 버튼은 비활성화된다
- 쿠폰의 전체 수량이 모두 소진된 경우에는 버튼이 "소진됨" 상태로 표시된다
- 상품 상세 화면에서 발급된 쿠폰을 다운로드한다
- 만약 해당 쿠폰을 이미 다운로드 받았거나 다운로드받으면 다운로드 버튼이 비활성화되며, 사용할 때까지 쿠폰을 다운로드 받을 수 없게 된다
- 쿠폰을 사용했다면 다시 새로 받을 수 있다
- 쿠폰을 다운받으려 할 때 순간 쿠폰이 소진되었다면 "쿠폰이 소진되었습니다"라는 안내창이 보이며, 쿠폰이 다운로드되지 않는다
- 쿠폰 다운로드 버튼은 "소진됨" 상태로 표시된다
- 쿠폰이 다운로드되면 "쿠폰을 성공적으로 받았습니다"라는 안내창이 보인다
- 홈에서 원하는 상품의 상세 화면으로 들어간다
- "구매하기" 버튼을 누른다
- 원하는 개수만큼 수량을 선택한다
- "주문하기" 버튼을 눌러 주문 화면으로 들어간다
- 버튼을 짧은 시간에 여러 번 눌러도, 동일 요청은 1회만 처리되도록(멱등하게) 동작한다
- 주문 화면에서 배송 정보를 입력한다
- 주문 전체에 적용할 쿠폰을 선택해 적용한다
- 전체 주문에 배송비 무료/장바구니 할인 쿠폰/브랜드 쿠폰 등을 섞어서 최대 2개까지 선택할 수 있다
- 단, 배송비 무료 쿠폰, 장바구니 할인 쿠폰은 동시에 사용할 수 없다 (둘 중 하나만 사용 가능)
- 다른 쿠폰을 선택해서 적용할 쿠폰을 바꿀 수 있다
- 적립금을 사용하여 총구매 가격을 낮춘다
- 적립금은 5천 원부터 사용할 수 있다
- 적립금은 쿠폰 적용 후 최종 결제금액의 10%까지만 사용할 수 있다
- 10% 이상을 넘기는 금액이면 "적립금은 최대 총 금액의 10%까지만 적용 가능합니다"는 안내가 나온다
- 이 안내가 나오면 적립금을 다시 적용해야 한다
- 적립금은 최대 적용하기 버튼을 누르면 최종 결제금액의 10%까지 할인한 금액이 계산되어 화면에 적용된다
- 결제 방법을 선택하고 '결제하기'를 누르면 결제 화면으로 이동하여 결제를 진행한다
- 버튼을 짧은 시간에 여러 번 눌러도, 동일 요청은 1회만 처리되도록(멱등하게) 동작한다
- 결제 방법에는 카드 결제, 퀵계좌이체 중 하나를 고를 수 있다
- 동시에 구매가 몰리면, 주문 화면까지는 들어왔더라도 결제 단계에서 품절 안내가 발생할 수 있다
- 결제에 성공하면 구매한 각 물품의 재고가 차감된다
- 결제를 완료하면 주문 번호가 생성되고, 결제 완료 화면으로 넘어간다
- 결제 완료 후, 적립금과 쿠폰 사용 반영은 수 초 지연될 수 있다
- 반영이 지연되는 동안에도 주문 자체는 완료 상태이다
- 결제한 총금액의 5%만큼 적립금이 쌓인다
- 마이 페이지 주문내역에 해당 주문 정보와 함께 "주문완료"상태의 데이터가 쌓인다
- 결제 완료 후, 적립금과 쿠폰 사용 반영은 수 초 지연될 수 있다
대표 케이스만 기입했습니다. 모든 케이스를 확인하려면 flow chart 위키를 참고해 주세요.
판매자(셀러), 백오피스 기능은 생략했습니다. 사용자의 화면을 중심으로 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 |
