

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

# AWS SDK for Ruby 버전 1 또는 2에서 AWS SDK for Ruby 버전 3으로 마이그레이션
<a name="migrating-to-v3"></a>

이 주제에는 Ruby용 AWS SDK 버전 1 또는 2에서 버전 3으로 마이그레이션하는 데 도움이 되는 세부 정보가 포함되어 있습니다.

## Side-by-side 사용
<a name="side-by-side-usage"></a>

 AWS SDK for Ruby 버전 1 또는 2를 버전 3으로 교체할 필요는 없습니다. 동일한 애플리케이션에서는 이 둘을 함께 사용할 수 있습니다. 자세한 내용은 [이 블로그 게시물](http://ruby.awsblog.com/post/TxFKSK2QJE6RPZ/Upcoming-Stable-Release-of-AWS-SDK-for-Ruby-Version-2)을 참조하십시오.

간단하게 예를 들면 다음과 같습니다.

```
require 'aws-sdk-v1' # version 1
require 'aws-sdk'    # version 2
require 'aws-sdk-s3' # version 3

s3 = AWS::S3::Client.new # version 1
s3 = Aws::S3::Client.new # version 2 or 3
```

버전 3 SDK를 사용하기 위해 기존 작업 버전 1 또는 2 코드를 다시 쓸 필요는 없습니다. 올바른 마이그레이션 전략은 버전 3 SDK에 대해서만 새 코드를 쓰는 것입니다.

## 일반적인 차이
<a name="general-differences"></a>

버전 3은 한 가지 중요한 면에서 버전 2와 다릅니다.
+ 각 서비스는 별도의 gem으로 사용할 수 있습니다.

버전 2는 여러 가지 중요한 면에서 버전 1과 다릅니다.
+ `Aws` 및 `AWS` 간에 루트 네임스페이스가 다릅니다. 따라서 항목별 사용이 가능합니다.
+  `Aws.config` - 이제 메서드가 아닌 vanilla Ruby 해시입니다.
+ 엄격한 생성자 옵션 - 버전 1에서 클라이언트나 리소스 객체를 생성할 때 알 수 없는 생성자 옵션이 무시됩니다. 버전 2에서는 알 수 없는 생성자 옵션이 `ArgumentError`를 트리거합니다. 예제:

  ```
  # version 1
  AWS::S3::Client.new(http_reed_timeout: 10)
  # oops, typo'd option is ignored
  
  # version 2
  Aws::S3::Client.new(http_reed_timeout: 10)
  # => raises ArgumentError
  ```

## 클라이언트 차이
<a name="client-differences"></a>

버전 2와 버전 3의 클라이언트 클래스 간에 차이가 없습니다.

버전 1과 버전 2 간에 클라이언트 클래스는 외부적인 차이가 가장 적습니다. 다수의 서비스 클라이언트에는 클라이언트 생성 후에 호환되는 인터페이스가 있습니다. 일부 중요한 차이는 다음과 같습니다.
+  `Aws::S3::Client` - 버전 1 Amazon S3 클라이언트 클래스는 수작업으로 코딩되었습니다. 버전 2는 서비스 모델에서 생성됩니다. 메서드 이름과 입력이 버전 2에서 크게 다릅니다.
+  `Aws::EC2::Client`- 버전 2는 출력 목록에 복수형 이름을 사용하고, 버전 1은 접미사 `_set`를 사용합니다. 예제:

  ```
  # version 1
  resp = AWS::EC2::Client.new.describe_security_groups
  resp.security_group_set
  #=> [...]
  
  # version 2
  resp = Aws::EC2::Client.new.describe_security_groups
  resp.security_groups
  #=> [...]
  ```
+  `Aws::SWF::Client` - 버전 2는 구조화된 응답을 사용하는 반면, 버전 1은 vanilla Ruby 해시를 사용합니다.
+ 서비스 클래스 이름 바꾸기 - 버전 2는 여러 서비스에 대해 다음과 같이 다른 이름을 사용합니다.
  +  `AWS::SimpleWorkflow`는 `Aws::SWF`가 됩니다.
  +  `AWS::ELB`는 `Aws::ElasticLoadBalancing`가 됩니다.
  +  `AWS::SimpleEmailService`는 `Aws::SES`가 됩니다.
+ 클라이언트 구성 옵션 - 버전 1 구성 옵션 중 일부가 버전 2에서 이름이 변경되었습니다. 다른 옵션은 제거되거나 바뀌었습니다. 주된 변경 사항은 다음과 같습니다.
  +  `:use_ssl`이 제거되었습니다. 버전 2는 모든 위치에서 SSL을 사용합니다. SSL을 비활성화하려면 `:endpoint`를 사용하는 `http://`를 구성해야 합니다.
  +  `:ssl_ca_file`가 이제 `:ssl_ca_bundle`입니다.
  +  `:ssl_ca_path`가 이제 `:ssl_ca_directory`입니다.
  + `:ssl_ca_store` 추가.
  +  `:endpoint`가 호스트 이름 대신 정규화된 HTTP 또는 HTTPS URI여야 합니다.
  + 각 서비스에 대한 `:*_port` 옵션이 제거되고 이제 `:endpoint`로 바뀌었습니다.
  +  `:user_agent_prefix`가 이제 `:user_agent_suffix`입니다.

## 리소스 차이
<a name="resource-differences"></a>

버전 2와 버전 3의 리소스 인터페이스 간에 차이가 없습니다.

버전 1과 버전 2의 리소스 인터페이스 간에 큰 차이가 있습니다. 버전 1은 전적으로 수작업 코딩되었지만, 버전 2 리소스 인터페이스는 모델에서 생성됩니다. 버전 2 리소스 인터페이스는 일관성이 훨씬 더 높습니다. 몇 가지 주요 시스템적인 차이는 다음과 같습니다.
+ 분리된 리소스 클래스 - 버전 2에서는 서비스 이름이 클래스가 아닌 모듈입니다. 여기서는 모듈이 리소스 인터페이스입니다.

  ```
  # version 1
  s3 = AWS::S3.new
  
  # version 2
  s3 = Aws::S3::Resource.new
  ```
+ 참조 리소스 - 버전 2 SDK는 모음과 개별 리소스 getter를 다음과 같은 두 개의 서로 다른 메서드로 분리합니다.

  ```
  # version 1
  s3.buckets['bucket-name'].objects['key'].delete
  
  # version 2
  s3.bucket('bucket-name').object('key').delete
  ```
+ 배치 작업 - 버전 1에서는 모든 배치 작업이 수작업 코딩된 유틸리티입니다. 버전 2에서는 다수의 배치 작업이 API를 통해 자동 생성된 일괄 처리 작업입니다. **버전 2 일괄 처리 인터페이스는 버전 1과 매우 다릅니다.**