Skip to content

bezzang-dev/pickple-backend

Β 
Β 

Repository files navigation

🌱 PICKPLE

image

πŸ“’ ν”„λ‘œμ νŠΈ 간단 μ†Œκ°œ

Pickple! (Pick + people)

고객 κ²½ν—˜μ„ μ΅œμš°μ„  κ°€μΉ˜λ‘œ, λ§Žμ€ κ³ κ°λ“€μ—κ²Œ 그듀이 μ›ν•˜λŠ” κ²½ν—˜μ„ μ œκ³΅ν•˜μ—¬ 선택(pick) λ°›μžλŠ” μ†Œλ§μ„ λ‹΄μ•˜μŠ΅λ‹ˆλ‹€.

🎯 ν”„λ‘œμ νŠΈ λͺ©ν‘œ

  • MSA ꡬ쑰λ₯Ό 톡해 μ„œλΉ„μŠ€μ˜ ν™•μž₯μ„±κ³Ό μœ μ—°μ„±μ„ 확보
  • Kafka와 Redisλ₯Ό ν™œμš©ν•˜μ—¬ 비동기 λ©”μ‹œμ§•μœΌλ‘œ μ„œλΉ„μŠ€ κ°„ 톡신 및 캐싱을 톡해 μ•ˆμ •μ μ΄κ³  λΉ λ₯Έ μ„œλΉ„μŠ€ ꡬ좕
  • λ™μ‹œμ„± 처리λ₯Ό ν†΅ν•œ μ•ˆμ •μ„± μžˆλŠ” μ„œλΉ„μŠ€ ꡬ좕

πŸ› οΈ 기술 μŠ€νƒ

Backend

DevOps

Tools

πŸͺ„ μ£Όμš” κΈ°λŠ₯

  • μ£Όλ¬Έ

    • Kafkaλ₯Ό 톡해 μ£Όλ¬Έ, 재고 - 결제 - 배솑 - μ•Œλ¦Ό μ„œλΉ„μŠ€ κ°„ 비동기 톡신 κ΅¬ν˜„
    • Order μ„œλΉ„μŠ€κ°€ 주문의 전체 ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΄€λ¦¬ν•˜κ³ , 결제 및 배솑 μ„œλΉ„μŠ€μ— λŒ€ν•œ μƒνƒœ 변경을 νŠΈλ¦¬κ±°ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„
      μ£Όλ¬Έ μ‹œν€€μŠ€ λ‹€μ΄μ–΄κ·Έλž¨ image
    • TTL 섀정을 톡해 μ£Όλ¬Έ μš”μ²­ ν›„ 5λΆ„ λ™μ•ˆ 결제 λ―Έμ§„ν–‰ μ‹œ, μ£Όλ¬Έ μžλ™ μ·¨μ†Œ
  • μƒν’ˆ

    • Elasticsearchλ₯Ό μ‚¬μš©ν•˜μ—¬ 검색 속도 μ΅œμ ν™”
    • CQRS νŒ¨ν„΄μ„ μ μš©ν•˜μ—¬ Command, Query λ°μ΄ν„°λ² μ΄μŠ€ 뢄리
  • μ˜ˆμ•½ ꡬ맀

    • λ™μ‹œμ— λ§Žμ€ μš”μ²­ μ‹œ, 재고 관리 λ‘œμ§μ—μ„œμ˜ λ™μ‹œμ„± 이슈 λ°©μ§€λ₯Ό μœ„ν•΄ 뢄산락 λ„μž…
    • μ£Όλ¬Έ μ‹œ (μ£Όλ¬Έ μš”μ²­ β†’ 재고 κ°μ†Œ β†’ μ£Όλ¬Έ 생성) 뢄산락 ν™˜κ²½μ—μ„œμ˜ κ°±μ‹  μœ μ‹€ λ°©μ§€λ₯Ό μœ„ν•΄ 낙관적 락 μΆ”κ°€ λ„μž…
  • μ•ŒλžŒ

    • Grafana와 Slack을 μ—°λ™ν•˜μ—¬ μ„œλ²„ λ‹€μš΄ μ‹œ μŠ¬λž™ 채널을 ν†΅ν•œ μ•ŒλžŒ μˆ˜μ‹  (#server_channel)
    • νŠΈλž˜ν”½ μž„κ³„μΉ˜μ—μ„œ 50% 이상 μ‹œ κ²½κ³  μ•ŒλžŒ, 80% 이상 μ‹œ μœ„ν—˜ μ•ŒλžŒ (#traffic_channel)
    • μ£Όλ¬Έ, 배솑 μ™„λ£Œ μ‹œ kafkaλ₯Ό ν†΅ν•œ μ‹€μ‹œκ°„ 메일 μ•ŒλžŒ 전솑
  • λͺ¨λ‹ˆν„°λ§

    • Grafana의 Provisioning μ‚¬μš©μœΌλ‘œ μ–΄λ–€ ν™˜κ²½μ—μ„œ μ‹€ν–‰λ˜μ–΄λ„ μ„€μ •ν•΄λ‘” μ•ŒλžŒ, λŒ€μ‹œλ³΄λ“œ 등이 μžλ™ provisioned λ˜λ„λ‘ μ„€μ • μžλ™ν™”
    • Lokiλ₯Ό ν†΅ν•œ μ‹€μ‹œκ°„ 둜그 뢄석 및 μ‹œκ°ν™”
    • Zipkin, prometheusλ₯Ό 톡해 뢄산좔적 및 둜그 μˆ˜μ§‘
  • κ³ κ°€μš©μ„± 확보

    • Resilience4j Circuit Breakerλ₯Ό 톡해 μ„œλΉ„μŠ€ κ°„ μž₯μ•  μ „νŒŒ λ°©μ§€, νšŒλ³΅νƒ„λ ₯μ„± ν–₯상

    • Redis Replicationκ³Ό Sentinel을 ν†΅ν•œ λΆ„μ‚° 처리 및 κ³ κ°€μš©μ„± 확보

      • 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λ₯Ό μ‚¬μš©ν•˜μ—¬ μ΄λ²€νŠΈκ°€ μ „λ‹¬λ˜λ©°, 각 μ„œλΉ„μŠ€κ°€ 이벀트λ₯Ό μƒμ„±ν•˜κ³ , μ†ŒλΉ„ν•˜λŠ” λ°©μ‹μœΌλ‘œ 톡신

  • CI/CD

    • CI: μ„œλΉ„μŠ€ μ»¨ν…Œμ΄λ„ˆλ₯Ό κ΅¬μ„±ν•˜μ—¬ ν…ŒμŠ€νŠΈ μ‹€ν–‰
    • CD: λ„μ»€ν™”ν•œ imageλ₯Ό AWS ECR에 Push, 각 EC2에 배포

πŸ“š API λͺ…μ„Έμ„œ


🧩ERD

pickple


πŸ—‚οΈ 인프라 섀계도

image

Service Description Authorization Port
[Eureka] μ„œλΉ„μŠ€ 등둝 및 λ‘œλ“œλ°ΈλŸ°μ‹± 19090
[API Gateway] μš”μ²­ 인증 및 λΌμš°νŒ… jwt 토큰 인증 19091
[Auth] jwt 토큰 λ°œκΈ‰ 및 관리 jwt 토큰 λ°œκΈ‰ 19092
[User] μ‚¬μš©μž κ΄€λ ¨ μž‘μ—… 관리 jwt 토큰 인가 19093
[Commerce] 컀머슀 κ΄€λ ¨ 도메인 μž‘μ—… 관리 19094
[Payment] 결제 도메인 μž‘μ—… 관리 19095
[Delivery] 배솑 도메인 μž‘μ—… 관리 19096
[Notification] μ•ŒλžŒ 도메인 μž‘μ—… 관리 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

a Microservices Architecture (MSA)-based backend system designed to e-commerce platform

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 99.6%
  • Dockerfile 0.4%