

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

# AWS SDK for Go V2에서 오류 처리
<a name="handle-errors"></a>

 AWS SDK for Go는 Go `error` 인터페이스 유형을 충족하는 오류를 반환합니다. `Error()` 메서드를 사용하여 특별한 처리 없이 SDK 오류 메시지의 형식이 지정된 문자열을 가져올 수 있습니다. SDK에서 반환한 오류는 `Unwrap` 메서드를 구현할 수 있습니다. SDK는 이 `Unwrap` 메서드를 사용하여 오류에 대한 추가 컨텍스트 정보를 제공하는 동시에 기본 오류 또는 오류 체인에 대한 액세스를 제공합니다. 언래핑 오류 체인을 처리하려면 `Unwrap` 메서드를 [errors.As](https://golang.org/pkg/errors#As)와 함께 사용해야 합니다.

 애플리케이션이 `error` 인터페이스 유형을 반환할 수 있는 함수 또는 메서드를 간접 호출한 후 오류가 발생했는지 확인하는 것이 중요합니다. 오류 처리의 가장 기본적인 형태는 다음 예와 유사합니다.

```
if err != nil {
    // Handle error
    return
}
```

## 오류 로깅
<a name="logging-errors"></a>

 가장 간단한 형태의 오류 처리는 일반적으로 애플리케이션을 반환하거나 종료하기 전에 오류 메시지를 로깅하거나 인쇄하는 것입니다.

```
import "log"

// ...

if err != nil {
    log.Printf("error: %s", err.Error())
    return
}
```

## 서비스 클라이언트 오류
<a name="service-client-errors"></a>

 SDK는 서비스 클라이언트가 반환한 모든 오류를 [smithy.OperationError](https://pkg.go.dev/github.com/aws/smithy-go#OperationError) 오류 유형으로 래핑합니다. `OperationError`는 기본 오류와 연결된 서비스 이름 및 작업에 대한 컨텍스트 정보를 제공합니다. 이 정보는 중앙 집중식 오류 처리 메커니즘을 사용하여 하나 이상의 서비스에 대해 작업 배치를 수행하는 애플리케이션에 유용할 수 있습니다. 애플리케이션은 `errors.As`를 사용하여 이 `OperationError` 메타데이터에 액세스할 수 있습니다.

```
import "log"
import "github.com/aws/smithy-go"

// ...

if err != nil {
    var oe *smithy.OperationError
    if errors.As(err, &oe) {
        log.Printf("failed to call service: %s, operation: %s, error: %v", oe.Service(), oe.Operation(), oe.Unwrap())
    }
    return
}
```

### API 오류 응답
<a name="api-error-responses"></a>

 서비스 작업은 모델링된 오류 유형을 반환하여 특정 오류를 나타낼 수 있습니다. 이러한 모델링된 유형을 `errors.As`와 함께 사용하여 언래핑하고 작업 실패가 특정 오류로 인한 것인지 확인할 수 있습니다. 예를 들어 동일한 이름의 버킷이 이미 있는 경우 Amazon S3 `CreateBucket`에서 [BucketAlreadyExists](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3/types#BucketAlreadyExists) 오류를 반환할 수 있습니다.

 예를 들어 `BucketAlreadyExists` 오류가 오류인지 확인하려면 다음을 수행합니다.

```
import "log"
import "github.com/aws/aws-sdk-go-v2/service/s3/types"

// ...

if err != nil {
    var bne *types.BucketAlreadyExists
    if errors.As(err, &bne) {
        log.Println("error:", bne)
    }
    return
}
```

 모든 서비스 API 응답 오류는 [smithy.APIError](https://pkg.go.dev/github.com/aws/smithy-go/#APIError) 인터페이스 유형을 구현합니다. 이 인터페이스는 모델링된 서비스 오류 응답과 모델링되지 않은 서비스 오류 응답을 모두 처리하는 데 사용할 수 있습니다. 이 유형은 서비스에서 반환한 오류 코드 및 메시지에 대한 액세스를 제공합니다. 또한 이 유형은 오류의 결함이 알려진 경우 클라이언트 또는 서버로 인한 것인지 여부를 나타냅니다.

```
import "log"
import "github.com/aws/smithy-go"

// ...

if err != nil {
    var ae smithy.APIError
    if errors.As(err, &ae) {
        log.Printf("code: %s, message: %s, fault: %s", ae.ErrorCode(), ae.ErrorMessage(), ae.ErrorFault().String())
    }
    return
}
```

## 요청 식별자 검색
<a name="retrieving-request-identifiers"></a>

 AWS Support에서 작업할 때 문제를 해결하려는 요청을 식별하는 요청 식별자를 제공하라는 메시지가 표시될 수 있습니다. [http.ResponseError](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/transport/http#ResponseError)를 사용하고 `ServiceRequestID()` 메서드를 사용하여 오류 응답과 연결된 요청 식별자를 검색할 수 있습니다.

```
import "log"
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"

// ...

if err != nil {
    var re *awshttp.ResponseError
    if errors.As(err, &re) {
        log.Printf("requestID: %s, error: %v", re.ServiceRequestID(), re.Unwrap());
    }
    return
}
```

### Amazon S3 요청 식별자
<a name="s3-request-identifiers"></a>

 Amazon S3 요청에는 AWS Support에서 요청 문제 해결을 지원하는 데 사용할 수 있는 추가 식별자가 포함되어 있습니다. [s3.ResponseError](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3#ResponseError)를 사용하고 `ServiceRequestID()` 및 `ServiceHostID()`를 직접 호출하여 요청 ID와 호스트 ID를 검색할 수 있습니다.

```
import "log"
import "github.com/aws/aws-sdk-go-v2/service/s3"

// ...

if err != nil {
    var re s3.ResponseError
    if errors.As(err, &re) {
        log.Printf("requestID: %s, hostID: %s request failure", re.ServiceRequestID(), re.ServiceHostID());
    }
    return
}
```