Azure App Service에 대 한 Java 앱 구성Configure a Java app for Azure App Service

Azure App Service를 통해 Java 개발자는 완전히 관리 되는 Windows 기반 서비스에서 Tomcat 웹 응용 프로그램을 신속 하 게 빌드, 배포 및 확장할 수 있습니다.Azure App Service lets Java developers to quickly build, deploy, and scale their Tomcat web applications on a fully managed Windows-based service. 명령줄에서 또는 IntelliJ, Eclipse, Visual Studio Code 같은 편집기에서 Maven 플러그 인을 사용하여 애플리케이션을 배포할 수 있습니다.Deploy applications with Maven plugins from the command line or in editors like IntelliJ, Eclipse, or Visual Studio Code.

이 가이드에서는 App Service에서를 사용 하는 Java 개발자를 위한 주요 개념 및 지침을 제공 합니다.This guide provides key concepts and instructions for Java developers using in App Service. Azure App Service 사용한 적이 없는 경우 먼저 Java 빠른 시작을 참조 하세요.If you've never used Azure App Service, you should read through the Java quickstart first. Java 개발과 관련 되지 않은 App Service 사용에 대 한 일반적인 질문에 대 한 답변은 App Service WINDOWS FAQ에서 확인할 수 있습니다.General questions about using App Service that aren't specific to the Java development are answered in the App Service Windows FAQ.

앱 배포Deploying your app

Maven 용 Azure 웹 앱 플러그 인 을 사용 하 여 war 파일을 배포할 수 있습니다.You can use Azure Web App Plugin for Maven to deploy your .war files. 또한 배포 시 많이 사용되는 IDE를 사용하면 Azure Toolkit for IntelliJ 또는 Azure Toolkit for Eclipse에서 지원됩니다.Deployment with popular IDEs is also supported with Azure Toolkit for IntelliJ or Azure Toolkit for Eclipse.

그렇지 않으면 배포 방법이 보관 형식에 따라 달라집니다.Otherwise, your deployment method will depend on your archive type:

  • .war 파일을 Tomcat에 배포하려면 /api/wardeploy/ 엔드포인트를 사용하여 보관 파일을 게시합니다.To deploy .war files to Tomcat, use the /api/wardeploy/ endpoint to POST your archive file. 이 API에 대한 자세한 내용은 이 설명서를 참조하세요.For more information on this API, please see this documentation.
  • Kudu 사이트의 끝점을 사용 하 여 jar 파일을 Java SE에 배포 합니다 /api/zipdeploy/ .To deploy .jar files to Java SE, use the /api/zipdeploy/ endpoint of the Kudu site. 이 API에 대한 자세한 내용은 이 설명서를 참조하세요.For more information on this API, please see this documentation.

FTP를 사용하여 .war 또는.jar을 배포하지 마십시오.Do not deploy your .war or .jar using FTP. FTP 도구는 시작 스크립트, 종속성 또는 기타 런타임 파일을 업로드하기 위해 설계되었습니다.The FTP tool is designed to upload startup scripts, dependencies, or other runtime files. 웹앱을 배포하기 위한 최적의 선택은 아닙니다.It is not the optimal choice for deploying web apps.

앱 로깅 및 디버깅Logging and debugging apps

Azure Portal을 통해 각 앱에 대한 성능 보고서, 트래픽 시각화 및 상태 확인을 사용할 수 있습니다.Performance reports, traffic visualizations, and health checkups are available for each app through the Azure portal. 자세한 내용은 Azure App Service 진단 개요를 참조하세요.For more information, see Azure App Service diagnostics overview.

비행 레코더 사용Use Flight Recorder

Azul Jvm를 사용 하는 App Service에 대 한 모든 Java 런타임은 줄루어 비행 레코더와 함께 제공 됩니다.All Java runtimes on App Service using the Azul JVMs come with the Zulu Flight Recorder. 이를 사용 하 여 JVM, 시스템 및 Java 수준 이벤트를 기록 하 여 동작을 모니터링 하 고 Java 응용 프로그램의 문제를 해결할 수 있습니다.You can use this to record JVM, system, and Java level events to monitor the behavior and troubleshoot problems in your Java applications.

시간이 지정 된 기록을 수행 하려면 Java 응용 프로그램의 PID (프로세스 ID)가 필요 합니다.To take a timed recording you will need the PID (Process ID) of the Java application. PID를 찾으려면 https://의 웹 앱 SCM 사이트로 브라우저를 엽니다. scm.azurewebsites.net/ProcessExplorer/>. <.To find the PID, open a browser to your web app's SCM site at https://.scm.azurewebsites.net/ProcessExplorer/. 이 페이지에는 웹 앱에서 실행 중인 프로세스가 표시 됩니다.This page shows the running processes in your web app. 테이블에서 "java" 라는 프로세스를 찾고 해당 PID (프로세스 ID)를 복사 합니다.Find the process named "java" in the table and copy the corresponding PID (Process ID).

다음으로, SCM 사이트의 상단 도구 모음에서 디버그 콘솔 를 열고 다음 명령을 실행 합니다.Next, open the Debug Console in the top toolbar of the SCM site and run the following command. <pid>을 이전에 복사한 프로세스 ID로 바꿉니다.Replace <pid> with the process ID you copied earlier. 이 명령은 Java 응용 프로그램의 30 초 profiler 기록을 시작 하 고 디렉터리에 이라는 파일을 생성 합니다 timed_recording_example.jfr D:\home .This command will start a 30 second profiler recording of your Java application and generate a file named timed_recording_example.jfr in the D:\home directory.

jcmd <pid> JFR.start name=TimedRecording settings=profile duration=30s filename="D:\home\timed_recording_example.JFR"

자세한 내용은 Jcmd 명령 참조를 참조하세요.For more information, please see the Jcmd Command Reference.

.jfr파일 분석Analyze .jfr files

FTPS를 사용하여 JFR 파일을 로컬 컴퓨터에 다운로드합니다.Use FTPS to download your JFR file to your local machine. JFR 파일을 분석하려면 Zulu Mission Control을 다운로드하여 설치합니다.To analyze the JFR file, download and install Zulu Mission Control. Zulu Mission Control에 대한 지침은 Azul 설명서설치 지침을 참조하세요.For instructions on Zulu Mission Control, see the Azul documentation and the installation instructions.

진단 로그 스트림Stream diagnostic logs

App Service의 응용 프로그램 코드 내부에서 생성 된 콘솔 로그에 액세스 하려면 Cloud Shell에서 다음 명령을 실행 하 여 진단 로깅을 설정 합니다.To access the console logs generated from inside your application code in App Service, turn on diagnostics logging by running the following command in the Cloud Shell:

az webapp log config --resource-group <resource-group-name> --name <app-name> --application-logging true --level Verbose

에 사용할 수 있는 값 --levelError ,, Warning InfoVerbose 입니다.Possible values for --level are: Error, Warning, Info, and Verbose. 각 후속 수준에는 이전 수준이 포함 됩니다.Each subsequent level includes the previous level. 예: Error 오류 메시지만 포함 하 고 Verbose 모든 메시지를 포함 합니다.For example: Error includes only error messages, and Verbose includes all messages.

진단 로깅이 설정 되 면 다음 명령을 실행 하 여 로그 스트림을 확인 합니다.Once diagnostic logging is turned on, run the following command to see the log stream:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

콘솔 로그가 즉시 표시되지 않으면 30초 후에 다시 확인합니다.If you don't see console logs immediately, check again in 30 seconds.

참고

https://<app-name>.scm.azurewebsites.net/api/logs/docker의 브라우저에서 로그 파일을 검사할 수도 있습니다.You can also inspect the log files from the browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker.

언제든지 로그 스트리밍을 중지하려면 Ctrl+C를 입력합니다.To stop log streaming at any time, type Ctrl+C.

자세한 내용은 Cloud Shell에서 로그 스트리밍을 참조하세요.For more information, see Stream logs in Cloud Shell.

앱 로깅App logging

Azure Portal 또는 Azure CLI를 통해 애플리케이션 로깅을 사용하도록 설정하여 애플리케이션의 표준 콘솔 출력 및 표준 콘솔 오류 스트림을 로컬 파일 시스템 또는 Azure Blob Storage에 쓰도록 App Service를 구성할 수 있습니다.Enable application logging through the Azure portal or Azure CLI to configure App Service to write your application's standard console output and standard console error streams to the local filesystem or Azure Blob Storage. 로컬 App Service 파일 시스템 인스턴스에 로깅하는 동작은 구성된 지 12시간 후에 비활성화 됩니다.Logging to the local App Service filesystem instance is disabled 12 hours after it is configured. 더 긴 시간 동안 보존하기를 원하는 경우 Blob Storage 컨테이너에 출력을 쓰도록 애플리케이션을 구성합니다.If you need longer retention, configure the application to write output to a Blob storage container. Java 및 Tomcat 앱 로그는 /LogFiles/Application/ 디렉터리에서 찾을 수 있습니다.Your Java and Tomcat app logs can be found in the /LogFiles/Application/ directory.

애플리케이션에서 Logback 또는 Log4j를 추적에 사용하는 경우 Application Insights에서 Java 추적 로그 탐색의 로깅 프레임워크 구성 지침에 따라 이러한 추적 로그를 Azure Application Insights로 전송하여 검토할 수 있습니다.If your application uses Logback or Log4j for tracing, you can forward these traces for review into Azure Application Insights using the logging framework configuration instructions in Explore Java trace logs in Application Insights.

사용자 지정 및 튜닝Customization and tuning

Azure App Service은 Azure Portal 및 CLI를 통해 기본 튜닝 및 사용자 지정을 지원 합니다.Azure App Service supports out of the box tuning and customization through the Azure portal and CLI. 비 Java 관련 웹앱 구성에 대한 다음 문서를 검토하세요.Review the following articles for non-Java-specific web app configuration:

Java 런타임 옵션 설정Set Java runtime options

할당 된 메모리 또는 기타 JVM 런타임 옵션을 설정 하려면 옵션으로 이라는 앱 설정을 만듭니다 JAVA_OPTS .To set allocated memory or other JVM runtime options, create an app setting named JAVA_OPTS with the options. App Service는이 설정을 시작 시 Java 런타임으로이를 환경 변수로 전달 합니다.App Service passes this setting as an environment variable to the Java runtime when it starts.

Azure Portal에서, 웹앱의 애플리케이션 설정 아래에서 -Xms512m -Xmx1204m처럼 추가 설정을 포함하는 JAVA_OPTS라고 하는 새 앱 설정을 만듭니다.In the Azure portal, under Application Settings for the web app, create a new app setting named JAVA_OPTS that includes the additional settings, such as -Xms512m -Xmx1204m.

Maven 플러그 인에서 앱 설정을 구성하려면 Azure 플러그 인 섹션에서 설정/값 태그를 추가합니다.To configure the app setting from the Maven plugin, add setting/value tags in the Azure plugin section. 다음 예에서는 특정 최소 및 최대 Java 힙 크기를 설정합니다.The following example sets a specific minimum and maximum Java heap size:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Xms512m -Xmx1204m</value>
    </property>
</appSettings>

App Service 계획에서 배포 슬롯 하나를 사용하여 단일 애플리케이션을 실행하는 개발자는 다음 옵션을 사용할 수 있습니다.Developers running a single application with one deployment slot in their App Service plan can use the following options:

  • B1 및 S1 인스턴스: -Xms1024m -Xmx1024mB1 and S1 instances: -Xms1024m -Xmx1024m
  • B2 및 S2 인스턴스: -Xms3072m -Xmx3072mB2 and S2 instances: -Xms3072m -Xmx3072m
  • B3 및 S3 인스턴스: -Xms6144m -Xmx6144mB3 and S3 instances: -Xms6144m -Xmx6144m

애플리케이션 힙 설정을 튜닝할 때 App Service 계획 세부 정보를 검토하고 여러 애플리케이션 및 배포 슬롯 요구 사항을 고려하여 최적의 메모리 할당을 찾아보세요.When tuning application heap settings, review your App Service plan details and take into account multiple applications and deployment slot needs to find the optimal allocation of memory.

웹 소켓 켜기Turn on web sockets

애플리케이션의 Azure Portal 애플리케이션 설정에서 웹 소켓을 켭니다.Turn on support for web sockets in the Azure portal in the Application settings for the application. 설정을 적용하려면 애플리케이션을 다시 시작해야 합니다.You'll need to restart the application for the setting to take effect.

Azure CLI에서 다음 명령을 사용하여 웹 소켓 지원을 켭니다.Turn on web socket support using the Azure CLI with the following command:

az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true

그런 다음, 애플리케이션을 다시 시작합니다.Then restart your application:

az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>

기본 문자 인코딩 설정Set default character encoding

Azure Portal에서, 웹앱의 애플리케이션 설정 아래에 -Dfile.encoding=UTF-8 값을 사용하여 JAVA_OPTS이라고 하는 새 앱 설정을 만듭니다.In the Azure portal, under Application Settings for the web app, create a new app setting named JAVA_OPTS with value -Dfile.encoding=UTF-8.

또는 App Service Maven 플러그 인을 사용하여 앱 설정을 구성할 수 있습니다.Alternatively, you can configure the app setting using the App Service Maven plugin. 플러그 인 구성에서 설정 이름 및 값 태그를 추가합니다.Add the setting name and value tags in the plugin configuration:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Dfile.encoding=UTF-8</value>
    </property>
</appSettings>

JSP 파일 미리 컴파일Pre-Compile JSP files

Tomcat 애플리케이션의 성능을 향상시키기 위해 App Service에 배포하기 전에 JSP 파일을 컴파일할 수 있습니다.To improve performance of Tomcat applications, you can compile your JSP files before deploying to App Service. Apache Sling에서 제공하는 Maven 플러그 인 또는 Ant 빌드 파일을 사용할 수 있습니다.You can use the Maven plugin provided by Apache Sling, or using this Ant build file.

보안 애플리케이션Secure applications

App Service에서 실행 되는 Java 응용 프로그램에는 다른 응용 프로그램과 동일한 보안 모범 사례 집합이 있습니다.Java applications running in App Service have the same set of security best practices as other applications.

사용자 인증(간편 인증)Authenticate users (Easy Auth)

Azure Portal에서 인증 및 권한 부여 옵션을 사용하여 앱 인증을 설정합니다.Set up app authentication in the Azure portal with the Authentication and Authorization option. 여기서 Azure Active Directory 또는 Facebook, Google, GitHub 등의 소셜 로그인을 사용하여 인증을 사용하도록 설정할 수 있습니다.From there, you can enable authentication using Azure Active Directory or social logins like Facebook, Google, or GitHub. Azure Portal 구성은 단일 인증 공급자를 구성할 때만 작동합니다.Azure portal configuration only works when configuring a single authentication provider. 자세한 내용은 Azure Active Directory 로그인을 사용하도록 App Service 앱 구성 및 기타 ID 공급자 관련 문서를 참조하세요.For more information, see Configure your App Service app to use Azure Active Directory login and the related articles for other identity providers. 여러 로그인 공급자를 사용하도록 설정해야 하는 경우 App Service 인증 사용자 지정 문서의 지침을 따르세요.If you need to enable multiple sign-in providers, follow the instructions in the customize App Service authentication article.

TomcatTomcat

Tomcat 애플리케이션은 주체 개체를 Map 개체로 캐스팅하여 서블릿에서 사용자의 클레임에 직접 액세스할 수 있습니다.Your Tomcat application can access the user's claims directly from the servlet by casting the Principal object to a Map object. Map 개체는 각 클레임 유형을 해당 유형에 대한 클레임 컬렉션에 매핑합니다.The Map object will map each claim type to a collection of the claims for that type. 아래 코드에서 requestHttpServletRequest의 인스턴스입니다.In the code below, request is an instance of HttpServletRequest.

Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();

이제 특정 클레임에 대한 Map 개체를 검사할 수 있습니다.Now you can inspect the Map object for any specific claim. 예를 들어 다음 코드 조각은 모든 클레임 형식을 반복하고 각 컬렉션의 내용을 인쇄합니다.For example, the following code snippet iterates through all the claim types and prints the contents of each collection.

for (Object key : map.keySet()) {
        Object value = map.get(key);
        if (value != null && value instanceof Collection {
            Collection claims = (Collection) value;
            for (Object claim : claims) {
                System.out.println(claims);
            }
        }
    }

사용자를 로그아웃시키려면 /.auth/ext/logout 경로를 사용합니다.To sign users out, use the /.auth/ext/logout path. 다른 작업을 수행하려면 App Service 인증 및 권한 부여 사용에 대한 설명서를 참조하세요.To perform other actions, please see the documentation on App Service Authentication and Authorization usage. Tomcat HttpServletRequest 인터페이스 및 해당 메서드에 대한 공식 설명서도 있습니다.There is also official documentation on the Tomcat HttpServletRequest interface and its methods. 다음 서블릿 메서드도 App Service 구성에 따라 하이드레이션됩니다.The following servlet methods are also hydrated based on your App Service configuration:

public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()

이 기능을 사용하지 않도록 설정하려면 값이 1WEBSITE_AUTH_SKIP_PRINCIPAL 애플리케이션 설정을 만듭니다.To disable this feature, create an Application Setting named WEBSITE_AUTH_SKIP_PRINCIPAL with a value of 1. App Service에서 추가한 모든 서블릿 필터를 사용하지 않도록 설정하려면 값이 1WEBSITE_SKIP_FILTERS 설정을 만듭니다.To disable all servlet filters added by App Service, create a setting named WEBSITE_SKIP_FILTERS with a value of 1.

TLS/SSL 구성Configure TLS/SSL

Azure App Service에서 tls 바인딩을 사용 하 여 사용자 지정 DNS 이름 보안 설정의 지침에 따라 기존 TLS/SSL 인증서를 업로드 하 고 응용 프로그램의 도메인 이름에 바인딩합니다.Follow the instructions in the Secure a custom DNS name with a TLS binding in Azure App Service to upload an existing TLS/SSL certificate and bind it to your application's domain name. 기본적으로 애플리케이션에서 HTTP 연결을 계속 허용합니다. 자습서의 단계에 따라 SSL 및 TLS를 적용하세요.By default your application will still allow HTTP connections-follow the specific steps in the tutorial to enforce SSL and TLS.

KeyVault 참조 사용Use KeyVault References

Azure KeyVault는 액세스 정책 및 감사 기록을 통해 중앙 집중식 비밀 관리를 제공합니다.Azure KeyVault provides centralized secret management with access policies and audit history. 키 자격 증명 모음에 암호 또는 연결 문자열과 같은 비밀을 저장하고 환경 변수를 통해 애플리케이션에서 이러한 비밀에 액세스할 수 있습니다.You can store secrets (such as passwords or connection strings) in KeyVault and access these secrets in your application through environment variables.

먼저 Key Vault에 앱 액세스 권한을 부여하고 애플리케이션 설정에서 사용자 비밀을 KeyVault 참조로 만드는 지침을 따릅니다.First, follow the instructions for granting your app access to Key Vault and making a KeyVault reference to your secret in an Application Setting. App Service 터미널에 원격으로 액세스하는 동안 환경 변수를 인쇄하여 참조가 비밀로 해결되는지 확인할 수 있습니다.You can validate that the reference resolves to the secret by printing the environment variable while remotely accessing the App Service terminal.

이러한 비밀을 Spring 또는 Tomcat 구성 파일에 삽입하려면 환경 변수 삽입 구문(${MY_ENV_VAR})을 사용합니다.To inject these secrets in your Spring or Tomcat configuration file, use environment variable injection syntax (${MY_ENV_VAR}). Spring 구성 파일은 표면화된 구성에 대한 이 설명서를 참조하세요.For Spring configuration files, please see this documentation on externalized configurations.

APM 플랫폼 구성Configure APM platforms

이 섹션에서는 NewRelic 및 AppDynamics APM(애플리케이션 성능 모니터링) 플랫폼을 사용하여 Linux의 Azure App Service에 배포된 Java 애플리케이션을 연결하는 방법을 보여 줍니다.This section shows how to connect Java applications deployed on Azure App Service on Linux with the NewRelic and AppDynamics application performance monitoring (APM) platforms.

New Relic 구성Configure New Relic

  1. NewRelic.com 에서 새 유물 계정 만들기Create a New Relic account at NewRelic.com
  2. NewRelic에서 Java 에이전트를 다운로드합니다. 파일 이름은 newrelic-java-x.x.x.zip과 유사합니다.Download the Java agent from NewRelic, it will have a file name similar to newrelic-java-x.x.x.zip.
  3. 라이선스 키를 복사합니다. 이 키는 나중에 에이전트를 구성하는 데 필요합니다.Copy your license key, you'll need it to configure the agent later.
  4. Kudu 콘솔 을 사용 하 여 /home/site/wwwroot/apm새 디렉터리를 만듭니다.Use the Kudu console to create a new directory /home/site/wwwroot/apm.
  5. 압축을 푼 새 유물 Java 에이전트 파일을 /home/site/wwwroot/apm아래의 디렉터리에 업로드 합니다.Upload the unpacked New Relic Java agent files into a directory under /home/site/wwwroot/apm. 에이전트의 파일은 /home/site/wwwroot/apm/newrelic에 있어야 합니다.The files for your agent should be in /home/site/wwwroot/apm/newrelic.
  6. /home/site/wwwroot/apm/newrelic/newrelic.yml에서 YAML 파일을 수정하고 자리 표시자 라이선스 값을 사용자의 라이선스 키로 바꿉니다.Modify the YAML file at /home/site/wwwroot/apm/newrelic/newrelic.yml and replace the placeholder license value with your own license key.
  7. Azure Portal의 App Service에서 사용자 애플리케이션을 찾아 새 애플리케이션 설정을 만듭니다.In the Azure portal, browse to your application in App Service and create a new Application Setting.
    • 앱이 Java SE를 사용하는 경우 값이 -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jarJAVA_OPTS라는 환경 변수를 만듭니다.If your app is using Java SE, create an environment variable named JAVA_OPTS with the value -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.
    • Tomcat을 사용하는 경우 값이 -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jarCATALINA_OPTS라는 환경 변수를 만듭니다.If you're using Tomcat, create an environment variable named CATALINA_OPTS with the value -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.

AppDynamics 구성Configure AppDynamics

  1. AppDynamics.com에서 AppDynamics 계정 만들기Create an AppDynamics account at AppDynamics.com
  2. AppDynamics 웹 사이트에서 Java 에이전트를 다운로드하면 파일 이름은 AppServerAgent-x.x.x.xxxxx.zip과 유사합니다.Download the Java agent from the AppDynamics website, the file name will be similar to AppServerAgent-x.x.x.xxxxx.zip
  3. Kudu 콘솔 을 사용 하 여 /home/site/wwwroot/apm새 디렉터리를 만듭니다.Use the Kudu console to create a new directory /home/site/wwwroot/apm.
  4. Java 에이전트 파일을 /home/site/wwwroot/apm 아래의 디렉터리에 업로드합니다.Upload the Java agent files into a directory under /home/site/wwwroot/apm. 에이전트의 파일은 /home/site/wwwroot/apm/appdynamics에 있어야 합니다.The files for your agent should be in /home/site/wwwroot/apm/appdynamics.
  5. Azure Portal의 App Service에서 사용자 애플리케이션을 찾아 새 애플리케이션 설정을 만듭니다.In the Azure portal, browse to your application in App Service and create a new Application Setting.
    • Java SE를 사용하는 경우 값이 -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>JAVA_OPTS라는 환경 변수를 만듭니다. 여기서 <app-name>은 App Service 이름입니다.If you're using Java SE, create an environment variable named JAVA_OPTS with the value -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> where <app-name> is your App Service name.
    • Tomcat을 사용하는 경우 값이 -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>CATALINA_OPTS라는 환경 변수를 만듭니다. 여기서 <app-name>은 App Service 이름입니다.If you're using Tomcat, create an environment variable named CATALINA_OPTS with the value -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> where <app-name> is your App Service name.

JAVA_OPTS 또는 CATALINA_OPTS에 대한 환경 변수가 이미 있는 경우 현재 값의 끝에 -javaagent:/... 옵션을 추가합니다.If you already have an environment variable for JAVA_OPTS or CATALINA_OPTS, append the -javaagent:/... option to the end of the current value.

데이터 원본Data sources

TomcatTomcat

이러한 지침은 데이터베이스 연결에 적용됩니다.These instructions apply to all database connections. 선택한 데이터베이스의 드라이버 클래스 이름 및 JAR 파일로 자리 표시자를 채워야 합니다.You will need to fill placeholders with your chosen database's driver class name and JAR file. 공통 데이터베이스에 대한 클래스 이름 및 드라이버 다운로드가 포함된 표가 제공됩니다.Provided is a table with class names and driver downloads for common databases.

데이터베이스Database 드라이버 클래스 이름Driver Class Name JDBC 드라이버JDBC Driver
PostgreSQLPostgreSQL org.postgresql.Driver 다운로드Download
MySQLMySQL com.mysql.jdbc.Driver 다운로드(“플랫폼 독립적” 선택)Download (Select "Platform Independent")
SQL ServerSQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver 다운로드Download

JDBC(Java Database Connectivity) 또는 JPA(Java Persistence API)를 사용하도록 Tomcat을 구성하려면 먼저 시작 시 Tomcat에서 읽은 CATALINA_OPTS 환경 변수를 사용자 지정합니다.To configure Tomcat to use Java Database Connectivity (JDBC) or the Java Persistence API (JPA), first customize the CATALINA_OPTS environment variable that is read in by Tomcat at start-up. App Service Maven 플러그 인에서 앱 설정을 통해 이러한 값을 설정합니다.Set these values through an app setting in the App Service Maven plugin:

<appSettings>
    <property>
        <name>CATALINA_OPTS</name>
        <value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
    </property>
</appSettings>

또는 Azure Portal의 구성 > 애플리케이션 설정 페이지에서 환경 변수를 설정합니다.Or set the environment variables in the Configuration > Application Settings page in the Azure portal.

다음으로, 데이터 원본을 한 애플리케이션에만 제공할 것인지 또는 Tomcat 서블릿에서 실행 중인 모든 애플리케이션에 제공할 것인지 결정합니다.Next, determine if the data source should be available to one application or to all applications running on the Tomcat servlet.

애플리케이션 수준 데이터 원본Application-level data sources

  1. 프로젝트의 META-INF/ 디렉터리에 context.xml 파일을 만듭니다.Create a context.xml file in the META-INF/ directory of your project. META-INF/ 디렉터리가 없으면 디렉터리를 만듭니다.Create the META-INF/ directory if it does not exist.

  2. context.xml에서는 데이터 원본을 JNDI 주소에 연결하는 Context 요소를 추가합니다.In context.xml, add a Context element to link the data source to a JNDI address. driverClassName 자리 표시자를 위 테이블에 있는 드라이버의 클래스 이름으로 바꿉니다.Replace the driverClassName placeholder with your driver's class name from the table above.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${dbuser}"
            driverClassName="<insert your driver class name>"
            username="${dbpassword}"
            password="${connURL}"
        />
    </Context>
    
  3. 애플리케이션의 데이터 원본을 사용하도록 애플리케이션의 web.xml을 업데이트합니다.Update your application's web.xml to use the data source in your application.

    <resource-env-ref>
        <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>
    

구성 완료Finalize configuration

마지막으로 Tomcat 클래스 경로에 드라이버 Jar를 저장 하 고 App Service를 다시 시작 합니다.Finally, we will place the driver JARs in the Tomcat classpath and restart your App Service. JDBC 드라이버 파일을 Tomcat classloader에 사용할 수 있도록 /home/tomcat/lib 디렉터리에 배치합니다.Ensure that the JDBC driver files are available to the Tomcat classloader by placing them in the /home/tomcat/lib directory. (아직 존재하지 않는 경우 이 디렉터리를 만듭니다.) 이러한 파일을 App Service 인스턴스에 업로드하려면 다음 단계를 수행합니다.(Create this directory if it does not already exist.) To upload these files to your App Service instance, perform the following steps:

  1. Cloud Shell에서 웹앱 확장을 설치합니다.In the Cloud Shell, install the webapp extension:

    az extension add -–name webapp
    
  2. 다음 CLI 명령을 실행하여 로컬 시스템에서 App Service로 SSH 터널을 만듭니다.Run the following CLI command to create an SSH tunnel from your local system to App Service:

    az webapp remote-connection create --resource-group <resource-group-name> --name <app-name> --port <port-on-local-machine>
    
  3. SFTP 클라이언트를 사용하여 로컬 터널링 포트에 연결하고 파일을 /home/tomcat/lib 폴더에 업로드합니다.Connect to the local tunneling port with your SFTP client and upload the files to the /home/tomcat/lib folder.

또는 FTP 클라이언트를 사용하여 JDBC 드라이버를 업로드할 수 있습니다.Alternatively, you can use an FTP client to upload the JDBC driver. FTP 자격 증명을 가져오기 위한 이러한 지침을 따릅니다.Follow these instructions for getting your FTP credentials.

Tomcat 구성Configuring Tomcat

Tomcat의 server.xml 또는 다른 구성 파일을 편집 하려면 먼저 포털에서 Tomcat 주 버전을 기록해 둡니다.To edit Tomcat's server.xml or other configuration files, first take a note of your Tomcat major version in the portal.

  1. 명령을 실행 하 여 버전에 대 한 Tomcat home 디렉터리를 찾습니다 env .Find the Tomcat home directory for your version by running the env command. 로 시작 하 고 주 버전과 일치 하는 환경 변수를 검색 AZURE_TOMCAT 합니다.Search for the environment variable that begins with AZURE_TOMCATand matches your major version. 예를 들어 AZURE_TOMCAT85_HOME 는 Tomcat 8.5에 대 한 Tomcat 디렉터리를 가리킵니다.For example, AZURE_TOMCAT85_HOME points to the Tomcat directory for Tomcat 8.5.
  2. 버전에 대 한 Tomcat home 디렉터리를 확인 한 후에 구성 디렉터리를로 복사 합니다 D:\home .Once you have identified the Tomcat home directory for your version, copy the configuration directory to D:\home. 예를 들어 AZURE_TOMCAT85_HOME 의 값이 인 경우 D:\Program Files (x86)\apache-tomcat-8.5.37 복사 된 디렉터리의 새 경로는 D:\home\apache-tomcat-8.5.37 입니다.For example, if AZURE_TOMCAT85_HOME had a value of D:\Program Files (x86)\apache-tomcat-8.5.37, the new path of the copied directory would be D:\home\apache-tomcat-8.5.37.

마지막으로, App Service를 다시 시작합니다.Finally, restart your App Service. 배포는 이전과 마찬가지로로 이동 해야 합니다 D:\home\site\wwwroot\webapps .Your deployments should go to D:\home\site\wwwroot\webapps just as before.

Java SE 구성Configure Java SE

을 실행 하는 경우 Windows의 Java SE에 대 한 JAR 응용 프로그램 server.port 은 응용 프로그램이 시작 될 때 명령줄 옵션으로 전달 됩니다.When running a .JAR application on Java SE on Windows, server.port is passed as a command line option as your application starts. 환경 변수에서 HTTP 포트를 수동으로 확인할 수 있습니다 HTTP_PLATFORM_PORT .You can manually resolve the HTTP port from the environment variable, HTTP_PLATFORM_PORT. 이 환경 변수의 값은 응용 프로그램이 수신 하는 HTTP 포트가 됩니다.The value of this environment variable will be the HTTP port your application should listen on.

Java 런타임 문 지원Java runtime statement of support

JDK 버전 및 유지 관리JDK versions and maintenance

Azure에서 지원되는 JDK(Java Development Kit)는 Azul Systems를 통해 제공하는 Zulu입니다.Azure's supported Java Development Kit (JDK) is Zulu provided through Azul Systems.

주 버전 업데이트는 Windows 용 Azure App Service의 새로운 런타임 옵션을 통해 제공 됩니다.Major version updates will be provided through new runtime options in Azure App Service for Windows. 고객은 App Service 배포를 구성하여 최신 버전의 Java로 업데이트해야 하며, 주 업데이트를 테스트하고 요구 사항을 충족하도록 관리할 책임이 있습니다.Customers update to these newer versions of Java by configuring their App Service deployment and are responsible for testing and ensuring the major update meets their needs.

지원되는 JDK는 매년 분기마다 1월, 4월, 7월, 10월에 자동으로 패치됩니다.Supported JDKs are automatically patched on a quarterly basis in January, April, July, and October of each year. Azure의 Java에 대 한 자세한 내용은 이 지원 문서를 참조 하세요.For more information on Java on Azure, please see this support document.

보안 업데이트Security updates

Azul Systems에서 주요 보안 취약점에 대한 패치 및 수정 사항을 출시하는 즉시 고객에게 제공됩니다.Patches and fixes for major security vulnerabilities will be released as soon as they become available from Azul Systems. NIST Common Vulnerability Scoring System 버전 2에서 기본 점수 9.0 이상을 받으면 "주요" 취약점으로 정의됩니다.A "major" vulnerability is defined by a base score of 9.0 or higher on the NIST Common Vulnerability Scoring System, version 2.

Tomcat 8.0이 2018 년 9 월 30 일까 지 종료 (EOL)에 도달 했습니다.Tomcat 8.0 has reached End of Life (EOL) as of September 30, 2018. Azure App Service에서 런타임을 계속 사용할 수 있지만 Azure는 Tomcat 8.0에 보안 업데이트를 적용 하지 않습니다.While the runtime is still available on Azure App Service, Azure will not apply security updates to Tomcat 8.0. 가능 하면 응용 프로그램을 Tomcat 8.5 또는 9.0로 마이그레이션합니다.If possible, migrate your applications to Tomcat 8.5 or 9.0. Tomcat 8.5 및 9.0은 모두 Azure App Service에서 사용할 수 있습니다.Both Tomcat 8.5 and 9.0 are available on Azure App Service. 자세한 내용은 공식 Tomcat 사이트 를 참조 하세요.See the official Tomcat site for more information.

사용 중단 및 사용 중지Deprecation and retirement

지원되는 Java 런타임이 폐기되는 경우 폐기 예정인 런타임을 사용하는 Azure 개발자에게는 적어도 런타임 폐기 6개월 전에 사용 중단 알림이 제공됩니다.If a supported Java runtime will be retired, Azure developers using the affected runtime will be given a deprecation notice at least six months before the runtime is retired.

로컬 개발Local development

개발자는 Azul의 다운로드 사이트에서 로컬 개발용 Azul Zulu Enterprise JDK의 프로덕션 버전을 다운로드할 수 있습니다.Developers can download the Production Edition of Azul Zulu Enterprise JDK for local development from Azul's download site.

개발 지원Development support

Azure 지원 Azul 줄루어 JDK 에 대 한 제품 지원은 azure 용으로 개발 하거나 정규화 된 azure 지원 계획을 사용 하 여 Azure Stack 때 Microsoft를 통해 제공 됩니다.Product support for the Azure-supported Azul Zulu JDK is available through Microsoft when developing for Azure or Azure Stack with a qualified Azure support plan.

런타임 지원Runtime support

개발자는 정규화된 지원 계획이 있는 경우 Azure 지원을 통해 Azul Zulu JDK 관련 문제를 제기할 수 있습니다.Developers can open an issue with the Azul Zulu JDKs through Azure Support if they have a qualified support plan.

다음 단계Next steps

이 항목에서는 Windows의 Azure App Service에 대 한 Java 런타임 설명을 제공 합니다.This topic provides the Java Runtime statement of support for Azure App Service on Windows.

Linux 기반의 Azure App Service는 Java 개발자가 Tomcat 또는 Java SE(Standard Edition) 패키지 웹 애플리케이션을 신속하게 구축하고, 완벽하게 관리되는 Linux 기반 서비스에 배포하고, 규모를 조정할 수 있게 도와줍니다.Azure App Service on Linux lets Java developers quickly build, deploy, and scale their Tomcat, or Java Standard Edition (SE) packaged web applications on a fully managed Linux-based service. 명령줄에서 또는 IntelliJ, Eclipse, Visual Studio Code 같은 편집기에서 Maven 플러그 인을 사용하여 애플리케이션을 배포할 수 있습니다.Deploy applications with Maven plugins from the command line or in editors like IntelliJ, Eclipse, or Visual Studio Code.

이 가이드에서는 App Service에 기본 제공된 Linux 컨테이너를 사용하는 Java 개발자를 위한 주요 개념과 지침을 제공합니다.This guide provides key concepts and instructions for Java developers who use a built-in Linux container in App Service. Azure App Service를 사용한 적이 없는 경우 Java 빠른 시작을 따릅니다.If you've never used Azure App Service, follow the Java quickstart.

앱 배포Deploying your app

.jar 및 .war 파일을 모두 배포하려면 Azure App Service용 Maven 플러그 인을 사용할 수 있습니다.You can use Maven Plugin for Azure App Service to deploy both .jar and .war files. 또한 배포 시 많이 사용되는 IDE를 사용하면 Azure Toolkit for IntelliJ 또는 Azure Toolkit for Eclipse에서 지원됩니다.Deployment with popular IDEs is also supported with Azure Toolkit for IntelliJ or Azure Toolkit for Eclipse.

그렇지 않으면 배포 방법이 보관 형식에 따라 달라집니다.Otherwise, your deployment method will depend on your archive type:

  • .war 파일을 Tomcat에 배포하려면 /api/wardeploy/ 엔드포인트를 사용하여 보관 파일을 게시합니다.To deploy .war files to Tomcat, use the /api/wardeploy/ endpoint to POST your archive file. 이 API에 대한 자세한 내용은 이 설명서를 참조하세요.For more information on this API, please see this documentation.
  • Java SE 이미지에서 .jar 파일을 배포하려면 Kudu 사이트의 /api/zipdeploy/ 엔드포인트를 사용합니다.To deploy .jar files on the Java SE images, use the /api/zipdeploy/ endpoint of the Kudu site. 이 API에 대한 자세한 내용은 이 설명서를 참조하세요.For more information on this API, please see this documentation.

FTP를 사용하여 .war 또는.jar을 배포하지 마십시오.Do not deploy your .war or .jar using FTP. FTP 도구는 시작 스크립트, 종속성 또는 기타 런타임 파일을 업로드하기 위해 설계되었습니다.The FTP tool is designed to upload startup scripts, dependencies, or other runtime files. 웹앱을 배포하기 위한 최적의 선택은 아닙니다.It is not the optimal choice for deploying web apps.

앱 로깅 및 디버깅Logging and debugging apps

Azure Portal을 통해 각 앱에 대한 성능 보고서, 트래픽 시각화 및 상태 확인을 사용할 수 있습니다.Performance reports, traffic visualizations, and health checkups are available for each app through the Azure portal. 자세한 내용은 Azure App Service 진단 개요를 참조하세요.For more information, see Azure App Service diagnostics overview.

SSH 콘솔 액세스SSH console access

컨테이너와 직접 SSH 세션을 열려면 앱을 실행해야 합니다.To make open a direct SSH session with your container, your app should be running.

브라우저에 다음 URL을 붙여넣고 앱 이름으로 <app-name>을 바꿉니다.Paste the following URL into your browser and replace <app-name> with your app name:

https://<app-name>.scm.azurewebsites.net/webssh/host

아직 인증을 받지 못한 경우 연결하기 위해서는 Azure 구독에서 인증을 받아야 합니다.If you're not yet authenticated, you're required to authenticate with your Azure subscription to connect. 인증되면 컨테이너 내부에서 명령을 실행할 수 있는 브라우저 내부 셸을 확인합니다.Once authenticated, you see an in-browser shell, where you can run commands inside your container.

SSH 연결

참고

/home 디렉터리 외부에서 변경한 사항은 컨테이너 자체에 저장되며 앱을 다시 시작한 이후에는 유지되지 않습니다.Any changes you make outside the /home directory are stored in the container itself and don't persist beyond an app restart.

로컬 컴퓨터에서 원격 SSH 세션을 열려면 원격 셸에서 SSH 세션 열기를 참조하세요.To open a remote SSH session from your local machine, see Open SSH session from remote shell.

진단 로그 스트림Stream diagnostic logs

컨테이너 내부에서 생성된 콘솔 로그에 액세스할 수 있습니다.You can access the console logs generated from inside the container. 먼저 Cloud Shell에서 다음 명령을 실행하여 컨테이너 로깅을 설정합니다.First, turn on container logging by running the following command in the Cloud Shell:

az webapp log config --name <app-name> --resource-group myResourceGroup --docker-container-logging filesystem

컨테이너 로깅이 설정되면 다음 명령을 실행하여 로그 스트림을 확인합니다.Once container logging is turned on, run the following command to see the log stream:

az webapp log tail --name <app-name> --resource-group myResourceGroup

콘솔 로그가 즉시 표시되지 않으면 30초 후에 다시 확인합니다.If you don't see console logs immediately, check again in 30 seconds.

참고

https://<app-name>.scm.azurewebsites.net/api/logs/docker의 브라우저에서 로그 파일을 검사할 수도 있습니다.You can also inspect the log files from the browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker.

언제든지 로그 스트리밍을 중지하려면 Ctrl+C를 입력합니다.To stop log streaming at any time, type Ctrl+C.

자세한 내용은 Cloud Shell에서 로그 스트리밍을 참조하세요.For more information, see Stream logs in Cloud Shell.

앱 로깅App logging

Azure Portal 또는 Azure CLI를 통해 애플리케이션 로깅을 사용하도록 설정하여 애플리케이션의 표준 콘솔 출력 및 표준 콘솔 오류 스트림을 로컬 파일 시스템 또는 Azure Blob Storage에 쓰도록 App Service를 구성할 수 있습니다.Enable application logging through the Azure portal or Azure CLI to configure App Service to write your application's standard console output and standard console error streams to the local filesystem or Azure Blob Storage. 로컬 App Service 파일 시스템 인스턴스에 로깅하는 동작은 구성된 지 12시간 후에 비활성화 됩니다.Logging to the local App Service filesystem instance is disabled 12 hours after it is configured. 더 긴 시간 동안 보존하기를 원하는 경우 Blob Storage 컨테이너에 출력을 쓰도록 애플리케이션을 구성합니다.If you need longer retention, configure the application to write output to a Blob storage container. Java 및 Tomcat 앱 로그는 /home/LogFiles/Application/ 디렉터리에서 찾을 수 있습니다.Your Java and Tomcat app logs can be found in the /home/LogFiles/Application/ directory.

참고

로컬 App Service 파일 시스템을 12시간 후에 사용하지 않도록 설정하는 로깅은 Windows 기반 App Services에만 적용됩니다.Logging to the local App Service filesystem becoming disabled after 12 hours only applies to Windows based App Services. Linux 기반 App Services에 대한 Azure Blob Storage 로깅은 Azure Monitor(미리 보기)를 사용해서만 구성할 수 있습니다.Azure Blob Storage logging for Linux based App Services can only be configured using Azure Monitor (preview)

애플리케이션에서 Logback 또는 Log4j를 추적에 사용하는 경우 Application Insights에서 Java 추적 로그 탐색의 로깅 프레임워크 구성 지침에 따라 이러한 추적 로그를 Azure Application Insights로 전송하여 검토할 수 있습니다.If your application uses Logback or Log4j for tracing, you can forward these traces for review into Azure Application Insights using the logging framework configuration instructions in Explore Java trace logs in Application Insights.

문제 해결 도구Troubleshooting tools

기본 제공 Java 이미지는 Alpine Linux 운영 체제를 기반으로 합니다.The built-in Java images are based on the Alpine Linux operating system. apk 패키지 관리자를 사용하여 문제 해결 도구 또는 명령을 설치합니다.Use the apk package manager to install any troubleshooting tools or commands.

비행 레코더Flight Recorder

App Service의 모든 Linux Java 이미지에는 Zulu 비행 레코더가 설치되어 있으므로 JVM에 쉽게 연결하고 프로파일러 기록을 시작하거나 힙 덤프를 생성할 수 있습니다.All Linux Java images on App Service have Zulu Flight Recorder installed so you can easily connect to the JVM and start a profiler recording or generate a heap dump.

시간 기록Timed Recording

시작하려면 App Service에 SSH를 사용하고 jcmd 명령을 실행하여 실행 중인 모든 Java 프로세스 목록을 확인합니다.To get started, SSH into your App Service and run the jcmd command to see a list of all the Java processes running. Jcmd 자체 외에 PID(프로세스 ID 번호)로 Java 애플리케이션이 실행 중인 것을 볼 수 있습니다.In addition to jcmd itself, you should see your Java application running with a process ID number (pid).

078990bbcd11:/home# jcmd
Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
147 sun.tools.jcmd.JCmd
116 /home/site/wwwroot/app.jar

아래 명령을 실행하여 JVM의 30초 기록을 시작합니다.Execute the command below to start a 30-second recording of the JVM. 그러면 JVM을 프로파일링하고 홈 디렉터리에 jfr_example.jfr이라는 JFR 파일을 만듭니다.This will profile the JVM and create a JFR file named jfr_example.jfr in the home directory. (116을 Java 앱의 PID로 대체합니다.)(Replace 116 with the pid of your Java app.)

jcmd 116 JFR.start name=MyRecording settings=profile duration=30s filename="/home/jfr_example.jfr"

30초 간격 동안 jcmd 116 JFR.check를 실행하여 기록이 발생하는지 확인할 수 있습니다.During the 30 second interval, you can validate the recording is taking place by running jcmd 116 JFR.check. 그러면 지정된 Java 프로세스의 모든 기록이 표시됩니다.This will show all recordings for the given Java process.

연속 기록Continuous Recording

Zulu 비행 레코더를 사용하여 런타임 성능에 대한 영향을 최소화하면서 Java 애플리케이션을 지속적으로 프로파일링할 수 있습니다(원본).You can use Zulu Flight Recorder to continuously profile your Java application with minimal impact on runtime performance (source). 이렇게 하려면 다음 Azure CLI 명령을 실행하여 필요한 구성으로 JAVA_OPTS 앱 설정을 만듭니다.To do so, run the following Azure CLI command to create an App Setting named JAVA_OPTS with the necessary configuration. 앱이 시작되면 JAVA_OPTS 앱 설정의 내용이 java 명령에 전달됩니다.The contents of the JAVA_OPTS App Setting are passed to the java command when your app is started.

az webapp config appsettings set -g <your_resource_group> -n <your_app_name> --settings JAVA_OPTS=-XX:StartFlightRecording=disk=true,name=continuous_recording,dumponexit=true,maxsize=1024m,maxage=1d

기록이 시작되면 JFR.dump 명령을 사용하여 언제든지 현재 기록 데이터를 덤프할 수 있습니다.Once the recording has started, you can dump the current recording data at any time using the JFR.dump command.

jcmd <pid> JFR.dump name=continuous_recording filename="/home/recording1.jfr"

자세한 내용은 Jcmd 명령 참조를 참조하세요.For more information, please see the Jcmd Command Reference.

기록 분석Analyzing Recordings

FTPS를 사용하여 JFR 파일을 로컬 컴퓨터에 다운로드합니다.Use FTPS to download your JFR file to your local machine. JFR 파일을 분석하려면 Zulu Mission Control을 다운로드하여 설치합니다.To analyze the JFR file, download and install Zulu Mission Control. Zulu Mission Control에 대한 지침은 Azul 설명서설치 지침을 참조하세요.For instructions on Zulu Mission Control, see the Azul documentation and the installation instructions.

사용자 지정 및 튜닝Customization and tuning

Linux용 Azure App Service는 기본적으로 Azure Portal 및 CLI를 통해 튜닝 및 사용자 지정이 가능합니다.Azure App Service for Linux supports out of the box tuning and customization through the Azure portal and CLI. 비 Java 관련 웹앱 구성에 대한 다음 문서를 검토하세요.Review the following articles for non-Java-specific web app configuration:

Java 런타임 옵션 설정Set Java runtime options

Tomcat 및 Java SE 환경에서 할당된 메모리 또는 기타 JVM 런타임 옵션을 설정하려면 JAVA_OPTS라는 앱 설정을 옵션과 함께 만듭니다.To set allocated memory or other JVM runtime options in both the Tomcat and Java SE environments, create an app setting named JAVA_OPTS with the options. App Service Linux는 시작될 때 이 설정을 Java 런타임에 환경 변수로 전달합니다.App Service Linux passes this setting as an environment variable to the Java runtime when it starts.

Azure Portal에서, 웹앱의 애플리케이션 설정 아래에서 -Xms512m -Xmx1204m처럼 추가 설정을 포함하는 JAVA_OPTS라고 하는 새 앱 설정을 만듭니다.In the Azure portal, under Application Settings for the web app, create a new app setting named JAVA_OPTS that includes the additional settings, such as -Xms512m -Xmx1204m.

Maven 플러그 인에서 앱 설정을 구성하려면 Azure 플러그 인 섹션에서 설정/값 태그를 추가합니다.To configure the app setting from the Maven plugin, add setting/value tags in the Azure plugin section. 다음 예에서는 특정 최소 및 최대 Java 힙 크기를 설정합니다.The following example sets a specific minimum and maximum Java heap size:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Xms512m -Xmx1204m</value>
    </property>
</appSettings>

App Service 계획에서 배포 슬롯 하나를 사용하여 단일 애플리케이션을 실행하는 개발자는 다음 옵션을 사용할 수 있습니다.Developers running a single application with one deployment slot in their App Service plan can use the following options:

  • B1 및 S1 인스턴스: -Xms1024m -Xmx1024mB1 and S1 instances: -Xms1024m -Xmx1024m
  • B2 및 S2 인스턴스: -Xms3072m -Xmx3072mB2 and S2 instances: -Xms3072m -Xmx3072m
  • B3 및 S3 인스턴스: -Xms6144m -Xmx6144mB3 and S3 instances: -Xms6144m -Xmx6144m

애플리케이션 힙 설정을 튜닝할 때 App Service 계획 세부 정보를 검토하고 여러 애플리케이션 및 배포 슬롯 요구 사항을 고려하여 최적의 메모리 할당을 찾아보세요.When tuning application heap settings, review your App Service plan details and take into account multiple applications and deployment slot needs to find the optimal allocation of memory.

JAR 애플리케이션을 배포하는 경우 기본 제공 이미지가 애플리케이션을 올바르게 식별할 수 있도록 app.jar로 이름을 지정해야 합니다.If you are deploying a JAR application, it should be named app.jar so that the built-in image can correctly identify your app. (Maven 플러그 인은 이 이름을 자동으로 변경합니다.) JAR 이름을 app.jar로 변경하지 않으려는 경우에는 JAR을 실행하는 명령을 사용하여 셸 스크립트를 업로드하면 됩니다.(The Maven plugin does this renaming automatically.) If you do not wish to rename your JAR to app.jar, you can upload a shell script with the command to run your JAR. 그런 다음, 포털의 구성 섹션에 있는 시작 파일 텍스트 상자에 이 스크립트의 전체 경로를 붙여넣습니다.Then paste the full path to this script in the Startup File textbox in the Configuration section of the portal. 시작 스크립트는 배치된 디렉터리에서 실행되지 않습니다.The startup script does not run from the directory into which it is placed. 따라서 항상 절대 경로를 사용하여 시작 스크립트의 파일을 참조해야 합니다(예: java -jar /home/myapp/myapp.jar).Therefore, always use absolute paths to reference files in your startup script (for example: java -jar /home/myapp/myapp.jar).

웹 소켓 켜기Turn on web sockets

애플리케이션의 Azure Portal 애플리케이션 설정에서 웹 소켓을 켭니다.Turn on support for web sockets in the Azure portal in the Application settings for the application. 설정을 적용하려면 애플리케이션을 다시 시작해야 합니다.You'll need to restart the application for the setting to take effect.

Azure CLI에서 다음 명령을 사용하여 웹 소켓 지원을 켭니다.Turn on web socket support using the Azure CLI with the following command:

az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true

그런 다음, 애플리케이션을 다시 시작합니다.Then restart your application:

az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>

기본 문자 인코딩 설정Set default character encoding

Azure Portal에서, 웹앱의 애플리케이션 설정 아래에 -Dfile.encoding=UTF-8 값을 사용하여 JAVA_OPTS이라고 하는 새 앱 설정을 만듭니다.In the Azure portal, under Application Settings for the web app, create a new app setting named JAVA_OPTS with value -Dfile.encoding=UTF-8.

또는 App Service Maven 플러그 인을 사용하여 앱 설정을 구성할 수 있습니다.Alternatively, you can configure the app setting using the App Service Maven plugin. 플러그 인 구성에서 설정 이름 및 값 태그를 추가합니다.Add the setting name and value tags in the plugin configuration:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Dfile.encoding=UTF-8</value>
    </property>
</appSettings>

시작 시간 제한 조정Adjust startup timeout

Java 애플리케이션이 특별히 클 경우 시작 시간 제한을 늘려야 합니다.If your Java application is particularly large, you should increase the startup time limit. 이 작업을 수행하려면 애플리케이션 설정 WEBSITES_CONTAINER_START_TIME_LIMIT를 만들고 제한 시간이 초과될 때까지 App Service가 기다려야 하는 시간(초)으로 설정합니다. 최댓값은 1800초입니다.To do this, create an application setting, WEBSITES_CONTAINER_START_TIME_LIMIT and set it to the number of seconds that App Service should wait before timing out. The maximum value is 1800 seconds.

JSP 파일 미리 컴파일Pre-Compile JSP files

Tomcat 애플리케이션의 성능을 향상시키기 위해 App Service에 배포하기 전에 JSP 파일을 컴파일할 수 있습니다.To improve performance of Tomcat applications, you can compile your JSP files before deploying to App Service. Apache Sling에서 제공하는 Maven 플러그 인 또는 Ant 빌드 파일을 사용할 수 있습니다.You can use the Maven plugin provided by Apache Sling, or using this Ant build file.

보안 애플리케이션Secure applications

Linux용 App Service에서 실행되는 Java 애플리케이션의 보안 모범 사례 집합은 다른 애플리케이션과 동일합니다.Java applications running in App Service for Linux have the same set of security best practices as other applications.

사용자 인증(간편 인증)Authenticate users (Easy Auth)

Azure Portal에서 인증 및 권한 부여 옵션을 사용하여 앱 인증을 설정합니다.Set up app authentication in the Azure portal with the Authentication and Authorization option. 여기서 Azure Active Directory 또는 Facebook, Google, GitHub 등의 소셜 로그인을 사용하여 인증을 사용하도록 설정할 수 있습니다.From there, you can enable authentication using Azure Active Directory or social logins like Facebook, Google, or GitHub. Azure Portal 구성은 단일 인증 공급자를 구성할 때만 작동합니다.Azure portal configuration only works when configuring a single authentication provider. 자세한 내용은 Azure Active Directory 로그인을 사용하도록 App Service 앱 구성 및 기타 ID 공급자 관련 문서를 참조하세요.For more information, see Configure your App Service app to use Azure Active Directory login and the related articles for other identity providers. 여러 로그인 공급자를 사용하도록 설정해야 하는 경우 App Service 인증 사용자 지정 문서의 지침을 따르세요.If you need to enable multiple sign-in providers, follow the instructions in the customize App Service authentication article.

TomcatTomcat

Tomcat 애플리케이션은 주체 개체를 Map 개체로 캐스팅하여 서블릿에서 사용자의 클레임에 직접 액세스할 수 있습니다.Your Tomcat application can access the user's claims directly from the servlet by casting the Principal object to a Map object. Map 개체는 각 클레임 유형을 해당 유형에 대한 클레임 컬렉션에 매핑합니다.The Map object will map each claim type to a collection of the claims for that type. 아래 코드에서 requestHttpServletRequest의 인스턴스입니다.In the code below, request is an instance of HttpServletRequest.

Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();

이제 특정 클레임에 대한 Map 개체를 검사할 수 있습니다.Now you can inspect the Map object for any specific claim. 예를 들어 다음 코드 조각은 모든 클레임 형식을 반복하고 각 컬렉션의 내용을 인쇄합니다.For example, the following code snippet iterates through all the claim types and prints the contents of each collection.

for (Object key : map.keySet()) {
        Object value = map.get(key);
        if (value != null && value instanceof Collection {
            Collection claims = (Collection) value;
            for (Object claim : claims) {
                System.out.println(claims);
            }
        }
    }

사용자를 로그아웃시키려면 /.auth/ext/logout 경로를 사용합니다.To sign users out, use the /.auth/ext/logout path. 다른 작업을 수행하려면 App Service 인증 및 권한 부여 사용에 대한 설명서를 참조하세요.To perform other actions, please see the documentation on App Service Authentication and Authorization usage. Tomcat HttpServletRequest 인터페이스 및 해당 메서드에 대한 공식 설명서도 있습니다.There is also official documentation on the Tomcat HttpServletRequest interface and its methods. 다음 서블릿 메서드도 App Service 구성에 따라 하이드레이션됩니다.The following servlet methods are also hydrated based on your App Service configuration:

public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()

이 기능을 사용하지 않도록 설정하려면 값이 1WEBSITE_AUTH_SKIP_PRINCIPAL 애플리케이션 설정을 만듭니다.To disable this feature, create an Application Setting named WEBSITE_AUTH_SKIP_PRINCIPAL with a value of 1. App Service에서 추가한 모든 서블릿 필터를 사용하지 않도록 설정하려면 값이 1WEBSITE_SKIP_FILTERS 설정을 만듭니다.To disable all servlet filters added by App Service, create a setting named WEBSITE_SKIP_FILTERS with a value of 1.

Spring BootSpring Boot

Spring Boot 개발자는 Azure Active Directory Spring Boot starter를 사용하여 친숙한 Spring Security 주석 및 API로 애플리케이션을 보호할 수 있습니다.Spring Boot developers can use the Azure Active Directory Spring Boot starter to secure applications using familiar Spring Security annotations and APIs. application.properties 파일에서 최대 헤더 크기를 늘려야 합니다.Be sure to increase the maximum header size in your application.properties file. 이 값은 16384로 설정하는 것이 좋습니다.We suggest a value of 16384.

TLS/SSL 구성Configure TLS/SSL

Azure App Service에서 SSL 바인딩으로 사용자 지정 DNS 이름 보호 지침에 따라 기존 SSL 인증서를 업로드하고 애플리케이션의 도메인 이름에 바인딩합니다.Follow the instructions in the Secure a custom DNS name with an SSL binding in Azure App Service to upload an existing SSL certificate and bind it to your application's domain name. 기본적으로 애플리케이션에서 HTTP 연결을 계속 허용합니다. 자습서의 단계에 따라 SSL 및 TLS를 적용하세요.By default your application will still allow HTTP connections-follow the specific steps in the tutorial to enforce SSL and TLS.

KeyVault 참조 사용Use KeyVault References

Azure KeyVault는 액세스 정책 및 감사 기록을 통해 중앙 집중식 비밀 관리를 제공합니다.Azure KeyVault provides centralized secret management with access policies and audit history. 키 자격 증명 모음에 암호 또는 연결 문자열과 같은 비밀을 저장하고 환경 변수를 통해 애플리케이션에서 이러한 비밀에 액세스할 수 있습니다.You can store secrets (such as passwords or connection strings) in KeyVault and access these secrets in your application through environment variables.

먼저 Key Vault에 앱 액세스 권한을 부여하고 애플리케이션 설정에서 사용자 비밀을 KeyVault 참조로 만드는 지침을 따릅니다.First, follow the instructions for granting your app access to Key Vault and making a KeyVault reference to your secret in an Application Setting. App Service 터미널에 원격으로 액세스하는 동안 환경 변수를 인쇄하여 참조가 비밀로 해결되는지 확인할 수 있습니다.You can validate that the reference resolves to the secret by printing the environment variable while remotely accessing the App Service terminal.

이러한 비밀을 Spring 또는 Tomcat 구성 파일에 삽입하려면 환경 변수 삽입 구문(${MY_ENV_VAR})을 사용합니다.To inject these secrets in your Spring or Tomcat configuration file, use environment variable injection syntax (${MY_ENV_VAR}). Spring 구성 파일은 표면화된 구성에 대한 이 설명서를 참조하세요.For Spring configuration files, please see this documentation on externalized configurations.

Java 키 저장소 사용Using the Java Key Store

기본적으로 App Service Linux에 업로드된 공용 또는 프라이빗 인증서는 컨테이너가 시작될 때 해당 Java 키 저장소에 로드됩니다.By default, any public or private certificates uploaded to App Service Linux will be loaded into the respective Java Key Stores as the container starts. 인증서를 업로드한 후에는 Java 키 저장소에 로드하기 위해 App Service를 다시 시작해야 합니다.After uploading your certificate, you will need to restart your App Service for it to be loaded into the Java Key Store. 공용 인증서는 $JAVA_HOME/jre/lib/security/cacerts에서 키 저장소로 로드되고 프라이빗 인증서는 $JAVA_HOME/lib/security/client.jks에 저장됩니다.Public certificates are loaded into the Key Store at $JAVA_HOME/jre/lib/security/cacerts, and private certificates are stored in $JAVA_HOME/lib/security/client.jks.

Java Key Store의 인증서를 사용하여 JDBC 연결을 암호화하려면 추가 구성이 필요할 수 있습니다.Additional configuration may be necessary for encrypting your JDBC connection with certificates in the Java Key Store. 선택한 JDBC 드라이버에 대한 설명서를 참조하세요.Please refer to the documentation for your chosen JDBC driver.

Java 키 저장소 초기화Initializing the Java Key Store

import java.security.KeyStore 개체를 초기화하려면 암호를 사용하여 키 저장소 파일을 로드합니다.To initialize the import java.security.KeyStore object, load the keystore file with the password. 두 키 저장소의 기본 암호는 "changeit"입니다.The default password for both key stores is "changeit".

KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
    new FileInputStream(System.getenv("JAVA_HOME")+"/lib/security/cacets"),
    "changeit".toCharArray());

KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
    new FileInputStream(System.getenv("JAVA_HOME")+"/lib/security/client.jks"),
    "changeit".toCharArray());

수동으로 키 저장소 로드Manually load the key store

키 저장소에 인증서를 수동으로 로드할 수 있습니다.You can load certificates manually to the key store. App Service가 인증서를 키 저장소에 자동으로 로드하지 못하도록 값이 1인 앱 설정 SKIP_JAVA_KEYSTORE_LOAD를 만듭니다.Create an app setting, SKIP_JAVA_KEYSTORE_LOAD, with a value of 1 to disable App Service from loading the certificates into the key store automatically. Azure Portal을 통해 App Service에 업로드된 모든 공용 인증서는 /var/ssl/certs/에 저장됩니다.All public certificates uploaded to App Service via the Azure portal are stored under /var/ssl/certs/. 프라이빗 인증서는 /var/ssl/private/에 저장됩니다.Private certificates are stored under /var/ssl/private/.

App Service에 SSH 연결을 열고 keytool 명령을 실행하여 Java Key Tool을 상호 작용하거나 디버그할 수 있습니다.You can interact or debug the Java Key Tool by opening an SSH connection to your App Service and running the command keytool. 명령 목록은 핵심 도구 설명서를 참조하세요.See the Key Tool documentation for a list of commands. KeyStore API에 대한 자세한 내용은 공식 설명서를 참조하세요.For more information on the KeyStore API, please refer to the official documentation.

APM 플랫폼 구성Configure APM platforms

이 섹션에서는 NewRelic 및 AppDynamics APM(애플리케이션 성능 모니터링) 플랫폼을 사용하여 Linux의 Azure App Service에 배포된 Java 애플리케이션을 연결하는 방법을 보여 줍니다.This section shows how to connect Java applications deployed on Azure App Service on Linux with the NewRelic and AppDynamics application performance monitoring (APM) platforms.

New Relic 구성Configure New Relic

  1. NewRelic.com에서 NewRelic 계정 만들기Create a NewRelic account at NewRelic.com
  2. NewRelic에서 Java 에이전트를 다운로드합니다. 파일 이름은 newrelic-java-x.x.x.zip과 유사합니다.Download the Java agent from NewRelic, it will have a file name similar to newrelic-java-x.x.x.zip.
  3. 라이선스 키를 복사합니다. 이 키는 나중에 에이전트를 구성하는 데 필요합니다.Copy your license key, you'll need it to configure the agent later.
  4. App Service 인스턴스에 대해 SSH를 실행하고 새 디렉터리 /home/site/wwwroot/apm을 만듭니다.SSH into your App Service instance and create a new directory /home/site/wwwroot/apm.
  5. 압축이 풀린 NewRelic Java 에이전트 파일을 /home/site/wwwroot/apm 아래 디렉터리에 업로드합니다.Upload the unpacked NewRelic Java agent files into a directory under /home/site/wwwroot/apm. 에이전트의 파일은 /home/site/wwwroot/apm/newrelic에 있어야 합니다.The files for your agent should be in /home/site/wwwroot/apm/newrelic.
  6. /home/site/wwwroot/apm/newrelic/newrelic.yml에서 YAML 파일을 수정하고 자리 표시자 라이선스 값을 사용자의 라이선스 키로 바꿉니다.Modify the YAML file at /home/site/wwwroot/apm/newrelic/newrelic.yml and replace the placeholder license value with your own license key.
  7. Azure Portal의 App Service에서 사용자 애플리케이션을 찾아 새 애플리케이션 설정을 만듭니다.In the Azure portal, browse to your application in App Service and create a new Application Setting.
    • 앱이 Java SE를 사용하는 경우 값이 -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jarJAVA_OPTS라는 환경 변수를 만듭니다.If your app is using Java SE, create an environment variable named JAVA_OPTS with the value -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.
    • Tomcat을 사용하는 경우 값이 -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jarCATALINA_OPTS라는 환경 변수를 만듭니다.If you're using Tomcat, create an environment variable named CATALINA_OPTS with the value -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.

AppDynamics 구성Configure AppDynamics

  1. AppDynamics.com에서 AppDynamics 계정 만들기Create an AppDynamics account at AppDynamics.com

  2. AppDynamics 웹 사이트에서 Java 에이전트를 다운로드하면 파일 이름은 AppServerAgent-x.x.x.xxxxx.zip과 유사합니다.Download the Java agent from the AppDynamics website, the file name will be similar to AppServerAgent-x.x.x.xxxxx.zip

  3. App Service 인스턴스에 대해 SSH를 실행하고 새 디렉터리 /home/site/wwwroot/apm을 만듭니다.SSH into your App Service instance and create a new directory /home/site/wwwroot/apm.

  4. Java 에이전트 파일을 /home/site/wwwroot/apm 아래의 디렉터리에 업로드합니다.Upload the Java agent files into a directory under /home/site/wwwroot/apm. 에이전트의 파일은 /home/site/wwwroot/apm/appdynamics에 있어야 합니다.The files for your agent should be in /home/site/wwwroot/apm/appdynamics.

  5. Azure Portal의 App Service에서 사용자 애플리케이션을 찾아 새 애플리케이션 설정을 만듭니다.In the Azure portal, browse to your application in App Service and create a new Application Setting.

    • Java SE를 사용하는 경우 값이 -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>JAVA_OPTS라는 환경 변수를 만듭니다. 여기서 <app-name>은 App Service 이름입니다.If you're using Java SE, create an environment variable named JAVA_OPTS with the value -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> where <app-name> is your App Service name.
    • Tomcat을 사용하는 경우 값이 -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name>CATALINA_OPTS라는 환경 변수를 만듭니다. 여기서 <app-name>은 App Service 이름입니다.If you're using Tomcat, create an environment variable named CATALINA_OPTS with the value -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> where <app-name> is your App Service name.

    참고

    JAVA_OPTS 또는 CATALINA_OPTS에 대한 환경 변수가 이미 있는 경우 현재 값의 끝에 -javaagent:/... 옵션을 추가합니다.If you already have an environment variable for JAVA_OPTS or CATALINA_OPTS, append the -javaagent:/... option to the end of the current value.

JAR 애플리케이션 구성Configure JAR Applications

JAR 앱 시작Starting JAR Apps

기본적으로 App Service는 JAR 애플리케이션의 이름이 app.jar일 것으로 예상합니다.By default, App Service expects your JAR application to be named app.jar. 이 이름이 있으면 자동으로 실행됩니다.If it has this name, it will be run automatically. Maven 사용자는 pom.xml<build> 섹션에 <finalName>app</finalName>을 포함하여 JAR 이름을 설정할 수 있습니다.For Maven users, you can set the JAR name by including <finalName>app</finalName> in the <build> section of your pom.xml. archiveFileName 속성을 설정하여 Gradle에서 동일한 작업을 수행할 수 있습니다.You can do the same in Gradle by setting the archiveFileName property.

JAR에 다른 이름을 사용하려는 경우 JAR 파일을 실행하는 시작 명령도 제공해야 합니다.If you want to use a different name for your JAR, you must also provide the Startup Command that executes your JAR file. 예들 들어 java -jar my-jar-app.jar입니다.For example, java -jar my-jar-app.jar. 시작 명령에 대한 값은 포털의 구성 > 일반 설정에서 설정하거나 STARTUP_COMMAND라는 애플리케이션 설정으로 설정할 수 있습니다.You can set the value for your Startup Command in the Portal, under Configuration > General Settings, or with an Application Setting named STARTUP_COMMAND.

서버 포트Server Port

App Service Linux는 들어오는 요청을 포트 80에 라우팅하므로 애플리케이션은 포트 80에서도 수신 대기해야 합니다.App Service Linux routes incoming requests to port 80, so your application should listen on port 80 as well. 애플리케이션의 구성(예: Spring의 application.properties 파일) 또는 시작 명령(예: java -jar spring-app.jar --server.port=80)에서 이 작업을 수행할 수 있습니다.You can do this in your application's configuration (such as Spring's application.properties file), or in your Startup Command (for example, java -jar spring-app.jar --server.port=80). 일반적인 Java 프레임워크는 다음 설명서를 참조하세요.Please see the following documentation for common Java frameworks:

데이터 원본Data sources

TomcatTomcat

이러한 지침은 데이터베이스 연결에 적용됩니다.These instructions apply to all database connections. 선택한 데이터베이스의 드라이버 클래스 이름 및 JAR 파일로 자리 표시자를 채워야 합니다.You will need to fill placeholders with your chosen database's driver class name and JAR file. 공통 데이터베이스에 대한 클래스 이름 및 드라이버 다운로드가 포함된 표가 제공됩니다.Provided is a table with class names and driver downloads for common databases.

데이터베이스Database 드라이버 클래스 이름Driver Class Name JDBC 드라이버JDBC Driver
PostgreSQLPostgreSQL org.postgresql.Driver 다운로드Download
MySQLMySQL com.mysql.jdbc.Driver 다운로드(“플랫폼 독립적” 선택)Download (Select "Platform Independent")
SQL ServerSQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver 다운로드Download

JDBC(Java Database Connectivity) 또는 JPA(Java Persistence API)를 사용하도록 Tomcat을 구성하려면 먼저 시작 시 Tomcat에서 읽은 CATALINA_OPTS 환경 변수를 사용자 지정합니다.To configure Tomcat to use Java Database Connectivity (JDBC) or the Java Persistence API (JPA), first customize the CATALINA_OPTS environment variable that is read in by Tomcat at start-up. App Service Maven 플러그 인에서 앱 설정을 통해 이러한 값을 설정합니다.Set these values through an app setting in the App Service Maven plugin:

<appSettings>
    <property>
        <name>CATALINA_OPTS</name>
        <value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
    </property>
</appSettings>

또는 Azure Portal의 구성 > 애플리케이션 설정 페이지에서 환경 변수를 설정합니다.Or set the environment variables in the Configuration > Application Settings page in the Azure portal.

다음으로, 데이터 원본을 한 애플리케이션에만 제공할 것인지 또는 Tomcat 서블릿에서 실행 중인 모든 애플리케이션에 제공할 것인지 결정합니다.Next, determine if the data source should be available to one application or to all applications running on the Tomcat servlet.

애플리케이션 수준 데이터 원본Application-level data sources

  1. 프로젝트의 META-INF/ 디렉터리에 context.xml 파일을 만듭니다.Create a context.xml file in the META-INF/ directory of your project. META-INF/ 디렉터리가 없으면 디렉터리를 만듭니다.Create the META-INF/ directory if it does not exist.

  2. context.xml에서는 데이터 원본을 JNDI 주소에 연결하는 Context 요소를 추가합니다.In context.xml, add a Context element to link the data source to a JNDI address. driverClassName 자리 표시자를 위 테이블에 있는 드라이버의 클래스 이름으로 바꿉니다.Replace the driverClassName placeholder with your driver's class name from the table above.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${dbuser}"
            driverClassName="<insert your driver class name>"
            username="${dbpassword}"
            password="${connURL}"
        />
    </Context>
    
  3. 애플리케이션의 데이터 원본을 사용하도록 애플리케이션의 web.xml을 업데이트합니다.Update your application's web.xml to use the data source in your application.

    <resource-env-ref>
        <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>
    

공유 서버 수준 리소스Shared server-level resources

공유 서버 수준 데이터 원본을 추가하려면 Tomcat의 server.xml을 편집해야 합니다.Adding a shared, server-level data source will require you to edit Tomcat's server.xml. 먼저 시작 스크립트를 업로드하고 구성 > 시작 명령의 스크립트에 대한 경로를 설정합니다.First, upload a startup script and set the path to the script in Configuration > Startup Command. FTP를 사용하여 시작 스크립트를 업로드할 수 있습니다.You can upload the startup script using FTP.

시작 스크립트는 server.xml 파일의 xsl 변환 파일을 만들고 결과 xml 파일을 /usr/local/tomcat/conf/server.xml로 출력합니다.Your startup script will make an xsl transform to the server.xml file and output the resulting xml file to /usr/local/tomcat/conf/server.xml. 시작 스크립트는 apk를 통해 libxslt를 설치해야 합니다.The startup script should install libxslt via apk. FTP를 통해 xsl 파일 및 시작 스크립트를 업로드할 수 있습니다.Your xsl file and startup script can be uploaded via FTP. 다음은 예제 시작 스크립트입니다.Below is an example startup script.

# Install libxslt. Also copy the transform file to /home/tomcat/conf/
apk add --update libxslt

# Usage: xsltproc --output output.xml style.xsl input.xml
xsltproc --output /home/tomcat/conf/server.xml /home/tomcat/conf/transform.xsl /usr/local/tomcat/conf/server.xml

예제 xsl 파일은 아래에 제공됩니다.An example xsl file is provided below. 예제 xsl 파일은 Tomcat server.xml에 새 커넥터 노드를 추가합니다.The example xsl file adds a new connector node to the Tomcat server.xml.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()" name="Copy">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@* | node()" mode="insertConnector">
    <xsl:call-template name="Copy" />
  </xsl:template>

  <xsl:template match="comment()[not(../Connector[@scheme = 'https']) and
                                 contains(., '&lt;Connector') and
                                 (contains(., 'scheme=&quot;https&quot;') or
                                  contains(., &quot;scheme='https'&quot;))]">
    <xsl:value-of select="." disable-output-escaping="yes" />
  </xsl:template>

  <xsl:template match="Service[not(Connector[@scheme = 'https'] or
                                   comment()[contains(., '&lt;Connector') and
                                             (contains(., 'scheme=&quot;https&quot;') or
                                              contains(., &quot;scheme='https'&quot;))]
                                  )]
                      ">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" mode="insertConnector" />
    </xsl:copy>
  </xsl:template>

  <!-- Add the new connector after the last existing Connnector if there is one -->
  <xsl:template match="Connector[last()]" mode="insertConnector">
    <xsl:call-template name="Copy" />

    <xsl:call-template name="AddConnector" />
  </xsl:template>

  <!-- ... or before the first Engine if there is no existing Connector -->
  <xsl:template match="Engine[1][not(preceding-sibling::Connector)]"
                mode="insertConnector">
    <xsl:call-template name="AddConnector" />

    <xsl:call-template name="Copy" />
  </xsl:template>

  <xsl:template name="AddConnector">
    <!-- Add new line -->
    <xsl:text>&#xa;</xsl:text>
    <!-- This is the new connector -->
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
               maxThreads="150" scheme="https" secure="true" 
               keystroreFile="${{user.home}}/.keystore" keystorePass="changeit"
               clientAuth="false" sslProtocol="TLS" />
  </xsl:template>

</xsl:stylesheet>

구성 완료Finalize configuration

마지막으로 Tomcat 클래스 경로에 드라이버 JAR을 배치하고 App Service를 다시 시작합니다.Finally, place the driver JARs in the Tomcat classpath and restart your App Service.

  1. JDBC 드라이버 파일을 Tomcat classloader에 사용할 수 있도록 /home/tomcat/lib 디렉터리에 배치합니다.Ensure that the JDBC driver files are available to the Tomcat classloader by placing them in the /home/tomcat/lib directory. (아직 존재하지 않는 경우 이 디렉터리를 만듭니다.) 이러한 파일을 App Service 인스턴스에 업로드하려면 다음 단계를 수행합니다.(Create this directory if it does not already exist.) To upload these files to your App Service instance, perform the following steps:

    1. Cloud Shell에서 웹앱 확장을 설치합니다.In the Cloud Shell, install the webapp extension:
    az extension add -–name webapp
    
    1. 다음 CLI 명령을 실행하여 로컬 시스템에서 App Service로 SSH 터널을 만듭니다.Run the following CLI command to create an SSH tunnel from your local system to App Service:
    az webapp remote-connection create --resource-group <resource-group-name> --name <app-name> --port <port-on-local-machine>
    
    1. SFTP 클라이언트를 사용하여 로컬 터널링 포트에 연결하고 파일을 /home/tomcat/lib 폴더에 업로드합니다.Connect to the local tunneling port with your SFTP client and upload the files to the /home/tomcat/lib folder.

    또는 FTP 클라이언트를 사용하여 JDBC 드라이버를 업로드할 수 있습니다.Alternatively, you can use an FTP client to upload the JDBC driver. FTP 자격 증명을 가져오기 위한 이러한 지침을 따릅니다.Follow these instructions for getting your FTP credentials.

  2. 서버 수준 데이터 원본을 만든 경우 App Service Linux 애플리케이션을 다시 시작합니다.If you created a server-level data source, restart the App Service Linux application. Tomcat이 CATALINA_BASE/home/tomcat로 다시 설정하고 업데이트된 구성을 사용합니다.Tomcat will reset CATALINA_BASE to /home/tomcat and use the updated configuration.

Spring BootSpring Boot

Spring Boot 애플리케이션에서 데이터 원본에 연결하려면 연결 문자열을 만들어 application.properties 파일에 삽입하는 것이 좋습니다.To connect to data sources in Spring Boot applications, we suggest creating connection strings and injecting them into your application.properties file.

  1. App Service 페이지의 "구성" 섹션에서 문자열의 이름을 설정하고, JDBC 연결 문자열을 값 필드에 붙여넣고, 유형을 "사용자 지정"으로 설정합니다.In the "Configuration" section of the App Service page, set a name for the string, paste your JDBC connection string into the value field, and set the type to "Custom". 필요에 따라 이 연결 문자열을 슬롯 설정으로 설정할 수 있습니다.You can optionally set this connection string as slot setting.

    이 연결 문자열은 CUSTOMCONNSTR_<your-string-name>라는 환경 변수로 애플리케이션에서 액세스할 수 있습니다.This connection string is accessible to our application as an environment variable named CUSTOMCONNSTR_<your-string-name>. 예를 들어 위에서 만든 연결 문자열의 이름은 CUSTOMCONNSTR_exampledb로 지정됩니다.For example, the connection string we created above will be named CUSTOMCONNSTR_exampledb.

  2. application.properties 파일에서 환경 변수 이름을 사용하여 이 연결 문자열을 참조합니다.In your application.properties file, reference this connection string with the environment variable name. 이 예에서는 다음을 사용합니다.For our example, we would use the following.

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

이 항목에 대한 자세한 내용은 데이터 액세스에 대한 Spring Boot 설명서표면화된 구성을 참조하세요.Please see the Spring Boot documentation on data access and externalized configurations for more information on this topic.

Tomcat을 사용하여 Redis를 세션 캐시로 사용Use Redis as a session cache with Tomcat

Azure Cache for Redis와 같은 외부 세션 저장소를 사용하도록 Tomcat을 구성할 수 있습니다.You can configure Tomcat to use an external session store such as Azure Cache for Redis. 이를 통해 앱의 다른 인스턴스로 이전될 때(예: 사용자가 자동 ​​확장, 다시 시작 또는 장애 조치(failover)가 발생할 때), 쇼핑 카트 데이터와 같은 사용자 세션 상태를 유지할 수 있습니다.This enables you to preserve user session state (such as shopping cart data) when a user is transferred to another instance of your app, for example when autoscaling, restart, or failover occurs.

Redis와 함께 Tomcat을 사용하려면 PersistentManager 구현을 사용하도록 앱을 구성해야 합니다.To use Tomcat with Redis, you must configure your app to use a PersistentManager implementation. 다음 단계는 Pivotal 세션 관리자: redis-store를 예로 사용하여 이 프로세스를 설명합니다.The following steps explain this process using Pivotal Session Manager: redis-store as an example.

  1. Bash 터미널을 열고 <variable>=<value>를 사용하여 다음 환경 변수를 각각 설정합니다.Open a Bash terminal and use <variable>=<value> to set each of the following environment variables.

    변수Variable Value
    RESOURCEGROUP_NAMERESOURCEGROUP_NAME App Service 인스턴스를 포함하는 리소스 그룹의 이름입니다.The name of the resource group containing your App Service instance.
    WEBAPP_NAMEWEBAPP_NAME App Service 인스턴스의 이름입니다.The name of your App Service instance.
    WEBAPP_PLAN_NAMEWEBAPP_PLAN_NAME App Service 계획의 이름입니다.The name of your App Service plan.
    지역REGION 앱이 호스트되는 지역의 이름입니다.The name of the region where your app is hosted.
    REDIS_CACHE_NAMEREDIS_CACHE_NAME Azure Cache for Redis 인스턴스의 이름입니다.The name of your Azure Cache for Redis instance.
    REDIS_PORTREDIS_PORT Redis 캐시가 수신하는 SSL 포트입니다.The SSL port that your Redis cache listens on.
    REDIS_PASSWORDREDIS_PASSWORD 인스턴스에 대한 기본 액세스 키입니다.The primary access key for your instance.
    REDIS_SESSION_KEY_PREFIXREDIS_SESSION_KEY_PREFIX 앱에서 제공하는 세션 키를 식별하기 위해 지정하는 값입니다.A value that you specify to identify session keys that come from your app.
    RESOURCEGROUP_NAME=<resource group>
    WEBAPP_NAME=<web app>
    WEBAPP_PLAN_NAME=<App Service plan>
    REGION=<region>
    REDIS_CACHE_NAME=<cache>
    REDIS_PORT=<port>
    REDIS_PASSWORD=<access key>
    REDIS_SESSION_KEY_PREFIX=<prefix>
    

    Azure Portal에 대한 이름, 포트 및 액세스 키 정보는 서비스 인스턴스의 속성 또는 액세스 키 섹션에서 확인할 수 있습니다.You can find the name, port, and access key information on the Azure portal by looking in the Properties or Access keys sections of your service instance.

  2. 다음 콘텐츠를 사용하여 앱의 src/main/webapp/META-INF/context.xml 파일을 만들거나 업데이트합니다.Create or update your app's src/main/webapp/META-INF/context.xml file with the following content:

    <?xml version="1.0" encoding="UTF-8"?>
    <Context path="">
        <!-- Specify Redis Store -->
        <Valve className="com.gopivotal.manager.SessionFlushValve" />
        <Manager className="org.apache.catalina.session.PersistentManager">
            <Store className="com.gopivotal.manager.redis.RedisStore"
                   connectionPoolSize="20"
                   host="${REDIS_CACHE_NAME}.redis.cache.windows.net"
                   port="${REDIS_PORT}"
                   password="${REDIS_PASSWORD}"
                   sessionKeyPrefix="${REDIS_SESSION_KEY_PREFIX}"
                   timeout="2000"
            />
        </Manager>
    </Context>
    

    이 파일에는 앱에 대한 세션 관리자 구현이 지정되고 구성되어 있습니다.This file specifies and configures the session manager implementation for your app. 이전 단계에서 설정한 환경 변수를 사용하여 계정 정보를 원본 파일에서 제외합니다.It uses the environment variables that you set in the previous step to keep your account information out of your source files.

  3. FTP를 사용하여 세션 관리자의 JAR 파일을 App Service 인스턴스에 업로드하고 /home/tomcat/lib 디렉터리에 배치합니다.Use FTP to upload the session manager's JAR file to your App Service instance, placing it in the /home/tomcat/lib directory. 자세한 내용은 FTP/S를 사용하여 Azure App Service에 앱 배포를 참조하세요.For more info, see Deploy your app to Azure App Service using FTP/S.

  4. App Service 인스턴스의 세션 선호도 쿠키를 사용하지 않도록 설정합니다.Disable the session affinity cookie for your App Service instance. 앱으로 이동하여 Azure Portal에서 이 작업을 수행할 수 있으며 구성 > 일반 설정 > ARR 선호도해제로 설정합니다.You can do this from the Azure portal by navigating to your app and then setting Configuration > General settings > ARR affinity to Off. 또는 다음 명령을 사용할 수 있습니다.Alternately, you can use the following command:

    az webapp update -g <resource group> -n <webapp name> --client-affinity-enabled false
    

    기본적으로 App Service는 기존 세션을 사용하는 클라이언트 요청이 동일한 애플리케이션 인스턴스로 라우팅되도록 세션 선호도 쿠키를 사용합니다.By default, App Service will use session affinity cookies to ensure that client requests with existing sessions are routed to the same instance of your application. 이 기본 동작에는 구성이 필요 없지만 앱 인스턴스를 다시 시작하거나 트래픽이 다른 인스턴스로 다시 라우팅될 때 사용자 세션 상태를 유지할 수 없습니다.This default behavior requires no configuration but it can't preserve user session state when your app instance is restarted or when traffic is rerouted to another instance. 세션 쿠키 기반 라우팅을 해제하기 위해 기존 ARR 인스턴스 선호도 구성을 사용하지 않도록 설정하면 구성된 세션 저장소가 간섭 없이 작동할 수 있습니다.When you disable the existing ARR Instance Affinity configuration to turn off the session cookie-based routing, you allow the configured session store to operate without interference.

  5. App Service 인스턴스의 속성 섹션으로 이동하고 추가 아웃바운드 IP 주소를 찾습니다.Navigate to the Properties section of your App Service instance and find Additional Outbound IP Addresses. 앱에 가능한 모든 아웃바운드 IP 주소를 나타냅니다.These represent all possible outbound IP addresses for your app. 다음 단계에서 사용하기 위해 복사합니다.Copy these for use in the next step.

  6. 각 IP 주소에 대해 Azure Cache for Redis 인스턴스에서 방화벽 규칙을 만듭니다.For each IP address, create a firewall rule in your Azure Cache for Redis instance. Redis 인스턴스의 방화벽 섹션에서 Azure Portal에 대해 이 작업을 수행할 수 있습니다.You can do this on the Azure portal from the Firewall section of your Redis instance. 각 규칙에 고유한 이름을 지정하고 시작 IP 주소끝 IP 주소 값을 동일한 IP 주소로 설정합니다.Provide a unique name for each rule, and set the Start IP address and End IP address values to the same IP address.

  7. Redis 인스턴스의 고급 설정 섹션으로 이동하고 SSL을 통해서만 액세스 허용아니요로 설정합니다.Navigate to the Advanced settings section of your Redis instance and set Allow access only via SSL to No. 이렇게 하면 App Service 인스턴스는 Azure 인프라를 통해 Redis Cache와 통신할 수 있습니다.This enables your App Service instance to communicate with your Redis cache via the Azure infrastructure.

  8. Redis 계정 정보를 참조하도록 앱 pom.xml 파일의 azure-webapp-maven-plugin 구성을 업데이트합니다.Update the azure-webapp-maven-plugin configuration in your app's pom.xml file to refer to your Redis account info. 이 파일은 이전에 설정한 환경 변수를 사용하여 계정 정보를 원본 파일에서 제외합니다.This file uses the environment variables you set previously to keep your account information out of your source files.

    필요한 경우 1.9.1Azure App Service용 Maven 플러그 인의 최신 버전으로 변경합니다.If necessary, change 1.9.1 to the current version of the Maven Plugin for Azure App Service.

    <plugin>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-webapp-maven-plugin</artifactId>
        <version>1.9.1</version>
        <configuration>            
            <!-- Web App information -->
            <schemaVersion>v2</schemaVersion>
            <resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
            <appServicePlanName>${WEBAPP_PLAN_NAME}-${REGION}</appServicePlanName>
            <appName>${WEBAPP_NAME}-${REGION}</appName>
            <region>${REGION}</region>            
            <runtime>
                <os>linux</os>
                <javaVersion>jre8</javaVersion>
                <webContainer>tomcat 9.0</webContainer>
            </runtime>
    
            <appSettings>
                <property>
                    <name>REDIS_CACHE_NAME</name>
                    <value>${REDIS_CACHE_NAME}</value>
                </property>
                <property>
                    <name>REDIS_PORT</name>
                    <value>${REDIS_PORT}</value>
                </property>
                <property>
                    <name>REDIS_PASSWORD</name>
                    <value>${REDIS_PASSWORD}</value>
                </property>
                <property>
                    <name>REDIS_SESSION_KEY_PREFIX</name>
                    <value>${REDIS_SESSION_KEY_PREFIX}</value>
                </property>
                <property>
                    <name>JAVA_OPTS</name>
                    <value>-Xms2048m -Xmx2048m -DREDIS_CACHE_NAME=${REDIS_CACHE_NAME} -DREDIS_PORT=${REDIS_PORT} -DREDIS_PASSWORD=${REDIS_PASSWORD} IS_SESSION_KEY_PREFIX=${REDIS_SESSION_KEY_PREFIX}</value>
                </property>
    
            </appSettings>
    
        </configuration>
    </plugin>
    
  9. 앱을 다시 빌드하고 다시 배포합니다.Rebuild and redeploy your app.

    mvn package -DskipTests azure-webapp:deploy
    

이제 앱은 세션 관리에 Redis Cache를 사용합니다.Your app will now use your Redis cache for session management.

이러한 지침을 테스트하는 데 사용할 수 있는 샘플은 GitHub에서 scaling-stateful-java-web-app-on-azur 리포지토리를 참조하세요.For a sample that you can use to test these instructions, see the scaling-stateful-java-web-app-on-azure repo on GitHub.

Docker 컨테이너Docker containers

컨테이너에 Azure 지원 Zulu JDK를 사용하려면 Azure에 지원되는 Azul Zulu Enterprise 다운로드 페이지에 나와 있는 미리 작성된 이미지를 끌어와서 사용하거나 Microsoft Java GitHub 리포지토리Dockerfile 예제를 사용하세요.To use the Azure-supported Zulu JDK in your containers, make sure to pull and use the pre-built images as documented from the supported Azul Zulu Enterprise for Azure download page or use the Dockerfile examples from the Microsoft Java GitHub repo.

문 지원Statement of support

런타임 가용성Runtime availability

Linux용 App Service는 Java 웹 애플리케이션의 관리되는 호스팅에 다음과 같은 두 가지 런타임을 지원합니다.App Service for Linux supports two runtimes for managed hosting of Java web applications:

  • 웹 보관(WAR) 파일로 패키징된 애플리케이션을 실행하기 위한 Tomcat 서블릿 컨테이너.The Tomcat servlet container for running applications packaged as web archive (WAR) files. 지원되는 버전은 8.5 및 9.0입니다.Supported versions are 8.5 and 9.0.
  • Java 보관(JAR) 파일로 패키징된 애플리케이션을 실행하기 위한 Java SE 런타임 환경.Java SE runtime environment for running applications packaged as Java archive (JAR) files. 지원되는 버전은 Java 8 및 11입니다.Supported versions are Java 8 and 11.

JDK 버전 및 유지 관리JDK versions and maintenance

OpenJDK의 Azul Zulu Enterprise 빌드는 Microsoft와 Azul Systems가 후원하는 Azure 및 Azure Stack에 대한 OpenJDK의 무료 다중 플랫폼 프로덕션 준비 배포입니다.Azul Zulu Enterprise builds of OpenJDK are a no-cost, multi-platform, production-ready distribution of the OpenJDK for Azure and Azure Stack backed by Microsoft and Azul Systems. 여기에는 Java SE 애플리케이션을 빌드하고 실행하기 위한 모든 구성 요소가 포함됩니다.They contain all the components for building and running Java SE applications. Java JDK 설치에서 JDK를 설치할 수 있습니다.You can install the JDK from Java JDK Installation.

지원되는 JDK는 매년 분기마다 1월, 4월, 7월, 10월에 자동으로 패치됩니다.Supported JDKs are automatically patched on a quarterly basis in January, April, July, and October of each year.

보안 업데이트Security updates

Azul Systems에서 주요 보안 취약점에 대한 패치 및 수정 사항을 출시하는 즉시 고객에게 제공됩니다.Patches and fixes for major security vulnerabilities will be released as soon as they become available from Azul Systems. NIST Common Vulnerability Scoring System 버전 2에서 기본 점수 9.0 이상을 받으면 "주요" 취약점으로 정의됩니다.A "major" vulnerability is defined by a base score of 9.0 or higher on the NIST Common Vulnerability Scoring System, version 2.

사용 중단 및 사용 중지Deprecation and retirement

지원되는 Java 런타임이 폐기되는 경우 폐기 예정인 런타임을 사용하는 Azure 개발자에게는 적어도 런타임 폐기 6개월 전에 사용 중단 알림이 제공됩니다.If a supported Java runtime will be retired, Azure developers using the affected runtime will be given a deprecation notice at least six months before the runtime is retired.

로그의 robots933456robots933456 in logs

컨테이너 로그에 다음 메시지가 표시될 수 있습니다.You may see the following message in the container logs:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

이 메시지는 무시해도 괜찮습니다.You can safely ignore this message. /robots933456.txt는 App Service에서 컨테이너가 요청을 처리할 수 있는지 확인하기 위해 사용하는 더미 URL 경로입니다./robots933456.txt is a dummy URL path that App Service uses to check if the container is capable of serving requests. 404 응답은 단순히 경로가 존재하지 않는다는 것을 나타내지만 컨테이너가 정상 상태이고 요청에 응답할 준비가 되었음을 App Service에 알려줍니다.A 404 response simply indicates that the path doesn't exist, but it lets App Service know that the container is healthy and ready to respond to requests.

다음 단계Next steps

Java 개발자용 Azure 센터를 방문하여 Azure 빠른 시작, 자습서 및 Java 참조 설명서를 찾아보세요.Visit the Azure for Java Developers center to find Azure quickstarts, tutorials, and Java reference documentation.

Java 개발에 국한되지 않는 Linux용 App Service 사용에 대한 일반적인 질문의 답은 App Service Linux FAQ에서 찾을 수 있습니다.General questions about using App Service for Linux that aren't specific to the Java development are answered in the App Service Linux FAQ.