Spring Cloud의 개념과 어떤 기능들이 있는지 알아본다.
그 전에 MSA가 무엇인지 빠르게 알아보자.
MSA란 시스템을 작은 독립적인 서비스로 나누고, 각 서비스가 특정 기능을 수행하도록 설계된 아키텍처이다.
예를 들면, 하나의 서비스로 되어있는 전자상거래 애플리케이션을 상품 서비스, 사용자 서비스, 주문 서비스등으로 작은 독립적인 서비스로 나누어 관리하는 것을 뜻한다.
분산 시스템을 구축하고 운영하기 위한 스프링 프레임 기반 라이브러리의 모음이다. 이는 마이크로서비스 아키텍처(MSA)를 구현할 때 주로 사용된다.
특징으로는 서비스 디스커버리, 로드 밸런싱, 분산 설정 관리, 분산 추적, API 게이트웨이 등 다양한 기능을 포함하며, 통합과 확장이 가능하고 이를 통해 유연성을 높일 수 있다.
API 게이트웨이(API Gateway)
: MSA에서 클라이언트와 백엔드 서비스 간의 통신을 중앙에서 관리하는 서버이다. 클라이언트 애플리케이션이 서비스에 요청을 보낼 때 API 게이트웨이가 서비스 간 통신을 관리하고 모니터링함으로써 이를 조정하고 보안 검사를 수행하는 데 사용된다. API Gateway는 주로 라우팅, 인증, 보안, 로드 밸런싱, 캐싱 등의 기능을 담당하여 MSA를 더 효과적으로 관리하고 사용할 수 있도록 해준다.
서비스 디스커버리(Service Discovery)
: 서비스들의 위치와 상태를 자동으로 찾고 관리하는 기능이다.
서비스 디스커버리의 과정을 살펴보면, 서비스는 자동으로 디스커버리 시스템에 등록되며, 서비스가 종료되면 등록 정보가 자동으로 해제된다. ➡ 클라이언트 애플리케이션은 이것을 통해 동적으로 사용 가능한 서비스를 검색하고 선택한다. ➡ 이를 통해 클라이언트는 부하 분산을 수행하고 요청을 적절히 분배할 수 있다.
분산 설정(Distributed Configuration)
: MSA에서 필요한 설정을 중앙에서 관리하고 업데이트할 수 있도록 하는 기능이다. 서비스는 이 서버에서 설정을 동적으로 가져와 사용하며, 이는 서비스가 실행 중일 때 설정을 변경하고, 변경된 설정을 즉시 적용할 수 있도록 하는 특징이 있다. 때문에 중지를 하지 않고도 설정을 변경하여 유연한 구성을 가능케한다.
분산 추적 (Distributed Tracing)
: 트랜잭션 추적을 위한 기능이다. 스프링 클라우드는 분산 추적을 위한 Spring Cloud Sleuth을 제공한다. 여기서는 발생한 작업을 트레이스와 스팬으로 기록하여 마이크로서비스 간의 요청과 응답을 추적하고 모니터링하는 데 사용한다. 이를 통해 서비스 간의 통신이 어떻게 이루어지고 있는지를 시각적으로 확인할 수 있다.
로드 밸런싱 (Load Balancing)
: 여러 서버에게 들어오는 트래픽을 균등하게 분배하여 부하를 분산시키는 기술이다. 세션 유지, 스케일 아웃과 같은 기능을 통해 네트워크 트래픽을 효과적으로 관리한다.
회로 차단기 (Circuit Breaker)
: 서비스 간의 통신에서 발생할 수 있는 장애에 대응하는 메커니즘이다. 서비스 간의 통신이 실패할 경우, 회로 차단기는 일시적으로 연결을 차단하여 전체 시스템에 영향을 최소화하고, 일정 시간이후에 다시 시도하거나, 다른 대체 서비스를 호출한다.
위와 같은 마이크로서비스 아키텍처를 지원하기 위해 다양한 도구들을 사용하여 구현한다.
⚫ API Gateway구성에는 Spring Cloud Gateway를 활용되며, 이는 경량의 도구로서 API 라우팅, 필터링, 로드 밸런싱과 같은 역할을 효과적으로 수행한다. 앞으로의 작업에서는 Spring Gateway를 구현하여 이러한 기능들을 자세히 살펴볼 예정이다.
⚫ 서비스 디스커버리 단계에서는 Spring Cloud Discovery를 사용하여 서비스 인스턴스의 등록, 검색, 상태 감지 등을 자동화하고 효과적으로 관리한다.
⚫ 분산 시스템에서의 설정 관리를 위해 Spring Cloud Config를 도입한다. 이는 중앙 집중식으로 애플리케이션의 설정을 관리하고 배포할 수 있는 기능을 제공한다.
오늘은 Spring Cloud의 기본 개념과 주요 기능들을 학습했다. 이에 앞서, MSA(Microservices Architecture)에 대해 간략히 살펴보았는데, 예시를 통해 의미를 간단하게 이해할 수 있었다. 또한 Spring Cloud와 관련된 다양한 도구들이 필요하다는 사실을 알게 되었다.
MSA와 그를 지원하는 Spring Cloud의 다양한 기능들을 살펴보면서, 애플리케이션을 효과적으로 분산시키고 관리하는 방법에 대한 통찰력을 얻는 시간이었다.
특히, API 게이트웨이, 서비스 디스커버리, 분산 설정, 분산 추적, 로드 밸런싱, 회로 차단기 등의 기능들이 어떻게 상호작용하며, 서로를 보완하는지를 알게 되었다. 이러한 도구들은 복잡한 분산 시스템을 효율적으로 운영하고 확장할 수 있게끔 도와주는데, 이는 향후 개발 프로젝트에 큰 도움이 될 것으로 기대된다.
앞으로는 Spring Gateway를 심도있게 다루어 보고, 이를 활용하여 실제로 마이크로서비스 아키텍처를 어떻게 구현하는지를 경험하고자 한다.