Azure Functions에서 HTTP 끝점 사용자 지정Customize an HTTP endpoint in Azure Functions

이 문서에서는 Azure Functions를 사용 하 여 확장성이 뛰어난 Api를 빌드하는 방법을 알아봅니다.In this article, you learn how Azure Functions allows you to build highly scalable APIs. Azure Functions에는 Node.JS, C# 등을 비롯한 다양한 언어로 쉽게 엔드포인트를 작성할 수 있도록 하는 기본 제공 HTTP 트리거 및 바인딩 컬렉션이 제공됩니다.Azure Functions comes with a collection of built-in HTTP triggers and bindings, which make it easy to author an endpoint in a variety of languages, including Node.JS, C#, and more. 이 문서에서는 API 디자인의 특정 작업을 처리 하도록 HTTP 트리거를 사용자 지정 합니다.In this article, you will customize an HTTP trigger to handle specific actions in your API design. 또한 Azure Functions 프록시와 통합하고 모의 API를 설정하여 API를 확장할 준비를 진행합니다.You will also prepare for growing your API by integrating it with Azure Functions Proxies and setting up mock APIs. 이러한 모든 작업은 Functions의 서버리스 컴퓨팅 환경에서 수행되므로 리소스 확장 문제를 걱정할 필요가 없으며 API 논리에만 집중하면 됩니다.All of this is accomplished on top of the Functions serverless compute environment, so you don't have to worry about scaling resources - you can just focus on your API logic.

필수 구성 요소Prerequisites

이 항목에서는 Azure Portal에서 첫 번째 함수 만들기에서 만든 리소스를 시작점으로 사용합니다.This topic uses as its starting point the resources created in Create your first function from the Azure portal. 아직 만들지 않았다면 지금 이러한 단계를 수행하여 함수 앱을 만듭니다.If you haven't already done so, please complete these steps now to create your function app.

결과 함수는이 문서의 나머지 부분에 사용 됩니다.The resulting function will be used for the rest of this article.

Azure에 로그인Sign in to Azure

Azure Portal을 엽니다.Open the Azure portal. 이렇게 하려면 Azure 계정으로 https://portal.azure.com에 로그인합니다.To do this, sign in to https://portal.azure.com with your Azure account.

HTTP 함수 사용자 지정Customize your HTTP function

기본적으로 HTTP 트리거 함수는 모든 HTTP 메서드를 허용하도록 구성됩니다.By default, your HTTP-triggered function is configured to accept any HTTP method. http://<yourapp>.azurewebsites.net/api/<funcname>?code=<functionkey> 형식의 기본 URL도 있습니다.There is also a default URL of the form http://<yourapp>.azurewebsites.net/api/<funcname>?code=<functionkey>. 빠른 시작을 진행한 경우 <funcname>이 "HttpTriggerJS1"과 같을 수 있습니다.If you followed the quickstart, then <funcname> probably looks something like "HttpTriggerJS1". 이 섹션에서는 대신 /api/hello 경로에 대한 GET 요청에만 응답하도록 함수를 수정할 것입니다.In this section, you will modify the function to respond only to GET requests against /api/hello route instead.

  1. Azure Portal에서 해당 함수로 이동합니다.Navigate to your function in the Azure portal. 왼쪽 탐색 영역에서 통합을 선택합니다.Select Integrate in the left navigation.

    HTTP 함수 사용자 지정

  2. 테이블에 지정된 것처럼 HTTP 트리거 설정을 사용합니다.Use the HTTP trigger settings as specified in the table.

    필드Field 샘플 값Sample value DescriptionDescription
    허용된 HTTP 메서드Allowed HTTP methods 선택된 메서드Selected methods 이 함수를 호출하는 데 사용할 수 있는 HTTP 메서드 결정Determines what HTTP methods may be used to invoke this function
    선택한 HTTP 메서드Selected HTTP methods 가져오기GET 선택한 HTTP 메서드만 이 함수를 호출하는 데 사용할 수 있도록 허용Allows only selected HTTP methods to be used to invoke this function
    경로 템플릿Route template /hello/hello 이 함수를 호출하는 데 사용할 경로 결정Determines what route is used to invoke this function
    권한 부여 수준Authorization Level AnonymousAnonymous 선택 사항: API 키 없이도 함수가 액세스할 수 있게 됩니다Optional: Makes your function accessible without an API key

    참고

    /api 기본 경로 접두사는 전역 설정에 의해 처리되므로 경로 템플릿에 포함하지 않았습니다.Note that you did not include the /api base path prefix in the route template, as this is handled by a global setting.

  3. Save을 클릭합니다.Click Save.

Azure Functions HTTP 바인딩에서 HTTP 함수 사용자 지정에 대해 자세히 알아보세요.You can learn more about customizing HTTP functions in Azure Functions HTTP bindings.

API 테스트Test your API

다음에는 함수를 테스트하여 새 API 화면에서 작동하는 모습을 확인합니다.Next, test your function to see it working with the new API surface.

  1. 왼쪽 탐색 영역에서 함수 이름을 클릭하여 개발 페이지로 다시 이동합니다.Navigate back to the development page by clicking on the function's name in the left navigation.
  2. 함수 URL 가져오기를 클릭하고 URL을 복사합니다.Click Get function URL and copy the URL. 이제 /api/hello 경로가 사용되는 것을 볼 수 있습니다.You should see that it uses the /api/hello route now.
  3. 새 브라우저 탭 또는 기본 REST 클라이언트에 URL을 복사합니다.Copy the URL into a new browser tab or your preferred REST client. 브라우저는 기본적으로 GET을 사용합니다.Browsers will use GET by default.
  4. URL의 검색어 문자열에 매개 변수를 추가합니다(예: /api/hello/?name=John).Add parameters to the query string in your URL e.g. /api/hello/?name=John
  5. 'Enter' 키를 눌러 작동하는지 확인합니다.Hit 'Enter' to confirm that it is working. "Hello John"이라는 응답이 표시됩니다.You should see the response "Hello John"
  6. 다른 HTTP 메서드로 엔드포인트를 호출하여 함수가 실행되지 않는지 확인할 수도 있습니다.You can also try calling the endpoint with another HTTP method to confirm that the function is not executed. 이 경우 cURL, Postman 또는 Fiddler와 같은 REST 클라이언트를 사용해야 합니다.For this, you will need to use a REST client, such as cURL, Postman, or Fiddler.

프록시 개요Proxies overview

다음 섹션에서는 프록시를 통해 API를 노출합니다.In the next section, you will surface your API through a proxy. Azure Functions 프록시를 사용하면 요청을 다른 리소스로 전달할 수 있습니다.Azure Functions Proxies allows you to forward requests to other resources. HTTP 트리거를 사용할 때처럼 HTTP 엔드포인트를 정의하지만, 해당 엔드포인트가 호출될 때 실행할 코드를 작성하지 않고 원격 구현에 대한 URL을 제공합니다.You define an HTTP endpoint just like with HTTP trigger, but instead of writing code to execute when that endpoint is called, you provide a URL to a remote implementation. 이렇게 하면 여러 API 원본을 클라이언트가 쉽게 사용할 수 있는 단일 API 화면으로 작성할 수 있습니다.This allows you to compose multiple API sources into a single API surface which is easy for clients to consume. 이러한 방식은 API를 마이크로 서비스로 빌드하려는 경우에 특히 유용합니다.This is particularly useful if you wish to build your API as microservices.

프록시는 다음과 같은 HTTP 리소스를 가리킬 수 있습니다.A proxy can point to any HTTP resource, such as:

프록시에 대한 자세한 내용은 Azure Functions 프록시 사용을 참조하세요.To learn more about proxies, see Working with Azure Functions Proxies.

첫 번째 프록시 만들기Create your first proxy

이 섹션에서는 전체 API에 대한 프런트 엔드로 사용되는 새 프록시를 만듭니다.In this section, you will create a new proxy which serves as a frontend to your overall API.

프런트 엔드 환경 설정Setting up the frontend environment

함수 앱 만들기 단계를 반복하여 프록시를 만들 새 함수 앱을 만듭니다.Repeat the steps to Create a function app to create a new function app in which you will create your proxy. 이 새로운 앱의 URL은 API에 대한 프런트 엔드로 사용되고 이전에 편집하던 함수 앱은 백 엔드로 사용됩니다.This new app's URL will serve as the frontend for our API, and the function app you were previously editing will serve as a backend.

  1. 포털의 새 프런트 엔드 함수 앱으로 이동합니다.Navigate to your new frontend function app in the portal.

  2. 플랫폼 기능을 선택하고 애플리케이션 설정을 선택합니다.Select Platform Features and choose Application Settings.

  3. 키/값 쌍이 저장된 애플리케이션 설정으로 스크롤하고 "HELLO_HOST" 키로 새 설정을 만듭니다.Scroll down to Application settings where key/value pairs are stored and create a new setting with key "HELLO_HOST". 해당 값을 백 엔드 함수 앱의 호스트(예: <YourBackendApp>.azurewebsites.net)로 설정합니다.Set its value to the host of your backend function app, such as <YourBackendApp>.azurewebsites.net. 이것은 HTTP 함수를 테스트할 때 이전에 복사한 URL의 일부입니다.This is part of the URL that you copied earlier when testing your HTTP function. 나중에 구성에서 이 설정을 참조할 수 있습니다.You'll reference this setting in the configuration later.

    참고

    프록시에 대한 하드 코드된 환경 종속성을 방지하려면 호스트 구성에 대해 앱 설정이 권장됩니다.App settings are recommended for the host configuration to prevent a hard-coded environment dependency for the proxy. 앱 설정을 사용할 경우 환경 간에 프록시 구성을 이동할 수 있고 환경 관련 앱 설정이 적용됩니다.Using app settings means that you can move the proxy configuration between environments, and the environment-specific app settings will be applied.

  4. Save을 클릭합니다.Click Save.

프런트 엔드에 프록시 만들기Creating a proxy on the frontend

  1. 포털의 프런트 엔드 함수 앱으로 다시 이동합니다.Navigate back to your frontend function app in the portal.

  2. 왼쪽 탐색 영역에서 "프록시" 옆에 있는 '+'(더하기) 기호를 클릭합니다.In the left-hand navigation, click the plus sign '+' next to "Proxies". 프록시 만들기Creating a proxy

  3. 표에 지정된 것처럼 프록시 설정을 사용합니다.Use proxy settings as specified in the table.

    필드Field 샘플 값Sample value DescriptionDescription
    이름Name HelloProxyHelloProxy 관리에 대해서만 사용되는 이름A friendly name used only for management
    경로 템플릿Route template /api/remotehello/api/remotehello 이 프록시를 호출하는 데 사용할 경로 결정Determines what route is used to invoke this proxy
    백 엔드 URLBackend URL https://%HELLO_HOST%/api/hello 요청을 프록시 처리할 엔드포인트를 지정합니다.Specifies the endpoint to which the request should be proxied
  4. 프록시는 /api 기본 경로 접두사를 제공하지 않으며 경로 템플릿에 포함되어야 합니다.Note that Proxies does not provide the /api base path prefix, and this must be included in the route template.

  5. %HELLO_HOST% 구문은 이전에 만든 앱 설정을 참조합니다.The %HELLO_HOST% syntax will reference the app setting you created earlier. 확인된 URL은 원래 함수를 가리킵니다.The resolved URL will point to your original function.

  6. 만들기를 클릭합니다.Click Create.

  7. 프록시 URL을 복사하고 브라우저 또는 자주 사용하는 HTTP 클라이언트에서 테스트하여 새 프록시를 시험해볼 수 있습니다.You can try out your new proxy by copying the Proxy URL and testing it in the browser or with your favorite HTTP client.

    1. 익명 함수의 경우 다음을 사용합니다.For an anonymous function use:
      1. https://YOURPROXYAPP.azurewebsites.net/api/remotehello?name="Proxies"
    2. 권한이 부여된 함수의 경우 다음을 사용합니다.For a function with authorization use:
      1. https://YOURPROXYAPP.azurewebsites.net/api/remotehello?code=YOURCODE&name="Proxies"

모의 API 만들기Create a mock API

다음으로 프록시를 사용하여 솔루션에 대한 모의 API 만듭니다.Next, you will use a proxy to create a mock API for your solution. 이를 통해 백 엔드를 완전히 구현하지 않고도 클라이언트 개발을 진행할 수 있습니다.This allows client development to progress, without needing the backend fully implemented. 개발 후반부에 이 논리를 지원하는 새 함수 앱을 만들고 프록시를 해당 앱으로 리디렉션할 수 있습니다.Later in development, you could create a new function app which supports this logic and redirect your proxy to it.

이 모의 API를 만들려면 이번에는 App Service 편집기를 사용하여 새 프록시를 만듭니다.To create this mock API, we will create a new proxy, this time using the App Service Editor. 시작하려면 포털의 함수 앱으로 이동합니다.To get started, navigate to your function app in the portal. 플랫폼 기능을 선택하고 개발 도구에서 App Service 편집기를 찾습니다.Select Platform features and under Development Tools find App Service Editor. 이를 클릭하면 새 탭에서 App Service 편집기가 열립니다.Clicking this will open the App Service Editor in a new tab.

왼쪽 탐색 영역에서 proxies.json을 선택합니다.Select proxies.json in the left navigation. 모든 사용자 프록시에 대한 구성이 저장되는 파일입니다.This is the file which stores the configuration for all of your proxies. 함수 배포 방법 중 하나를 사용하는 경우 이 파일이 소스 제어에 유지됩니다.If you use one of the Functions deployment methods, this is the file you will maintain in source control. 이 파일에 대한 자세한 내용은 프록시 고급 구성을 참조하세요.To learn more about this file, see Proxies advanced configuration.

지금까지 작업을 잘 진행했으면 proxies.json이 다음과 같이 표시됩니다.If you've followed along so far, your proxies.json should look like the following:

{
    "$schema": "http://json.schemastore.org/proxies",
    "proxies": {
        "HelloProxy": {
            "matchCondition": {
                "route": "/api/remotehello"
            },
            "backendUri": "https://%HELLO_HOST%/api/hello"
        }
    }
}

다음으로 모의 API를 추가합니다.Next you'll add your mock API. proxies.json 파일을 다음으로 바꿉니다.Replace your proxies.json file with the following:

{
    "$schema": "http://json.schemastore.org/proxies",
    "proxies": {
        "HelloProxy": {
            "matchCondition": {
                "route": "/api/remotehello"
            },
            "backendUri": "https://%HELLO_HOST%/api/hello"
        },
        "GetUserByName" : {
            "matchCondition": {
                "methods": [ "GET" ],
                "route": "/api/users/{username}"
            },
            "responseOverrides": {
                "response.statusCode": "200",
                "response.headers.Content-Type" : "application/json",
                "response.body": {
                    "name": "{username}",
                    "description": "Awesome developer and master of serverless APIs",
                    "skills": [
                        "Serverless",
                        "APIs",
                        "Azure",
                        "Cloud"
                    ]
                }
            }
        }
    }
}

이렇게 하면 backendUri 속성을 제외한 새 프록시 "GetUserByName"이 추가됩니다.This adds a new proxy, "GetUserByName", without the backendUri property. 다른 리소스를 호출하지 않고 응답 재정의를 사용하여 프록시의 기본 응답을 수정합니다.Instead of calling another resource, it modifies the default response from Proxies using a response override. 요청 및 응답 재정의를 백 엔드 URL과 함께 사용할 수도 있습니다.Request and response overrides can also be used in conjunction with a backend URL. 레거시 시스템으로 프록시할 때, 헤더를 수정하거나 매개 변수를 쿼리하는 등의 작업이 필요할 때 특히 유용합니다. 요청 및 응답 재정의에 대한 자세한 내용은 프록시에서 요청 및 응답 수정을 참조하세요.This is particularly useful when proxying to a legacy system, where you might need to modify headers, query parameters, etc. To learn more about request and response overrides, see Modifying requests and responses in Proxies.

브라우저 또는 자주 사용하는 REST 클라이언트를 통해 <YourProxyApp>.azurewebsites.net/api/users/{username} 엔드포인트를 호출하여 모의 API를 테스트합니다.Test your mock API by calling the <YourProxyApp>.azurewebsites.net/api/users/{username} endpoint using a browser or your favorite REST client. {username} 을 사용자 이름을 나타내는 문자열 값으로 바꿉니다.Be sure to replace {username} with a string value representing a username.

다음 단계Next steps

이 문서에서는 Azure Functions에서 API를 빌드하고 사용자 지정 하는 방법을 배웠습니다.In this article, you learned how to build and customize an API on Azure Functions. 또한 모의 API를 비롯한 여러 API를 하나의 통합 API 화면에 표시하는 방법도 알아보았습니다.You also learned how to bring multiple APIs, including mocks, together as a unified API surface. 이러한 기법을 사용하여 복잡성에 관계없이 Azure Functions에서 제공하는 서버리스 컴퓨팅 모델에서 실행되는 API를 빌드할 수 있습니다.You can use these techniques to build out APIs of any complexity, all while running on the serverless compute model provided by Azure Functions.

다음 참조는 API를 추가로 개발하는 경우 유용할 수 있습니다.The following references may be helpful as you develop your API further: