시작하며
2주간의 짧은 프로젝트를 마치며, 산출물을 정리해보려한다.
4인의 백엔드개발자로 구성되었으며 짧은기간 DDD + MSA 라는 도전을 진행했다.

위 다이어그램은 물류 서비스를 위한 마이크로서비스 아키텍처(MSA) 시스템의 구조를 보여준다. 넷플릭스의 오픈소스 도구들을 활용한 클라우드 네이티브 설계가 특징이다.
주요 구성 요소
인프라 및 네트워크 레이어
- Spring Cloud Gateway
클라이언트의 요청을 처리하는 API 게이트웨이로, 서비스 라우팅과 로드밸런싱을 담당한다. Jwt 토큰을 각 마이크로서비스가 이해할 수 있는 헤더값으로 바꿔 전달해주는 역할을 맡고있다.
- Spring Cloud Config
중앙 집중식 서비스 구성 관리를 제공한다. GitHub 저장소를 활용했으며, 민감한 정보는 각서비스 서버의 환경변수로 담고있다. 서비스의 중단없이 설정을 관리할 수 있기에 채택했다.
- Netflix Eureka
서비스 디스커버리와 레지스트리를 담당하는 컴포넌트로, 각 마이크로서비스는 Eureka에 자신을 등록한다.
핵심 마이크로서비스
- auth: 사용자 인증 및 권한 부여 서비스
- user: 사용자 정보 관리 서비스
- hub: 물류 허브 관리 서비스
- order: 주문 관리 서비스
- company: 업체 정보 관리 서비스
- product: 제품 정보 관리 서비스
- delivery: 배송 관리 서비스
- slack: 슬랙 연동 서비스
데이터베이스 레이어
각 마이크로서비스는 독립적인 데이터베이스를 가지고 있으며, 도커 컨테이너화되어 있다:
- user-db, auth-db, hub-db, order-db, company-db, product-db, delivery-db, slack-db
모니터링 및 로깅
- Redis: 캐싱과 리프레시토큰 저장을 담당
- Zipkin: 분산 트레이싱을 위한 도구
- Grafana & Prometheus: 모니터링과 메트릭 수집을 담당
주요 워크플로우
- 클라이언트가 Spring Cloud Gateway를 통해 요청을 보낸다.
- 게이트웨이는 Eureka를 통해 적절한 서비스를 찾는다.
- auth 서비스는 인증 처리를 담당하고, 리프레시 토큰을 Redis에 저장한다.
- 인증된 요청은 각 도메인 서비스(user, order, company 등)로 라우팅된다.
- 각 서비스는 자체 데이터베이스를 사용하여 비즈니스 로직을 처리한다.
외부 통합
다이어그램 하단에는 외부 통합 서비스가 표시되어 있다
-
Google Gemini
예상 출발 시각을 알려주는 ai
-
Slack
사용자에게 알림을 전달하기 위한 외부api
-
Naver Cloud Platform
주소를 기반으로 위, 경도를 반환해주는 api
위, 경도를 기반으로 최단 거리를 알려주는 api
마무리
하고싶은 것들은 많았는데, 기능의 안정성에 집중하다보니 큰 도전을 하지 못한 것에 아쉬움이 남는다. 이번의 경험으로 더 나은 결과를 만들 수 있겠지 ! 많이 배우고 많은 것을 느낀 프로젝트였다
인프라 설계도 깔끔하게 잘 설계하셨네요~