이 문서에서는 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 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
다음 명령을 사용하여 Azure Database for PostgreSQL 서버를 만듭니다.
az postgres 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
매개 변수를 제공하지 않으면 시스템은 기본적으로 기본 관리자 사용자 또는 임의 관리자 암호를 생성합니다.
PostgreSQL 서버가 비어 있으므로 다음 명령을 사용하여 새 데이터베이스를 만듭니다.
az postgres flexible-server db create \
--resource-group $AZ_RESOURCE_GROUP \
--database-name $AZ_DATABASE_NAME \
--server-name $AZ_DATABASE_SERVER_NAME
다음 명령을 사용하여 Azure SQL Database 서버를 만듭니다.
az sql server create \
--location $AZ_LOCATION \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME \
--admin-user $AZ_DB_ADMIN_USERNAME \
--admin-password $AZ_DB_ADMIN_PASSWORD
SQL Server가 비어 있으므로 다음 명령을 사용하여 새 데이터베이스를 만듭니다.
az sql db create \
--resource-group $AZ_RESOURCE_GROUP \
--server $AZ_DATABASE_SERVER_NAME \
--name $AZ_DATABASE_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
그런 다음, 다음 명령을 사용하여 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 리소스 공급자를 등록한 다음 연결 명령을 다시 실행합니다.
다음 명령을 사용하여 데이터베이스에 대한 암호 없는 연결을 만듭니다.
az spring connection create postgres-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
이 서비스 커넥터 명령은 백그라운드에서 다음 작업을 수행합니다.
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 CLI에서 64비트 Python을 사용하고 있는지 확인하세요. 32비트 Python은 명령의 종속성 pyodbc과 호환성 문제가 있습니다.
Azure CLI의 Python 정보는 명령 az --version
를 사용하여 얻을 수 있습니다.
[MSC v.1929 32 bit (Intel)]
표시되면 32비트 Python을 사용한다는 의미입니다.
솔루션은 64비트 Python을 설치하고 PyPIAzure CLI를 설치하는 것입니다.
다음 명령을 사용하여 데이터베이스에 대한 암호 없는 연결을 만듭니다.
az spring connection create sql \
--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
이 서비스 커넥터 명령은 백그라운드에서 다음 작업을 수행합니다.
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
을 추가합니다.
메모
The subscription is not registered to use Microsoft.ServiceLinker
오류 메시지가 표시되면 명령 az provider register --namespace Microsoft.ServiceLinker
실행하여 Service Connector 리소스 공급자를 등록한 다음 연결 명령을 다시 실행합니다.
다음 단계에서는 샘플 애플리케이션을 다운로드, 구성, 빌드 및 배포하는 방법을 설명합니다.
다음 명령을 사용하여 샘플 코드 리포지토리를 복제합니다.
git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql passwordless-sample
git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-postgresql passwordless-sample
git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-sql-server passwordless-sample
pom.xml 파일에 다음 종속성을 추가합니다.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>
이 종속성은 Spring Cloud Azure 스타터에 대한 지원을 추가합니다.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId>
</dependency>
이 종속성은 Spring Cloud Azure 스타터에 대한 지원을 추가합니다.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.5.4</version>
</dependency>
현재 Azure SQL Database용 Spring Cloud Azure 스타터는 없지만 azure-identity
종속성이 필요합니다.
다음 명령을 사용하여 application.properties 파일을 업데이트합니다.
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
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
cat << EOF > passwordless-sample/src/main/resources/application.properties
logging.level.org.springframework.jdbc.core=DEBUG
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