연습 - Azure Container Apps 설정

완료됨

이 단원에서는 애플리케이션에 대한 리소스를 포함하는 Azure 리소스 그룹을 만듭니다. 그런 다음 Azure CLI를 사용하여 PostgreSQL 데이터베이스를 설정합니다. 마지막으로 원격 PostgreSQL 데이터베이스에 액세스하도록 Quarkus 애플리케이션을 구성합니다. 선택한 터미널을 사용하여 명령을 실행합니다.

작업 환경 준비

일부 환경 변수를 설정해야 합니다. 만들 변수에 대한 몇 가지 참고 사항은 다음과 같습니다.

변수 설명
AZ_PROJECT 프로젝트의 이름입니다. 이 값을 고유하게 유지하려면 AZ_PROJECT_<your initials>사용하는 것이 좋습니다.
AZ_RESOURCE_GROUP 리소스를 보유하는 리소스 그룹의 이름입니다.
AZ_LOCATION Azure 지역입니다. 거주 지역과 가까운 지역을 사용하는 것이 좋습니다. 사용 가능한 지역 목록을 보려면 명령 프롬프트에 az account list-locations 입력합니다.
AZ_CONTAINERAPP 컨테이너를 보유하는 Azure Container Apps 인스턴스의 이름입니다.
AZ_CONTAINERAPP_ENV Azure Container Apps 환경의 이름입니다.
AZ_POSTGRES_SERVER_NAME PostgreSQL 서버의 이름입니다. 숫자가 아닌 문자는 허용되지 않습니다. -, _, !, $, #, %. 이름은 Azure에서 고유해야 합니다. 고유 식별자를 사용해야 합니다.
AZ_POSTGRES_DB_NAME PostgreSQL 데이터베이스 이름입니다. PostgreSQL 데이터베이스의 기본 이름은 postgres.
AZ_POSTGRES_USERNAME PostgreSQL 데이터베이스 서버의 기본 관리자 사용자 이름입니다.
AZ_POSTGRES_PASSWORD PostgreSQL 데이터베이스 서버의 기본 암호입니다. 보안 암호를 사용합니다.

비고

원하는 방식으로 Azure 리소스의 이름을 지정할 수 있지만 Azure 리소스에 대한약어 예제를 검토하는 것이 좋습니다. 이 문서에서는 많은 Azure 리소스에 대한 예제 약어(예: 리소스 그룹에 대한 rg 및 컨테이너 앱의 경우 ca)를 제공합니다.

다음 명령을 사용하여 변수를 설정합니다. 앞의 표에 설명된 대로 값을 수정해야 합니다.

export AZ_PROJECT_<your initials>="azure-deploy-quarkus"
export AZ_RESOURCE_GROUP="rg${AZ_PROJECT_<your initials>}"
export AZ_LOCATION="eastus"
export AZ_CONTAINERAPP="ca${AZ_PROJECT_<your initials>}"
export AZ_CONTAINERAPP_ENV="cae${AZ_PROJECT_<your initials>}"
export AZ_POSTGRES_DB_NAME="postgres${AZ_PROJECT_<your initials>}"
export AZ_POSTGRES_USERNAME="<user-name>"
export AZ_POSTGRES_PASSWORD="<secure-password>"
export AZ_POSTGRES_SERVER_NAME="psql${AZ_PROJECT_<your initials>}"

이러한 환경 변수는 이 모듈의 나머지 부분에 걸쳐 사용됩니다.

다음으로, 리소스 그룹을 만듭니다.

az group create \
    --name $AZ_RESOURCE_GROUP \
    --___location $AZ_LOCATION

Azure Database for PostgreSQL 인스턴스 만들기

이제 관리되는 PostgreSQL 서버를 만듭니다. 다음 명령을 실행하여 Azure Database for PostgreSQL의 작은 인스턴스를 만듭니다.

이전에 PostgreSQL 서버를 만든 적이 없는 경우 공급자를 등록해야 합니다. PostgreSQL 공급자를 등록하려면 다음 명령을 실행합니다.

az provider register --namespace Microsoft.DBforPostgreSQL

그런 다음 PostgreSQL 서버를 만듭니다.

az postgres flexible-server create \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --___location "$AZ_LOCATION" \
    --name "$AZ_POSTGRES_SERVER_NAME" \
    --database-name "$AZ_POSTGRES_DB_NAME" \
    --admin-user "$AZ_POSTGRES_USERNAME" \
    --admin-password "$AZ_POSTGRES_PASSWORD" \
    --public-access "All" \
    --tier "Burstable" \
    --sku-name "Standard_B1ms" \
    --storage-size 32 \
    --version "16"

이 명령은 이전에 설정한 변수를 사용하는 작은 PostgreSQL 서버를 만듭니다.

PostgreSQL 데이터베이스에 액세스하도록 Quarkus 구성

이제 Quarkus 애플리케이션을 PostgreSQL 데이터베이스에 연결합니다. 이렇게 하려면 먼저 데이터베이스에 대한 연결 문자열을 가져와야 합니다.

export POSTGRES_CONNECTION_STRING=$(
    az postgres flexible-server show-connection-string \
    --server-name "$AZ_POSTGRES_SERVER_NAME" \
    --database-name "$AZ_POSTGRES_DB_NAME" \
    --admin-user "$AZ_POSTGRES_USERNAME" \
    --admin-password "$AZ_POSTGRES_PASSWORD" \
    --query "connectionStrings.jdbc" \
    --output tsv
)

export POSTGRES_CONNECTION_STRING_SSL="$POSTGRES_CONNECTION_STRING&ssl=true"

echo "POSTGRES_CONNECTION_STRING_SSL=$POSTGRES_CONNECTION_STRING_SSL"

반환되는 연결 문자열을 확인합니다.

비고

사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 데이터베이스, 캐시, 메시징 또는 AI 서비스와 같이 이 절차에서 설명하는 인증 흐름은 애플리케이션에 대한 높은 수준의 신뢰가 필요하며 다른 흐름에 존재하지 않는 위험을 수반합니다. 암호 없는 연결 또는 키 없는 연결에 대한 관리 ID와 같은 보다 안전한 옵션이 실행 가능하지 않은 경우에만 이 흐름을 사용합니다. 로컬 컴퓨터 작업의 경우 암호 없는 연결이나 키 없는 연결에 사용자 ID를 사용하는 것이 좋습니다.

PostgreSQL 데이터베이스에 연결하도록 Quarkus 애플리케이션 구성

프로젝트의 application.properties 폴더에 있는 src/main/resources 파일을 업데이트하여 PostgreSQL 데이터베이스에 대한 연결 문자열을 구성합니다. 이렇게 하려면 quarkus.datasource.jdbc.url 속성을 이전 출력 $POSTGRES_CONNECTION_STRING_SSL 값으로 설정합니다. 연결 문자열의 &ssl=true&sslmode=require 부분은 드라이버가 Azure Database for PostgreSQL에 대한 요구 사항인 SSL을 사용하도록 강제합니다.

quarkus.hibernate-orm.database.generation=update
quarkus.datasource.jdbc.url=<the POSTGRES_CONNECTION_STRING_SSL value>

Quarkus 애플리케이션을 로컬로 실행하여 원격 데이터베이스 연결을 테스트합니다.

이 명령을 사용하여 애플리케이션을 로컬로 실행합니다.

./mvnw clean quarkus:dev    # On Mac or Linux
mvnw.cmd clean quarkus:dev  # On Windows

Quarkus가 실행 중인 경우 별도의 터미널 창에서 다음 cURL 명령을 사용하여 몇 가지 할 일을 만듭니다.

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"Take Quarkus MS Learn","details":"Take the MS Learn on deploying Quarkus to Azure Container Apps","done": "true"}' \
    http://127.0.0.1:8080/api/todos

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"Take Azure Container Apps MS Learn","details":"Take the ACA Learn module","done": "false"}' \
    http://127.0.0.1:8080/api/todos

다음으로, to-do 앱에 정의된 GET 엔드포인트에 액세스하여 할 일이 데이터베이스에 있는지 확인합니다.

curl http://127.0.0.1:8080/api/todos

다음과 같은 출력이 표시됩니다.

[
  {
    "id": 1,
    "description": "Take Quarkus MS Learn",
    "details": "Take the MS Learn on deploying Quarkus to Azure Container Apps",
    "done": true,
    "createdAt": "2025-02-26T08:03:28.390854Z"
  },
  {
    "id": 2,
    "description": "Take Azure Container Apps MS Learn",
    "details": "Take the ACA Learn module",
    "done": false,
    "createdAt": "2025-02-26T08:03:34.142249Z"
  }
]

이 출력이 표시되면 Quarkus 애플리케이션을 성공적으로 실행하고 원격 PostgreSQL 데이터베이스에 연결했습니다.