-
Spring Cloud Config 튜토리얼Spring Framework/Spring Cloud Config 2024. 1. 31. 00:01728x90
개요
"Spring Cloud Config란?" 글에 이어서 Spring Cloud Config 튜토리얼을 통하여 직접 Spring Cloud Config를 제공하는 Server와 Client를 구축하고 설정을 받아보고자 합니다.
모든 코드는 github에서 확인할 수 있습니다.
Spring Cloud Config Server 구성하기
dependencies { implementation(enforcedPlatform("org.springframework.cloud:spring-cloud-dependencies:2022.0.4")) implementation("org.springframework.cloud:spring-cloud-config-server") }
spring-cloud-server 의존성을 추가합니다.
@SpringBootApplication @EnableConfigServer class SpringCloudConfigServerApplication fun main(args: Array<String>) { runApplication<SpringCloudConfigServerApplication>(*args) }
@EnableConfigServer 어노테이션을 선언합니다.
server: port: 8088 spring: cloud: config: server: git: uri: https://github.com/Junuu/spring-study
application.yml에 github 주소를 입력합니다.
만약 Git Repository가 private라면 추가적으로 ssh 발급에 대한 설정과 구성이 추가됩니다.
Git Repository에 설정파일들 구성하기
application.yml에 명시한 Git Repository의 최상단에 파일 이름을 {애플리케이션 이름}-{환경}.yml 형태로 구성합니다.
testapplication-local, testapplication-dev 라는 파일명을 통하여 각각 설정정보를 넣어주어 보았습니다.
Git Repository의 최상단에 파일들이 올라간 모습을 확인할 수 있습니다.
Spring Cloud Config Server 호출해 보기
Spring Application을 실행하고 postman을 활용하여 GET localhost:{port}/{application-name}/{profile} 를 활용하여 요청을 보내보았습니다.
정상적으로 설정한 config를 확인할 수 있습니다.
Spring Cloud Server는 설정을 제공하기 위해서 다양한 endpoint들을 제공합니다.
GET /{application}/{profile}[/{label}] GET /{application}-{profile}.yml GET /{label}/{application}-{profile}.yml GET /{application}-{profile}.properties GET /{label}/{application}-{profile}.properties
application은 application의 이름, profile은 환경을 뜻합니다.
여기서의 label은 git 저장소의 branch를 뜻하며 기본적으로 master입니다.
Spring Cloud Config Client 구성하기
dependencies { implementation(enforcedPlatform("org.springframework.cloud:spring-cloud-dependencies:2022.0.4")) implementation("org.springframework.cloud:spring-cloud-config-client") implementation("org.springframework.boot:spring-boot-starter-actuator") }
spring-cloud-client 의존성을 추가합니다.
actuator 의존성을 추가합니다
actuator는 추후에 config 설정을 갱신할 때 사용됩니다.
spring: application: name: testapplication # 어플리케이션 이름 = Github 레포지토리에서 관리하는 파일 애플리케이션 이름 profiles: active: local # 애플리케이션 환경 = local, dev config: import: optional:configserver:http://localhost:8088 # import:optional:configserver사용 -> Spring cloud config server 주소 server: port: 9001 # Spring Cloud Config Client 주소 # 클라이언트 코드에서 Actuator 설정 management: endpoints: web: exposure: include: "*"
application.yml에 config 설정을 조회할 주소, 활성화할 profile, application 이름을 적어줍니다.
@RefreshScope // 설정 변경된 내용을 actuator를 통해 변경값을 갱신 @Component class LocalConfig { @Value("\${test.secret}") val secret: String? = null @Value("\${test.name}") val name: String? = null }
config 변수를 담고 있는 Spring Bean을 하나 만든 후 @RefreshScope 어노테이션으로 설정이 변경될 경우 actuator를 통해 변경된 설정값을 갱신할 수 있습니다.
@RestController class ConfigController( private val localConfig: LocalConfig ) { @GetMapping("/config") fun loadLocalConfig(): ResponseEntity<Unit> { logger.info { localConfig.secret } logger.info { localConfig.name } return ResponseEntity.ok().build() } }
localConfig를 확인해 볼 수 있도록 endpoint를 하나 구성하였습니다.
해당 경로로 호출해 보면 Git Repository에서 설정했던 값을 확인해 볼 수 있습니다.
Application 기동 중 중간에 Git Repository의 설정 바꾸기
Git Repository에 password-local-change, junwoo-local-change로 설정을 변경하여 push 하였습니다.
Application은 초기 설정을 받아와서 기동 중인 상태입니다.
이제 자동으로 설정이 반영될까요?
설정 값을 확인하기 위해 호출했던 /config endpoint로 호출해 보면 값이 바뀌지 않았습니다.
POST http://localhost:9001/actuator/refresh endpoint를 호출하고 다시 /config endpoint를 호출하면 새로운 git 정보를 가져오고 그 정보를 기반으로 설정이 바뀐 것을 확인할 수 있습니다.
참고자료
https://madplay.github.io/post/introduction-to-spring-cloud-config
'Spring Framework > Spring Cloud Config' 카테고리의 다른 글
Spring Cloud Config 오픈 소스 기여(컨트리뷰션)하기 (1) 2024.02.03 Spring Cloud Config Client override (0) 2024.02.02 Spring Cloud Config Server에 문제가 생기면 어떻게 될까? (1) 2024.02.01 Spring Cloud Config란? (1) 2024.01.11