기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
병렬 전송을 사용하도록 Java 기반 S3 비동기식 클라이언트 구성
버전 2.27.5부터 표준 Java 기반 S3 비동기식 클라이언트는 자동 병렬 전송(멀티파트 업로드 및 다운로드)을 지원합니다. Java 기반 S3 비동기식 클라이언트를 만들 때 병렬 전송에 대한 지원을 구성합니다.
이 섹션에서는 병렬 전송을 사용하는 방법과 구성을 사용자 지정하는 방법을 보여줍니다.
S3AsyncClient의 인스턴스를 만듭니다.
빌더multipart* 메서드를 호출하지 않고 S3AsyncClient 인스턴스를 만들면 병렬 전송이 사용되지 않습니다. 다음 각 문은 멀티파트 업로드 및 다운로드를 지원하지 않고 Java 기반 S3 비동기식 클라이언트를 만듭니다.
멀티파트 지원 없이 만들기
예
import software.amazon.awssdk.auth.credentials.ProcessCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3AsyncClient; S3AsyncClient s3Client = S3AsyncClient.create(); S3AsyncClient s3Client2 = S3AsyncClient.builder().build(); S3AsyncClient s3Client3 = S3AsyncClient.builder() .credentialsProvider(ProcessCredentialsProvider.builder().build()) .region(Region.EU_NORTH_1) .build();
멀티파트 지원으로 만들기
기본 설정으로 병렬 전송을 사용하려면 다음 예제와 같이 빌더에서 true를 호출하고 multipartEnabled에 전달합니다.
예
S3AsyncClient s3AsyncClient2 = S3AsyncClient.builder() .multipartEnabled(true) .build();
thresholdInBytes 및 minimumPartSizeInBytes 설정의 기본값은 8MiB입니다.
멀티파트 설정을 사용자 지정하면 다음과 같이 병렬 전송이 자동으로 사용됩니다.
예
import software.amazon.awssdk.services.s3.S3AsyncClient; import static software.amazon.awssdk.transfer.s3.SizeConstant.MB; S3AsyncClient s3AsyncClient2 = S3AsyncClient.builder() .multipartConfiguration(b -> b .thresholdInBytes(16 * MB) .minimumPartSizeInBytes(10 * MB)) .build();
알 수 없는 크기의 스트림 업로드
멀티파트가 사용 설정된 Java 기반 S3 비동기식 클라이언트는 총 크기를 미리 알 수 없는 입력 스트림을 효율적으로 처리할 수 있습니다.
public PutObjectResponse asyncClient_multipart_stream_unknown_size(String bucketName, String key, InputStream inputStream) { S3AsyncClient s3AsyncClient = S3AsyncClient.builder().multipartEnabled(true).build(); ExecutorService executor = Executors.newSingleThreadExecutor(); AsyncRequestBody body = AsyncRequestBody.fromInputStream(inputStream, null, executor); // 'null' indicates that the // content length is unknown. CompletableFuture<PutObjectResponse> responseFuture = s3AsyncClient.putObject(r -> r.bucket(bucketName).key(key), body) .exceptionally(e -> { if (e != null) { logger.error(e.getMessage(), e); } return null; }); PutObjectResponse response = responseFuture.join(); // Wait for the response. executor.shutdown(); return response; }
이 접근 방식은 잘린 객체 또는 실패한 업로드와 같이 잘못된 콘텐츠 길이를 수동으로 지정할 때 발생할 수 있는 문제를 방지합니다.