ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Cloud Config 튜토리얼
    Spring Framework/Spring Cloud Config 2024. 1. 31. 00:01

    개요

    "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 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로 호출해 보면 값이 바뀌지 않았습니다.

     

    새로운 git 정보를 가져온다.

    POST http://localhost:9001/actuator/refresh endpoint를 호출하고 다시 /config endpoint를 호출하면 새로운 git 정보를 가져오고 그 정보를 기반으로 설정이 바뀐 것을 확인할 수 있습니다.

     

     

     

    참고자료

    https://madplay.github.io/post/introduction-to-spring-cloud-config

    https://velog.io/@zayson/%EB%82%98-%ED%98%BC%EC%9E%90-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-Spring-Cloud-Config-Server-Client-%EC%84%A4%EC%A0%95

     

    댓글

Designed by Tistory.