빠른 시작: Azure Spring Apps에 RESTful API 애플리케이션 배포

참고 항목

처음 50 vCPU 시간 및 100GB 메모리 시간은 매달 무료입니다. 자세한 내용은 Azure 블로그의 앱에서 가격 인하 - Azure Spring Apps에서 더 많은 비용 절감을 참조하세요.

참고 항목

Azure Spring Apps는 Azure Spring Cloud 서비스의 새 이름입니다. 서비스에 새 이름이 지정되었지만, 자산을 업데이트하는 동안 스크린샷, 비디오, 다이어그램과 같은 일부 위치에서는 당분간 이전 이름이 표시됩니다.

이 문서에서는 Microsoft Entra ID로 보호되는 RESTful API 애플리케이션을 Azure Spring Apps에 배포하는 방법을 설명합니다. 샘플 프로젝트는 간단한 Todo 웹 애플리케이션을 기반으로 하는 간소화된 버전으로, 백 엔드 서비스만 제공하고 Microsoft Entra ID를 사용하여 RESTful API를 보호합니다.

이러한 RESTful API는 RBAC(역할 기반 액세스 제어)를 적용하여 보호됩니다. 익명 사용자는 데이터에 액세스할 수 없으며 다른 사용자에 대한 액세스를 제어할 수 없습니다. 익명 사용자에게는 다음 세 가지 권한만 있습니다.

  • 읽기: 이 사용 권한으로 사용자는 ToDo 데이터를 읽을 수 있습니다.
  • 쓰기: 이 사용 권한으로 사용자는 ToDo 데이터를 추가하거나 업데이트할 수 있습니다.
  • 삭제: 이 사용 권한으로 사용자는 ToDo 데이터를 삭제할 수 있습니다.

배포에 성공하면 Swagger UI를 통해 API를 보고 테스트할 수 있습니다.

Screenshot of the Swagger UI that shows the API document.

다음 다이어그램은 시스템의 아키텍처를 보여줍니다.

Diagram that shows the architecture of a Spring web application.

이 문서에서는 리소스를 만들고 Azure Spring Apps에 배포하기 위한 다음 옵션을 설명합니다.

  • Azure Portal + Maven 플러그 인 옵션은 리소스를 만들고 애플리케이션을 단계별로 배포하는 보다 일반적인 방법을 제공합니다. 이 옵션은 처음으로 Azure 클라우드 서비스를 사용하는 Spring 개발자에게 적합합니다.
  • Azure 개발자 CLI 옵션은 간단한 명령을 통해 리소스를 자동으로 만들고 애플리케이션을 배포하는 보다 효율적인 방법입니다. Azure 개발자 CLI는 템플릿을 사용하여 필요한 Azure 리소스를 프로비전하고 애플리케이션 코드를 배포합니다. 이 옵션은 Azure 클라우드 서비스에 익숙한 Spring 개발자에게 적합합니다.

이 문서에서는 리소스를 만들고 Azure Spring Apps에 배포하기 위한 다음 옵션을 설명합니다.

  • Azure Portal + Maven 플러그 인 옵션은 리소스를 만들고 애플리케이션을 단계별로 배포하는 보다 일반적인 방법을 제공합니다. 이 옵션은 처음으로 Azure 클라우드 서비스를 사용하는 Spring 개발자에게 적합합니다.
  • Azure CLI 옵션은 강력한 명령줄 도구를 사용하여 Azure 리소스를 관리합니다. 이 옵션은 Azure 클라우드 서비스에 익숙한 Spring 개발자에게 적합합니다.

1. 사전 요구 사항

  • Azure 구독 Azure 구독이 없는 경우 시작하기 전에 Azure 체험 계정을 만듭니다.

  • 다음 역할 중 하나입니다.

    • 모든 API에 대한 권한을 요청하는 앱에 대한 동의를 부여하기 위한 전역 관리자 또는 권한 있는 역할 관리자.
    • Microsoft Graph 앱 역할(애플리케이션 권한)을 제외한 모든 API에 대한 사용 권한을 요청하는 앱에 대한 동의를 부여하기 위한 클라우드 애플리케이션 관리자 또는 애플리케이션 관리자.
    • 애플리케이션에 필요한 사용 권한에 대해 애플리케이션에 권한을 부여할 수 있는 권한이 포함된 사용자 지정 디렉터리 역할.

    자세한 내용은 애플리케이션에 테넌트 전체 관리자 동의 부여를 참조 하세요.

  • 대상 구독에서 처음으로 Azure Spring Apps Enterprise 계획 인스턴스를 배포하는 경우 Azure Marketplace의 Enterprise 계획의 요구 사항 섹션을 참조하세요.

  • Git

  • JDK(Java Development Kit), 버전 17.

  • Microsoft Entra 테넌트. 만들기에 대한 지침은 빠른 시작: Microsoft Entra ID에서 새 테넌트 만들기를 참조하세요.

  • Azure 구독, Azure 구독이 없는 경우 시작하기 전에 Azure 체험 계정을 만듭니다.

  • 다음 역할 중 하나입니다.

    • 모든 API에 대한 권한을 요청하는 앱에 대한 동의를 부여하기 위한 전역 관리자 또는 권한 있는 역할 관리자.
    • Microsoft Graph 앱 역할(애플리케이션 권한)을 제외한 모든 API에 대한 사용 권한을 요청하는 앱에 대한 동의를 부여하기 위한 클라우드 애플리케이션 관리자 또는 애플리케이션 관리자.
    • 애플리케이션에 필요한 사용 권한에 대해 애플리케이션에 권한을 부여할 수 있는 권한이 포함된 사용자 지정 디렉터리 역할.

    자세한 내용은 애플리케이션에 테넌트 전체 관리자 동의 부여를 참조 하세요.

  • Git

  • JDK(Java Development Kit), 버전 17.

  • Microsoft Entra 테넌트. 만들기에 대한 지침은 빠른 시작: Microsoft Entra ID에서 새 테넌트 만들기를 참조하세요.

2. Spring 프로젝트 준비

RESTful API 앱을 배포하기 위해 첫 번째 단계는 Spring 프로젝트가 로컬로 실행되도록 준비하는 것입니다.

다음 단계를 사용하여 앱을 로컬로 복제하고 실행합니다.

  1. 다음 명령을 사용하여 GitHub에서 샘플 프로젝트를 복제합니다.

    git clone https://github.com/Azure-Samples/ASA-Samples-Restful-Application.git
    
  2. 앱을 로컬로 실행하려면 RESTful API 노출의 단계를 완료하고 애플리케이션 구성 섹션을 먼저 업데이트한 다음 다음 명령을 사용하여 Maven에서 샘플 애플리케이션을 실행합니다.

    cd ASA-Samples-Restful-Application
    ./mvnw spring-boot:run
    

3. 클라우드 환경 준비

이 샘플 앱을 실행하는 데 필요한 기본 리소스는 Azure Spring Apps 인스턴스 및 Azure Database for PostgreSQL 인스턴스입니다. 다음 섹션에서는 이러한 리소스를 만드는 방법을 설명합니다.

3.1. Azure 포털

Azure Portal로 이동하여 자격 증명을 입력하여 포털에 로그인합니다. 기본 보기는 서비스 대시보드입니다.

3.2. Azure Spring Apps 인스턴스 만들기

다음 단계를 사용하여 Azure Spring Apps 서비스 인스턴스를 만듭니다.

  1. Azure Portal의 모서리에서 리소스 만들기를 선택합니다.

  2. 컴퓨팅 Azure Spring Apps>선택합니다.

  3. 다음 정보로 기본 사항 양식을 입력합니다.

    설정 제안 값 설명
    구독 구독 이름입니다. 서버에 사용할 Azure 구독입니다. 여러 구독이 있는 경우 리소스에 대한 요금이 청구될 구독을 선택합니다.
    리소스 그룹 myresourcegroup 새 리소스 그룹 이름 또는 구독의 기존 리소스 그룹 이름입니다.
    이름 myasa Azure Spring Apps 서비스를 식별하는 고유한 이름입니다. 이름은 4자에서 32자 사이여야 하며 소문자, 숫자 및 하이픈만 포함할 수 있습니다. 서비스 이름의 첫 글자는 문자여야 하며 마지막 문자는 문자 또는 숫자여야 합니다.
    계획 엔터프라이즈 인스턴스와 연결된 리소스 및 비용을 결정하는 가격 책정 계획입니다.
    지역 사용자와 가장 가까운 지역입니다. 사용자에게 가장 가까운 위치입니다.
    영역 중복 선택 취소 Azure 가용성 영역에서 Azure Spring Apps 서비스를 만드는 옵션입니다. 이 기능은 현재 모든 지역에서 지원되지 않습니다.
    소프트웨어 IP 계획 종량제 Azure Spring Apps를 사용하여 결제할 수 있는 가격 책정 플랜입니다.
    Terms 선택한 상태 Marketplace 제품관련된 계약 검사box입니다. 이 검사 상자를 선택해야 합니다.
    샘플 프로젝트 배포 선택 취소 기본 제공 샘플 애플리케이션을 사용하는 옵션입니다.
  4. 검토 및 만들기를 선택하여 선택 항목을 검토합니다. 그런 다음 만들기를 선택하여 Azure Spring Apps 인스턴스를 프로비전합니다.

  5. 도구 모음에서 알림 아이콘(종)을 선택하여 배포 프로세스를 모니터링합니다. 배포가 완료되면 대시보드에 고정을 선택하여 Azure Portal 대시보드에서 이 서비스에 대한 타일을 서비스의 개요 페이지에 대한 바로 가기로 만들 수 있습니다.

    Screenshot of the Azure portal that shows the Notifications pane for Azure Spring Apps creation.

  6. 리소스로 이동을 선택하여 Azure Spring Apps 개요 페이지로 이동합니다.

3.3. PostgreSQL 인스턴스 준비

다음 단계를 사용하여 Azure Database for PostgreSQL 서버를 만듭니다.

  1. Azure Portal로 이동하여 리소스 만들기를 선택합니다.

  2. 데이터베이스>PostgreSQL용 Azure Database를 차례로 선택합니다.

  3. 유연한 서버 배포 옵션을 선택합니다.

    Screenshot of the Azure portal that shows the Select Azure Database for PostgreSQL deployment option page.

  4. 다음 정보를 사용하여 기본 사항 탭을 작성합니다 .

    • 서버 이름: my-demo-pgsql
    • 지역: 미국 동부
    • PostgreSQL 버전: 14
    • 워크로드 유형: 개발
    • 고가용성 사용: 선택되지 않음
    • 인증 방법: PostgreSQL 인증만
    • 관리 사용자 이름: myadmin
    • 암호암호 확인: 암호를 입력합니다.
  5. 다음 정보를 사용하여 네트워킹 탭을 구성합니다.

    • 커넥트ivity 메서드: 공용 액세스(허용된 IP 주소)
    • Azure 내의 모든 Azure 서비스에서 이 서버로의 공용 액세스 허용: 선택됨
  6. 검토 + 만들기를 선택하여 선택 항목을 검토하고 만들기를 선택하여 서버를 프로비전합니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.

  7. Azure Portal에서 PostgreSQL 서버로 이동합니다. 개요 페이지에서 서버 이름 값을 찾은 다음 나중에 사용하기 위해 기록합니다. Azure Spring Apps에서 앱에 대한 환경 변수를 구성하려면 필요합니다.

  8. 탐색 메뉴에서 데이터베이스를 선택하여 데이터베이스를 만듭니다(예: 할 일).

    Screenshot of the Azure portal that shows the Databases page with the Create Database pane open.

3.4 PostgreSQL 인스턴스에 앱 인스턴스 커넥트

다음 단계를 사용하여 서비스 인스턴스를 연결합니다.

  1. Azure Portal에서 Azure Spring Apps 인스턴스로 이동합니다.

  2. 탐색 메뉴에서 앱을 연 다음 앱 만들기를 선택합니다.

  3. 만들기 페이지에서 앱 이름 simple-todo-api를 입력한 다음 배포 유형으로 Java 아티팩트를 선택합니다.

  4. 만들기를 선택하여 앱 만들기를 완료한 다음, 앱을 선택하여 세부 정보를 확인합니다.

  5. Azure Portal에서 만든 앱으로 이동합니다. 개요 페이지에서 엔드포인트 할당을 선택하여 앱에 대한 퍼블릭 엔드포인트를 노출합니다. 배포 후 앱에 액세스하기 위한 URL을 저장합니다.

  6. 탐색 창에서 서비스 커넥트or를 선택한 다음 만들기를 선택하여 새 서비스 연결을 만듭니다.

    Screenshot of the Azure portal that shows the enterprise plan Service Connector page with the Create button highlighted.

  7. 다음 정보를 사용하여 기본 사항 탭을 작성합니다 .

    • 서비스 유형: DB for PostgreSQL 유연한 서버
    • 커넥트ion 이름: 자동으로 생성된 이름이 채워지며 수정할 수도 있습니다.
    • 구독: 구독을 선택합니다.
    • PostgreSQL 유연한 서버: my-demo-pgsql
    • PostgreSQL 데이터베이스: 만든 데이터베이스를 선택합니다.
    • 클라이언트 유형: SpringBoot

    Screenshot of the Azure portal that shows the Basics tab of the Create connection pane for connecting to Service Bus.

  8. 다음 정보를 사용하여 다음: 인증 탭을 구성합니다.

    • 컴퓨팅 서비스와 대상 서비스 간에 사용할 인증 유형을 선택합니다.: 커넥트ion 문자열을 선택합니다.
    • 계속 진행...: 데이터베이스 자격 증명 선택
    • 사용자 이름: myadmin
    • 암호: 암호를 입력합니다.

    Screenshot of the Azure portal that shows the Authentication tab of the Create connection pane with the Connection string option highlighted.

  9. 다음: 네트워킹을 선택합니다. 대상 서비스에 대한 액세스를 사용하도록 설정하려면 기본 옵션인 방화벽 규칙 구성을 사용합니다.

  10. 다음: 검토 및 만들기를 선택하여 선택 항목을 검토한 다음 만들기를 선택하여 연결을 만듭니다.

3.5 RESTful API 노출

다음 단계를 사용하여 Microsoft Entra ID에서 RESTful API를 노출합니다.

  1. Azure Portal에 로그인합니다.

  2. 여러 테넌트에 액세스할 수 있는 경우 디렉터리 + 구독 필터()를 사용하여 애플리케이션을 등록할 테넌트를 선택합니다.

  3. Microsoft Entra ID를 검색하여 선택합니다.

  4. 관리 아래에서 앱 등록>새 등록을 선택합니다.

  5. 이름 필드에 애플리케이션의 이름(예: Todo)을 입력합니다. 이 이름은 앱의 사용자에게 표시될 수 있으며 나중에 변경할 수 있습니다.

  6. 지원되는 계정 유형의 경우 모든 조직 디렉터리(모든 Microsoft Entra 디렉터리 - 다중 테넌트) 및 개인 Microsoft 계정에서 계정을 선택합니다.

  7. 등록을 선택하여 애플리케이션을 만듭니다.

  8. 개요 페이지에서 애플리케이션(클라이언트) ID 값을 찾은 후 나중에 사용할 수 있도록 기록합니다. 이 프로젝트에 대한 YAML 구성 파일을 구성하려면 필요합니다.

  9. 관리에서 API 노출을 선택하고 페이지 시작 부분에서 애플리케이션 ID URI를 찾은 다음 추가를 선택합니다.

  10. 애플리케이션 ID URI 편집 페이지에서 제안된 애플리케이션 ID URI(api://{client ID})를 수락하거나 클라이언트 ID 대신 의미 있는 이름을 사용합니다(예: api://simple-todo저장).

  11. 관리에서 범위 추가 API>노출을 선택한 다음, 다음 정보를 입력합니다.

    • 범위 이름에 ToDo.Read를 입력합니다.
    • 동의할 수 있는 사용자에 대해 관리만 선택합니다.
    • 관리 동의 표시 이름을 보려면 ToDo 데이터 읽기를 입력합니다.
    • 관리 동의 설명을 보려면 인증된 사용자가 ToDo 데이터를 읽을 수 있도록 허용을 입력합니다.
    • 상태의 경우 계속 사용하도록 설정합니다.
    • 범위 추가를 선택합니다.
  12. 이전 단계를 반복하여 ToDo.Write 및 ToDo.Delete의 다른 두 범위를 추가합니다.

    Screenshot of the Azure portal that shows the Expose an API page of a RESTful API application.

3.6. 애플리케이션 구성 업데이트

다음 단계를 사용하여 RESTful API 애플리케이션과의 관계를 설정하기 위해 Microsoft Entra 등록 애플리케이션 정보를 사용하도록 YAML 파일을 업데이트합니다.

  1. 앱에 대한 src/기본/resources/application.yml 파일을 찾습니다simple-todo-api. 다음 예제와 일치하도록 섹션의 spring.cloud.azure.active-directory 구성을 업데이트합니다. 자리 표시자를 이전에 만든 값으로 바꿔야 합니다.

    spring:
      cloud:
        azure:
          active-directory:
            profile:
              tenant-id: <tenant>
            credential:
              client-id: <your-application-ID-of-ToDo>
            app-id-uri: <your-application-ID-URI-of-ToDo>
    

    참고 항목

    v1.0 토큰에서 구성에는 API의 클라이언트 ID가 필요하지만 v2.0 토큰에서는 요청에서 클라이언트 ID 또는 애플리케이션 ID URI를 사용할 수 있습니다. 대상 그룹 유효성 검사를 제대로 완료하도록 둘 다 구성할 수 있습니다.

    허용되는 tenant-id 값은 , commonorganizations, consumers또는 테넌트 ID입니다. 이러한 값에 대한 자세한 내용은 오류 AADSTS50020 - ID 공급자의 사용자 계정이 테넌트에 존재하지 않는 잘못된 엔드포인트(개인 및 조직 계정) 사용 섹션을 참조하세요. 단일 테넌트 앱을 변환하는 방법에 대한 자세한 내용은 Microsoft Entra ID에서 단일 테넌트 앱을 다중 테넌트로 변환을 참조하세요.

  2. 다음 명령을 사용하여 샘플 프로젝트를 다시 빌드합니다.

    ./mvnw clean package
    

4. Azure Spring Apps에 앱 배포

이제 Azure Spring Apps에 앱을 배포할 수 있습니다.

다음 단계를 사용하여 Azure Spring Apps용 Maven 플러그 인을 사용하여 배포합니다.

  1. 전체 디렉터리로 이동한 다음, 다음 명령을 실행하여 Azure Spring Apps에서 앱을 구성합니다.

    ./mvnw com.microsoft.azure:azure-spring-apps-maven-plugin:1.19.0:config
    

    다음 목록에서는 명령 상호 작용에 대해 설명합니다.

    • OAuth2 로그인: OAuth2 프로토콜에 따라 Azure에 로그인 권한을 부여해야 합니다.
    • 구독 선택: 만든 Azure Spring Apps 인스턴스의 구독 목록 번호를 선택합니다. 이 번호는 기본적으로 목록의 첫 번째 구독으로 설정됩니다. 기본 번호를 사용하는 경우 Enter 키를 직접 누릅니다.
    • Azure에서 기존 Azure Spring Apps 사용: y 키를 눌러 기존 Azure Spring Apps 인스턴스를 사용합니다.
    • 배포할 Azure Spring Apps 선택: 만든 Azure Spring Apps 인스턴스 수를 선택합니다. 기본 번호를 사용하는 경우 Enter 키를 직접 누릅니다.
    • Azure Spring Apps에서 기존 앱 <사용-인스턴스 이름>: y 키를 눌러 만든 앱을 사용합니다.
    • 위의 모든 구성을 저장하도록 확인합니다. y 키를 누릅니 . n 키를 누르면 구성이 POM 파일에 저장되지 않습니다.
  2. 다음 명령을 사용하여 앱을 배포합니다.

    ./mvnw azure-spring-apps:deploy
    

    다음 목록에서는 명령 상호 작용에 대해 설명합니다.

    • OAuth2 로그인: OAuth2 프로토콜에 따라 Azure에 로그인 권한을 부여해야 합니다.

    명령을 실행한 후 다음 로그 메시지에서 배포가 성공했음을 확인할 수 있습니다.

[INFO] Deployment Status: Running
[INFO]   InstanceName:simple-todo-api-default-15-xxxxxxxxx-xxxxx  Status:Running Reason:null       DiscoverStatus:N/A       
[INFO] Getting public url of app(simple-todo-api)...
[INFO] Application url: https://<your-Azure-Spring-Apps-instance-name>-simple-todo-api.azuremicroservices.io

5. 앱 유효성 검사

이제 RESTful API에 액세스하여 작동하는지 확인할 수 있습니다.

5.1. 액세스 토큰 요청

RESTful API는 Microsoft Entra ID로 보호되는 리소스 서버 역할을 합니다. 액세스 토큰을 획득하기 전에 Microsoft Entra ID에 다른 애플리케이션을 등록하고 이름이 지정된 ToDoWeb클라이언트 애플리케이션에 권한을 부여해야 합니다.

클라이언트 애플리케이션 등록

다음 단계를 사용하여 앱에 대한 권한을 추가하는 데 사용되는 Microsoft Entra ID에 애플리케이션을 ToDo 등록합니다.

  1. Azure Portal에 로그인합니다.

  2. 여러 테넌트에 액세스할 수 있는 경우 디렉터리 + 구독 필터()를 사용하여 애플리케이션을 등록할 테넌트를 선택합니다.

  3. Microsoft Entra ID를 검색하여 선택합니다.

  4. 관리 아래에서 앱 등록>새 등록을 선택합니다.

  5. 이름 필드에 애플리케이션의 이름(예: ToDoWeb)을 입력합니다. 이 이름은 앱의 사용자에게 표시될 수 있으며 나중에 변경할 수 있습니다.

  6. 지원되는 계정 유형의 경우 이 조직 디렉터리의 기본값 계정만 사용합니다.

  7. 등록을 선택하여 애플리케이션을 만듭니다.

  8. 개요 페이지에서 애플리케이션(클라이언트) ID 값을 찾은 후 나중에 사용할 수 있도록 기록합니다. 액세스 토큰을 획득하려면 필요합니다.

  9. API 사용 권한>사용 권한 추가>내 API를 선택합니다. 이전에 등록한 애플리케이션을 ToDo 선택한 다음 ToDo.Read, ToDo.WriteToDo.Delete 권한을 선택합니다. 권한 추가를 선택합니다.

  10. 테넌트 이름>에 대한 <관리자 동의 부여를 선택하여 추가한 권한에 대한 관리자 동의를 부여합니다.

    Screenshot of the Azure portal that shows the API permissions of a web application.

RESTful API에 액세스할 사용자 추가

다음 단계를 사용하여 Microsoft Entra 테넌트에 멤버 사용자를 만듭니다. 그런 다음 사용자는 RESTful API를 ToDo 통해 애플리케이션의 데이터를 관리할 수 있습니다.

  1. 관리에서 사용자>새 사용자>만들기를 선택합니다.

  2. 새 사용자 만들기 페이지에서 다음 정보를 입력합니다.

    • 사용자 계정 이름: 사용자의 이름을 입력합니다.
    • 표시 이름: 사용자의 표시 이름을 입력합니다.
    • 암호: 암호 상자에 제공된 자동 생성된 암호를 복사합니다.

    참고 항목

    새 사용자는 첫 번째 로그인 인증을 완료하고 암호를 업데이트해야 합니다. 그렇지 않으면 액세스 토큰을 받으면 오류가 발생 AADSTS50055: The password is expired 합니다.

    새 사용자가 로그인하면 작업 필수 프롬프트가 표시됩니다. 나중에 요청을 선택하여 유효성 검사를 건너뛸 수 있습니다.

  3. 검토 + 만들기를 선택하여 선택 항목을 검토합니다. 만들기를 선택하여 사용자를 만듭니다.

Swagger UI 권한 부여에 대한 OAuth2 구성 업데이트

다음 단계를 사용하여 Swagger UI 권한 부여에 대한 OAuth2 구성을 업데이트합니다. 그런 다음, 사용자에게 앱을 통해 ToDoWeb 액세스 토큰을 획득하도록 권한을 부여할 수 있습니다.

  1. Azure Portal에서 Microsoft Entra ID 테넌트 열기 및 등록된 ToDoWeb 앱으로 이동합니다.

  2. 관리에서 인증을 선택하고 플랫폼 추가를 선택한 다음 단일 페이지 애플리케이션을 선택합니다.

  3. 리디렉션 URI 필드에서 OAuth2 리디렉션 URL로 형식 <your-app-exposed-application-URL-or-endpoint>/swagger-ui/oauth2-redirect.html사용하고 구성을 선택합니다.

    Screenshot of the Azure portal that shows the Authentication page for Microsoft Entra ID.

2. Spring 프로젝트 준비

RESTful API 앱을 배포하기 위해 첫 번째 단계는 Spring 프로젝트가 로컬로 실행되도록 준비하는 것입니다.

다음 단계를 사용하여 앱을 로컬로 복제하고 실행합니다.

  1. 다음 명령을 사용하여 GitHub에서 샘플 프로젝트를 복제합니다.

    git clone https://github.com/Azure-Samples/ASA-Samples-Restful-Application.git
    
  2. 앱을 로컬로 실행하려면 RESTful API 노출의 단계를 완료하고 애플리케이션 구성 섹션을 먼저 업데이트한 다음 다음 명령을 사용하여 Maven에서 샘플 애플리케이션을 실행합니다.

    cd ASA-Samples-Restful-Application
    ./mvnw spring-boot:run
    

3. 클라우드 환경 준비

이 샘플 앱을 실행하는 데 필요한 기본 리소스는 Azure Spring Apps 인스턴스 및 Azure Database for PostgreSQL 인스턴스입니다. 다음 섹션에서는 이러한 리소스를 만드는 방법을 설명합니다.

3.1. Azure 포털

Azure Portal로 이동하여 자격 증명을 입력하여 포털에 로그인합니다. 기본 보기는 서비스 대시보드입니다.

3.2. Azure Spring Apps 인스턴스 만들기

다음 단계를 사용하여 서비스 인스턴스를 만듭니다.

  1. 포털의 모서리에서 리소스 만들기를 선택합니다.

  2. 컴퓨팅 Azure Spring Apps>선택합니다.

  3. 기본 양식을 작성합니다. 양식을 완료하기 위한 지침으로 다음 표를 사용합니다. 권장되는 플랜 값은 표준 사용량 및 전용(미리 보기)입니다.

    설정 제안 값 설명
    구독 구독 이름입니다. 서버에 사용할 Azure 구독입니다. 여러 구독이 있는 경우 리소스에 대한 요금이 청구될 구독을 선택합니다.
    리소스 그룹 myresourcegroup 새 리소스 그룹 이름 또는 구독의 기존 리소스 그룹 이름입니다.
    이름 myasa Azure Spring Apps 서비스를 식별하는 고유한 이름입니다. 이름은 4자에서 32자 사이여야 하며 소문자, 숫자 및 하이픈만 포함할 수 있습니다. 서비스 이름의 첫 글자는 문자여야 하며 마지막 문자는 문자 또는 숫자여야 합니다.
    계획 표준 사용량 및 전용(미리 보기) 가격 책정 계획은 인스턴스와 관련된 리소스 및 비용을 결정합니다.
    지역 사용자와 가장 가까운 지역입니다. 사용자에게 가장 가까운 위치입니다.
    Container Apps 환경 myenvironment 다른 서비스 및 리소스와 동일한 가상 네트워크를 공유할 Container Apps 환경 인스턴스를 선택하는 옵션입니다.

    Container Apps 환경 만들기에 대한 지침으로 다음 표를 사용합니다.

    설정 제안 값 설명
    환경 이름 myenvironment Azure Container Apps 환경 서비스를 식별하는 고유한 이름입니다.
    계획 소비 가격 책정 계획은 인스턴스와 관련된 리소스 및 비용을 결정합니다.
    영역 중복 사용 안 함 Azure 가용성 영역에서 Container Apps Environment 서비스를 만드는 옵션입니다.
  4. 검토 및 만들기를 선택하여 선택 항목을 검토합니다. 그런 다음 만들기를 선택하여 Azure Spring Apps 인스턴스를 프로비전합니다.

  5. 도구 모음에서 알림 아이콘(종)을 선택하여 배포 프로세스를 모니터링합니다. 배포가 완료되면 대시보드에 고정을 선택하여 Azure Portal 대시보드에서 이 서비스에 대한 타일을 서비스의 개요 페이지에 대한 바로 가기로 만들 수 있습니다.

  6. 리소스로 이동을 선택하여 서비스의 개요 페이지를 엽니다.

    Screenshot of the Azure portal that shows the Overview page with the Notifications page open.

Important

소비 워크로드 프로필에는 시작 비용 없이 종량제 청구 모델이 있습니다. 프로비전된 리소스에 따라 전용 워크로드 프로필에 대한 요금이 청구됩니다. 자세한 내용은 Azure Container AppsAzure Spring Apps 가격 책정의 워크로드 프로필을 참조하세요.

3.3. PostgreSQL 인스턴스 준비

다음 단계를 사용하여 Azure Database for PostgreSQL 서버를 만듭니다.

  1. Azure Portal로 이동하여 리소스 만들기를 선택합니다.

  2. 데이터베이스>PostgreSQL용 Azure Database를 차례로 선택합니다.

  3. 유연한 서버 배포 옵션을 선택합니다.

    Screenshot of the Azure portal that shows the Select Azure Database for PostgreSQL deployment option page.

  4. 다음 정보를 사용하여 기본 사항 탭을 작성합니다 .

    • 서버 이름: my-demo-pgsql
    • 지역: 미국 동부
    • PostgreSQL 버전: 14
    • 워크로드 유형: 개발
    • 고가용성 사용: 선택되지 않음
    • 인증 방법: PostgreSQL 인증만
    • 관리 사용자 이름: myadmin
    • 암호암호 확인: 암호를 입력합니다.
  5. 다음 정보를 사용하여 네트워킹 탭을 구성합니다.

    • 커넥트ivity 메서드: 공용 액세스(허용된 IP 주소)
    • Azure 내의 모든 Azure 서비스에서 이 서버로의 공용 액세스 허용: 선택됨
  6. 검토 + 만들기를 선택하여 선택 항목을 검토하고 만들기를 선택하여 서버를 프로비전합니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.

  7. Azure Portal에서 PostgreSQL 서버로 이동합니다. 개요 페이지에서 서버 이름 값을 찾은 다음 나중에 사용하기 위해 기록합니다. Azure Spring Apps에서 앱에 대한 환경 변수를 구성하려면 필요합니다.

  8. 탐색 메뉴에서 데이터베이스를 선택하여 데이터베이스를 만듭니다(예: 할 일).

    Screenshot of the Azure portal that shows the Databases page with the Create Database pane open.

3.4 PostgreSQL 인스턴스에 앱 인스턴스 커넥트

다음 단계를 사용하여 서비스 인스턴스를 연결합니다.

  1. Azure Portal에서 Azure Spring Apps 인스턴스로 이동합니다.

  2. 탐색 메뉴에서 앱을 연 다음 앱 만들기를 선택합니다.

  3. 만들기 페이지에서 앱 이름 simple-todo-api를 입력하고 배포 유형으로 Java 아티팩트를 선택합니다.

  4. 만들기를 선택하여 앱 만들기를 완료하고 앱을 선택하여 세부 정보를 봅니다.

  5. Azure Portal에서 만든 앱으로 이동합니다. 개요 페이지에서 엔드포인트 할당을 선택하여 앱에 대한 퍼블릭 엔드포인트를 노출합니다. 배포 후 앱에 액세스하기 위한 URL을 저장합니다.

  6. 만든 앱으로 이동하여 설정 확장하고 탐색 메뉴에서 구성을 선택한 다음 환경 변수를 선택하여 환경 변수를 설정합니다.

  7. PostgreSQL 연결에 대해 다음 환경 변수를 추가한 다음 저장을 선택하여 앱 구성 업데이트를 완료합니다. 자리 표시자를 이전에 만든 고유한 값으로 바꿔야 합니다.

    환경 변수
    SPRING_DATASOURCE_URL jdbc:postgresql://<your-PostgreSQL-server-name>:5432/<your-PostgreSQL-database-name>
    SPRING_DATASOURCE_USERNAME <your-PostgreSQL-admin-user>
    SPRING_DATASOURCE_PASSWORD <your-PostgreSQL-admin-password>

    Screenshot of the Azure portal that shows the Environment variables tab with all the values for the PostgreSQL connection.

3.5 RESTful API 노출

다음 단계를 사용하여 Microsoft Entra ID에서 RESTful API를 노출합니다.

  1. Azure Portal에 로그인합니다.

  2. 여러 테넌트에 액세스할 수 있는 경우 디렉터리 + 구독 필터()를 사용하여 애플리케이션을 등록할 테넌트를 선택합니다.

  3. Microsoft Entra ID를 검색하여 선택합니다.

  4. 관리 아래에서 앱 등록>새 등록을 선택합니다.

  5. 이름 필드에 애플리케이션의 이름(예: Todo)을 입력합니다. 이 이름은 앱의 사용자에게 표시될 수 있으며 나중에 변경할 수 있습니다.

  6. 지원되는 계정 유형의 경우 모든 조직 디렉터리(모든 Microsoft Entra 디렉터리 - 다중 테넌트) 및 개인 Microsoft 계정에서 계정을 선택합니다.

  7. 등록을 선택하여 애플리케이션을 만듭니다.

  8. 개요 페이지에서 애플리케이션(클라이언트) ID 값을 찾은 후 나중에 사용할 수 있도록 기록합니다. 이 프로젝트에 대한 YAML 구성 파일을 구성하려면 필요합니다.

  9. 관리에서 API 노출을 선택하고 페이지 시작 부분에서 애플리케이션 ID URI를 찾은 다음 추가를 선택합니다.

  10. 애플리케이션 ID URI 편집 페이지에서 제안된 애플리케이션 ID URI(api://{client ID})를 수락하거나 클라이언트 ID 대신 의미 있는 이름을 사용합니다(예: api://simple-todo저장).

  11. 관리에서 범위 추가 API>노출을 선택한 다음, 다음 정보를 입력합니다.

    • 범위 이름에 ToDo.Read를 입력합니다.
    • 동의할 수 있는 사용자에 대해 관리만 선택합니다.
    • 관리 동의 표시 이름을 보려면 ToDo 데이터 읽기를 입력합니다.
    • 관리 동의 설명을 보려면 인증된 사용자가 ToDo 데이터를 읽을 수 있도록 허용을 입력합니다.
    • 상태의 경우 계속 사용하도록 설정합니다.
    • 범위 추가를 선택합니다.
  12. 이전 단계를 반복하여 ToDo.Write 및 ToDo.Delete의 다른 두 범위를 추가합니다.

    Screenshot of the Azure portal that shows the Expose an API page of a RESTful API application.

3.6. 애플리케이션 구성 업데이트

다음 단계를 사용하여 RESTful API 애플리케이션과의 관계를 설정하기 위해 Microsoft Entra 등록 애플리케이션 정보를 사용하도록 YAML 파일을 업데이트합니다.

  1. 앱에 대한 src/기본/resources/application.yml 파일을 찾습니다simple-todo-api. 다음 예제와 일치하도록 섹션의 spring.cloud.azure.active-directory 구성을 업데이트합니다. 자리 표시자를 이전에 만든 값으로 바꿔야 합니다.

    spring:
      cloud:
        azure:
          active-directory:
            profile:
              tenant-id: <tenant>
            credential:
              client-id: <your-application-ID-of-ToDo>
            app-id-uri: <your-application-ID-URI-of-ToDo>
    

    참고 항목

    v1.0 토큰에서 구성에는 API의 클라이언트 ID가 필요하지만 v2.0 토큰에서는 요청에서 클라이언트 ID 또는 애플리케이션 ID URI를 사용할 수 있습니다. 대상 그룹 유효성 검사를 제대로 완료하도록 둘 다 구성할 수 있습니다.

    허용되는 tenant-id 값은 , commonorganizations, consumers또는 테넌트 ID입니다. 이러한 값에 대한 자세한 내용은 오류 AADSTS50020 - ID 공급자의 사용자 계정이 테넌트에 존재하지 않는 잘못된 엔드포인트(개인 및 조직 계정) 사용 섹션을 참조하세요. 단일 테넌트 앱을 변환하는 방법에 대한 자세한 내용은 Microsoft Entra ID에서 단일 테넌트 앱을 다중 테넌트로 변환을 참조하세요.

  2. 다음 명령을 사용하여 샘플 프로젝트를 다시 빌드합니다.

    ./mvnw clean package
    

4. Azure Spring Apps에 앱 배포

이제 Azure Spring Apps에 앱을 배포할 수 있습니다.

다음 단계를 사용하여 Azure Spring Apps용 Maven 플러그 인을 사용하여 배포합니다.

  1. 전체 디렉터리로 이동한 다음, 다음 명령을 실행하여 Azure Spring Apps에서 앱을 구성합니다.

    ./mvnw com.microsoft.azure:azure-spring-apps-maven-plugin:1.19.0:config
    

    다음 목록에서는 명령 상호 작용에 대해 설명합니다.

    • OAuth2 로그인: OAuth2 프로토콜에 따라 Azure에 로그인 권한을 부여해야 합니다.
    • 구독 선택: 만든 Azure Spring Apps 인스턴스의 구독 목록 번호를 선택합니다. 이 번호는 기본적으로 목록의 첫 번째 구독으로 설정됩니다. 기본 번호를 사용하는 경우 Enter 키를 직접 누릅니다.
    • Azure에서 기존 Azure Spring Apps 사용: y 키를 눌러 기존 Azure Spring Apps 인스턴스를 사용합니다.
    • 배포할 Azure Spring Apps 선택: 만든 Azure Spring Apps 인스턴스 수를 선택합니다. 기본 번호를 사용하는 경우 Enter 키를 직접 누릅니다.
    • Azure Spring Apps에서 기존 앱 <사용-인스턴스 이름>: y 키를 눌러 만든 앱을 사용합니다.
    • 위의 모든 구성을 저장하도록 확인합니다. y 키를 누릅니 . n 키를 누르면 구성이 POM 파일에 저장되지 않습니다.
  2. 다음 명령을 사용하여 앱을 배포합니다.

    ./mvnw azure-spring-apps:deploy
    

    다음 목록에서는 명령 상호 작용에 대해 설명합니다.

    • OAuth2 로그인: OAuth2 프로토콜에 따라 Azure에 로그인 권한을 부여해야 합니다.

    명령을 실행한 후 다음 로그 메시지에서 배포가 성공했음을 확인할 수 있습니다.

[INFO] Deployment(default) is successfully created
[INFO] Starting Spring App after deploying artifacts...
[INFO] Deployment Status: Running
[INFO]   InstanceName:demo--default-xxxxxxx-xxxxxxxxx-xxxxx  Status:Running Reason:null       DiscoverStatus:NONE
[INFO] Getting public url of app(demo)...
[INFO] Application url: https://demo.<unique-identifier>.<region-name>.azurecontainerapps.io

5. 앱 유효성 검사

이제 RESTful API에 액세스하여 작동하는지 확인할 수 있습니다.

5.1. 액세스 토큰 요청

RESTful API는 Microsoft Entra ID로 보호되는 리소스 서버 역할을 합니다. 액세스 토큰을 획득하기 전에 Microsoft Entra ID에 다른 애플리케이션을 등록하고 이름이 지정된 ToDoWeb클라이언트 애플리케이션에 권한을 부여해야 합니다.

클라이언트 애플리케이션 등록

다음 단계를 사용하여 앱에 대한 권한을 추가하는 데 사용되는 Microsoft Entra ID에 애플리케이션을 ToDo 등록합니다.

  1. Azure Portal에 로그인합니다.

  2. 여러 테넌트에 액세스할 수 있는 경우 디렉터리 + 구독 필터()를 사용하여 애플리케이션을 등록할 테넌트를 선택합니다.

  3. Microsoft Entra ID를 검색하여 선택합니다.

  4. 관리 아래에서 앱 등록>새 등록을 선택합니다.

  5. 이름 필드에 애플리케이션의 이름(예: ToDoWeb)을 입력합니다. 이 이름은 앱의 사용자에게 표시될 수 있으며 나중에 변경할 수 있습니다.

  6. 지원되는 계정 유형의 경우 이 조직 디렉터리의 기본값 계정만 사용합니다.

  7. 등록을 선택하여 애플리케이션을 만듭니다.

  8. 개요 페이지에서 애플리케이션(클라이언트) ID 값을 찾은 후 나중에 사용할 수 있도록 기록합니다. 액세스 토큰을 획득하려면 필요합니다.

  9. API 사용 권한>사용 권한 추가>내 API를 선택합니다. 이전에 등록한 애플리케이션을 ToDo 선택한 다음 ToDo.Read, ToDo.WriteToDo.Delete 권한을 선택합니다. 권한 추가를 선택합니다.

  10. 테넌트 이름>에 대한 <관리자 동의 부여를 선택하여 추가한 권한에 대한 관리자 동의를 부여합니다.

    Screenshot of the Azure portal that shows the API permissions of a web application.

RESTful API에 액세스할 사용자 추가

다음 단계를 사용하여 Microsoft Entra 테넌트에 멤버 사용자를 만듭니다. 그런 다음 사용자는 RESTful API를 ToDo 통해 애플리케이션의 데이터를 관리할 수 있습니다.

  1. 관리에서 사용자>새 사용자>만들기를 선택합니다.

  2. 새 사용자 만들기 페이지에서 다음 정보를 입력합니다.

    • 사용자 계정 이름: 사용자의 이름을 입력합니다.
    • 표시 이름: 사용자의 표시 이름을 입력합니다.
    • 암호: 암호 상자에 제공된 자동 생성된 암호를 복사합니다.

    참고 항목

    새 사용자는 첫 번째 로그인 인증을 완료하고 암호를 업데이트해야 합니다. 그렇지 않으면 액세스 토큰을 받으면 오류가 발생 AADSTS50055: The password is expired 합니다.

    새 사용자가 로그인하면 작업 필수 프롬프트가 표시됩니다. 나중에 요청을 선택하여 유효성 검사를 건너뛸 수 있습니다.

  3. 검토 + 만들기를 선택하여 선택 항목을 검토합니다. 만들기를 선택하여 사용자를 만듭니다.

Swagger UI 권한 부여에 대한 OAuth2 구성 업데이트

다음 단계를 사용하여 Swagger UI 권한 부여에 대한 OAuth2 구성을 업데이트합니다. 그런 다음, 사용자에게 앱을 통해 ToDoWeb 액세스 토큰을 획득하도록 권한을 부여할 수 있습니다.

  1. Azure Portal에서 Microsoft Entra ID 테넌트 열기 및 등록된 ToDoWeb 앱으로 이동합니다.

  2. 관리에서 인증을 선택하고 플랫폼 추가를 선택한 다음 단일 페이지 애플리케이션을 선택합니다.

  3. 리디렉션 URI 필드에서 OAuth2 리디렉션 URL로 형식 <your-app-exposed-application-URL-or-endpoint>/swagger-ui/oauth2-redirect.html사용하고 구성을 선택합니다.

    Screenshot of the Azure portal that shows the Authentication page for Microsoft Entra ID.

액세스 토큰 가져오기

다음 단계를 사용하여 OAuth 2.0 권한 부여 코드 흐름 메서드를 사용하여 Microsoft Entra ID로 액세스 토큰을 가져온 다음, 앱의 RESTful API에 ToDo 액세스합니다.

  1. 앱에서 노출하는 URL을 연 다음 권한 부여를 선택하여 OAuth2 인증을 준비합니다.

  2. 사용 가능한 권한 부여 창에서 client_id 필드에 앱ToDoWeb 클라이언트 ID를 입력하고, 범위 필드의 모든 범위를 선택하고, client_secret 필드를 무시한 다음, 권한을 선택하여 Microsoft Entra 로그인 페이지로 리디렉션합니다.

이전 사용자로 로그인을 완료하면 사용 가능한 권한 부여 창으로 돌아갑니다.

5.2. RESTful API에 액세스

다음 단계를 사용하여 Swagger UI에서 앱의 ToDo RESTful API에 액세스합니다.

  1. API POST /api/simple-todo/lists를 선택한 다음, 사용해 보세요. 다음 요청 본문을 입력한 다음 실행을 선택하여 ToDo 목록을 만듭니다.

    {
      "name": "My List"
    }
    

    실행이 완료되면 다음 응답 본문이 표시됩니다.

    {
      "id": "<ID-of-the-ToDo-list>",
      "name": "My List",
      "description": null
    }
    
  2. API POST /api/simple-todo/lists/{listId}/items를 선택한 다음, 사용해 보세요. listId의 경우 이전에 만든 ToDo 목록 ID를 입력하고 다음 요청 본문을 입력한 다음 실행을 선택하여 ToDo 항목을 만듭니다.

    {
      "name": "My first ToDo item", 
      "listId": "<ID-of-the-ToDo-list>",
      "state": "todo"
    }
    

    이 작업은 다음 ToDo 항목을 반환합니다.

    {
      "id": "<ID-of-the-ToDo-item>",
      "listId": "<ID-of-the-ToDo-list>",
      "name": "My first ToDo item",
      "description": null,
      "state": "todo",
      "dueDate": "2023-07-11T13:59:24.9033069+08:00",
      "completedDate": null
    }
    
  3. API GET /api/simple-todo/lists를 선택한 다음, 실행을 선택하여 ToDo 목록을 쿼리합니다. 이 작업은 다음 ToDo 목록을 반환합니다.

    [
      {
        "id": "<ID-of-the-ToDo-list>",
        "name": "My List",
        "description": null
      }
    ]
    
  4. API GET /api/simple-todo/lists/{listId}/items를 선택한 다음, 사용해 보세요. listId의 경우 이전에 만든 ToDo 목록 ID를 입력한 다음 실행을 선택하여 ToDo 항목을 쿼리합니다. 이 작업은 다음 ToDo 항목을 반환합니다.

    [
      {
        "id": "<ID-of-the-ToDo-item>",
        "listId": "<ID-of-the-ToDo-list>",
        "name": "My first ToDo item",
        "description": null,
        "state": "todo",
        "dueDate": "2023-07-11T13:59:24.903307+08:00",
        "completedDate": null
      }
    ]
    
  5. API PUT /api/simple-todo/lists/{listId}/items/{itemId}를 선택한 다음, 사용해 보세요. listId의 경우 ToDo 목록 ID를 입력합니다. itemId의 경우 ToDo 항목 ID를 입력하고 다음 요청 본문을 입력한 다음 실행을 선택하여 ToDo 항목을 업데이트합니다.

    {
      "id": "<ID-of-the-ToDo-item>",
      "listId": "<ID-of-the-ToDo-list>",
      "name": "My first ToDo item",
      "description": "Updated description.",
      "dueDate": "2023-07-11T13:59:24.903307+08:00",
      "state": "inprogress"
    }
    

    이 작업은 업데이트된 다음 ToDo 항목을 반환합니다.

    {
      "id": "<ID-of-the-ToDo-item>",
      "listId": "<ID-of-the-ToDo-list>",
      "name": "My first ToDo item",
      "description": "Updated description.",
      "state": "inprogress",
      "dueDate": "2023-07-11T05:59:24.903307Z",
      "completedDate": null
    }
    
  6. API DELETE /api/simple-todo/lists/{listId}/items/{itemId}를 선택한 다음, 사용해 보세요. listId의 경우 ToDo 목록 ID를 입력합니다. itemId의 경우 ToDo 항목 ID를 입력한 다음 실행을 선택하여 ToDo 항목을 삭제합니다. 서버 응답 코드가 .인 것을 볼 수 있습니다 204.

6. 리소스 정리

리소스 그룹의 모든 리소스를 포함하고 있는 Azure 리소스 그룹을 삭제할 수 있습니다.

다음 단계를 사용하여 새로 만든 서비스를 포함하여 전체 리소스 그룹을 삭제합니다.

  1. Azure Portal에서 리소스 그룹을 찾습니다.

  2. 탐색 메뉴에서 리소스 그룹을 선택합니다. 그런 다음 리소스 그룹의 이름(예 : myresourcegroup)을 선택합니다.

  3. 리소스 그룹 페이지에서 삭제를 선택합니다. 텍스트 상자에 리소스 그룹의 이름을 입력하여 삭제를 확인합니다(예: myresourcegroup). 그런 다음, 삭제를 선택합니다.

다음 단계를 사용하여 새로 만든 서비스를 포함하여 전체 리소스 그룹을 삭제합니다.

  1. Azure Portal에서 리소스 그룹을 찾습니다.

  2. 탐색 메뉴에서 리소스 그룹을 선택합니다. 그런 다음 리소스 그룹의 이름(예 : myresourcegroup)을 선택합니다.

  3. 리소스 그룹 페이지에서 삭제를 선택합니다. 텍스트 상자에 리소스 그룹의 이름을 입력하여 삭제를 확인합니다(예: myresourcegroup). 그런 다음, 삭제를 선택합니다.

7. 다음 단계

자세한 내용은 다음 문서를 참조하세요.