Java 앱 배포 - AWS OpsWorks

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Java 앱 배포

중요

이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 고객과 기존 고객 모두 사용할 수 없습니다. 고객은 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션할 것을 강력히 권장합니다. 마이그레이션에 대해 궁금한 점이 있으면 AWS re:Post 또는 Premium AWS Support를 통해 AWS Support 팀에 문의하세요.

다음 주제에서는 Java 앱 서버 계층의 인스턴스에 앱을 배포하는 방법을 설명합니다. 예제는 JSP 앱용이지만 다른 유형의 Java 앱 설치에도 기본적으로 동일한 절차를 사용할 수 있습니다.

지원되는 모든 리포지토리에서 JSP 페이지를 배포할 수 있습니다. WAR 파일을 배포하려는 경우 AWS OpsWorks Stacks는 Amazon S3 또는 HTTP 아카이브에서 배포된 WAR 파일을 자동으로 추출하지만 Git 또는 Subversion 리포지토리에서는 추출하지 않는다는 점에 유의하십시오. WAR 파일에 Git 또는 하위 버전을 사용하려면 다음 중 하나를 수행할 수 있습니다.

  • 추출된 아카이브를 리포지토리에 저장합니다.

  • 리포지토리에 WAR 파일을 저장하고 다음 예제의 설명처럼 Chef 배포 후크를 사용하여 아카이브를 추출합니다.

Chef 배포 후크를 사용하여 배포 4단계 중 어느 단계에서나 사용자 제공 Ruby 애플리케이션을 인스턴스에서 실행할 수 있습니다. 애플리케이션 이름이 단계를 결정합니다. 다음은 Git 또는 하위 버전 리포지토리에서 배포된 WAR 파일을 추출하는 before_migrate.rb라는 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
참고

JSP 앱에 업데이트를 배포하면 Tomcat이 업데이트를 인식하지 못하고 기존 앱 버전을 계속 실행할 수 있습니다. 예를 들어 JSP 페이지만 포함된 .zip 파일로 앱을 배포하는 경우, 이런 현상이 생길 수 있습니다. Tomcat이 가장 최근에 배포된 버전을 실행하도록 하려면 web.xml 파일이 포함된 WEB-INF 디렉터리가 프로젝트의 루트 디렉터리에 포함되어야 합니다. 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 페이지를 배포하려면
  1. Java 앱 서버 계층으로 스택을 생성하고, 해당 계층에 연중무휴 인스턴스를 추가한 다음 시작하세요.

  2. 코드를 simplejsp.jsp 파일에 복사하고 이 파일을 simplejsp 폴더에 저장한 다음 이 폴더의 .zip 아카이브를 생성합니다. 이름은 임의적이므로, 원하는 파일 또는 폴더 이름은 어떤 것이든 사용할 수 있습니다. 또한 gzip, bzip2, tarball 또는 Java WAR 파일을 비롯하여 다른 아카이브 유형을 사용할 수도 있습니다. 참고로 AWS OpsWorks 스택은 압축되지 않은 타르볼을 지원하지 않습니다. 여러 JSP 페이지를 배포하려면 배포하려는 페이지를 동일한 아카이브에 저장합니다.

  3. 이 아카이브를 Amazon S3 버킷에 업로드하고 이 파일을 퍼블릭으로 설정합니다. 나중에 사용하기 위해 파일의 URL를 복사해 둡니다. 버킷 생성 및 파일 업로드 방법에 대한 자세한 내용은 Amazon Simple Storage Service 시작하기를 참조하세요.

  4. 스택에 앱을 추가하고 다음 설정을 지정합니다.

    • 명칭SimpleJSP

    • 앱 유형Java

    • 리포지토리 유형Http Archive

    • 리포지토리 URL - 아카이브 파일의 Amazon S3 URL.

    나머지 설정에 대해서는 기본값을 사용하고 [앱 추가]를 클릭하여 앱을 생성합니다.

  5. 앱을 Java 앱 서버 인스턴스에 배포합니다.

이제 앱의 URL로 이동하여 앱을 볼 수 있습니다. 도메인을 지정하지 않았다면 인스턴스의 퍼블릭 IP 주소나 퍼블릭 DNS 이름을 사용하여 URL을 생성할 수 있습니다. 인스턴스의 퍼블릭 IP 주소 또는 퍼블릭 DNS 이름을 가져오려면 AWS OpsWorks Stacks 콘솔로 이동하여 Instances 페이지에서 인스턴스 이름을 클릭하여 세부 정보 페이지를 여십시오.

나머지 URL은 앱의 짧은 이름에 따라 달라집니다. 이 이름은 앱을 만들 때 지정한 앱 이름에서 AWS OpsWorks Stacks가 생성하는 소문자 이름입니다. 예를 들어 SimpleJSP의 짧은 이름은 simplejsp입니다. 앱의 짧은 이름은 앱의 세부 정보 페이지에서 가져올 수 있습니다.

  • 짧은 이름이 root인 경우, http://public_DNS/appname.jsp 또는 http://public_IP/appname.jsp을 사용할 수 있습니다.

  • 그렇지 않으면 http://public_DNS/app_shortname/appname.jsp 또는 http://public_IP/app_shortname/appname.jsp을 사용할 수 있습니다.

앱에 도메인을 지정한 경우, URL은 http://domain/appname.jsp입니다.

예제의 URL은 http://192.0.2.0/simplejsp/simplejsp.jsp와 비슷합니다.

같은 인스턴스에 여러 앱을 배포하려면 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 객체를 논리적 이름에 바인딩하고, JNDI (Java Naming and Directory Interface) 네이밍 서비스에 이름을 등록합니다. 완전한 논리적 이름은 java:comp/env/user-assigned-name입니다. 다음에서 설명하는 것처럼 사용자 지정 JSON 속성을 스택 구성 및 배포 속성에 추가함으로써 이름의 사용자 할당 부분을 지정하여 ['opsworks_java']['datasources'] 속성을 정의해야 합니다.

MySQL 데이터베이스에 연결하는 JSP 페이지를 배포하려면
  1. Java 앱 서버 계층으로 스택을 만들고 각 계층에 연중무휴 인스턴스를 추가한 다음 시작합니다.

  2. 데이터베이스 계층을 스택에 추가합니다. 세부적인 사항은 사용하는 데이터베이스에 따라 달라집니다.

    예를 들어 MySQL 인스턴스를 사용하려면 스택에 MySQL 계층을 추가하고, 이 계층에 24/7 인스턴스를 추가한 다음 해당 인스턴스를 시작합니다.

    예를 들어 Amazon RDS(MySQL) 인스턴스를 시작하려면,

    • 인스턴스의 MySQL 데이터베이스 엔진을 지정합니다.

    • AWS- OpsWorks -DB-마스터-서버 (security_group_id) 및 AWS - -Java-앱 서버 (security_group_id) 보안 그룹을 인스턴스에 할당합니다. OpsWorks AWS OpsWorks 스택은 해당 지역에서 첫 번째 스택을 생성할 때 이러한 보안 그룹을 자동으로 생성합니다.

    • simplejspdb라는 데이터베이스를 생성합니다.

    • 마스터 사용자 이름 및 암호에는 Tomcat 오류를 일으킬 수 있는 & 또는 기타 문자가 포함되면 안 됩니다.

      특히, 시작 중에 Tomcat은 마스터 암호 및 사용자 이름이 포함된 XML 파일인 웹 앱 컨텍스트 파일을 구문 분석해야 합니다. 문자열 중 하나에 & 문자가 포함되어 있으면 XML 구문 분석기는 이 문자를 형식이 잘못된 XML 엔터티로 취급하여 구문 분석 예외가 발생해 Tomcat이 시작되지 않습니다. 웹 앱 컨텍스트 파일에 대한 자세한 정보는 tomcat::context 단원을 참조하세요.

    • MySQL 드라이버를 Java 앱 서버 계층에 추가합니다.

    • 스택에 RDS 인스턴스를 등록합니다.

    Amazon RDS 인스턴스를 AWS OpsWorks 스택과 함께 사용하는 방법에 대한 자세한 내용은 을 참조하십시오. Amazon RDS 서비스 계층

  3. 예제 코드를 simplejspdb.jsp 파일에 복사하고 이 파일을 simplejspdb 폴더에 저장한 다음 이 폴더의 .zip 아카이브를 생성합니다. 이름은 임의적이므로, 원하는 파일 또는 폴더 이름은 어떤 것이든 사용할 수 있습니다. 또한 gzip, bzip2 또는 tarball을 비롯하여 다른 아카이브 유형을 사용할 수도 있습니다. 여러 JSP 페이지를 배포하려면 배포하려는 페이지를 동일한 아카이브에 저장합니다. 다른 리포지토리 유형에서 앱을 배포하는 방법은 애플리케이션 소스 단원을 참조하세요.

  4. 이 아카이브를 Amazon S3 버킷에 업로드하고 이 파일을 퍼블릭으로 설정합니다. 나중에 사용하기 위해 파일의 URL를 복사해 둡니다. 버킷 생성 및 파일 업로드 방법에 대한 자세한 내용은 Amazon Simple Storage Service 시작하기를 참조하세요.

  5. 스택에 앱을 추가하고 다음 설정을 지정합니다.

    • 명칭SimpleJSPDB

    • 앱 유형Java

    • 데이터 소스 유형OpsWorks(MySQL 인스턴스의 경우) 또는 RDS (Amazon RDS 인스턴스의 경우).

    • 데이터베이스 인스턴스 - 앞서 생성한 MySQL 인스턴스(이름: db-master1(mysql)) 또는 Amazon RDS 인스턴스(이름: DB_instance_name (mysql)).

    • 데이터베이스 이름simplejspdb.

    • 리포지토리 유형Http Archive

    • 리포지토리 URL - 아카이브 파일의 Amazon S3 URL.

    나머지 설정에 대해서는 기본값을 사용하고 [앱 추가]를 클릭하여 앱을 생성합니다.

  6. 스택 구성 속성에 다음 사용자 지정 JSON 속성을 추가합니다. 여기서 simplejspdb는 앱의 짧은 이름입니다.

    { "opsworks_java": { "datasources": { "simplejspdb": "jdbc/mydb" } } }

    AWS OpsWorks Stacks는 이 매핑을 사용하여 필요한 데이터베이스 정보가 포함된 컨텍스트 파일을 생성합니다.

    스택 구성 속성에 사용자 지정 JSON 속성을 추가하는 방법은 사용자 지정 JSON 사용 단원을 참조하세요.

  7. 앱을 Java 앱 서버 인스턴스에 배포합니다.

이제 앱의 URL을 사용하여 앱을 볼 수 있습니다. URL 생성 방법에 대한 설명은 JSP 앱 배포를 참조하세요.

예제의 URL은 http://192.0.2.0/simplejspdb/simplejspdb.jsp와 비슷합니다.

참고

datasources 속성에는 여러 속성이 포함될 수 있습니다. 각 속성은 앱의 짧은 이름으로 명명되며, 논리적 이름의 적절한 사용자 할당 부분으로 설정됩니다. 앱이 여러 개인 경우에는 별도의 논리적 이름을 사용할 수 있으며, 다음과 비슷한 사용자 지정 JSON이 필요합니다.

{ "opsworks_java": { "datasources": { "myjavaapp": "jdbc/myappdb", "simplejsp": "jdbc/myjspdb", ... } } }