블랙 에브리데이 쇼핑몰은 대규모 할인 행사에 특화된 온라인 쇼핑 플랫폼입니다.
고객에게 최고의 쇼핑 경험을 제공하는 동시에 판매자들에게 효율적인 판매 채널을 제공하는 것입니다.
- 고객 참여 유도: 매일 점심시간 쿠폰을 받기 위해 접속하는 재미를 제공합니다.
- 브랜드 인지도 상승: 매일 진행되는 이벤트로 "블랙 에브리데이"의 존재감을 높입니다.
- 관리자가 쏜다: 마스터, 서비스 매니저가 수동으로 유저에게 쿠폰을 발급합니다.
- 구매 결정 촉진: 24시간 제한으로 빠른 구매 결정을 유도합니다.
- 재방문율 증가: 쿠폰을 놓친 고객도 다음 날 다시 도전할 수 있어 재방문을 유도합니다.
- 대규모 트래픽에서도 안정적인 서비스 운영
- 개발한 기능에 대한 부하테스트 진행하여 TPS, 평균 응답 시간, 처리량 지표확인
- 문제 중심의 기술 도입과 검증
- 기술 도입 시 '현재 겪고 있는 문제가 무엇인가?'를 먼저 생각하고 해결하기 위한 여러 기술들의 장단점을 비교하여 적용
회원
- JWT 토큰 발급, 게이트웨이 검증
상품
- 상품 재고 관리
- 주문 생성 전 상품 재고를 선점하여 차감합니다.
- 주문 완료 처리가 되지 않으면 스케줄러를 통해 재고를 롤백합니다.
- 상품 검색
- RDB와 실시간 데이터 동기화 된 Elasticsearch를 사용하여 빠른 검색 응답 속도를 제공합니다.
- 인기 상품 캐싱
- 로그 데이터를 분석하여 1시간마다 인기상품을 Redis 캐싱적용 합니다.
쿠폰
- (내용 없음)
주문, 결제
-
생성 후 결제:
-
주문 생성 시 결제 생성 프로세스:
- 고객이 주문을 생성합니다.
- 주문 생성 전 재고를 확인합니다.
- 주문 상품(N)개에 각 쿠폰이 있으면 이벤트 서비스에 검증과 함께 수량 1개만 가능하도록 구현했습니다.
- 주문 생성 완료 후 Kafka에 주문 결제 정보 메시지를 발행합니다.
- 결제 서비스에서 메시지를 폴링하고 결제 데이터를 생성합니다. 실제 결제 서비스는 토스 페이먼츠를 사용합니다.
LoadingsequenceDiagram participant 고객 participant 상품 participant 이벤트 participant 주문 participant Kafka participant 결제 title 주문 생성 시 결제 생성 프로세스 고객->>주문: 주문 생성 요청 주문->>상품: 재고 차감 상품->>주문: 트랜잭션 ID 발급 주문->>이벤트: 쿠폰이 있으면 이벤트 검증 이벤트->>주문: 쿠폰의 혜택 줌 주문->>Kafka: 주문 생성 메시지 Publishing <br/>(Topic: order_create_request) 결제->>Kafka: 주문 생성 메시지 Polling 및 결제 데이터 생성 <br/>(Topic: order_create_request) -
결제 승인:
- 고객이 결제 대기 상태인 결제 리스트를 조회합니다.
- 결제 대기 상태인 항목 중 1개의 결제하기를 누릅니다.
- 결제 서비스에서 PG사를 통해 결제 승인을 요청합니다.
- PG사에서 결제 승인 결과를 응답합니다.
- 결제 서비스에서 Kafka에 결과 메시지를 발행합니다.
- 주문 서비스에서 메시지를 폴링하고 주문 상태를 업데이트합니다.
LoadingsequenceDiagram participant 고객 participant 결제 서비스 participant PG사 participant Kafka participant 주문 서비스 title 결제 승인 프로세스 고객->>결제 서비스: 결제 대기 항목 조회 고객->>결제 서비스: 결제하기 요청 결제 서비스->>PG사: 결제 승인 요청 PG사->>결제 서비스: 결제 승인 결과 응답 결제 서비스->>Kafka: 결제 승인 메시지 Publishing <br/>(Topic: order_confirm_response) 주문 서비스->>Kafka: 결제 승인 메시지 Polling 및 주문 상태 업데이트 <br/>(Topic: order_confirm_response) -
주문 취소:
- 고객이 주문을 취소합니다.
- 주문 취소 시 Kafka에 주문 취소 메시지를 발행합니다.
- 결제 서비스에서 메시지를 폴링합니다.
- 결제 서비스에서 PG사에 결제 취소를 요청합니다.
- PG사에서 결제 취소 결과를 응답합니다.
- 결제 서비스에서 Kafka에 결과 메시지를 발행합니다.
- 주문 서비스에서 메시지를 폴링하고 주문 상태를 업데이트합니다.
LoadingsequenceDiagram participant 고객 participant 주문 서비스 participant Kafka participant 결제 서비스 participant PG사 title 주문 취소 시 결제 취소 프로세스 고객->>주문 서비스: 주문 취소 요청 주문 서비스->>Kafka: 주문 취소 메시지 Publishing <br/>(Topic: order_cancel_request) 결제 서비스->>Kafka: 주문 취소 메시지 Polling <br/>(Topic: order_cancel_request) 결제 서비스->>PG사: 결제 취소 요청 PG사->>결제 서비스: 결제 취소 결과 응답 결제 서비스->>Kafka: 결제 취소 메시지 Publishing <br/>(Topic: order_cancel_response) 주문 서비스->>Kafka: 결제 취소 메시지 Polling 및 주문 상태 업데이트 <br/>(Topic: order_cancel_response)
-
정산
- 일일 정산 프로세스:
- 매일 새벽 4시에 구매 확정 결제를 조회합니다.
- 정산을 위한 주문 정보를 조회합니다 (Feign Client 사용).
- 주문 정보를 통해 정산 금액을 계산합니다.
- 정산한 정보를 일일 정산 테이블에 저장합니다.
- 정산이 완료된 결제의 상태를 정산 완료로 변경합니다.
- 월간 정산 프로세스:
- 매월 1일 지난 달 일일 정산 데이터 리스트를 조회합니다.
- 일일 정산 데이터 리스트의 금액을 브랜드 별로 정산합니다.
- 정산한 정보를 월간 정산 테이블에 저장합니다.
-
Language
-
Backend Framework
-
IDE
-
Database
-
Messaging
-
Monitoring & Logging
-
PG
-
Infra
| Name | Position | Tasks | GitHub |
|---|---|---|---|
| 황시면 | Leader | • 주문 서비스 기능 구현 - 상품 재고 차감, 2PC 검증 - 쿠폰 검증 및 생성 결제 • 배포 및 모니터링 - 테라폼, AWS EC2 - Pinpoint, 메트릭, 로깅 등 |
github.com/lowgiant |
| 박준형 | SubLeader | • 쿠폰 서비스 - 쿠폰 정책 및 사용 로직 개발 - 비동기 쿠폰발급 개발 - 쿼리 dsl을 이용, 다대일한 검색 제공 • 이벤트 서비스 - 선착순 이벤트 설계 및 개발 - Redis를 이용한 동시성 문제 해결 - 인덱스로 속도우 쿼리 성능 개선 • Auth 및 게이트웨이 - 인증 및 jwt 발급 - jwt 필터 개발 |
github.com/POKUDING |
| 안주환 | Member | • 결제 서비스 기능 구현 - Kafka를 통한 비동기 방식으로, 사용자 주문 시 결제 데이터를 생성 및 결제 승인 및 취소 동답 반환 - PG(Toss Payments) 연동하여 결제 승인 및 취소 기능 구현 • 정산 서비스 기능 구현 - Spring Batch를 통한 정산 기능 구현 |
github.com/hut234 |
| 손동필 | Member | • 상품 서비스 - 주문 서비스와 상품서비스 2PC 동기 방식 구현 - 주문 시 비관적락을 사용한 상품 재고 선점 - 분산락 기반의 재고 롤백 스케줄러 구현 - Elasticsearch 도입으로 대용량 데이터 검색 처리 - Logstash 수집한 데이터로 Top10 인기상품 Redis 캐싱 |
github.com/sdongpil |

