Visual Studio를 사용하여 Azure Storage에 함수 연결

Azure Functions를 사용하면 자체 통합 코드를 작성하지 않고도 함수에 Azure 서비스 및 기타 리소스를 연결할 수 있습니다. 입력과 출력을 모두 나타내는 이러한 바인딩은 함수 정의 내에서 선언됩니다. 바인딩의 데이터는 함수에 매개 변수로 제공됩니다. 트리거는 특수한 형식의 입력 바인딩입니다. 함수에는 하나의 트리거만 있지만, 여러 개의 입력 및 출력 바인딩이 있을 수 있습니다. 자세한 내용은 Azure Functions 트리거 및 바인딩 개념을 참조하세요.

이 문서에서는 Visual Studio를 사용하여 이전 빠른 시작 문서에서 만든 함수를 Azure Storage에 연결하는 방법을 보여 줍니다. 이 함수에 추가되는 출력 바인딩은 HTTP 요청의 데이터를 Azure Queue storage 큐의 메시지에 씁니다.

대부분의 바인딩은 Functions에서 바인딩된 서비스에 액세스할 때 사용할 저장된 연결 문자열이 필요합니다. 이 부분을 간편하게 해결하려면 함수 앱으로 만든 Storage 계정을 사용합니다. 이 계정에 대한 연결은 이미 AzureWebJobsStorage 앱 설정에 저장되어 있습니다.

필수 조건

이 문서를 시작하기 전에 다음을 수행해야 합니다.

  • Visual Studio 빠른 시작의 1부를 완료합니다.
  • Azure Storage Explorer를 설치합니다. Storage Explorer는 출력 바인딩에서 생성하는 큐 메시지를 검토하는 데 사용하는 도구입니다. Storage Explorer는 macOS, Windows, Linux 기반 운영 체제에서 지원됩니다.
  • Visual Studio에서 Azure 구독에 로그인합니다.

함수 앱 설정 다운로드

이전의 빠른 시작 문서에서는 Azure에서 필요한 스토리지 계정과 함께 함수 앱을 만들었습니다. 이 계정의 연결 문자열은 Azure의 앱 설정에 안전하게 저장됩니다. 이 문서에서는 같은 계정의 Storage 큐에 메시지를 작성합니다. 함수를 로컬로 실행할 때 Storage 계정에 연결하려면 앱 설정을 local.settings.json 파일에 다운로드해야 합니다.

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 게시를 선택합니다.

  2. 호스팅 아래의 게시 탭에서 세 개의 점(...)을 확장하고 Azure App Service 설정 관리를 선택합니다.

    애플리케이션 설정 편집

  3. AzureWebJobsStorage 아래에서 원격 문자열 값을 로컬에 복사한 다음, 확인을 선택합니다.

이제 연결에 대한 AzureWebJobsStorage 설정을 사용하는 스토리지 바인딩에서 로컬로 실행할 때 Queue 스토리지에 연결할 수 있습니다.

바인딩 확장 등록

Queue 스토리지 출력 바인딩을 사용하므로 먼저 Storage 바인딩 확장을 설치한 후에 프로젝트를 실행해야 합니다. HTTP 및 타이머 트리거를 제외하고는 바인딩이 확장 패키지로 구현됩니다.

  1. 도구 메뉴에서 NuGet 패키지 관리자>패키지 관리자 콘솔을 선택합니다.

  2. 콘솔에서 다음 Install-Package 명령을 실행하여 Storage 확장을 설치합니다.

    Install-Package Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues
    

이제 프로젝트에 스토리지 출력 바인딩을 추가할 수 있습니다.

출력 바인딩 추가

C# 프로젝트에서 바인딩은 함수 메서드의 바인딩 특성으로 정의됩니다. 특정 정의는 앱이 프로세스 내에서 실행되는지(C# 클래스 라이브러리) 또는 격리된 작업자 프로세스에서 실행되는지에 따라 달라집니다.

HttpExample.cs 프로젝트 파일을 열고 다음 MultiResponse 클래스를 추가합니다.

public class MultiResponse
{
    [QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
    public string[] Messages { get; set; }
    public HttpResponseData HttpResponse { get; set; }
}

MultiResponse 클래스를 사용하면 outqueue라는 스토리지 큐와 HTTP 성공 메시지에 쓸 수 있습니다. QueueOutput 특성이 문자열 배열에 적용되므로 여러 메시지를 큐로 보낼 수 있습니다.

Connection 속성은 스토리지 계정의 연결 문자열을 설정합니다. 이 경우 기본 스토리지 계정을 이미 사용하고 있으므로 Connection를 생략할 수 있습니다.

출력 바인딩을 사용하는 코드 추가

바인딩이 정의되면 바인딩의 name을 사용하여 함수 시그니처의 특성으로 액세스할 수 있습니다. 출력 바인딩을 사용하면 인증을 받거나 큐 참조를 가져오거나 데이터를 쓸 때 Azure Storage SDK 코드를 사용할 필요가 없습니다. Functions 런타임 및 큐 출력 바인딩이 이러한 작업을 알아서 처리합니다.

기존 HttpExample 클래스를 다음 코드로 바꿉니다.

    [Function("HttpExample")]
    public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
        FunctionContext executionContext)
    {
        var logger = executionContext.GetLogger("HttpExample");
        logger.LogInformation("C# HTTP trigger function processed a request.");

        var message = "Welcome to Azure Functions!";

        var response = req.CreateResponse(HttpStatusCode.OK);
        response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
        response.WriteString(message);

        // Return a response to both HTTP trigger and storage output binding.
        return new MultiResponse()
        {
            // Write a single message.
            Messages = new string[] { message },
            HttpResponse = response
        };
    }
}

로컬에서 함수 실행

  1. 함수를 실행하려면 Visual Studio에서 F5를 누릅니다. 도구에서 HTTP 요청을 처리할 수 있도록 방화벽 예외를 사용하도록 설정해야 할 수도 있습니다. 함수를 로컬로 실행하는 경우 권한 부여 수준이 적용되지 않습니다.

  2. Azure Functions 런타임 출력에서 함수의 URL을 복사합니다.

    Azure 로컬 런타임

  3. HTTP 요청의 URL을 브라우저의 주소 표시줄에 붙여넣고 요청을 실행합니다. 다음 이미지에서는 함수가 반환한 로컬 GET 요청에 대한 응답을 브라우저에 보여 줍니다.

    브라우저의 localhost 함수 응답

  4. 디버깅을 중지하려면 Visual Studio에서 Shift+F5를 누릅니다.

출력 바인딩이 처음 사용되면 Functions 런타임에서 outqueue라는 새 큐가 스토리지 계정에 만들어집니다. Storage Explorer를 사용하여 새 메시지와 함께 큐가 만들어졌는지 확인합니다.

Storage Explorer를 계정에 연결

Azure Storage Explorer를 이미 설치했고 Azure 계정에 연결한 경우 이 섹션을 건너뜁니다.

  1. Azure Storage Explorer 도구를 실행하여 왼쪽에 있는 연결 아이콘을 선택한 다음, 계정 추가를 선택합니다.

    Microsoft Azure Storage Explorer에 Azure 계정을 추가하는 방법의 스크린샷.

  2. 연결 대화 상자에서 Azure 계정 추가, Azure 환경, 로그인...을 차례대로 선택합니다.

    Azure 계정 로그인 창의 스크린샷.

계정에 성공적으로 로그인하면 계정에 연결된 모든 Azure 구독이 표시됩니다. 구독을 선택한 후 탐색기 열기를 선택합니다.

출력 큐 검토

  1. Storage Explorer에서 노드를 확장한 다음, 이름이 outqueue인 큐를 선택합니다.

    이 큐에는 HTTP 트리거 함수를 실행했을 때 만들어진 큐 출력 바인딩 메시지가 포함되어 있습니다. 기본 nameAzure로 함수를 호출했다면 큐 메시지는 함수에 전달된 이름: Azure입니다.

    Azure Storage Explorer에 표시된 큐 메시지의 스크린샷.

  2. 함수를 다시 실행하고 다른 요청을 보내면 큐에 새 메시지가 표시됩니다.

이제 업데이트된 함수 앱을 Azure에 다시 게시할 차례입니다.

업데이트된 앱 다시 배포 및 확인

  1. 솔루션 탐색기에서 마우스 오른쪽 단추로 프로젝트를 클릭하고, 게시를 선택한 다음, 게시를 선택하여 해당 프로젝트를 Azure에 다시 게시합니다.

  2. 배포가 완료되면 브라우저를 다시 사용하여 다시 배포된 함수를 테스트할 수 있습니다. 이전과 마찬가지로 &name=<yourname> 쿼리 문자열을 URL에 추가합니다.

  3. 다시 스토리지 큐의 메시지를 보고 출력 바인딩이 큐에 새 메시지를 다시 생성하는지 확인합니다.

리소스 정리

이 컬렉션의 다른 빠른 시작은 이 빠른 시작을 기반으로 구성됩니다. 이후의 빠른 시작, 자습서 또는 기타 이 빠른 시작에서 만든 서비스를 사용하여 작업하려는 경우 이 빠른 시작에서 만든 리소스를 정리하지 않습니다.

Azure에서 리소스란 함수 앱, 함수, 스토리지 계정 등을 의미합니다. 리소스는 리소스 그룹으로 그룹화되며 그룹을 삭제하면 그룹의 모든 항목을 삭제할 수 있습니다.

이러한 빠른 시작을 완료하기 위해 리소스를 만들었습니다. 이러한 리소스에 대한 요금이 계정 상태서비스 가격 책정에 따라 청구될 수 있습니다. 리소스가 더 이상 필요하지 않게 되면 다음과 같이 삭제합니다.

  1. Azure Portal에서 리소스 그룹 페이지로 이동합니다.

    함수 앱 페이지에서 해당 페이지로 이동하려면 개요 탭을 선택한 다음, 리소스 그룹 아래의 링크를 선택합니다.

    함수 앱 페이지에서 삭제할 리소스 그룹 선택을 보여주는 스크린샷.

    대시보드에서 해당 페이지로 이동하려면 리소스 그룹을 선택한 다음, 이 문서에 사용한 리소스 그룹을 선택합니다.

  2. 리소스 그룹 페이지에서 포함된 리소스 목록을 검토하고 삭제하려는 항목인지 확인합니다.

  3. 리소스 그룹 삭제를 선택하고 지시를 따릅니다.

    삭제하는 데 몇 분 정도 걸릴 수 있습니다. 완료되면 알림이 잠시 표시됩니다. 또한 페이지 위쪽의 종 모양 아이콘을 선택하여 알림을 확인할 수도 있습니다.

다음 단계

Storage 큐에 데이터를 쓰도록 HTTP 트리거 함수를 업데이트했습니다. Functions 개발에 대한 자세한 내용은 Visual Studio를 사용하여 Azure Functions 개발을 참조하세요.

다음으로, 함수 앱에 Application Insights 모니터링을 사용하도록 설정해야 합니다.