이 프로젝트는 B2B 물류 관리 및 배송 시스템입니다. 각 지역에 허브 센터가 있고, 도매 업체가 필요한 물품을 물류센터로 주문을 하면 가공업체에서 생산된 물품이 저장되어 있는 허브에서 가공업체까지 배송을 합니다.
| 역할 | 담당자 | 설명 |
|---|---|---|
| 팀장 | 박동휘 | 주문 및 배송 서비스 API 설계 및 개발 |
| 팀원 | 서현재 | jwt와 security 를 활용한 인증 및 사용자와 배송담당자 서비스 API 설계 및 개발 |
| 팀원 | 진강훈 | OPEN API를 활용한 허브와 허브간 이동경로 서비스 API 설계 및 개발 |
| 팀원 | 김지현 | 업체와 상품 서비스 API 설계 및 개발과 gemini를 활용한 슬랙메세지 API 설계 및 개발 |
마이크로서비스 아키텍쳐(MSA)를 기반으로 마이크로 서비스 환경을 구축하고, eureka server를 통해 API gateway로 각 마이크로 서비스를 호출합니다. 각 마이크로서비스를 Docker를 통해 이미지를 빌드하고, 하나의 컨테이너에서 실행 및 관리를 합니다.
API 명세서 ☞ 여기로
테이블 명세서 ☞ 여기로

- 여태껏 인증인가를 JWT를 통해서 SecurityContext를 만들고 이를 통해 내부 Security를 거쳐서 인증인가 처리를 해왔다.
- 하지만 Spring Security는 하나의 어플리케이션 안에서만 동작하기 때문에 MSA환경에서 어떻게 적용해야 할지 고민이었다.
멀티 모듈 방식으로 공통모듈을 통해 중앙에서 관리하는 방향으로 고민
- 공통모듈로 인해서 각 하위 모듈에서 이슈가 발생해 이전 spring cloud 방식으로 롤백
- 실습 과정에서는 API gateway에서 인증인가를 처리하는 방식을 사용
- 각 도메인 마다 Security를 설정하고 인증인가를 해야되는가 의문이 생김
- 사용자 도메인에서 Security를 설정하고 Gateway에 Filter를 작성
- Gateway에 있는 필터에서 인증을 한 후 Request에 header를 추가하여 현재사용자의 id와 role을 넘김
- 각 도메인에서 requestHeader로 받은 role로 권한 처리
문제 초기 설계에서는 주문 서비스에서 주문이 생성되면 배송 서비스와 배송 경로 서비스까지 순차적으로 호출하는 구조였음. 이로 인해 주문 서비스가 배송 및 배송 경로 생성까지 직접 제어하게 되었고 결과적으로 하나의 서비스에 과도한 비즈니스 책임이 주어졌다고 생각함. 또한 배송 경로 생성에는 허브 간 거리 및 예상 시간 정보가 필요한데 이를 위해 허브 서비스까지 호출하게 되면서 서비스 간 결합도가 과도하게 높아졌다고 판단.
해결 과정 이러한 구조적 문제를 해결하기 위해 서비스간 역할을 명확히 분리하기로 함. 주문 서비스는 배송 생성까지만 책임지고, 이후 배송이 생성되면 배송 서비스 내부에서 배송 경로를 자동으로 생성하도록 설계를 변경. 이로써 API 체인이 단순화되고 각 서비스가 자신의 책임만 수행할 수 있게 됨.
swagger를 사용해 api 문서 자동화를 하고 gateway로 통합 문서를 볼 수 있게 하려 했지만 각각 마이크로 서비스에서는 sawgger ui 가 정상 동작하는데 api gateway 에서는 404 not found가 뜨는 문제 발생
각 마이크로 서비스와 gateway의 yml 파일에 swagger 설정을 해주었지만 동일한 오류가 지속적으로 발생
모놀리식 아키텍쳐일때는 단일 프로젝트였기 때문에 swagger 의존성을 webmvc로 해도 1:1 로 요청하기때문에 문서 자동화에 문제가 없었지만 MSA는 여러 마이크로서비스가 있기 때문에 N:1 요청이 필요했다. swagger 의존성을 webflux로 바꿔주면 gateway로 swagger 접근시 통합문서로 보여주게 된다.
| Java | Spring boot | Spring cloud | JWT | Spring security | PostgreSQL | JPA | QueryDSL |
|---|---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
| Redis | Docker | Swagger | Zipkin | Git | GitHub | Slack | Discord |
|---|---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
swagger-ui link: http://localhost:19091/webjars/swagger-ui/index.html
API docs ☞ 여기로















