

AWS SDK for JavaScript v2가 지원 종료에 도달했습니다. [AWS SDK for JavaScript v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/)로 마이그레이션하실 것을 권장합니다. 마이그레이션 방법에 대한 자세한 내용은 해당 [공지 사항](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)을 참조하세요.

# 요청 객체 이벤트 리스너 사용
<a name="using-a-response-event-handler"></a>

서비스 객체 메서드를 호출할 때 익명 콜백 함수를 파라미터로 생성해 전달하지 않으면 해당 메서드 호출은 `AWS.Request` 메서드를 사용해 수동으로 전송해야 하는 `send` 객체를 생성합니다.

응답을 처리하려면 `AWS.Request` 객체에 대한 이벤트 리스너를 생성해 메서드 호출에 대한 콜백 함수를 등록해야 합니다. 다음 예제에서는 성공적인 반환을 위해 서비스 객체 메서드 및 이벤트 리스너를 호출하기 위한 `AWS.Request` 객체를 생성하는 방법을 보여줍니다.

```
// create the AWS.Request object
var request = new AWS.EC2({apiVersion: '2014-10-01'}).describeInstances();

// register a callback event handler
request.on('success', function(response) {
  // log the successful data response
  console.log(response.data); 
});

// send the request
request.send();
```

`send` 객체에 대한 `AWS.Request` 메서드를 호출한 후에는 서비스 객체가 `AWS.Response` 객체를 수신할 때 이벤트 핸들러가 실행됩니다.

`AWS.Request` 객체에 대한 자세한 내용은 API 참조의 [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html) 섹션을 참조하세요. `AWS.Response` 객체에 대한 자세한 내용은 [응답 객체 사용](the-response-object.md) 또는 API 참조의 [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Response.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Response.html) 섹션을 참조하세요.

## 여러 콜백 묶기
<a name="response-chaining-callbacks"></a>

모든 요청 객체에 대해 여러 콜백을 등록할 수 있습니다. 다른 이벤트 또는 동일한 이벤트에 대해 여러 콜백을 등록할 수 있습니다. 또한 다음 예제에서처럼 콜백을 묶을 수 있습니다.

```
request.
  on('success', function(response) {
    console.log("Success!");
  }).
  on('error', function(response) {
    console.log("Error!");
  }).
  on('complete', function() {
    console.log("Always!");
  }).
  send();
```

## 객체 완료 이벤트 요청
<a name="request-object-completion-events"></a>

`AWS.Request` 객체는 각 서비스 작업 메서드의 응답을 바탕으로 다음 완료 이벤트를 발생시킵니다.
+ `success`
+ `error`
+ `complete`

이러한 이벤트에 대한 응답으로 콜백 함수를 등록할 수 있습니다. 모든 요청 객체 이벤트의 전체 목록을 보려면 API 참조의 [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html) 클래스를 참조하세요.

### 성공 이벤트
<a name="request-success-event"></a>

`success` 이벤트는 서비스 객체에서 성공적인 응답을 수신하면 발생합니다. 다음은 성공 이벤트에 대한 콜백 함수를 등록하는 방법입니다.

```
request.on('success', function(response) { 
  // event handler code
});
```

응답은 서비스의 직렬화된 응답 데이터가 포함된 `data` 속성을 제공합니다. 예를 들어, Amazon S3 서비스 객체의 `listBuckets` 메서드에 대한 직접접 호출은 다음과 같습니다.

```
s3.listBuckets.on('success', function(response) {
  console.log(response.data);
}).send();
```

이 호출은 응답을 반환한 다음 콘솔에 다음 `data`속성 내용을 출력합니다.

```
{ Owner: { ID: '...', DisplayName: '...' },
  Buckets: 
   [ { Name: 'someBucketName', CreationDate: someCreationDate },
     { Name: 'otherBucketName', CreationDate: otherCreationDate } ],
  RequestId: '...' }
```

### 오류 이벤트
<a name="request-error-event"></a>

`error` 이벤트는 서비스 객체에서 오류 응답을 수신하면 발생합니다. 다음은 성공 이벤트에 대한 콜백 함수를 등록하는 방법입니다.

```
request.on('error', function(error, response) { 
  // event handling code
});
```

`error` 이벤트가 발생하면 응답의 `data` 속성 값이 `null`이고 `error` 속성에는 오류 데이터가 포함됩니다. 연결된 `error` 객체는 등록된 콜백 함수에 첫 번째 파라미터로 전달됩니다. 예를 들어, 다음 코드에서는

```
s3.config.credentials.accessKeyId = 'invalid';
s3.listBuckets().on('error', function(error, response) {
  console.log(error);
}).send();
```

오류를 반환한 다음 콘솔에 다음 오류 데이터를 출력합니다.

```
{ code: 'Forbidden', message: null }
```

### 완료 이벤트
<a name="request-complete-event"></a>

호출 결과 성공 또는 오류인지 여부에 상관 없이 `complete` 이벤트는 서비스 객체 호출이 완료되면 발생합니다. 다음은 성공 이벤트에 대한 콜백 함수를 등록하는 방법입니다.

```
request.on('complete', function(response) { 
  // event handler code
});
```

`complete` 이벤트 콜백을 사용하면 성공 또는 오류 여부에 상관 없이 실행해야 하는 모든 요청 정리를 처리할 수 있습니다. `complete` 이벤트에 대한 콜백 내에서 응답 데이터를 사용하면 다음 예제에서 보여주는 것처럼 `response.data` 또는 `response.error` 속성 중 하나에 액세스하기 전에 먼저 두 속성을 확인합니다.

```
request.on('complete', function(response) {
  if (response.error) {
    // an error occurred, handle it
  } else {
    // we can use response.data here
  }
}).send();
```

## 객체 HTTP 이벤트 요청
<a name="request-object-http-events"></a>

`AWS.Request` 객체는 각 서비스 작업 메서드의 응답을 바탕으로 다음 HTTP 이벤트를 발생시킵니다.
+ `httpHeaders`
+ `httpData`
+ `httpUploadProgress`
+ `httpDownloadProgress`
+ `httpError`
+ `httpDone`

이러한 이벤트에 대한 응답으로 콜백 함수를 등록할 수 있습니다. 모든 요청 객체 이벤트의 전체 목록을 보려면 API 참조의 [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html) 클래스를 참조하세요.

### httpHeaders 이벤트
<a name="request-httpheaders-event"></a>

`httpHeaders` 이벤트는 원격 서버에서 헤더를 보낸 경우 발생합니다. 다음은 성공 이벤트에 대한 콜백 함수를 등록하는 방법입니다.

```
request.on('httpHeaders', function(statusCode, headers, response) {
  // event handling code
});
```

콜백 함수에 대한 `statusCode` 파라미터가 HTTP 상태 코드입니다. `headers` 파라미터에는 응답 헤더가 포함되어 있습니다.

### httpData 이벤트
<a name="request-httpdata-event"></a>

`httpData` 이벤트는 서버에서 응답 데이터 패킷을 스트리밍하기 위해 발생됩니다. 다음은 성공 이벤트에 대한 콜백 함수를 등록하는 방법입니다.

```
request.on('httpData', function(chunk, response) {
  // event handling code
});
```

이 이벤트는 일반적으로 전체 응답을 메모리로 로드하는 것이 적절하지 않은 경우 대용량 응답을 청크로 수신하는 데 사용됩니다. 이 이벤트에는 서버의 실제 데이터 중 일부가 포함되어 있는 추가 `chunk` 파라미터가 있습니다.

`httpData` 이벤트에 대한 콜백을 등록한 경우 응답의 `data` 속성에는 요청에 대해 직렬화된 전체 출력이 포함됩니다. 기본 제공 핸들러에 대한 추가 구문 분석 및 메모리 오버헤드가 없는 경우에는 기본 `httpData` 리스너를 제거해야 합니다.

### httpUploadProgress 및 httpDownloadProgress 이벤트
<a name="request-httpupload-download-progress-event"></a>

`httpUploadProgress` 이벤트는 HTTP 응답이 추가 데이터를 업로드한 경우 발생합니다. 마찬가지로, `httpDownloadProgress` 이벤트는 HTTP 요청에 추가 데이터를 다운로드한 경우 발생합니다. 다음은 이러한 이벤트에 대한 콜백 함수를 등록하는 방법입니다.

```
request.on('httpUploadProgress', function(progress, response) {
  // event handling code
})
.on('httpDownloadProgress', function(progress, response) {
  // event handling code
});
```

콜백 함수에 대한 `progress` 파라미터에는 로드된 총 요청 바이트와 함께 객체가 포함되어 있습니다.

### httpError 이벤트
<a name="request-httperror-event"></a>

`httpError` 이벤트는 HTTP 요청에 실패한 경우 발생합니다. 다음은 성공 이벤트에 대한 콜백 함수를 등록하는 방법입니다.

```
request.on('httpError', function(error, response) {
  // event handling code
});
```

콜백 함수에 대한 `error` 파라미터에는 발생한 오류가 포함되어 있습니다.

### httpDone 이벤트
<a name="request-httpdone-event"></a>

`httpDone` 이벤트는 서버가 데이터 전송을 마치면 발생합니다. 다음은 성공 이벤트에 대한 콜백 함수를 등록하는 방법입니다.

```
request.on('httpDone', function(response) {
  // event handling code
});
```