작년 9월까지 진행하던 식구하자 팀 프로젝트를 혼자서 추가로 기능 추가 구현을 진행하려 한다.
github 주소 : https://github.com/LminWoo99/PlantBackend
그떄 진행할 때, 더 추가하고 싶었던 기능과 개선시키고 있던 점들이 있었는데 팀원들과 나의 일정때문에 하지 못했다.
그래서 개인으로 따로 기능추가를 하려하는데, 기존 서버의 서비스가 많아지고 프로젝트 규모가 커지면서 복잡성이 증가해서 MSA
를 적용하여 기능 확장을 진행하려 한다.
그 과정을 포스팅 하도록 하겠습니다. 저처럼 추가로 기능 추가를 Spring Cloud
를 이용한 MSA 적용하시려는 분들이 제 글을 읽으신다면 도움이 되실것 같습니다🙏🙏
진행에 앞서 MSA 적용 이유에 대해서 먼저 알아보도록 하겠습니다.
식구하자 프로젝트는 식물, 식물 용품을 중고거래와 다양한 식물에 대한 정확한 정보를 얻을수 있는 플랫폼이다.
여기서 계획중인 추가할 기능은 크게 3가지이다.
이 기능을 토대로 MSA로 분리된 서버들의 주소를 모두 알고 있어야 하거나 모든 서버에 대한 인증 및 인가를 설정하기엔 번거롭기 때문에 이를 해결하기 위해 API Gateway와 Eureka Server를 추가해주었다. Gateway 서버는 API 서버 앞단에서 모든 API 서버들의 엔드포인트를 단일화하여 묶어주고 API에 대한 인증과 인가 기능에서 메시지에 따라서 여러 서버로 라우팅하는 고급기능까지 많은 기능을 담당한다.
Eureka 서버는 Netflix에서 개발한 Service Discovery 인데 이는 흩어져 있는 서버들의 주소 정보를 가지고 있어 Gateway 서버에서 라우팅할 때 이 Eureka 서버를 통해 경로를 얻고 라우팅 해주게 된다.
Gateway와 Eureka 설정 방법에 대해서는 저의 이전 포스팅을 참고해주시면 될 것 같습니다.
[MSA]Spring Cloud Gateway& Eureka 개념 및 예제
[MSA] Spring Cloud ( Config, actuator refresh )
[MSA] Spring Cloud (Cloud bus,RabbitMQ 이용한 Config 정보 반영)
[MSA] 마이크로서비스간 통신
기존 설계도는 다음과 같다.
기존 설계에서 Spring Cloud 이외에 추가로 사용할 스택과 변경할 기술은
MSA를 적용한 백엔드 설계도는 다음과 같다.
일단 설계도를 보면 기존 서버, 결제를 담당할 서버, 꽃집 정보를 가지는 서버, 채팅 서버 이렇게 4가지로 구성되어 있고 기능에 따라 DB는 4가지로 나눠줬다.
구체적인 내용은
DB간의 동기화는 Kafka
를 활용할 예정이다.
개발 진행과정은 다음 포스팅에 작성하도록 하겠습니다!