Java 및 Maven을 사용하여 첫 번째 함수 만들기Create your first function with Java and Maven

이 문서에서는 Maven 명령줄 도구를 사용하여 Java 함수를 만들어 Azure Functions에 게시하는 방법을 안내합니다.This article guides you through using the Maven command-line tool to build and publish a Java function to Azure Functions. 완료되면 함수 코드가 Azure의 사용 플랜에서 실행되고 HTTP 요청을 사용하여 트리거될 수 있습니다.When you're done, your function code runs on the Consumption Plan in Azure and can be triggered using an HTTP request.

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.If you don't have an Azure subscription, create a free account before you begin.

필수 조건Prerequisites

Java를 사용하여 함수를 개발하려면 다음을 설치해야 합니다.To develop functions using Java, you must have the following installed:

중요

이 퀵 스타트를 완료하려면 JAVA_HOME 환경 변수를 JDK 설치 위치로 설정해야 합니다.The JAVA_HOME environment variable must be set to the install location of the JDK to complete this quickstart.

새 Functions 프로젝트 생성Generate a new Functions project

빈 폴더에서 다음 명령을 실행하여 Maven archetype으로부터 Functions 프로젝트를 생성합니다.In an empty folder, run the following command to generate the Functions project from a Maven archetype.

Linux/macOSLinux/macOS

mvn archetype:generate \
    -DarchetypeGroupId=com.microsoft.azure \
    -DarchetypeArtifactId=azure-functions-archetype 

참고

명령 실행에 문제가 발생하는 경우 maven-archetype-plugin 버전이 사용되는지 살펴보시기 바랍니다.If you're experiencing issues with running the command, take a look at what maven-archetype-plugin version is used. .pom 파일이 없는 빈 디렉터리에서 명령을 실행하고 있으므로 이전 버전에서 Maven을 업그레이드한 경우 ~/.m2/repository/org/apache/maven/plugins/maven-archetype-plugin에서 이전 버전의 플러그 인을 사용을 시도할 수도 있습니다.Because you are running the command in an empty directory with no .pom file, it might be attempting to use a plugin of the older version from ~/.m2/repository/org/apache/maven/plugins/maven-archetype-plugin if you upgraded your Maven from an older version. 그렇다면 maven-archetype-plugin 디렉터리를 삭제하고 명령을 다시 실행해보세요.If so, try deleting the maven-archetype-plugin directory and re-running the command.

WindowsWindows

mvn archetype:generate `
    "-DarchetypeGroupId=com.microsoft.azure" `
    "-DarchetypeArtifactId=azure-functions-archetype"
mvn archetype:generate ^
    "-DarchetypeGroupId=com.microsoft.azure" ^
    "-DarchetypeArtifactId=azure-functions-archetype"

Maven이 프로젝트 생성을 완료하기 위해 필요한 값을 요청합니다.Maven will ask you for values needed to finish generating the project. groupId, artifactIdversion 값은 Maven 명명 규칙 참고를 참조하세요.For groupId, artifactId, and version values, see the Maven naming conventions reference. appName 값은 Azure 전체에서 고유해야 하므로 기본적으로 Maven이 이전에 입력한 artifactId 를 기준으로 앱 이름을 생성합니다.The appName value must be unique across Azure, so Maven generates an app name based on the previously entered artifactId as a default. packageName 값은 생성된 함수 코드에 대한 Java 패키지를 결정합니다.The packageName value determines the Java package for the generated function code.

아래의 com.fabrikam.functionsfabrikam-functions 식별자는 예제로 사용되며 이 빠른 시작의 이후 단계를 좀 더 쉽게 읽는 데 도움이 됩니다.The com.fabrikam.functions and fabrikam-functions identifiers below are used as an example and to make later steps in this quickstart easier to read. 이 단계에서는 Maven에 각자 고유의 값을 제공하시기 바랍니다.You are encouraged to supply your own values to Maven in this step.

Define value for property 'groupId' (should match expression '[A-Za-z0-9_\-\.]+'): com.fabrikam.functions
Define value for property 'artifactId' (should match expression '[A-Za-z0-9_\-\.]+'): fabrikam-functions
Define value for property 'version' 1.0-SNAPSHOT : 
Define value for property 'package': com.fabrikam.functions
Define value for property 'appName' fabrikam-functions-20170927220323382:
Define value for property 'appRegion' westus: :
Define value for property 'resourceGroup' java-functions-group: :
Confirm properties configuration: Y

Maven은 이름이 artifactId 인 새 폴더에 프로젝트 파일을 만드는데, 이 예제에서는 fabrikam-functions입니다.Maven creates the project files in a new folder with a name of artifactId, in this example fabrikam-functions. 이 프로젝트에서 생성된 즉시 실행 가능 코드는 요청의 본문을 에코하는 HTTP 트리거 함수입니다.The ready to run generated code in the project is an HTTP triggered function that echoes the body of the request. src/main/java/com/fabrikam/functions/Function.java를 다음 코드로 바꿉니다.Replace src/main/java/com/fabrikam/functions/Function.java with the following code:

package com.fabrikam.functions;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;

public class Function {
    /**
     * This function listens at endpoint "/api/HttpTrigger-Java". Two ways to invoke it using "curl" command in bash:
     * 1. curl -d "HTTP Body" {your host}/api/HttpTrigger-Java
     * 2. curl {your host}/api/HttpTrigger-Java?name=HTTP%20Query
     */
    @FunctionName("HttpTrigger-Java")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = { HttpMethod.GET, HttpMethod.POST }, authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        // Parse query parameter
        String query = request.getQueryParameters().get("name");
        String name = request.getBody().orElse(query);

        if (name == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
        } else {
            return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
        }
    }
}

확장 번들 사용Enable extension bundles

바인딩 확장을 설치하는 가장 쉬운 방법은 확장 번들을 사용하도록 설정하는 것입니다.The easiest way to install binding extensions is to enable extension bundles. 번들을 활성화하면 미리 정의된 확장 패키지 세트가 자동으로 설치됩니다.When you enable bundles, a predefined set of extension packages is automatically installed.

확장 번들을 사용하도록 설정하려면 host.json 파일을 열고 다음 코드와 일치하도록 콘텐츠를 업데이트합니다.To enable extension bundles, open the host.json file and update its contents to match the following code:

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[1.*, 2.0.0)"
    }
}

로컬에서 함수 실행Run the function locally

디렉터리를 새로 만든 프로젝트 폴더(host.json 및 pom.xml 파일이 포함된 폴더)로 변경하고 Maven으로 함수를 빌드하고 실행합니다.Change directory to the newly created project folder (the one containing your host.json and pom.xml files) and build and run the function with Maven:

cd fabrikam-function
mvn clean package 
mvn azure-functions:run

참고

Java 9에서 javax.xml.bind.JAXBException 예외가 발생하면 GitHub에서 해결 방법을 참조하세요.If you're experiencing this exception: javax.xml.bind.JAXBException with Java 9, see the workaround on GitHub.

함수가 시스템에서 로컬로 실행되고 HTTP 요청에 응답할 준비가 완료되면 이 출력이 보입니다.You see this output when the function is running locally on your system and ready to respond to HTTP requests:

Listening on http://localhost:7071
Hit CTRL-C to exit...

Http Functions:

   hello: http://localhost:7071/api/HttpTrigger-Java

새 터미널 창에서 curl을 사용하여 명령줄에서 함수를 트리거합니다.Trigger the function from the command line using curl in a new terminal window:

curl -w "\n" http://localhost:7071/api/HttpTrigger-Java -d LocalFunction
Hello LocalFunction!

터미널에서 Ctrl-C를 사용하여 함수 코드를 중지합니다.Use Ctrl-C in the terminal to stop the function code.

Azure에 함수 배포Deploy the function to Azure

Azure Functions에 대한 배포 프로세스는 Azure CLI의 계정 자격 증명을 사용합니다.The deploy process to Azure Functions uses account credentials from the Azure CLI. 계속하려면 Azure CLI로 로그인합니다.Sign in with the Azure CLI before continuing.

az login

azure-functions:deploy Maven 대상을 사용하여 새 함수 앱에 코드를 배포합니다.Deploy your code into a new Function app using the azure-functions:deploy Maven target. 이를 통해 사용하도록 설정된 패키지에서 실행으로 Zip 배포 모드를 수행합니다.This performs a Zip Deploy with Run From Package mode enabled.

참고

Visual Studio Code를 사용하여 함수 앱을 배포하는 경우 체험판이 아닌 구독을 선택해야 합니다. 그렇지 않으면 오류가 표시됩니다.When you use Visual Studio Code to deploy your Function app, remember to choose a non-free subscription, or you will get an error. IDE의 왼쪽에 구독이 표시됩니다.You can watch your subscription on the left side of the IDE.

mvn azure-functions:deploy

배포가 완료되면 Azure 함수 앱에 액세스하는 데 사용할 수 있는 URL이 표시됩니다.When the deploy is complete, you see the URL you can use to access your Azure function app:

[INFO] Successfully deployed Function App with package.
[INFO] Deleting deployment package from Azure Storage...
[INFO] Successfully deleted deployment package fabrikam-function-20170920120101928.20170920143621915.zip
[INFO] Successfully deployed Function App at https://fabrikam-function-20170920120101928.azurewebsites.net
[INFO] ------------------------------------------------------------------------

cURL을 사용하여 Azure에서 실행 중인 함수 앱을 테스트합니다.Test the function app running on Azure using cURL. 아래 예제에서는 이전 단계에서 만든 사용자 고유의 함수 앱에 배포한 URL과 일치하도록 URL을 변경해야 합니다.You'll need to change the URL from the sample below to match the deployed URL for your own function app from the previous step.

참고

액세스 권한Anonymous로 설정해야 합니다.Make sure you set the Access rights to Anonymous. 기본 수준 Function을 선택하면 함수 엔드포인트에 액세스하기 위해 요청에 함수 키를 제공해야 합니다.When you choose the default level of Function, you are required to present the function key in requests to access your function endpoint.

curl -w "\n" https://fabrikam-function-20170920120101928.azurewebsites.net/api/HttpTrigger-Java -d AzureFunctions
Hello AzureFunctions!

변경 및 재배포Make changes and redeploy

생성된 프로젝트에서 src/main.../Function.java 원본 파일을 편집하여 함수 앱에서 반환된 텍스트를 변경합니다.Edit the src/main.../Function.java source file in the generated project to alter the text returned by your Function app. 다음과 같이 변경합니다.Change this line:

return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();

다음으로:To the following:

return request.createResponseBuilder(HttpStatus.OK).body("Hi, " + name).build();

변경 내용을 저장합니다.Save the changes. 이전처럼 터미널에서 azure-functions:deploy를 실행하여 mvn 정리 패키지를 실행하고 다시 배포합니다.Run mvn clean package and redeploy by running azure-functions:deploy from the terminal as before. 함수 앱이 업데이트되고 이 요청은 다음을 갖습니다.The function app will be updated and this request:

curl -w '\n' -d AzureFunctionsTest https://fabrikam-functions-20170920120101928.azurewebsites.net/api/HttpTrigger-Java

업데이트된 출력은 다음과 같습니다.Will have updated output:

Hi, AzureFunctionsTest

다음 단계Next steps

간단한 HTTP 트리거가 있는 Java 함수 앱을 만들어 Azure Functions에 배포했습니다.You have created a Java function app with a simple HTTP trigger and deployed it to Azure Functions.