An open API service indexing awesome lists of open source software.

https://github.com/devsquad10/b2b-service-platform

[스파르타] 10조 B2B 물류 시스템
https://github.com/devsquad10/b2b-service-platform

docker docker-compose feignclient gemini msa rabbitmq slack spring-boot

Last synced: 3 months ago
JSON representation

[스파르타] 10조 B2B 물류 시스템

Awesome Lists containing this project

README

          

# 📌 물류 관리 및 배송 시스템 (DevSquad10)

![Image](https://github.com/user-attachments/assets/727bd681-d84b-4310-8b9e-080859fe3b39)

## 📖 프로젝트 목적 개요

### 대규모 AI 시스템 프로젝트

**물류 관리 및 배송 시스템을 MSA(Microservices Architecture) 기반의 시스템을 설계하고 구현하면서 다양한 기술과 방법론을 적용해보는게 목표입니다.**

### 주요 목표

- MSA 설계 및 구현
- 서비스 간 독립성을 유지하면서 유기적으로 연동되며는 마이크로서비스 아키텍처(MSA) 설계
- API 변경시 발생할 수 있는 문제를 최소화하기 위한 버전 관리


- 협업 및 프로젝트 관리
- GitHub Issues와 Slack을 활용하여 팀원 간 원활한 소통 및 업무 분배
- API 요구사항 및 공유해야 할 정보는 Notion을 통해 문서화하여 체계적으로 관리
- 코드 리뷰 및 PR(Pull Request) 프로세스를 통해 코드 품질 유지 및 개선


- 이벤트 기반 아키텍처 적용
- RabbitMQ를 활용한 비동기 메시징 시스템 도입
- 서비스 간 의존도를 줄이고 확장성을 높이기 위한 이벤트 기반 통신(Event-Driven Architecture) 적용


- AI 기술 적용 (Gemini API 활용)
- AI를 활용해 특정 기능을 자동화하고, 실제 프로젝트에 적용 경험 확보


## 🎯 팀원 역할분담




전승현<팀장>




김민지




이승욱




이지웅





전승현 팀장


이채연


이서우


윤창근


Company
Product
Order

Shipping
Shipping Agent
User
Eureka
Gateway
Hub
Message
Gemini AI


## 📅 프로젝트 진행 기간

- 2025년 3월 11일 ~ 2025년 3월 26일

## 🏗 서비스 구성

### 💾 프로젝트 구조

```
b2b-project/ # B2B 루트 프로젝트
│── com.devsquad10.company/ # 업체 관련 서비스
│ ├── src/main/java/com/devsquad10/company/
│ │ ├── application/ # 애플리케이션 서비스 계층
│ │ ├── domain/ # 도메인 모델 및 엔티티
│ │ ├── infrastructure/ # 데이터베이스, 외부 API 연동
│ │ ├── presentation/ # REST API 및 컨트롤러
│ ├── src/test/java/com/devsquad10/company/

│── com.devsquad10.eureka/ # 서비스 디스커버리 (Eureka)
│ ├── src/main/java/com/devsquad10/eureka/

│── com.devsquad10.gateway/ # API Gateway (Spring Cloud Gateway)
│ ├── src/main/java/com/devsquad10/gateway/
│ ├── infrastructure/

│── com.devsquad10.hub/ # 물류 허브 서비스
│ ├── src/main/java/com/devsquad10/hub/
│ │ ├── application/
│ │ ├── domain/
│ │ ├── infrastructure/
│ │ ├── presentation/

│── com.devsquad10.message/ # 메시징 서비스 (slack)
│ ├── src/main/java/com/devsquad10/message/
│ │ ├── application/
│ │ ├── domain/
│ │ ├── infrastructure/
│ │ ├── presentation/

│── com.devsquad10.order/ # 주문 서비스
│ ├── src/main/java/com/devsquad10/order/
│ │ ├── application/
│ │ ├── domain/
│ │ ├── infrastructure/
│ │ ├── presentation/

│── com.devsquad10.product/ # 상품 서비스
│ ├── src/main/java/com/devsquad10/product/
│ │ ├── application/
│ │ ├── domain/
│ │ ├── infrastructure/
│ │ ├── presentation/

│── com.devsquad10.shipping/ # 배송 서비스
│ ├── src/main/java/com/devsquad10/shipping/
│ │ ├── application/
│ │ ├── domain/
│ │ ├── infrastructure/
│ │ ├── presentation/

│── com.devsquad10.user/ # 사용자 서비스
│ ├── src/main/java/com/devsquad10/user/
│ │ ├── application/
│ │ ├── domain/
│ │ ├── infrastructure/
│ │ ├── presentation/


│── docker-compose.yml # Docker 설정 파일
│── README.md # 프로젝트 설명 문서
│── settings.gradle.kts # Gradle 설정 파일

```

### 🚀 서비스 엔드포인트

| 서비스명 | 설명 | 기본 URL | 포트 |
|--------------|-------------------|--------------------------|-------|
| **Eureka** | 서비스 디스커버리 | `http://localhost:19091` | 19091 |
| **Gateway** | API Gateway | `http://localhost:19092` | 19092 |
| **Company** | 업체 정보 관리 서비스 | `http://localhost:19093` | 19093 |
| **Hub** | 물류 허브 서비스 | `http://localhost:19094` | 19094 |
| **Message** | 메시징 서비스 ( Slack ) | `http://localhost:19095` | 19095 |
| **Order** | 주문 서비스 | `http://localhost:19096` | 19096 |
| **Product** | 상품 서비스 | `http://localhost:19097` | 19097 |
| **Shipping** | 배송 서비스 | `http://localhost:19098` | 19098 |
| **User** | 사용자 서비스 | `http://localhost:19099` | 19099 |



## ☁️ Architecture

![Image](https://github.com/user-attachments/assets/0ddecc6a-7a5c-46d1-ad6e-16d3617cb1ce)


## 📌 ERD

![Image](https://github.com/user-attachments/assets/a3a97c94-3753-4384-a9e5-54b5b13ab4eb)


## 🚨 Trouble Shooting

[승현] saga pattern 무한 재시도
방지- [wiki 보기](https://github.com/DevSquad10/b2b-service-platform/wiki/%5BTrouble-Shooting%5D-%5B%EC%8A%B9%ED%98%84%5D-saga-pattern-%EB%AC%B4%ED%95%9C-%EC%9E%AC%EC%8B%9C%EB%8F%84-%EB%B0%A9%EC%A7%80)

[승현] RabbitMQ concurrency 설정과 비관적 락을 활용한 재고 감소 동시성
제어 - [wiki 보기](https://github.com/DevSquad10/b2b-service-platform/wiki/%5BTrouble-Shooting%5D-%5B%EC%8A%B9%ED%98%84%5D-RabbitMQ-concurrency-%EC%84%A4%EC%A0%95%EA%B3%BC-%EB%B9%84%EA%B4%80%EC%A0%81-%EB%9D%BD%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%9E%AC%EA%B3%A0-%EA%B0%90%EC%86%8C-%EB%8F%99%EC%8B%9C%EC%84%B1-%EC%A0%9C%EC%96%B4)

[승욱] SpringBoot server port
오류 - [wiki 보기](https://github.com/DevSquad10/b2b-service-platform/wiki/%5BTrouble-Shooting%5D-%5B%EC%8A%B9%EC%9A%B1%5D-SpringBoot-server-port-%EC%98%A4%EB%A5%98)

[민지] JPQL 날짜
비교 - [wiki 보기](https://github.com/DevSquad10/b2b-service-platform/wiki/%5BTrouble-Shooting%5D-%5B%EB%AF%BC%EC%A7%80%5D-JPQL-%EB%82%A0%EC%A7%9C-%EB%B9%84%EA%B5%90)

[지웅] 허브 간 계산 알고리즘 성능 최적화 -
[wiki 보기](https://github.com/DevSquad10/b2b-service-platform/wiki/%5BTrouble-Shooting%5D-%5B%EC%A7%80%EC%9B%85%5D-%ED%97%88%EB%B8%8C-%EA%B0%84-%EA%B3%84%EC%82%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94)

## ⚙️ 적용 기술

### *🔍 QueryDSL* ###

> 검색, 정렬 등 동적 쿼리 작성을 위해 사용하며, 타입 안전한 SQL 쿼리를 생성하기 위해 활용했습니다.

### *🚀 Redis* ###

> 연속된 요청으로 인한 DB 병목을 해소하기 위해 캐싱 용도로 사용하여 빠른 데이터 접근을 지원합니다.

### *📩 RabbitMQ 비동기 처리* ###

> MSA 도메인 간 비동기 이벤트 처리를 통해 서비스 간 결합도를 감소시키고 안정성을 향상시켰습니다.

### *⏰ Scheduler 사용* ###

> 매일 오전 6시에 배송 담당자들에게 당일 배송 메시지 안내를 자동으로 보내기 위해 사용했습니다.

### *🔒 비관적 락 구현* ###

> 재고 감소 , 배송 담당자 배정 할당 등 동시성 문제가 발생할 수 있는 중요한 트랜잭션에서 충돌을 방지하기 위해 사용했습니다.

### *🔗 Feign Client* ###

> MSA 환경에서 다른 서비스의 API를 호출할 때 간편하게 HTTP 통신을 처리하기 위해 사용했습니다.

### *🤖 Gemini AI* ###

> 슬랙 메시지 양식을 자동화하고, 배송 순서를 최적화하여 효율적인 물류 관리를 지원합니다.


## 🛠 기술 스택

## Backend

- **Framework**: Spring Boot 3.x

- **Database Access**: Spring Data JPA , QueryDSL

- **Security**: Spring Security 6.x

- **API Communication**: Feign Client
- **Message Broker**: RabbitMQ
- **Caching**: Redis
- **Testing**: JMeter
- **API Documentation**: Swagger (Springdoc OpenAPI)

- **REST API**: RESTful API 설계

## Database

- **Primary DB**: PostgreSQL

## Server

- **Application Server**: Apache Tomcat 9.0

## Authentication

- **Token-Based Authentication**: JWT (JSON Web Token)

## Devops

- **배포 및 운영**: Docker, Docker-Compose

## Etc

- **외부 API 연동**
-
- **Gemini API** : 상품 발송 시한 예측 및 상품 설명 문구 추천을 위한 외부 AI API 연동.