Skip to content

MSA-Logistics-service/backend

Repository files navigation

MSA 물류 프로젝트

📣 프로젝트 간단 소개

  • MSA 기반 국내 B2B 물류 관리 및 배송 시스템
  • 24.09.05 ~ 24.09.19 15일, 4인 프로젝트

🐹 개발 환경

분류 상세
IDE IntelliJ
Language Java 17
Framework Spring Boot 3.3.3, Spring Security
Database PostgreSQL, Redis
ORM JPA
Build Tool Gradle
Infra Docker, Docker-Compose
Monitoring zipkin, prometheus, Grafana
Version control git, github

👩‍💻 기능 소개

  • 공통 기능

    • is_delete 필드를 추가하여 논리적 삭제를 관리, 모든 조회 시 is_delete가 false인 데이터만을 대상으로 처리
    • Zipkin, prometheus를 통해 분산추적 및 로그 수집
    • 수집한 로그를 Grafana 대시보드를 통해 시각화
  • gateway

    • CustomPreFilter 각 서비스마다 구현하여 인가 처리
    • Redis를 활용해 Auth 서버와 User 데이터 공유
    • gateway 애플리케이션 다운 시 Grafana에서 슬랙을 통해 알람
  • 유저 관리

    • jwt 토큰을 이용한 인증/인가
    • 허브 관리자, 배송 관리자, 업체 관리자, 마스터 유저로 구분
    • 회원 가입 시 validation을 통해 유효성 검사
  • 허브, 허브 간 이동 정보 관리

    • 허브 간 최적 경로 탐색 및 경로 최적화
    • 재귀적 경로 탐색 가능
    • 경로 정보 수정 시 기존 경로와의 관계를 자동으로 업데이트
  • 상품 생성 및 관리

    • 모든 상품은 특정 업체와 허브에 소속되어 있음
    • Gemini API 연동하여 상품 설명 삽입에 대한 추천 응답 생성 가능
    • 생성된 응답은 모두 DB에 저장
  • 주문 및 배송 기능

    • 주문 시에 허브 모듈에서 정보 받아와 배송 및 배송 경로 기록 엔티티 생성
    • 주문이 생성되면 관련된 재고가 감소하며, 주문이 취소되면 해당 수량이 복원됨
    • 배송 경로는 최초에 모든 경로가 생성
    • 허브 모듈 FeignClient 예외 상황 시 서킷브레이커 Fallback 로직 작동, 기본 값 반환
    • 주문, 배송 삭제 시 연관된 데이터는 is_delete 필드를 통해 관리
    • 배송경로 조회시, naver api direction5를 이용하여 배송 경로별 예상소요 시간과 예상 거리 조회

🧩 ERD 및 테이블 명세서

image


🐙 API docs


인프라 구조

인프라 설계서.png

📂 패키지 구조

Service Description Authorization Port
[Eureka] 서비스 등록 및 로드밸런싱 19090
[Gateway] 요청 인증 및 라우팅 jwt 토큰 인증 19095
[Auth] jwt 토큰 발급 및 관리 jwt 토큰 발급 19096
[User] 사용자 관련 작업 관리 jwt 토큰 인가 19094
[Hub] 허브, 업체 도메인 작업 관리 jwt 토큰 인가 19092
[Logistics] 물류(상품, 주문, 배송) 도메인 작업 관리 jwt 토큰 인가 19091
[AI] AI, Slack 메세지 도메인 작업 관리 jwt 토큰 인가 19093

✏️ 프로젝트 실행 방법

  • 프로젝트 클론 및 docker 설치 후 로컬 환경에서 순차적으로 실행
  1. 프로젝트 클론

     git clone https://github.com/MSA-Logistics-service/backend.git
    
  2. 도커 컴포즈 명령어 실행

     docker-compose up -d
    
  3. 각 모듈별 application.yml, application-dev.yml 파일 작성

    (application.yml 작성 예시)
    spring:
      application:
        name: logistics
      cloud:
        circuitbreaker:
          resilience4j:
            enabled: true
      profiles:
        active: dev
    
      jpa:
        hibernate:
          ddl-auto: update
        properties:
          hibernate:
            dialect: org.hibernate.dialect.PostgreSQLDialect
        show-sql: true
    
    server:
      port: 19091
    
    
    resilience4j:
      circuitbreaker:
        configs:
          default:
            registerHealthIndicator: true
            slidingWindowType: COUNT_BASED
            # ... 원하는 서킷 브레이커 설정
            permittedNumberOfCallsInHalfOpenState: 3
            waitDurationInOpenState: 20s
    
    management:
      endpoints:
        web:
          exposure:
            include: health, prometheus
      endpoint:
        health:
          show-details: always
      prometheus:
          enabled: true
      prometheus:
        metrics:
          export:
            enabled: true
    </details>
    (application-dev.yml 작성 예시)
    spring:
       datasource:
          url: jdbc:postgresql://localhost:5433/logistics
          username: logistics_db
          password: logistics_db
          driver-class-name: org.postgresql.Driver
    
    eureka:
       client:
          service-url:
          defaultZone: http://localhost:19090/eureka/
    
    management:
       zipkin:
           tracing:
             endpoint: "http://localhost:9411/api/v2/spans"
       tracing:
           sampling:
             probability: 1.0
    
    ai:
       google:
          api-key: {API-KEY}
  4. 각 모듈 실행

    (실행 순서) Eureka → gateway → Auth → User, Hub, Logistics, AI
  5. DB 연동 후 Postman과 같은 테스트 툴로 API 테스트

    (할당 DB 포트 번호) - Logistics → `5433`
    - Hub → `5434`
    - Slack & AI → `5435`
    - User → `5436`

🙋‍♀️ 팀원 소개 및 파트 분배

팀원 담당 파트
곽솔래 업체, 허브
이경진 상품, 상품 AI, 주문, 분산추적 Grafana
최준 유레카, 게이트웨이, Auth 및 유저 + Slack + AI
노민경 배송 (배송, 배송 경로 기록)
공통 프로메테우스, Zipkin, Resilience4j

About

MSA 기반 국내 B2B 물류 관리 및 배송 시스템

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages