Skip to content

High-Quality-Coffee/JGJW-Express

Repository files navigation

물류 관리 및 배송 시스템을 위한 MSA 기반 플랫폼 - ZgZg Express

서비스 소개

Getting Started (서비스 구성 및 실행 방법)

image image image image image image image image image image



About Project

  • 프로젝트 목적: 물류 관리 및 배송 시스템을 위한 MSA 기반 플랫폼
  • 프로젝트 설명: 물류 관리 및 배송 시스템입니다. MSA기반 플랫폼으로, 대규모 트래픽을 고려한 설계와 개발을 진행하였습니다.
  • 아키텍처 설명 : 허브, 배송담당자, 회원, 주문, 업체, 상품, 배송, slack/AI로 나뉘어져 있으며, DB, SpringBoot 모두 docker container로 관리 하였습니다. 서비스 간의 통신은 FeignClient를 통해서 진행하였습니다.

image



적용 기술

Redis

  • 빈번하게 조회되는 데이터를 캐싱
  • 허브의 경로 데이터는 경로를 계산하여 Cache-Aside 전략으로 캐싱

QueryDSL

  • 정렬, 권한 별 조회 등에 따른 동적 쿼리 작성을 위하여 QueryDSL을 도입하여 활용했습니다.

Swagger

  • 각각의 모듈과 정확한 소통을 위해 스웨거를 통해 API 를 관리하였습니다.

Zipkin

  • 성능 문제를 분석하고 트랜잭션 추적을 위해 Zipkin을 도입하였습니다.
  • 마이크로서비스 간의 호출 관계를 시각화하여 성능 병목 지점을 식별할 수 있도록 하였습니다.

Aop 로깅

  • 공통적으로 적용해야 하는 로깅 기능을 AOP(Aspect-Oriented Programming)를 활용하여 구현하였습니다.
  • 서비스 레이어 및 주요 비즈니스 로직에서 실행 시간을 측정하고 로깅하여 성능을 모니터링하였습니다.


트러블 슈팅



고민

— 기술/구현

— 피드백



Key Features (주요 기능)

  • 회원:

    • 권한별 회원가입을 진행합니다
    • 권한은 MASTER(관리자), HUB(허브담당자), STORE(업체담당자), DELIVERY(배송담당자)로 분류되어 있습니다
    • 로그인이 진행되고, 필터 단에서 유저의 권한을 확인하여 토큰을 발급합니다.
    • 발급된 토큰을 기반으로 gateway의 AuthPermissionFilter에서 권한별 API를 처리합니다.
  • 배송담당자:

    • 스파르타 물류센터에 속한 허브 배송담당자가 10명 존재합니다
    • 각 허브별 업체 배송담당자는 10명이 존재합니다
    • Redis Queue를 통해서 배송 담당자의 순번에 따라서(라운드 로빈방식으로) 배송담당자를 할당합니다.
  • 주문:

    • 주문의 CRUD 및 검색 기능이 있습니다.
    • MASTER 권한은 CRUD 검색이 모두 가능합니다.
    • 토큰을 인증한 회원은 모두 주문이 가능합니다.
    • 주문 취소는 MASTER, 허브 관리자, 주문자만 가능합니다.
      • 허브 관리자는 본인 담당의 허브 주문만 취소 가능합니다.
      • 주문자는 배송이 시작되지 않은 경우에만 취소 가능합니다.
  • 배송:

    • 주문이 생성되면 배송이 함께 생성됩니다.
    • 배송이 생성되면 배송 경로가 함께 생성되어 배송 담당자에게 슬랙으로 알림을 보냅니다.
  • 상품:

    • 상품 신규 등록이 가능합니다
    • 상품 재고 추가/감소가 가능합니다
    • 주문 서비스 호출을 통해서 재고 추가/감소를 진행합니다.
  • 허브:

    • 물류 전략을 Hub And Spoke로 정했던 가장 큰 이유는 패션 산업의 특징 때문입니다. 패션 쪽은 종류도 다양하고, 같은 옷에 색상 및 사이즈도 구분되어 있습니다. 그리고 반품/교환 비율이 높아 (수거 → 검사 → 재분류 → 유통) 과정이 빈번하게 일어납니다. 그래서 중앙 허브에 집중해 자동화 및 효율화에 이점이 있는 전략을 선택하게 되었습니다.
    • 허브 경로는 허브와 연관관계를 맺지 않고 이벤트에 의해 최신화가 되도록 진행했습니다. 이렇게 한 이유는 허브 경로는 허브의 CUD 뿐만 아니라 스케쥴링, 트래픽 등 다양한 상황에서 최신화를 해야했고, 이 때 경로의 일관성을 위해 모든 경로를 업데이트 하기 때문입니다. 따라서 MSA 환경에서 이후에 도메인 분리가 고려될 때 확장성을 위해 결합도를 낮춰서 구현했습니다.
  • 업체:

    • 업체의 CURDs 기능이 있습니다.
    • MASTER는 모든 권한이 있고, 허브 관리자는 자신의 허브에 대해서만 모든 권한이 있습니다. 업체 담당자는 자신의 업체에 대해서 수정 및 조회만 가능합니다.
  • SLACK/AI

    • Gemini를 이용하여 메세지를 생성하고 Slack app을 이용하여 특정사용자에게 DM을 보냅니다.

image

  • ORDER의 값들을 requestDTO에 담아 요청하고, 일관된 형태의 response를 받습니다.
  • 일관된 형태의 response에서 변수들을 파싱해 DB에 저장, 메시지를 전송합니다.
  • MASTER만 전 권한이 있고 나머지는 생성만 가능합니다.


ERD



image
image
image



Technology Stack (기술 스택)

BackEnd

SpringBoot SpringBoot 3.4.3
Java Java 17
Spring Data JPA JPA 5.0.0
QueryDSL QueryDSL 1.11.12
Spring Security QueryDSL 3.4.2

Infra

PostgreSQL PostgreSQL 16.3
pgAdmin pgAdmin latest
Docker docker


Development Workflow (개발 워크플로우)

브랜치 전략 (Branch Strategy)

우리의 브랜치 전략은 아래와 같은 Git Flow를 기반으로 하며, 다음과 같은 브랜치를 사용합니다.

git flow
  • Main Branch

    • 배포 가능한 상태의 코드를 유지합니다.
    • 모든 배포는 이 브랜치에서 이루어집니다.
  • develop Branch

    • 통합 기능 관리 브랜치 입니다
    • feat에서 개발한 기능을 develop 브랜치에서 통합하여 관리합니다.
  • feat Branch

    • 기능 개발 브랜치 입니다.
    • 기능 단위로 브랜치를 나누어 기능을 개발하였습니다.
  • refactor Branch

    • 코드 리팩토링 브랜치 입니다.
    • 코드 리팩토링이 필요한 경우 refactor 브랜치에서 작업했습니다.
  • release Branch

    • 배포 전 버전을 관리하는 브랜치 입니다.
    • 최종 배포하기 전 테스트를 진행하고, 이상이 없다면 Main브랜치로 배포를 진행합니다.
  • hotfix Branch

    • 핫픽스를 관리하는 브랜치 입니다.
    • 배포된 환경에서 수정사항이 발생했을 경우, hotfix 브랜치에서 관리하였습니다.


Members (팀원 및 팀 소개)

박규원 류지윤 박상욱 김지수
회원, 배송담당자, 상품 주문, 배송 허브 슬랙, 업체
Lead Tech Lead BE BE

About

물류 관리 및 배송 시스템을 위한 MSA 기반 플랫폼 - ZgZg Express

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors