기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Java 앱 배포
중요
The AWS OpsWorks Stacks 서비스 수명이 2024년 5월 26일에 종료되었으며 신규 및 기존 고객 모두 사용할 수 없습니다. 고객은 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션할 것을 강력히 권장합니다. 마이그레이션에 대해 궁금한 점이 있으면 다음 연락처로 문의하십시오. AWS Support 팀 구성: AWS re:포스트 포스트
다음 주제에서는 Java 앱 서버 계층의 인스턴스에 앱을 배포하는 방법을 설명합니다. 예제는 JSP 앱용이지만 다른 유형의 Java 앱을 설치할 때도 기본적으로 동일한 절차를 사용할 수 있습니다.
지원되는 모든 리포지토리에서 JSP 페이지를 배포할 수 있습니다. WAR파일을 배포하려는 경우 다음 사항에 유의하십시오. AWS OpsWorks 스택은 Amazon S3 또는 HTTP 아카이브에서 배포된 WAR 파일을 자동으로 추출하지만 Git 또는 Subversion 리포지토리에서는 추출하지 않습니다. WAR파일에 Git 또는 Subversion을 사용하려는 경우 다음 중 하나를 수행할 수 있습니다.
-
추출된 아카이브를 리포지토리에 저장합니다.
-
다음 예제에 설명된 대로 WAR 파일을 리포지토리에 저장하고 Chef 배포 후크를 사용하여 아카이브를 추출합니다.
Chef 배포 후크를 사용하여 배포 4단계 중 어느 단계에서나 사용자 제공 Ruby 애플리케이션을 인스턴스에서 실행할 수 있습니다. 애플리케이션 이름이 단계를 결정합니다. 다음은 Git 또는 Subversion before_migrate.rb
리포지토리에서 배포된 WAR 파일을 추출하는 Ruby 애플리케이션의 예입니다. 이 이름은 애플리케이션을 Checkout 배포 후크에 연결하므로 코드가 검사 후 마이그레이션 전에 배포 작업이 시작될 때 애플리케이션이 실행됩니다. 이 예제를 사용하는 방법에 대한 자세한 정보는 Chef 배포 후크 사용를 참조하세요.
::Dir.glob(::File.join(release_path, '*.war')) do |archive_file| execute "unzip_#{archive_file}" do command "unzip #{archive_file}" cwd release_path end end
참고
앱에 업데이트를 배포할 때 Tomcat은 업데이트를 인식하지 못하고 대신 기존 JSP 앱 버전을 계속 실행할 수 있습니다. 예를 들어 앱을 페이지만 포함된.zip 파일로 배포하는 경우 이런 일이 발생할 수 있습니다. JSP Tomcat이 가장 최근에 배포된 버전을 실행하도록 하려면 프로젝트의 루트 디렉터리에 파일이 포함된 WEB - INF 디렉터리가 포함되어야 합니다. web.xml
web.xml
파일에는 다양한 콘텐츠가 포함될 수 있지만 Tomcat이 업데이트를 인식하고 현재 배포된 앱 버전을 실행하도록 하는 데는 다음으로 충분합니다. 각 업데이트의 버전을 변경할 필요는 없습니다. Tomcat은 버전이 변경되지 않은 경우에도 업데이트를 인식합니다.
<context-param> <param-name>appVersion</param-name> <param-value>0.1</param-value> </context-param>
앱 배포 JSP
JSP앱을 배포하려면 이름과 리포지토리 정보를 지정합니다. 선택적으로 도메인과 SSL 설정을 지정할 수도 있습니다. 앱을 생성하는 방법에 대한 자세한 정보는 앱 추가 단원을 참조하세요. 다음 절차는 퍼블릭 Amazon S3 아카이브에서 간단한 JSP 페이지를 생성하고 배포하는 방법을 보여줍니다. 프라이빗 Amazon S3 아카이브 등 다른 리포지토리 유형을 사용하는 방법에 대해서는 애플리케이션 소스 단원을 참조하세요.
다음 예제는 일부 시스템 정보만 표시하는 JSP 페이지를 보여줍니다.
<%@ page import="java.net.InetAddress" %> <html> <body> <% java.util.Date date = new java.util.Date(); InetAddress inetAddress = InetAddress.getLocalHost(); %> The time is <% out.println( date ); out.println("<br>Your server's hostname is "+inetAddress.getHostName()); %> <br> </body> </html>
참고
다음 절차에서는 스택 생성, 계층에 인스턴스 추가 등등의 기본적 내용에 이미 익숙하다고 가정합니다. 를 처음 사용하는 경우 AWS OpsWorks 스택을 먼저 Chef 11 Linux 스택 시작하기 보셔야 합니다.
Amazon S3 아카이브에서 JSP 페이지를 배포하려면
-
Java 앱 서버 계층으로 스택을 생성하고, 해당 계층에 연중무휴 인스턴스를 추가한 다음 시작하세요.
-
코드를
simplejsp.jsp
파일에 복사하고 이 파일을simplejsp
폴더에 저장한 다음 이 폴더의.zip
아카이브를 생성합니다. 이름은 임의적이므로, 원하는 파일 또는 폴더 이름은 어떤 것이든 사용할 수 있습니다. gzip, bzip2, 타르볼 또는 자바 파일을 비롯한 다른 유형의 아카이브를 사용할 수도 있습니다. WAR 다음 사항을 참고하세요. AWS OpsWorks 스택은 압축되지 않은 타르볼을 지원하지 않습니다. 여러 JSP 페이지를 배포하려면 동일한 아카이브에 페이지를 포함시키십시오. -
이 아카이브를 Amazon S3 버킷에 업로드하고 이 파일을 퍼블릭으로 설정합니다. 나중에 URL 사용할 수 있도록 파일을 복사하세요. 버킷 생성 및 파일 업로드 방법에 대한 자세한 내용은 Amazon Simple Storage Service 시작하기를 참조하세요.
-
스택에 앱을 추가하고 다음 설정을 지정합니다.
-
명칭 –
SimpleJSP
-
앱 유형 –
Java
-
리포지토리 유형 –
Http Archive
-
리포지토리 URL — 아카이브 URL 파일의 Amazon S3.
나머지 설정에 대해서는 기본값을 사용하고 [앱 추가]를 클릭하여 앱을 생성합니다.
-
이제 해당 앱으로 이동하여 앱을 볼 수 있습니다. URL 도메인을 지정하지 않은 경우 인스턴스의 퍼블릭 IP 주소 또는 퍼블릭 DNS 이름을 사용하여 도메인을 생성할 수 있습니다. URL 인스턴스의 퍼블릭 IP 주소 또는 퍼블릭 DNS 이름을 가져오려면 다음으로 이동하십시오. AWS OpsWorks 스택 콘솔을 선택하고 인스턴스 페이지에서 인스턴스 이름을 클릭하여 세부 정보 페이지를 엽니다.
나머지는 앱의 짧은 이름 (소문자 이름) 에 URL 따라 달라집니다. AWS OpsWorks 스택은 앱을 만들 때 지정한 앱 이름에서 생성됩니다. 예를 들어 Simple의 약식 이름은 JSP simplejsp입니다. 앱의 짧은 이름은 앱의 세부 정보 페이지에서 가져올 수 있습니다.
-
짧은 이름이
root
인 경우,http://
또는public_DNS
/appname
.jsphttp://
을 사용할 수 있습니다.public_IP
/appname
.jsp -
그렇지 않으면
http://
또는public_DNS
/app_shortname
/appname
.jsphttp://
을 사용할 수 있습니다.public_IP
/app_shortname
/appname
.jsp
앱의 도메인을 지정한 경우에는 is가 사용됩니다. URL http://
domain
/appname
.jsp
예제는 다음과 같을 것입니다http://192.0.2.0/simplejsp/simplejsp.jsp
. URL
같은 인스턴스에 여러 앱을 배포하려면 root
를 짧은 이름으로 사용해선 안 됩니다. 이로 인해 URL 충돌이 발생하여 앱이 제대로 작동하지 않을 수 있습니다. 대신 앱마다 각기 다른 도메인 이름을 할당하세요.
백엔드 데이터베이스가 포함된 JSP 앱 배포
JSP페이지는 JDBC DataSource
개체를 사용하여 백엔드 데이터베이스에 연결할 수 있습니다. 이러한 앱은 이전 섹션의 절차와 연결을 설정하는 추가 단계를 사용하여 생성 및 배포할 수 있습니다.
다음 JSP 페이지는 DataSource
개체에 연결하는 방법을 보여줍니다.
<html> <head> <title>DB Access</title> </head> <body> <%@ page language="java" import="java.sql.*,javax.naming.*,javax.sql.*" %> <% StringBuffer output = new StringBuffer(); DataSource ds = null; Connection con = null; Statement stmt = null; ResultSet rs = null; try { Context initCtx = new InitialContext(); ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/mydb"); con = ds.getConnection(); output.append("Databases found:<br>"); stmt = con.createStatement(); rs = stmt.executeQuery("show databases"); while (rs.next()) { output.append(rs.getString(1)); output.append("<br>"); } } catch (Exception e) { output.append("Exception: "); output.append(e.getMessage()); output.append("<br>"); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (con != null) { con.close(); } } catch (Exception e) { output.append("Exception (during close of connection): "); output.append(e.getMessage()); output.append("<br>"); } } %> <%= output.toString() %> </body> </html>
AWS OpsWorks Stacks는 객체를 생성 및 초기화하고, DataSource
객체를 논리적 이름에 바인딩하고, Java Naming and Directory Interface () 이름 지정 서비스에 이름을 등록합니다. JNDI 완전한 논리적 이름은 java:comp/env/
입니다. 다음 설명과 같이 스택 구성 및 배포 속성에 사용자 지정 JSON 속성을 추가하여 사용자가 할당한 이름 부분을 지정하여 속성을 정의해야 합니다user-assigned-name
['opsworks_java']['datasources']
.
내 SQL 데이터베이스에 연결되는 JSP 페이지를 배포하려면
-
Java 앱 서버 계층으로 스택을 만들고 각 계층에 연중무휴 인스턴스를 추가한 다음 시작합니다.
-
데이터베이스 계층을 스택에 추가합니다. 세부적인 사항은 사용하는 데이터베이스에 따라 달라집니다.
예를 들어 My SQL 인스턴스를 사용하려면 스택에 My SQL 레이어를 추가하고 해당 레이어에 24/7 인스턴스를 추가한 다음 시작하십시오.
예를 들어 Amazon RDS (MySQL) 인스턴스를 사용하려면:
-
인스턴스의 My SQL 데이터베이스 엔진을 지정합니다.
-
AWS- OpsWorks -DB-마스터-서버 할당 (
security_group_id
) 및 - -자바-앱 서버 (AWSOpsWorkssecurity_group_id
) 인스턴스의 보안 그룹 AWS OpsWorks 리전에서 첫 번째 스택을 생성할 때 Stacks가 이러한 보안 그룹을 생성합니다. -
simplejspdb
라는 데이터베이스를 생성합니다. -
마스터 사용자 이름 및 암호에는 Tomcat 오류를 일으킬 수 있는
&
또는 기타 문자가 포함되면 안 됩니다.특히 시작 중에 Tomcat은 마스터 비밀번호와 사용자 이름이 포함된 파일인 웹 앱 컨텍스트 XML 파일을 파싱해야 합니다. 문자열 중 하나에
&
문자가 포함된 경우 XML 파서는 해당 문자열을 잘못된 형식의 XML 엔티티로 간주하고 구문 분석 예외를 발생시켜 Tomcat을 시작하지 못하게 합니다. 웹 앱 컨텍스트 파일에 대한 자세한 정보는 tomcat::context 단원을 참조하세요.
Amazon RDS 인스턴스를 다음과 같이 사용하는 방법에 대한 자세한 내용은 AWS OpsWorks 스택은 을 참조하십시오아마존 RDS 서비스 레이어.
-
-
예제 코드를
simplejspdb.jsp
파일에 복사하고 이 파일을simplejspdb
폴더에 저장한 다음 이 폴더의.zip
아카이브를 생성합니다. 이름은 임의적이므로, 원하는 파일 또는 폴더 이름은 어떤 것이든 사용할 수 있습니다. 또한 gzip, bzip2 또는 tarball을 비롯하여 다른 아카이브 유형을 사용할 수도 있습니다. 여러 JSP 페이지를 배포하려면 동일한 아카이브에 페이지를 포함하세요. 다른 리포지토리 유형에서 앱을 배포하는 방법은 애플리케이션 소스 단원을 참조하세요. -
이 아카이브를 Amazon S3 버킷에 업로드하고 이 파일을 퍼블릭으로 설정합니다. 나중에 URL 사용할 수 있도록 파일을 복사하세요. 버킷 생성 및 파일 업로드 방법에 대한 자세한 내용은 Amazon Simple Storage Service 시작하기를 참조하세요.
-
스택에 앱을 추가하고 다음 설정을 지정합니다.
-
명칭 –
SimpleJSPDB
-
앱 유형 –
Java
-
데이터 소스 유형 — OpsWorks(My SQL 인스턴스용) 또는 RDS(Amazon RDS 인스턴스용)
-
데이터베이스 인스턴스 — 이전에 만든 내 SQL 인스턴스 (일반적으로 이름이 db-master1 (mysql) 이거나 Amazon RDS 인스턴스 (이름이 지정됨)
DB_instance_name
(mysql). -
데이터베이스 이름 –
simplejspdb
. -
리포지토리 유형 –
Http Archive
-
리포지토리 URL — 아카이브 URL 파일의 Amazon S3.
나머지 설정에 대해서는 기본값을 사용하고 [앱 추가]를 클릭하여 앱을 생성합니다.
-
-
스택 구성 속성에 다음 사용자 지정 JSON 속성을 추가합니다. 여기서 simplejspdb는 앱의 약식입니다.
{ "opsworks_java": { "datasources": { "simplejspdb": "jdbc/mydb" } } }
AWS OpsWorks Stacks는 이 매핑을 사용하여 필요한 데이터베이스 정보가 포함된 컨텍스트 파일을 생성합니다.
스택 구성 JSON 속성에 사용자 지정 속성을 추가하는 방법에 대한 자세한 내용은 을 참조하십시오사용자 지정 사용 JSON.
이제 앱을 사용하여 앱을 볼 수 있습니다. URL 구성 방법에 대한 설명은 URL 을 참조하십시오앱 배포 JSP.
예제는 다음과 같을 것입니다http://192.0.2.0/simplejspdb/simplejspdb.jsp
. URL
참고
datasources
속성에는 여러 속성이 포함될 수 있습니다. 각 속성은 앱의 짧은 이름으로 명명되며, 논리적 이름의 적절한 사용자 할당 부분으로 설정됩니다. 앱이 여러 개 있는 경우 별도의 논리적 이름을 사용할 수 있습니다. 이 경우 JSON 다음과 같은 사용자 지정 이름이 필요합니다.
{ "opsworks_java": { "datasources": { "myjavaapp": "jdbc/myappdb", "simplejsp": "jdbc/myjspdb", ... } } }