

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

# Elastic Beanstalk Ruby 플랫폼 사용
<a name="create_deploy_Ruby.container"></a>

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

AWS Elastic Beanstalk 는 Ruby 프로그래밍 언어의 다양한 버전에 대해 여러 플랫폼 브랜치를 지원합니다. 전체 목록은 *AWS Elastic Beanstalk 플랫폼* 문서의 [Ruby](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.ruby)를 참조하세요.

Ruby 웹 애플리케이션은 Puma 애플리케이션 서버의 NGINX 프록시 서버 뒤에서 실행될 수 있습니다. RubyGems을 사용하는 경우 소스 번들에 [`Gemfile`](ruby-platform-gemfile.md)을 포함하여 배포 중 패키지를 설치할 수 있습니다.

**애플리케이션 서버 구성**  
Elastic Beanstalk는 사용자가 환경을 생성할 때 선택한 Ruby 플랫폼 브랜치를 기반으로 Puma 애플리케이션 서버를 설치합니다. Ruby 플랫폼 버전에 제공되는 구성 요소에 대한 자세한 내용은 *AWS Elastic Beanstalk 플랫폼* 안내서의 [지원되는 플랫폼](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.ruby) 섹션을 참조하세요.

제공한 Puma 서버를 사용하여 애플리케이션을 구성할 수 있습니다. 이는 Ruby 플랫폼 브랜치에 사전 설치된 버전 이외의 Puma 버전을 사용할 수 있는 옵션을 제공합니다. Passenger와 같은 다른 애플리케이션 서버를 사용하도록 애플리케이션을 구성할 수도 있습니다. 그러려면 배포에 `Gemfile`을 포함하고 사용자 지정해야 합니다. 또한 애플리케이션 서버를 시작하기 위해 `Procfile`을 구성해야 합니다. 자세한 내용은 *[Procfile을 사용하여 애플리케이션 프로세스 구성](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ruby-platform-procfile.html)*을 참조하세요*.*

**기타 구성 옵션**  
Elastic Beanstalk에서는 Elastic Beanstalk 환경의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 실행하는 소프트웨어를 사용자 지정하는 데 사용할 수 있는 [구성 옵션](command-options.md)을 제공합니다. 애플리케이션에 필요한 환경 변수를 구성하고, Amazon S3의 로그 로테이션을 활성화하며, 정적 파일을 포함한 애플리케이션 소스 폴더를 프록시 서버에서 제공하는 경로로 매핑할 수 있습니다. 플랫폼은 레일 및 랙과 관련된 일부 공통 환경 변수를 찾기 쉽고 간편하게 사용하도록 사전 정의하기도 합니다.

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

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

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

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

## Ruby 환경 구성
<a name="create-deploy_Ruby.container.CON"></a>

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

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

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

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

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

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

### 로그 옵션
<a name="create_deploy_Ruby.container.console.logoptions"></a>

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

### 정적 파일
<a name="create_deploy_Ruby.container.console.staticfiles"></a>

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

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

Ruby 환경에서 프록시 서버는 기본값으로 다음과 같이 정적 파일을 제공하도록 구성됩니다.
+ `public` 폴더의 파일은 `/public` 경로 및 도메인 루트(`/` 경로)에서 제공됩니다.
+ `public/assets` 하위 폴더에 있는 파일은 `/assets` 경로에서 제공됩니다.

다음 예시에서는 기본 구성의 작동 방식에 대해 설명합니다.
+ 애플리케이션 소스에 `public` 폴더에 있는 `logo.png`라는 파일이 포함되어 있는 경우 프록시 서버는 이 파일을 `subdomain.elasticbeanstalk.com/public/logo.png` 및 `subdomain.elasticbeanstalk.com/logo.png`에서 사용자에게 제공합니다.
+ 애플리케이션 소스에 `public` 폴더에 있는 `assets`라는 폴더에 `logo.png`라는 파일이 포함되어 있는 경우 프록시 서버는 `subdomain.elasticbeanstalk.com/assets/logo.png`에서 이 파일을 사용자에게 제공합니다.

정적 파일에 대해 추가 매핑을 구성할 수 있습니다. 자세한 내용은 본 주제의 후반부에서 [Ruby 구성 네임스페이스](#ruby-namespaces)을 참조하세요.

**참고**  
*Ruby 2.7 AL2 버전 3.3.7* 이전 플랫폼 버전의 경우 기본 Elastic Beanstalk nginx 프록시 서버 구성은 도메인 루트(`subdomain.elasticbeanstalk.com/`)에서 정적 파일 제공을 지원하지 않습니다. 이 플랫폼 버전은 2021년 10월 21일에 릴리스되었습니다. 자세한 내용은 *AWS Elastic Beanstalk 릴리스 정보*의 [새 플랫폼 버전 - Ruby](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2021-10-21-linux.html#release-2021-10-21-linux.platforms.ruby)를 참조하십시오.

### 환경 속성
<a name="create_deploy_Ruby.env.console.ruby.envprops"></a>

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

Ruby 플랫폼은 환경 구성에 대한 다음 속성을 지정합니다.
+  **BUNDLE\$1WITHOUT** - [Gemfile](http://bundler.io/v1.15/man/gemfile.5.html)에서 [종속 항목을 설치할 때](http://bundler.io/bundle_install.html) 무시하는 콜론으로 구분된 그룹 목록입니다.
+ **BUNDLER\$1DEPLOYMENT\$1MODE** - Bundler를 사용해 [배포 모드](https://bundler.io/man/bundle-install.1.html#DEPLOYMENT-MODE)로 종속성을 설치하려면 `true`(기본값)로 설정합니다. 개발 모드에서 `bundle install`을 실행하려면 이 속성을 `false`로 설정하십시오.
**참고**  
이 환경 속성은 Amazon Linux AMI Ruby 플랫폼 브랜치(이전 Amazon Linux 2)에 정의되어 있지 않습니다.
+  **RAILS\$1SKIP\$1ASSET\$1COMPILATION** - `true`로 설정하여 배포 중 [http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets](http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets)의 실행을 건너뜁니다.
+  **RAILS\$1SKIP\$1MIGRATIONS** - `true`로 설정하여 배포 중 [http://guides.rubyonrails.org/active_record_migrations.html#running-migrations](http://guides.rubyonrails.org/active_record_migrations.html#running-migrations)의 실행을 건너뜁니다.
+  **RACK\$1ENV** - 랙에 대한 환경 단계를 지정합니다. 예: `development`, `production` 또는 `test`.

Elastic Beanstalk에서 실행되는 Ruby 환경에서 `ENV` 객체를 사용하여 환경 변수에 액세스할 수 있습니다. 예를 들어 다음 코드로 변수에 대한 `API_ENDPOINT`이라는 속성을 읽을 수 있습니다.

```
endpoint = ENV['API_ENDPOINT']
```

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

## Ruby 구성 네임스페이스
<a name="ruby-namespaces"></a>

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

`aws:elasticbeanstalk:environment:proxy:staticfiles` 네임스페이스를 사용하여 정적 파일을 제공하도록 환경 프록시를 구성할 수 있습니다. 애플리케이션 디렉터리에 대한 가상 경로의 매핑을 정의합니다.

Ruby 플랫폼에서는 플랫폼별 네임스페이스를 정의하지 않습니다. 대신 공통 레일 및 랙 옵션에 대한 환경 속성을 정의합니다.

다음 구성 파일은 `staticimages`라는 디렉터리를 `/images` 경로로 매핑하는 정적 파일 옵션을 지정하고, 플랫폼에서 정의한 각 환경 속성을 설정하고, `LOGGING`이라는 추가 환경 속성을 설정합니다.

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

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /images: staticimages
  aws:elasticbeanstalk:application:environment:
    BUNDLE_WITHOUT: test
    BUNDLER_DEPLOYMENT_MODE: true
    RACK_ENV: development
    RAILS_SKIP_ASSET_COMPILATION: true
    RAILS_SKIP_MIGRATIONS: true
    LOGGING: debug
```

**참고**  
`BUNDLER_DEPLOYMENT_MODE` 환경 속성 및 `aws:elasticbeanstalk:environment:proxy:staticfiles` 네임스페이스는 Amazon Linux AMI Ruby 플랫폼 브랜치(이전 Amazon Linux 2)에 정의되어 있지 않습니다.

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

# Elastic Beanstalk에서 Gemfile을 사용하여 패키지 설치
<a name="ruby-platform-gemfile"></a>

RubyGems를 사용하여 애플리케이션에 필요한 패키지를 설치하려면 프로젝트 소스의 루트에 `Gemfile` 파일을 포함합니다.

**Example Gemfile**  

```
source "https://rubygems.org"
gem 'sinatra'
gem 'json'
gem 'rack-parser'
```

`Gemfile` 파일이 있으면 Elastic Beanstalk는 `bundle install`을 실행하여 종속 항목을 설치합니다. 자세한 내용은 Bundler.io 웹 사이트의 [Gemfile](https://bundler.io/man/gemfile.5.html) 및 [Bundle](https://bundler.io/man/bundle.1.html) 페이지를 참조하세요.

**참고**  
Ruby 플랫폼에 사전 설치된 기본 버전 외에 다른 버전의 Puma를 사용할 수 있습니다. 이렇게 하려면 `Gemfile`에 버전을 지정하는 항목을 포함합니다. 사용자 지정된 `Gemfile`을 사용하여 Passenger 같은 다른 애플리케이션 서버를 지정할 수도 있습니다.  
두 경우 모두, 애플리케이션 서버를 시작하기 위해 `Procfile`을 구성해야 합니다.  
자세한 내용은 *[Procfile을 사용하여 애플리케이션 프로세스 구성](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ruby-platform-procfile.html)*을 참조하세요*.*

# Elastic Beanstalk에서 Procfile을 사용하여 애플리케이션 프로세스 구성.
<a name="ruby-platform-procfile"></a>

Ruby 애플리케이션을 시작하는 명령을 지정하려면 소스 번들의 루트에 `Procfile`라는 파일을 포함합니다.

**참고**  
Elastic Beanstalk는 Amazon Linux AMI Ruby 플랫폼 브랜치(이전 Amazon Linux 2)에서 이 기능을 지원하지 않습니다. Ruby 버전에 관계없이 이름에 *Puma* 또는 *Passenger*가 포함된 플랫폼 브랜치는 Amazon Linux 2에 선행하고 `Procfile` 기능을 지원하지 않습니다.

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

`Procfile`를 제공하지 않으면 Elastic Beanstalk가 기본 `Procfile`를 생성합니다. `Gemfile`에 Puma가 포함되어 있으면 Elastic Beanstalk은 사용자가 제공한 Puma 버전을 사용하려는 것으로 간주하고 다음과 같은 기본 `Procfile`을 생성합니다.

```
web: bundle exec puma -C /opt/elasticbeanstalk/config/private/pumaconf.rb
```

`Gemfile`에 Puma가 포함되어 있지 않으면 Elastic Beanstalk은 사전 설치된 Puma 애플리케이션 서버를 사용하는 것으로 간주하고 다음과 같은 기본 `Procfile`을 생성합니다. Amazon Linux 2 Ruby 플랫폼 브랜치에서는 사용자가 `Procfile`을 제공하지 않는 경우, Elastic Beanstalk이 항상 다음과 같은 기본 `Procfile`을 생성합니다.

```
web: puma -C /opt/elasticbeanstalk/config/private/pumaconf.rb
```

**참고**  
[2024년 10월 10일](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2024-10-10-al2-10-2024-retire.html)부로 마지막 Amazon Linux 2 기반 Ruby 플랫폼 브랜치가 사용 중지되었습니다. 현재 [지원되는 모든 Ruby 플랫폼 브랜치](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.ruby)는 Amazon Linux 2023을 기반으로 합니다. 마이그레이션에 대한 내용은 [Amazon Linux 2에서 Amazon Linux 2023으로 마이그레이션](using-features.migration-al.generic.from-al2.md)을 참조하세요.

Passenger 애플리케이션 서버를 사용하려면 다음 예제 파일을 사용하여 Passenger를 설치 및 사용하도록 Ruby 환경을 구성합니다.

1. 이 예제 파일을 사용하여 Passenger를 설치합니다.  
**Example Gemfile**  

   ```
   source 'https://rubygems.org'
   gem 'passenger'
   ```

1. 이 예제 파일을 사용하여 Elastic Beanstalk에서 Passenger를 시작하도록 지시합니다.  
**Example Procfile**  

   ```
   web: bundle exec passenger start /var/app/current --socket /var/run/puma/my_app.sock
   ```

**참고**  
Passenger를 사용하기 위해 nginx 프록시 서버의 구성을 변경할 필요가 없습니다. 다른 애플리케이션 서버를 사용하려면 요청을 애플리케이션에 올바르게 전달하도록 nginx 구성을 사용자 지정해야 할 수 있습니다.