프로젝트#2 : 시스템 아키텍쳐

hyezuu·2025년 3월 26일

시작하며

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: 모니터링과 메트릭 수집을 담당

주요 워크플로우

  1. 클라이언트가 Spring Cloud Gateway를 통해 요청을 보낸다.
  2. 게이트웨이는 Eureka를 통해 적절한 서비스를 찾는다.
  3. auth 서비스는 인증 처리를 담당하고, 리프레시 토큰을 Redis에 저장한다.
  4. 인증된 요청은 각 도메인 서비스(user, order, company 등)로 라우팅된다.
  5. 각 서비스는 자체 데이터베이스를 사용하여 비즈니스 로직을 처리한다.

외부 통합

다이어그램 하단에는 외부 통합 서비스가 표시되어 있다

  1. Google Gemini
    예상 출발 시각을 알려주는 ai

  2. Slack
    사용자에게 알림을 전달하기 위한 외부api

  3. Naver Cloud Platform
    주소를 기반으로 위, 경도를 반환해주는 api
    위, 경도를 기반으로 최단 거리를 알려주는 api

마무리

하고싶은 것들은 많았는데, 기능의 안정성에 집중하다보니 큰 도전을 하지 못한 것에 아쉬움이 남는다. 이번의 경험으로 더 나은 결과를 만들 수 있겠지 ! 많이 배우고 많은 것을 느낀 프로젝트였다

profile
기록

2개의 댓글

comment-user-thumbnail
2025년 3월 27일

인프라 설계도 깔끔하게 잘 설계하셨네요~

1개의 답글