마이크로 서비스 배포 Spring Boot로 개발된 마이크로서비스는 독립적인 서비스로, 실행 환경으로는 가상 머신(VM), 컨테이너 기술, 그리고 다양한 클라우드 플랫폼을 고려할 수 있다. 몇 개 정도의 마이크로서비스가 있다면 웹 애플리케이션 서버(WAS)를 VM에 교차 배치하여 효율성과 가용성을 확보하는 방법도 가능하다. 그러나 수백 개 이상의 마이크로서비스를 운영할 때는 서비스 관리 및 고가용성 측면에서 Docker 같은 컨테이너 기술을 사용하는 것이 이점이 있다. 1. 컨테이너 컨테이너는 클라우드 환경에서 애플리케이션 및 애플리케이션 운영 환경을 분리한 공간을 의미한다. 이는 하드웨어 가상화 기술 중 하나이지만, 가상 머신과는 다르게 동작한다. 가상 머신은 게스트 운영 체제를 필요로하며, 하드웨어에..
Config 서버의 설정 값이 변경될 경우, 마이크로서비스들이 변경된 설정 값을 갱신하기 위해서는 마이크로서비스를 재시작하거나, 위 Config Client 예제의 /actuator/refresh를 호출해주어야 한다. 하지만 마이크로서비스의 개수가 많을 경우 각각의 서비스들을 모두 수동으로 재시작하거나 refresh해주기는 쉽지 않다. Config 서버에서는 마이크로서비스들에게 refresh를 수행하라는 메시지를 전송해야 한다. 이 메시지를 전송해주는 컴포넌트를 메시지브로커라고 부른다. 대표적으로 많이 사용되는 메시지브로커로는 RabbitMQ, Kafka 등이 있다. 나는 Kafka를 사용해본 적이 있으므로, 본 가이드에서는 RabbitMQ를 기준으로 작성할것이다. RabbitMQ 설치 RabbitMQ..
Config 서버 Config 서버는 분산 시스템에서 다수의 애플리케이션 환경 설정 정보를 중앙에서 관리하도록 하는 기능을 제공하는 환경 설정 서버이다. 이것은 서비스 및 비즈니스 로직과 관련된 정보를 애플리케이션으로부터 분리하고, 이를 외부에서 통합하여 관리하게 한다. 환경 설정 정보라 함은 데이터베이스 접속 정보, 미들웨어(연계서버) 접속 정보, 애플리케이션을 이루는 다양한 메타데이터를 포함하며, 이런 속성 값들은 일반적으로 application.properties 또는 application.yml 파일에 저장하여 사용하게 된다. 이렇게 중요한 정보들을 각 마이크로서비스가 각각 관리하게 될 경우, 환경 설정 값이 변경되면 모든 마이크로서비스를 다시 빌드하고 배포해야 하는 문제가 생기고, 특히 마이크로..
API Gateway - Zuul (중요!!) API 게이트웨이는 마이크로서비스 아키텍처(MSA)의 핵심 구성 요소 중 하나로, 클라이언트 요청을 받아 처리하는 단일 진입점을 제공하는 서비스입니다. 이는 프록시 서버와 유사한 역할을 하며, 인증, 권한 확인, 모니터링, 로깅 등의 부가 기능도 수행합니다. 전통적인 모노리식 아키텍처에서는 모든 비즈니스 로직이 하나의 서버에 모여있지만, MSA에서는 각 도메인에 대응하는 여러 서비스(서버)가 존재합니다. 또한, 각 서비스는 여러 서버로 구성될 수 있습니다. 이렇게 되면 사용자(클라이언트) 입장에서는 많은 수의 엔드포인트를 관리해야 하는 문제가 발생하며, 엔드포인트가 변경될 때마다 유지 관리가 어려워집니다. 이 문제를 해결하기 위해 모든 요청을 중앙에서 관리하..
Service Registry - Eureka Eureka는 MSA의 장점 중 하나인 동적인 서비스 증설 및 축소를 위하여 필수적으로 필요한 서비스의 자가 등록, 탐색 및 부하 분산에 사용될 수 있는 라이브러리이다. 마이크로 서비스들의 정보를 레지스트리 서버에 등록할 수 있도록 기능을 제공해 준다. Eureka는 Eureka 서버와 클라이언트로 구성된다. Eureka 서버는 Eureka 클라이언트에 해당하는 마이크로 서비스들의 상태 정보가 등록되어 있는 레지스트리 서버이다. Eureka 클래이언트는 서비스가 시작될 때 Eureka 서버에 자신의 정보를 등록하고 이후 주기적으로 자신의 가용 상태(health check)를 알리며, 일정 횟수 이상의 ping이 확인되지 않으면 Eureka 서버에서 해당 서비..
Spring Cloud의 컴포넌트 활용 클라우드 네이티브한 애플리케이션을 제작하는 과정은 MSA 형태의 애플리케이션 제작뿐만 아니라 실제 서비스가 유연하게 동작하기 위하여 여러 클라우드 컴포넌트와 연동되어야 한다. 아래는 스프링 클라우드에서 제공하는 대표 클라우드 컴포넌트로써 각가의 역할과 실제 서비스에 적용해 보자. 적용하는 Cloud 컴포넌트 Circuit Breaker - resilience4j Client LoadBalancer -LoadBalanacer Service Registry - Eureka API Gateway - Zuul Config Server Circuit Breaker - Resilience4j Hystrix는 한때 서킷 브레이커 구현에 대한 대표적인 솔루션 중 하나였지만, Ne..