1. 물류 관리 및 배송 시스템을 위한 MSA 기반 플랫폼 개발
- MSA(Microservices Architecture) 기반의 시스템을 설계하고 구현한다.
- MSA 애플리케이션을 구성하면서 실무에서 발생할 수 있는 다양한 상황을 경험해본다.
- API 연동, 데이터 무결성 유지, 서비스 간 통신의 신뢰성을 확보하는 방법에 대해 집중적으로 고민한다.
- Gemini API를 사용하여 AI를 활용하는 경험을 쌓는다.
2. 인프라 설계서
- auth service
- delivery service(배송, 배송 경로 기록, 배송 담당자)
- hub service(허브, 허브간 이동 정보)
- product service(업체, 상품)
- order service(주문)
- notification service(Gemini AI, Slack)
3. ERD
4. 허브 간 이동 경로 모델: Hub-and-Spoke
- Hub-and-Spoke 방식을 적용
- Hub-and-Spoke 방식은 중앙 허브를 통해 물류 흐름을 관리한다.
- Hub-and-Spoke 는 각 허브를 직접 연결하는 대신 중앙 허브에 물류를 집중시켜 운송 비용을 감소시킨다.
- Hub-and-Spoke 는 전체 물류 네트워크가 단순화 된다.
- Hub-and-Spoke 는 효율이 좋아 일반적으로 사용되는 방식이다.
4. 프로젝트를 하며 배웠던 점, 어려웠던 점
4 - 1. DDD 적용
DDD(Domain-Driven Design)와 MSA를 결합하면 복잡하고 확장 가능하며 유지보수가 용이한 소프트웨어 시스템을 구축하는데 좋다. DDD의 바운디드 컨텍스트 개념이 마이크로서비스의 경계를 명확히 정의하는 데 도움을 주기 때문이며, DDD의 도메인 모델링 접근 방식이 각 마이크로서비스의 독립적인 설계와 개발을 촉진하기 때문이다. 프로젝트에 어떻게 적용했는지는 다음 게시글부터 천천히 업로드할 예정이다.
4 - 2. 권한 체크 - AOP 활용
MSA 환경에서는 독립된 개발 환경을 요구하기 때문에 모든 마이크로서비스가 Spring Security를 의존해서는 안된다. 모놀리틱 환경에서라면 Spring Security가 제공하는 기능들을 활용해서 권한 체크를 손쉽게 할 수 있겠으나, MSA 환경에서는 별도의 전략이 필요하다. 이번 프로젝트에서는 AOP를 활용해서 각 마이크로서비스가 권한체크를 수행했다. 프로젝트에 어떻게 적용했는지는 차차 블로그에 올리도록 하겠다.
4 - 3. Spring Cloud Gateway와 비동기 통신
Spring Cloud Gateway는 비동기적이고 논블로킹 방식으로 동작하는 게이트웨이이다. Spring WebFlux 기반으로 구축되어 있어 리액티브 프로그래밍 모델을 따른다. Spring Cloud Gateway에서 다른 마이크로서비스를 호출하는 경우 비동기방식의 HTTP 클라이언트를 사용해야 하는 게 맞을 것이다. 그렇지만, 이번 프로젝트는 동기 방식의 FeignClient를 사용해서 구현했고, 한계점도 깨닫게 되었다. 프로젝트를 진행하면서 WebClient라는 비동기식, 리액티브 HTTP 클라이언트를 알게되었는데, WebClient는 무엇인지, 어떻게 사용하는지 학습한 후 블로그에 업로드할 예정이다.
4 - 4. Slack API
이번 프로젝트를 진행하면서 Slack API를 처음 써보게 되었다. Slack API를 사용하는 방법, 프로젝트에 어떻게 적용했는지는 차차 올리도록 하겠다.
4 - 5. Gemini API
구글이 제공하는 AI, Gemini API를 프로젝트에 적용했다. 역시 차차 올리도록 하겠다.
5. 마무리
2024년 12월 5일부터 2024년 12월 18일까지 나를 포함한 4명의 팀원들이 고군분투하여 프로젝트를 수행했다.
https://github.com/Logistics-system-project
MSA 환경을 직접 구축해볼 수 있어서 정말 좋았고, DDD를 적용해 볼 수 있어서 좋은 시간이었다.
앞으로 올릴 게시글들도 기대해주시라.
'자바 심화 2기' 카테고리의 다른 글
CodeBloom - AI를 활용한 주문 관리 플랫폼 프로젝트 결과물 (1) | 2024.11.19 |
---|---|
2024 11 14 TIL - Spring Data의 @PageableDefault, @SortDefault (0) | 2024.11.14 |
2024 11 13 TIL - QueryDSL, BooleanExpression (1) | 2024.11.13 |
2024 11 12 TIL - 회원가입하려는데 왜 자꾸 인증하라고 그러는걸까? (Feat. AuditorAware) (0) | 2024.11.12 |
2024 11 11 TIL - AuditorAware 구현하기 (2) | 2024.11.11 |