빠른 시작: Azure App Configuration을 사용하여 Java Quarkus 앱 만들기

이 빠른 시작에서는 Azure App Configuration을 Java Quarkus 앱에 통합하여 코드와 별도로 애플리케이션 설정의 스토리지 및 관리를 중앙 집중화합니다.

필수 조건

키-값 쌍 추가

App Configuration 저장소에 다음 키-값 쌍을 추가합니다. Azure CLI를 사용하여 저장소에 키-값 쌍을 추가하는 방법에 대한 자세한 내용은 키-값 만들기를 참조하세요.

Key 가치
/application/config.message 안녕하세요

Quarkus 앱 만들기

이 섹션에서는 Azure App Configuration 확장 및 REST 확장을 사용하여 Quarkus 앱을 만듭니다. REST 확장은 App Configuration 저장소에서 구성 값을 반환하는 REST 서비스를 만드는 데 사용됩니다. 자세한 내용은 Quarkus Azure App Configuration을 참조하세요.

다음 명령을 사용하여 Quarkus 앱을 만듭니다.

mvn io.quarkus.platform:quarkus-maven-plugin:create \
    -DprojectGroupId=com.example \
    -DprojectArtifactId=quarkus-app-configuration \
    -Dextensions='io.quarkiverse.azureservices:quarkus-azure-app-configuration,rest' \
    -DjavaVersion="17"

앱은 quarkus-app-configuration이라는 새 디렉터리에 만들어집니다. 앱의 구조는 다음과 같습니다.

quarkus-app-configuration
├── src
│   ├── main/java/com/example
│   │   ├── GreetingResource.java
│   └── test/java/com/example
│       └── GreetingResourceTest.java
├── pom.xml

pom.xml 파일에는 Azure App Configuration 확장 및 REST 확장을 포함하여 앱에 대한 종속성이 포함됩니다. 다음 XML은 일반적인 예입니다.

<dependency>
    <groupId>io.quarkiverse.azureservices</groupId>
    <artifactId>quarkus-azure-app-configuration</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-rest</artifactId>
</dependency>

GreetingResource.java 파일에 REST 서비스가 포함되어 있습니다. 나중에 App Configuration 저장소에서 구성 값을 반환하도록 이 파일을 수정합니다.

GreetingResourceTest.java 파일에는 REST 서비스에 대한 단위 테스트가 포함되어 있습니다. REST 서비스에서 반환된 값이 나중에 App Configuration 저장소의 값과 같도록 어설션하도록 이 파일을 수정합니다.

App Configuration 저장소에 연결

이제 Azure App Configuration 확장을 사용하는 App Configuration 저장소 및 Quarkus 앱이 있으므로 앱을 저장소에 연결할 수 있습니다.

애플리케이션 코딩

다음 단계를 사용하여 애플리케이션을 구성합니다.

  1. src/main/java/com/example 디렉터리에서 GreetingResource.java 파일을 열고 내용을 다음 코드로 바꿉니다.

    package com.example;
    
    import jakarta.ws.rs.GET;
    import jakarta.ws.rs.Path;
    import jakarta.ws.rs.Produces;
    import jakarta.ws.rs.core.MediaType;
    
    import org.eclipse.microprofile.config.inject.ConfigProperty;
    
    @Path("/hello")
    public class GreetingResource {
    
        @ConfigProperty(name = "/application/config.message")
        String value;
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String hello() {
            return value;
        }
    }
    

    수정된 코드는 MicroProfile 구성 @ConfigProperty 주석을 사용하여 App Configuration 저장소 /application/config.message 의 키 value 값을 필드에 삽입하고 REST 서비스의 값을 반환합니다.

  2. src/test/java/com/example 디렉터리의 GreetingResourceTest.java 파일에 있는 자동 생성된 단위 테스트를 엽니다. 파일의 내용을 다음 코드로 바꿉니다.

    package com.example;
    
    import io.quarkus.test.junit.QuarkusTest;
    import org.junit.jupiter.api.Test;
    
    import javax.inject.Inject;
    
    import static io.restassured.RestAssured.given;
    import static org.hamcrest.CoreMatchers.is;
    
    @QuarkusTest
    public class GreetingResourceTest {
        @Test
        public void testHelloEndpoint() {
            given()
                .when().get("/hello")
                .then()
                .statusCode(200)
                .body(is("Hello"));
        }
    }
    

    수정된 코드는 REST 서비스에서 반환된 값이 App Configuration 저장소의 값과 동일하다는 것을 어설션합니다. 이 값은 이전에 추가한 키에 대한 값 Hello 입니다/application/config.message.

애플리케이션에 대한 이러한 코드 변경은 모두 필요합니다. 애플리케이션을 실행하기 전에 App Configuration 저장소에 대한 인증 및 연결을 구성해야 합니다.

App Configuration 저장소에 대한 인증 구성

Quarkus Azure App Configuration 확장은 액세스 키를 사용한 인증 외에도 Azure ID 클라이언트 라이브러리를 사용하여 DefaultAzureCredential Microsoft Entra ID로 인증을 지원합니다.

이 빠른 시작에서는 인증에 Microsoft Entra ID를 사용합니다. 자세한 내용은 DefaultAzureCredential 참조 하세요.

다음 단계를 사용하여 App Configuration 저장소에 대한 인증을 구성합니다.

  1. 다음 명령을 사용하여 환경 변수를 설정하고, <...> 자리 표시자를 이전에 만든 값으로 대체합니다.

    export RESOURCE_GROUP_NAME="<resource-group-name>"
    export APP_CONFIG_NAME="<app-configuration-store-name>"
    
  2. 다음 명령을 사용하여 로그인한 App Configuration Data Reader 사용자에게 역할을 할당합니다.

    # Retrieve the app configuration resource ID
    export APP_CONFIGURATION_RESOURCE_ID=$(az appconfig show \
        --resource-group $RESOURCE_GROUP_NAME \
        --name "${APP_CONFIG_NAME}" \
        --query 'id' \
        --output tsv)
    # Assign the "App Configuration Data Reader" role to the current signed-in identity
    az role assignment create \
        --assignee $(az ad signed-in-user show --query 'id' --output tsv) \
        --role "App Configuration Data Reader" \
        --scope $APP_CONFIGURATION_RESOURCE_ID
    
  3. 다음 명령을 사용하여 App Configuration 저장소의 엔드포인트를 명명된 QUARKUS_AZURE_APP_CONFIGURATION_ENDPOINT 환경 변수로 내보냅니다.

    export QUARKUS_AZURE_APP_CONFIGURATION_ENDPOINT=$(az appconfig show \
        --resource-group "${RESOURCE_GROUP_NAME}" \
        --name "${APP_CONFIG_NAME}" \
        --query endpoint \
        --output tsv)
    

    비고

    환경 변수 QUARKUS_AZURE_APP_CONFIGURATION_ENDPOINT 의 값은 Azure App Configuration 저장소에 대한 연결을 설정하기 위해 Quarkus Azure App Configuration 확장의 구성 속성 quarkus.azure.app.configuration.endpoint 에 사용됩니다. 또는 다음 예제와 같이 src/main/resources 디렉터리의 application.properties 파일에서 이 속성을 직접 설정하여 구성할 수 있습니다. <your-app-configuration-store-endpoint>을 실제 값으로 반드시 대체해야 합니다.

    quarkus.azure.app.configuration.endpoint=<your-app-configuration-store-endpoint>
    

로컬로 앱 빌드 및 실행

다음 단계를 사용하여 로컬에서 앱을 빌드하고 실행합니다.

  1. 다음 명령을 사용하여 JVM 모드에서 앱을 빌드하고 실행합니다.

    # Build, test and package the app
    mvn clean package
    
    # Run the app
    java -jar ./target/quarkus-app/quarkus-run.jar
    

    비고

    또는 기본 모드에서 샘플을 실행할 수 있습니다. 기본 모드를 사용하려면 GraalVM을 설치하거나 작성기 이미지를 사용하여 네이티브 실행 파일을 빌드해야 합니다. 자세한 내용은 네이티브 실행 파일 빌드를 참조하세요. 이 빠른 시작에서는 Docker를 컨테이너 런타임으로 사용하여 Linux 네이티브 실행 파일을 빌드합니다. Docker가 설치되어 있지 않은 경우 Docker 웹 사이트에서 다운로드할 수 있습니다.

    다음 명령을 사용하여 Linux 환경에서 네이티브 실행 파일을 빌드하고 실행합니다.

    mvn package -Dnative -Dquarkus.native.container-build
    ./target/storage-blob-1.0.0-SNAPSHOT-runner
    
  2. 다음 명령을 사용하여 애플리케이션을 테스트합니다.

    curl localhost:8080/hello
    

    App Configuration 저장소에 추가한 키의 값인 Hello이므로 출력에 Hello이 표시됩니다.

  3. Control+C를 눌러 애플리케이션을 중지합니다.

자원을 정리하세요

Azure 요금을 방지하려면 불필요한 리소스를 정리해야 합니다. App Configuration 저장소가 더 이상 필요하지 않은 경우 다음 명령을 사용하여 리소스 그룹 및 모든 관련 리소스를 제거합니다.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

참고하십시오