Spring Cloud Config 이해하기

Spring Cloud Config 동작 방식

공통 설정을 각 application.properties 에서 관리

MSA 구조의 프로젝트를 진행하다 보면 많은 수의 애플리케이션(마이크로 서비스)이 만들어집니다. 만약 10개의 애플리케이션이 동일하게 사용하는 공통 외부 설정이 있다면 유지 보수가 힘들어집니다. 코드가 중복될 때와 비슷한 문제가 발생합니다. 공통 외부 설정 값을 변경해야 한다면 모든 애플리케이션의 설정 값을 일일이 변경해야 하고, 실수하지 않도록 조심해야 합니다. Spring Cloud Config는 config를 Config Server에 저장하여 관리하고, 클라이언트가 Config Server에게 요청하여 중앙에 저장된 config를 받아갈 수 있게 하여 이러한 문제를 해결했습니다.

공통 설정을 Config Server 에서 관리

Spring Cloud Config를 사용하여 Config Server를 만들 때 개발자는 상황에 따라 github, file, jdbc 등, 여러 방식의 저장소 중 하나를 선택할 수 있습니다. 그리고 Config Server와 통신하는 클라이언트는 구동 될 때 Config Server에게 config 정보를 요청하여 받을 수 있게 됩니다. Config Server에 다음과 같이 두 개의 property가 저장되어 있는 경우 (profile=”develop”, propertyKey=”greennewron.common.security.enabled”, propertyValue=”true”), (profile=”staging”, propertyKey=”greennewron.common.security.enabled”, propertyValue=”true”), 클라이언트가 profile=”develop”으로 요청하면 greennewron.common.security.enabled=true Property를 응답해주게 됩니다.

고려해야 할 점

Config Server를 통해서 설정을 관리하는 애플리케이션(클라이언트)을 실행하기 전에는 반드시 Config Server가 정상적으로 실행되어 있어야 애플리케이션 실행에 필요한 config를 요청하여 응답 받을 수 있으며, 상호 통신이 원활해야 합니다.

서비스 운영 중에 외부 설정 변경이 필요할 수 있습니다. 변경된 설정을 적용하는 가장 간단한 방법은 config를 변경한 후 애플리케이션을 재시작하여 변경된 설정을 적용하는 것입니다. 혹은 Spring Boot Actuator를 사용하면 refresh 엔드포인트를 호출하여 애플리케이션 재시작 없이 내부의 Spring Context만 초기화하여 변경된 설정을 적용할 수 있습니다.

애플리케이션의 수가 많을 경우, Spring Cloud Bus를 사용하면 모든 애플리케이션에게 refresh 엔드포인트를 실행하기 위한 비동기 이벤트를 보내서 변경된 설정을 한 번에 반영할 수 있는 busrefresh 엔드포인트가 제공됩니다.

참고 자료

스스로 경험하며 얻은 깨달음을 공유하기 좋아하며, 세상이 필요로 하는 코드를 작성하기 위해 노력하는 개발자입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다