

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

# Amplify 애플리케이션의 빌드 구성 관리
<a name="build-settings-configuration"></a>

Amplify 배포에 대한 빌드 설정 및 구성을 사용자 지정할 수 있습니다. 애플리케이션을 배포하면 Amplify는 프론트엔드 프레임워크와 관련 빌드 설정을 자동으로 감지합니다. 애플리케이션의 빌드 사양(buildspec)에서 환경 변수 추가, 빌드 명령 실행, 빌드 존속성 지정 등 빌드 설정을 사용자 지정할 수 있습니다.

Amplify의 기본 빌드 이미지는 여러 패키지와 종속성이 사전 설치되어 제공되지만, 라이브 패키지 업데이트 기능을 사용하여 특정 버전을 지정하거나 항상 최신 버전을 설치하도록 설정할 수도 있습니다. 기본 컨테이너를 사용한 빌드에서 설치 시간이 오래 걸리는 특정 종속성이 있다면, 자체 사용자 지정 빌드 이미지를 생성할 수도 있습니다. 또한 애플리케이션 배포에 필요한 CPU, 메모리, 디스크 공간을 제공하도록 빌드 인스턴스 크기를 사용자 지정할 수 있습니다.

빌드는 Git 리포지토리에 커밋될 때마다, 또는 새로운 배포가 있을 때 자동으로 시작됩니다. Git 리코지토리 커밋 없이도 빌드를 시작하도록 수신 웹후크 기능을 설정할 수 있습니다.

빌드 알림 기능을 사용하면 빌드 성공 및 실패에 대한 정보를 팀 구성원과 공유할 수 있습니다.

**Topics**
+ [Amplify 애플리케이션의 빌드 설정 구성](build-settings.md)
+ [빌드 이미지 사용자 지정](custom-build-image.md)
+ [Amplify 애플리케이션의 빌드 인스턴스 구성](custom-build-instance.md)
+ [빌드를 시작하기 위한 수신 웹후크 생성](create-incoming-webhook.md)
+ [빌드에 대한 이메일 알림 설정](notifications.md)

# Amplify 애플리케이션의 빌드 설정 구성
<a name="build-settings"></a>

애플리케이션을 배포하면 Amplify는 Git 리포지토리에서 앱의 `package.json` 파일을 검사하여 프론트엔드 프레임워크 및 관련 빌드 설정을 자동으로 감지합니다. 앱의 빌드 설정을 저장하는 옵션은 다음과 같습니다.
+ Amplify 콘솔에 빌드 설정 저장 - Amplify 콘솔은 빌드 설정을 자동 감지하여 Amplify 콘솔을 통해 액세스할 수 있도록 저장합니다. Amplify는 리포지토리에 저장된 `amplify.yml` 파일이 없는 한 모든 브랜치에 이러한 설정을 적용합니다.
+ 리포지토리에 빌드 설정 저장 - `amplify.yml` 파일을 다운로드하여 리포지토리의 루트에 추가합니다.

**참고**  
앱이 연속 배포되도록 설정하고 git 리포지토리에 연결된 경우에만 Amplify 콘솔의 **호스팅** 메뉴에 **빌드 설정**이 표시됩니다. 이러한 유형의 배포에 대한 지침은 [시작하기](getting-started.md)를 참조하세요.

# 빌드 사양 참조
<a name="yml-specification-syntax"></a>

Amplify 애플리케이션의 빌드 사양(buildspec)은 Amplify가 빌드를 실행하는 데 사용하는 YAML 설정 및 빌드 명령의 모음입니다. 다음 목록은 이러한 설정과 사용 방법을 설명합니다.

**버전**  
Amplify YAML 버전 번호입니다.

**appRoot**  
이 애플리케이션이 있는 리포지토리 내 경로입니다. *여러 개의 애플리케이션이 정의되어 있지 않으면 무시됩니다.*

**env**  
이 섹션에 환경 변수를 추가합니다. 콘솔을 사용하여 환경 변수를 추가할 수도 있습니다.

**백엔드**  
Amplify CLI 명령을 실행하여 백엔드 프로비저닝, Lambda 함수 업데이트 또는 GraphQL 스키마를 연속 배포의 일환으로 수행합니다.

**프런트엔드**  
프론트엔드 빌드 명령을 실행합니다.

**테스트**  
테스트 단계에서 명령을 실행합니다. [앱에 테스트를 추가](running-tests.md)하는 방법에 대해 알아봅니다.

**빌드 단계**  
프론트엔드와 백엔드, 테스트에는 빌드의 각 시퀀스 동안 실행되는 명령을 나타내는 세 가지 *단계*가 있습니다.  
+  **preBuild** - preBuild 스크립트는 실제 빌드가 시작되기 전에 실행되지만 Amplify가 종속성을 설치한 후에 실행됩니다.
+  **build** - 사용자의 빌드 명령입니다.
+  **postBuild** - 사후 빌드 스크립트는 빌드가 종료되고 Amplify가 필요한 모든 결과물을 출력 디렉터리에 복사한 후 실행됩니다.

**buildpath**  
빌드를 실행하는 데 사용할 경로입니다. Amplify는 이 경로를 사용하여 빌드 아티팩트를 찾습니다. 경로를 지정하지 않으면 Amplify는 모노레포 앱 루트를 사용합니다(예: `apps/app`).

**artifacts>base-directory**  
빌드 아티팩트가 있는 디렉터리입니다.

**artifacts>files**  
배포하려는 아티팩트의 파일을 지정합니다. 모든 파일을 포함하려면 `**/*`를 입력합니다.

**cache**  
빌드 시점의 종속성(예: *node\$1modules* 폴더)을 지정합니다. 첫 번째 빌드에서는 여기서 지정한 경로가 캐싱되며, 이후 빌드에서는 Amplify가 명령어를 실행하기 전에 동일한 경로에 캐시를 복원합니다.  
Amplify는 제공된 모든 캐시 경로를 프로젝트 루트 기준으로 상대 경로로 처리합니다. 다만, 프로젝트 루트 외부로의 경로 이동은 허용하지 않습니다. 예를 들어, 절대 경로를 지정하면 빌드는 오류 없이 성공하지만, 해당 경로는 캐싱되지 않습니다.

## 빌드 사양 YAML 구문 참조
<a name="build-yaml-syntax"></a>

다음의 빌드 사양 예제는 기본 YAML 구문을 나타냅니다.

```
version: 1
env:
  variables:
    key: value
backend:
  phases:
    preBuild:
      commands:
        - *enter command*
    build:
      commands:
        - *enter command*
    postBuild:
        commands:
        - *enter command*
frontend:
  buildpath:
  phases:
    preBuild:
      commands:
        - cd react-app
        - npm ci
    build:
      commands:
        - npm run build
  artifacts:
    files:
        - location
        - location
    discard-paths: yes
    baseDirectory: location
  cache:
    paths:
        - path # A cache path relative to the project root
        - path # Traversing outside of the project root is not allowed
test:
  phases:
    preTest:
      commands:
        - *enter command*
    test:
      commands:
        - *enter command*
    postTest:
      commands:
        - *enter command*
  artifacts:
    files:
        - location
        - location
    configFilePath: *location*
    baseDirectory: *location*
```

# 빌드 사양 편집
<a name="edit-build-settings"></a>

Amplify 콘솔에서 빌드 사양(buildspec)을 편집하여 애플리케이션의 빌드 설정을 사용자 지정할 수 있습니다. 이러한 빌드 설정은 Git 리포지토리에 `amplify.yml` 파일이 저장된 브랜치를 제외하고 앱의 모든 브랜치에 적용됩니다.

**Amplify 콘솔에서 빌드 설정을 편집하려면**

1. 에 로그인 AWS Management Console 하고 [Amplify 콘솔](https://console.aws.amazon.com/amplify/)을 엽니다.

1. 빌드 설정을 편집하려는 앱을 선택합니다.

1. 탐색 창에서 **호스팅**을 선택한 다음 **빌드 설정**을 선택합니다.

1. **빌드 설정** 페이지의 **앱 빌드 사양** 섹션에서 **편집**을 선택합니다.

1. **빌드 사양 편집** 창에서 업데이트를 입력합니다.

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

다음 항목에 설명된 예제를 사용하여 특정 시나리오에 대한 빌드 설정을 업데이트할 수 있습니다.

**Topics**
+ [스크립팅을 사용하여 브랜치별 빌드 설정](#branch-specific-build-settings)
+ [하위 폴더로 이동하기 위한 명령 설정](#navigating-to-a-subfolder)
+ [1세대 앱의 프론트엔드를 사용하여 백엔드 배포](#frontend-with-backend)
+ [출력 폴더 설정](#setting-the-output-folder)
+ [빌드의 일부로 패키지 설치](#installing-packages-as-part-of-your-build)
+ [프라이빗 npm 레지스트리 사용](#using-a-private-npm-registry)
+ [OS 패키지 설치](#installing-os-packages)
+ [모든 빌드에 대한 키-값 스토리지 설정](#key-value-storage-for-every-build)
+ [커밋을 위한 빌드 건너뛰기](#skip-build-for-a-commit)
+ [모든 커밋에서 자동 빌드 끄기](#disable-automatic-builds)
+ [diff 기반 프론트엔드 빌드 및 배포 구성](#enable-diff-deploy)
+ [1세대 앱을 위한 diff 기반 백엔드 빌드 구성](#enable-diff-backend)

## 스크립팅을 사용하여 브랜치별 빌드 설정
<a name="branch-specific-build-settings"></a>

배시 쉘 스크립팅을 사용하여 브랜치별 빌드 설정을 지정할 수 있습니다. 예를 들어 다음 스크립트는 시스템 환경 변수 *\$1AWS\$1BRANCH*를 사용하여 브랜치 이름이 *main*인 경우 한 세트의 명령을 실행하고, 브랜치 이름이 *dev*인 경우 다른 세트의 명령을 실행합니다.

```
frontend:
  phases:
    build:
      commands:
        - if [ "${AWS_BRANCH}" = "main" ]; then echo "main branch"; fi
        - if [ "${AWS_BRANCH}" = "dev" ]; then echo "dev branch"; fi
```

## 하위 폴더로 이동하기 위한 명령 설정
<a name="navigating-to-a-subfolder"></a>

모노레포의 경우 사용자는 빌드를 실행하기 위해 폴더로 연속적으로 `cd`할 수 있기를 원합니다. `cd` 명령을 실행한 후에는 빌드의 모든 스테이지에 적용되므로 별도의 단계에서 명령을 반복하지 않아도 됩니다.

```
version: 1
env:
  variables:
    key: value
frontend:
  phases:
    preBuild:
      commands:
        - cd react-app
        - npm ci
    build:
      commands:
        - npm run build
```

## 1세대 앱의 프론트엔드를 사용하여 백엔드 배포
<a name="frontend-with-backend"></a>

**참고**  
이 섹션은 Amplify Gen 1 애플리케이션에만 적용됩니다. 1세대 백엔드는 Amplify Studio 및 Amplify 명령줄 인터페이스(CLI)를 사용하여 생성합니다.

`amplifyPush` 명령은 백엔드 배포에 도움을 제공하는 도우미 스크립트입니다. 아래의 빌드 설정은 현재 브랜치에 대해 배포할 올바른 백엔드 환경을 자동으로 결정합니다.

```
version: 1
env:
  variables:
    key: value
backend:
  phases:
    build:
      commands:
        - amplifyPush --simple
```

## 출력 폴더 설정
<a name="setting-the-output-folder"></a>

다음 빌드 설정에서는 출력 디렉터리를 퍼블릭 폴더로 설정합니다.

```
frontend:
  phases:
    commands:
      build:
        - yarn run build
  artifacts:
    baseDirectory: public
```

## 빌드의 일부로 패키지 설치
<a name="installing-packages-as-part-of-your-build"></a>

빌드하는 동안 `npm` 또는 `yarn` 명령을 사용하여 패키지를 설치할 수 있습니다.

```
frontend:
  phases:
    build:
      commands:
        - npm install -g <package>
        - <package> deploy
        - yarn run build
  artifacts:
    baseDirectory: public
```

## 프라이빗 npm 레지스트리 사용
<a name="using-a-private-npm-registry"></a>

빌드 설정에서 프라이빗 레지스트리에 대한 참조를 추가하거나 환경 변수로 추가할 수 있습니다.

```
build:
  phases:
    preBuild:
      commands:
        - npm config set <key> <value>
        - npm config set registry https://registry.npmjs.org
        - npm config set always-auth true
        - npm config set email hello@amplifyapp.com
        - yarn install
```

## OS 패키지 설치
<a name="installing-os-packages"></a>

Amplify의 AL2023 이미지는 이름이 `amplify`인 권한이 없는 사용자를 사용하여 코드를 실행합니다. Amplify는 이 사용자에게 Linux `sudo` 명령을 사용하여 OS 명령을 실행할 수 있는 권한을 부여합니다. 누락된 종속성에 OS 패키지를 설치하려는 경우 `yum` 및 `rpm`과 같은 명령을 `sudo`와 함께 사용할 수 있습니다.

다음 예제 빌드 섹션에서는 `sudo` 명령을 사용하여 OS 패키지를 설치하기 위한 구문을 보여줍니다.

```
build:
  phases:
    preBuild:
      commands:
        - sudo yum install -y <package>
```

## 모든 빌드에 대한 키-값 스토리지 설정
<a name="key-value-storage-for-every-build"></a>

`envCache`은(는) 빌드 시 키-값 스토리지를 제공합니다 `envCache`에 저장된 값은 빌드 중에만 수정할 수 있으며 다음 빌드에서 재사용할 수 있습니다. `envCache`를 사용하여 배포된 환경에 정보를 저장하고 연속 빌드에서 빌드 컨테이너에 사용할 수 있습니다. `envCache`에 저장된 값과 달리, 빌드 중 환경 변수의 변경 사항은 미래 빌드에 지속되지 않습니다.

사용 예:

```
envCache --set <key> <value>
envCache --get <key>
```

## 커밋을 위한 빌드 건너뛰기
<a name="skip-build-for-a-commit"></a>

특정 커밋에서 자동 빌드를 건너뛰려면 커밋 메시지 끝에 **[skip-cd]** 텍스트를 포함합니다.

## 모든 커밋에서 자동 빌드 끄기
<a name="disable-automatic-builds"></a>

모든 코드 커밋에 대해 자동 빌드를 끄도록 Amplify를 구성할 수 있습니다. 설정하려면 **앱 설정**, **브랜치 설정**을 선택한 다음 연결된 브랜치가 있는 **브랜치** 섹션을 찾습니다. 브랜치를 선택한 다음 **작업**, **자동 빌드 비활성화**를 선택합니다. 해당 브랜치에 대한 새 커밋은 더 이상 새 빌드를 트리거하지 않습니다.

## diff 기반 프론트엔드 빌드 및 배포 구성
<a name="enable-diff-deploy"></a>

diff 기반 프론트엔드 빌드를 사용하도록 Amplify를 구성할 수 있습니다. 활성화 시 각 빌드를 시작할 때 Amplify가 기본적으로 사용자의 `appRoot` 또는 `/src/` 폴더에서 diff 실행을 시도합니다. Amplify가 차이점을 발견하지 못하면 프론트엔드 빌드, 테스트(구성된 경우) 및 배포 단계를 건너뛰고 호스팅된 앱을 업데이트하지 않습니다.

**diff 기반 프론트엔드 빌드 및 배포를 구성하려면**

1. 에 로그인 AWS Management Console 하고 [Amplify 콘솔](https://console.aws.amazon.com/amplify/)을 엽니다.

1. diff 기반 프론트엔드 빌드를 구성하고 배포할 앱을 선택합니다.

1. 탐색 창에서 **호스팅**, **환경 변수**를 선택합니다.

1. **환경 변수** 섹션에서 **변수 관리**를 선택합니다.

1. 환경 변수를 구성하는 절차는 diff 기반 프론트엔드 빌드 및 배포의 활성화 여부에 따라 달라집니다.
   + diff 기반 프론트엔드 빌드 및 배포를 활성화하려면

     1. **변수 관리** 섹션의 **변수**에 `AMPLIFY_DIFF_DEPLOY`를 입력합니다.

     1. **값**에 `true`를 입력합니다.
   + diff 기반 프론트엔드 빌드 및 배포를 비활성화하려면

     1. 다음 중 하나를 수행하십시오.
       + **변수 관리** 섹션에서 `AMPLIFY_DIFF_DEPLOY`를 찾습니다. **값**에 `false`를 입력합니다.
       + `AMPLIFY_DIFF_DEPLOY` 환경 변수를 제거합니다.

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

선택적으로 `AMPLIFY_DIFF_DEPLOY_ROOT` 환경 변수를 설정하여 기본 경로를 리포지토리의 루트와 관련된 경로(예: `dist`)로 재정의할 수 있습니다.

## 1세대 앱을 위한 diff 기반 백엔드 빌드 구성
<a name="enable-diff-backend"></a>

**참고**  
이 섹션은 Amplify Gen 1 애플리케이션에만 적용됩니다. Gen 1 백엔드는 Amplify Studio 및 Amplify 명령줄 인터페이스(CLI)를 사용하여 생성합니다.

`AMPLIFY_DIFF_BACKEND` 환경 변수를 사용하여 diff 기반 백엔드 빌드를 사용하도록 Amplify Hosting을 구성할 수 있습니다. diff 기반 백엔드 빌드를 활성화하면 각 빌드를 시작할 때 Amplify가 리포지토리의 `amplify` 폴더에서 diff 실행을 시도합니다. Amplify에서 차이점을 발견하지 못하면 백엔드 빌드 단계를 건너뛰고 백엔드 리소스를 업데이트하지 않습니다. 프로젝트의 리포지토리에 `amplify` 폴더가 없는 경우, Amplify는 `AMPLIFY_DIFF_BACKEND` 환경 변수 값을 무시합니다.

현재 백엔드 단계의 빌드 설정에 사용자 지정 명령이 지정되어 있는 경우, 조건부 백엔드 빌드는 작동하지 않습니다. 이러한 사용자 지정 명령을 실행하려면 앱의 `amplify.yml` 파일에 있는 빌드 설정의 프론트엔드 단계로 해당 명령을 이동해야 합니다.

**diff 기반 백엔드 빌드를 구성하려면**

1. 에 로그인 AWS Management Console 하고 [Amplify 콘솔](https://console.aws.amazon.com/amplify/)을 엽니다.

1. diff 기반 백엔드 빌드를 구성할 앱을 선택합니다.

1. 탐색 창에서 **호스팅**, **환경 변수**를 선택합니다.

1. **환경 변수** 섹션에서 **변수 관리**를 선택합니다.

1. 환경 변수를 구성하는 절차는 diff 기반 백엔드 빌드의 활성화 여부에 따라 달라집니다.
   + diff 기반 백엔드 빌드를 활성화하려면

     1. **변수 관리** 섹션의 **변수**에 `AMPLIFY_DIFF_BACKEND`를 입력합니다.

     1. **값**에 `true`를 입력합니다.
   + diff 기반 백엔드 빌드를 비활성화하려면

     1. 다음 중 하나를 수행하십시오.
       + **변수 관리** 섹션에서 `AMPLIFY_DIFF_BACKEND`를 찾습니다. **값**에 `false`를 입력합니다.
       + `AMPLIFY_DIFF_BACKEND` 환경 변수를 제거합니다.

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

# 모노레포 빌드 설정 구성
<a name="monorepo-configuration"></a>

단일 리포지토리에 여러 프로젝트 또는 마이크로서비스를 저장하는 것을 모노레포라고 합니다. Amplify Hosting을 사용하면 여러 빌드 구성 또는 브랜치 구성을 만들지 않고도 애플리케이션을 모노레포로 배포할 수 있습니다.

Amplify는 일반 모노레포 앱뿐만 아니라 npm 워크스페이스, pnpm 워크스페이스, Yarn 워크스페이스, Nx 및 Turborepo를 사용하여 생성된 모노레포 앱을 지원합니다. 앱 배포 시 Amplify는 사용 중인 모노레포 빌드 도구를 자동으로 감지합니다. Amplify는 npm 워크스페이스, Yarn 워크스페이스 또는 Nx의 앱에 대한 빌드 설정을 자동으로 적용합니다. Turborepo와 pnpm 앱에는 추가 구성이 필요합니다. 자세한 내용은 [Turborepo 및 pnpm 모노레포 앱 구성](#turborepo-pnpm-monorepo-configuration) 단원을 참조하십시오.

Amplify 콘솔에서 모노레포에 대한 빌드 설정을 저장하거나 `amplify.yml` 파일을 다운로드하여 리포지토리의 루트에 추가할 수 있습니다. Amplify는 리포지토리에서 `amplify.yml` 파일을 찾지 않는 한, 콘솔에 저장된 설정을 모든 브랜치에 적용합니다. `amplify.yml` 파일이 있는 경우 해당 설정은 Amplify 콘솔에 저장된 모든 빌드 설정을 재정의합니다.

## 모노레포 빌드 사양 YAML 구문 참조
<a name="monorepo-yml-syntax"></a>

모노레포 빌드 사양의 YAML 구문은 단일 애플리케이션이 포함된 리포지토리의 YAML 구문과 다릅니다. 모노레포의 경우 애플리케이션 목록에서 각 프로젝트를 선언합니다. 모노레포 빌드 사양에 선언하는 각 애플리케이션에 대해 다음과 같은 추가 `appRoot` 키를 제공해야 합니다.

**appRoot**  
애플리케이션이 시작되는 리포지토리 내의 루트입니다. 이 키는 반드시 존재해야 하며 `AMPLIFY_MONOREPO_APP_ROOT` 환경 변수와 동일한 값을 가져야 합니다. 이 환경 변수 설정에 대한 지침은 [AMPLIFY\$1MONOREPO\$1APP\$1ROOT 환경 변수 설정](#setting-monorepo-environment-variable) 섹션을 참조하세요.

다음 모노레포 빌드 사양 예제는 동일한 리포지토리에서 여러 Amplify 애플리케이션을 선언하는 방법을 설명합니다. 두 앱 `react-app`, `angular-app`은 `applications` 목록에 선언되어 있습니다. 각 앱의 `appRoot` 키는 앱이 리포지토리의 `apps` 루트 폴더에 있음을 나타냅니다.

`buildpath` 속성은 모노레포 프로젝트 루트에서 앱을 실행하고 빌드하도록 `/`로 설정되어 있습니다. `baseDirectory` 속성은 `buildpath`의 상대 경로입니다.

### 모노레포 빌드 사양 YAML 구문
<a name="monorepo-build-yaml-syntax"></a>

```
version: 1
applications:
  - appRoot: apps/react-app
    env:
      variables:
        key: value
    backend:
      phases:
        preBuild:
          commands:
            - *enter command*
        build:
          commands:
            - *enter command*
        postBuild:
            commands:
            - *enter command*
    frontend:
      buildPath: / # Run install and build from the monorepo project root
      phases:
        preBuild:
          commands:
            - *enter command*
            - *enter command*
        build:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        discard-paths: yes
        baseDirectory: location
      cache:
        paths:
            - path
            - path
    test:
      phases:
        preTest:
          commands:
            - *enter command*
        test:
          commands:
            - *enter command*
        postTest:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        configFilePath: *location*
        baseDirectory: *location*
  - appRoot: apps/angular-app
    env:
      variables:
        key: value
    backend:
      phases:
        preBuild:
          commands:
            - *enter command*
        build:
          commands:
            - *enter command*
        postBuild:
            commands:
            - *enter command*
    frontend:
      phases:
        preBuild:
          commands:
            - *enter command*
            - *enter command*
        build:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        discard-paths: yes
        baseDirectory: location
      cache:
        paths:
            - path
            - path
    test:
      phases:
        preTest:
          commands:
            - *enter command*
        test:
          commands:
            - *enter command*
        postTest:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        configFilePath: *location*
        baseDirectory: *location*
```

다음 예제 빌드 사양을 사용하는 앱은 프로젝트 루트에서 빌드되며, 빌드 아티팩트는 `/packages/nextjs-app/.next`에 위치합니다.

```
applications:
  - frontend:
      buildPath: '/'  # run install and build from monorepo project root
      phases:
        preBuild:
          commands:
            - npm install
        build:
          commands:
            - npm run build --workspace=nextjs-app
      artifacts:
        baseDirectory: packages/nextjs-app/.next
        files:
          - '**/*'
      cache:
        paths:
          - node_modules/**/*
    appRoot: packages/nextjs-app
```

## AMPLIFY\$1MONOREPO\$1APP\$1ROOT 환경 변수 설정
<a name="setting-monorepo-environment-variable"></a>

모노레포에 저장된 앱을 배포하는 경우, 앱의 `AMPLIFY_MONOREPO_APP_ROOT` 환경 변수는 리포지토리의 루트를 기준으로 앱 루트 경로와 동일한 값을 가져야 합니다. 예를 들어, 이름이 `apps`으로 지정된 루트 폴더가 있고 `app1`, `app2`, `app3`을 포함하는 `ExampleMonorepo`라는 이름의 모노레포는 다음 디렉터리 구조를 가집니다.

```
ExampleMonorepo
  apps
    app1
    app2
    app3
```

이 예제에서 `app1`에 대한 `AMPLIFY_MONOREPO_APP_ROOT` 환경 변수의 값은 `apps/app1`입니다.

Amplify 콘솔을 사용하여 모노레포 앱을 배포하면 콘솔은 앱의 루트 경로에 지정한 값을 사용하여 `AMPLIFY_MONOREPO_APP_ROOT` 환경 변수를 자동으로 설정합니다. 그러나 모노 리포지토리 앱이 이미 Amplify에 있거나를 사용하여 배포된 경우 Amplify 콘솔의 `AMPLIFY_MONOREPO_APP_ROOT` 환경 변수 섹션에서 **환경 변수를** 수동으로 설정해야 AWS CloudFormation합니다.

### 배포 중 AMPLIFY\$1MONOREPO\$1APP\$1ROOT 환경 변수 자동 설정
<a name="setting-monorepo-environmnet-variable-automatically"></a>

다음 지침은 Amplify 콘솔을 사용하여 모노레포 앱을 배포하는 방법을 설명합니다. Amplify는 콘솔에 지정한 앱의 루트 폴더를 사용하여 `AMPLIFY_MONOREPO_APP_ROOT` 환경 변수를 자동으로 설정합니다.

**Amplify 콘솔을 사용하여 모노레포 앱을 배포하려면**

1. 에 로그인 AWS Management Console 하고 [Amplify 콘솔](https://console.aws.amazon.com/amplify/)을 엽니다.

1. 오른쪽 상단 모서리에서 **새 앱 생성**을 선택합니다.

1. **Amplify로 빌드 시작** 페이지에서 Git 공급자를 선택하고 **다음**을 선택합니다.

1. **리포지토리 브랜치 추가** 페이지에서 다음을 수행합니다.

   1. 목록에서 리포지토리의 이름을 선택합니다.

   1. 사용할 브랜치의 이름을 선택합니다.

   1. **내 앱은 모노레포임**을 선택합니다.

   1. 모노레포에 앱 경로를 입력합니다(예: **apps/app1**).

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

1. **앱 설정** 페이지에서 기본 설정을 사용하거나 앱의 빌드 설정을 사용자 지정할 수 있습니다. **환경 변수** 섹션에서 Amplify가 `AMPLIFY_MONOREPO_APP_ROOT`를 4d단계에서 지정한 경로로 설정합니다.

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

1. **검토** 페이지에서 **저장 및 배포**를 선택합니다.

### 기존 앱에 AMPLIFY\$1MONOREPO\$1APP\$1ROOT 환경 변수 설정
<a name="setting-monorepo-environment-variable-manually"></a>

다음 지침에 따라 Amplify에 이미 배포되었거나 CloudFormation을 사용하여 만든 앱의 `AMPLIFY_MONOREPO_APP_ROOT` 환경 변수를 수동으로 설정합니다.

**기존 앱에 AMPLIFY\$1MONOREPO\$1APP\$1ROOT 환경 변수를 설정하려면**

1. 에 로그인 AWS Management Console 하고 [Amplify 콘솔](https://console.aws.amazon.com/amplify/)을 엽니다.

1. 환경 변수를 설정할 앱 이름을 선택합니다.

1. 탐색 창에서 **호스팅**을 선택한 다음 **환경 변수**를 선택합니다.

1. **환경 변수** 페이지에서 **변수 관리**를 선택합니다.

1. **변수 관리** 섹션에서 다음을 수행합니다.

   1. **새로 추가**를 선택합니다.

   1. **변수**에 키 `AMPLIFY_MONOREPO_APP_ROOT`를 입력합니다.

   1. **값**에는 앱 경로를 입력합니다(예: **apps/app1**).

   1. **브랜치**의 경우 Amplify가 기본적으로 환경 변수를 모든 브랜치에 적용합니다.

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

## Turborepo 및 pnpm 모노레포 앱 구성
<a name="turborepo-pnpm-monorepo-configuration"></a>

Turborepo와 pnpm 워크스페이스 모노레포 빌드 도구는 `.npmrc` 파일에서 구성 정보를 가져옵니다. 이러한 도구 중 하나로 만든 모노레포 앱을 배포할 때는 프로젝트 루트 디렉터리에 `.npmrc` 파일이 있어야 합니다.

`.npmrc` 파일에서 노드 패키지 설치를 위한 링커를 `hoisted`로 설정합니다. 파일에 다음 줄을 복사할 수 있습니다.

```
node-linker=hoisted
```

`.npmrc` 파일 및 설정에 대한 자세한 내용은 *pnpm 설명서*의 [pnpm .npmrc](https://pnpm.io/next/npmrc)를 참조하세요.

Pnpm은 Amplify 기본 빌드 컨테이너에 포함되지 않습니다. pnpm 워크스페이스 및 Turborepo 앱의 경우 앱의 빌드 설정 `preBuild` 단계에서 pnpm을 설치하는 명령을 추가해야 합니다.

빌드 사양에서 발췌한 다음 예시는 pnpm 설치 명령이 포함된 `preBuild` 단계를 보여줍니다.

```
version: 1
applications:
  - frontend:
      phases:
        preBuild:
          commands:
            - npm install -g pnpm
```

# 빌드 이미지 사용자 지정
<a name="custom-build-image"></a>

사용자 지정 빌드 이미지를 사용하여 Amplify 앱에 사용자 지정된 빌드 환경을 제공할 수 있습니다. Amplify 컨테이너를 사용하여 빌드 중에 설치하는 데 오랜 시간이 걸리는 특정 종속성이 있는 경우, 자체 Docker 이미지를 생성하여 빌드 중에 참조할 수 있습니다. 이미지는 Amazon Elastic Container Registry Public에 호스팅될 수 있습니다.

사용자 지정 빌드 이미지가 Amplify 빌드 이미지로 작동하려면 다음 요구 사항을 충족해야 합니다.

**사용자 지정 빌드 이미지 요구 사항**

1. GNU C Library(glibc)를 지원하는 Linux 배포판(예: Amazon Linux)을 지원하며 x86-64 아키텍처용으로 컴파일되었습니다.

1.  **cURL**: 사용자 지정 이미지를 시작하는 경우 빌드 러너를 컨테이너로 다운로드하므로 cURL이 있어야 합니다. 이 종속성이 누락된 경우, 빌드 러너가 출력을 생성할 수 없으므로 빌드는 출력 없이 즉시 실패합니다.

1.  **Git**: Git 리포지토리를 복제하려면 Git를 이미지에 설치해야 합니다. 이 종속성이 누락된 경우, **리포지토리 복제** 단계는 실패합니다.

1.  **OpenSSH**: 리포지토리를 안전하게 복제하려면 OpenSSH는 빌드 중에 일시적으로 SSH 키를 설정해야 합니다. OpenSSH 패키지는 빌드 러너가 이를 수행하는 데 필요한 명령을 제공합니다.

1.  **Bash 및 Bourne 쉘**: 이 두 가지 유틸리티는 빌드할 때 명령을 실행하는 데 사용합니다. 설치하지 않으면 시작하기도 전에 빌드가 실패할 수 있습니다.

1.  **Node.JS\$1NPM**: Amazon의 빌드 러너에서는 노드를 설치하지 않습니다. 대신 이미지에 설치된 노드와 NPM을 사용합니다. 이는 NPM 패키지 또는 노드 특정 명령을 요구하는 빌드에만 필수 항목입니다. 하지만 이미 보유하고 있는 경우 Amplify 빌드 러너에서 이러한 도구를 사용하여 빌드 실행을 개선할 수 있으니 설치하는 것이 좋습니다. Amplify의 패키지 재정의 기능에서는 Hugo에 재정의를 설정할 때 NPM을 사용하여 Hugo 확장 패키지를 설치합니다.

다음과 같은 패키지는 필수는 아니나 설치하는 것이 좋습니다.

1. **NVM (Node Version Manager)**: Node의 다른 버전을 처리해야 한다면 이 버전 관리자를 설치하는 것이 좋습니다. 재정의를 설정하면 각 빌드 전에 Amplify의 패키지 재정의 기능에서 NVM을 사용하여 Node.js 버전을 변경합니다.

1. **Wget**: 빌드 프로세스 도중에 Amplify에서 Wget 유틸리티를 사용하여 파일을 다운로드할 수 있습니다. 사용자 지정 이미지에 설치하는 것이 좋습니다.

1. **Tar**: 빌드 프로세스 도중에 Amplify에서 Tar 유틸리티를 사용하여 다운로드된 파일의 압축을 해제할 수 있습니다. 사용자 지정 이미지에 설치하는 것이 좋습니다.

## 앱의 사용자 지정 빌드 이미지 구성
<a name="configuring-a-custom-build-image"></a>

Amplify 콘솔에서 애플리케이션의 사용자 지정 빌드 이미지를 구성하려면 다음 절차를 사용합니다.

**Amazon ECR에서 호스팅되는 사용자 지정 빌드 이미지 구성하기**

1. Docker 이미지를 사용하여 Amazon ECR 퍼블릭 리포지토리를 설정하려면 *Amazon ECR 퍼블릭 사용 설명서*의 [시작하기](https://docs.aws.amazon.com/AmazonECR/latest/public/public-getting-started.html)를 참조하세요.

1. 에 로그인 AWS Management Console 하고 [Amplify 콘솔](https://console.aws.amazon.com/amplify/)을 엽니다.

1. 사용자 지정 빌드 이미지를 구성하려는 앱을 선택합니다.

1. 탐색 창에서 **호스팅**, **빌드 설정**을 선택합니다.

1. **빌드 설정** 페이지의 **빌드 이미지 설정** 섹션에서 **편집**을 선택합니다.

1. **빌드 이미지 설정 편집** 페이지에서 **빌드 이미지** 메뉴를 펼치고 **사용자 지정 이미지 빌드**를 선택합니다.

1. 1단계에서 만든 Amazon ECR 퍼블릭 리포지토리 이름을 입력합니다. 여기에서 빌드 이미지가 호스팅됩니다. 예를 들어 리포지토리 이름이 *ecr-examplerepo*인 경우, **public.ecr.aws/xxxxxxxx/ecr-examplerepo**를 입력합니다.

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

## 빌드 이미지에서 특정 패키지 및 종속성 버전 사용
<a name="setup-live-updates"></a>

라이브 패키지 업데이트를 사용하면 Amplify 기본 빌드 이미지에 사용할 패키지 및 종속성 버전을 지정할 수 있습니다. 기본 빌드 이미지에는 사전 설치된 여러 패키지 및 종속성이 부수됩니다(예: Hugo, Amplify CLI, Yarn 등). 라이브 패키지 업데이트를 사용하면 이러한 종속성을 재정의하고 특정 버전을 지정할 수 있으며, 또는 최신 버전이 설치되어 있는지 항상 확인할 수 있습니다.

라이브 패키지 업데이트가 활성화되어 있는 경우, 빌드가 실행되기 전에 먼저 빌드 러너가 특정 종속성을 업데이트(또는 다운그레이드)합니다. 이를 통해 빌드 시간은 종속성 업데이트에 소요되는 시간에 비례하여 증가하지만 애플리케이션 빌드에 동일한 종속성 버전이 사용되도록 확인할 수 있는 장점이 있습니다.

**주의**  
Node.js 버전을 **최신**으로 설정하면 빌드가 실패합니다. 대신에 `18`, `21.5` 또는 `v0.1.2`처럼 정확한 Node.js 버전을 지정해야 합니다.

**라이브 패키지 업데이트를 구성하려면**

1. 에 로그인 AWS Management Console 하고 [Amplify 콘솔](https://console.aws.amazon.com/amplify/)을 엽니다.

1. 라이브 패키지 업데이트를 구성할 앱을 선택합니다.

1. 탐색 창에서 **호스팅**, **빌드 설정**을 선택합니다.

1. **빌드 설정** 페이지의 **빌드 이미지 설정** 섹션에서 **편집**을 선택합니다.

1. **빌드 이미지 설정 편집** 페이지의 **라이브 패키지 업데이트** 목록에서 **새로 추가**를 선택합니다.

1. **패키지**에서 재정의할 종속성을 선택합니다.

1. **버전**에는 기본값을 **최신**으로 유지하거나 종속성의 특정 버전을 입력합니다. **최신**이 사용될 경우, 종속성은 사용 가능한 최신 버전으로 항상 업그레이드됩니다.

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

# Amplify 애플리케이션의 빌드 인스턴스 구성
<a name="custom-build-instance"></a>

Amplify Hosting은 애플리케이션의 빌드 인스턴스에 필요한 CPU, 메모리, 디스크 공간을 제공할 수 있는 구성 가능한 빌드 인스턴스 크기를 지원합니다. 이 기능이 출시되기 전에 Amplify는 메모리 8GiB와 vCPU 4개의 고정 크기 빌드 인스턴스만 제공했습니다.

Amplify는 Standard, Large, XLarge의 세 가지 빌드 인스턴스 유형을 지원합니다. 인스턴스 유형을 지정하지 않으면 Amplify는 기본적으로 Standard 인스턴스를 사용합니다. Amplify 콘솔 AWS CLI, 또는 SDKs.

빌드 인스턴스 유형별 비용은 빌드 분 단위로 계산됩니다. 요금에 대한 자세한 내용은 [AWS Amplify 요금](https://aws.amazon.com/amplify/pricing/)을 참조하세요.

다음 표에서는 각 빌드 인스턴스 유형의 컴퓨팅 사양을 설명합니다.


| 빌드 인스턴스 유형 | vCPU | Memory | 디스크 공간 | 
| --- | --- | --- | --- | 
| Standard | 4개의 vCPU | 8GiB | 128GB | 
| Large | vCPUs | 16GiB | 128GB | 
| XLarge | vCPUs | 72GiB | 256GB | 

**Topics**
+ [빌드 인스턴스 유형 이해](#understanding-build-instance-sizes)
+ [Amplify 콘솔에서 빌드 인스턴스 유형 구성](#configure-build-instance-type)
+ [대형 인스턴스 유형을 활용하기 위한 애플리케이션 힙 메모리 구성](#configuring-heap-memory)

## 빌드 인스턴스 유형 이해
<a name="understanding-build-instance-sizes"></a>



빌드 인스턴스 유형 설정은 애플리케이션 단위로 구성되며, 애플리케이션의 모든 브랜치에 적용됩니다. 빌드 인스턴스 유형과 관련된 주요 사항은 다음과 같습니다.
+ 애플리케이션에 구성한 빌드 인스턴스 유형은 자동 생성된 브랜치와 pull 요청 미리 보기에도 자동으로 적용됩니다.
+ *동시 작업* 서비스 할당량은의 모든 빌드 인스턴스 유형에 적용됩니다 AWS 계정. 예를 들어 *동시 작업* 제한이 5인 경우 AWS 계정내 모든 인스턴스 유형을 합쳐 최대 5개의 빌드를 동시에 실행할 수 있습니다.
+ 빌드 인스턴스 유형별 비용은 빌드 분 단위로 계산됩니다. 빌드 인스턴스 할당 과정에서 빌드 시작 전 추가 오버헤드 시간이 소요될 수 있습니다. 특히 XLarge와 같은 대형 인스턴스의 경우, 오버헤드 시간 때문에 빌드 시작 전 지연이 발생할 수 있습니다. 다만 요금은 오버헤드 시간이 아닌 실제 빌드 시간만 기준으로 청구됩니다.

빌드 인스턴스 유형은 새 애플리케이션 생성 시 구성할 수 있으며, 기존 애플리케이션에서도 업데이트할 수 있습니다. Amplify 콘솔에서 이 설정을 구성하는 방법은 [Amplify 콘솔에서 빌드 인스턴스 유형 구성](#configure-build-instance-type) 섹션을 참조하세요. SDK를 사용하여 설정을 업데이트할 수도 있습니다. 자세한 내용은 *Amplify API 참조*의 [CreateApp](https://docs.aws.amazon.com/amplify/latest/APIReference/API_CreateApp.html) 및 [UpdateApp](https://docs.aws.amazon.com/amplify/latest/APIReference/API_UpdateApp.html) API를 참고하세요.

사용자 계정에 이미 존재하는 애플리케이션이 사용자 지정 가능한 빌드 인스턴스 기능 릴리스 이전에 생성된 경우, 기본 Standard 인스턴스 유형을 사용합니다. 기존 애플리케이션의 빌드 인스턴스 유형을 업데이트하면, 업데이트 이전에 대기 중이거나 진행 중인 빌드는 기존 구성된 인스턴스 유형을 사용합니다. 예를 들어, Amplify에`main`인 브랜치가 배포된 기존 애플리케이션에서 빌드 인스턴스 유형을 **Standard**에서 **Large**로 변경하면, `main` 브랜치에서 새로 시작하는 빌드는 **Large** 빌드 인스턴스 유형을 사용합니다. 그러나 빌드 인스턴스 유형을 업데이트할 때 진행 중인 모든 빌드는 계속해서 **표준** 인스턴스에서 실행됩니다.

## Amplify 콘솔에서 빌드 인스턴스 유형 구성
<a name="configure-build-instance-type"></a>

새 Amplify 애플리케이션을 생성할 때 다음 절차에 따라 빌드 인스턴스 유형을 구성합니다.

**새 애플리케이션의 빌드 인스턴스 유형을 구성하려면**

1. 에 로그인 AWS Management Console 하고 [Amplify 콘솔](https://console.aws.amazon.com/amplify/)을 엽니다.

1. **모든 앱** 페이지에서 **새 앱 생성**을 선택합니다.

1. **Amplify로 빌드 시작** 페이지에서 Git 리포지토리 공급자를 선택하고 **다음**을 선택합니다.

1. **리포지토리 브랜치 추가** 페이지에서 다음을 수행합니다.

   1. **최근 업데이트된 리포지토리** 목록에서 연결할 리포지토리 이름을 선택합니다.

   1. **브랜치** 목록에서 연결할 리포지토리 브랜치의 이름을 선택합니다.

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

1. **앱 설정** 페이지에서 **고급 설정** 섹션을 엽니다.

1. **빌드 인스턴스 유형**에서 원하는 인스턴스 유형을 목록에서 선택합니다.

1. Node.js 런타임 기반 애플리케이션을 배포하는 경우, 대형 인스턴스를 효과적으로 활용할 수 있도록 힙 메모리 크기를 구성합니다. **앱 설정** 페이지에서 환경 변수 설정 또는 빌드 설정 업데이트를 통해 구성할 수 있습니다. 자세한 내용은 [대형 인스턴스 유형을 활용하기 위한 애플리케이션 힙 메모리 구성](#configuring-heap-memory) 단원을 참조하십시오.
   + 환경 변수 설정

     1. **고급 설정**의 **환경 변수** 섹션에서 **새로 추가**를 선택합니다.

     1. **키**에 **NODE\$1OPTIONS**를 입력합니다.

     1. **값**에 `--max-old-space-size=memory_size_in_mb`를 입력합니다. *memory\$1size\$1in\$1mb*는 원하는 힙 메모리 크기(메가바이트)로 대체합니다.
   + 빌드 설정 업데이트

     1. **빌드 설정** 섹션에서 **YML 파일 편집**을 선택합니다.

     1. `preBuild` 단계에 다음 명령을 추가합니다. *memory\$1size\$1in\$1mb*는 원하는 힙 메모리 크기(메가바이트)로 대체합니다.

        ```
        export NODE_OPTIONS='--max-old-space-size=memory_size_in_mb'
        ```

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

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

1. **검토** 페이지에서 **저장 및 배포**를 선택합니다.

기존 Amplify 콘솔의 빌드 인스턴스 유형을 구성하려면 다음 절차를 따릅니다.

**기존 애플리케이션의 빌드 인스턴스 유형을 구성하려면**

1. 에 로그인 AWS Management Console 하고 [Amplify 콘솔](https://console.aws.amazon.com/amplify/)을 엽니다.

1. 빌드 인스턴스 유형을 구성하려는 앱을 선택합니다.

1. 탐색 창에서 **호스팅**을 선택한 다음 **빌드 설정**을 선택합니다.

1. **빌드 설정** 페이지의 **고급 설정** 섹션에서 **편집**을 선택합니다.

1. **설정 편집** 페이지의 **빌드 인스턴스 유형**에서 원하는 인스턴스 유형을 목록에서 선택합니다.

1. **저장**을 선택합니다. 이 변경 사항은 다음 애플리케이션 배포 시 적용됩니다.

1. (선택 사항) 업데이트된 변경 사항을 즉시 배포하려면 다음을 수행합니다.

   1. 탐색 창에서 **개요**를 선택합니다.

   1. 애플리케이션의 개요 페이지에서 재배포할 브랜치를 선택합니다.

   1. **배포** 페이지에서 재배포할 배포(예: 가장 최근 배포)를 선택합니다. 그런 다음 **이 버전 재배포**를 선택합니다. 새 배포가 시작됩니다.

   1. 배포가 완료되면, 애플리케이션의 빌드 설정에서 해당 브랜치가 업데이트된 빌드 인스턴스 유형을 사용하고 있음을 확인할 수 있습니다.

## 대형 인스턴스 유형을 활용하기 위한 애플리케이션 힙 메모리 구성
<a name="configuring-heap-memory"></a>

메모리를 많이 사용하는 애플리케이션을 빌드하는 경우, 이 섹션을 통해 대형 인스턴스 유형을 효과적으로 활용할 수 있도록 애플리케이션을 구성하는 방법을 이해할 수 있습니다. 프로그래밍 언어와 프레임워크는 런타임 중 애플리케이션의 메모리 요구 사항을 관리하기 위해 동적 메모리(힙 메모리라고도 함)를 할당하는 방식에 종종 의존합니다. 힙 메모리는 런타임 환경에서 요청하고 호스트 운영 체제에서 할당합니다. 기본적으로 런타임 환경은 애플리케이션에서 사용할 수 있는 최대 힙 크기에 제한을 둡니다. 즉, 호스트 운영 체제 또는 컨테이너에 사용 가능한 메모리가 더 많더라도 힙 크기를 초과한 추가 메모리는 애플리케이션에서 사용할 수 없습니다.

예를 들어, JavaScript Node.js v8 런타임 환경은 호스트 메모리 크기를 비롯한 여러 요소에 따라 기본 힙 크기 제한을 적용합니다. 그 결과, Standard 및 Large 빌드 인스턴스는 기본 Node.js 힙 크기가 2,096MB이며, XLarge 인스턴스의 기본 힙 크기는 4,144MB입니다. 따라서 기본 Node.js 힙 크기를 사용하는 상태에서 6,000MB 메모리를 필요로 하는 애플리케이션을 어떤 Amplify 빌드 인스턴스에서도 빌드하려고 하면 메모리 부족 오류로 인해 빌드가 실패하게 됩니다.

Node.js의 기본 힙 크기 제한을 해결하려면 다음 중 하나를 수행할 수 있습니다.
+ Amplify 애플리케이션에서 `NODE_OPTIONS` 환경 변수를 `--max-old-space-size=memory_size_in_mb` 값으로 설정합니다. `memory_size_in_mb`에는 원하는 힙 메모리 크기(메가바이트)를 입력합니다.

  지침은 [환경 변수 설정](setting-env-vars.md) 섹션을 참조하세요.
+ Amplify 애플리케이션의 빌드 사양에서 `preBuild` 단계에 다음 명령을 추가합니다.

  ```
  export NODE_OPTIONS='--max-old-space-size=memory_size_in_mb'
  ```

  빌드 사양은 Amplify 콘솔 또는 프로젝트 리포지토리의 `amplify.yml` 파일에서 업데이트할 수 있습니다. 지침은 [Amplify 애플리케이션의 빌드 설정 구성](build-settings.md) 섹션을 참조하세요.

  다음은 React 프론트엔드 애플리케이션을 빌드하기 위해 Node.js 힙 메모리를 7,000MB로 설정하는 Amplify 빌드 사양 예제입니다.

  ```
  version: 1
  frontend:
    phases:
      preBuild:
        commands:
          # Set the heap size to 7000 MB
          - export NODE_OPTIONS='--max-old-space-size=7000'
          # To check the heap size memory limit in MB
          - node -e "console.log('Total available heap size (MB):', v8.getHeapStatistics().heap_size_limit / 1024 / 1024)"
          - npm ci --cache .npm --prefer-offline
      build:
        commands:
          - npm run build
    artifacts:
      baseDirectory: build
      files:
        - '**/*'
    cache:
      paths:
        - .npm/**/*
  ```

대형 인스턴스 유형을 효과적으로 활용하려면 충분한 힙 메모리 크기를 구성하는 것이 중요합니다. 메모리를 많이 사용하는 애플리케이션에 작은 힙 크기를 구성하면 빌드가 실패할 가능성이 큽니다. 애플리케이션 런타임이 예기치 않게 중단될 수 있기 때문에, 빌드 로그에 메모리 부족 오류가 직접적으로 표시되지 않을 수도 있습니다. 호스트 메모리와 동일한 크기의 힙을 구성하면, 호스트 운영 체제가 다른 프로세스를 교체하거나 종료하여 빌드 프로세스가 중단될 수 있습니다. 참고로, Node.js는 약 2,000MB의 메모리가 있는 시스템에서는 다른 용도를 위해 일부 메모리를 남겨두기 위해 최대 힙 크기를 1,536MB로 설정할 것을 권장합니다.

최적의 힙 크기는 애플리케이션의 요구와 리소스 사용량에 따라 달라집니다. 메모리 부족 오류가 발생하는 경우, 중간 수준의 힙 크기부터 시작한 후 필요에 따라 점차 늘리도록 합니다. 가이드라인을 제시하면, Standard 인스턴스 유형은 6,000MB, Large 인스턴스 유형은 12,000MB, XLarge 인스턴스 유형은 60,000MB부터 시작하는 것이 좋습니다.

# 빌드를 시작하기 위한 수신 웹후크 생성
<a name="create-incoming-webhook"></a>

Git 리포지토리에 코드를 커밋하지 않고 빌드를 시작할 수 있도록 Amplify 콘솔에 수신 웹후크를 설정합니다. 웹후크는 콘텐츠 변경에 관한 빌드를 트리거하거나 Zapier와 같은 서비스를 사용하여 일상적인 빌드를 트리거하기 위해 헤드리스 CMS 도구(예: Contentful 또는 GraphCMS)와 함께 사용될 수 있습니다.

**수신 웹후크를 만들려면**

1. 에 로그인 AWS Management Console 하고 [Amplify 콘솔](https://console.aws.amazon.com/amplify/)을 엽니다.

1. 웹후크를 생성할 앱을 선택합니다.

1. 탐색 창에서 **호스팅**, **빌드 설정**을 선택합니다.

1. **빌드 설정** 페이지에서 **수신 웹후크** 섹션으로 스크롤하여 **웹후크 생성**을 선택합니다.

1. **웹후크 생성** 대화 상자에서 다음 작업을 수행하세요.

   1. **웹후크 이름에는** 웹후크 이름을 입력합니다.

   1. **브랜치를 빌드하려면** 들어오는 웹후크 요청에 빌드할 브랜치를 선택합니다.

   1. **웹후크 생성**을 선택합니다.

1. **수신 웹후크** 섹션에서 다음 중 하나를 수행하세요.
   + 웹후크 URL을 복사하여 헤드리스 CMS 도구 또는 기타 서비스에 제공하여 빌드를 시작합니다.
   + 터미널 창에서 curl 명령을 실행하여 새 빌드를 시작합니다.

# 빌드에 대한 이메일 알림 설정
<a name="notifications"></a>

빌드 성공 또는 실패 시 이해관계자 또는 팀원에게 알리도록 AWS Amplify 앱에 대한 이메일 알림을 설정할 수 있습니다. Amplify Hosting은 계정에서 Amazon Simple Notification Service(SNS)항목을 생성하고 이를 사용하여 이메일 알림을 구성합니다. Amplify 앱의 모든 분기 또는 특정 분기에 적용되도록 알림을 구성할 수 있습니다.

## 이메일 알림 설정
<a name="email-notifications"></a>

다음 절차를 사용하여 Amplify 앱의 모든 분기 또는 특정 분기에 대해 이메일 알림을 설정합니다.

**Amplify 앱의 이메일 알림을 설정하려면**

1. 에 로그인 AWS Management Console 하고 [Amplify 콘솔](https://console.aws.amazon.com/amplify/)을 엽니다.

1. 이메일 알림을 설정하려는 앱을 선택합니다.

1. 탐색 창에서 **호스팅**, **빌드 알림**을 선택합니다. **빌드 알림** 페이지에서 **알림 관리**를 선택합니다.

1. **알림 관리** 페이지에서 **새로 추가**를 선택합니다.

1. 다음 중 하나를 수행하세요.
   + 단일 브랜치에 알림을 보내려면 **이메일**에 알림을 보낼 이메일 주소를 입력합니다. **브랜치**의 경우, 알림을 보낼 브랜치 이름을 선택합니다.
   + 연결된 모든 브랜치에 알림을 보내려면 **이메일**에 알림을 보낼 이메일 주소를 입력합니다. **브랜치**의 경우, *모든 브랜치*를 선택합니다.

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