

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

# 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/**/*"
```