

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

# AWS SDK for PHP 버전 3에 대한 FAQ
<a name="faq"></a>

## 클라이언트에서 사용 가능한 메서드는 무엇입니까?
<a name="what-methods-are-available-on-a-client"></a>

AWS SDK for PHP는 서비스 설명 및 동적 [magic \$1\$1call() methods](http://www.php.net/manual/en/language.oop5.overloading.php#object.call)를 사용하여 API 작업을 실행합니다. 웹 서비스 클라이언트에 사용 가능한 전체 메서드 목록은 클라이언트의 [API 설명서](https://docs.aws.amazon.com/aws-sdk-php/v3/api/index.html)에서 확인할 수 있습니다.

## cURL SSL 인증서 오류가 발생한 경우 어떻게 해야 하나요?
<a name="what-do-i-do-about-a-curl-ssl-certificate-error"></a>

이 문제는 cURL 및 SSL을 포함하는 최신이 아닌 CA 번들을 사용할 때 발생할 수 있습니다. 서버에서 CA 번들을 업데이트하거나 [cURL 웹 사이트](http://curl.haxx.se/docs/caextract.html)에서 직접 최신 CA 번들을 다운로드하여 이 문제를 해결할 수 있습니다.

기본적으로 AWS SDK for PHP는 PHP를 컴파일할 때 구성되는 CA 번들을 사용합니다. `openssl.cafile` PHP .ini 구성 설정을 디스크에 있는 CA 파일의 경로로 설정하도록 수정하여 PHP에서 사용되는 기본 CA 번들을 변경할 수 있습니다.

## 클라이언트에서 사용 가능한 API 버전은 무엇입니까?
<a name="what-api-versions-are-available-for-a-client"></a>

`version` 옵션은 클라이언트를 생성할 때 필요합니다. 사용 가능한 API 버전 목록은 각 클라이언트의 API 설명서 페이지(::aws-php-class:<index.html>)에서 확인할 수 있습니다. 특정 API 버전을 로드할 수 없는 경우 AWS SDK for PHP의 사본을 업데이트해야 할 수도 있습니다.

클라이언트의 API 공급자가 찾을 수 있는 최신 API 버전을 사용하려면 `latest` 문자열을 “버전” 구성 값에 제공합니다(기본 api\$1provider는 API용 SDK 모델의 `src/data` 디렉터리를 스캔함).

**주의**  
API 업데이트를 포함하는 SDK의 새 마이너 버전을 끌어오면 프로덕션 애플리케이션이 중단될 수 있으므로 프로덕션 애플리케이션에서 `latest`를 사용하지 않는 것이 좋습니다.

## 클라이언트에서 사용 가능한 리전 버전은 무엇입니까?
<a name="what-region-versions-are-available-for-a-client"></a>

`region` 옵션은 클라이언트를 생성할 때 필요하며, 문자열 값을 사용하여 지정합니다. 사용할 수 있는 AWS 리전 목록은 AWS 일반 참조의 [AWS 리전 및 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html)를 참조하세요.

```
// Set the Region to the EU (Frankfurt) Region.
$s3 = new Aws\S3\S3Client([
    'region'  => 'eu-central-1',
    'version' => '2006-03-01'
]);
```

## 2GB보다 큰 파일은 왜 업로드하거나 다운로드할 수 없나요?
<a name="why-can-t-i-upload-or-download-files-larger-than-2-gb"></a>

PHP는 부호가 있는 정수 유형을 사용하는데 대부분의 플랫폼에서는 32비트 정수를 사용하므로, AWS SDK for PHP는 32비트 스택에서 2GB보다 큰 파일을 올바르게 처리하지 못합니다. 여기서 “스택”은 CPU, OS, 웹 서버, PHP 바이너리를 포함합니다. 이것은 [잘 알려진 PHP 문제](http://www.google.com/search?q=php+2gb+32-bit)입니다. Microsoft Windows의 경우 PHP 7 빌드에서만 64비트 정수를 지원합니다.

권장 솔루션은 최신 버전의 PHP가 설치된 [64비트 Linux 스택](https://aws.amazon.com/amazon-linux-ami/)(예: 64비트 Amazon Linux AMI)을 사용하는 것입니다.

자세한 내용은 [PHP filesize: Return values](http://docs.php.net/manual/en/function.filesize.php#refsect1-function.filesize-returnvalues) 관련 문서를 참조하세요.

## 네트워크를 통해 전송되는 데이터를 확인하려면 어떻게 해야 하나요?
<a name="how-can-i-see-what-data-is-sent-over-the-wire"></a>

클라이언트 생성자에서 `debug` 옵션을 사용하여 네트워크를 통해 전송되는 데이터를 비롯한 디버그 정보를 가져올 수 있습니다. 이 옵션을 `true`로 설정하면 실행 중인 명령의 모든 변형, 전송 중인 요청, 수신 중인 응답, 처리 중인 결과가 STDOUT로 방출됩니다. 여기에는 네트워크를 통해 주고 받는 데이터가 포함됩니다.

```
$s3Client = new Aws\S3\S3Client([
    'region'  => 'us-standard',
    'version' => '2006-03-01',
    'debug'   => true
]);
```

## 요청에 대한 임의 헤더를 설정하려면 어떻게 해야 하나요?
<a name="how-can-i-set-arbitrary-headers-on-a-request"></a>

`Aws\HandlerList` 또는 `Aws\CommandInterface`의 `Aws\ClientInterface`에 사용자 지정 미들웨어를 추가하여 서비스 작업에 임의 헤더를 추가할 수 있습니다. 다음 예에서는 `Aws\Middleware::mapRequest` 헬퍼 메서드를 사용하여 특정 Amazon S3`PutObject` 작업에 `X-Foo-Baz` 헤더를 추가하는 방법을 보여줍니다.

자세한 내용은 [mapRequest](guide_handlers-and-middleware.md#map-request)를 참조하세요.

## 임의 요청에 서명하려면 어떻게 해야 하나요?
<a name="how-can-i-sign-an-arbitrary-request"></a>

SDK:AWS-PHP-Class: *SignatureV4 클래스 <class-Aws.Signature.SignatureV4.html>*를 사용하여 임의::aws-php-class: *PSR-7 요청 <class-Psr.Http.Message.RequestInterface.html>*에 서명할 수 있습니다.

이렇게 수행하는 방법에 대한 전체 예제는 [AWS SDK for PHP 버전 3](service_cloudsearch-custom-requests.md)으로 사용자 지정 Amazon CloudSearch 도메인 요청에 서명을 참조하세요.

## 명령을 전송하기 전에 수정하려면 어떻게 해야 하나요?
<a name="how-can-i-modify-a-command-before-sending-it"></a>

`Aws\HandlerList` 또는 `Aws\CommandInterface`의 `Aws\ClientInterface`에 사용자 지정 미들웨어를 추가하여 명령을 전송하기 전에 수정할 수 있습니다. 다음 예에서는 명령을 전송하기 전에 명령에 사용자 지정 명령 파라미터를 추가하는 방법을 보여줍니다. 이때 기본 옵션을 추가해야 합니다. 이 예에서는 `Aws\Middleware::mapCommand` 헬퍼 메서드를 사용합니다.

자세한 내용은 [mapCommand](guide_handlers-and-middleware.md#map-command)를 참조하세요.

## CredentialsException이란 무엇입니까?
<a name="what-is-a-credentialsexception"></a>

`Aws\Exception\CredentialsException`를 사용하는 동안 AWS SDK for PHP이 표시되는 경우, SDK에 자격 증명이 제공되지 않아 사용 중인 환경에서 자격 증명을 찾을 수 없다는 것을 의미합니다.

자격 증명 *없이* 클라이언트를 인스턴스화한 경우 서비스 작업을 처음으로 수행할 때 SDK에서 자격 증명을 찾으려고 시도합니다. 먼저 일부 특정 환경 변수를 확인한 다음 구성된 Amazon EC2 인스턴스에서만 사용 가능한 인스턴스 프로파일 자격 증명을 찾습니다. 자격 증명이 제공되지 않았거나 없는 경우 `Aws\Exception\CredentialsException`이 발생합니다.

이 오류가 표시되는 경우 인스턴스 프로파일 자격 증명을 사용하려면 SDK가 실행 중인 Amazon EC2 인스턴스가 적절한 IAM 역할로 구성되어 있는지 확인해야 합니다.

이 오류가 표시되는 경우 인스턴스 프로파일 자격 증명을 사용하지 **않으려면** SDK에 자격 증명을 올바르게 제공했는지 확인해야 합니다.

자세한 내용은 [AWS SDK for PHP 버전 3의 자격 증명](guide_credentials.md)을 참조하세요.

## AWS SDK for PHP는 HHVM에서 작동합니까?
<a name="does-the-sdk-php-work-on-hhvm"></a>

AWS SDK for PHP는 현재 HHVM에서 실행되지 않으며, [HHVM의 배포량 시맨틱 문제](https://github.com/facebook/hhvm/issues/6807)가 해결될 때까지 사용할 수 없습니다.

## SSL을 비활성화하려면 어떻게 해야 하나요?
<a name="how-do-i-disable-ssl"></a>

클라이언트 팩토리 메서드의 `scheme` 파라미터를 ‘http’로 설정하여 SSL을 비활성화할 수 있습니다. 모든 서비스에서 `http` 액세스를 지원하는 것은 아닙니다. 모든 지원 리전 및 엔드포인트 목록은 AWS 일반 참조에서 [AWS 리전 및 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html)를 참조하세요.

```
$client = new Aws\DynamoDb\DynamoDbClient([
    'version' => '2012-08-10',
    'region'  => 'us-west-2',
    'scheme'  => 'http'
]);
```

**주의**  
SSL에서 모든 데이터를 암호화해야 하고, 연결 핸드셰이크를 완료하는 데 TCP보다 더 많은 TCP 패킷이 필요하므로 SSL을 비활성화하면 성능이 약간 향상될 수 있습니다. 하지만 SSL을 비활성화하면 모든 데이터가 암호화되지 않은 네트워크를 통해 전송됩니다. 따라서 SSL을 비활성화하기 전에 보안 영향과 네트워크를 통한 염탐 가능성을 신중하게 고려해야 합니다.

## “구문 분석 오류”가 발생한 경우 어떻게 해야 하나요?
<a name="what-do-i-do-about-a-parse-error"></a>

PHP 엔진은 이해할 수 없는 구문이 발견될 경우 구문 분석 오류를 발생합니다. 이 오류는 다른 버전의 PHP용으로 작성된 코드를 실행하려고 시도할 때 거의 항상 발생합니다.

구문 분석 오류가 발생하는 경우, 시스템이 SDK의 [AWS SDK for PHP 버전 3에 대한 요구 사항 및 권장 사항](getting-started_requirements.md)을 충족하는지 확인해야 합니다.

## Amazon S3 클라이언트가 gzip으로 압축된 파일을 해제하는 이유는 무엇입니까?
<a name="why-is-the-s3-client-decompressing-gzipped-files"></a>

기본 Guzzle 6 HTTP 핸들러를 비롯한 일부 HTTP 핸들러에서는 압축된 응답 본문을 기본적으로 압축 해제합니다. [decode\$1content](guide_configuration.md#http-decode-content) HTTP 옵션을 `false`로 설정하여 이 동작을 재정의할 수 있습니다. 이전 버전과의 호환성을 위해 이 기본값은 변경할 수 없지만, S3 클라이언트 수준에서 콘텐츠 디코딩을 비활성화하는 것이 좋습니다.

자동 콘텐츠 디코딩을 비활성화하는 방법을 보여주는 예는 [decode\$1content](guide_configuration.md#http-decode-content)를 참조하세요.

## Amazon S3에서 본문 서명을 비활성화하려면 어떻게 해야 하나요?
<a name="how-do-i-disable-body-signing-in-s3"></a>

명령 객체의 `ContentSHA256` 파라미터를 `Aws\Signature\S3SignatureV4::UNSIGNED_PAYLOAD`로 설정하여 본문 서명을 비활성화할 수 있습니다. 그러면 AWS SDK for PHP는 이 파라미터를 'x-amz-content-sha-256' 헤더로 사용하고 표준 요청의 본문 체크섬을 사용합니다.

```
$s3Client = new Aws\S3\S3Client([
    'version' => '2006-03-01',
    'region'  => 'us-standard'
]);

$params = [
    'Bucket' => 'foo',
    'Key'    => 'baz',
    'ContentSHA256' => Aws\Signature\S3SignatureV4::UNSIGNED_PAYLOAD
];

// Using operation methods creates command implicitly
$result = $s3Client->putObject($params);

// Using commands explicitly.
$command = $s3Client->getCommand('PutObject', $params);
$result = $s3Client->execute($command);
```

## AWS SDK for PHP는 재시도 스키마를 어떻게 처리하나요?
<a name="how-is-retry-scheme-handled-in-the-sdk-php"></a>

AWS SDK for PHP에는 재시도 동작을 처리하는 `RetryMiddleware`가 있습니다. 서버 오류에 대한 5xx HTTP 상태 코드 측면에서 SDK는 500, 502, 503 및 504에 대해 재시도됩니다.

재시도를 통해 `RequestLimitExceeded`, `Throttling`, `ProvisionedThroughputExceededException`, `ThrottlingException`, `RequestThrottled`, `BandwidthLimitExceeded`를 비롯한 예외를 처리합니다.

또한 AWS SDK for PHP는 지수 지연을 재시도 스키마의 백오프 및 지터 알고리즘과 통합합니다. 모든 서비스에 대한 기본 재시도 동작은 `3`으로 구성되며, Amazon DynamoDB만 예외적으로 `10`으로 구성됩니다.

## 오류 코드가 있는 예외를 처리하려면 어떻게 해야 하나요?
<a name="how-do-i-handle-exceptions-with-error-codes"></a>

AWS SDK for PHP 사용자 지정 `Exception` 클래스 외에 각 AWS 서비스 클라이언트에는 [AwsExceptionAwsException](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Exception.AwsException.html)에서 상속되는 자체 예외 클래스가 있습니다. 각 메서드의 `Errors` 섹션에 나열된 API 관련 오류를 포착하기 위해 오류 유형을 자세히 결정할 수 있습니다.

오류 코드 정보는 `Aws\Exception\AwsException`에서 [getAwsErrorCode()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Exception.AwsException.html#_getAwsErrorCode)로 확인할 수 있습니다.

```
$sns = new \Aws\Sns\SnsClient([
    'region' => 'us-west-2',
    'version' => 'latest',
]);

try {
    $sns->publish([
        // parameters
        ...
    ]);
    // Do something
} catch (SnsException $e) {
    switch ($e->getAwsErrorCode()) {
        case 'EndpointDisabled':
        case 'NotFound':
            // Do something
            break;
    }
}
```