

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

# 성능을 개선하기 위한 캐시 빌드
<a name="build-caching"></a>

프로젝트가 빌드될 때 캐시를 사용하여 시간을 절약할 수 있습니다. 캐시는 빌드 환경에서 재사용할 수 있는 정보를 저장하여 여러 빌드에 사용할 수 있습니다. 빌드 프로젝트는 Amazon S3 또는 로컬의 두 캐싱 유형 중 하나를 사용할 수 있습니다. 로컬 캐시를 사용하는 경우 다음 세 캐시 모드에서 하나 이상을 선택해야 합니다. 소스 캐시, Docker 계층 캐시 및 사용자 지정 캐시.

**참고**  
Docker 계층 캐시 모드는 Linux 환경에서만 사용할 수 있습니다. 이 모드를 선택할 경우 권한이 있는 모드에서 빌드를 실행해야 합니다. CodeBuild 프로젝트에서 부여된 권한 모드는 해당 컨테이너에 모든 디바이스에 대한 액세스 권한을 부여합니다. 자세한 내용은 Docker 문서 웹 사이트의 [런타임 권한 및 Linux 기능](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)을 참조하십시오.

**Topics**
+ [Amazon S3 캐싱](caching-s3.md)
+ [로컬 캐싱](caching-local.md)
+ [로컬 캐시 지정](specify-caching-local.md)

# Amazon S3 캐싱
<a name="caching-s3"></a>

Amazon S3 캐싱은 여러 빌드 호스트에 사용 가능한 캐시를 Amazon S3 버킷에 저장합니다. 이는 다운로드보다 빌드가 더 비용이 많이 드는 소형-중형 빌드 아티팩트에 적합한 옵션입니다.

빌드에서 Amazon S3를 사용하려면 `buildspec.yml`에서 캐싱하려는 파일의 경로를 지정할 수 있습니다. CodeBuild는 캐시를 자동으로 저장하고 프로젝트에 구성된 Amazon S3 위치로 업데이트합니다. 파일 경로를 지정하지 않으면 CodeBuild는 빌드 속도를 높이는 데 도움이 되도록 공통 언어 종속성을 캐싱하는 데 최선을 다합니다. 빌드 로그에서 캐시 세부 정보를 볼 수 있습니다.

또한, 여러 버전의 캐시를 사용하려는 경우 `buildspec.yml`에서 캐시 키를 정의할 수 있습니다. CodeBuild는 이 캐시 키의 컨텍스트에 캐시를 저장하고 생성된 후에는 업데이트되지 않는 고유한 캐시 복사본을 생성합니다. 캐시 키는 프로젝트 간에도 공유할 수 있습니다. 동적 키, 캐시 버전 관리, 빌드 간 캐시 공유와 같은 기능은 키가 지정된 경우에만 사용할 수 있습니다.

buildspec 파일의 캐시 구문에 대한 자세한 내용은 buildspec 참조의 [cache](build-spec-ref.md#build-spec.cache)를 참조하세요.

**Topics**
+ [동적 키 생성](#caching-s3-dynamic)
+ [codebuild-hash-files](#caching-s3-dynamic.codebuild-hash-files)
+ [캐시 버전](#caching-s3-version)
+ [프로젝트 간 캐시 공유](#caching-s3-sharing)
+ [buildspec 예제](#caching-s3-examples)

## 동적 키 생성
<a name="caching-s3-dynamic"></a>

캐시 키는 쉘 명령과 환경 변수를 포함하여 고유하게 만들 수 있으므로, 키가 변경될 때 자동 캐시 업데이트가 가능합니다. 예를 들어, `package-lock.json` 파일의 해시를 사용하여 키를 정의할 수 있습니다. 해당 파일의 종속성이 변경되면 해시와 캐시 키가 변경되어 새 캐시의 자동 생성이 트리거됩니다.

```
cache:
    key: npm-key-$(codebuild-hash-files package-lock.json)
```

CodeBuild는 `$(codebuild-hash-files package-lock.json)` 표현식을 평가하여 최종 키를 가져옵니다.

```
npm-key-abc123
```

`CODEBUILD_RESOLVED_SOURCE_VERSION`과 같은 환경 변수를 사용하여 캐시 키를 정의할 수도 있습니다. 이렇게 하면 소스가 변경될 때마다 새 키가 생성되어 새 캐시가 자동으로 저장됩니다.

```
cache:
   key: npm-key-$CODEBUILD_RESOLVED_SOURCE_VERSION
```

CodeBuild는 표현식을 평가하고 최종 키를 가져옵니다.

```
npm-key-046e8b67481d53bdc86c3f6affdd5d1afae6d369
```

## codebuild-hash-files
<a name="caching-s3-dynamic.codebuild-hash-files"></a>

`codebuild-hash-files`는 glob 패턴을 사용하여 CodeBuild 소스 디렉터리의 파일 세트에 대한 SHA-256 해시를 계산하는 CLI 도구입니다.

```
codebuild-hash-files <glob-pattern-1> <glob-pattern-2> ...
```

여기에 `codebuild-hash-files`를 사용하는 몇 가지 예가 있습니다.

```
codebuild-hash-files package-lock.json
codebuild-hash-files '**/*.md'
```

## 캐시 버전
<a name="caching-s3-version"></a>

캐시 버전은 캐시되는 디렉터리의 경로에서 생성된 해시입니다. 두 캐시의 버전이 다른 경우 일치하는 프로세스 중에 캐시가 고유한 캐시로 처리됩니다. 예를 들어, 다음 두 캐시는 서로 다른 경로를 참조하기 때문에 서로 다른 것으로 간주됩니다.

```
version: 0.2

phases:
  build:
    commands:
      - pip install pandas==2.2.3 --target pip-dependencies
cache:
  key: pip-dependencies 
  paths:
    - "pip-dependencies/**/*"
```

```
version: 0.2

phases:
  build:
    commands:
      - pip install pandas==2.2.3 --target tmp/pip-dependencies
cache:
  key: pip-dependencies 
  paths:
    - "tmp/pip-dependencies/**/*"
```

## 프로젝트 간 캐시 공유
<a name="caching-s3-sharing"></a>

`cache` 섹션 아래의 `cacheNamespace` API 필드를 사용하여 여러 프로젝트에서 캐시를 공유할 수 있습니다. 이 필드는 캐시의 범위를 정의합니다. 캐시를 공유하려면 다음을 수행해야 합니다.
+ 동일한 `cacheNamespace`를 사용합니다.
+ 동일한 `key` 캐시를 지정합니다.
+ 동일한 캐시 경로를 정의합니다.
+ 설정된 경우 동일한 Amazon S3 버킷 및 `pathPrefix`를 사용합니다.

이렇게 하면 일관성이 보장되고 프로젝트 간에 캐시 공유가 활성화됩니다.

### 캐시 네임스페이스 지정(콘솔)
<a name="caching-s3-sharing.console"></a>

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. **프로젝트 생성**을 선택합니다. 자세한 내용은 [빌드 프로젝트 만들기(콘솔)](create-project.md#create-project-console) 및 [빌드 실행(콘솔)](run-build-console.md) 섹션을 참조하세요.

1. **아티팩트**에서 **추가 구성**을 선택합니다.

1. **캐시 유형**에서 **Amazon S3**를 선택합니다.

1. **캐시 네임스페이스 - 선택 사항**에서 네임스페이스 값을 입력합니다.  
![\[CodeBuild 콘솔의 캐시 네임스페이스 파라미터입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/s3-cache-namespace.png)

1. 기본값으로 계속 진행한 다음 **빌드 프로젝트 생성**을 선택합니다.

### 캐시 네임스페이스 지정(AWS CLI)
<a name="caching-s3-sharing.cli"></a>

의 `--cache` 파라미터를 사용하여 캐시 네임스페이스를 AWS CLI 지정할 수 있습니다.

```
--cache '{"type": "S3", "location": "your-s3-bucket", "cacheNamespace": "test-cache-namespace"}'
```

## buildspec 예제
<a name="caching-s3-examples"></a>

다음은 일반적인 언어에 대한 몇 가지 buildspec 예제입니다.

**Topics**
+ [캐시 Node.js 종속성](#caching-s3-examples.nodejs)
+ [캐시 Python 종속성](#caching-s3-examples.python)
+ [캐시 Ruby 종속성](#caching-s3-examples.ruby)
+ [캐시 Go 종속성](#caching-s3-examples.go)

### 캐시 Node.js 종속성
<a name="caching-s3-examples.nodejs"></a>

프로젝트에 `package-lock.json` 파일이 포함되어 있고 `npm`를 사용하여 Node.js 종속성을 관리하는 경우, 다음 예제에서 캐싱을 설정하는 방법을 보여줍니다. 기본적으로 `npm`에서는 `node_modules` 디렉터리에 종속성을 설치합니다.

```
version: 0.2

phases:
  build:
    commands:
      - npm install
cache:
  key: npm-$(codebuild-hash-files package-lock.json)
  paths:
    - "node_modules/**/*"
```

### 캐시 Python 종속성
<a name="caching-s3-examples.python"></a>

프로젝트에 `requirements.txt` 파일이 포함되어 있고 pip를 사용하여 Python 종속성을 관리하는 경우, 다음 예제에서 캐싱을 구성하는 방법을 보여줍니다. 기본적으로 pip는 시스템 `site-packages` 디렉터리에 패키지를 설치합니다.

```
version: 0.2

phases:
  build:
    commands:
      - pip install -r requirements.txt
cache:
  key: python-$(codebuild-hash-files requirements.txt)
  paths:
    - "/root/.pyenv/versions/${python_version}/lib/python${python_major_version}/site-packages/**/*"
```

또한, 특정 디렉터리에 종속성을 설치하고 해당 디렉터리에 대한 캐싱을 구성할 수 있습니다.

```
version: 0.2

phases:
  build:
    commands:
      - pip install -r requirements.txt --target python-dependencies
cache:
  key: python-$(codebuild-hash-files requirements.txt)
  paths:
    - "python-dependencies/**/*"
```

### 캐시 Ruby 종속성
<a name="caching-s3-examples.ruby"></a>

프로젝트에 `Gemfile.lock` 파일이 포함되어 있고 `Bundler`를 사용하여 gem 종속성을 관리하는 경우, 다음 예제에서 캐싱을 효율적으로 구성하는 방법을 보여줍니다.

```
version: 0.2

phases:
  build:
    commands:
      - bundle install --path vendor/bundle
cache:
  key: ruby-$(codebuild-hash-files Gemfile.lock)
  paths:
    - "vendor/bundle/**/*"
```

### 캐시 Go 종속성
<a name="caching-s3-examples.go"></a>

프로젝트에 `go.sum` 파일이 포함되어 있고 Go 모듈을 사용하여 종속성을 관리하는 경우, 다음 예제에서 캐싱을 구성하는 방법을 보여줍니다. 기본적으로 Go 모듈은 다운로드되어 `${GOPATH}/pkg/mod` 디렉터리에 저장됩니다.

```
version: 0.2

phases:
  build:
    commands:
      - go mod download
cache:
  key: go-$(codebuild-hash-files go.sum)
  paths:
    - "/go/pkg/mod/**/*"
```

# 로컬 캐싱
<a name="caching-local"></a>

로컬 캐싱은 해당 빌드 호스트에만 사용할 수 있는 캐시를 빌드에 로컬로 저장합니다. 빌드 호스트에서 즉각적으로 캐시를 사용할 수 있으므로 중형-대형 빌드 아티팩트에 적합한 옵션입니다. 빌드가 드문 경우에는 최선의 옵션이 아닙니다. 이는 빌드 성능이 네트워크 전송 시간의 영향을 받지 않는다는 의미입니다.

로컬 캐싱을 선택할 경우 다음 캐시 모드 중 하나 이상을 선택해야 합니다.
+ 소스 캐시 모드는 기본 및 보조 소스를 위해 Git 메타데이터를 캐싱합니다. 캐시가 생성되면 이후의 빌드는 커밋 사이의 변경 사항만 끌어옵니다. 이 모드는 클린 작업 디렉터리를 사용하고 소스가 대규모 Git 리포지토리인 프로젝트에 적합한 선택입니다. 이 옵션을 선택하고 프로젝트가 Git 리포지토리(AWS CodeCommit, GitHub, GitHub Enterprise Server 또는 Bitbucket)를 사용하지 않을 경우 이 옵션은 무시됩니다.
+ Docker 계층 캐시 모드는 기존 Docker 계층을 캐싱합니다. 이 모드는 대용량 도커 이미지를 빌드하거나 끌어오는 프로젝트에 적합한 선택입니다. 네트워크에서 대용량 도커 이미지를 끌어올 때 발생하는 성능 문제를 방지할 수 있습니다.
**참고**  
Docker 계층 캐시는 Linux 환경에서만 사용할 수 있습니다.
프로젝트가 필요한 Docker 권한을 가지도록 `privileged` 플래그를 설정해야 합니다.  
기본적으로 비 VPC 빌드에는 Docker 데몬이 활성화됩니다. VPC 빌드에 Docker 컨테이너를 사용하려면 Docker Docs 웹 사이트의 [런타임 권한 및 Linux 기능](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)을 참조하고 권한 부여 모드를 활성화합니다. 또한 Windows는 권한 모드를 지원하지 않습니다.
Docker 계층 캐시를 사용하기 전에 보안에 미치는 영향을 고려해야 합니다.
+ 사용자 지정 캐시 모드는 buildspec 파일에 지정한 디렉터리를 캐싱합니다. 이 모드는 다른 두 로컬 캐시 모드에 적합하지 않은 빌드 시나리오에 적합한 선택입니다. 사용자 지정 캐시를 사용할 경우 
  + 캐싱을 위해 디렉터리만 지정할 수 있습니다. 개별 파일은 지정할 수 없습니다.
  + Symlink를 사용하여 캐싱된 디렉터리를 참조합니다.
  + 캐싱된 디렉터리는 프로젝트 소스를 다운로드하기 전에 빌드에 연결됩니다. 캐시된 항목은 이름이 같은 경우 소스 항목을 재정의합니다. 디렉터리는 buildspec 파일에서 경로를 사용하여 지정합니다. 자세한 내용은 [buildspec 구문](build-spec-ref.md#build-spec-ref-syntax) 단원을 참조하십시오.
  + 소스와 캐시에서 동일한 디렉터리 이름은 사용하지 마십시오. 로컬로 캐시된 디렉터리는 소스 리포지토리에서 이름이 같은 디렉터리의 내용을 재정의하거나 삭제할 수 있습니다.

**참고**  
`LINUX_GPU_CONTAINER` 환경 유형 및 `BUILD_GENERAL1_2XLARGE` 컴퓨팅 유형에서는 로컬 캐싱이 지원되지 않습니다. 자세한 내용은 [빌드 환경 컴퓨팅 모드 및 유형](build-env-ref-compute-types.md) 단원을 참조하십시오.

**참고**  
VPC에서 사용할 CodeBuild를 구성하는 경우 로컬 캐싱은 지원되지 않습니다. CodeBuild에서 VPC를 사용하는 방법에 대한 자세한 내용은 [Amazon Virtual Private Cloud AWS CodeBuild 와 함께 사용](vpc-support.md) 섹션을 참조하세요.

# 로컬 캐시 지정
<a name="specify-caching-local"></a>

 AWS CLI, 콘솔, SDK 또는를 사용하여 로컬 캐시를 CloudFormation 지정할 수 있습니다. 로컬 캐싱에 대한 자세한 정보는 [로컬 캐싱](caching-local.md) 섹션을 참조하세요.

**Topics**
+ [로컬 캐싱 지정(CLI)](#caching-local-cli)
+ [로컬 캐싱 지정(콘솔)](#caching-local-console)
+ [로컬 캐싱 지정(CloudFormation)](#caching-local-cfn)

## 로컬 캐싱 지정(CLI)
<a name="caching-local-cli"></a>

의 `--cache` 파라미터를 사용하여 세 가지 로컬 캐시 유형을 각각 AWS CLI 지정할 수 있습니다.
+ 소스 캐시를 지정하려면 

  ```
  --cache type=LOCAL,mode=[LOCAL_SOURCE_CACHE]
  ```
+ Docker 계층 캐시를 지정하려면 

  ```
  --cache type=LOCAL,mode=[LOCAL_DOCKER_LAYER_CACHE]
  ```
+ 사용자 지정 캐시를 지정하려면 

  ```
  --cache type=LOCAL,mode=[LOCAL_CUSTOM_CACHE]
  ```

자세한 내용은 [빌드 프로젝트 생성(AWS CLI)](create-project.md#create-project-cli) 단원을 참조하십시오.

## 로컬 캐싱 지정(콘솔)
<a name="caching-local-console"></a>

콘솔의 **결과물** 섹션에서 캐시를 지정합니다. **캐시 유형**은 **Amazon S3** 또는 **로컬**을 선택합니다. **로컬**을 선택한 경우 세 로컬 캐시 옵션 중 하나 이상을 선택합니다.

![\[세 가지 로컬 캐시 옵션 중 하나 이상을 선택하여 로컬 캐시를 지정합니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/local-cache.png)


자세한 내용은 [빌드 프로젝트 만들기(콘솔)](create-project.md#create-project-console) 단원을 참조하십시오.

## 로컬 캐싱 지정(CloudFormation)
<a name="caching-local-cfn"></a>

 CloudFormation 를 사용하여 로컬 캐시를 지정하는 경우 `Cache` 속성에서에 대해를 `Type`지정합니다`LOCAL`. 다음 샘플 YAML 형식 CloudFormation 코드는 세 가지 로컬 캐시 유형을 모두 지정합니다. 각 유형을 임의로 조합하여 지정할 수 있습니다. Docker 계층 캐시를 사용하는 경우 `Environment`에서 `PrivilegedMode`를 `true`로 설정하고 `Type`을 `LINUX_CONTAINER`로 설정해야 합니다.

```
CodeBuildProject:
    Type: AWS::CodeBuild::Project
    Properties:
      Name: MyProject
      ServiceRole: <service-role>
      Artifacts:
        Type: S3
        Location: <bucket-name>
        Name: myArtifact
        EncryptionDisabled: true
        OverrideArtifactName: true
      Environment:
        Type: LINUX_CONTAINER
        ComputeType: BUILD_GENERAL1_SMALL
        Image: aws/codebuild/standard:5.0
        Certificate: <bucket/cert.zip>
        # PrivilegedMode must be true if you specify LOCAL_DOCKER_LAYER_CACHE
        PrivilegedMode: true
      Source:
        Type: GITHUB
        Location: <github-location>
        InsecureSsl: true
        GitCloneDepth: 1
        ReportBuildStatus: false
      TimeoutInMinutes: 10
      Cache:
        Type: LOCAL
        Modes: # You can specify one or more cache mode, 
          - LOCAL_CUSTOM_CACHE
          - LOCAL_DOCKER_LAYER_CACHE
          - LOCAL_SOURCE_CACHE
```

**참고**  
기본적으로 비 VPC 빌드에는 Docker 데몬이 활성화됩니다. VPC 빌드에 Docker 컨테이너를 사용하려면 Docker Docs 웹 사이트의 [런타임 권한 및 Linux 기능](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)을 참조하고 권한 부여 모드를 활성화합니다. 또한 Windows는 권한 모드를 지원하지 않습니다.

자세한 내용은 [빌드 프로젝트 생성(CloudFormation)](create-project.md#create-project-cloud-formation) 단원을 참조하십시오.