메뉴
AWS Elastic Beanstalk
개발자 안내서 (API Version 2010-12-01)

AWS Elastic Beanstalk Tomcat 플랫폼 사용

AWS Elastic Beanstalk Tomcat 플랫폼은 Tomcat 웹 컨테이너에서 실행할 수 있는 Java 웹 애플리케이션을 위한 환경 구성 집합입니다. 각 구성은 Java 8 with Tomcat 8Java 7 with Tomcat 7을 비롯한 Tomcat의 메이저 버전에 해당합니다.

AWS Management Console에서 실행 환경의 구성 수정을 위해 플랫폼별 구성 옵션을 사용할 수 있습니다. 환경 종료 시 구성이 손실되지 않도록 하려면 저장된 구성을 이용해 설정을 저장하고 나중에 다른 환경에 적용할 수 있습니다.

소스 코드에 설정을 저장하기 위해 구성 파일을 포함할 수 있습니다. 구성 파일의 설정은 환경을 만들거나 애플리케이션을 배포할 때마다 적용됩니다. 구성 파일을 사용해 패키지를 설치하고, 스크립트를 실행하고, 배포 중에 다른 인스턴스 사용자 지정 작업을 수행할 수도 있습니다.

Elastic Beanstalk Tomcat 플랫폼 구성에는 요청을 애플리케이션으로 전달하는 역방향 프록시가 포함되어 있습니다. 기본 서버는 Apache HTTP Server(버전 2.2)이지만 구성 옵션을 사용하여 대신 nginx를 사용할 수도 있습니다. 또한 Elastic Beanstalk에서는 애플리케이션에 대한 로드를 줄이기 위해 소스 코드의 폴더에서 정적 자산을 제공하도록 프록시 서버를 구성하는 구성 옵션을 제공합니다. 고급 시나리오의 경우 소스 번들에 고유한 include your own .conf 파일을 포함시켜 Elastic Beanstalk의 프록시 구성을 확장하거나 완전히 덮어 쓸 수 있습니다.

Java 애플리케이션을 특정 구조로 웹 애플리케이션 아카이브(WAR) 파일에 패키지로 묶어야 합니다. 필요한 구조 및 이 구조가 프로젝트 디렉터리의 구조와 연결되는 방법에 대한 자세한 내용은 프로젝트 폴더 구성 단원을 참조하십시오.

동일한 웹 서버에서 애플리케이션을 여러 개 실행하기 위해 단일 소스 번들로 여러 WAR 파일을 묶을 수 있습니다. 여러 WAR 소스 번들의 각 애플리케이션은 루트 경로에서 실행되거나(myapp.elasticbeanstalk.com/에서 ROOT.war 실행) 루트 경로 바로 아래에 있는 경로에서 실행됩니다(WAR의 이름에 따라 myapp.elasticbeanstalk.com/app2/에서 app2.war 실행). 단일 WAR 소스 번들에서 애플리케이션은 항상 루트 경로에서 실행됩니다.

AWS Management Console에 적용된 설정은 구성 파일의 동일한 설정(있는 경우)을 재정의합니다. 그러면 구성 파일에 기본 설정이 유지되고 콘솔에서 환경별 설정으로 재정의할 수 있습니다. 우선 적용 및 설정을 변경하는 다른 방법에 대한 자세한 내용은 구성 옵션 단원을 참조하십시오.

AWS Management Console에서 Tomcat 환경 구성

Elastic Beanstalk의 Tomcat 플랫폼 구성의 경우 Elastic Beanstalk에서는 모든 환경에 대해 제공하는 표준 옵션 이외에도 플랫폼별 옵션 몇 가지를 제공합니다. 이러한 옵션을 사용하면 환경의 웹 서버에서 실행되는 Java 가상 머신(JVM)을 구성하고, 애플리케이션에 정보 구성 문자열을 제공하는 시스템 속성을 정의할 수 있습니다.

AWS Management Console을 사용하여 Amazon S3에 대한 로그 순환을 활성화하고, 애플리케이션이 환경에서 읽을 수 있는 환경 변수를 구성할 수 있습니다.

환경의 소프트웨어 구성 설정에 액세스하려면

  1. Elastic Beanstalk 콘솔을 엽니다.

  2. 해당 환경의 관리 페이지로 이동합니다.

  3. [Configuration]을 선택합니다.

  4. [Software Configuration] 섹션에서 설정 아이콘( 편집 )을 선택합니다.

JVM 컨테이너 옵션

Java 가상 머신(JVM)의 힙 크기는 가비지 수집이 수행되기 전에 애플리케이션이 메모리 내에서 생성할 수 있는 객체 수를 결정합니다. [Initial JVM Heap Size (-Xms argument)] 및 [Maximum JVM Heap Size (-Xmx argument)]를 수정할 수 있습니다. 초기 힙 크기가 클수록 가비지 수집이 수행되기 전에 생성되는 객체 수가 늘어나지만 가비지 수집기가 힙을 압축하는 데 더 오랜 시간이 걸립니다. 최대 힙 크기는 로드가 많이 발생하는 작업 중 힙을 확장하는 경우 JVM에서 할당할 수 있는 최대 메모리 양을 지정합니다.

참고

사용 가능한 메모리는 EC2 인스턴스 유형에 따라 달라집니다. Elastic Beanstalk 환경에서 사용할 수 있는 EC2 인스턴스 유형에 대한 자세한 내용은 Linux용 Amazon Elastic Compute Cloud 사용 설명서인스턴스 유형을 참조하십시오.

영구 생성은 클래스 정의 및 연결된 메타데이터를 저장하는 JVM 힙의 섹션입니다. 영구 생성의 크기를 수정하려면 [Maximum JVM PermGen Size (-XX:MaxPermSize argument)] 필드에 새 크기를 입력합니다. 이 설정은 Java 7 이전 버전에만 적용됩니다.

로그 옵션

로그 옵션 섹션에는 다음 두 가지 설정이 있습니다.

  • [Instance profile]– 애플리케이션과 연결된 Amazon S3 버킷에 액세스할 권한이 있는 인스턴스 프로파일을 지정합니다.

  • [Enable log file rotation to Amazon S3]–애플리케이션에 연결된 Amazon S3 버킷에 애플리케이션의 Amazon EC2 인스턴스에 대한 로그 파일을 복사해야 하는지 지정합니다.

환경 속성

[Environment Properties] 섹션에서는 애플리케이션을 실행하는 Amazon EC2 인스턴스의 환경 속성 설정을 지정할 수 있습니다. 환경 속성은 카-값 페어로 애플리케이션에 전달됩니다.

Tomcat 플랫폼은 연결 문자열을 외부 데이터베이스에 전달하기 위한 Tomcat 환경의 자리 표시자 속성인 JDBC_CONNECTION_STRING을 정의합니다.

참고

RDS DB 인스턴스를 환경에 연결하는 경우 Elastic Beanstalk에서 제공하는 RDS 환경 속성에서 JDBC 연결 문자열을 동적으로 구성합니다. JDBC_CONNECTION_STRING은 Elastic Beanstalk을 사용하여 프로비저닝되지 않은 데이터베이스 인스턴스에만 사용합니다.

Java 애플리케이션에서 Amazon Relational Database Service(Amazon RDS) 사용에 대한 자세한 내용은 Amazon RDS DB 인스턴스를 Java 애플리케이션 환경에 추가 단원을 참조하십시오.

Elastic Beanstalk에서 실행하는 Tomcat 환경에서 System.getProperty()를 사용하여 환경 변수에 액세스할 수 있습니다. 예를 들어 다음 코드로 변수에 대한 API_ENDPOINT이라는 속성을 읽을 수 있습니다.

String apiEndpoint = System.getProperty("API_ENDPOINT");

구성 파일

구성 파일을 사용하여 구성 옵션을 설정하고 배포 중 기타 인스턴스 구성 작업을 수행할 수 있습니다.

Tomcat 플랫폼에서는 모든 Elastic Beanstalk 환경에 대해 지원되는 옵션 이외에도 다음 네임스페이스의 옵션을 지원합니다.

  • aws:elasticbeanstalk:container:tomcat:jvmoptions – JVM 설정을 수정합니다. 이 네임스페이스의 옵션은 다음과 같이 관리 콘솔의 옵션에 해당합니다.

    • XmsJVM 명령줄 옵션

    • XmxJVM 명령줄 옵션

    • XX:MaxPermSize최대 JVM 영구 생성 크기

    • JVM OptionsJVM 명령줄 옵션

  • aws:elasticbeanstalk:application:environment – 환경 속성을 설정합니다.

  • aws:elasticbeanstalk:environment:proxy – 프록시 서버를 선택하고 응답 압축을 구성합니다.

  • aws:elasticbeanstalk:environment:proxy:staticfiles – 소스 번들의 경로에서 정적 자산을 제공하도록 프록시를 구성합니다.

다음 예제 구성 파일에서는 Tomcat 관련 구성 옵션의 사용을 보여 줍니다.

예 .ebextensions/tomcat-settings.config

option_settings:
  aws:elasticbeanstalk:container:tomcat:jvmoptions:
    Xms: 512m
    Xmx: 512m
    JVM Options: '-Xmn128m'
  aws:elasticbeanstalk:application:environment:
    API_ENDPOINT: mywebapi.zkpexsjtmd.us-west-2.elasticbeanstalk.com
  aws:elasticbeanstalk:environment:proxy:
    GzipCompression: 'true'
    ProxyServer: nginx
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /pub: public

자세한 내용은 Java with Tomcat 플랫폼 옵션를 참조하십시오.

프록시 서버 구성

Tomcat 플랫폼은 역방향 프록시를 사용하여 인스턴스에서 포트 80의 요청을 포트 8080에서 수신 중인 Tomcat 웹 컨테이너로 전달합니다. Elastic Beanstalk는 확장하거나 자체 구성으로 완전히 재정의할 수 있는 기본 프록시 구성을 제공합니다.

Tomcat 플랫폼은 기본적으로 프록시에 Apache 2.2를 사용합니다. 소스 코드에 구성 파일을 포함하여 nginx를 사용하도록 선택할 수 있습니다.

예 .ebextensions/nginx-proxy.config

option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: nginx

기본 Apache 구성 확장

Elastic Beanstalk의 기본 Apache 구성을 확장하려면 애플리케이션 소스 번들의 .ebextensions/httpd/conf.d라는 폴더에 .conf 구성 파일을 추가합니다. Elastic Beanstalk의 Apache 구성에는 이 폴더의 .conf 파일이 자동으로 포함됩니다.

~/workspace/my-app/
|-- .ebextensions
|   -- httpd
|      -- conf.d
|         -- myconf.conf
|         -- ssl.conf
-- index.jsp

예를 들어, 다음 구성은 포트 5000에 리스너를 추가합니다.

예 .ebextensions/httpd/conf.d/port5000.conf

listen 5000
<VirtualHost *:5000>
  <Proxy *>
    Order Allow,Deny
    Allow from all
  </Proxy>
  ProxyPass / http://localhost:8080/ retry=0
  ProxyPassReverse / http://localhost:8080/
  ProxyPreserveHost on

  ErrorLog /var/log/httpd/elasticbeanstalk-error_log
</VirtualHost>

Elastic Beanstalk의 기본 Apache 구성을 완전히 재정의하려면 .ebextensions/httpd/conf/httpd.conf의 소스 번들에 구성을 포함시킵니다.

~/workspace/my-app/
|-- .ebextensions
|   `-- httpd
|       `-- conf
|           `-- httpd.conf
`-- index.jsp

Elastic Beanstalk의 Apache 구성을 재정의하는 경우 httpd.conf에 다음 줄을 추가하여 고급 상태 보고 및 모니터링, 응답 압축 및 정적 파일에 대한 Elastic Beanstalk의 구성을 가져옵니다.

Include conf.d/*.conf
Include conf.d/elasticbeanstalk/*.conf

참고

포트 80의 기본 리스너를 재정의하려면 .ebextensions/httpd/conf.d/elasticbeanstalk/에서 00_application.conf 파일을 포함해 Elastic Beanstalk의 구성을 덮어 씁니다.

사용 가능한 예제는 /etc/httpd/conf/httpd.conf에서 환경의 인스턴스에 대한 Elastic Beanstalk의 기본 구성 파일을 살펴보십시오. 소스 번들 내 .ebextensions/httpd 폴더의 모든 파일은 배포 중 /etc/httpd로 복사됩니다.

기본 nginx 구성 확장

Elastic Beanstalk의 기본 nginx 구성을 확장하려면 애플리케이션 소스 번들의 .ebextensions/nginx/conf.d/라는 폴더에 .conf 구성 파일을 추가합니다. Elastic Beanstalk의 nginx 구성에는 이 폴더의 .conf 파일이 자동으로 포함됩니다.

~/workspace/my-app/
|-- .ebextensions
|   `-- nginx
|       `-- conf.d
|           |-- elasticbeanstalk
|           |   `-- my-server-conf.conf
|           `-- my-http-conf.conf
`-- index.jsp

conf.d 폴더에 있는 확장명이 .conf인 파일은 기본 구성의 http 블록에 포함됩니다. conf.d/elasticbeanstalk 폴더의 파일은 http 블록 내 server 블록에 포함됩니다.

Elastic Beanstalk의 기본 nginx 구성을 완전히 재정의하려면 .ebextensions/nginx/nginx.conf의 소스 번들에 구성을 포함시킵니다.

~/workspace/my-app/
|-- .ebextensions
|   `-- nginx
|       `-- nginx.conf
`-- index.jsp

Elastic Beanstalk의 nginx 구성을 재정의하는 경우 구성의 server 블록에 다음 줄을 추가하여 포트 80 리스너, 응답 압축 및 정적 파일에 대한 Elastic Beanstalk의 구성을 가져옵니다.

 include conf.d/elasticbeanstalk/*.conf;

참고

포트 80의 기본 리스너를 재정의하려면 .ebextensions/nginx/conf.d/elasticbeanstalk/에서 00_application.conf 파일을 포함해 Elastic Beanstalk의 구성을 덮어 씁니다.

또한 구성의 http 블록에 다음 줄을 포함하여 고급 상태 보고 및 모니터링 및 로깅에 대한 Elastic Beanstalk의 구성을 가져옵니다.

    include       conf.d/*.conf;

사용 가능한 예제는 /etc/nginx/nginx.conf에서 환경의 인스턴스에 대한 Elastic Beanstalk의 기본 구성 파일을 살펴보십시오. 소스 번들 내 .ebextensions/nginx 폴더의 모든 파일은 배포 중 /etc/nginx로 복사됩니다.

사용 .gitignore

컴파일된 클래스 파일 및 WAR 파일을 Git 리포지토리에 커밋하거나 Git 명령 실행 시 이러한 파일에 대해 나타나는 메시지를 보지 않도록 하려면 프로젝트 폴더의 .gitignore 파일에 관련 파일 형식을 추가합니다.

~/workspace/myapp/.gitignore

*.zip
*.class