Spring Cloud를 통해 MSA 프로젝트를 진행해 보면서 전체적인 프로세스 및 컴포넌트들에 대해 정리가 필요할 것 같아 해당 글을 작성하게 되었습니다.
Spring Cloud
Spring Cloud는 분산 시스템에 필요한 여러 서비스들(configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state) 등을 제공함으로써 개발자들이 빠르게 애플리케이션을 개발할 수 있도록 합니다.
Service Discovery
Service Discovery는 분산 시스템에서 서비스 인스턴스를 자동으로 탐지하고 확인하는 기술을 의미합니다. 마치 주소록에 비유할 수 있는데, Cloud 환경에서는 Auto Scaling, 업그레이드, 확장 등의 이유로 인스턴스가 소멸, 생성되거나 컨테이너 기반의 배포로 인해 서비스의 IP가 동적으로 변경되는 일이 많습니다. 이러한 상황에서 아래에서 언급할 API Gateway 나 다른 서비스들이 변경된 인스턴스들의 위치를 알아야 하는데 이때 Service Discovery가 해당 인스턴스들의 위치를 저장하는 역할을 합니다.
API Gateway
클라이언트-마이크로 서비스 간 직접 통신하는 경우 마이크로 서비스가 추가되거나 endpoint가 수정되었을 경우 클라이언트 측의 애플리케이션도 수정이 되어야 합니다. 이러한 이유로 단일 진입점을 가지고 있는 API Gateway 서비스가 필요하게 되었습니다.
API Gateway는 클라이언트와 백엔드 서비스 간의 중개 역할을 수행하는 서버입니다. API 게이트웨이는 다양한 클라이언트 요청을 받아 백엔드 서비스로 라우팅 하고, 인증 및 권한 부여, 요청 및 응답 변환, 캐싱, 로깅 등의 기능을 수행합니다. 또한, API Gateway는 여러 서비스에 대한 집중적인 엔드포인트를 제공하여 클라이언트에게 단일 진입점을 제공하고, 보안 및 모니터링을 통합적으로 관리할 수 있도록 지원합니다.
Spring Cloud Config
Spring Cloud Config는 분산 시스템에서 서버 및 클라이언트 구성에 필요한 설정 정보(application.yml)를 애플리케이션 내부가 아닌 외부 시스템에서 관리하기 위해 사용됩니다. Spring Cloud Config를 사용함으로써 하나의 중앙화된 저장소에서 구성요소를 관리할 수 있고, 설정 사항이 변경되었을 경우 각 서비스를 다시 빌드하지 않고 바로 적용할 수 있습니다. 또한 배포 파이프라인을 통해 개발(DEV), 테스트(UAT), 배포(PROD) 등 환경에 맞는 구성 정보를 사용할 수 있게 해 줍니다.
Spring Cloud Bus
변경된 설정 정보(application.yml)를 적용하기 위해 서비스를 재기동하거나 Springboot의 Actuator refresh 기능을 사용할 수 있습니다. 서비스를 재기동하는 것은 사실상 의미 없는 작업이고, Actuator refresh 같은 경우 서비스들의 개수가 많아질 경우 각각의 서비스를 수동으로 적용시켜야 하기 때문에 번거로운 작업일 수 있습니다. 이러한 점을 개선하기 위한 방법이 Spring Cloud Bus입니다. Spring Cloud Bus는 분산시스템의 각각의 서비스들을 미들웨어인 경량 메시지 브로커(RabitMQ, Kafka 등)와 연결합니다. 이후 상태 및 구성에 대한 변경 사항을 메시지 브로커에 전달하게 되면([POST] /busrefresh) 해당 사항을 연결된 다른 서비스들에게 전달(Broadcast) 하는 방식입니다. 이때 AMQP(Advanced Message Queing Protocol) 프로토콜을 사용하게 됩니다.
마무리
Spring Cloud를 통해 MSA 개발을 하면서 사용했던 주요 컴포넌트들에 대해 정리해 보았습니다. 이번 포스팅에서는 Service Discovery, API Gateway, Spring Cloud Config, Spring Cloud Bus에 대해 알아봤고 다음 포스팅에서는 MicroService 간 통신 및 데이터 동기화에 필요한 컴포넌트들에 대해 알아보겠습니다.
참고
'Spring > Cloud' 카테고리의 다른 글
Spring Cloud 로 MSA 개발에 필요한 다양한 컴포넌트들에 대해 알아보자! - 2 (0) | 2023.07.02 |
---|