

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

# 모노레포 빌드 설정 구성
<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
```