

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

# 의 1.x와 2.x 간 직렬화 차이 AWS SDK for Java
<a name="migration-serialization-changes"></a>

## 파라미터 차이를 요청할 객체 나열
<a name="serialization-diffs-list-obj-to-req-param"></a>

SDK for Java v1와 v2.x는 파라미터를 요청하기 위해 List 객체를 직렬화하는 방식이 다릅니다.

SDK for Java 1.x는 빈 목록을 직렬화하지 않는 반면, SDK for Java 2.x는 빈 목록을 빈 파라미터로 직렬화합니다.

예를 들어 `SampleRequest`를 받는 `SampleOperation`이 있는 서비스를 생각해 보겠습니다. `SampleRequest`는 다음 예시와 같이 두 개의 파라미터(문자열 유형 `str1`과 목록 유형 `listParam`)를 허용합니다.

**Example 1.x의 `SampleOperation`**  

```
SampleRequest v1Request = new SampleRequest()
    .withStr1("TestName");

sampleServiceV1Client.sampleOperation(v1Request);
```
와이어 레벨 로깅은 `listParam` 파라미터가 직렬화되지 않았음을 보여줍니다.  

```
Action=SampleOperation&Version=2011-01-01&str1=TestName
```

**Example 2.x의 `SampleOperation`**  

```
sampleServiceV2Client.sampleOperation(b -> b
    .str1("TestName"));
```
와이어 레벨 로깅은 `listParam` 파라미터가 값 없이 직렬화되었음을 보여줍니다.  

```
Action=SampleOperation&Version=2011-01-01&str1=TestName&listParam=
```

## V1의 POJO와 V2의 빌더 비교
<a name="serialization-json-objects"></a>

V1 SDK for Java는 변경 가능한 POJO 클래스를 사용하기 때문에 [Jackson](https://github.com/FasterXML/jackson-docs)과 같은 직렬화 및 역직렬화 라이브러리는 모델 객체를 직접 사용할 수 있습니다.

반대로 V2 SDK for Java는 변경 불가능한 모델 객체를 사용합니다. 중간 빌더를 사용하여 역직렬화를 수행해야 합니다.

다음 예제에서는 Jackson `ObjectMapper`를 사용하여 V1 및 V2로 `headBucket` API 직접 호출을 직렬화/역직렬화할 때의 차이점을 보여줍니다.

```
    public void sendRequest() throws IOException {
        final String bucketName = "amzn-s3-demo-bucket";
        final ObjectMapper mapper = new ObjectMapper();

        // V1 uses POJOs to serialize and deserialize.
        final AmazonS3 v1S3Client = AmazonS3ClientBuilder.defaultClient();
        HeadBucketResult resultV1 = v1S3Client.headBucket(
            new HeadBucketRequest(bucketName));

        String v1Serialized = mapper.writeValueAsString(resultV1);

        HeadBucketResult deserializedV1 = mapper.readValue(v1Serialized, HeadBucketResult.class);
        
        // V2 uses builders to serialize and deserialize.
        S3Client v2S3Client = S3Client.create();
        HeadBucketResponse v2Response = v2S3Client.headBucket(
            b -> b.bucket(bucketName));

        String v2Serialized = mapper.writeValueAsString(
            v2Response.toBuilder());

        HeadBucketResponse v2Deserialized = mapper.readValue(
            v2Serialized, HeadBucketResponse.serializableBuilderClass())
            .build();
    }
```