다음을 통해 공유


Azure App Service에서 Tomcat, JBoss 또는 Java SE 앱에 대한 데이터 원본 구성

이 문서에서는 App Service에서 Java SE, Tomcat 또는 JBoss 앱에서 데이터 원본을 구성하는 방법을 보여 줍니다.

Azure App Service는 세 가지 변형으로 완전 관리형 서비스에서 Java 웹 애플리케이션을 실행합니다.

  • Java SE - 임베디드 서버(예: Spring Boot, Dropwizard, Quarkus 또는 임베디드 Tomcat 또는 Jetty 서버가 있는 서버)가 포함된 JAR 패키지로 배포된 앱을 실행할 수 있습니다.
  • Tomcat - 기본 제공된 Tomcat 서버는 WAR 패키지로 배포된 앱을 실행할 수 있습니다.
  • JBoss EAP - 무료, 프리미엄 v3 및 격리된 v2 가격 책정 계층에서만 Linux 앱에 대해 지원됩니다. 기본 제공된 JBoss EAP 서버는 WAR 또는 EAR 패키지로 배포된 앱을 실행할 수 있습니다.

참고 항목

Spring 애플리케이션의 경우 Azure Spring Apps를 사용하는 것이 좋습니다. 그러나 Azure App Service를 대상으로 계속 사용할 수 있습니다. 자세한 내용은 Java 워크로드 대상 지침을 참조하세요.

데이터 원본 구성

Spring Boot 애플리케이션에서 데이터 원본에 연결하려면 연결 문자열을 만들어 application.properties 파일에 삽입하는 것이 좋습니다.

  1. App Service 페이지의 "구성" 섹션에서 문자열의 이름을 설정하고, JDBC 연결 문자열을 값 필드에 붙여넣고, 유형을 "사용자 지정"으로 설정합니다. 필요에 따라 이 연결 문자열을 슬롯 설정으로 설정할 수 있습니다.

    이 연결 문자열은 CUSTOMCONNSTR_<your-string-name>라는 환경 변수로 애플리케이션에서 액세스할 수 있습니다. 예들 들어 CUSTOMCONNSTR_exampledb입니다.

  2. application.properties 파일에서 환경 변수 이름을 사용하여 이 연결 문자열을 참조합니다. 이 예제에서는 다음 코드를 사용합니다.

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

자세한 내용은 데이터 액세스에 대한 Spring Boot 설명서외부화된 구성을 참조하세요.

기본적으로 Linux Tomcat 컨테이너는 Tomcat 서버에서 공유 데이터 원본을 자동으로 구성할 수 있습니다. 유일한 방법은 Oracle, SQL Server, PostgreSQL 또는 MySQL 데이터베이스(연결 자격 증명 포함)에 유효한 JDBC 연결 문자열 포함하는 앱 설정을 추가하는 것뿐이며, App Service는 컨테이너에서 사용할 수 있는 적절한 드라이버를 사용하여 해당 공유 데이터베이스를 /usr/local/tomcat/conf/context.xml 자동으로 추가합니다. 이 방법을 사용하는 엔드투엔드 시나리오는 자습서: Linux 및 MySQL에서 Azure App Service를 사용하여 Tomcat 웹앱 빌드를 참조하세요.

이러한 지침은 데이터베이스 연결에 적용됩니다. 선택한 데이터베이스의 드라이버 클래스 이름 및 JAR 파일로 자리 표시자를 채워야 합니다. 공통 데이터베이스에 대한 클래스 이름 및 드라이버 다운로드가 포함된 표가 제공됩니다.

데이터베이스 드라이버 클래스 이름 JDBC 드라이버
PostgreSQL org.postgresql.Driver 다운로드
MySQL com.mysql.jdbc.Driver 다운로드(“플랫폼 독립적” 선택)
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver 다운로드

JDBC(Java Database Connectivity) 또는 JPA(Java Persistence API)를 사용하도록 Tomcat을 구성하려면 먼저 시작 시 Tomcat에서 읽은 CATALINA_OPTS 환경 변수를 사용자 지정합니다. App Service Maven 플러그 인에서 앱 설정을 통해 이러한 값을 설정합니다.

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

또는 Azure Portal의 구성>애플리케이션 설정 페이지에서 환경 변수를 설정합니다.

다음으로, 데이터 원본을 한 애플리케이션에만 제공할 것인지 또는 Tomcat 서블릿에서 실행 중인 모든 애플리케이션에 제공할 것인지 결정합니다.

애플리케이션 수준 데이터 원본

  1. 프로젝트의 META-INF/ 디렉터리에 context.xml 파일을 만듭니다. META-INF/ 디렉터리가 없으면 이 디렉터리를 만듭니다.

  2. context.xml에서는 데이터 원본을 JNDI 주소에 연결하는 Context 요소를 추가합니다. driverClassName 자리 표시자를 위 테이블에 있는 드라이버의 클래스 이름으로 바꿉니다.

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

    <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>
    

공유 서버 수준 리소스

공유 서버 수준 데이터 원본을 추가하려면 Tomcat의 server.xml을 편집해야 합니다. 이 작업을 수행하는 가장 안정적인 방법은 다음과 같습니다.

  1. 시작 스크립트를 업로드하고 구성>시작 명령의 스크립트에 대한 경로를 설정합니다. FTP를 사용하여 시작 스크립트를 업로드할 수 있습니다.

시작 스크립트는 server.xml 파일의 xsl 변환 파일을 만들고 결과 xml 파일을 /usr/local/tomcat/conf/server.xml로 출력합니다. 시작 스크립트는 apk를 통해 libxslt를 설치해야 합니다. FTP를 통해 xsl 파일 및 시작 스크립트를 업로드할 수 있습니다. 다음은 예제 시작 스크립트입니다.

# 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 파일은 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 Connector if there's 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's 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" 
               keystoreFile="${{user.home}}/.keystore" keystorePass="changeit"
               clientAuth="false" sslProtocol="TLS" />
  </xsl:template>

</xsl:stylesheet>

구성 완료

마지막으로 Tomcat 클래스 경로에 드라이버 JAR을 배치하고 App Service를 다시 시작합니다.

  1. JDBC 드라이버 파일을 Tomcat classloader에 사용할 수 있도록 /home/site/lib 디렉터리에 배치합니다. Cloud Shell에서 각 드라이버 JAR에 대해 실행 az webapp deploy --type=lib를 실행합니다.
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar

서버 수준 데이터 원본을 만든 경우 App Service Linux 애플리케이션을 다시 시작합니다. Tomcat이 CATALINA_BASE/home/tomcat으로 다시 설정하고 업데이트된 구성을 사용합니다.

기본적으로 Linux JBoss 컨테이너는 JBoss 서버에서 공유 데이터 원본을 자동으로 구성할 수 있습니다. 유일한 방법은 Oracle, SQL Server, PostgreSQL 또는 MySQL 데이터베이스(연결 자격 증명 포함)에 유효한 JDBC 연결 문자열 포함하는 앱 설정을 추가하고 App Service는 컨테이너에서 사용할 수 있는 적절한 드라이버를 사용하여 해당 공유 데이터 원본을 자동으로 추가하는 것입니다. 이 방법을 사용하는 엔드투엔드 시나리오는 자습서: Linux 및 MySQL에서 Azure 앱 Service를 사용하여 JBoss 웹앱 빌드를 참조하세요.

JBoss EAP에 데이터 원본을 등록하는 경우 다음 세 가지 핵심 단계가 있습니다.

  1. JDBC 드라이버를 업로드합니다.
  2. JDBC 드라이버를 모듈로 추가합니다.
  3. 모듈을 사용하여 데이터 원본을 추가합니다.

App Service는 상태 비정상 호스팅 서비스이므로 이러한 단계를 시작 스크립트에 넣고 JBoss 컨테이너가 시작될 때마다 실행해야 합니다. PostgreSQL, MySQL 및 SQL Database를 예로 사용합니다.

  1. JBoss CLI 명령을 jboss-cli-commands.cli라는 파일에 넣습니다. JBoss 명령은 모듈을 추가하고 이를 데이터 원본으로 등록해야 합니다. 다음 예제에서는 JNDI 이름으로 java:jboss/datasources/postgresDSPostgreSQL 데이터 원본을 만들기 위한 JBoss CLI 명령을 보여 줍니다.

    module add --name=org.postgresql --resources=/home/site/libs/postgresql-42.7.4.jar
    /subsystem=datasources/jdbc-driver=postgresql:add(driver-name="postgresql",driver-module-name="org.postgresql",driver-class-name="org.postgresql.Driver",driver-xa-datasource-class-name="org.postgresql.xa.PGXADataSource")
    data-source add --name=postgresql --driver-name="postgresql" --jndi-name="java:jboss/datasources/postgresDS" --connection-url="jdbc:postgresql://\${env.DB_HOST}:5432/postgres" --user-name="\${env.DB_USERNAME}" --password="\${env.DB_PASSWORD}" --enabled=true --use-java-context=true
    

    module add 명령은 App Service에서 앱 설정으로 추가해야 하는 세 가지 환경 변수(DB_HOSTDB_USERNAMEDB_PASSWORD)를 사용합니다. 스크립트는 JBoss가 --resolve-parameter-values 해당 값을 일반 텍스트로 저장하지 않도록 플래그 없이 추가합니다.

  2. JBoss CLI 명령을 호출하는 시작 스크립트 startup.sh 만듭니다. 다음 예에서는 jboss-cli-commands.cli를 호출하는 방법을 보여 줍니다. 나중에 컨테이너가 시작될 때 이 스크립트를 실행하도록 App Service를 구성합니다.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/scripts/jboss_cli_commands.cli
    
  3. 원하는 배포 옵션을 사용하여 JDBC 드라이버, jboss-cli-commands.cli를 업로드하고 각 스크립트에 지정된 경로에 startup.sh . 특히 startup.sh 시작 파일로 업로드합니다. 예시:

    export RESOURCE_GROUP_NAME=<resource-group-name>
    export APP_NAME=<app-name>
    
    # The lib type uploads to /home/site/libs by default.
    az webapp deploy --resource-group $RESOURCE_GROUP_NAME --name $APP_NAME --src-path postgresql-42.7.4.jar --target-path postgresql-42.7.4.jar --type lib
    az webapp deploy --resource-group $RESOURCE_GROUP_NAME --name $APP_NAME --src-path jboss_cli_commands.cli --target-path /home/site/scripts/jboss_cli_commands.cli --type static
    # The startup type uploads to /home/site/scripts/startup.sh by default.
    az webapp deploy --resource-group $RESOURCE_GROUP_NAME --name $APP_NAME --src-path startup.sh --type startup
    

    자세한 내용은 App Service에 파일 배포를 참조 하세요.

데이터 원본이 JBoss 서버에 추가되었는지 확인하려면 SSH를 웹앱에 추가하고 실행 $JBOSS_HOME/bin/jboss-cli.sh --connect합니다. JBoss에 연결되면 /subsystem=datasources:read-resource를 실행하여 데이터 원본 목록을 인쇄합니다.

이전에 jboss-cli-commands.cli에서 정의한 대로 JNDI 이름을 java:jboss/datasources/postgresDS사용하여 PostgreSQL 연결에 액세스할 수 있습니다.

다음 단계

Java 개발자용 Azure 센터를 방문하여 Azure 빠른 시작, 자습서 및 Java 참조 설명서를 찾아보세요.