

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

# Elastic Beanstalk Node.js 플랫폼 사용
<a name="create_deploy_nodejs.container"></a>

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

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

Elastic Beanstalk에서는 Elastic Beanstalk 환경의 EC2 인스턴스에서 실행하는 소프트웨어를 사용자 지정하는 데 사용할 수 있는 [구성 옵션](command-options.md)을 제공합니다. 애플리케이션에 필요한 [환경 변수를 구성](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)하고, Amazon S3에 대한 로그 교체를 활성화하며, 정적 파일이 포함된 애플리케이션 소스의 폴더를 프록시 서버에서 제공하는 경로로 매핑할 수 있습니다.

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

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

배포 중에 패키지를 설치하고 시작 명령을 제공하고 애플리케이션이 사용할 Node.js 버전을 지정하기 위해 소스 번들에 [`Package.json` 파일을 포함](nodejs-platform-dependencies.md#nodejs-platform-packagejson)할 수 있습니다. 종속성 버전을 잠그는 [`npm-shrinkwrap.json` 파일](nodejs-platform-shrinkwrap.md)을 포함할 수 있습니다.

Node.js 플랫폼은 정적 자산을 제공하고, 애플리케이션에 트래픽을 전달하며, 응답을 압축하는 프록시 서버를 포함합니다. 고급 시나리오를 위한 [기본 프록시 구성을 확장하거나 재정의](nodejs-platform-proxy.md)할 수 있습니다.

애플리케이션을 시작하는 데는 몇 가지 옵션이 있습니다. 소스 번들에 [Procfile](nodejs-configuration-procfile.md)을 추가하여 애플리케이션을 시작하는 명령을 지정할 수 있습니다. `Procfile`을 제공하지 않고 `package.json` 파일을 제공할 경우 Elastic Beanstalk가 `npm start`를 실행합니다. 둘 중 하나를 제공하지 않으면 Elastic Beanstalk에서 `app.js` 또는 `server.js` 파일을 이 순서대로 찾아서 스크립트를 실행합니다.

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

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

## Node.js 환경 구성
<a name="nodejs-platform-console"></a>

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

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

**Elastic Beanstalk 콘솔에서 Node.js 환경을 구성하려면**

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

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

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

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

### 컨테이너 옵션
<a name="nodejs-platform-console-settings"></a>

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

### 로그 옵션
<a name="nodejs-platform-console-logging"></a>

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

### 정적 파일
<a name="nodejs-platform-console-staticfiles"></a>

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

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

### 환경 속성
<a name="nodejs-platform-console-envprops"></a>

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

가 실행되는 Node.js 환경 내에서를 실행하여 환경 변수에 액세스할 AWS Elastic Beanstalk수 있습니다`process.env.ENV_VARIABLE`.

```
var endpoint = process.env.API_ENDPOINT
```

Node.js 플랫폼은 PORT 환경 변수를 프록시 서버가 트래픽을 전달할 포트로 설정합니다. 자세한 내용은 [프록시 서버 구성](nodejs-platform-proxy.md) 단원을 참조하십시오.

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

### Amazon Linux AMI(이전 Amazon Linux 2) Node.js 환경 구성
<a name="nodejs-platform-console.alami"></a>

다음 콘솔 소프트웨어 구성 범주는 Amazon Linux AMI 플랫폼 버전(이전 Amazon Linux 2)을 사용하는 Elastic Beanstalk Node.js 환경에서만 지원됩니다.

**참고**  
이 주제의 정보는 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="nodejs-platform-console-settings"></a>

구성 페이지에서 다음을 지정합니다.
+ **프록시 서버(Proxy server)** – Node.js 연결에 프록시하는 데 사용할 웹 서버를 지정합니다. 기본적으로 NGINX가 사용됩니다. **없음(none)**을 선택하면 정적 파일 매핑이 적용되지 않으며 GZIP 압축이 비활성화됩니다.
+ **Node.js 버전( version)** – Node.js의 버전을 지정합니다. 지원되는 Node.js 버전 목록은 *AWS Elastic Beanstalk 플랫폼* 안내서의 [https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)를 참조하세요.
+ **GZIP 압축( compression)** – GZIP 압축의 활성화 여부를 지정합니다. GZIP 압축은 기본적으로 활성화되어 있습니다.
+ **노드 명령(Node command)** – Node.js 애플리케이션을 시작할 때 사용하는 명령을 입력할 수 있습니다. 빈 문자열(기본값)은 Elastic Beanstalk에서 `app.js`와 `server.js`를 사용한 후 `npm start`를 사용합니다.

## Node.js 구성 네임스페이스
<a name="nodejs-namespaces"></a>

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

`aws:elasticbeanstalk:environment:proxy` 네임스페이스를 사용하여 환경 인스턴스에서 사용할 프록시를 선택할 수 있습니다. 다음 예제에서는 Apache HTTPD 프록시 서버를 사용하도록 환경을 구성합니다.

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

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

`aws:elasticbeanstalk:environment:proxy:staticfiles` 네임스페이스를 사용하여 정적 파일을 제공하도록 프록시를 구성할 수 있습니다. 자세한 내용과 예제는 [정적 파일 제공](environment-cfg-staticfiles.md) 섹션을 참조하세요.

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

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

Elastic Beanstalk Node.js 환경에서 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)을(를) 참조하세요.

### Node.js 플랫폼별 구성 옵션 — Amazon Linux AMI(AL1)
<a name="nodejs.alami.options"></a>

Elastic Beanstalk는 Amazon Linux AMI Node.js 플랫폼 버전에 대한 일부 플랫폼별 구성 옵션을 지원합니다. 애플리케이션보다 먼저 실행되는 프록시 서버, 실행할 Node.js의 특정 버전, 애플리케이션 실행 명령을 선택할 수 있습니다.

프록시 서버의 경우 NGINX 또는 Apache 프록시 서버를 사용할 수 있습니다. `none` 값을 `ProxyServer` 옵션으로 설정할 수 있습니다. 이 설정을 사용하면 Elastic Beanstalk는 프록시 서버 뒤가 아닌 독립 실행형으로 애플리케이션을 실행합니다. 사용자 환경에서 독립 실행형 애플리케이션을 실행하는 경우 NGINX가 트래픽을 전달하는 포트를 수신하도록 코드를 업데이트합니다.

```
var port = process.env.PORT || 8080;

app.listen(port, function() {
  console.log('Server running at http://127.0.0.1:%s', port);
});
```

### Node.js 언어 버전 — Amazon Linux AMI(AL1)
<a name="nodejs.alami.versions"></a>

지원되는 언어 버전의 측면에서 Node.js Amazon Linux AMI 플랫폼은 다른 Elastic Beanstalk 관리형 플랫폼과 다릅니다. 이는 각 Node.js 플랫폼 버전이 일부 Node.js 언어 버전만 지원하기 때문입니다. 지원되는 Node.js 버전 목록은 *AWS Elastic Beanstalk 플랫폼* 안내서의 [https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)를 참조하세요.

플랫폼별 구성 옵션을 사용하여 언어 버전을 설정할 수 있습니다. 지침은 [Node.js 환경 구성](#nodejs-platform-console) 섹션을 참조하세요. 또는 Elastic Beanstalk 콘솔을 사용하여 플랫폼 버전 업데이트의 일부로 환경에서 사용하는 Node.js 버전을 업데이트합니다.

**참고**  
현재 사용 중인 Node.js 버전에 대한 지원이 플랫폼에서 제거되면 [플랫폼 업데이트](using-features.platform.upgrade.md)를 수행하기 전에 버전 설정을 변경하거나 제거해야 합니다. 하나 이상의 Node.js 버전에 대해 보안 취약성이 발견된 경우 이러한 상황이 발생할 수 있습니다.  
이러한 상황이 발생하면 구성된 [NodeVersion](command-options-specific.md#command-options-nodejs)을 지원하지 않는 새 플랫폼 버전으로 업데이트할 수 없습니다. 새 환경을 생성할 필요가 없도록 하기 위해 *NodeVersion* 구성 옵션을 이전 플랫폼 버전과 새 플랫폼 버전에서 모두 지원하는 Node.js 버전으로 변경하거나 [옵션 설정을 제거](environment-configuration-methods-after.md)한 후 플랫폼 업데이트를 수행합니다.

**Elastic Beanstalk 콘솔에서 환경의 Node.js 버전을 구성하려면**

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

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

1. 환경 개요 페이지의 [**플랫폼**]에서 [**변경**]을 선택합니다.

1. **플랫폼 버전 업데이트(Update platform version)** 대화 상자에서 Node.js 버전을 선택합니다.  
![\[Elastic Beanstalk 업데이트 플랫폼 버전 확인\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/platform-nodejs-update-node-version.png)

1. **저장**을 선택합니다.

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

Node.js Amazon Linux AMI 플랫폼은 `aws:elasticbeanstalk:container:nodejs:staticfiles` 및 `aws:elasticbeanstalk:container:nodejs` 네임스페이스에서 추가 옵션을 정의합니다.

다음 구성 파일은 Elastic Beanstalk에 애플리케이션을 실행할 때 `npm start`을(를) 사용하도록 알려줍니다. 또한 프록시 유형을 Apache로 설정하고 압축을 활성화합니다. 마지막으로 두 개의 소스 디렉터리에서 정적 파일을 제공하도록 프록시를 구성합니다. 한 소스는 `statichtml` 소스 디렉터리의 웹 사이트 루트 아래 `html` 경로에 있는 HTML  파일입니다. 다른 소스는 `staticimages` 소스 디렉토리의 웹 사이트 루트 아래 `images` 경로에 있는 이미지 파일입니다.

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

```
option_settings:
  aws:elasticbeanstalk:container:nodejs: 
    NodeCommand: "npm start"
    ProxyServer: apache
    GzipCompression: true
  aws:elasticbeanstalk:container:nodejs:staticfiles:
    /html: statichtml
    /images: staticimages
```

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

# Elastic Beanstalk에서 Procfile을 사용하여 사용자 지정 시작 명령 구성
<a name="nodejs-configuration-procfile"></a>

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

**Example Procfile**  

```
web: node index.js
```

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

**참고**  
이 기능은 `aws:elasticbeanstalk:container:nodejs` 네임스페이스의 레거시 `NodeCommand` 옵션을 대체합니다.

# Elastic Beanstalk에서 애플리케이션 종속성 구성
<a name="nodejs-platform-dependencies"></a>

애플리케이션에는 `require()` 문에서 지정하는 모듈과 같이 일부 Node.js 모듈에 종속성이 있을 수 있습니다. 이러한 모듈은 `node_modules` 디렉터리에 저장됩니다. 애플리케이션이 실행될 경우 Node.js가 이 디렉터리에서 모듈을 로드합니다. 자세한 내용은 Node.js 문서의 [Loading from node\$1modules folders](https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders)를 참조하세요.

`package.json` 파일을 사용하여 이러한 모듈 종속성을 지정할 수 있습니다. Elastic Beanstalk가 이 파일을 감지하고 `node_modules` 디렉터리가 존재하지 않을 경우에 Elastic Beanstalk은 `npm install`를 *웹 앱*유저로 실행합니다. 이 `npm install` 명령은 Elastic Beanstalk가 미리 만드는 `node_modules` 디렉터리에 종속성을 설치합니다. 이 `npm install` 명령은 퍼블릭 npm 레지스트리 또는 기타 위지 `package.json` 파일에 나열되어 있는 패키지에 액세스합니다. 자세한 내용은 [npm Docs](https://docs.npmjs.com/about-the-public-npm-registry) 웹 사이트를 참조하세요.

Elastic Beanstalk가 `node_modules` 디렉터리를 감지할 경우, Elastic Beanstalk는 `package.json` 파일이 존재하더라도 `npm install`을 실행하지 않습니다. Elastic Beanstalk는 Node.js가 액세스하고 로드할 수 있도록 `node_modules` 디렉터리에서 종속성 패키지를 사용할 수 있다고 가정합니다.

다음 섹션에서는 해당 애플리케이션에 대한 Node.js 모듈 종속성을 설정하는 방법에 대한 추가 정보를 제공합니다.

**참고**  
.Elastic Beanstalk가 `npm install`을 실행 중일 때 배포 문제가 발생할 경우 다른 접근 방식을 고려하세요. 애플리케이션 소스 번들에 종속성 모듈과 함께 `node_modules` 디렉터리를 포함하세요. 이 작업을 수행할 경우 문제를 조사하는 동안 퍼블릭 npm 레지스트리에서 종속성을 설치하는 문제를 방지할 수 있습니다. 종속성 모듈은 로컬 디렉터리에서 제공되기 때문에 이 작업을 수행하면 배포 시간 단축에도 도움이 될 수도 있습니다. 자세한 내용은 [node\$1modules 디렉터리에 Node.js 종속성 포함](#nodejs-platform-nodemodules) 섹션을 참조하세요.

## package.json 파일로 Node.js 종속성 지정
<a name="nodejs-platform-packagejson"></a>

프로젝트 소스의 루트에 있는 `package.json` 파일을 포함하여 종속성 패키지를 지정하고 start 명령을 제공합니다. `package.json` 파일이 존재하고 프로젝트 소스의 루트에 `node_modules` 디렉터리가 없는 경우에는 Elastic Beanstalk가 `npm install`을 *웹 앱* 사용자로 실행하여 퍼블릭 npm 레지스트리의 종속성을 설치합니다. 또한 Elastic Beanstalk는 `start` 명령을 사용하여 애플리케이션을 시작합니다. `package.json` 파일에 대한 자세한 내용은 *npm Docs* 웹 사이트의 [Specifying dependencies in a `package.json` file](https://docs.npmjs.com/specifying-dependencies-and-devdependencies-in-a-package-json-file)을 참조하세요.

`scripts` 키워드를 사용하여 start 명령을 제공합니다. 현재 `aws:elasticbeanstalk:container:nodejs` 네임스페이스의 레거시 `NodeCommand` 옵션 대신 `scripts` 키워드가 사용됩니다.

**Example package.json – Express**  

```
{
    "name": "my-app",
    "version": "0.0.1",
    "private": true,
    "dependencies": {
      "ejs": "latest",
      "aws-sdk": "latest",
      "express": "latest",
      "body-parser": "latest"
    },
    "scripts": {
      "start": "node app.js"
    }
  }
```

**프로덕션 모드 및 개발 종속성**  
`package.json`파일에 종속성을 지정하려면 종속성 및 **DevDependencies** 특성을 사용하십시오. *dependencies* 속성은 프로덕션 환경에서 애플리케이션에 필요한 패키지를 지정합니다. *devDependencies* 속성은 로컬 개발 및 테스트에만 필요한 패키지를 지정합니다.

*DevDependencies* 패키지를 설치해야 하는 경우 NPM\$1USE\$1PRODUCTION 환경 속성을 `false`로 설정하십시오. 이 설정을 사용하면 npm install을 실행할 때 위의 옵션을 사용하지 않습니다. 그러면 *DevDependencies* 패키지가 설치됩니다.

## node\$1modules 디렉터리에 Node.js 종속성 포함
<a name="nodejs-platform-nodemodules"></a>

애플리케이션 코드와 함께 환경 인스턴스에 종속성 패키지를 배포하려면 프로젝트 소스의 루트에 있는 `node_modules`이라는 디렉터리에 종속성 패키지를 포함시킵니다. 자세한 내용은 *npm Docs* 웹 사이트의 [Downloading and installing packages locally](https://docs.npmjs.com/downloading-and-installing-packages-locally)를 참조하세요.

`node_modules` 디렉터리를 AL2023/AL2 Node.js 플랫폼 버전으로 배포하는 경우 Elastic Beanstalk에서는 사용자가 자체 종속성 패키지를 제공하고 있다고 가정하며 [package.json](#nodejs-platform-packagejson) 파일에 지정된 종속성을 설치하지 않습니다. Node.js는 `node_modules` 디렉터리에서 종속성을 찾습니다. 자세한 내용은 Node.js 문서의 [Loading from node\$1modules Folders](https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders)를 참조하세요.

**참고**  
Elastic Beanstalk에서 `npm install`을 실행 중일 때 배포 문제가 발생하면 해당 문제를 조사하는 동안 이 주제에서 해결 방법으로 설명된 접근 방식을 사용하는 것이 좋습니다.  
 

### Amazon Linux 2의 Node.js 고려 사항
<a name="nodejs-al2-considerations"></a>

*Amazon Linux 2*에서 실행되는 *Node.js* 플랫폼 브랜치를 사용하는 경우이 섹션을 읽어보세요.

#### Amazon Linux 2의 Node.js 고려 사항
<a name="nodejs-al2-considerations-detail"></a>

**참고**  
이 주제의 정보는 Amazon Linux 2에서 실행되는 Node.js 플랫폼 브랜치에 적용됩니다. 여기의 내용은 AL2-specific 기능 및 동작을 설명합니다. AL2023

**명령 변형**  
명령 옵션은 애플리케이션이 실행되는 Amazon Linux 2 플랫폼 브랜치에 포함된 npm 버전에 따라 달라집니다.
+ npm v6 - Elastic Beanstalk는 기본적으로 종속 항목을 프로덕션 모드에서 설치합니다. `npm install --production`명령을 사용합니다.
+ npm v7 이상 — Elastic Beanstalk는 *개발 종속성을* 생략합니다. `npm install --omit=dev`명령을 사용합니다.

위에 나열된 두 명령 모두 *DevDependencies* 패키지를 설치하지 않습니다.

**Git 종속성을 위한 SSH 및 HTTPS 프로토콜**  
2023년 3월 7일 Amazon Linux 2 플랫폼 릴리스부터 SSH 및 HTTPS 프로토콜을 사용하여 Git 리포지토리에서 패키지를 검색할 수 있습니다. 플랫폼 브랜치Node.js 16은 SSH 및 HTTPS 프로토콜을 모두 지원합니다. Node.js14는 HTTPS 프로토콜만 지원합니다.

**Example package.json —Node.js 16은 HTTPS와 SSH를 모두 지원합니다**  

```
    ...
    "dependencies": {
      "aws-sdk": "https://github.com/aws/aws-sdk-js.git",
      "aws-chime": "git+ssh://git@github.com:aws/amazon-chime-sdk-js.git"
    }
```

**버전 및 버전 범위**  
`package.json` 파일에서 `engines` 키워드를 사용하여 애플리케이션에서 사용할 Node.js 버전을 지정합니다. npm 표기법을 사용하여 버전 범위를 지정할 수도 있습니다. 버전 범위 구문에 대한 자세한 내용은 Node.js 웹 사이트에서 [Semantic Versioning using npm](https://nodejs.dev/learn/semantic-versioning-using-npm)를 참조하세요. Node.js `package.json` 파일의 `engines` 키워드는 `aws:elasticbeanstalk:container:nodejs` 네임스페이스의 레거시 `NodeVersion` 옵션을 대체합니다.

**중요**  
AL2023에서 실행되는 Node.js 플랫폼 브랜치에서는 버전 범위를 지정하는 기능을 사용할 수 없습니다. AL2023 기반의 특정 Node.js 브랜치 내에서는 하나의 Node.js 버전만 지원합니다. `package.json` 파일이 버전 범위를 지정하는 경우, 이것을 무시하고 기본적으로 Node.js의 플랫폼 브랜치 버전을 사용합니다.

**Example `package.json` – 단일 Node.js 버전**  

```
{
    ...
    "engines": { "node" : "14.16.0" }
  }
```

**Example `package.json` – Node.js 버전 범위**  

```
{
    ...
    "engines": { "node" : ">=10 <11" }
  }
```

버전 범위가 표시되면 Elastic Beanstalk는 해당 범위 내에서 플랫폼을 사용할 수 있는 최신 Node.js 버전을 설치합니다. 이 예에서 범위는 버전이 버전 10보다 크거나 같고 버전 11보다 작아야 함을 나타냅니다. 따라서 Elastic Beanstalk는 [지원되는 플랫폼](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)에서 사용할 수 있는 최신 Node.js 버전 10.x.y를 설치합니다.

플랫폼 브랜치에 해당하는 Node.js 버전만 지정할 수 있습니다. 예를 들어 Node.js 16 플랫폼 브랜치를 사용하는 경우 16.x.y Node.js 버전만 지정할 수 있습니다. npm에서 지원하는 버전 범위 옵션을 사용하여 유연성을 높일 수 있습니다. 각 플랫폼 브랜치에 유효한 Node.js 버전은 *AWS Elastic Beanstalk 플랫폼* 안내서의 [https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)를 참조하세요.

**참고**  
현재 사용 중인 Node.js 버전에 대한 지원이 플랫폼에서 제거되면 [플랫폼 업데이트](using-features.platform.upgrade.md)를 수행하기 전에 Node.js 버전 설정을 변경하거나 제거해야 합니다. 하나 이상의 Node.js 버전에 대해 보안 취약성이 발견된 경우 이러한 상황이 발생할 수 있습니다.  
이러한 상황이 발생하면 구성된 Node.js 버전을 지원하지 않는 새 플랫폼 버전으로 업데이트할 수 없습니다. 새 환경을 만들 필요가 없도록 하려면 `package.json`의 Node.js 버전 설정을 이전 플랫폼 버전과 새 버전 모두에서 지원하는 Node.js 버전으로 변경합니다. 이 항목의 앞부분에서 설명한 대로 지원되는 버전을 포함하는 Node.js 버전 범위를 지정할 수 있습니다. 설정을 제거한 후 새 소스 번들을 배포할 수도 있습니다.

# Elastic Beanstalk에서 npm shrinkwrap를 사용하여 종속성 잠금
<a name="nodejs-platform-shrinkwrap"></a>

배포할 때마다 Node.js 플랫폼은 `npm install`를 *웹 앱* 사용자로 실행합니다. 종속성의 새 버전이 있으면 애플리케이션을 배포할 때 해당 버전이 설치되며, 이로 인해 배포 시간이 더 오래 걸릴 수 있습니다.

애플리케이션의 종속 항목을 잠그는 `npm-shrinkwrap.json` 파일을 생성하여 종속 항목을 현재 버전으로 업그레이드하지 않을 수 있습니다.

```
$ npm install
$ npm shrinkwrap
wrote npm-shrinkwrap.json
```

소스 번들이 이 파일을 포함하여 종속 항목이 단 한 번만 설치되도록 합니다.

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

Elastic Beanstalk는 NGINX 또는 Apache HTTPD를 역방향 프록시로 사용하여 애플리케이션을 포트 80의 Elastic Load Balancing 로드 밸런서에 매핑합니다. 기본값은 NGINX입니다. Elastic Beanstalk는 확장하거나 자체 구성으로 완전히 재정의할 수 있는 기본 프록시 구성을 제공합니다.

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

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

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

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

Elastic Beanstalk Node.js 환경에서 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="nodejs-platform-proxy.alami.extending"></a>

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

기본 구성을 확장하려면 구성 파일로 `.conf`에 `/etc/nginx/conf.d` 파일을 추가합니다. 구체적인 예제는 [Node.js를 실행하는 EC2 인스턴스에서 HTTPS 종료](https-singleinstance-nodejs.md) 단원을 참조하세요.

Node.js 플랫폼은 PORT 환경 변수를 프록시 서버가 트래픽을 전달할 포트로 설정합니다. 이 코드 변수를 읽고 애플리케이션의 포트를 구성합니다.

```
    var port = process.env.PORT || 3000;

    var server = app.listen(port, function () {
        console.log('Server running at http://127.0.0.1:' + port + '/');
    });
```

기본 NGINX 구성은 `127.0.0.1:8081`의 `nodejs`라는 업스트림 서버로 트래픽을 전달합니다. 기본 구성을 제거하고 [구성 파일](ebextensions.md)에 사용자 지정으로 구성할 수 있습니다.

**Example .ebextensions/proxy.config**  
다음은 기본 구성을 제거하고 트래픽을 8081 대신 포트 5000으로 전달하도록 사용자 지정한 구성을 추가하는 예제입니다.  

```
files:
  /etc/nginx/conf.d/proxy.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      upstream nodejs {
        server 127.0.0.1:5000;
        keepalive 256;
      }

      server {
        listen 8080;

        if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
            set $year $1;
            set $month $2;
            set $day $3;
            set $hour $4;
        }
        access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
        access_log  /var/log/nginx/access.log  main;

        location / {
            proxy_pass  http://nodejs;
            proxy_set_header   Connection "";
            proxy_http_version 1.1;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        gzip on;
        gzip_comp_level 4;
        gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        location /static {
            alias /var/app/current/static;
        }

      }

  /opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh:
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash -xe
      rm -f /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
      service nginx stop 
      service nginx start

container_commands:
  removeconfig:
    command: "rm -f /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf"
```
예제 구성(`/etc/nginx/conf.d/proxy.conf`)은 `/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf`의 기본 구성을 토대로 기본 서버 블록과 압축 및 로그 설정, 정적 파일 매핑을 포함합니다.  
`removeconfig` 명령은 프록시 서버가 사용자 지정 구성을 사용하도록 컨테이너의 기본 구성을 제거합니다. Elastic Beanstalk는 각 구성이 배포될 때 기본 구성을 다시 만듭니다. 이 문제를 설명하기 위해 다음 예에서는 post-configuration-deployment hook(`/opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh`)가 추가됩니다. 이렇게 하면 기본 구성이 제거되고 프록시 서버가 다시 시작됩니다.

**참고**  
기본 구성은 이후 Node.js 플랫폼 버전에서 바뀔 수 있습니다. 사용자 지정할 때는 호환성이 보장되도록 최신 버전의 구성을 사용하십시오.

기본 구성을 재정의하는 경우 정적 파일 매핑과 GZIP 압축을 정의해야 합니다. 이는 플랫폼이 [표준 설정](create_deploy_nodejs.container.md#nodejs-namespaces)을 적용할 수 없기 때문입니다.