

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

# Elastic Beanstalk를 사용하여 Java 애플리케이션 배포
<a name="create_deploy_Java"></a>

이 장에서는 Java 애플리케이션을 구성하고 배포하는 방법에 대한 지침을 제공합니다 AWS Elastic Beanstalk. Elastic Beanstalk를 통해 Amazon Web Services를 사용하는 Java 웹 애플리케이션을 손쉽게 배포, 관리 및 규모 조정할 수 있습니다.

Elastic Beanstalk 명령줄 인터페이스(EB CLI)를 사용하거나 Elastic Beanstalk 콘솔을 사용하여 단 몇 분 만에 애플리케이션을 배포할 수 있습니다. Elastic Beanstalk 애플리케이션을 배포한 후 EB CLI를 계속 사용하여 애플리케이션 및 환경을 관리하거나 AWS CLI Elastic Beanstalk 콘솔 또는 APIs.

[Java에 대한 QuickStart](java-quickstart.md)의 단계별 지침에 따라 EB CLI를 사용하여 *Hello World* Java 웹 애플리케이션을 생성하고 배포합니다. EB CLI를 사용하여 Tomcat 기반 플랫폼에 배포할 간단한 *Hello World* Java JSP 애플리케이션을 생성하는 단계별 지침에 관심이 있는 경우 [Tomcat의 Java에 대한 QuickStart](tomcat-quickstart.md)를 사용해 보세요.

**Java 플랫폼 브랜치**  
AWS Elastic Beanstalk 는 Java 애플리케이션을 위한 두 가지 플랫폼을 지원합니다.
+ **Tomcat** – *Apache Tomcat*에 기반한 플랫폼으로 Java 서블릿과 JavaServer Pages(JSP)를 사용하여 HTTP 요청을 처리하는 애플리케이션을 위한 오픈 소스 웹 컨테이너입니다. Tomcat은 멀티스레딩, 선언적 보안 구성, 광범위한 사용자 지정을 제공하여 웹 애플리케이션 개발을 용이하게 합니다. Elastic Beanstalk에는 Tomcat의 현재 메이저 버전 각각에 대한 플랫폼 브랜치가 있습니다. 자세한 내용은 [Tomcat 플랫폼](java-tomcat-platform.md)을(를) 참조하세요.
+ **Java SE** – 웹 컨테이너를 사용하지 않거나 Jetty 또는 GlassFish와 같은 Tomcat 이외의 웹 컨테이너를 사용하는 애플리케이션용 플랫폼입니다. Elastic Beanstalk에 배포하는 소스 번들의 애플리케이션에서 사용하는 모든 라이브러리 Java Archives(JAR)를 포함시킬 수 있습니다. 자세한 내용은 [Java SE 플랫폼](java-se-platform.md) 단원을 참조하십시오.

Tomcat 및 Java SE 플랫폼의 최근 브랜치는 Amazon Linux 2 이상을 기반으로 하며 AWS Java SE 배포판인 *Corretto*를 사용합니다. 플랫폼 브랜치의 이름에는 *Java* 대신 *Corretto* 단어가 포함되어 있습니다.

현재 플랫폼 버전의 목록은 *AWS Elastic Beanstalk 플랫폼* 안내서의 [Tomcat](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.java) 및 [Java SE](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.javase)를 참조하세요.

**AWS 도구**  
AWS 는 Java 및 Elastic Beanstalk 작업을 위한 여러 도구를 제공합니다. 선택한 플랫폼 브랜치에 관계없이 Java[AWS 용 SDK를 사용하여 Java](java-development-environment.md#java-development-environment-sdk) 애플리케이션 내에서 다른 AWS 서비스를 사용할 수 있습니다. Java용 AWS SDK는 처음부터 원시 HTTP 호출을 작성하지 않고도 애플리케이션 코드의 AWS APIs를 사용할 수 있는 라이브러리 세트입니다.

명령줄에서 애플리케이션을 관리하는 것을 원하는 경우 [Elastic Beanstalk 명령줄 인터페이스](eb-cli3.md)(EB CLI)를 설치하고 이를 사용하여 Elastic Beanstalk 환경을 생성하고, 모니터링하고, 관리하세요. 애플리케이션용으로 여러 환경을 실행하는 경우, EB CLI는 각 환경을 서로 다른 Git 브랜치와 연결할 수 있도록 Git과 통합합니다.

**Topics**
+ [

# QuickStart: Elastic Beanstalk에 Java 애플리케이션 배포
](java-quickstart.md)
+ [

# QuickStart: Tomcat용 Java JSP 웹 애플리케이션을 Elastic Beanstalk에 배포
](tomcat-quickstart.md)
+ [

# Java 개발 환경 설정
](java-development-environment.md)
+ [

# 더 많은 Java용 Elastic Beanstalk 예제 애플리케이션 및 자습서
](java-getstarted.md)
+ [

# Elastic Beanstalk Tomcat 플랫폼 사용
](java-tomcat-platform.md)
+ [

# Elastic Beanstalk Java SE 플랫폼 사용
](java-se-platform.md)
+ [

# Java Elastic Beanstalk 환경에 Amazon RDS DB 인스턴스 추가
](java-rds.md)
+ [

# Java 도구 및 리소스
](create_deploy_Java.resources.md)

# QuickStart: Elastic Beanstalk에 Java 애플리케이션 배포
<a name="java-quickstart"></a>

이 QuickStart 자습서에서는 Java 애플리케이션을 생성하고 AWS Elastic Beanstalk 환경에 배포하는 프로세스를 안내합니다.

**프로덕션용으로 사용 불가**  
예제는 설명용으로만 제공됩니다. 예제 애플리케이션을 프로덕션 환경에서 사용하지 마세요.

**Topics**
+ [

## 내 AWS 계정
](#java-quickstart-aws-account)
+ [

## 사전 조건
](#java-quickstart-prereq)
+ [

## 1단계: Java 애플리케이션 생성
](#java-quickstart-create-app)
+ [

## 2단계: 로컬에서 애플리케이션 실행
](#java-quickstart-run-local)
+ [

## 3단계: EB CLI를 사용하여 Java 애플리케이션 배포
](#java-quickstart-deploy)
+ [

## 4단계: Elastic Beanstalk에서 애플리케이션 실행
](#java-quickstart-run-eb-ap)
+ [

## 5단계: 정리
](#java-tutorial-cleanup)
+ [

## AWS 애플리케이션을 위한 리소스
](#java-quickstart-eb-resources)
+ [

## 다음 단계
](#java-quickstart-next-steps)
+ [

## Elastic Beanstalk 콘솔을 사용하여 배포
](#java-quickstart-console)

## 내 AWS 계정
<a name="java-quickstart-aws-account"></a>

아직 AWS 고객이 아닌 경우 AWS 계정을 생성해야 합니다. 가입하면 Elastic Beanstalk 및 필요한 기타 AWS 서비스에 액세스할 수 있습니다.

이미 AWS 계정이 있는 경우 로 이동할 수 있습니다[사전 조건](#java-quickstart-prereq).

### AWS 계정 생성
<a name="java-quickstart-aws-account-procedure"></a>

#### 에 가입 AWS 계정
<a name="sign-up-for-aws"></a>

이 없는 경우 다음 단계를 AWS 계정완료하여 생성합니다.

**에 가입하려면 AWS 계정**

1. [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)을 엽니다.

1. 온라인 지시 사항을 따르세요.

   등록 절차 중 전화 또는 텍스트 메시지를 받고 전화 키패드로 확인 코드를 입력하는 과정이 있습니다.

   에 가입하면 AWS 계정*AWS 계정 루트 사용자*이 생성됩니다. 루트 사용자에게는 계정의 모든 AWS 서비스 및 리소스에 액세스할 권한이 있습니다. 보안 모범 사례는 사용자에게 관리 액세스 권한을 할당하고, 루트 사용자만 사용하여 [루트 사용자 액세스 권한이 필요한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)을 수행하는 것입니다.

AWS 는 가입 프로세스가 완료된 후 확인 이메일을 보냅니다. 언제든지 [https://aws.amazon.com/](https://aws.amazon.com/)으로 이동하고 **내 계정**을 선택하여 현재 계정 활동을 확인하고 계정을 관리할 수 있습니다.

#### 관리자 액세스 권한이 있는 사용자 생성
<a name="create-an-admin"></a>

에 가입한 후 일상적인 작업에 루트 사용자를 사용하지 않도록 관리 사용자를 AWS 계정보호 AWS IAM Identity Center, AWS 계정 루트 사용자활성화 및 생성합니다.

**보안 AWS 계정 루트 사용자**

1.  **루트 사용자를** 선택하고 AWS 계정 이메일 주소를 입력하여 계정 소유자[AWS Management Console](https://console.aws.amazon.com/)로에 로그인합니다. 다음 페이지에서 비밀번호를 입력합니다.

   루트 사용자를 사용하여 로그인하는 데 도움이 필요하면 *AWS Sign-In 사용 설명서*의 [루트 사용자로 로그인](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)을 참조하세요.

1. 루트 사용자의 다중 인증(MFA)을 활성화합니다.

   지침은 *IAM 사용 설명서*의 [AWS 계정 루트 사용자(콘솔)에 대한 가상 MFA 디바이스 활성화를 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html).

**관리자 액세스 권한이 있는 사용자 생성**

1. IAM Identity Center를 활성화합니다.

   지침은 *AWS IAM Identity Center 사용 설명서*의 [AWS IAM Identity Center설정](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)을 참조하세요.

1. IAM Identity Center에서 사용자에게 관리 액세스 권한을 부여합니다.

   를 자격 증명 소스 IAM Identity Center 디렉터리 로 사용하는 방법에 대한 자습서는 사용 *AWS IAM Identity Center 설명서*[의 기본값으로 사용자 액세스 구성을 IAM Identity Center 디렉터리](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) 참조하세요.

**관리 액세스 권한이 있는 사용자로 로그인**
+ IAM IDentity Center 사용자로 로그인하려면 IAM Identity Center 사용자를 생성할 때 이메일 주소로 전송된 로그인 URL을 사용합니다.

  IAM Identity Center 사용자를 사용하여 로그인하는 데 도움이 필요하면 *AWS Sign-In 사용 설명서*[의 AWS 액세스 포털에 로그인](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)을 참조하세요.

**추가 사용자에게 액세스 권한 할당**

1. IAM Identity Center에서 최소 권한 적용 모범 사례를 따르는 권한 세트를 생성합니다.

   지침은 *AWS IAM Identity Center 사용 설명서*의 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)를 참조하세요.

1. 사용자를 그룹에 할당하고, 그룹에 Single Sign-On 액세스 권한을 할당합니다.

   지침은 *AWS IAM Identity Center 사용 설명서*의 [그룹 추가](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)를 참조하세요.

## 사전 조건
<a name="java-quickstart-prereq"></a>

이 설명서의 절차를 수행하기 위해서는 실행 명령줄을 입력할 쉘 또는 터미널이 필요합니다. 명령은 프롬프트 기호(\$1)와 해당하는 경우 현재 디렉터리 이름 뒤에 리스트로 표시됩니다.

```
~/eb-project$ this is a command
this is output
```

Linux 및 macOS의 경우 선호하는 쉘과 패키지 관리자를 사용할 수 있습니다. Windows의 경우 [Linux용 Windows Subsystem을 설치](https://docs.microsoft.com/en-us/windows/wsl/install-win10)하여 Ubuntu 및 Bash의 Windows 통합 버전을 가져옵니다.

### EB CLI
<a name="java-quickstart-prereq.ebcli"></a>

또한 본 자습서는 Elastic Beanstalk 명령줄 인터페이스(EB CLI)를 사용합니다. EB CLI 설치 및 구성에 대한 자세한 내용은 [설정 스크립트를 사용하여 EB CLI 설치(권장)](eb-cli3.md#eb-cli3-install) 및 [EB CLI 구성](eb-cli3-configuration.md) 단원을 참조하세요.

### Java 및 Maven
<a name="java-quickstart-prereq.runtime"></a>

로컬 시스템에 Amazon Corretto가 설치되어 있지 않은 경우 *Amazon Corretto 사용 설명서*의 [설치 지침](https://docs.aws.amazon.com/corretto/latest/corretto-21-ug/amazon-linux-install.html)에 따라 설치할 수 있습니다.

다음 명령을 실행하여 Java 설치를 확인합니다.

```
~$ java -version 
```

이 자습서에서는 Maven을 사용합니다. Apache Maven Project 웹 사이트의 [다운로드](https://maven.apache.org/download.cgi) 및 [설치](https://maven.apache.org/install.html) 지침을 따릅니다. Maven에 관한 자세한 내용은 Apache Maven Project 웹 사이트에서 [Maven 사용자 센터](https://maven.apache.org/users/index.html)를 참조하세요.

다음 명령을 실행하여 Maven 설치를 확인합니다.

```
~$ mvn -v
```

## 1단계: Java 애플리케이션 생성
<a name="java-quickstart-create-app"></a>

프로젝트 디렉터리를 만듭니다.

```
~$ mkdir eb-java
~$ cd eb-java
```

그 다음 Elastic Beanstalk를 사용하여 배포할 애플리케이션을 만듭니다. "Hello World" RESTful 웹 서비스를 만듭니다.

이 예제에서는 [Spring Boot](https://spring.io/projects/spring-boot) 프레임워크를 사용합니다. 이 애플리케이션은 포트 5000에서 리스너를 엽니다. 기본적으로 Elastic Beanstalk는 요청을 포트 5,000의 애플리케이션에 전달합니다.

다음 파일을 생성합니다.

이 파일은 간단한 Spring Boot 애플리케이션을 생성합니다.

**Example `~/eb-java/src/main/java/com/example/Application.java`**  

```
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
```

이 파일은 여기에서 정의하는 문자열을 반환하는 매핑을 생성합니다.

**Example `~/eb-java/src/main/java/com/example/Controller.java`**  

```
package com.example;
    
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
    
@RestController
public class Controller {
    
    @GetMapping("/")
    public String index() {
       return "Hello Elastic Beanstalk!";
    }
}
```

이 파일은 Maven 프로젝트 구성을 정의합니다.

**Example `~/eb-java/pom.xml`**  

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.3</version>
  </parent>

  <groupId>com.example</groupId>
  <artifactId>BeanstalkJavaExample</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <java.version>21</java.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>
```

이 속성 파일은 기본 포트를 5000으로 재정의합니다. 이 포트는 Elastic Beanstalk가 Java 애플리케이션을 위해 트래픽을 전송하는 기본 포트입니다.

**Example `~/eb-java/application.properties`**  

```
server.port=5000
```

## 2단계: 로컬에서 애플리케이션 실행
<a name="java-quickstart-run-local"></a>

다음 명령을 사용하여 Spark 애플리케이션을 패키징합니다.

```
~/eb-java$ mvn clean package
```

다음 명령을 실행하여 로컬에서 애플리케이션을 실행합니다.

```
~/eb-java$ java -jar target/BeanstalkJavaExample-1.0-SNAPSHOT.jar
```

애플리케이션이 실행되는 동안 브라우저에서 `http://127.0.0.1:5000/`으로 이동합니다. ‘Hello Elastic Beanstalk\$1’라는 텍스트가 표시됩니다.

## 3단계: EB CLI를 사용하여 Java 애플리케이션 배포
<a name="java-quickstart-deploy"></a>

Java 애플리케이션을 Elastic Beanstalk에 배포하기 전에 사용자 디렉터리에서 빌드 애플리케이션을 정리하고 [Buildfile](java-se-buildfile.md) 및 [Procfile](java-se-procfile.md)을 생성하여 애플리케이션이 Elastic Beanstalk 환경에서 빌드되고 실행되는 방식을 제어해 보겠습니다.

**배포를 위해 애플리케이션를 준비하고 구성하려면**

1. 빌드된 애플리케이션을 정리합니다.

   ```
   ~/eb-java$ mvn clean
   ```

1. `Buildfile`을 생성합니다.  
**Example `~/eb-java/Buildfile`**  

   ```
   build: mvn clean package
   ```

   이 `Buildfile`에서는 애플리케이션을 빌드하는 데 사용되는 명령을 지정합니다. Java용 `Buildfile` 애플리케이션을 포함하지 않는 경우 Elastic Beanstalk는 애플리케이션 빌드를 시도하지 않습니다.

1. `Procfile`을 생성합니다.  
**Example `~/eb-java/Procfile`**  

   ```
   web: java -jar target/BeanstalkJavaExample-1.0-SNAPSHOT.jar
   ```

   이 `Procfile`에서는 애플리케이션을 실행하는 데 사용되는 명령을 지정합니다. Java용 `Procfile` 애플리케이션을 포함하지 않는 경우 Elastic Beanstalk는 소스 번들의 루트에 JAR 파일이 하나 있다고 가정하고 `java -jar` 명령으로 실행을 시도합니다.

 이제 애플리케이션을 빌드하고 시작할 구성 파일을 설정했으므로 애플리케이션을 배포할 준비가 되었습니다.

**환경을 생성하고 Java 애플리케이션을 배포하려면**

1. **eb init** 명령으로 EB CLI 리포지토리를 초기화합니다.

   ```
   ~/eb-java eb init -p corretto java-tutorial --region us-east-2
           
   Application java-tutorial has been created.
   ```

   이 명령은 `java-tutorial`이라는 애플리케이션을 생성하고 최신 Java 플랫폼 버전을 통해 환경을 생성하도록 로컬 리포지토리를 구성합니다.

1. (선택 사항) SSH를 통해 애플리케이션을 실행하는 EC2 인스턴스에 연결할 수 있도록 **eb init**를 다시 실행하여 기본 키 페어를 구성합니다.

   ```
   ~/eb-java$ eb init
   Do you want to set up SSH for your instances?
   (y/n): y
   Select a keypair.
   1) my-keypair
   2) [ Create new KeyPair ]
   ```

   키 페어가 이미 있는 경우 이를 선택하거나, 프롬프트에 따라 키 페어를 생성합니다. 프롬프트가 보이지 않거나 나중에 설정을 변경해야 하는 경우 **eb init -i**를 실행합니다.

1. 환경을 만들고 **eb create**로 해당 환경에 애플리케이션을 배포합니다. Elastic Beanstalk는 애플리케이션에 대한 zip 파일을 자동으로 빌드하고 포트 5000에서 시작합니다.

   ```
   ~/eb-java$ eb create java-env
   ```

   Elastic Beanstalk에서 환경을 생성하는 데 약 5분이 걸립니다.

## 4단계: Elastic Beanstalk에서 애플리케이션 실행
<a name="java-quickstart-run-eb-ap"></a>

환경 생성 프로세스가 완료되면 **eb open**으로 웹 사이트를 엽니다.

```
~/eb-java eb open
```

축하합니다\$1 Elastic Beanstalk를 사용하여 Java 애플리케이션을 배포했습니다\$1 그러면 애플리케이션에 대해 생성된 도메인 이름을 사용하여 브라우저 창이 열립니다.

## 5단계: 정리
<a name="java-tutorial-cleanup"></a>

애플리케이션 작업을 완료하면 환경을 종료할 수 있습니다. Elastic Beanstalk는 환경과 연결된 모든 AWS 리소스를 종료합니다.

EB CLI를 사용하여 Elastic Beanstalk 환경을 종료하려면 다음 명령을 실행하세요.

```
~/eb-java$ eb terminate
```

## AWS 애플리케이션을 위한 리소스
<a name="java-quickstart-eb-resources"></a>

단일 인스턴스 애플리케이션을 생성했습니다. 이 애플리케이션은 단일 EC2 인스턴스를 사용하는 간단한 샘플 애플리케이션 역할을 하므로 로드 밸런싱이나 오토 스케일링이 필요하지 않습니다. 단일 인스턴스 애플리케이션의 경우 Elastic Beanstalk는 다음 AWS 리소스를 생성합니다.
+ **EC2 인스턴스** - 선택한 플랫폼에서 웹 앱을 실행하도록 구성된 Amazon EC2 가상 머신입니다.

  특정 언어 버전, 프레임워크, 웹 컨테이너 또는 조합을 지원하도록 각 플랫폼마다 실행하는 소프트웨어, 구성 파일 및 스크립트 세트가 다릅니다. 대부분의 플랫폼에서는 웹 앱 앞의 웹 트래픽을 처리하고, 웹 앱으로 요청을 전달하고, 정적 자산을 제공하고, 액세스 및 오류 로그를 생성하는 역방향 프록시로 Apache 또는 nginx를 사용합니다.
+ **인스턴스 보안 그룹** - 포트 80에서 수신 트래픽을 허용하도록 구성된 Amazon EC2 보안 그룹입니다. 이 리소스를 통해 로드 밸런서의 HTTP 트래픽이 웹 앱을 실행하는 EC2 인스턴스에 도달할 수 있습니다. 기본적으로 다른 포트에서는 트래픽이 허용되지 않습니다.
+ **Amazon S3 버킷(Amazon S3 bucket)** - Elastic Beanstalk 사용 시 생성된 소스 코드, 로그 및 기타 아티팩트의 스토리지 위치입니다.
+ **Amazon CloudWatch 경보** - 환경의 인스턴스에 대한 로드를 모니터링하는 두 개의 CloudWatch 경보로, 로드가 너무 높거나 너무 낮은 경우 트리거됩니다. 경보가 트리거되면 이에 대한 응답으로 Auto Scaling 그룹이 스케일 업 또는 축소됩니다.
+ **CloudFormation 스택** - Elastic Beanstalk는 CloudFormation 를 사용하여 환경에서 리소스를 시작하고 구성 변경 사항을 전파합니다. 리소스는 [CloudFormation 콘솔](https://console.aws.amazon.com/cloudformation)에서 볼 수 있는 템플릿에서 정의됩니다.
+  **도메인 이름(Domain name)** - **subdomain*.*region*.elasticbeanstalk.com* 형식으로 웹 앱으로 라우팅되는 도메인 이름입니다.

이러한 모든 리소스는 Elastic Beanstalk에서 관리합니다. 사용자가 환경을 종료하면 Elastic Beanstalk는 환경에 있는 모든 리소스를 종료합니다.

## 다음 단계
<a name="java-quickstart-next-steps"></a>

애플리케이션을 실행하는 환경이 있으면 언제든 다른 애플리케이션 또는 애플리케이션의 새 버전을 배포할 수 있습니다. EC2 인스턴스를 프로비저닝하거나 다시 시작할 필요가 없기 때문에 새 애플리케이션 버전을 매우 빠르게 배포할 수 있습니다. Elastic Beanstalk 콘솔을 사용하여 새로운 환경을 탐색할 수도 있습니다. 자세한 단계는 이 가이드의 *시작하기* 장의 [환경 탐색](GettingStarted.md#GettingStarted.Explore)을 참조하세요.

**더 많은 자습서 보기**  
다른 예제 애플리케이션으로 다른 자습서를 사용하려는 경우 [샘플 애플리케이션 및 자습서](java-getstarted.md) 단원을 참조하세요.

샘플 애플리케이션을 하나 이상 배포하고 Java 애플리케이션을 로컬로 개발하고 실행할 준비가 되면 [Java 개발 환경 설정](java-development-environment.md) 단원을 참조하세요.

## Elastic Beanstalk 콘솔을 사용하여 배포
<a name="java-quickstart-console"></a>

Elastic Beanstalk 콘솔을 사용하여 샘플 애플리케이션을 시작할 수도 있습니다. 자세한 단계는 이 가이드의 *시작하기* 장의 [예제 애플리케이션 생성](GettingStarted.md#GettingStarted.CreateApp)을 참조하세요.

# QuickStart: Tomcat용 Java JSP 웹 애플리케이션을 Elastic Beanstalk에 배포
<a name="tomcat-quickstart"></a>

이 자습서에서는 JSP(JavaServer Pages)를 사용하여 간단한 Java 웹 애플리케이션을 생성하는 과정을 안내합니다. 단일 Elastic Beanstalk 환경에서 WAR 파일 형식으로 여러 웹 애플리케이션을 번들링하려면 [Tomcat 환경에 대한 여러 WAR 파일 번들링](java-tomcat-multiple-war-files.md) 단원을 참조하세요.

**프로덕션용으로 사용 불가**  
예제는 설명용으로만 제공됩니다. 예제 애플리케이션을 프로덕션 환경에서 사용하지 마세요.

**Topics**
+ [

## AWS 계정
](#tomcat-quickstart-aws-account)
+ [

## 사전 조건
](#tomcat-quickstart-prereq)
+ [

## 1단계: JSP 애플리케이션 생성
](#tomcat-quickstart-create-app)
+ [

## 2단계: EB CLI를 사용하여 Java JSP 애플리케이션 배포
](#tomcat-quickstart-deploy)
+ [

## 3단계: Elastic Beanstalk에서 애플리케이션 실행
](#tomcat-quickstart-run-eb-ap)
+ [

## 4단계: 정리
](#go-tutorial-cleanup)
+ [

## AWS 애플리케이션을 위한 리소스
](#tomcat-quickstart-eb-resources)
+ [

## 다음 단계
](#tomcat-quickstart-next-steps)
+ [

## Elastic Beanstalk 콘솔을 사용하여 배포
](#tomcat-quickstart-console)

## AWS 계정
<a name="tomcat-quickstart-aws-account"></a>

아직 AWS 고객이 아닌 경우 AWS 계정을 생성해야 합니다. 가입하면 Elastic Beanstalk 및 필요한 기타 AWS 서비스에 액세스할 수 있습니다.

이미 AWS 계정이 있는 경우 로 이동할 수 있습니다[사전 조건](#tomcat-quickstart-prereq).

### AWS 계정 생성
<a name="tomcat-quickstart-aws-account-procedure"></a>

#### 에 가입 AWS 계정
<a name="sign-up-for-aws"></a>

이 없는 경우 다음 단계를 AWS 계정완료하여 생성합니다.

**에 가입하려면 AWS 계정**

1. [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)을 엽니다.

1. 온라인 지시 사항을 따르세요.

   등록 절차 중 전화 또는 텍스트 메시지를 받고 전화 키패드로 확인 코드를 입력하는 과정이 있습니다.

   에 가입하면 AWS 계정*AWS 계정 루트 사용자*이 생성됩니다. 루트 사용자에게는 계정의 모든 AWS 서비스 및 리소스에 액세스할 권한이 있습니다. 보안 모범 사례는 사용자에게 관리 액세스 권한을 할당하고, 루트 사용자만 사용하여 [루트 사용자 액세스 권한이 필요한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)을 수행하는 것입니다.

AWS 는 가입 프로세스가 완료된 후 확인 이메일을 보냅니다. 언제든지 [https://aws.amazon.com/](https://aws.amazon.com/)으로 이동하고 **내 계정**을 선택하여 현재 계정 활동을 확인하고 계정을 관리할 수 있습니다.

#### 관리자 액세스 권한이 있는 사용자 생성
<a name="create-an-admin"></a>

에 가입한 후 일상적인 작업에 루트 사용자를 사용하지 않도록 관리 사용자를 AWS 계정보호 AWS IAM Identity Center, AWS 계정 루트 사용자활성화 및 생성합니다.

**보안 AWS 계정 루트 사용자**

1.  **루트 사용자를** 선택하고 AWS 계정 이메일 주소를 입력하여 계정 소유자[AWS Management Console](https://console.aws.amazon.com/)로에 로그인합니다. 다음 페이지에서 비밀번호를 입력합니다.

   루트 사용자를 사용하여 로그인하는 데 도움이 필요하면 *AWS Sign-In 사용 설명서*의 [루트 사용자로 로그인](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)을 참조하세요.

1. 루트 사용자의 다중 인증(MFA)을 활성화합니다.

   지침은 *IAM 사용 설명서*의 [AWS 계정 루트 사용자(콘솔)에 대한 가상 MFA 디바이스 활성화를 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html).

**관리자 액세스 권한이 있는 사용자 생성**

1. IAM Identity Center를 활성화합니다.

   지침은 *AWS IAM Identity Center 사용 설명서*의 [AWS IAM Identity Center설정](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)을 참조하세요.

1. IAM Identity Center에서 사용자에게 관리 액세스 권한을 부여합니다.

   를 자격 증명 소스 IAM Identity Center 디렉터리 로 사용하는 방법에 대한 자습서는 사용 *AWS IAM Identity Center 설명서*[의 기본값으로 사용자 액세스 구성을 IAM Identity Center 디렉터리](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) 참조하세요.

**관리 액세스 권한이 있는 사용자로 로그인**
+ IAM IDentity Center 사용자로 로그인하려면 IAM Identity Center 사용자를 생성할 때 이메일 주소로 전송된 로그인 URL을 사용합니다.

  IAM Identity Center 사용자를 사용하여 로그인하는 데 도움이 필요하면 *AWS Sign-In 사용 설명서*[의 AWS 액세스 포털에 로그인](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)을 참조하세요.

**추가 사용자에게 액세스 권한 할당**

1. IAM Identity Center에서 최소 권한 적용 모범 사례를 따르는 권한 세트를 생성합니다.

   지침은 *AWS IAM Identity Center 사용 설명서*의 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)를 참조하세요.

1. 사용자를 그룹에 할당하고, 그룹에 Single Sign-On 액세스 권한을 할당합니다.

   지침은 *AWS IAM Identity Center 사용 설명서*의 [그룹 추가](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)를 참조하세요.

## 사전 조건
<a name="tomcat-quickstart-prereq"></a>

이 설명서의 절차를 수행하기 위해서는 실행 명령줄을 입력할 쉘 또는 터미널이 필요합니다. 명령은 프롬프트 기호(\$1)와 해당하는 경우 현재 디렉터리 이름 뒤에 리스트로 표시됩니다.

```
~/eb-project$ this is a command
this is output
```

Linux 및 macOS의 경우 선호하는 쉘과 패키지 관리자를 사용할 수 있습니다. Windows의 경우 [Linux용 Windows Subsystem을 설치](https://docs.microsoft.com/en-us/windows/wsl/install-win10)하여 Ubuntu 및 Bash의 Windows 통합 버전을 가져옵니다.

### EB CLI
<a name="tomcat-quickstart-prereq.ebcli"></a>

또한 본 자습서는 Elastic Beanstalk 명령줄 인터페이스(EB CLI)를 사용합니다. EB CLI 설치 및 구성에 대한 자세한 내용은 [설정 스크립트를 사용하여 EB CLI 설치(권장)](eb-cli3.md#eb-cli3-install) 및 [EB CLI 구성](eb-cli3-configuration.md) 단원을 참조하세요.

## 1단계: JSP 애플리케이션 생성
<a name="tomcat-quickstart-create-app"></a>

프로젝트 디렉터리를 만듭니다.

```
~$ mkdir eb-tomcat
~$ cd eb-tomcat
```

그 다음 Elastic Beanstalk를 사용하여 배포할 애플리케이션을 만듭니다. ‘Hello World’ 웹 애플리케이션을 생성합니다.

`index.jsp`라는 간단한 JSP 파일을 생성합니다.

**Example `~/eb-tomcat/index.jsp`**  

```
<html>
  <body>
    <%out.println("Hello Elastic Beanstalk!");%>
  </body>
</html>
```

## 2단계: EB CLI를 사용하여 Java JSP 애플리케이션 배포
<a name="tomcat-quickstart-deploy"></a>

다음 명령을 실행하여 이 애플리케이션에 대한 Elastic Beanstalk 환경을 생성합니다.

 

**환경을 생성하고 Java JSP 애플리케이션을 배포하려면**

1. **eb init** 명령으로 EB CLI 리포지토리를 초기화합니다.

   ```
   ~/eb-tomcat$ eb init -p tomcat tomcat-tutorial --region us-east-2
   ```

   이 명령은 `tomcat-tutorial`이라는 애플리케이션을 생성하고 최신 Tomcat 플랫폼 버전을 통해 환경을 생성하도록 로컬 리포지토리를 구성합니다.

1. (선택 사항) SSH를 통해 애플리케이션을 실행하는 EC2 인스턴스에 연결할 수 있도록 **eb init**를 다시 실행하여 기본 키 페어를 구성합니다.

   ```
   ~/eb-go$ eb init
   Do you want to set up SSH for your instances?
   (y/n): y
   Select a keypair.
   1) my-keypair
   2) [ Create new KeyPair ]
   ```

   키 페어가 이미 있는 경우 이를 선택하거나, 프롬프트에 따라 키 페어를 생성합니다. 프롬프트가 보이지 않거나 나중에 설정을 변경해야 하는 경우 **eb init -i**를 실행합니다.

1. 환경을 만들고 **eb create**로 해당 환경에 애플리케이션을 배포합니다. Elastic Beanstalk는 애플리케이션에 대한 zip 파일을 자동으로 빌드하고 포트 5000에서 시작합니다.

   ```
   ~/eb-tomcat$ eb create tomcat-env
   ```

   Elastic Beanstalk에서 환경을 생성하는 데 약 5분이 걸립니다.

## 3단계: Elastic Beanstalk에서 애플리케이션 실행
<a name="tomcat-quickstart-run-eb-ap"></a>

환경 생성 프로세스가 완료되면 **eb open**으로 웹 사이트를 엽니다.

```
~/eb-tomcat$ eb open
```

축하합니다\$1 Elastic Beanstalk를 사용하여 Java JSP 애플리케이션을 배포했습니다\$1 그러면 애플리케이션에 대해 생성된 도메인 이름을 사용하여 브라우저 창이 열립니다.

## 4단계: 정리
<a name="go-tutorial-cleanup"></a>

애플리케이션 작업을 완료하면 환경을 종료할 수 있습니다. Elastic Beanstalk는 환경과 연결된 모든 AWS 리소스를 종료합니다.

EB CLI를 사용하여 Elastic Beanstalk 환경을 종료하려면 다음 명령을 실행하세요.

```
~/eb-tomcat$ eb terminate
```

## AWS 애플리케이션을 위한 리소스
<a name="tomcat-quickstart-eb-resources"></a>

단일 인스턴스 애플리케이션을 생성했습니다. 이 애플리케이션은 단일 EC2 인스턴스를 사용하는 간단한 샘플 애플리케이션 역할을 하므로 로드 밸런싱이나 오토 스케일링이 필요하지 않습니다. 단일 인스턴스 애플리케이션의 경우 Elastic Beanstalk는 다음 AWS 리소스를 생성합니다.
+ **EC2 인스턴스** - 선택한 플랫폼에서 웹 앱을 실행하도록 구성된 Amazon EC2 가상 머신입니다.

  특정 언어 버전, 프레임워크, 웹 컨테이너 또는 조합을 지원하도록 각 플랫폼마다 실행하는 소프트웨어, 구성 파일 및 스크립트 세트가 다릅니다. 대부분의 플랫폼에서는 웹 앱 앞의 웹 트래픽을 처리하고, 웹 앱으로 요청을 전달하고, 정적 자산을 제공하고, 액세스 및 오류 로그를 생성하는 역방향 프록시로 Apache 또는 nginx를 사용합니다.
+ **인스턴스 보안 그룹** - 포트 80에서 수신 트래픽을 허용하도록 구성된 Amazon EC2 보안 그룹입니다. 이 리소스를 통해 로드 밸런서의 HTTP 트래픽이 웹 앱을 실행하는 EC2 인스턴스에 도달할 수 있습니다. 기본적으로 다른 포트에서는 트래픽이 허용되지 않습니다.
+ **Amazon S3 버킷(Amazon S3 bucket)** - Elastic Beanstalk 사용 시 생성된 소스 코드, 로그 및 기타 아티팩트의 스토리지 위치입니다.
+ **Amazon CloudWatch 경보** - 환경의 인스턴스에 대한 로드를 모니터링하는 두 개의 CloudWatch 경보로, 로드가 너무 높거나 너무 낮은 경우 트리거됩니다. 경보가 트리거되면 이에 대한 응답으로 Auto Scaling 그룹이 스케일 업 또는 축소됩니다.
+ **CloudFormation 스택** - Elastic Beanstalk는 CloudFormation 를 사용하여 환경에서 리소스를 시작하고 구성 변경 사항을 전파합니다. 리소스는 [CloudFormation 콘솔](https://console.aws.amazon.com/cloudformation)에서 볼 수 있는 템플릿에서 정의됩니다.
+  **도메인 이름(Domain name)** - **subdomain*.*region*.elasticbeanstalk.com* 형식으로 웹 앱으로 라우팅되는 도메인 이름입니다.

이러한 모든 리소스는 Elastic Beanstalk에서 관리합니다. 사용자가 환경을 종료하면 Elastic Beanstalk는 환경에 있는 모든 리소스를 종료합니다.

## 다음 단계
<a name="tomcat-quickstart-next-steps"></a>

애플리케이션을 실행하는 환경이 있으면 언제든 다른 애플리케이션 또는 애플리케이션의 새 버전을 배포할 수 있습니다. EC2 인스턴스를 프로비저닝하거나 다시 시작할 필요가 없기 때문에 새 애플리케이션 버전을 매우 빠르게 배포할 수 있습니다. Elastic Beanstalk 콘솔을 사용하여 새로운 환경을 탐색할 수도 있습니다. 자세한 단계는 이 가이드의 *시작하기* 장의 [환경 탐색](GettingStarted.md#GettingStarted.Explore)을 참조하세요.

**더 많은 자습서 보기**  
다른 예제 애플리케이션으로 다른 자습서를 사용하려는 경우 [샘플 애플리케이션 및 자습서](java-getstarted.md) 단원을 참조하세요.

샘플 애플리케이션을 하나 이상 배포하고 Java 애플리케이션을 로컬 Tomcat웹 컨테이너에서 개발하고 실행할 준비가 되면 [Java 개발 환경 설정](java-development-environment.md) 단원을 참조하세요.

## Elastic Beanstalk 콘솔을 사용하여 배포
<a name="tomcat-quickstart-console"></a>

Elastic Beanstalk 콘솔을 사용하여 샘플 애플리케이션을 시작할 수도 있습니다. 자세한 단계는 이 가이드의 *시작하기* 장의 [예제 애플리케이션 생성](GettingStarted.md#GettingStarted.CreateApp)을 참조하세요.

# Java 개발 환경 설정
<a name="java-development-environment"></a>

이 주제에서는 AWS Elastic Beanstalk로 배포하기 전 로컬 컴퓨터에서 애플리케이션을 테스트하기 위해 Java 개발 환경을 설정하는 지침을 제공합니다. 또한 유용한 도구에 대한 설치 지침을 제공하는 웹 사이트도 알려줍니다.

**Topics**
+ [

## Java 개발 키트 설치
](#java-development-environment-jdk)
+ [

## 웹 컨테이너 설치
](#java-development-environment-tomcat)
+ [

## 라이브러리 다운로드
](#java-development-environment-libraries)
+ [

## Java용 AWS SDK 설치
](#java-development-environment-sdk)
+ [

## IDE 또는 텍스트 편집기 설치
](#java-development-environment-ide)

## Java 개발 키트 설치
<a name="java-development-environment-jdk"></a>

JDK(Java Development Kit)를 설치합니다. 기본 설정이 없다면 최신 버전을 가져옵니다. [oracle.com](http://www.oracle.com/technetwork/java/javase/downloads/index.html)에서 JDK를 다운로드합니다.

JDK에 포함된 Java 컴파일러를 이용해 소스 파일을 Elastic Beanstalk 웹 서버에서 실행되는 클래스 파일에 빌드할 수 있습니다.

## 웹 컨테이너 설치
<a name="java-development-environment-tomcat"></a>

다른 웹 컨테이너 또는 프레임워크가 아직 없는 경우 Amazon Linux 운영 체제에 대해 Elastic Beanstalk에서 지원하는 Tomcat 버전을 설치합니다. Elastic Beanstalk에서 지원하는 Apache Tomcat의 현재 버전 목록은 *AWS Elastic Beanstalk 플랫폼* 문서의 [Tomcat](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.java)을 참조하세요. [Apache Tomcat](http://tomcat.apache.org) 웹 사이트에서 환경에 적용되는 Tomcat 버전을 다운로드합니다.

## 라이브러리 다운로드
<a name="java-development-environment-libraries"></a>

Elastic Beanstalk 플랫폼에는 기본적으로 몇 가지 라이브러리가 포함되어 있습니다. 애플리케이션에서 사용할 라이브러리를 다운로드한 후 프로젝트 폴더에 저장하여 애플리케이션 소스 번들에 배포합니다.

로컬에 Tomcat을 설치한 경우, 설치 폴더에서 서블릿 API와 JSP(JavaServer Pages) API 라이브러리를 복사할 수 있습니다. Tomcat 플랫폼 버전에 배포할 경우 해당 파일을 사용하는 클래스를 컴파일하려면, 소스 번들에는 이러한 파일이 없어도 되나 `classpath`에는 포함되어야 합니다.

JUnit, Google Guava, Apache Commons에는 유용한 라이브러리가 여러 개 있습니다. 자세한 내용은 홈페이지를 참조하십시오.
+  [JUnit 다운로드](https://github.com/junit-team/junit/wiki/Download-and-Install) 
+  [Google Guava 다운로드](https://code.google.com/p/guava-libraries/) 
+  [Apache Commons 다운로드](http://commons.apache.org/downloads/) 

## Java용 AWS SDK 설치
<a name="java-development-environment-sdk"></a>

애플리케이션 내에서 AWS 리소스를 관리해야 하는 경우 Java용 AWS SDK를 설치합니다. 예를 들어를 사용하면 Amazon DynamoDB(DynamoDB)를 사용하여 여러 웹 서버에서 Apache Tomcat 애플리케이션의 세션 상태를 공유할 AWS SDK for Java수 있습니다. 자세한 내용은 Java용 AWS SDK 설명서의 [Amazon DynamoDB로 Tomcat 세션 상태 관리를](https://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/java-dg-tomcat-session-manager.html) 참조하세요.

자세한 내용 및 설치 지침은 [AWS SDK for Java 홈페이지](https://aws.amazon.com/sdk-for-java/)를 참조하세요.

## IDE 또는 텍스트 편집기 설치
<a name="java-development-environment-ide"></a>

IDE(통합 개발 환경)에는 애플리케이션 개발을 촉진하는 다양한 기능이 있습니다. Java 개발에 IDE를 사용하지 않았다면, Eclipse와 IntelliJ를 사용해 보고 어느 것이 적합한지 살펴보십시오.
+  [Java EE 개발자를 위한 Eclipse IDE 설치](https://www.eclipse.org/downloads/) 
+  [IntelliJ 설치](https://www.jetbrains.com/idea/) 

IDE는 소스 제어에 사용하지 않을 프로젝트 폴더에 파일을 추가할 수 있습니다. 이 파일이 소스 제어용으로 커밋되지 않게 하려면 `.gitignore` 또는 소스 제어 도구의 유사한 기능을 사용하십시오.

코딩을 시작만 하면 되고 IDE의 일부 기능만 필요하다면, [Sublime Text 설치](http://www.sublimetext.com/)를 고려해 보십시오.

**참고**  
2023년 5월 31일부터 [AWS Toolkit for Eclipse](https://docs.aws.amazon.com//toolkit-for-eclipse/v1/user-guide/welcome.html)는 종료되며 AWS에서 더 이상 지원되지 않습니다. 의 수명 주기 종료에 대한 자세한 내용은 AWS Toolkit for Eclipse GitHub 리포지토리의 [README.md](https://github.com/aws/aws-toolkit-eclipse) 파일을 AWS Toolkit for Eclipse참조하세요.

# 더 많은 Java용 Elastic Beanstalk 예제 애플리케이션 및 자습서
<a name="java-getstarted"></a>

이 섹션에서는 추가 애플리케이션 및 자습서를 제공합니다. 이 주제의 앞부분에 있는 [Java에 대한 QuickStart](java-quickstart.md) 및 [Tomcat의 Java에 대한 QuickStart](tomcat-quickstart.md) 주제에서는 EB CLI를 사용하여 샘플 Java 애플리케이션을 시작하는 방법을 안내합니다.

Java 애플리케이션을 시작하려면 첫 번째 애플리케이션 버전으로 업로드하고 환경에 배포할 애플리케이션 [소스 번들](applications-sourcebundle.md) AWS Elastic Beanstalk만 있으면 됩니다. 환경을 생성하면 Elastic Beanstalk는 확장 가능한 웹 애플리케이션을 실행하는 데 필요한 모든 AWS 리소스를 할당합니다.

## 샘플 Java 애플리케이션을 사용해 환경 시작
<a name="java-getstarted-samples"></a>

Elastic Beanstalk는 각 플랫폼에 대한 단일 페이지 샘플 애플리케이션과 Amazon RDS 및 언어 또는 플랫폼별 기능 및 APIs와 같은 추가 AWS 리소스 사용을 보여주는 보다 복잡한 예제를 제공합니다.

단일 페이지 샘플은 고유한 소스 코드를 제공하지 않고 환경을 생성할 때 얻는 것과 동일한 코드입니다. 더 복잡한 예제는 GitHub에 호스팅되며 Elastic Beanstalk 환경에 배포하기 전에 컴파일하거나 빌드해야 합니다.

 


**샘플**  

|  이름  |  지원되는 버전  |  환경 유형  |  소스  |  설명  | 
| --- | --- | --- | --- | --- | 
|  Tomcat(단일 페이지)  |  모든 *Corretto 사용 Tomcat* 플랫폼 브랜치  |  웹 서버 작업자  |   [tomcat.zip](samples/tomcat.zip)   |  웹 사이트 루트에 표시되도록 구성된 단일 페이지(`index.jsp`)가 있는 Tomcat 웹 애플리케이션입니다. [작업자 환경](using-features-managing-env-tiers.md)의 경우 이 샘플에는 1분마다 `cron.yaml`를 호출하는 예약 작업을 구성하는 `scheduled.jsp` 파일이 들어 있습니다. `scheduled.jsp`가 호출되면 `/tmp/sample-app.log`의 로그 파일에 작성합니다. 마지막으로, 환경 로그 요청 시 `.ebextensions`에서 Elastic Beanstalk가 읽는 위치로 로그를 복사하는 구성 파일은 `/tmp/`에 들어 있습니다. 이 샘플을 실행하는 환경에서 [X-Ray 통합을 활성화](environment-configuration-debugging.md)하면 애플리케이션에서 X-Ray에 관한 추가 콘텐츠를 보여 주고, X-Ray 콘솔에서 볼 수 있는 디버그 정보를 생성하기 위한 옵션을 제공합니다.  | 
|  Corretto(단일 페이지)  |  Corretto 11 Corretto 8  |  웹 서버  |  [corretto.zip](samples/corretto.zip)  |  `Buildfile` 및 `Procfile` 구성 파일이 있는 Corretto 애플리케이션입니다. 이 샘플을 실행하는 환경에서 [X-Ray 통합을 활성화](environment-configuration-debugging.md)하면 애플리케이션에서 X-Ray에 관한 추가 콘텐츠를 보여 주고, X-Ray 콘솔에서 볼 수 있는 디버그 정보를 생성하기 위한 옵션을 제공합니다.  | 
|  Scorekeep  | Java 8 | 웹 서버 | [GitHub.com에서 리포지토리 복제](https://github.com/awslabs/eb-java-scorekeep) |  *Scorekeep*은 Spring 프레임워크를 사용하여 사용자, 세션 및 게임을 만들고 관리하기 위한 인터페이스를 제공하는 RESTful 웹 API입니다. API는 HTTP를 통해 API를 사용하는 Angular 1.5 웹 앱이 있는 번들입니다. 애플리케이션은 Java SE 플랫폼의 기능을 사용하여 종속 항목을 다운로드하고 인스턴스 상에서 빌드하며, 소스 번들의 크기를 최소화합니다. 이 애플리케이션에는 프록시를 통해 포트 80에서 프런트엔드 웹 앱을 정적으로 처리하도록 기본 구성을 재정의하고, `/api` 아래의 경로에 대한 요청을 `localhost:5000`에서 실행되는 API로 라우팅하는 nginx 구성 파일도 포함되어 있습니다. Scorekeep에는 `xray`에서 사용할 Java 애플리케이션을 계측하는 방법을 보여 주는 AWS X-Ray브랜치도 포함되어 있습니다. 서블릿 필터를 사용한 수신 HTTP 요청 계측, 자동 및 수동 AWS SDK 클라이언트 계측, 레코더 구성, 발신 HTTP 요청 및 SQL 클라이언트 계측을 보여줍니다. readme에서 지침을 참조하거나 [AWS X-Ray 시작 자습서](https://docs.aws.amazon.com/xray/latest/devguide/xray-gettingstarted.html)를 사용하여 X-Ray와 함께 애플리케이션을 사용해 보세요.  | 
|  Does it Have Snakes?  | Tomcat 8과 Java 8 | 웹 서버 | [GitHub.com에서 리포지토리 복제](https://github.com/awslabs/eb-tomcat-snakes) |  *Does it Have Snakes?*는 Elastic Beanstalk 구성 파일, Amazon RDS, JDBC, PostgreSQL, Servlet, JSP, Simple Tag Support, Tag File, Log4J, Bootstrap, Jackson의 사용을 보여주는 Tomcat 웹 애플리케이션입니다. 이 프로젝트의 소스 코드에는 서블릿과 모델을 클래스 파일로 컴파일하고 필요한 파일을 Elastic Beanstalk 환경에 배포할 수 있는 Web Archive로 패키징하는 최소의 빌드 스크립트가 포함되어 있습니다. 전체 지침은 프로젝트 리포지토리의 추가 정보 파일을 참조하십시오.  | 
| Locust Load Generator | Java 8 | 웹 서버 | [GitHub.com에서 리포지토리 복제](https://github.com/awslabs/eb-locustio-sample) |  다른 Elastic Beanstalk 환경에서 실행 중인 다른 웹 애플리케이션에 대한 부하 테스트를 할 때 사용할 수 있는 웹 애플리케이션입니다. `Buildfile` 및 `Procfile` 파일, DynamoDB, 오픈 소스 부하 테스트 도구인 [Locust](http://locust.io/)의 사용을 보여 줍니다.  | 

샘플 애플리케이션을 다운로드하고 다음 단계에 따라 이를 Elastic Beanstalk에 배포합니다.

**애플리케이션을 사용하여 환경을 시작하는 방법(콘솔)**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **애플리케이션**을 선택합니다. 목록에서 기존 애플리케이션을 선택합니다. [ 애플리케이션 관리](applications.md)의 지침에 따라 한 애플리케이션을 생성하도록 선택할 수도 있습니다.

1. 애플리케이션 개요 페이지에서 **새 환경 생성**을 선택합니다.

   그러면 **환경 생성(Create environment)** 마법사가 시작됩니다. 마법사는 새로운 환경을 생성하기 위한 여러 단계 집합을 제공합니다.

1. **환경 티어**의 경우, **웹 서버 환경** 또는 **작업자 환경** [환경 티어](concepts.md#concepts-tier)를 선택합니다. 생성한 후에는 환경의 티어를 변경할 수 없습니다.
**참고**  
[Windows Server 플랫폼의 .NET](create_deploy_NET.md)에서는 작업자 환경 티어를 지원하지 않습니다.

   **애플리케이션 정보** 필드는 이전에 선택한 애플리케이션을 기반으로, 기본적으로 설정됩니다.

   **환경 정보** 그룹화에서 애플리케이션 이름을 기준으로 **환경 이름**이 기본적으로 설정됩니다. 다른 환경 이름을 원하는 경우 필드에 다른 값을 입력할 수 있습니다. 선택적으로 **도메인** 이름을 입력할 수 있습니다. 그렇지 않으면 Elastic Beanstalk에서 값을 자동으로 생성합니다. 또한 선택적으로 **환경 설명**을 입력할 수 있습니다.

1. **플랫폼**에서 애플리케이션에 사용되는 언어와 일치하는 플랫폼 및 플랫폼 브랜치를 선택합니다.
**참고**  
Elastic Beanstalk는 나열된 대부분 플랫폼의 여러 [버전](concepts.platforms.md)을 지원합니다. 콘솔은 기본적으로 선택된 플랫폼 및 플랫폼 브랜치의 권장 버전을 선택합니다. 애플리케이션에 다른 버전이 필요한 경우에는 여기서 해당 버전을 선택할 수 있습니다. 지원되는 플랫폼 버전에 대한 자세한 내용은 [Elastic Beanstalk 지원되는 플랫폼](concepts.platforms.md)을 참조하십시오.

1. **애플리케이션 코드**의 경우 계속 진행할 수 있는 몇 가지 옵션이 있습니다.
   + 소스 코드를 제공하지 않고 기본 샘플 애플리케이션을 시작하려면 **샘플 애플리케이션**을 선택합니다. 이 작업은 이전에 선택한 플랫폼에 대해 Elastic Beanstalk에서 제공하는 단일 페이지 애플리케이션을 선택합니다.
   + 이 가이드 또는 나만의 소스 코드에서 샘플 애플리케이션을 다운로드한 경우 다음 단계를 수행합니다.

     1. **코드 업로드**를 선택합니다.

     1. 그런 다음 **로컬 파일**을 선택한 다음, **애플리케이션 업로드**에서 **파일 선택**을 선택합니다.

     1. 클라이언트 기기의 운영 체제에서 다운로드한 로컬 파일을 선택할 수 있는 인터페이스를 제공합니다. 소스 번들 파일을 선택하고 계속합니다.

1. **프리셋**에 대한 선택은 환경의 용도에 따라 달라집니다.
   + Elastic Beanstalk 또는 개발 환경에 대해 알아보기 위해 샘플 환경을 생성하는 경우 **단일 인스턴스(프리 티어 사용 가능)**를 선택합니다.
   + 로드 밸런싱에 대해 자세히 알아보려면 프로덕션 환경 또는 환경을 생성하는 경우 **고가용성** 옵션 중 하나를 선택합니다.

1. **다음**을 선택합니다.

**서비스 액세스를 구성하려면**  
다음으로 두 가지 역할이 필요합니다. *서비스 역할*을 통해 Elastic Beanstalk는 EC2 인스턴스를 모니터링하고 환경의 플랫폼을 업그레이드할 수 있습니다. *EC2 인스턴스 프로파일* 역할은 로그 작성 및 다른 서비스와의 상호 작용과 같은 작업을 허용합니다.

**서비스 역할을 생성하거나 선택하려면**

1. 이전에 **서비스 역할**을 생성했고 기존 역할을 선택하려면 **서비스 역할** 드롭다운에서 값을 선택하고 이 단계의 나머지 부분을 건너뛰어 서비스 역할을 생성합니다.

1. **서비스 역할**에 나열된 값이 없거나 새 값을 생성하려면 다음 단계를 계속 진행합니다.

1. **서비스 역할**에서 **역할 생성**을 선택합니다.

1. **신뢰할 수 있는 엔터티 유형**에서 **AWS 서비스**를 선택합니다.

1. **사용 사례**에서 **Elastic Beanstalk – 환경**을 선택합니다.

1. **다음**을 선택합니다.

1. **권한 정책**에 다음이 포함되어 있는지 확인한 후 **다음**을 선택합니다.
   + `AWSElasticBeanstalkEnhancedHealth`
   + `AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy`

1. **역할 생성**을 선택합니다.

1. **서비스 액세스 구성** 탭으로 돌아가 목록을 새로 고친 다음 새로 생성된 서비스 역할을 선택합니다.

**EC2 인스턴스 프로파일을 생성하거나 선택하는 방법**

1. 이전에 **EC2 인스턴스 프로파일**을 생성했고 기존 프로파일을 선택하려면 **EC2 인스턴스 프로파일** 드롭다운에서 값을 선택하고 나머지 단계를 건너뛰어 EC2 인스턴스 프로파일을 생성합니다.

1. **EC2 인스턴스 프로파일**에 값이 표시되지 않거나 새로 생성하려는 경우, 다음 단계를 계속 진행하세요.

1. **역할 생성**을 선택합니다.

1. **신뢰할 수 있는 엔터티 유형**에서 **AWS 서비스**를 선택합니다.

1. **사용 사례**에서 **Elastic Beanstalk – 컴퓨팅**을 선택합니다.

1. **다음**을 선택합니다.

1. **권한 정책**에 다음이 포함되어 있는지 확인한 후 **다음**을 선택합니다.
   + `AWSElasticBeanstalkWebTier`
   + `AWSElasticBeanstalkWorkerTier`
   + `AWSElasticBeanstalkMulticontainerDocker`

1. **역할 생성**을 선택합니다.

1. **서비스 액세스 구성** 탭으로 돌아가 목록을 새로 고친 다음 새로 생성된 EC2 인스턴스 프로파일을 선택합니다.

**애플리케이션 구성 및 생성을 완료하는 방법**

1. (선택 사항) 이전에 EC2 키 페어를 생성한 경우 **EC2 키 페어** 필드 드롭다운에서 선택할 수 있습니다. 이를 사용하여 Elastic Beanstalk가 애플리케이션을 위해 프로비저닝하는 Amazon EC2 인스턴스에 안전하게 로그인할 수 있습니다. 이 단계를 건너뛰면 환경이 생성된 후 항상 EC2 키 페어를 생성하고 할당할 수 있습니다. 자세한 내용은 [EC2 키 페어](using-features.managing.security.md#using-features.managing.security.keypair) 단원을 참조하십시오.

1. **서비스 액세스 구성** 페이지에서 **검토로 건너뛰기**를 선택합니다.

1. **검토(Review)** 페이지에는 모든 선택 항목에 대한 개요가 표시됩니다.

   환경을 추가로 사용자 지정하려면 구성하려는 항목이 포함된 단계 옆에 있는 **편집(Edit)**을 선택합니다. 다음 옵션은 환경 생성 중에만 설정할 수 있습니다.
   + Environment name
   + 도메인 이름
   + 플랫폼 버전
   + 처리자
   + 로드 밸런서 유형
   + 티어

   다음 설정은 환경 생성 후에 변경할 수 있지만, 새 인스턴스 또는 다른 리소스를 프로비저닝해야 하며 적용하는 데 시간이 오래 걸릴 수 있습니다.
   + 인스턴스 유형, 루트 볼륨, 키 페어 및 AWS Identity and Access Management (IAM) 역할
   + 내부 Amazon RDS 데이터베이스
   + VPC

   사용 가능한 모든 설정에 대한 세부 정보는 [새 환경 생성 마법사](environments-create-wizard.md)을 참조하십시오.

1. 페이지 하단의 **제출(Submit)**을 선택하여 새로운 환경을 만드는 작업을 초기화하세요.

## 다음 단계
<a name="java-getstarted-next"></a>

애플리케이션을 실행하는 환경이 있으면 언제든 완전히 다른 애플리케이션 또는 애플리케이션의 [새 버전을 배포](using-features.deploy-existing-version.md)할 수 있습니다. EC2 인스턴스를 프로비저닝하거나 다시 시작할 필요가 없기 때문에 새 애플리케이션 버전을 매우 빠르게 배포할 수 있습니다.

샘플 애플리케이션을 한두 개 배포하고 Java 애플리케이션을 로컬에서 개발 및 실행할 준비가 되면 [다음 섹션](java-development-environment.md)을 참조하여 필요한 모든 도구 및 라이브러리로 Java 개발 환경을 설정하십시오.

# Elastic Beanstalk Tomcat 플랫폼 사용
<a name="java-tomcat-platform"></a>

이 주제에서는 Elastic Beanstalk Tomcat 플랫폼에서 실행되는 Java 애플리케이션을 구성, 빌드 및 실행하는 방법을 설명합니다.

 AWS Elastic Beanstalk Tomcat 플랫폼은 Tomcat 웹 컨테이너에서 실행할 수 있는 Java 웹 애플리케이션용 [플랫폼 버전](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.java) 세트입니다. Tomcat은 nginx 프록시 서버 뒤에서 실행됩니다. 각 플랫폼 브랜치는 Tomcat의 메이저 버전 하나에 해당합니다.

[실행 환경 구성을 수정](environment-configuration-methods-after.md)하기 위해 Elastic Beanstalk 콘솔의 구성 옵션을 사용할 수 있습니다. [저장된 구성](environment-configuration-savedconfig.md)을 사용해 설정을 저장하면 환경 종료 시 구성이 훼손되지 않도록 할 수 있으며, 추후 기타 환경에서도 적용할 수 있습니다.

소스 코드에 설정을 저장하려면 [구성 파일](ebextensions.md)을 포함시킬 수 있습니다. 구성 파일 설정은 환경을 생성하거나 애플리케이션을 배포할 때마다 적용됩니다. 구성 파일을 사용해 패키지를 설치하고, 스크립트를 실행하고, 배포 중에 다른 인스턴스 사용자 지정 작업을 수행할 수도 있습니다.

Elastic Beanstalk Tomcat 플랫폼에는 요청을 애플리케이션으로 전달하는 역방향 프록시가 포함되어 있습니다. 애플리케이션에 대한 로드를 줄이기 위해 소스 코드의 폴더에서 정적 자산을 제공하도록 프록시 서버를 구성하는 [구성 옵션](#java-tomcat-namespaces)을 사용할 수 있습니다. 고급 시나리오의 경우 소스 번들에 [고유한 `.conf` 파일을 포함시켜](java-tomcat-proxy.md) Elastic Beanstalk의 프록시 구성을 확장하거나 완전히 덮어쓸 수 있습니다.

**참고**  
Elastic Beanstalk는 [nginx](https://www.nginx.com/)(기본값)와 [Apache HTTP 서버](https://httpd.apache.org/)를 Tomcat 플랫폼의 프록시 서버로 지원합니다. Elastic Beanstalk Tomcat 환경에서 AMI 플랫폼 브랜치(이전 Amazon Linux 2)를 사용하는 경우 [Apache HTTP 서버 버전 2.2](https://httpd.apache.org/docs/2.2/)를 사용할 수도 있습니다. Apache(최신 버전)는 이러한 이전 플랫폼 브랜치의 기본값입니다.  
 [2022년 7월 18일](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html), Elastic Beanstalk는 Amazon Linux AMI(AL1)에 기반한 모든 플랫폼 브랜치의 상태를 **사용 중지**로 설정했습니다. 완전 지원이 가능한 현재 Amazon Linux 2023 플랫폼 브랜치로 마이그레이션하는 방법에 대한 자세한 내용은 [Elastic Beanstalk Linux 애플리케이션을 Amazon Linux 2023 또는 Amazon Linux 2로 마이그레이션](using-features.migration-al.md)을(를) 참조하세요.

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

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

Elastic Beanstalk 콘솔에 적용된 설정은 구성 파일의 동일한 설정(있는 경우)을 재정의합니다. 이렇게 함으로써 구성 파일은 기본 설정을 갖는 동시에 콘솔에서 환경 특정 설정으로 설정을 덮어 쓸 수 있습니다. 우선 적용 및 설정을 변경하는 다른 방법에 대한 자세한 내용은 [구성 옵션](command-options.md) 단원을 참조하십시오.

Elastic Beanstalk Linux 기반 플랫폼을 확장할 수 있는 다양한 방법에 대한 자세한 내용은 [Elastic Beanstalk Linux 플랫폼 확장](platforms-linux-extend.md) 단원을 참조하세요.

**Topics**
+ [

## Tomcat 환경 구성
](#java-tomcat-options)
+ [

## Tomcat 구성 네임스페이스
](#java-tomcat-namespaces)
+ [

# Tomcat 환경에 대한 여러 WAR 파일 번들링
](java-tomcat-multiple-war-files.md)
+ [

# 프로젝트 폴더 구성
](java-tomcat-platform-directorystructure.md)
+ [

# 프록시 서버 구성
](java-tomcat-proxy.md)

## Tomcat 환경 구성
<a name="java-tomcat-options"></a>

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

Elastic Beanstalk 콘솔을 사용하여 Amazon S3에 대한 로그 교체를 활성화하고, 애플리케이션이 환경에서 읽을 수 있도록 변수를 구성할 수 있습니다.

**Elastic Beanstalk 콘솔에서 Tomcat 환경을 구성하려면**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **환경**을 선택한 다음 목록에서 환경의 이름을 선택합니다.

1. 탐색 창에서 **구성**을 선택합니다.

1. **업데이트, 모니터링 및 로깅** 구성 범주에서 **편집**을 선택합니다.

### 컨테이너 옵션
<a name="java-tomcat-options-container"></a>

다음과 같은 플랫폼별 옵션을 지정할 수 있습니다.
+ **프록시 서버** – 환경 인스턴스에서 사용할 프록시 서버입니다. 기본적으로 nginx를 사용합니다.

### JVM 컨테이너 옵션
<a name="java-tomcat-options-jvm"></a>

Java 가상 머신(JVM)의 힙 크기는 *[가비지 수집](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/introduction.html)*이 수행되기 전에 애플리케이션이 메모리 내에서 생성할 수 있는 객체 수를 결정합니다. **초기 JVM 힙 크기**(`-Xms option`) 및 **최대 JVM 힙 크기**(`-Xmx` 옵션)를 수정할 수 있습니다. 초기 힙 크기가 클수록 가비지 수집이 수행되기 전에 생성되는 객체 수가 늘어나지만 가비지 수집기가 힙을 압축하는 데 더 오랜 시간이 걸립니다. 최대 힙 크기는 로드가 많이 발생하는 작업 중 힙을 확장하는 경우 JVM에서 할당할 수 있는 최대 메모리 양을 지정합니다.

**참고**  
사용 가능한 메모리는 Amazon EC2 인스턴스 유형에 따라 달라집니다. Elastic Beanstalk 환경에서 사용할 수 있는 EC2 인스턴스 유형에 대한 자세한 내용은 *Linux 인스턴스용 Amazon Elastic Compute Cloud 사용 설명서*의 [인스턴스 유형](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) 단원을 참조하십시오.

*영구 생성*은 클래스 정의 및 연결된 메타데이터를 저장하는 JVM 힙의 섹션입니다. 영구 생성 크기를 수정하려면 **최대 JVM PermGen 크기**(`-XX:MaxPermSize`) 옵션에 새 크기를 입력합니다. 이 설정은 Java 7 및 그 이전 버전에만 적용됩니다. 이 옵션은 JDK 8에서는 사용되지 않으며 **MaxMetaspace 크기**(`-XX:MaxMetaspaceSize`) 옵션으로 대체되었습니다.

**중요**  
JDK 17은 Java `-XX:MaxPermSize` 옵션을 지원하지 않습니다. Corretto 17이 설치된 Elastic Beanstalk 플랫폼 브랜치 기반 환경에서 이 옵션을 사용하면 오류가 발생합니다. Elastic Beanstalk는 [2023년 7월 13일](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2023-07-13-al2023.html)에 Corretto 17과 함께 Tomcat을 실행하는 첫 번째 플랫폼 브랜치를 공개했습니다.  
자세한 정보는 다음 리소스를 참조하세요.  
Oracle Java 설명서 웹 사이트: [제거된 Java 옵션](https://docs.oracle.com/en/java/javase/17/docs/specs/man/java.html#removed-java-options) 
Oracle Java 설명서 웹 사이트: [기타 고려 사항](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.html)의 *클래스 메타데이터* 섹션

Elastic Beanstalk 플랫폼 및 그 구성 요소에 대한 자세한 내용은 *AWS Elastic Beanstalk  플랫폼 가이드*의 [지원되는 플랫폼](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html)을 참조하십시오.

### 로그 옵션
<a name="java-tomcat-options-logs"></a>

**로그 옵션** 섹션에는 다음 두 가지 설정이 있습니다.
+ **인스턴스 프로파일** – 애플리케이션과 연결된 Amazon S3 버킷에 액세스할 권한이 있는 인스턴스 프로파일을 지정합니다.
+ **Amazon S3에 대한 로그 파일 교체 활성화(Enable log file rotation to Amazon S3)** – 애플리케이션과 연결된 Amazon S3 버킷에 애플리케이션의 Amazon EC2 인스턴스에 대한 로그 파일을 복사하는지 여부를 지정합니다.

### 정적 파일
<a name="java-tomcat-options-staticfiles"></a>

성능을 증진하려면 **정적 파일(Static files)** 섹션에서 프록시 서버를 구성하여 웹 애플리케이션 내부 디렉터리 집합으로 정적 파일(예: HTML 또는 이미지)을 제공할 수 있습니다. 각 디렉터리의 디렉터리 매핑 가상 경로를 설정합니다. 지정된 경로에서 프록시 서버가 파일 요청을 수신받으면 요청을 애플리케이션으로 라우팅하지 않고 파일을 직접 제공합니다.

구성 파일 또는 Elastic Beanstalk 콘솔을 사용하여 정적 파일을 구성하는 방법에 대한 자세한 내용은 [정적 파일 제공](environment-cfg-staticfiles.md) 단원을 참조하세요.

### 환경 속성
<a name="java-tomcat-options-properties"></a>

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

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

**참고**  
RDS DB 인스턴스를 환경에 연결하는 경우 Elastic Beanstalk에서 제공하는 Amazon Relational Database Service(Amazon RDS) 환경 속성에서 JDBC 연결 문자열을 동적으로 구성합니다. JDBC\$1CONNECTION\$1STRING은 Elastic Beanstalk를 사용하여 프로비저닝되지 않은 데이터베이스 인스턴스에만 사용합니다.  
Java 애플리케이션에서 Amazon RDS 사용에 대한 자세한 내용은 [Java Elastic Beanstalk 환경에 Amazon RDS DB 인스턴스 추가](java-rds.md) 단원을 참조하십시오.

[2025년 3월 26일](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html) 이전에 출시된 Tomcat 플랫폼 버전에서는 환경 변수를 `System.getProperty()`를 사용해 액세스할 수 있습니다. 예를 들어 다음 코드로 변수에서 `API_ENDPOINT`이라는 속성을 읽을 수 있습니다.

```
String endpoint = System.getProperty("API_ENDPOINT");
```

[2025년 3월 26일](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html) 이후에 릴리스된 Tomcat 플랫폼 버전에서도 `System.getenv`를 사용해 평문 환경 변수에 액세스할 수 있습니다. `System.getProperty` 항목을 계속 사용하여 일반 텍스트 환경 변수에 액세스할 수 있습니다. 그러나 [보안 암호로 저장된 환경 변수](AWSHowTo.secrets.env-vars.md)는 `System.getenv` 항목을 통해서만 사용할 수 있습니다. 예를 들어 다음 코드로 `API_KEY`이라는 환경 변수를 읽을 수 있습니다.

```
String apiKey = System.getenv("API_KEY");
```

**중요**  
[2025년 3월 26일](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html) 또는 그 이후에 릴리스된 Tomcat 플랫폼 버전의 환경 변수에 대한 `System.getenv()` 액세스 권한이 추가되면 Java 시스템 속성보다 환경 변수 우선 순위를 부여하는 애플리케이션에서 또는 `System.getProperty()`에서 `System.getenv()` 항목으로 명시적으로 전환할 때 예기치 않은 동작이 발생할 수 있습니다.  
명령줄을 통해 전달되는 시스템 속성은 특수 문자를 처리하기 위해 쉘 이스케이프가 필요하지만, 환경 변수는 그렇지 않기 때문에 환경 변수 대신 Java 시스템 속성을 사용할 경우 값이 다르게 처리될 수 있습니다.  
애플리케이션에 영향이 있는 경우 다음을 고려하세요.  
`System.getenv()`를 사용할 때 환경 속성 값에서 이스케이프 문자 제거
애플리케이션이 `System.getProperty()`를 명시적으로 사용하도록 구성
애플리케이션을 업그레이드할 때 일관된 동작을 보장하려면 철저히 테스트하세요.

자세한 정보는 [환경 변수 및 기타 소프트웨어 설정](environments-cfg-softwaresettings.md)을 참조하세요.

## Tomcat 구성 네임스페이스
<a name="java-tomcat-namespaces"></a>

[구성 파일](ebextensions.md)을 사용하여 구성 옵션을 설정하고 배포 중 다른 인스턴스 구성 작업을 수행할 수 있습니다. 구성 옵션은 [플랫폼별](command-options-specific.md)로 다르거나 Elastic Beanstalk 서비스의 [모든 플랫폼](command-options-general.md)에 전체적으로 적용될 수 있습니다. 구성 옵션은 *네임스페이스*로 구성됩니다.

Tomcat 플랫폼에서는 [모든 Elastic Beanstalk 환경에 대해 지원되는 옵션](command-options-general.md) 이외에도 다음 네임스페이스의 옵션을 지원합니다.
+ `aws:elasticbeanstalk:container:tomcat:jvmoptions` – JVM 설정을 수정합니다. 이 네임스페이스의 옵션은 다음과 같이 관리 콘솔의 옵션에 해당합니다.
  + `Xms` – **VM 명령줄 옵션**
  + `JVM Options` – **VM 명령줄 옵션**
+ `aws:elasticbeanstalk:environment:proxy` – 환경의 프록시 서버를 선택합니다.

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

**Example .ebextensions/tomcat-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:container:tomcat:jvmoptions:
    Xms: 512m
    JVM Options: '-Xmn128m'
  aws:elasticbeanstalk:application:environment:
    API_ENDPOINT: mywebapi.zkpexsjtmd.us-west-2.elasticbeanstalk.com
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
```

Elastic Beanstalk는 환경을 사용자 지정할 수 있는 다양한 구성 옵션을 제공합니다. 구성 파일 외에 콘솔, 저장된 구성, EB CLI 또는 AWS CLI를 통해 구성 옵션을 설정할 수도 있습니다. 자세한 정보는 [구성 옵션](command-options.md)을 참조하세요.

## Amazon Linux AMI(이전 Amazon Linux 2) Tomcat 플랫폼
<a name="tomcat.alami"></a>

Elastic Beanstalk Tomcat 환경에서 Amazon Linux AMI 플랫폼 버전(이전 Amazon Linux 2)을 사용하는 경우 여기의 추가 정보를 읽어 보십시오.

**참고**  
이 주제의 정보는 Amazon Linux AMI(AL1) 기반 플랫폼 브랜치에만 적용됩니다. AL2023/AL2 플랫폼 브랜치는 이전 Amazon Linux AMI(AL1) 플랫폼 버전과 호환되지 않으며 *다른 구성 설정이 필요*합니다.
 [2022년 7월 18일](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html), Elastic Beanstalk는 Amazon Linux AMI(AL1)에 기반한 모든 플랫폼 브랜치의 상태를 **사용 중지**로 설정했습니다. 완전 지원이 가능한 현재 Amazon Linux 2023 플랫폼 브랜치로 마이그레이션하는 방법에 대한 자세한 내용은 [Elastic Beanstalk Linux 애플리케이션을 Amazon Linux 2023 또는 Amazon Linux 2로 마이그레이션](using-features.migration-al.md)을(를) 참조하세요.

### Tomcat 구성 네임스페이스 — Amazon Linux AMI(AL1)
<a name="tomcat.alami.namespaces"></a>

Tomcat Amazon Linux AMI 플랫폼은 다음 네임스페이스에서 추가 옵션을 지원합니다.
+ `aws:elasticbeanstalk:container:tomcat:jvmoptions` – 이 페이지의 앞부분에서 언급한 이 네임스페이스에 대한 옵션 외에도 이전 Amazon Linux AMI 플랫폼 버전은 다음을 지원합니다.
  + `XX:MaxPermSize` – **최대 JVM 영구 생성 크기**
+ `aws:elasticbeanstalk:environment:proxy` – 프록시 서버를 선택하는 것 외에도 응답 압축을 구성합니다.

다음 예제 구성 파일에서는 프록시 네임스페이스 구성 옵션의 사용을 보여줍니다.

**Example .ebextensions/tomcat-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    GzipCompression: 'true'
    ProxyServer: nginx
```

### Elastic Beanstalk 구성 파일 포함 — Amazon Linux AMI(AL1)
<a name="java-tomcat-ebextensions"></a>

`.ebextensions` 구성 파일을 배포하려면 배포하려는 파일을 애플리케이션 소스에 포함시킵니다. 단일 애플리케이션의 경우 다음 명령을 실행하여 `.ebextensions`를 압축된 WAR 파일에 추가합니다.

**Example**  

```
zip -ur your_application.war .ebextensions
```

여러 WAR 파일이 필요한 애플리케이션에 대한 추가 지침은 [Tomcat 환경에 대한 여러 WAR 파일 번들링](java-tomcat-multiple-war-files.md)을 참조하십시오.

# Tomcat 환경에 대한 여러 WAR 파일 번들링
<a name="java-tomcat-multiple-war-files"></a>

웹 앱이 웹 애플리케이션 구성 요소 여러 개로 구성된 경우, 각 구성 요소에 대해 별도 환경을 실행하는 대신 단일 환경에서 구성 요소를 실행하여, 배포를 간소화하고 운영 비용을 절감할 수 있습니다. 이 전략은 리소스를 많이 필요로 하지 않는 개발 및 테스트 환경용 저용량 애플리케이션에 효과적입니다.

환경에 웹 애플리케이션을 여러 개 배포하려면 각 구성 요소의 웹 애플리케이션 아카이브(WAR) 파일을 단일 [소스 번들](applications-sourcebundle.md)로 통합하십시오.

WAR 파일이 여러 개 있는 애플리케이션 소스 번들을 만들려면 다음 구조를 사용하여 WAR 파일을 구성하십시오.

```
MyApplication.zip
├── .ebextensions
├── .platform
├── foo.war
├── bar.war
└── ROOT.war
```

여러 WAR 파일이 포함된 소스 번들을 AWS Elastic Beanstalk 환경에 배포하면 루트 도메인 이름의 다른 경로에서 각 애플리케이션에 액세스할 수 있습니다. 이전 예에는 세 가지 애플리케이션(`foo`, `bar` 및`ROOT`)이 있습니다. `ROOT.war`는 루트 도메인에서 해당 애플리케이션을 실행하도록 Elastic Beanstalk에게 알려주는 특별 파일 이름이며 세 가지 도메인은 `http://MyApplication.elasticbeanstalk.com/foo`, `http://MyApplication.elasticbeanstalk.com/bar` 및 `http://MyApplication.elasticbeanstalk.com`에서 확인할 수 있습니다.

소스 번들에는 WAR 파일, `.ebextensions` 폴더(선택 사항) 및 `.platform` 폴더(선택 사항)가 포함될 수 있습니다. 이러한 선택적 구성 폴더에 대한 자세한 내용은 [Elastic Beanstalk Linux 플랫폼 확장](platforms-linux-extend.md) 단원을 참조하십시오.

**환경을 시작하려면(콘솔)**

1. 미리 구성된 다음 링크를 사용하여 Elastic Beanstalk 콘솔을 엽니다. [console.aws.amazon.com/elasticbeanstalk/home\$1/newApplication?applicationName=tutorials&environmentType=LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. **플랫폼**에서 애플리케이션에 사용되는 언어와 일치하는 플랫폼 및 플랫폼 브랜치를 선택하거나 컨테이너 기반 애플리케이션을 위한 Docker 플랫폼을 선택합니다.

1. [**애플리케이션 코드**]에서 [**코드 업로드**]를 선택합니다.

1. [**로컬 파일**], [**파일 선택**]을 차례로 선택한 다음 소스 번들을 엽니다.

1. **검토 및 시작**을 선택합니다.

1. 사용 가능한 설정을 검토한 후 **앱 생성**을 선택합니다.

소스 번들 생성에 대한 자세한 내용은 [Elastic Beanstalk 애플리케이션 소스 번들 생성](applications-sourcebundle.md) 단원을 참조하십시오.

# 프로젝트 폴더 구성
<a name="java-tomcat-platform-directorystructure"></a>

Tomcat 서버에 배포할 경우 컴파일된 Java Platform Enterprise Edition(*Java EE*) 웹 애플리케이션 아카이브(WAR 파일)를 특정 [지침](https://docs.oracle.com/javaee/7/tutorial/packaging003.htm)에 따라 구성해야 합니다. 프로젝트 디렉터리가 동일한 표준을 충족할 필요는 없지만, 컴파일과 패키징을 단순화하려면 동일한 방식으로 구성하는 것이 좋습니다. 프로젝트 폴더를 WAR 파일 콘텐츠와 같이 구성하면 파일 간의 관련성과 웹 서버에서의 파일 동작 방식을 이해하는 데도 도움이 됩니다.

다음 권장 계층 구조에서 웹 애플리케이션의 소스 코드는 빌드 스크립트 및 이것이 생성하는 WAR 파일과 격리되도록 `src` 디렉터리에 배치되어 있습니다.

```
~/workspace/my-app/
|-- build.sh            - Build script that compiles classes and creates a WAR
|-- README.MD           - Readme file with information about your project, notes
|-- ROOT.war            - Source bundle artifact created by build.sh
`-- src                 - Source code folder
    |-- WEB-INF         - Folder for private supporting files
    |   |-- classes     - Compiled classes
    |   |-- lib         - JAR libraries
    |   |-- tags        - Tag files
    |   |-- tlds        - Tag Library Descriptor files
    |   `-- web.xml     - Deployment Descriptor
    |-- com             - Uncompiled classes
    |-- css             - Style sheets
    |-- images          - Image files
    |-- js              - JavaScript files
    `-- default.jsp     - JSP (JavaServer Pages) webpage
```

`src` 폴더 콘텐츠는 `com` 폴더를 제외하고 패키징하여 서버에 배포하는 콘텐츠와 일치합니다. `com` 폴더에는 컴파일되지 않은 클래스(`.java` 파일)가 포함되어 있습니다. 애플리케이션 코드에서 액세스할 수 있으려면 이 클래스를 컴파일하여 `WEB-INF/classes` 디렉터리에 배치해야 합니다.

`WEB-INF` 디렉터리에는 웹 서버에서 공개적으로 제공되지 않는 코드와 구성이 포함되어 있습니다. 소스 디렉터리의 루트에 있는 다른 폴더(`css`, `images`, `js`)는 웹 서버의 해당 경로에서 공개적으로 사용할 수 있습니다.

다음 예제는 더 많은 파일과 하위 디렉터리가 포함되어 있는 점을 제외하고 앞서 다룬 프로젝트 디렉터리와 동일합니다. 이 예제 프로젝트에는 단순한 태그, 모델 및 지원 클래스, `record` 리소스에 대한 Java 서버 페이지(JSP) 파일이 포함되어 있습니다. 또한 스타일 시트 및 [부트스트랩](http://getbootstrap.com/)의 JavaScript, 기본 JSP 파일, 404 오류에 대한 오류 페이지도 포함되어 있습니다.

`WEB-INF/lib`에는 PostgreSQL용 JDBC(Java Database Connectivity) 드라이브가 포함된 Java 아카이브(JAR) 파일이 포함되어 있습니다. 클래스 파일이 아직 컴파일되지 않았으므로 `WEB-INF/classes`는 비어 있습니다.

```
~/workspace/my-app/
|-- build.sh
|-- README.MD
|-- ROOT.war
`-- src
    |-- WEB-INF
    |   |-- classes
    |   |-- lib
    |   |   `-- postgresql-9.4-1201.jdbc4.jar
    |   |-- tags
    |   |   `-- header.tag
    |   |-- tlds
    |   |   `-- records.tld
    |   `-- web.xml
    |-- com
    |   `-- myapp
    |       |-- model
    |       |   `-- Record.java
    |       `-- web
    |           `-- ListRecords.java
    |-- css
    |   |-- bootstrap.min.css
    |   `-- myapp.css
    |-- images
    |   `-- myapp.png
    |-- js
    |   `-- bootstrap.min.js
    |-- 404.jsp
    |-- default.jsp
    `-- records.jsp
```

## 셸 스크립트를 사용하여 WAR 파일 빌드
<a name="java-tomcat-platform-directorystructure-building"></a>

`build.sh`는 Java 클래스를 컴파일하고, WAR 파일을 구성하며, 로컬 테스트를 위해 이를 Tomcat의 `webapps` 디렉터리에 복사하는 매우 단순한 shell 스크립트입니다.

```
cd src
javac -d WEB-INF/classes com/myapp/model/Record.java
javac -classpath WEB-INF/lib/*:WEB-INF/classes -d WEB-INF/classes com/myapp/model/Record.java
javac -classpath WEB-INF/lib/*:WEB-INF/classes -d WEB-INF/classes com/myapp/web/ListRecords.java

jar -cvf ROOT.war *.jsp images css js WEB-INF
cp ROOT.war /Library/Tomcat/webapps
mv ROOT.war ../
```

WAR 파일 내부에서 `src` 폴더를 제외하고, 앞서 다룬 예제의 `src/com` 디렉터리에 있는 것과 동일한 구조를 볼 수 있습니다. `jar` 명령은 `META-INF/MANIFEST.MF` 파일을 자동으로 만듭니다.

```
~/workspace/my-app/ROOT.war
|-- META-INF
|   `-- MANIFEST.MF
|-- WEB-INF
|   |-- classes
|   |   `-- com
|   |       `-- myapp
|   |           |-- model
|   |           |   `-- Records.class
|   |           `-- web
|   |               `-- ListRecords.class
|   |-- lib
|   |   `-- postgresql-9.4-1201.jdbc4.jar
|   |-- tags
|   |   `-- header.tag
|   |-- tlds
|   |   `-- records.tld
|   `-- web.xml
|-- css
|   |-- bootstrap.min.css
|   `-- myapp.css
|-- images
|   `-- myapp.png
|-- js
|   `-- bootstrap.min.js
|-- 404.jsp
|-- default.jsp
`-- records.jsp
```

## `.gitignore` 사용
<a name="java-tomcat-platform-gitignore"></a>

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

**\$1/workspace/myapp/.gitignore**

```
*.zip
*.class
```

# 프록시 서버 구성
<a name="java-tomcat-proxy"></a>

Tomcat 플랫폼은 [nginx](https://www.nginx.com/)(기본값) 또는 [Apache HTTP Server](https://httpd.apache.org/)를 역방향 프록시로 사용하여 인스턴스에서 포트 80의 요청을 포트 8080에서 수신 중인 Tomcat 웹 컨테이너로 전달합니다. Elastic Beanstalk는 확장하거나 자체 구성으로 완전히 재정의할 수 있는 기본 프록시 구성을 제공합니다.

**플랫폼 버전에서 프록시 서버 구성**  
모든 AL2023/AL2 플랫폼은 균일한 프록시 구성 기능을 지원합니다. AL2023/AL2를 실행하는 플랫폼 버전에서 프록시 서버를 구성하는 방법에 대한 자세한 내용은 [역방향 프록시 구성](platforms-linux-extend.proxy.md) 단원을 참조하세요.

## Amazon Linux AMI(이전 Amazon Linux 2) Tomcat 플랫폼에서 프록시 구성
<a name="java-tomcat-proxy.alami"></a>

Elastic Beanstalk Tomcat 환경에서 Amazon Linux AMI 플랫폼 버전(이전 Amazon Linux 2)을 사용하는 경우 여기의 추가 정보를 읽어 보십시오.

**참고**  
이 주제의 정보는 Amazon Linux AMI(AL1) 기반 플랫폼 브랜치에만 적용됩니다. AL2023/AL2 플랫폼 브랜치는 이전 Amazon Linux AMI(AL1) 플랫폼 버전과 호환되지 않으며 *다른 구성 설정이 필요*합니다.
 [2022년 7월 18일](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html), Elastic Beanstalk는 Amazon Linux AMI(AL1)에 기반한 모든 플랫폼 브랜치의 상태를 **사용 중지**로 설정했습니다. 완전 지원이 가능한 현재 Amazon Linux 2023 플랫폼 브랜치로 마이그레이션하는 방법에 대한 자세한 내용은 [Elastic Beanstalk Linux 애플리케이션을 Amazon Linux 2023 또는 Amazon Linux 2로 마이그레이션](using-features.migration-al.md)을(를) 참조하세요.

### Tomcat 환경을 위한 프록시 서버 선택 — Amazon Linux AMI (AL1)
<a name="java-tomcat-proxy.alami"></a>

Amazon Linux AMI(이전 Amazon Linux 2)에 기반한 Tomcat 플랫폼 버전은 기본적으로 프록시에 [Apache 2.4](https://httpd.apache.org/docs/2.4/)를 사용합니다. 소스 코드에 [구성 파일](ebextensions.md)을 포함시켜 [Apache 2.2](https://httpd.apache.org/docs/2.2/) 또는 [nginx](https://www.nginx.com/)를 사용하도록 선택할 수 있습니다. 다음 예제는 nginx를 사용하도록 Elastic Beanstalk를 구성합니다.

**Example .ebextensions/nginx-proxy.config**  

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

### Apache 2.2에서 Apache 2.4로 마이그레이션 — Amazon Linux AMI(AL1)
<a name="java-tomcat-proxy-apache-migrate"></a>

[Apache 2.2](https://httpd.apache.org/docs/2.2/)용으로 애플리케이션을 개발한 경우 이 단원에서 [Apache 2.4](https://httpd.apache.org/docs/2.4/)로 마이그레이션하는 방법을 참조하십시오.

[2018년 5월 24일자 Tomcat 플랫폼 업데이트 기반 Java](https://aws.amazon.com/releasenotes/release-aws-elastic-beanstalk-platform-update-for-the-java-with-tomcat-platform-on-may-24-2018/)와 함께 출시된 Tomcat 플랫폼 버전 3.0.0 구성부터는 Apache 2.4가 Tomcat 플랫폼의 기본 프록시입니다. Apache 2.4 `.conf` 파일은 대부분 Apache 2.2 파일과 호환되지만 완전히 호환되지는 않습니다. Elastic Beanstalk에는 Apache 각 버전과 올바르게 상호 작용하는 기본 `.conf` 파일이 포함되어 있습니다. 애플리케이션이 Apache의 구성을 사용자 지정하지 않는 경우 [기본 Apache 구성 확장 및 재정의 — Amazon Linux AMI (AL1)](#java-tomcat-proxy-apache)에서 설명한 대로 문제 없이 Apache 2.4로 마이그레이션되어야 합니다.

애플리케이션이 Apache의 구성을 확장하거나 재정의하는 경우 Apache 2.4로 마이그레이션하기 위해 몇 가지 변경을 해야 할 수 있습니다. 자세한 내용은 *Apache Software Foundation* 사이트에서 [2.2에서 2.4로 업그레이드](https://httpd.apache.org/docs/current/upgrading.html)를 참조하십시오. Apache 2.4로 마이그레이션하기 전까지 임시 수단으로 소스 코드에 다음 [구성 파일](ebextensions.md)을 포함시켜 애플리케이션에 Apache 2.2를 사용하도록 선택할 수 있습니다.

**Example .ebextensions/apache-legacy-proxy.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache/2.2
```

빠른 해결을 위해 Elastic Beanstalk 콘솔에서 프록시 서버를 선택할 수도 있습니다.

**Elastic Beanstalk 콘솔에서 Tomcat 환경의 프록시를 선택하려면**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **환경**을 선택한 다음 목록에서 환경의 이름을 선택합니다.

1. 탐색 창에서 **구성**을 선택합니다.

1. **업데이트, 모니터링 및 로깅** 구성 범주에서 **편집**을 선택합니다.

1. **프록시 서버**에서 `Apache 2.2 (deprecated)`를 선택합니다.

1. 변경 사항을 저장하려면 페이지 하단에서 **적용**을 선택합니다.

![\[Elastic Beanstalk 콘솔의 소프트웨어 구성 범주에서 Tomcat 환경의 프록시 선택\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/java-tomcat-proxy-selection.png)


### 기본 Apache 구성 확장 및 재정의 — Amazon Linux AMI (AL1)
<a name="java-tomcat-proxy-apache"></a>

추가 구성 파일을 사용하여 Elastic Beanstalk 기본 Apache 구성을 확장할 수 있습니다. 또는 Elastic Beanstalk 기본 Apache 구성을 완전히 재정의할 수 있습니다.

**참고**  
모든 Amazon Linux 2 플랫폼은 균일한 프록시 구성 기능을 지원합니다. Amazon Linux 2를 실행하는 Tomcat 플랫폼 버전에서 프록시 서버를 구성하는 방법에 대한 자세한 내용은 [역방향 프록시 구성](platforms-linux-extend.proxy.md) 단원을 참조하세요.
Elastic Beanstalk 애플리케이션을 Amazon Linux 2 플랫폼으로 마이그레이션하는 경우 [Elastic Beanstalk Linux 애플리케이션을 Amazon Linux 2023 또는 Amazon Linux 2로 마이그레이션](using-features.migration-al.md)의 정보도 읽어보세요.

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

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

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

**Example .ebextensions/httpd/conf.d/port5000.conf**  

```
listen 5000
<VirtualHost *:5000>
  <Proxy *>
    Require all granted
  </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의 향상된 상태 보고 및 모니터링](health-enhanced.md), 응답 압축 및 정적 파일에 대한 Elastic Beanstalk 구성을 가져옵니다.

```
IncludeOptional conf.d/*.conf
IncludeOptional conf.d/elasticbeanstalk/*.conf
```

환경에서 Apache 2.2를 프록시로 사용하는 경우 `IncludeOptional` 명령을 `Include`로 바꾸십시오. 두 버전의 Apache에서 이러한 두 가지 명령의 동작에 대한 자세한 내용은 [Apache 2.4의 Include](https://httpd.apache.org/docs/2.4/mod/core.html#include), [Apache 2.4의 IncludeOptional](https://httpd.apache.org/docs/2.4/mod/core.html#includeoptional), [Apache 2.2의 Include](https://httpd.apache.org/docs/2.2/mod/core.html#include)를 참조하십시오.

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

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

### 기본 nginx 구성 확장 — Amazon Linux AMI(AL1)
<a name="java-tomcat-proxy-nginx"></a>

Elastic Beanstalk의 기본 nginx 구성을 확장하려면 애플리케이션 소스 번들의 `.conf`라는 폴더에 `.ebextensions/nginx/conf.d/` 구성 파일을 추가합니다. 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` 폴더의 파일은 `server` 블록 내 `http` 블록에 포함됩니다.

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의 기본 리스너를 재정의하려면 `00_application.conf`에서 `.ebextensions/nginx/conf.d/elasticbeanstalk/` 파일을 포함해 Elastic Beanstalk의 구성을 덮어씁니다.
또한 구성의 `http` 블록에 다음 줄을 포함하여 [Elastic Beanstalk의 향상된 상태 보고 및 모니터링](health-enhanced.md) 및 로깅에 대한 Elastic Beanstalk 구성을 가져옵니다.  

  ```
      include       conf.d/*.conf;
  ```

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

# Elastic Beanstalk Java SE 플랫폼 사용
<a name="java-se-platform"></a>

이 주제에서는 Java SE 플랫폼에서 실행되는 AWS Elastic Beanstalk Java 애플리케이션을 구성, 빌드 및 실행하는 방법을 설명합니다.

Elastic Beanstalk Java SE 플랫폼은 컴파일된 JAR 파일에서 자체적으로 실행할 수 있는 Java 웹 애플리케이션을 위한 [플랫폼 버전](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.javase) 세트입니다. 애플리케이션을 로컬로 컴파일하거나 번들 스크립트를 사용해 소스 코드를 업로드해 인스턴스에서 컴파일할 수 있습니다. Java SE 플랫폼 버전은 플랫폼 브랜치로 그룹화되며 각 버전은 Java의 메이저 버전에 해당합니다.

**참고**  
Elastic Beanstalk는 애플리케이션의 JAR 파일을 구문 분석하지 않습니다. Elastic Beanstalk에 필요한 파일을 JAR 파일 외부에 보관합니다. 예를 들어 [작업자 환경](using-features-managing-env-tiers.md)의 `cron.yaml` 파일을 애플리케이션 소스 번들의 루트에서 JAR 파일 옆에 포함시킵니다.

Elastic Beanstalk 콘솔에서 [실행 환경의 구성 수정](environment-configuration-methods-after.md)을 위해 구성 옵션을 사용할 수 있습니다. [저장된 구성](environment-configuration-savedconfig.md)을 사용해 설정을 저장하면 환경 종료 시 구성이 훼손되지 않도록 할 수 있으며, 추후 기타 환경에서도 적용할 수 있습니다.

소스 코드에 설정을 저장하려면 [구성 파일](ebextensions.md)을 포함시킬 수 있습니다. 구성 파일 설정은 환경을 생성하거나 애플리케이션을 배포할 때마다 적용됩니다. 구성 파일을 사용해 패키지를 설치하고, 스크립트를 실행하고, 배포 중에 다른 인스턴스 사용자 지정 작업을 수행할 수도 있습니다.

Elastic Beanstalk Java SE 플랫폼에는 역방향 프록시 역할을 하며 캐시된 정적 콘텐츠를 제공하고 요청을 애플리케이션에 전달하는 [nginx](https://www.nginx.com/) 서버가 포함되어 있습니다. 또한 이 플랫폼에서는 애플리케이션에 대한 로드를 줄이기 위해 소스 코드의 폴더에서 정적 자산을 제공하도록 프록시 서버를 구성하는 구성 옵션을 제공합니다. 고급 시나리오의 경우 소스 번들에 [고유한 .conf 파일을 포함](java-se-nginx.md)시켜 Elastic Beanstalk의 프록시 구성을 확장하거나 완전히 덮어쓸 수 있습니다.

애플리케이션 소스에 대해 단일 JAR 파일만 제공하는 경우(소스 번들이 아닌 자체적으로) Elastic Beanstalk에서는 JAR 파일의 이름을 `application.jar`로 바꾼 다음 `java -jar application.jar`을 사용하여 실행합니다. 환경의 서버 인스턴스에서 실행되는 프로세스를 구성하려면 소스 번들에 선택적 [Procfile](java-se-procfile.md)을 포함시킵니다. 소스 번들 루트에 JAR이 두 개 이상 있는 경우 또는 JVM 옵션을 설정하는 java 명령을 사용자 지정하려는 경우 `Procfile`이 필요합니다.

항상 `Procfile`을 애플리케이션과 함께 소스 번들로 제공하는 것이 좋습니다. 이를 통해 애플리케이션에 대해 Elastic Beanstalk가 실행하는 프로세스와 이러한 프로세스가 받는 인수를 정확하게 제어할 수 있습니다.

Java 클래스를 컴파일하고 배포 시간에 환경의 EC2 인스턴스에서 다른 빌드 명령을 실행하려면 애플리케이션 원본 번들에 [Buildfile](java-se-buildfile.md)을 포함시킵니다. `Buildfile`을 사용하면 소스 코드를 그대로 배포하고 JAR을 로컬에서 컴파일하는 대신에 서버에서 빌드할 수 있습니다. Java SE 플랫폼에는 서버에서 빌드할 수 있는 일반적인 빌드 도구가 포함되어 있습니다.

Elastic Beanstalk Linux 기반 플랫폼을 확장할 수 있는 다양한 방법에 대한 자세한 내용은 [Elastic Beanstalk Linux 플랫폼 확장](platforms-linux-extend.md) 단원을 참조하세요.

## Java SE 환경 구성
<a name="java-se-options"></a>

Java SE 플랫폼 설정을 사용하면 Amazon EC2 인스턴스의 동작을 미세 조정할 수 있습니다. Elastic Beanstalk 콘솔을 사용하여 Elastic Beanstalk 환경의 Amazon EC2 인스턴스 구성을 편집할 수 있습니다.

Elastic Beanstalk 콘솔을 사용하여 Amazon S3에 대한 로그 교체를 활성화하고, 애플리케이션에서 읽을 수 있도록 환경 변수를 구성합니다.

**Elastic Beanstalk 콘솔에서 Java SE 환경을 구성하려면**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **환경**을 선택한 다음 목록에서 환경의 이름을 선택합니다.

1. 탐색 창에서 **구성**을 선택합니다.

1. **업데이트, 모니터링 및 로깅** 구성 범주에서 **편집**을 선택합니다.

### 로그 옵션
<a name="java-se-options-logs"></a>

로그 옵션 섹션에는 다음 두 가지 설정이 있습니다.
+ **인스턴스 프로파일** – 애플리케이션과 연결된 Amazon S3 버킷에 액세스할 권한이 있는 인스턴스 프로파일을 지정합니다.
+ **Amazon S3에 대한 로그 파일 교체 활성화(Enable log file rotation to Amazon S3)** – 애플리케이션과 연결된 Amazon S3 버킷에 애플리케이션의 Amazon EC2 인스턴스에 대한 로그 파일을 복사하는지 여부를 지정합니다.

### 정적 파일
<a name="java-se-options-staticfiles"></a>

성능을 증진하려면 **정적 파일(Static files)** 섹션에서 프록시 서버를 구성하여 웹 애플리케이션 내부 디렉터리 집합으로 정적 파일(예: HTML 또는 이미지)을 제공할 수 있습니다. 각 디렉터리의 디렉터리 매핑 가상 경로를 설정합니다. 지정된 경로에서 프록시 서버가 파일 요청을 수신받으면 요청을 애플리케이션으로 라우팅하지 않고 파일을 직접 제공합니다.

구성 파일 또는 Elastic Beanstalk 콘솔을 사용하여 정적 파일을 구성하는 방법에 대한 자세한 내용은 [정적 파일 제공](environment-cfg-staticfiles.md) 단원을 참조하세요.

### 환경 속성
<a name="java-se-options-properties"></a>

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

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

```
String endpoint = System.getenv("API_ENDPOINT");
```

자세한 내용은 [환경 변수 및 기타 소프트웨어 설정](environments-cfg-softwaresettings.md)를 참조하십시오.

## Java SE 구성 네임스페이스
<a name="java-se-namespaces"></a>

[구성 파일](ebextensions.md)을 사용하여 구성 옵션을 설정하고 배포 중 다른 인스턴스 구성 작업을 수행할 수 있습니다. 구성 옵션은 [플랫폼별](command-options-specific.md)로 다르거나 Elastic Beanstalk 서비스의 [모든 플랫폼](command-options-general.md)에 전체적으로 적용될 수 있습니다. 구성 옵션은 *네임스페이스*로 구성됩니다.

Java SE 플랫폼에서는 플랫폼별 네임스페이스를 정의하지 않습니다. `aws:elasticbeanstalk:environment:proxy:staticfiles` 네임스페이스를 사용하여 정적 파일을 제공하도록 프록시를 구성할 수 있습니다. 자세한 정보 및 예제는 [정적 파일 제공](environment-cfg-staticfiles.md)을 참조하십시오.

Elastic Beanstalk는 사용자가 환경을 맞춤형으로 지정할 수 있는 다양한 구성 옵션을 제공합니다. 구성 파일 외에 콘솔, 저장된 구성, EB CLI 또는 AWS CLI를 통해 구성 옵션을 설정할 수도 있습니다. 자세한 정보는 [구성 옵션](command-options.md)을 참조하세요.

## Amazon Linux AMI(이전 Amazon Linux 2) Java SE 플랫폼
<a name="java-se.alami"></a>

Elastic Beanstalk Java SE 환경에서 Amazon Linux AMI 플랫폼 버전(이전 Amazon Linux 2)을 사용하는 경우 여기의 추가 정보를 읽어 보십시오.

**참고**  
이 주제의 정보는 Amazon Linux AMI(AL1) 기반 플랫폼 브랜치에만 적용됩니다. AL2023/AL2 플랫폼 브랜치는 이전 Amazon Linux AMI(AL1) 플랫폼 버전과 호환되지 않으며 *다른 구성 설정이 필요*합니다.
 [2022년 7월 18일](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html), Elastic Beanstalk는 Amazon Linux AMI(AL1)에 기반한 모든 플랫폼 브랜치의 상태를 **사용 중지**로 설정했습니다. 완전 지원이 가능한 현재 Amazon Linux 2023 플랫폼 브랜치로 마이그레이션하는 방법에 대한 자세한 내용은 [Elastic Beanstalk Linux 애플리케이션을 Amazon Linux 2023 또는 Amazon Linux 2로 마이그레이션](using-features.migration-al.md)을(를) 참조하세요.

### Java SE 구성 네임스페이스 — Amazon Linux AMI(AL1)
<a name="java-se.alami.namespaces"></a>

[구성 파일](ebextensions.md)을 사용하여 구성 옵션을 설정하고 배포 중 다른 인스턴스 구성 작업을 수행할 수 있습니다. 구성 옵션은 [플랫폼별](command-options-specific.md)로 다르거나 Elastic Beanstalk 서비스의 [모든 플랫폼](command-options-general.md)에 전체적으로 적용될 수 있습니다. 구성 옵션은 *네임스페이스*로 구성됩니다.

Java SE 플랫폼은 [모든 플랫폼에서 지원하는 네임스페이스](command-options-general.md) 외에도 하나의 플랫폼별 구성 네임스페이스를 지원합니다. `aws:elasticbeanstalk:container:java:staticfiles` 네임스페이스를 사용하여 웹 애플리케이션의 경로를 정적 콘텐츠가 포함된 애플리케이션 소스 번들의 폴더에 매핑하는 옵션을 정의할 수 있습니다.

예를 들어 이 [option\$1settings](ebextensions-optionsettings.md) 코드 조각은 정적 파일 네임스페이스에서 두 가지 옵션을 정의합니다. 첫 번째는 경로 `/public`을 `public`이라는 폴더에 매핑하고, 두 번째는 경로 `/images`를 `img`라는 폴더에 매핑합니다.

```
option_settings:
  aws:elasticbeanstalk:container:java:staticfiles:
    /html: statichtml
    /images: staticimages
```

이 네임스페이스를 사용하여 매핑하는 폴더는 소스 번들의 루트에 있는 실제 폴더여야 합니다. 경로를 JAR 파일의 폴더에 매핑할 수 없습니다.

Elastic Beanstalk는 사용자가 환경을 맞춤형으로 지정할 수 있는 다양한 구성 옵션을 제공합니다. 구성 파일 외에 콘솔, 저장된 구성, EB CLI 또는 AWS CLI를 통해 구성 옵션을 설정할 수도 있습니다. 자세한 내용은 [구성 옵션](command-options.md)를 참조하세요.

# Buildfile을 사용하여 서버에서 JAR 빌드
<a name="java-se-buildfile"></a>

소스 번들의 `Buildfile` 파일에서 빌드 명령을 호출하여 환경의 EC2 인스턴스에 있는 애플리케이션의 클래스 파일과 JAR을 빌드할 수 있습니다.

`Buildfile`의 명령은 한 번만 실행되며 완료 후 종료해야 하는 반면에, [Procfile](java-se-procfile.md)의 명령은 애플리케이션의 수명 동안 실행되며 종료되는 경우 다시 시작됩니다. 애플리케이션에서 JAR을 실행하려면 `Procfile`을 사용합니다.

`Buildfile`의 배치 및 구문에 대한 자세한 내용은 [Buildfile 및 Procfile](platforms-linux-extend.build-proc.md) 단원을 참조하세요.

다음 `Buildfile` 예제에서는 Apache Maven을 실행하여 소스 코드에서 웹 애플리케이션을 빌드합니다. 이 기능을 사용하는 샘플 애플리케이션은 [Java 웹 애플리케이션 샘플](java-getstarted.md#java-getstarted-samples)을 참조하십시오.

**Example Buildfile**  

```
build: mvn assembly:assembly -DdescriptorId=jar-with-dependencies
```

Java SE 플랫폼에는 빌드 스크립트에서 호출할 수 있는 다음과 같은 빌드 도구가 포함되어 있습니다.
+ `javac` – Java 컴파일러
+ `ant` – Apache Ant
+ `mvn` – Apache Maven
+ `gradle` – Gradle

# Procfile을 사용한 애플리케이션 프로세스 구성
<a name="java-se-procfile"></a>

애플리케이션 소스 번들의 루트에 JAR 파일이 두 개 이상 있는 경우, Elastic Beanstalk에 실행할 JAR를 알려 주는 `Procfile` 파일을 포함시켜야 합니다. 단일 JAR 애플리케이션의 경우에도 `Procfile` 파일을 포함시켜 애플리케이션을 실행하는 Java 가상 머신(JVM)을 구성할 수 있습니다.

항상 `Procfile`을 애플리케이션과 함께 소스 번들로 제공하는 것이 좋습니다. 이를 통해 애플리케이션에 대해 Elastic Beanstalk가 실행하는 프로세스와 이러한 프로세스가 받는 인수를 정확하게 제어할 수 있습니다.

`Procfile` 작성 및 사용에 대한 자세한 내용은 [Buildfile 및 Procfile](platforms-linux-extend.build-proc.md) 단원을 참조하세요.

**Example Procfile**  

```
web: java -Xms256m -jar server.jar 
cache: java -jar mycache.jar
web_foo: java -jar other.jar
```

애플리케이션의 기본 JAR를 실행하는 명령 이름은 `web`으로 지정해야 하며, `Procfile`에 나열된 첫 번째 명령이어야 합니다. nginx 서버는 환경의 로드 밸런서에서 받는 모든 HTTP 요청을 이 애플리케이션으로 전달합니다.

Elastic Beanstalk는 Procfile의 모든 항목이 항상 실행되어야 함을 가정하며, 종료되는 Procfile에 정의된 모든 애플리케이션을 자동으로 다시 시작합니다. 종료될 예정으로 다시 시작되면 안 되는 명령을 실행하려면 [`Buildfile`](java-se-buildfile.md)을 사용합니다.

## Amazon Linux AMI(이전 Amazon Linux 2)에서 Procfile 사용
<a name="java-se-procfile.alami"></a>

Elastic Beanstalk Java SE 환경에서 Amazon Linux AMI 플랫폼 버전(이전 Amazon Linux 2)을 사용하는 경우 이 섹션의 추가 정보를 읽어 보십시오.

**참고**  
이 주제의 정보는 Amazon Linux AMI(AL1) 기반 플랫폼 브랜치에만 적용됩니다. AL2023/AL2 플랫폼 브랜치는 이전 Amazon Linux AMI(AL1) 플랫폼 버전과 호환되지 않으며 *다른 구성 설정이 필요*합니다.
 [2022년 7월 18일](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html), Elastic Beanstalk는 Amazon Linux AMI(AL1)에 기반한 모든 플랫폼 브랜치의 상태를 **사용 중지**로 설정했습니다. 완전 지원이 가능한 현재 Amazon Linux 2023 플랫폼 브랜치로 마이그레이션하는 방법에 대한 자세한 내용은 [Elastic Beanstalk Linux 애플리케이션을 Amazon Linux 2023 또는 Amazon Linux 2로 마이그레이션](using-features.migration-al.md)을(를) 참조하세요.

### 포트 전달 — Amazon Linux AMI(AL1)
<a name="java-se-procfile.alami.ports"></a>

기본적으로 Elastic Beanstalk는 요청을 포트 5000의 애플리케이션에 전달하도록 nginx 프록시를 구성합니다. `PORT` [환경 속성](java-se-platform.md#java-se-options)을 기본 애플리케이션이 수신 대기하는 포트로 설정하여 기본 포트를 재정의할 수 있습니다.

`Procfile`을 사용하여 애플리케이션을 여러 개 실행하는 경우, Amazon Linux AMI 플랫폼의 Elastic Beanstalk는 각 추가 애플리케이션이 이전 포트보다 높은 포트 100에서 수신 대기할 것으로 기대합니다. Elastic Beanstalk는 각 애플리케이션 내에서 액세스할 수 있는 PORT 변수를 애플리케이션이 실행될 것으로 기대하는 포트로 설정합니다. `System.getenv("PORT")`를 호출하여 애플리케이션 코드 내의 이 변수에 액세스할 수 있습니다.

앞의 `Procfile` 예제에서 `web` 애플리케이션은 포트 5000에서 수신 대기하고, `cache`는 포트 5100에서 수신 대기하며, `web_foo`는 포트 5200에서 수신 대기합니다. `web`은 `PORT` 변수를 읽어 수신 대기 포트를 구성하며, 해당 숫자에 100을 추가하여 요청을 보낼 수 있도록 `cache`가 수신 대기하는 포트를 결정합니다.

# 프록시 서버 구성
<a name="java-se-nginx"></a>

Elastic Beanstalk는 [nginx](https://www.nginx.com/)를 역방향 프록시로 사용하여 애플리케이션을 포트 80의 Elastic Load Balancing 로드 밸런서에 매핑합니다. Elastic Beanstalk는 확장하거나 자체 구성으로 완전히 재정의할 수 있는 기본 nginx 구성을 제공합니다.

기본적으로 Elastic Beanstalk는 요청을 포트 5000의 애플리케이션에 전달하도록 nginx 프록시를 구성합니다. `PORT` [환경 속성](java-se-platform.md#java-se-options)을 기본 애플리케이션이 수신 대기하는 포트로 설정하여 기본 포트를 재정의할 수 있습니다.

**참고**  
애플리케이션이 수신 대기하는 포트는 nginx 서버가 로드 밸런서에서 요청을 받기 위해 수신 대기하는 포트에 영향을 주지 않습니다.

**플랫폼 버전에서 프록시 서버 구성**  
모든 AL2023/AL2 플랫폼은 균일한 프록시 구성 기능을 지원합니다. AL2023/AL2를 실행하는 플랫폼 버전에서 프록시 서버를 구성하는 방법에 대한 자세한 내용은 [역방향 프록시 구성](platforms-linux-extend.proxy.md) 단원을 참조하세요.

## Amazon Linux AMI(이전 Amazon Linux 2)에서 프록시 구성
<a name="java-se-nginx.alami"></a>

Elastic Beanstalk Java SE 환경에서 Amazon Linux AMI 플랫폼 버전(이전 Amazon Linux 2)을 사용하는 경우 여기의 추가 정보를 읽어 보십시오.

**참고**  
이 주제의 정보는 Amazon Linux AMI(AL1) 기반 플랫폼 브랜치에만 적용됩니다. AL2023/AL2 플랫폼 브랜치는 이전 Amazon Linux AMI(AL1) 플랫폼 버전과 호환되지 않으며 *다른 구성 설정이 필요*합니다.
 [2022년 7월 18일](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html), Elastic Beanstalk는 Amazon Linux AMI(AL1)에 기반한 모든 플랫폼 브랜치의 상태를 **사용 중지**로 설정했습니다. 완전 지원이 가능한 현재 Amazon Linux 2023 플랫폼 브랜치로 마이그레이션하는 방법에 대한 자세한 내용은 [Elastic Beanstalk Linux 애플리케이션을 Amazon Linux 2023 또는 Amazon Linux 2로 마이그레이션](using-features.migration-al.md)을(를) 참조하세요.

### 기본 프록시 구성 확장 및 재정의 — Amazon Linux AMI (AL1)
<a name="java-se-nginx.alami.extending"></a>

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

```
~/workspace/my-app/
|-- .ebextensions
|   `-- nginx
|       `-- conf.d
|           `-- myconf.conf
`-- web.jar
```

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

```
~/workspace/my-app/
|-- .ebextensions
|   `-- nginx
|       `-- nginx.conf
`-- web.jar
```

Elastic Beanstalk의 nginx 구성을 재정의하는 경우 `nginx.conf`에 다음 줄을 추가하여 [Elastic Beanstalk의 향상된 상태 보고 및 모니터링](health-enhanced.md), 자동 애플리케이션 매핑 및 정적 파일에 대한 Elastic Beanstalk 구성을 가져옵니다.

```
 include conf.d/elasticbeanstalk/*.conf;
```

[Scorekeep 샘플 애플리케이션](https://github.com/aws-samples/eb-java-scorekeep/)의 다음과 같은 구성 예시는 Elastic Beanstalk의 기본 구성을 재정의하여 Java SE 플랫폼이 애플리케이션 소스 코드를 복사하는 `public`의 하위 디렉터리 `/var/app/current`에 있는 정적 웹 애플리케이션을 제공합니다. `/api` 로케이션은 트래픽을 `/api/` 아래의 경로를 거쳐 포트 5000에서 수신 중인 Spring 애플리케이션으로 전달합니다. 다른 모든 트래픽은 루트 경로에 위치한 웹 앱을 통해 제공됩니다.

**Example**  

```
user                    nginx;
error_log               /var/log/nginx/error.log warn;
pid                     /var/run/nginx.pid;
worker_processes        auto;
worker_rlimit_nofile    33282;

events {
    worker_connections  1024;
}

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

  include       conf.d/*.conf;

  map $http_upgrade $connection_upgrade {
      default     "upgrade";
  }

  server {
      listen        80 default_server;
      root /var/app/current/public;

      location / {
      }git pull
      

      location /api {
          proxy_pass          http://127.0.0.1:5000;
          proxy_http_version  1.1;

          proxy_set_header    Connection          $connection_upgrade;
          proxy_set_header    Upgrade             $http_upgrade;
          proxy_set_header    Host                $host;
          proxy_set_header    X-Real-IP           $remote_addr;
          proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
      }

      access_log    /var/log/nginx/access.log main;

      client_header_timeout 60;
      client_body_timeout   60;
      keepalive_timeout     60;
      gzip                  off;
      gzip_comp_level       4;

      # Include the Elastic Beanstalk generated locations
      include conf.d/elasticbeanstalk/01_static.conf;
      include conf.d/elasticbeanstalk/healthd.conf;
  }
}
```

# Java Elastic Beanstalk 환경에 Amazon RDS DB 인스턴스 추가
<a name="java-rds"></a>

여기에서는 Elastic Beanstalk 콘솔을 사용하여 Amazon RDS를 생성하는 방법을 설명합니다. Amazon Relational Database Service(Amazon RDS) DB 인스턴스를 사용하여 애플리케이션이 수집하고 수정하는 데이터를 저장할 수 있습니다. 데이터베이스를 환경에 연결하고 Elastic Beanstalk에서 관리하도록 하거나 외부에서 만들고 관리할 수 있습니다.

Amazon RDS를 처음 사용하는 경우 Elastic Beanstalk 콘솔을 사용하여 테스트 환경에 DB 인스턴스를 추가하고 애플리케이션을 인스턴스에 연결할 수 있는지 확인합니다.

**환경에 DB 인스턴스를 추가하려면**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **환경**을 선택한 다음 목록에서 환경의 이름을 선택합니다.

1. 탐색 창에서 **구성**을 선택합니다.

1. **데이터베이스** 구성 범주에서 **편집**을 선택합니다.

1. DB 엔진을 선택하고 사용자 이름과 암호를 입력합니다.

1. 변경 사항을 저장하려면 페이지 하단에서 **적용**을 선택합니다.

DB 인스턴스를 추가하는 데 약 10분 정도 소요됩니다. 환경 업데이트가 완료되면 애플리케이션에서 다음 환경 속성을 통해 DB 인스턴스 호스트 이름과 기타 연결 정보를 사용할 수 있습니다:


| 속성 이름 | 설명 | 속성 값 | 
| --- | --- | --- | 
|  `RDS_HOSTNAME`  |  DB 인스턴스의 호스트 이름입니다.  |  Amazon RDS 콘솔 **연결 및 보안** 탭의 **엔드포인트**입니다.  | 
|  `RDS_PORT`  |  DB 인스턴스가 연결을 허용하는 포트입니다. DB 엔진마다 기본값이 다릅니다.  |  Amazon RDS 콘솔 **연결 및 보안** 탭의 **포트**입니다.  | 
|  `RDS_DB_NAME`  |  데이터베이스 이름은 **ebdb**입니다.  |  Amazon RDS 콘솔 **구성** 탭의 **DB 이름**입니다.  | 
|  `RDS_USERNAME`  |  데이터베이스에 구성된 사용자 이름입니다.  |  Amazon RDS 콘솔 **구성** 탭의 **마스터 사용자 이름**입니다.  | 
|  `RDS_PASSWORD`  |  데이터베이스에 구성된 암호입니다.  |  Amazon RDS 콘솔에서는 참조용으로 사용할 수 없습니다.  | 

내부 DB 인스턴스 구성에 대한 자세한 내용은 [Elastic Beanstalk 환경에 데이터베이스 추가](using-features.managing.db.md)를 참조하세요. Elastic Beanstalk에서 사용하도록 외부 데이터베이스를 구성하는 방법은 [Amazon RDS와 함께 Elastic Beanstalk 사용](AWSHowTo.RDS.md) 단원을 참조하십시오.

데이터베이스에 연결하려면 애플리케이션에 적절한 드라이버 JAR 파일을 추가하고, 드라이버 클래스를 코드에 로드한 후, Elastic Beanstalk에서 제공하는 환경 속성으로 연결 객체를 생성합니다.

**Topics**
+ [

## JDBC 드라이버 다운로드
](#java-rds-drivers)
+ [

## 데이터베이스에 연결(Java SE 플랫폼)
](#java-rds-javase)
+ [

## 데이터베이스에 연결(Tomcat 플랫폼)
](#java-rds-tomcat)
+ [

## 데이터베이스 연결 문제 해결
](#create_deploy_Java.rds.troubleshooting)

## JDBC 드라이버 다운로드
<a name="java-rds-drivers"></a>

선택한 DB 엔진에 JDBC 드라이버의 JAR 파일이 필요합니다. JAR 파일을 소스 코드에 저장하고, 데이터베이스에 대한 연결을 생성하는 클래스를 컴파일할 때 이를 클래스 경로에 포함시킵니다.

다음 위치에서 DB 엔진의 최신 드라이버를 찾을 수 있습니다.
+ **MySQL** – [MySQL Connector/J](https://dev.mysql.com/downloads/connector/j/)
+ **Oracle SE-1** – [Oracle JDBC Driver](http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html)
+ **Postgres** – [PostgreSQL JDBC Driver](https://jdbc.postgresql.org/)
+ **SQL Server** – [Microsoft JDBC Driver](https://msdn.microsoft.com/en-us/sqlserver/aa937724.aspx)

JDBC 드라이버를 사용하려면 코드에서 `Class.forName()`와 연결을 생성하기 전에 `DriverManager.getConnection()`을 호출하여 이를 로드합니다.

JDBC는 다음 형식의 연결 문자열을 사용합니다.

```
jdbc:driver://hostname:port/dbName?user=userName&password=password
```

Elastic Beanstalk가 애플리케이션에 제공하는 환경 변수에서 호스트 이름, 포트, 데이터베이스 이름, 사용자 이름 및 암호를 검색할 수 있습니다. 드라이버 이름은 데이터베이스 유형 및 드라이버 버전별로 다릅니다. 다음은 드라이버 이름 예입니다.
+ `mysql`MySQL의 경우 
+ `postgresql` PostgreSQL용
+ `oracle:thin`Oracle Thin의 경우 
+ `oracle:oci`Oracle OCI의 경우 
+ `oracle:oci8`Oracle OCI 8의 경우 
+ `oracle:kprb`Oracle KPRB의 경우 
+ `sqlserver`SQL Server의 경우 

## 데이터베이스에 연결(Java SE 플랫폼)
<a name="java-rds-javase"></a>

Java SE 환경에서는 `System.getenv()`를 사용하여 환경에서 연결 변수를 읽습니다. 다음 코드 예제에서는 PostgreSQL 데이터베이스에 대한 연결을 생성하는 클래스를 보여 줍니다.

```
private static Connection getRemoteConnection() {
    if (System.getenv("RDS_HOSTNAME") != null) {
      try {
      Class.forName("org.postgresql.Driver");
      String dbName = System.getenv("RDS_DB_NAME");
      String userName = System.getenv("RDS_USERNAME");
      String password = System.getenv("RDS_PASSWORD");
      String hostname = System.getenv("RDS_HOSTNAME");
      String port = System.getenv("RDS_PORT");
      String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password;
      logger.trace("Getting remote connection with connection string from environment variables.");
      Connection con = DriverManager.getConnection(jdbcUrl);
      logger.info("Remote connection successful.");
      return con;
    }
    catch (ClassNotFoundException e) { logger.warn(e.toString());}
    catch (SQLException e) { logger.warn(e.toString());}
    }
    return null;
  }
```

## 데이터베이스에 연결(Tomcat 플랫폼)
<a name="java-rds-tomcat"></a>

Tomcat 환경에서는 환경 속성이 `System.getProperty()`에 액세스할 수 있는 시스템 속성으로 제공됩니다.

다음 코드 예제에서는 PostgreSQL 데이터베이스에 대한 연결을 생성하는 클래스를 보여 줍니다.

```
private static Connection getRemoteConnection() {
    if (System.getProperty("RDS_HOSTNAME") != null) {
      try {
      Class.forName("org.postgresql.Driver");
      String dbName = System.getProperty("RDS_DB_NAME");
      String userName = System.getProperty("RDS_USERNAME");
      String password = System.getProperty("RDS_PASSWORD");
      String hostname = System.getProperty("RDS_HOSTNAME");
      String port = System.getProperty("RDS_PORT");
      String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password;
      logger.trace("Getting remote connection with connection string from environment variables.");
      Connection con = DriverManager.getConnection(jdbcUrl);
      logger.info("Remote connection successful.");
      return con;
    }
    catch (ClassNotFoundException e) { logger.warn(e.toString());}
    catch (SQLException e) { logger.warn(e.toString());}
    }
    return null;
  }
```

연결을 가져오거나 SQL 문을 실행하는 데 문제가 있는 경우, JSP 파일에 다음 코드를 배치해 봅니다. 이 코드는 DB 인스턴스에 연결하고 테이블을 만들며 여기에 씁니다.

```
<%@ page import="java.sql.*" %>
<%
  // Read RDS connection information from the environment
  String dbName = System.getProperty("RDS_DB_NAME");
  String userName = System.getProperty("RDS_USERNAME");
  String password = System.getProperty("RDS_PASSWORD");
  String hostname = System.getProperty("RDS_HOSTNAME");
  String port = System.getProperty("RDS_PORT");
  String jdbcUrl = "jdbc:mysql://" + hostname + ":" +
    port + "/" + dbName + "?user=" + userName + "&password=" + password;
  
  // Load the JDBC driver
  try {
    System.out.println("Loading driver...");
    Class.forName("com.mysql.jdbc.Driver");
    System.out.println("Driver loaded!");
  } catch (ClassNotFoundException e) {
    throw new RuntimeException("Cannot find the driver in the classpath!", e);
  }

  Connection conn = null;
  Statement setupStatement = null;
  Statement readStatement = null;
  ResultSet resultSet = null;
  String results = "";
  int numresults = 0;
  String statement = null;

  try {
    // Create connection to RDS DB instance
    conn = DriverManager.getConnection(jdbcUrl);
    
    // Create a table and write two rows
    setupStatement = conn.createStatement();
    String createTable = "CREATE TABLE Beanstalk (Resource char(50));";
    String insertRow1 = "INSERT INTO Beanstalk (Resource) VALUES ('EC2 Instance');";
    String insertRow2 = "INSERT INTO Beanstalk (Resource) VALUES ('RDS Instance');";
    
    setupStatement.addBatch(createTable);
    setupStatement.addBatch(insertRow1);
    setupStatement.addBatch(insertRow2);
    setupStatement.executeBatch();
    setupStatement.close();
    
  } catch (SQLException ex) {
    // Handle any errors
    System.out.println("SQLException: " + ex.getMessage());
    System.out.println("SQLState: " + ex.getSQLState());
    System.out.println("VendorError: " + ex.getErrorCode());
  } finally {
    System.out.println("Closing the connection.");
    if (conn != null) try { conn.close(); } catch (SQLException ignore) {}
  }

  try {
    conn = DriverManager.getConnection(jdbcUrl);
    
    readStatement = conn.createStatement();
    resultSet = readStatement.executeQuery("SELECT Resource FROM Beanstalk;");

    resultSet.first();
    results = resultSet.getString("Resource");
    resultSet.next();
    results += ", " + resultSet.getString("Resource");
    
    resultSet.close();
    readStatement.close();
    conn.close();

  } catch (SQLException ex) {
    // Handle any errors
    System.out.println("SQLException: " + ex.getMessage());
    System.out.println("SQLState: " + ex.getSQLState());
    System.out.println("VendorError: " + ex.getErrorCode());
  } finally {
       System.out.println("Closing the connection.");
      if (conn != null) try { conn.close(); } catch (SQLException ignore) {}
  }
%>
```

결과를 표시하려면 JSP 파일의 HTML 부분의 본문에 다음 코드를 배치합니다.

```
<p>Established connection to RDS. Read first two rows: <%= results %></p>
```

## 데이터베이스 연결 문제 해결
<a name="create_deploy_Java.rds.troubleshooting"></a>

**AI 지원 문제 해결을 위해 Amazon Q Developer CLI 사용**  
 Amazon Q Developer CLI를 사용하면 환경 문제를 신속하게 해결할 수 있습니다. Q CLI는 환경 상태를 확인하고, 이벤트를 검토하고, 로그를 분석하고, 명확한 질문을 하여 솔루션을 제공합니다. 자세한 내용과 자세한 안내는 AWS 블로그의 [Amazon Q Developer CLI를 사용한 Elastic Beanstalk 환경 문제 해결을 ](https://aws.amazon.com/blogs/devops/troubleshooting-elastic-beanstalk-environments-with-amazon-q-developer-cli/) 참조하세요.

애플리케이션 내에서 데이터베이스에 연결하는 중 문제가 발생한 경우, 웹 컨테이너 로그 및 데이터베이스를 검토합니다.

### 로그 검토
<a name="create_deploy_Java.rds.troubleshooting.logs"></a>

Eclipse 내에서 Elastic Beanstalk 환경의 모든 로그를 볼 수 있습니다. AWS 탐색기 보기가 열려 있지 않은 경우 도구 모음의 주황색 AWS 아이콘 옆에 있는 화살표를 선택한 다음 ** AWS 탐색기 보기 표시를** 선택합니다. **AWS Elastic Beanstalk**와 환경 이름을 확장한 후, 서버의 컨텍스트(오른쪽 클릭) 메뉴를 엽니다. **Open in WTP Server Editor**를 선택합니다.

 **서버** 보기의 **로그** 탭을 선택하여 환경의 집계 로그를 봅니다. 최신 로그를 열려면 페이지의 오른쪽 위 모서리의 **새로 고침** 버튼을 선택합니다.

 아래로 스크롤하여 `/var/log/tomcat7/catalina.out`에서 Tomcat 로그를 찾습니다. 앞의 예제에서 웹 페이지를 여러 번 로드한 경우 다음과 같이 표시될 수 있습니다.

```
-------------------------------------
/var/log/tomcat7/catalina.out
-------------------------------------
INFO: Server startup in 9285 ms
Loading driver...
Driver loaded!
SQLException: Table 'Beanstalk' already exists
SQLState: 42S01
VendorError: 1050
Closing the connection.
Closing the connection.
```

웹 애플리케이션이 표준 출력에 보내는 모든 정보가 웹 컨테이너 로그에 표시됩니다. 이전 예제에서 애플리케이션은 페이지가 로드될 때마다 테이블을 만들려고 시도합니다. 그 결과 첫 페이지 이후의 모든 페이지 로드에서 SQL 예외가 catch됩니다.

한 예를 들면 앞의 것이 허용됩니다. 그러나 실제 애플리케이션에서는 데이터베이스 정의를 스키마 객체에 보관하고, 모델 클래스 내에서 트랜잭션을 수행하며, 컨트롤러 서블릿으로 요청을 조정하십시오.

### RDS DB 인스턴스에 연결
<a name="create_deploy_Java.rds.troubleshooting.connecting"></a>

 MySQL 클라이언트 애플리케이션을 사용하여 Elastic Beanstalk 환경의 RDS DB 인스턴스에 직접 연결할 수 있습니다.

 먼저 RDS DB 인스턴스에 대한 보안 그룹을 열어 컴퓨터에서 오는 트래픽을 허용합니다.

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **환경**을 선택한 다음 목록에서 환경의 이름을 선택합니다.

1. 탐색 창에서 **구성**을 선택합니다.

1. [**데이터베이스**] 구성 범주에서 [**편집**]을 선택합니다.

1. **엔드포인트** 옆에 있는 Amazon RDS 콘솔 링크를 선택합니다.

1. **RDS 대시보드** 인스턴스 세부 정보 페이지의 **보안 및 네트워크** 아래에서 **보안 그룹** 옆의 *rds-*로 시작하는 보안 그룹을 선택합니다.
**참고**  
데이터베이스에는 **보안 그룹**이라는 레이블이 지정된 항목이 여러 개 있을 수 있습니다. 기본 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/)(Amazon VPC).가 없는 이전 계정이 있는 경우에만 *awseb*로 시작하는 첫 번째 항목을 사용합니다.

1. **보안 그룹 세부 정보**에서 **인바운드** 탭을 선택한 후 **편집**을 선택합니다.

1. CIDR 형식으로 지정된 IP 주소에서 나가는 트래픽을 허용하는 MySQL(포트 3306)에 대한 규칙을 추가합니다.

1. **저장**(Save)을 선택합니다. 변경 사항이 즉시 적용됩니다.

 환경에 대한 Elastic Beanstalk 구성 세부 정보로 돌아가서 엔드포인트를 적어 둡니다. 도메인 이름을 사용하여 RDS DB 인스턴스에 연결합니다.

 MySQL 클라이언트를 설치하고 포트 3306에서 데이터베이스와의 연결을 시작합니다. Windows의 경우 MySQL 홈 페이지에서 MySQL Workbench를 설치하고 프롬프트를 따릅니다.

 Linux의 경우 배포용 패키지 관리자를 사용하여 MySQL 클라이언트를 설치합니다. 다음 예제는 Ubuntu 및 기타 Ubuntu 계열 시스템에서 작동합니다.

```
// Install MySQL client
$ sudo apt-get install mysql-client-5.5
...
// Connect to database
$ mysql -h aas839jo2vwhwb.cnubrrfwfka8.us-west-2.rds.amazonaws.com -u username -ppassword ebdb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 117
Server version: 5.5.40-log Source distribution
...
```

연결한 후 SQL 명령을 실행하여 데이터베이스의 상태, 테이블과 행이 생성되었는지 여부 및 기타 정보를 볼 수 있습니다.

```
mysql> SELECT Resource from Beanstalk;
+--------------+
| Resource     |
+--------------+
| EC2 Instance |
| RDS Instance |
+--------------+
2 rows in set (0.01 sec)
```

# Java 도구 및 리소스
<a name="create_deploy_Java.resources"></a>

Java 애플리케이션을 개발할 때 다음과 같은 곳에서 추가적인 도움을 받을 수 있습니다.


****  

|  리소스  |  설명  | 
| --- | --- | 
|  [AWS Java 개발 포럼](https://forums.aws.amazon.com/forum.jspa?forumID=70)  | 질문을 게시하고 피드백을 받습니다. | 
|  [Java 개발자 센터](https://aws.amazon.com/java/)  | 샘플 코드, 설명서, 도구 및 추가 리소스를 받을 수 있는 원스톱 상점입니다. | 