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 Boot 애플리케이션에서 데이터 원본에 연결하려면 연결 문자열을 만들어 application.properties 파일에 삽입하는 것이 좋습니다.
App Service 페이지의 "구성" 섹션에서 문자열의 이름을 설정하고, JDBC 연결 문자열을 값 필드에 붙여넣고, 유형을 "사용자 지정"으로 설정합니다. 필요에 따라 이 연결 문자열을 슬롯 설정으로 설정할 수 있습니다.
이 연결 문자열은
CUSTOMCONNSTR_<your-string-name>
라는 환경 변수로 애플리케이션에서 액세스할 수 있습니다. 예들 들어CUSTOMCONNSTR_exampledb
입니다.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 서블릿에서 실행 중인 모든 애플리케이션에 제공할 것인지 결정합니다.
애플리케이션 수준 데이터 원본
프로젝트의 META-INF/ 디렉터리에 context.xml 파일을 만듭니다. META-INF/ 디렉터리가 없으면 이 디렉터리를 만듭니다.
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>
애플리케이션의 데이터 원본을 사용하도록 애플리케이션의 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을 편집해야 합니다. 이 작업을 수행하는 가장 안정적인 방법은 다음과 같습니다.
시작 스크립트는 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(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]">
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>
<xsl:template match="Service[not(Connector[@scheme = 'https'] or
comment()[contains(., '<Connector') and
(contains(., 'scheme="https"') or
contains(., "scheme='https'"))]
)]
">
<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>
</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를 다시 시작합니다.
- 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에 데이터 원본을 등록하는 경우 다음 세 가지 핵심 단계가 있습니다.
- JDBC 드라이버를 업로드합니다.
- JDBC 드라이버를 모듈로 추가합니다.
- 모듈을 사용하여 데이터 원본을 추가합니다.
App Service는 상태 비정상 호스팅 서비스이므로 이러한 단계를 시작 스크립트에 넣고 JBoss 컨테이너가 시작될 때마다 실행해야 합니다. PostgreSQL, MySQL 및 SQL Database를 예로 사용합니다.
JBoss CLI 명령을 jboss-cli-commands.cli라는 파일에 넣습니다. JBoss 명령은 모듈을 추가하고 이를 데이터 원본으로 등록해야 합니다. 다음 예제에서는 JNDI 이름으로
java:jboss/datasources/postgresDS
PostgreSQL 데이터 원본을 만들기 위한 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_HOST
및DB_USERNAME
DB_PASSWORD
)를 사용합니다. 스크립트는 JBoss가--resolve-parameter-values
해당 값을 일반 텍스트로 저장하지 않도록 플래그 없이 추가합니다.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
원하는 배포 옵션을 사용하여 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 참조 설명서를 찾아보세요.