자습서: Azure 데이터베이스에 암호 없는 연결을 사용하여 Azure Spring Apps에 Spring 애플리케이션 배포
이 문서에서는 Azure Spring Apps에 배포된 Spring Boot 애플리케이션에서 Azure 데이터베이스에 암호 없는 연결을 사용하는 방법을 보여 줍니다.
이 자습서에서는 Azure Portal 또는 Azure CLI를 사용하여 다음 작업을 완료합니다. 두 방법 모두 다음 절차에서 설명합니다.
- Azure Spring Apps의 인스턴스를 프로비전합니다.
- Azure Spring Apps에 앱을 빌드하고 배포합니다.
- 관리 ID를 사용하여 Azure 데이터베이스에 연결된 앱을 실행합니다.
메모
이 자습서는 R2DBC에서 작동하지 않습니다.
필수 구성 요소
- Azure 구독. 시작하기 전에 아직 없는 경우, 무료 계정을 만드세요.
- Azure CLI 2.45.0 이상이 필요합니다.
- Azure Spring Apps 확장입니다.
az extension add --name spring
명령을 사용하여 확장을 설치할 수 있습니다. - JDK(Java Development Kit), 버전 8, 11 또는 17.
- Git 클라이언트입니다.
- cURL 또는 유사한 HTTP 유틸리티로 기능을 테스트합니다.
- Azure Database for MySQL을 실행하도록 선택한 경우 MySQL 명령줄 클라이언트입니다. 인기 있는 클라이언트 도구인 mysql.exe 명령줄 도구를 사용하여 Azure Cloud Shell을 사용하여 서버에 연결할 수 있습니다. 또는 로컬 환경에서
mysql
명령줄을 사용할 수 있습니다. - Azure SQL Database를 실행하도록 선택한 경우 SQL Server용 ODBC Driver 18
.
작업 환경 준비
먼저 다음 명령을 사용하여 일부 환경 변수를 설정합니다.
export AZ_RESOURCE_GROUP=passwordless-tutorial-rg
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demodb
export AZ_LOCATION=<YOUR_AZURE_REGION>
export AZ_SPRING_APPS_SERVICE_NAME=<YOUR_AZURE_SPRING_APPS_SERVICE_NAME>
export AZ_SPRING_APPS_APP_NAME=hellospring
export AZ_DB_ADMIN_USERNAME=<YOUR_DB_ADMIN_USERNAME>
export AZ_DB_ADMIN_PASSWORD=<YOUR_DB_ADMIN_PASSWORD>
export AZ_USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>
자리 표시자를 이 문서 전체에서 사용되는 다음 값으로 바꿉 있습니다.
-
<YOUR_DATABASE_SERVER_NAME>
: Azure 데이터베이스 서버의 이름으로, Azure 전체에서 고유해야 합니다. -
<YOUR_AZURE_REGION>
: 사용하려는 Azure 지역입니다. 기본적으로eastus
사용할 수 있지만 거주 지역에 가까운 지역을 구성하는 것이 좋습니다.az account list-locations
사용하여 사용 가능한 지역의 전체 목록을 볼 수 있습니다. -
<YOUR_AZURE_SPRING_APPS_SERVICE_NAME>
: Azure Spring Apps 인스턴스의 이름입니다. 이름은 4자에서 32자 사이여야 하며 소문자, 숫자 및 하이픈만 포함할 수 있습니다. 서비스 이름의 첫 번째 문자는 문자여야 하며 마지막 문자는 문자 또는 숫자여야 합니다. -
<AZ_DB_ADMIN_USERNAME>
: Azure 데이터베이스 서버의 관리자 사용자 이름입니다. -
<AZ_DB_ADMIN_PASSWORD>
: Azure 데이터베이스 서버의 관리자 암호입니다. -
<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>
: Azure에서 고유해야 하는 사용자 할당 관리 ID 서버의 이름입니다.
Azure Spring Apps 인스턴스 구성하기
다음 단계를 사용하여 Azure Spring Apps 인스턴스를 프로비전합니다.
다음 명령을 사용하여 Azure Spring Apps 확장으로 Azure CLI를 업데이트합니다.
az extension update --name spring
Azure CLI에 로그인하고 다음 명령을 사용하여 활성 구독을 선택합니다.
az login az account list --output table az account set --subscription <name-or-ID-of-subscription>
다음 명령을 사용하여 Azure Spring Apps 서비스 및 Azure Spring Apps 서비스의 인스턴스를 포함하는 리소스 그룹을 만듭니다.
az group create \ --name $AZ_RESOURCE_GROUP \ --location $AZ_LOCATION az spring create \ --resource-group $AZ_RESOURCE_GROUP \ --name $AZ_SPRING_APPS_SERVICE_NAME
Azure 데이터베이스 인스턴스 만들기
다음 단계를 사용하여 Azure Database 인스턴스를 프로비전합니다.
다음 명령을 사용하여 Azure Database for MySQL 서버를 만듭니다.
az mysql flexible-server create \ --resource-group $AZ_RESOURCE_GROUP \ --name $AZ_DATABASE_SERVER_NAME \ --location $AZ_LOCATION \ --admin-user $AZ_DB_ADMIN_USERNAME \ --admin-password $AZ_DB_ADMIN_PASSWORD \ --yes
메모
admin-user
또는 admin-password
매개 변수를 제공하지 않으면 시스템은 기본적으로 기본 관리자 사용자 또는 임의 관리자 암호를 생성합니다.
다음 명령을 사용하여 새 데이터베이스를 만듭니다.
az mysql flexible-server db create \ --resource-group $AZ_RESOURCE_GROUP \ --database-name $AZ_DATABASE_NAME \ --server-name $AZ_DATABASE_SERVER_NAME
공용 엔드포인트가 할당된 앱 만들기
다음 명령을 사용하여 앱을 만듭니다.
az spring app create \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_APPS_SERVICE_NAME \
--name $AZ_SPRING_APPS_APP_NAME \
--runtime-version=Java_17
--assign-endpoint true
Azure Spring Apps를 Azure 데이터베이스에 연결
먼저 Azure CLI에 대한 Service Connector 암호 없는 확장을 설치합니다.
az extension add --name serviceconnector-passwordless --upgrade
- Azure Database for MySQL
-
PostgreSQL용 Azure 데이터베이스
-
Azure SQL Database
그런 다음, 다음 명령을 사용하여 Microsoft Entra 인증에 대한 사용자 할당 관리 ID를 만듭니다. 자세한 내용은 Azure Database for MySQL - 유연한 서버대한 Microsoft Entra 인증 설정
export AZ_IDENTITY_RESOURCE_ID=$(az identity create \
--name $AZ_USER_IDENTITY_NAME \
--resource-group $AZ_RESOURCE_GROUP \
--query id \
--output tsv)
중요하다
사용자 할당 ID를 만든 후, 전역 관리자 또는 Privileged Role Administrator에게 요청하여 이 ID에 대해서 User.Read.All
, GroupMember.Read.All
및 Application.Read.ALL
권한을 부여받도록 합니다. 자세한 내용은 권한 섹션의 Active Directory 인증을 참조하세요.
다음으로, 다음 명령을 사용하여 데이터베이스에 대한 암호 없는 연결을 만듭니다.
az spring connection create mysql-flexible \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_APPS_SERVICE_NAME \
--app $AZ_SPRING_APPS_APP_NAME \
--target-resource-group $AZ_RESOURCE_GROUP \
--server $AZ_DATABASE_SERVER_NAME \
--database $AZ_DATABASE_NAME \
--system-identity mysql-identity-id=$AZ_IDENTITY_RESOURCE_ID
이 서비스 커넥터 명령은 백그라운드에서 다음 작업을 수행합니다.
Azure Spring Apps에서 호스트하는 앱
$AZ_SPRING_APPS_APP_NAME
시스템 할당 관리 ID를 사용하도록 설정합니다.Microsoft Entra 관리자를 현재 로그인한 사용자로 설정합니다.
1단계에서 만든 관리 ID에 대한
$AZ_SPRING_APPS_SERVICE_NAME/apps/$AZ_SPRING_APPS_APP_NAME
데이터베이스 사용자를 추가하고 이 사용자에게 데이터베이스$AZ_DATABASE_NAME
모든 권한을 부여합니다.두 가지 구성을 앱
$AZ_SPRING_APPS_APP_NAME
spring.datasource.url
및spring.datasource.username
에 추가합니다.메모
The subscription is not registered to use Microsoft.ServiceLinker
오류 메시지가 표시되면 명령az provider register --namespace Microsoft.ServiceLinker
실행하여 Service Connector 리소스 공급자를 등록한 다음 연결 명령을 다시 실행합니다.
앱 빌드 및 배포
다음 단계에서는 샘플 애플리케이션을 다운로드, 구성, 빌드 및 배포하는 방법을 설명합니다.
다음 명령을 사용하여 샘플 코드 리포지토리를 복제합니다.
-
Azure Database for MySQL
- Azure Database for PostgreSQL
- Azure SQL Database
git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql passwordless-sample
-
Azure Database for MySQL
pom.xml 파일에 다음 종속성을 추가합니다.
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId> </dependency>
이 종속성은 Spring Cloud Azure 스타터에 대한 지원을 추가합니다.
메모
BOM(부품 명세서)을 사용하여 Spring Cloud Azure 라이브러리 버전을 관리하는 방법에 대한 더 많은 정보는 Spring Cloud Azure 개발자 가이드의 시작하기 섹션을 참조하세요.
다음 명령을 사용하여 application.properties 파일을 업데이트합니다.
- Azure Database for MySQL
-
Azure Database for PostgreSQL
- Azure SQL Database
cat << EOF > passwordless-sample/src/main/resources/application.properties logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always EOF
다음 명령을 사용하여 Maven을 사용하여 프로젝트를 빌드합니다.
cd passwordless-sample ./mvnw clean package -DskipTests
앱에 대상/demo-0.0.1-SNAPSHOT.jar 파일을 배포하려면 다음 명령을 사용하세요.
az spring app deploy \ --name $AZ_SPRING_APPS_APP_NAME \ --service $AZ_SPRING_APPS_SERVICE_NAME \ --resource-group $AZ_RESOURCE_GROUP \ --artifact-path target/demo-0.0.1-SNAPSHOT.jar
다음 명령을 사용하여 배포 후 앱 상태를 쿼리합니다.
az spring app list \ --service $AZ_SPRING_APPS_SERVICE_NAME \ --resource-group $AZ_RESOURCE_GROUP \ --output table
다음 예제와 유사한 출력이 표시됩니다.
Name Location ResourceGroup Production Deployment Public Url Provisioning Status CPU Memory Running Instance Registered Instance Persistent Storage ----------------- ---------- --------------- ----------------------- --------------------------------------------------- --------------------- ----- -------- ------------------ --------------------- -------------------- <app name> eastus <resource group> default Succeeded 1 2 1/1 0/1 -
애플리케이션 테스트
애플리케이션을 테스트하려면 cURL을 사용할 수 있습니다. 먼저 다음 명령을 사용하여 데이터베이스에 새 "todo" 항목을 만듭니다.
curl --header "Content-Type: application/json" \
--request POST \
--data '{"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done": "true"}' \
https://${AZ_SPRING_APPS_SERVICE_NAME}-hellospring.azuremicroservices.io
이 명령은 다음 예제와 같이 만든 항목을 반환합니다.
{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}
다음으로, 다음 cURL 요청을 사용하여 데이터를 검색합니다.
curl https://${AZ_SPRING_APPS_SERVICE_NAME}-hellospring.azuremicroservices.io
이 명령은 다음 예제와 같이 만든 항목을 포함하여 "todo" 항목 목록을 반환합니다.
[{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}]
리소스 정리
이 자습서에서 사용되는 모든 리소스를 정리하려면 다음 명령을 사용하여 리소스 그룹을 삭제합니다.
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes