MSA & Arcitecture

Spring Cloud를 이용한 MSA(1)

65살까지 코딩 2025. 1. 27. 15:02
728x90
반응형

인터넷의 발전과 휴대기기의 보편화에 따라 많은 사람들이 특정 서비스를 동시에 이용하기도 하고 특정 이벤트에 의해서 트래픽이 순간적으로 몰리는 현상이 잦아진다. 
즉 DAU가 증가하고 QPS가 높아짐에 따라 시스템을 좀 더 안정적이고 확장가능하며 유지보수에 용이하고 가용성이 높을 필요가 생겼다. 
확장성을 높임으로서 더 많은 트래픽을 감당할 수 있고 손쉬운 유지보수를 통해 빠르게 버그를 수정하거나 기능을 추가할 수 있다. 또한 가용성을 높임으로서 사용자에게 더 나은 경험을 제공할 수 있다. 

이러한 요구사항을 만족하기 위해 MSA라는 아키텍쳐가 등장했고 Spring에서 MSA에 구조에 맞게 빠르게 개발할 수 있는 다양한 라이브러리를 제공한다.

간단한 Ecommerce API를 만들어 보았고 사용한 Cloud library들을 정리하고자한다. 

Spring Cloud Gateway

클라이언트로 부터 온 요청을 해당 내부에 존재하는 서비스들에게 포워딩해주는 역할을 한다. 
게이트웨이는 포워딩 뿐만 아니라 로드밸런싱, 인증 인가 필터, Sticky Session, 처리율 제한 장치 등 다양한 공통 요소를 넣을 수 있다. 기존에는 내장서버로 Tomcat을 사용했지만 더 좋은 성능을 위해 논블러킹 IO로 처리하는 Netty로 변경되었다. 

 

Spring Cloud Discovery Service (Eureka)

Discovery Service는 특정 서비스를 이름으로 검색했을 경우 어떤 ip와 port로 가야하는지 알려주는 역할을 한다.
예를들어 클라이언트가 게이트웨이에 User-Service 관련 요청을 보냈다고 가정하면 게이트웨이는 Discover-Service에 User-Service의 ip와 Port를 질의하고 해당 정보를 얻어 요청을 보낸다. 어찌보면 DNS와 비슷한 느낌이다

 

Spring Cloud Config & Bus

각 서비스에서 사용하는 yml과 같은 설정 요소를 하나의 저장소에서 관리하고 Cloud Config는 이를 읽어서 다양한 서비스에게 제공한다. Cloud Bus는 message queue를 이용해 각 서비스들에게 설정정보를 실시간으로 동기화 시킬 수 있다. 설정정보를 업데이트하기 위해선 Srping Actuator가 필요하다.

 

구조도는 다음과 같다

728x90
반응형