Amazon S3와 작업 - AWS SDK for Java 2.x

Amazon S3와 작업

이 섹션에서는 AWS SDK for Java 2.x를 사용하여 Amazon S3로 작업하는 경우의 배경 정보를 제공합니다. 이 섹션에서는 이 가이드의 코드 예제 섹션에 제시된 Amazon S3 Java v2 예제를 보완합니다.

AWS SDK for Java 2.x의 S3 클라이언트

AWS SDK for Java 2.x는 다양한 유형의 S3 클라이언트를 제공합니다. 다음 표는 차이점을 보여주며 이를 통해 사용 사례에 가장 적합한 것을 결정할 수 있습니다.

Amazon S3 클라이언트의 다양한 종류
S3 클라이언트 간단한 설명 사용해야 하는 경우 제한 및 단점

AWS CRT 기반 S3 클라이언트

인터페이스: S3AsyncClient

Builder: S3CrtAsyncClientBuilder

  • Java 기반 S3 비동기식 클라이언트와 동일한 비동기식 API 작업을 제공하지만 향상된 성능이 특징입니다.

  • aws-crt 종속성이 필요합니다.

  • 자동 병렬 전송(멀티파트)을 지원합니다.

고성능 S3 클라이언트 사용: AWS CRT 기반 S3 클라이언트을(를) 참조하세요.

  • 애플리케이션에서 대용량 객체(8MB 초과)를 전송하며, 성능 극대화가 필요합니다.

  • 콘텐츠 길이를 알 수 없는 객체를 업로드하려고 합니다.

  • 처리량과 성능을 개선하는 향상된 연결 풀링 및 DNS 로드 밸런싱이 필요합니다.

  • 네트워크 장애가 발생할 경우 전송 신뢰성을 개선해야 합니다. 각 실패한 부분은 전송을 처음부터 다시 시작하지 않고 재시도됩니다.

  • Java 기반 S3 클라이언트보다 적은 구성 설정을 지원합니다.

  • 추가 종속성이 필요합니다.

멀티파트가 사용 설정된 Java 기반 S3 비동기식 클라이언트

인터페이스: S3AsyncClient

Builder: S3AsyncClientBuilder

  • 비동기식 API를 제공합니다.

  • 만들 때 멀티파트를 사용 설정하면 자동 병렬 전송(멀티파트)이 지원됩니다.

병렬 전송을 사용하도록 Java 기반 S3 비동기식 클라이언트 구성을(를) 참조하세요.

  • 애플리케이션에서 대용량 객체를 전송하며, 성능 향상이 필요합니다.

  • 콘텐츠 길이를 알 수 없는 객체를 업로드하려고 합니다.

  • 네트워크 장애가 발생할 경우 전송 신뢰성을 개선해야 합니다. 각 실패한 부분은 전송을 처음부터 다시 시작하지 않고 재시도됩니다.

  • AWS CRT 기반 S3 클라이언트에서 사용할 수 없는 구성 옵션이 필요합니다.

AWS CRT 기반 S3 클라이언트보다 성능이 떨어집니다.

멀티파트가 사용 설정되지 않은 Java 기반 S3 비동기식 클라이언트

인터페이스: S3AsyncClient

Builder: S3AsyncClientBuilder

  • 비동기식 API를 제공합니다.

  • 8MB 미만의 객체를 전송하고 있습니다.

  • 비동기식 API를 원합니다.

성능 최적화가 필요하지 않습니다.

Java 기반 S3 동기식 클라이언트

인터페이스: S3Client

Builder: S3ClientBuilder

  • 동기식 API를 제공합니다.

  • 8MB 미만의 객체를 전송하고 있습니다.

  • 동기식 API가 필요합니다.

성능 최적화가 필요하지 않습니다.

참고

버전 2.18.x 이후부터는 엔드포인트 재정의를 포함할 때 AWS SDK for Java 2.x에서 가상 호스트식 주소 지정을 사용합니다. 이는 버킷 이름이 유효한 DNS 레이블인 한 적용됩니다.

true에서 forcePathStyle 메서드를 호출하여 클라이언트가 버킷에 경로 스타일 주소 지정을 사용하도록 강제합니다.

다음 예제는 엔드포인트 재정의 및 경로 스타일 주소 지정을 사용하여 구성된 서비스 클라이언트를 보여줍니다.

S3Client client = S3Client.builder() .region(Region.US_WEST_2) .endpointOverride(URI.create("https://s3.us-west-2.amazonaws.com")) .forcePathStyle(true) .build();