고성능 S3 클라이언트 사용: AWS CRT 기반 S3 클라이언트 - AWS SDK for Java 2.x

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

고성능 S3 클라이언트 사용: AWS CRT 기반 S3 클라이언트

AWS Common Runtime(CRT)을 기반으로 구축된 AWS CRT 기반 S3 클라이언트는 대체 S3 비동기 클라이언트입니다. Amazon S3의 멀티파트 업로드 API바이트 범위 가져오기를 자동으로 사용하여 향상된 성능과 안정성을 바탕으로 Amazon Simple Storage Service(Amazon S3)와 객체를 주고 받습니다.

AWS CRT 기반 S3 클라이언트는 네트워크 장애 발생 시 전송 안정성을 개선합니다. 전송을 처음부터 다시 시작하지 않고 파일 전송의 실패한 개별 부분을 다시 시도하여 안정성이 향상됩니다.

또한 AWS CRT 기반 S3 클라이언트는 향상된 연결 풀링 및 DNS(도메인 이름 시스템) 로드 밸런싱을 제공하여 처리량도 개선합니다.

SDK의 표준 S3 비동기 클라이언트 대신 AWS CRT 기반 S3 클라이언트를 사용하고 개선된 처리량을 즉시 활용할 수 있습니다.

SDK의 AWS CRT 기반 구성 요소

이 항목에 설명된 AWS CRT 기반 S3 클라이언트와 AWS CRT 기반 HTTP 클라이언트는 SDK의 서로 다른 구성 요소입니다.

AWS CRT 기반 S3 클라이언트S3AsyncClient 인터페이스를 구현한 것으로, Amazon S3 서비스를 사용하는 데 사용됩니다. 이는 S3AsyncClient 인터페이스의 Java 기반 구현의 대안이며 여러 가지 이점을 제공합니다.

AWS CRT 기반 HTTP 클라이언트SdkAsyncHttpClient 인터페이스를 구현한 것으로, 일반 HTTP 통신에 사용됩니다. 이는 SdkAsyncHttpClient 인터페이스의 Netty 구현의 대안이며 여러 가지 이점을 제공합니다.

두 구성 요소 모두 AWS 공용 런타임의 라이브러리를 사용하지만 AWS CRT 기반 HTTP S3 클라이언트는 aws-c-s3 라이브러리를 사용하고 S3 멀티파트 업로드 API 기능을 지원합니다. AWS CRT 기반 HTTP 클라이언트는 범용이므로 S3 멀티파트 업로드 API 기능을 지원하지 않습니다.

AWS CRT 기반 S3 클라이언트 사용을 위한 종속성 추가

AWS CRT 기반 S3 클라이언트를 사용하려면 Maven 프로젝트 파일에 다음 두 종속성을 추가하세요. 예제는 사용하는 최소 버전을 보여 줍니다. Maven 중앙 리포지토리에서 가장 최신 버전의 s3aws-crt 아티팩트를 검색하세요.

<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>2.20.68</version> </dependency> <dependency> <groupId>software.amazon.awssdk.crt</groupId> <artifactId>aws-crt</artifactId> <version>0.21.16</version> </dependency>

AWS CRT-based S3 클라이언트의 인스턴스를 만들기

다음 코드 조각과 같이 기본 설정을 사용하여 AWS CRT 기반 S3 클라이언트의 인스턴스를 생성합니다.

S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate();

클라이언트를 구성하려면 AWS CRT 클라이언트 빌더를 사용하세요. 빌더 방법을 변경하여 표준 S3 비동기 클라이언트에서 AWS CRT 기반 클라이언트로 전환할 수 있습니다.

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3AsyncClient; S3AsyncClient s3AsyncClient = S3AsyncClient.crtBuilder() .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.US_WEST_2) .targetThroughputInGbps(20.0) .minimumPartSizeInBytes(8 * 1025 * 1024L) .build();
참고

표준 빌더의 일부 설정은 AWS CRT 클라이언트 빌더에서 현재 지원되지 않을 수 있습니다. S3AsyncClient#builder()를 호출하여 표준 빌더를 가져오세요.

AWS CRT 기반 S3 클라이언트를 사용

AWS CRT 기반 S3 클라이언트를 사용하여 Amazon S3 API 작업을 호출합니다. 다음 예제는 AWS SDK for Java를 통해 사용할 수 있는 PutObjectGetObject 작업을 보여줍니다.

import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.core.async.AsyncResponseTransformer; import software.amazon.awssdk.services.s3.S3AsyncClient; import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.awssdk.services.s3.model.PutObjectResponse; S3AsyncClient s3Client = S3AsyncClient.crtCreate(); // Upload a local file to Amazon S3. PutObjectResponse putObjectResponse = s3Client.putObject(req -> req.bucket(<BUCKET_NAME>) .key(<KEY_NAME>), AsyncRequestBody.fromFile(Paths.get(<FILE_NAME>))) .join(); // Download an object from Amazon S3 to a local file. GetObjectResponse getObjectResponse = s3Client.getObject(req -> req.bucket(<BUCKET_NAME>) .key(<KEY_NAME>), AsyncResponseTransformer.toFile(Paths.get(<FILE_NAME>))) .join();