Spring Cloud Config
Spring Cloud Config란 MSA와 같은 여러 개의 서비스로 분산된 시스템에서 서버, 클라이언트 구성에 필요한 설정 정보를 외부 시스템에서 관리하는 것 입니다.
특징
하나의 중앙화된 저장소에서 구성 요소 관리
각 서비스를 다시 빌드하지 않고 적용 가능
개발, 테스트, 배포 등 용도에 맞는 설정 정보를 관리
우선 순위
Spring Cloud Config가 관리하는 설정 파일들은 우선 순위가 있습니다.
application.yml - application-name.yml - application-name-<profile>.yml
application.yml : 기본이 되는 파일
application-name.yml : 특정 서비스의 기본이 되는 파일
application-name<profile>.yml : 특정 서비스에서 특정한 상황에서 사용하는 파일
profile은 용도를 나태내주므로 DEV(개발), UAT(테스트). PROD(배포) 등등의 약어를 사용하기도 합니다.
예시를 들면 application-product-dev.yml 이라는 설정 파일은 product 서비스의 개발용 설정 파일이란 뜻 입니다.
즉 Spring Cloud Config를 사용하면 개발 편의성이 증가합니다.
저는 Github를 외부 저장소로 하여 각각의 application.yml 파일을 관리해보려 합니다.
Spring Cloud Config 구현
Spring Cloud Config는 Config 서버를 만들어야 합니다. Config 서버는 외부 저장소와 연결되어 각각의 마이크로 서비스에서 요청한 설정 파일들을 제공합니다. 또한 요청을 통해 서버를 다시 빌드하지 않아도 변경된 설정 파일을 반영할 수도 있습니다.
Spring Cloud Config 생성
새로운 Spring Boot 프로젝트를 생성합니다.
의존성을 추가합니다.
dependencies {
implementation 'org.springframework.cloud:spring-cloud-config-server'
}
메인 클래스 어노테이션 추가
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
}
}
설정 정보 추가
application.yml 파일에 cloud.config 변수에 연결할 Github Repository 주소를 입력합니다.
만약 Github Repository가 private이라면 추가로 username과 password를 입력합니다.
server:
port: 8888
spring:
application:
name: config-service
cloud:
config:
server:
git:
uri: 깃허브 주소
# 예시) https://github.com/cladren123/dotd_config
# private으로 Git Repository를 만들었다면 username, password 입력
# username: [your username]
# password: [your password]
실행 후 결과 확인
설정을 마쳤다면 이제 Spring Cloud Config 서버가 외부 저장소(Github)에 연결되어 설정 파일들을 가져올 수 있습니다.
예시) http://localhost:8888/서비스 이름/profile
실제) http://localhost:8888/product/default