이 문서에서는 App Service에서 Java SE, Tomcat 또는 JBoss 앱에서 데이터 원본을 구성하는 방법을 보여 줍니다.
Azure App Service는 완전히 관리되는 서비스에서 다음 세 가지 유형으로 Java 웹 애플리케이션을 실행합니다.
- JAVA SE(Standard Edition). Java SE는 Spring Boot, Quarkus, Dropwizard 또는 포함된 Tomcat 또는 Jetty 서버가 포함된 앱과 같은 포함된 서버가 포함된 JAR(Java 보관) 패키지로 배포된 앱을 실행할 수 있습니다.
- 톰캣. 기본 제공 Tomcat 서버는 WAR(웹 애플리케이션 보관) 패키지로 배포된 앱을 실행할 수 있습니다.
- JBoss EAP(엔터프라이즈 애플리케이션 플랫폼): 기본 제공 JBoss EAP 서버는 WAR 또는 EAR(엔터프라이즈 보관) 패키지로 배포된 앱을 실행할 수 있습니다. 이 옵션은 무료, 프리미엄 v3 및 격리된 v2를 포함하는 가격 책정 계층 집합의 Linux 앱에서 지원됩니다.
비고
App Service의 JBoss EAP는 이제 BYOL(Bring Your Own License) 청구를 지원합니다. BYOL을 사용하면 기존 Red Hat 구독이 있는 고객이 해당 라이선스를 Azure App Service의 JBoss EAP 배포에 직접 적용할 수 있습니다. 자세한 내용은 App Service의 JBoss EAP에 대한 BYOL 지원을 참조하세요.
데이터 원본 구성
Spring Boot 애플리케이션에서 데이터 원본에 연결하려면 연결 문자열을 만들어 application.properties 파일에 삽입하는 것이 좋습니다.
App Service 페이지의 왼쪽 창에서 설정>환경 변수를 선택합니다. 연결 문자열 탭에서 추가를 선택합니다. 문자열의 이름을 설정하고, JDBC 연결 문자열을 값 필드에 붙여넣고, 형식 을 사용자 지정으로 설정합니다. 필요에 따라 연결 문자열을 슬롯 설정으로 설정할 수 있습니다.
연결 문자열은 애플리케이션에서 명명
CUSTOMCONNSTR_<your-string-name>된 환경 변수로 액세스할 수 있습니다. 예들 들어CUSTOMCONNSTR_exampledb입니다.application.properties 파일에서 환경 변수 이름을 사용하여 연결 문자열을 참조합니다. 앞의 예제에서는 다음 코드를 사용합니다.
app.datasource.url=${CUSTOMCONNSTR_exampledb}
자세한 내용은 데이터 액세스 및 외부화된 구성에 대한 Spring Boot 설명서를 참조하세요.
팁
환경 변수 WEBSITE_AUTOCONFIGURE_DATABASE 를 설정하는 경우 Linux Tomcat 컨테이너는 Tomcat 서버에서 공유 데이터 원본을 true자동으로 구성할 수 있습니다. 유일한 작업은 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 서버 | 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>
공유 서버 수준 리소스
팁
Linux Tomcat 컨테이너는 /home/site/wwwroot에 복사된 파일에 대해 다음 규칙을 사용하여 XSLT 파일을 자동으로 적용할 수 있습니다. server.xml.xsl 또는 server.xml.xslt가 있으면, 이러한 파일은 Tomcat의 server.xml에 적용됩니다.
context.xml.xsl 또는 context.xml.xslt이 존재하는 경우, 파일이 Tomcat의 context.xml에 적용됩니다.
공유 서버 수준 데이터 원본을 추가하려면 Tomcat의 server.xml데이터 원본을 편집해야 합니다. 디렉터리 외부의 /home 파일 변경 내용은 임시이므로 다음과 같이 Tomcat의 구성 파일 변경 내용을 프로그래밍 방식으로 적용해야 합니다.
- 시작 스크립트를 업로드하고 설정>구성에서 스크립트의 경로를 설정합니다. 스택 설정 탭의 시작 명령 상자에 경로를 추가합니다. FTP를 사용하여 시작 스크립트를 업로드할 수 있습니다.
시작 스크립트는 XSL을 파일로 server.xml 변환하고 결과 XML 파일을 /usr/local/tomcat/conf/server.xml출력합니다. 다음 예시 스크립트의 주석에 설명된 대로, 시작 스크립트는 웹 애플리케이션의 Tomcat 버전 분배에 따라 libxslt 또는 xlstproc를 설치해야 합니다. FTP를 사용하여 XSL 파일 및 시작 스크립트를 업로드할 수 있습니다.
# Install the libxslt package on Alpine-based images:
apk add --update libxslt
# Install the xsltproc package on Debian or Ubuntu-based images:
apt install xsltproc
# Also copy the transform file to /home/tomcat/conf/
# 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 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'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 서버에서 공유 데이터 원본을 자동으로 구성할 수 있습니다. 오라클, SQL Server, PostgreSQL 또는 MySQL 데이터베이스(연결 자격 증명 포함)에 유효한 JDBC 연결 문자열이 포함된 앱 설정을 추가하고 값WEBSITE_AUTOCONFIGURE_DATABASE으로 앱 설정/환경 변수 true 를 추가하기만 하면 됩니다. 서비스 커넥터를 사용하여 만든 JDBC 연결도 지원됩니다. App Service는 컨테이너에서 사용할 수 있는 적절한 드라이버를 사용하여 해당 공유 데이터 원본(앱 설정 이름 및 접미사 _DS기준)을 자동으로 추가합니다. 이 방법을 사용하는 엔드투엔드 시나리오는 자습서: Linux 및 MySQL에서 Azure App Service를 사용하여 JBoss 웹앱 빌드를 참조하세요.
JBoss EAP에 데이터 원본을 등록하는 세 가지 주요 단계가 있습니다.
- JDBC 드라이버를 업로드합니다.
- JDBC 드라이버를 모듈로 추가합니다.
- 모듈을 사용하여 데이터 원본을 추가합니다.
App Service는 상태 비정상 호스팅 서비스이므로 이러한 단계를 시작 스크립트에 넣고 JBoss 컨테이너가 시작될 때마다 실행해야 합니다. PostgreSQL, MySQL 및 Azure SQL Database 예제는 다음과 같습니다.
비고
App Service의 JBoss EAP는 BYOL(Bring Your Own License) 청구를 지원합니다. BYOL을 사용하면 기존 Red Hat 구독이 있는 고객이 해당 라이선스를 Azure App Service의 JBoss EAP 배포에 직접 적용할 수 있습니다. 자세한 내용은 JBoss EAP에 대한 BYOL 지원을 참조하세요.
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_HOST및DB_USERNAMEDB_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 개발자 설명서
- App Service Linux FAQ
- 환경 변수 및 앱 설정 참조