

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

# Elastic Beanstalk Go 플랫폼 사용
<a name="go-environment"></a>

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

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

간단한 Go 애플리케이션의 경우 두 가지 방법으로 애플리케이션을 배포할 수 있습니다.
+ 애플리케이션의 주 패키지가 포함된 `application.go`라는 루트에 있는 원본 파일을 소스 번들에 제공합니다. Elastic Beanstalk는 다음 명령을 사용하여 바이너리를 빌드합니다:

  ```
  go build -o bin/application application.go
  ```

  애플리케이션이 빌드되면 Elastic Beanstalk는 포트 5000에서 이를 시작합니다.
+ 소스 번들에 `application`이라는 바이너리 파일을 제공합니다. 바이너리 파일은 소스 번들의 루트 또는 소스 번들의 `bin/` 디렉터리에 위치할 수 있습니다. 두 위치 모두에 `application` 바이너리 파일을 배치한 경우 Elastic Beanstalk는 `bin/` 디렉터리의 파일을 사용합니다.

  Elastic Beanstalk는 포트 5000에서 이 애플리케이션을 시작합니다.

두 경우 모두, 지원되는 Go 플랫폼 브랜치를 사용할 경우 `go.mod` 파일에 모듈 요구 사항을 제공 할 수도 있습니다. 자세한 내용은 Go 블로그의 [Migrating to Go Modules](https://blog.golang.org/migrating-to-go-modules)를 참조하십시오.

더 복잡한 Go 애플리케이션의 경우 두 가지 방법으로 애플리케이션을 배포할 수 있습니다.
+ [Buildfile](go-buildfile.md) 및 [Procfile](go-procfile.md)과 함께 애플리케이션 원본 파일이 포함된 소스 번들을 제공합니다. Buildfile에는 애플리케이션을 빌드하는 명령이 포함되어 있으며, Procfile에는 애플리케이션을 실행하는 명령이 포함되어 있습니다.
+ Procfile과 함께 애플리케이션 이진 파일이 포함된 소스 번들을 제공합니다. Procfile에는 애플리케이션을 실행하는 명령이 포함되어 있습니다.

Go 플랫폼에는 정적 자산을 제공하고 트래픽을 애플리케이션으로 전달하는 프록시 서버가 포함되어 있습니다. 고급 시나리오를 위한 [기본 프록시 구성을 확장하거나 재정의](go-nginx.md)할 수 있습니다.

Elastic Beanstalk Linux 기반 플랫폼 확장을 위한 다양한 방법은 [Elastic Beanstalk Linux 플랫폼 확장](platforms-linux-extend.md)을 참조하세요.

## Go 환경 구성
<a name="go-options"></a>

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

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

**Elastic Beanstalk 콘솔에서 Go 환경을 구성하려면**

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

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

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

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

### 로그 옵션
<a name="go-options-logs"></a>

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

### 정적 파일
<a name="go-options-staticfiles"></a>

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

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

### 환경 속성
<a name="go-options-properties"></a>

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

Elastic Beanstalk에서 실행되는 Go 환경에서 `os.Getenv` 함수를 사용하여 환경 변수에 액세스할 수 있습니다. 예를 들어 다음 코드로 변수에 대한 `API_ENDPOINT`이라는 속성을 읽을 수 있습니다.

```
endpoint := os.Getenv("API_ENDPOINT")
```

자세한 내용은 [환경 변수 및 기타 소프트웨어 설정](environments-cfg-softwaresettings.md)를 참조하십시오.

## Go 구성 네임스페이스
<a name="go-namespaces"></a>

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

Go 플랫폼에서는 플랫폼별 네임스페이스를 정의하지 않습니다. `aws:elasticbeanstalk:environment:proxy:staticfiles` 네임스페이스를 사용하여 정적 파일을 제공하도록 프록시를 구성할 수 있습니다. 자세한 정보 및 예제는 [정적 파일 제공](environment-cfg-staticfiles.md)을 참조하십시오.

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

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

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

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

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

**참고**  
이 주제의 정보는 Amazon Linux AMI(AL1) 기반 플랫폼 브랜치에만 적용됩니다. AL2023/AL2 플랫폼 브랜치는 이전 Amazon Linux AMI(AL1) 플랫폼 버전과 호환되지 않으며 *다른 구성 설정이 필요*합니다.

Amazon Linux AMI Go 플랫폼은 [모든 플랫폼에서 지원하는 네임스페이스](command-options-general.md) 외에도 하나의 플랫폼별 구성 네임스페이스를 지원합니다. `aws:elasticbeanstalk:container:golang:staticfiles` 네임스페이스를 사용하여 웹 애플리케이션의 경로를 정적 콘텐츠가 포함된 애플리케이션 소스 번들의 폴더에 매핑하는 옵션을 정의할 수 있습니다.

예를 들어 이 [구성 파일](ebextensions.md)은 `/images` 경로의 `staticimages` 폴더에 있는 파일을 제공하라고 프록시 서버에 알려 줍니다.

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

```
option_settings:
  aws:elasticbeanstalk:container:golang:staticfiles:
    /html: statichtml
    /images: staticimages
```

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

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

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

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

**Example Procfile**  

```
web: bin/server
queue_process: bin/queue_processor
foo: bin/fooapp
```

기본 `web` 애플리케이션을 호출하고 `Procfile`에 첫 번째 명령으로 나열해야 합니다. Elastic Beanstalk는 환경의 루트 URL(예: `http://my-go-env.elasticbeanstalk.com`)에 기본 `web` 애플리케이션을 표시합니다.

Elastic Beanstalk는 이름에 `web_` 접두사가 없는 모든 애플리케이션을 실행하지만, 이러한 애플리케이션은 인스턴스 외부에서 사용할 수 없습니다.

Elastic Beanstalk는 프로세스가 `Procfile`에서 계속 실행될 것으로 기대합니다. Elastic Beanstalk는 이러한 애플리케이션을 모니터링하고 종료되는 프로세스를 다시 시작합니다. 단기 실행 프로세스의 경우 [Buildfile](go-buildfile.md) 명령을 사용합니다.

## Amazon Linux AMI(이전 Amazon Linux 2)에서 Procfile 사용
<a name="go-procfile.alami"></a>

Elastic Beanstalk Go 환경에서 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="go-procfile.alami.ports"></a>

**참고**  
이 주제의 정보는 Amazon Linux AMI(AL1) 기반 플랫폼 브랜치에만 적용됩니다. AL2023/AL2 플랫폼 브랜치는 이전 Amazon Linux AMI(AL1) 플랫폼 버전과 호환되지 않으며 *다른 구성 설정이 필요*합니다.

Elastic Beanstalk는 애플리케이션의 `PORT` [환경 속성](go-environment.md#go-options)에 지정된 포트 번호의 애플리케이션에 요청을 전달하도록 nginx 프록시를 구성합니다. 애플리케이션은 항상 해당 포트에서 수신 대기해야 합니다. `os.Getenv("PORT")` 메서드를 호출하여 애플리케이션 내의 이 변수에 액세스할 수 있습니다.

Elastic Beanstalk는 `Procfile`의 첫 번째 애플리케이션의 포트에 `PORT` 환경 속성에 지정된 포트 번호를 사용하고, `Procfile`의 각 다음 애플리케이션의 포트 번호를 100씩 증분합니다. `PORT` 환경 속성이 설정되지 않은 경우 Elastic Beanstalk는 초기 포트에 5000을 사용합니다.

앞의 예제에서 `PORT` 애플리케이션의 `web` 환경 속성은 5000이고, `queue_process` 애플리케이션은 5100, `foo` 애플리케이션은 5200입니다.

다음 예제와 같이 [aws:elasticbeanstalk:application:environment](command-options-general.md#command-options-general-elasticbeanstalkapplicationenvironment) 네임스페이스로 `PORT` 옵션을 설정하여 첫 포트를 지정할 수 있습니다.

```
option_settings:
  - namespace:  aws:elasticbeanstalk:application:environment
    option_name:  PORT
    value:  <first_port_number>
```

애플리케이션의 환경 속성 설정에 대한 자세한 내용은 [옵션 설정](ebextensions-optionsettings.md)을 참조하십시오.

# Elastic Beanstalk의 Buildfile을 사용하여 사용자 지정 빌드 및 구성
<a name="go-buildfile"></a>

Go 애플리케이션에 대해 사용자 지정 빌드 및 구성 명령을 지정하려면 소스 번들의 루트에 `Buildfile`이라는 파일을 포함시킵니다. 파일 이름은 대/소문자를 구분합니다. `Buildfile`에 대해 다음 형식을 사용합니다.

```
<process_name>: <command>
```

`Buildfile`의 명령은 `^[A-Za-z0-9_]+:\s*.+$` 정규식과 일치해야 합니다.

Elastic Beanstalk는 `Buildfile`을 통해 실행되는 애플리케이션을 모니터링하지 않습니다. 단기간 실행되고 작업 완료 후 종료되는 명령에는 `Buildfile`을 사용합니다. 종료해서는 안되는 장기 실행 애플리케이션 프로세스의 경우 [Procfile](go-procfile.md)을 사용합니다.

다음 `Buildfile` 예제에서 `build.sh`는 소스 번들의 루트에 위치한 셸 스크립트입니다.

```
make: ./build.sh
```

`Buildfile`의 모든 경로는 소스 번들의 루트에 상대적입니다. 인스턴스에 파일이 있는 위치를 미리 알고 있는 경우 `Buildfile`에 절대 경로를 포함시킬 수 있습니다.

# 프록시 서버 구성
<a name="go-nginx"></a>

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

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

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

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

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

**참고**  
이 주제의 정보는 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)을(를) 참조하세요.

Elastic Beanstalk Go 환경에서 Amazon Linux AMI 플랫폼 버전(이전 Amazon Linux 2)을 사용하는 경우 여기의 정보를 읽어 보십시오.

### 기본 프록시 구성 확장 및 재정의 — Amazon Linux AMI (AL1)
<a name="go-nginx.alami.extending"></a>

Elastic Beanstalk는 nginx를 역방향 프록시로 사용하여 애플리케이션을 포트 80의 로드 밸런서에 매핑합니다. 자체 nginx 구성을 제공하려는 경우 소스 번들에 `.ebextensions/nginx/nginx.conf` 파일을 포함시켜 Elastic Beanstalk에서 제공한 기본 구성을 재정의할 수 있습니다. 이 파일이 있는 경우 Elastic Beanstalk는 기본 nginx 구성 파일 대신에 이를 사용합니다.

`nginx.conf` `http` 블록에 있는 명령 이외의 명령을 포함시키려면 소스 번들의 `.ebextensions/nginx/conf.d/` 디렉터리의 추가 구성 파일을 제공할 수도 있습니다. 이 디렉터리의 모든 파일은 확장명이 `.conf`여야 합니다.

[Elastic Beanstalk의 향상된 상태 보고 및 모니터링](health-enhanced.md), 자동 애플리케이션 매핑, 정적 파일 등 Elastic Beanstalk에서 제공하는 기능을 활용하려면 nginx 구성 파일의 `server` 블록에 다음 줄을 포함시켜야 합니다.

```
include conf.d/elasticbeanstalk/*.conf;
```