Skip to content

Latest commit

 

History

History
134 lines (109 loc) · 4.69 KB

README.md

File metadata and controls

134 lines (109 loc) · 4.69 KB

Food Delivery Service

Tech Stack


             

Sample Images


Category Search Checkout
Category and Checkout Restaurant Search Checkout Confirm
My Page Restaurant Registration
Checkout Confirm Checkout Confirm


Architecture


주문/결제 시스템
Checkout Confirm

  • Transactional Outbox Pattern 으로 신뢰성 있는 카프카 메시지 전달.
  • Reactive 기반 메시지 전송 및 backpressure 기능 구현 (Spring Cloud Stream).
  • 메시지 전송 Exactly Once Semantic 보장
    • idempotent kafka producer
    • TransactionalEventListener 로 database commit 후 메시지 전송.
    • read_committed kafka consumer

배달 기사 매칭 시스템 / 유저 알림 시스템

  • 실시간 배달 기사 위치 redis 에 업데이트
  • 주문 승인 이벤트 후 주문 사용자 그룹과 근처 배달기사들 그룹에 이분 매칭 수행
  • jwt 기반 유저 인증, 주문 승인 되거나 배달 기사 매칭 된후 유저에게 알림

쿠폰 발행

  • webflux 기반 서비스
  • reliable kafka, idempotence producer(acks=1, enable-idempotence: true)
  • rollback consumer (enable-auto-commit: false, manual kafka consumer's commitSync)
  • redis 분산락 (RLockReactive)

카프카 클러스터

  • 1 주키퍼, 3 브로커, 1 스키마 레지스트리

Elastic Search 간단한 메뉴 검색

레스토랑 이미지 및 데이터 수집

  • Selenium 웹 크롤링

프론트엔드

  • OAuth2 로그인, 레스토랑 음식/옵션 선택, 장바구니, 토스페이 결제
  • Redux 상태 관리/ thunk 기반 비동기 이벤트 처리

Test

  • BDD
  • mocking (service, controller layer)
  • test container
    • docker compose util: DockerComposeStarter.java
      • customized docker compose runner
      • run like:
        •     dockerComposeStarter.startServiceAndWaitForLog("kafka-broker-1", ".*started.*", 5, TimeUnit.MINUTES);
              dockerComposeStarter.startServiceAndWaitForLog("kafka-broker-2", ".*started.*", 5, TimeUnit.MINUTES);
              dockerComposeStarter.startServiceAndWaitForLog("kafka-broker-3", ".*started.*", 5, TimeUnit.MINUTES);
      • example: CouponControllerSimulationTest.java

Infra

  • oauth2, resource server
  • gateway filtering
  • config server
  • Eureka service discovery
  • Kubernetes, helm chart 로 마이크로 서비스 운영 및 배포


gateway: 8080
eurekaserver: 8761
configserver: 8071   
eatsorderservice: 8074
user: 8077
driver-service: 8078
eatssearch: 8079
schema-registry: 8081
coupon-app: 8092
coupon-service: 8093