자습서: Java Spring 앱에서 동적 구성 사용

앱 구성에는 Spring을 위한 두 개의 라이브러리가 있습니다.

  • spring-cloud-azure-appconfiguration-config에는 Spring Boot가 필요하며 spring-cloud-context에 종속되어 있습니다.
  • spring-cloud-azure-appconfiguration-config-web은 Spring Boot와 함께 Spring Web이 필요하며, 구성 새로 고침의 자동 확인을 위한 지원도 추가합니다.

두 라이브러리는 새로 고침된 구성 값을 확인하는 수동 트리거를 지원합니다.

새로 고침을 사용하면 애플리케이션을 다시 시작하지 않고도 구성 값을 업데이트할 수 있지만 @RefreshScope의 모든 빈이 다시 생성될 수 있습니다. 새로 고침은 메타데이터를 포함하여 구성된 트리거의 변경 내용을 확인합니다. 기본적으로 변경 내용 확인 간 최소 시간, 즉, 새로 고침 간격은 30초로 설정됩니다.

spring-cloud-azure-appconfiguration-config-web의 자동 새로 고침은 작업(특히 스프링 웹의 ServletRequestHandledEvent)에 따라 트리거됩니다. ServletRequestHandledEvent가 트리거되지 않은 경우 spring-cloud-azure-appconfiguration-config-web의 자동 새로 고침은 캐시 만료 시간이 만료된 경우에도 새로 고침을 트리거하지 않습니다.

수동 새로 고침 사용

수동 새로 고침을 사용하려면 App Configuration에 대한 Spring Boot 빠른 시작을 따라 만든 앱과 같은 App Configuration을 사용하는 Spring Boot 앱부터 시작합니다.

앱 구성은 캐시가 만료되었는지 여부를 확인하는 데 사용할 수 있는 AppConfigurationRefresh가 노출되어 새로 고침이 트리거됩니다.

  1. AppConfigurationRefresh를 사용하도록 HelloController를 업데이트합니다.

    import com.azure.spring.cloud.config.AppConfigurationRefresh;
    
    @RestController
    public class HelloController {
        private final MessageProperties properties;
    
        @Autowired(required = false)
        private AppConfigurationRefresh refresh;
    
        public HelloController(MessageProperties properties) {
            this.properties = properties;
        }
    
        @GetMapping
        public String getMessage() throws InterruptedException, ExecutionException {
            if (refresh != null) {
                refresh.refreshConfigurations();
            }
            return "Message: " + properties.getMessage();
        }
    }
    

    AppConfigurationRefreshrefreshConfigurations()는 새로 고침이 트리거된 경우 true이고, 그렇지 않은 경우 false인 Mono를 반환합니다. False는 캐시 만료 시간이 만료되지 않았거나, 변경 내용이 없거나, 다른 스레드가 현재 새로 고침을 확인하고 있음을 의미합니다.

  2. 새로 고침을 사용하도록 bootstrap.properties 업데이트

    spring.cloud.azure.appconfiguration.stores[0].monitoring.enabled=true
    spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval= 30s
    spring.cloud.azure.appconfiguration.stores[0].monitoring.triggers[0].key=sentinel
    
  3. Azure Portal을 열고 애플리케이션과 연결된 앱 구성 리소스로 이동합니다. 작업 아래에서 구성 탐색기를 선택하고 + 키-값 + 만들기>키-값을 선택한 후 다음 매개 변수를 추가하여 새 키-값 쌍을 만듭니다.

    sentinel 1

    지금은 레이블콘텐츠 형식을 비워 두세요.

  4. 적용을 선택합니다.

  5. Maven을 사용하여 Spring Boot 애플리케이션을 빌드하고 실행합니다.

    mvn clean package
    mvn spring-boot:run
    
  6. 새 브라우저 창을 열고 URL(http://localhost:8080)로 이동합니다. 키와 연결된 메시지가 표시됩니다.

    curl을 사용하여 애플리케이션을 테스트할 수도 있습니다. 예를 들면 다음과 같습니다.

    curl -X GET http://localhost:8080/
    
  7. 동적 구성을 테스트하려면 애플리케이션과 연결된 Azure App Configuration 포털을 엽니다. 구성 탐색기를 선택하고 표시되는 키의 값을 업데이트합니다. 예를 들면 다음과 같습니다.

    /application/config.message Hello - 업데이트됨
  8. 이전에 만든 sentinel 키를 새 값으로 업데이트합니다. 이 변경으로 인해 새로 고침 간격이 지나면 애플리케이션에서 모든 구성 키를 새로 고치도록 트리거합니다.

    sentinel 2
  9. 표시되는 새 메시지를 확인하려면 브라우저 페이지를 두 번 새로 고칩니다. 첫 번째는 새로 고침을 트리거하고 두 번째는 변경 내용을 로드합니다.

참고 항목

라이브러리는 새로 고침 간격이 경과한 후에만 변경 내용을 확인합니다. 기간이 경과하지 않은 경우 변경 내용이 표시되지 않으면 해당 기간이 경과할 때까지 기다렸다가 새로 고침 확인을 트리거해야 합니다.

자동화된 새로 고침 사용

자동화된 새로 고침을 사용하려면 App Configuration에 대한 Spring Boot 빠른 시작을 따라 만든 앱과 같은 App Configuration을 사용하는 Spring Boot 앱부터 시작합니다.

그런 다음, 텍스트 편집기에서 pom.xml 파일을 열고 다음 코드를 사용하여 spring-cloud-azure-appconfiguration-config-web에 대해 <dependency>를 추가합니다.

Spring Boot

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-appconfiguration-config-web</artifactId>
    <version>5.8.0</version>
</dependency>
  1. 새로 고침을 사용하도록 bootstrap.properties 업데이트

    spring.cloud.azure.appconfiguration.stores[0].monitoring.enabled=true
    spring.cloud.azure.appconfiguration.stores[0].monitoring.refresh-interval= 30s
    spring.cloud.azure.appconfiguration.stores[0].monitoring.triggers[0].key=sentinel
    
  2. Azure Portal을 열고 애플리케이션과 연결된 앱 구성 리소스로 이동합니다. 작업 아래에서 구성 탐색기를 선택하고 + 키-값 + 만들기>키-값을 선택한 후 다음 매개 변수를 추가하여 새 키-값 쌍을 만듭니다.

    sentinel 1

    지금은 레이블콘텐츠 형식을 비워 두세요.

  3. 적용을 선택합니다.

  4. Maven을 사용하여 Spring Boot 애플리케이션을 빌드하고 실행합니다.

    mvn clean package
    mvn spring-boot:run
    
  5. 새 브라우저 창을 열고 URL(http://localhost:8080)로 이동합니다. 키와 연결된 메시지가 표시됩니다.

    curl을 사용하여 애플리케이션을 테스트할 수도 있습니다. 예를 들면 다음과 같습니다.

    curl -X GET http://localhost:8080/
    
  6. 동적 구성을 테스트하려면 애플리케이션과 연결된 Azure App Configuration 포털을 엽니다. 구성 탐색기를 선택하고 표시되는 키의 값을 업데이트합니다. 예를 들면 다음과 같습니다.

    /application/config.message Hello - 업데이트됨
  7. 이전에 만든 sentinel 키를 새 값으로 업데이트합니다. 이 변경으로 인해 새로 고침 간격이 지나면 애플리케이션에서 모든 구성 키를 새로 고치도록 트리거합니다.

    sentinel 2
  8. 표시되는 새 메시지를 확인하려면 브라우저 페이지를 두 번 새로 고칩니다. 첫 번째는 새로 고침을 트리거하고, 첫 번째 요청이 원래 범위를 사용하여 반환하므로 두 번째는 변경 내용을 로드합니다.

참고 항목

라이브러리는 새로 고침 간격이 경과한 후에만 변경 내용을 확인합니다. 새로 고침 간격이 경과하지 않은 경우 변경 내용을 확인하지 않습니다. 간격이 경과할 때까지 기다렸다가 새로 고침 확인을 트리거해야 합니다.

다음 단계

이 자습서에서는 Spring Boot 앱을 사용하도록 설정하여 App Configuration에서 구성 설정을 동적으로 새로 고칩니다. 자세한 내용은 참조 설명서를 확인하세요. Spring Cloud Azure App Configuration 라이브러리의 작동 방식에 대한 모든 정보가 포함되어 있습니다. Azure 관리 ID를 사용하여 App Configuration에 대한 액세스를 간소화하는 방법을 알아보려면 다음 자습서를 계속 진행하세요.