Spring Cloud Config란?
개요
Spring Cloud Config라는 용어를 접하게 되고 어떤 것을 의미하는지 개념을 잡기 위해 정리해보고자 합니다.
Spring Cloud Config란?
이름에서 추론할 수 있듯이 Config(설정)에 관한 역할을 수행합니다.
Spring Cloud Config는 여러 서비스들의 설정 정보를 중앙으로 관리하기 용이하도록 도와줍니다.
기본적으로 설정 정보 저장을 위해 git을 사용하도록 되어있습니다.
예를 들면 git 이외에도 AWS S3, Redis, Valut 등 다양한 설정 저장소를 활용할 수 있습니다.
Spring Cloud Config 핵심 개념
- 설정 저장소 - git과 같이 설정 정보를 저장하기 위한 저장소
- Config Server - 설정을 제공하는 서버
- Config Client - 설정을 사용하는 서버
- Profiles - dev, test, prod 등 다양한 환경들에 대한 설정들
- Refresh - 재배포 없이 설정을 갱신하기 위한 기능
Spring Cloud Config 동작원리
- User가 Config(설정)을 변경하여 Git Repository에 반영합니다.
- Application A에서 /actuator/refresh 를 호출합니다.
- Config Client에서 Config Server에 Config 값을 요청합니다.
- Config Server는 Git Repository에 설정 값을 가져옵니다.
- Git Repository는 최신 설정 값을 반환합니다.
- Config Server는 최신 설정 값을 Config Client에 전달합니다.
- 이제 Config가 최신값으로 반영됩니다.
하지만 Application B에서 /actuator/refresh의 호출을 까먹으면 어떻게 될까요?
Config가 갱신되지 않을 수 있고 이런 문제점은 Spring Cloud Bus, Watcher를 사용해서 해결할 수 있습니다.
Batch와 같은 서버를 하나 두고 관리하는 서버군들에 대해 일정주기마다 /actuator/refresh를 호출해주는 방법도 떠오릅니다.
Spring Cloud Config 장점
- 여러 서버의 설정 파일을 중앙 서버에서 관리할 수 있다.
- 서버를 재배포하지 않고 설정 파일의 변경사항을 반영할 수 있다.
Spring Cloud Config 단점
- Git 서버 또는 Config Server에 대한 장애가 여러 서비스들로 전파될 수 있다.
- 아키텍처가 더 복잡해진다.
- 설정 우선 순위를 잘 고려해야 한다.
예를 들어 설정 파일을 읽는 우선순위에 의해 의도하지 않은 정보가 덮어씌워져 장애가 발생할 수 있습니다.
Spring Cloud Config 잘 활용하기 위해서는 파악해 볼 내용들
- Spring Cloud Config 어떻게 적용할 수 있을까?
- 서비스가 실행중일 때 Config Server에 문제가 생기면 어떻게 될까?
- 서비스를 실행하려고 할 때 Config Server에 문제가 있다면 어떻게 될까?
- client에서는 설정의 변경 사항을 어떻게 확인할까?
- 설정 우선 순위는 어떻게 될까?
이런 물음들에 대해서 또다른 글들로 정리하여 보겠습니다.
참고자료
https://docs.spring.io/spring-cloud-config/docs/current/reference/html/
https://mangkyu.tistory.com/253
https://wildeveloperetrain.tistory.com/214
https://mangkyu.tistory.com/254
https://jaehun2841.github.io/2022/03/10/2022-03-11-spring-cloud-config/