Skip to content

sdongpil/BlackEveryDay

 
 

Repository files navigation

서비스/프로젝트명 : 블랙 에브리 데이

image (2) (1)

서비스/프로젝트 소개

블랙 에브리데이 쇼핑몰은 대규모 할인 행사에 특화된 온라인 쇼핑 플랫폼입니다.

고객에게 최고의 쇼핑 경험을 제공하는 동시에 판매자들에게 효율적인 판매 채널을 제공하는 것입니다.

  1. 고객 참여 유도: 매일 점심시간 쿠폰을 받기 위해 접속하는 재미를 제공합니다.
  2. 브랜드 인지도 상승: 매일 진행되는 이벤트로 "블랙 에브리데이"의 존재감을 높입니다.
  3. 관리자가 쏜다: 마스터, 서비스 매니저가 수동으로 유저에게 쿠폰을 발급합니다.
  4. 구매 결정 촉진: 24시간 제한으로 빠른 구매 결정을 유도합니다.
  5. 재방문율 증가: 쿠폰을 놓친 고객도 다음 날 다시 도전할 수 있어 재방문을 유도합니다.

서비스/프로젝트 목표

  • 대규모 트래픽에서도 안정적인 서비스 운영
    • 개발한 기능에 대한 부하테스트 진행하여 TPS, 평균 응답 시간, 처리량 지표확인
  • 문제 중심의 기술 도입과 검증
    • 기술 도입 시 '현재 겪고 있는 문제가 무엇인가?'를 먼저 생각하고 해결하기 위한 여러 기술들의 장단점을 비교하여 적용

인프라 설계도

image

주요 기능

회원
  • JWT 토큰 발급, 게이트웨이 검증
상품
  • 상품 재고 관리
    • 주문 생성 전 상품 재고를 선점하여 차감합니다.
    • 주문 완료 처리가 되지 않으면 스케줄러를 통해 재고를 롤백합니다.
  • 상품 검색
    • RDB와 실시간 데이터 동기화 된 Elasticsearch를 사용하여 빠른 검색 응답 속도를 제공합니다.
  • 인기 상품 캐싱
    • 로그 데이터를 분석하여 1시간마다 인기상품을 Redis 캐싱적용 합니다.
쿠폰
  • (내용 없음)
주문, 결제
  • 생성 후 결제:

    • 주문 생성 시 결제 생성 프로세스:

      1. 고객이 주문을 생성합니다.
      2. 주문 생성 전 재고를 확인합니다.
      3. 주문 상품(N)개에 각 쿠폰이 있으면 이벤트 서비스에 검증과 함께 수량 1개만 가능하도록 구현했습니다.
      4. 주문 생성 완료 후 Kafka에 주문 결제 정보 메시지를 발행합니다.
      5. 결제 서비스에서 메시지를 폴링하고 결제 데이터를 생성합니다. 실제 결제 서비스는 토스 페이먼츠를 사용합니다.
      sequenceDiagram
          participant 고객
          participant 상품
          participant 이벤트
          participant 주문
          participant Kafka
          participant 결제
      
          title 주문 생성 시 결제 생성 프로세스
          고객->>주문: 주문 생성 요청
          주문->>상품: 재고 차감
          상품->>주문: 트랜잭션 ID 발급
          주문->>이벤트: 쿠폰이 있으면 이벤트 검증
          이벤트->>주문: 쿠폰의 혜택 줌
          주문->>Kafka: 주문 생성 메시지 Publishing <br/>(Topic: order_create_request)
          결제->>Kafka: 주문 생성 메시지 Polling 및 결제 데이터 생성 <br/>(Topic: order_create_request)
      
      Loading
    • 결제 승인:

      1. 고객이 결제 대기 상태인 결제 리스트를 조회합니다.
      2. 결제 대기 상태인 항목 중 1개의 결제하기를 누릅니다.
      3. 결제 서비스에서 PG사를 통해 결제 승인을 요청합니다.
      4. PG사에서 결제 승인 결과를 응답합니다.
      5. 결제 서비스에서 Kafka에 결과 메시지를 발행합니다.
      6. 주문 서비스에서 메시지를 폴링하고 주문 상태를 업데이트합니다.
      sequenceDiagram
          participant 고객
          participant 결제 서비스
          participant PG사
          participant Kafka
          participant 주문 서비스
      
          title 결제 승인 프로세스
          고객->>결제 서비스: 결제 대기 항목 조회
          고객->>결제 서비스: 결제하기 요청
          결제 서비스->>PG사: 결제 승인 요청
          PG사->>결제 서비스: 결제 승인 결과 응답
          결제 서비스->>Kafka: 결제 승인 메시지 Publishing <br/>(Topic: order_confirm_response)
          주문 서비스->>Kafka: 결제 승인 메시지 Polling 및 주문 상태 업데이트 <br/>(Topic: order_confirm_response)
      
      Loading
    • 주문 취소:

      1. 고객이 주문을 취소합니다.
      2. 주문 취소 시 Kafka에 주문 취소 메시지를 발행합니다.
      3. 결제 서비스에서 메시지를 폴링합니다.
      4. 결제 서비스에서 PG사에 결제 취소를 요청합니다.
      5. PG사에서 결제 취소 결과를 응답합니다.
      6. 결제 서비스에서 Kafka에 결과 메시지를 발행합니다.
      7. 주문 서비스에서 메시지를 폴링하고 주문 상태를 업데이트합니다.
      sequenceDiagram
          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)
      
      Loading
정산
  • 일일 정산 프로세스:
    • 매일 새벽 4시에 구매 확정 결제를 조회합니다.
    • 정산을 위한 주문 정보를 조회합니다 (Feign Client 사용).
    • 주문 정보를 통해 정산 금액을 계산합니다.
    • 정산한 정보를 일일 정산 테이블에 저장합니다.
    • 정산이 완료된 결제의 상태를 정산 완료로 변경합니다.
  • 월간 정산 프로세스:
    • 매월 1일 지난 달 일일 정산 데이터 리스트를 조회합니다.
    • 일일 정산 데이터 리스트의 금액을 브랜드 별로 정산합니다.
    • 정산한 정보를 월간 정산 테이블에 저장합니다.

기술 스택

  • Language

  • Backend Framework

  • IDE

  • Database

  • Messaging

  • Monitoring & Logging

  • PG

  • Infra

기술적 의사결정

트러블슈팅

CONTRIBUTORS

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

About

MSA 이커머스 - 상품서비스 구현

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 97.2%
  • Shell 1.2%
  • Other 1.6%