Skip to content

대규모 트래픽 처리 이커머스 웹 백엔드 시스템 개발 프로젝트

Notifications You must be signed in to change notification settings

easyxun/pickple

 
 

Repository files navigation

🥦 PICKPLE

pickple_logo 복사본 image

📢 프로젝트 간단 소개

Pickple! (Pick + people)

고객 경험을 최우선 가치로, 많은 고객들에게 그들이 원하는 경험을 제공하여 선택(pick) 받자는 소망을 담았습니다.

대규모 트래픽을 견딜 수 있는 이커머스 서비스를 구축하여, 사용자에게 빠르고 안정적인 쇼핑 경험을 제공합니다.


🎯 프로젝트 목표

  • MSA 구조를 통해 서비스의 확장성과 유연성을 확보
  • KafkaRedis를 활용하여 비동기 메시징으로 서비스 간 통신 및 캐싱을 통해 안정적이고 빠른 서비스 구축
  • 동시성 처리를 통한 안정성 있는 서비스 구축

🛠️ 기술 스택

Backend

DevOps

Tools


🪄 주요 기능

  • 대규모 트래픽 처리

    • 대규모 트래픽 상황에서도 안정적이고 빠른 응답 구축을 위해 Kafka 이벤트 기반의 비동기 처리 방식으로 구현
    • 효율적인 분산 처리로 시스템의 부하를 줄이고, 대규모 트래픽을 효과적으로 관리 가능
  • 주문

    • Kafka를 통해 주문, 재고 - 결제 - 배송 - 알림 서비스 간 비동기 통신 구현
    • Order 서비스가 주문의 전체 프로세스를 관리하고, 결제 및 배송 서비스에 대한 상태 변경을 트리거하는 방식으로 구현
      주문 시퀀스 다이어그램 image
    • TTL 설정을 통해 주문 요청 후 5분 동안 결제 미진행 시, 주문 자동 취소
  • 예약 구매

    • 동시에 많은 요청 시, 재고 관리 로직에서의 동시성 이슈 방지를 위해 분산락 도입
    • 주문 시 (주문 요청 → 재고 감소 → 주문 생성) 분산락 환경에서의 갱신 유실 방지를 위해 낙관적 락 추가 도입
  • 알람

    • Grafana와 Slack을 연동하여 서버 다운 시 슬랙 채널을 통한 알람 수신 (#server_channel)
    • 트래픽 임계치에서 50% 이상 시 경고 알람, 80% 이상 시 위험 알람 (#traffic_channel)
    • 주문, 배송 완료 시 kafka를 통한 실시간 메일 알람 전송
  • 모니터링

    • Grafana의 Provisioning 사용으로 어떤 환경에서 실행되어도 설정해둔 알람, 대시보드 등이 자동 provisioned 되도록 설정 자동화
    • Loki를 통한 실시간 로그 분석 및 시각화
    • Zipkin, prometheus를 통해 분산추적 및 로그 수집
  • 고가용성 확보

    • Resilience4j Circuit Breaker를 통해 서비스 간 장애 전파 방지, 회복탄력성 향상

    • Redis ReplicationSentinel을 통한 분산 처리 및 고가용성 확보

      • Replication: 읽기 요청을 레플리카 노드로 우선적으로 분산하고, 쓰기 요청은 마스터 노드로 전송하여 부하 분산
      • Sentinel: 마스터가 다운되었을 경우 슬레이브 중 하나를 새로운 마스터로 auto-failover
  • 아키텍처

    • Domain Driven Design: 도메인 중심의 시스템 설계 및 도메인 모델에 집중한 비즈니스 로직

      패키지 구조
      ```java
      com.pickple.commerce-service
      ├── application
      │   ├── dto  
      │   │   ├── OrderCreateResponseDto.java
      │   │   └── OrderResponseDto.java
      │   ├── service
      │       └── OrderService.java
      ├── domain
      │   ├── model
      │   │   ├── Order.java
      │   │   ├── OrderDetail.java
      │   │   └── OrderStatus.java
      │   └── repository
      │       └── OrderRepository.java
      ├── exception
      │   ├── CommerceErrorCode.java
      │   ├── CommerceExceptionHandler.java
      │   └── CustomException.java
      ├── infrastructure
      │   ├── configuration
      │   │   ├── AuditAwareImpl.java
      │   │   ├── JpaConfig.java
      │   │   └── SecurityConfig.java
      │   ├── feign
      │   │   ├── DeliveryClient.java
      │   │   ├── PaymentClient.java
      │   │   └── dto
      │   │       ├── DeliveryClientDto.java
      │   │       └── PaymentClientDto.java
      │   ├── messaging
      │   │   ├── OrderEventService.java
      │   │   └── OrderMessagingProducerService.java
      │   └── security
      │       └── CustomPreAuthFilter.java
      ├── presentation
      │   ├── controller
      │   │   └── OrderController.java
      │   └── request
      │       └── OrderCreateRequestDto.java
      ```
      </details>
      
    • Layered Architecture: 시스템을 여러 레이어로 나누어 서로 다른 관심사를 처리하도록 설계

    • Event-Driven Architecture: Kafka를 사용하여 이벤트가 전달되며, 각 서비스가 이벤트를 생성하고, 소비하는 방식으로 통신

  • 멀티 모듈 구조

    • MSA 환경에서 공통으로 사용되는 보일러 코드, 빈, 설정들을 공통 모듈(common-module)에 따로 두어 관리함으로써 유지보수성을 높이고 코드의 중복성을 낮춤
  • CI/CD


📚 API 명세서


🧩ERD

pickple


🗂️ 인프라 설계도

image

Service Description Authorization Port
[Eureka] 서비스 등록 및 로드밸런싱 19090
[API Gateway] 요청 인증 및 라우팅 jwt 토큰 인증 19091
[Auth] jwt 토큰 발급 및 관리 jwt 토큰 발급 19092
[User] 사용자 관련 작업 관리 jwt 토큰 인가 19093
[Commerce] 커머스 관련 도메인 작업 관리 jwt 토큰 인가 19094
[Payment] 결제 도메인 작업 관리 jwt 토큰 인가 19095
[Delivery] 배송 도메인 작업 관리 jwt 토큰 인가 19096
[Notification] 알람 도메인 작업 관리 jwt 토큰 인가 19097

🚧 트러블 슈팅


✏️ 프로젝트 실행 방법

1. 프로젝트 클론

git clone https://github.com/pickple-ecommerce/backend.git

2. 순차적으로 docker compose 명령어 실행

 docker-compose -f docker-compose.dev.yml --env-file dev.env
 docker-compose -f docker-compose.service.yml --env-file dev.env

🅰️ 팀 ATEEN

팀원 포지션 담당 GitHub 링크

이경진
👑 Leader - Eureka, gateway 환경 구축
- User, Auth 도메인 백엔드 개발 (인증/인가 및 백오피스)
- 상품 및 재고 도메인 백엔드 개발
- 예약구매 기능 개발
- Redis master-slave 구조 및 sentinel 구축
GitHub

이지선
👑 Sub-Leader - 업체 도메인 백엔드 개발
- 주문 도메인 백엔드 개발
- Resilience4j 서킷 브레이커 구현
GitHub

박지민
🫅🏻 Member - 결제 도메인 백엔드 개발
- 알림 도메인 백엔드 개발
- Prometheus와 Grafana 연동으로 서버 모니터링 및 Slack으로 알림 발송 기능 구현
- Loki 활용하여 로그 관리 및 시각화
GitHub

김진명
🫅🏻 Member - 배송 도메인 백엔드 개발
- 프로젝트 Gradle 멀티 모듈 구성
- Github Actions를 활용하여 CI/CD 구성
- AWS Infra 구성 및 배포
GitHub

About

대규모 트래픽 처리 이커머스 웹 백엔드 시스템 개발 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 99.6%
  • Dockerfile 0.4%