View a markdown version of this page

v1에서 AWS SDK for Java v2로 미리 서명된 URL 다운로드 마이그레이션 - AWS SDK for Java 2.x

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

v1에서 AWS SDK for Java v2로 미리 서명된 URL 다운로드 마이그레이션

미리 서명된 URL 다운로드 코드를 마이그레이션하여 비동기 처리를 사용하고 버전 2의 확장된 다운로드 옵션에 액세스합니다. 이 주제에서는 버전 1.x(v1)에서 버전 2.x(v2)로 마이그레이션하는 방법을 보여줍니다 AWS SDK for Java. v2 미리 서명된 URL 다운로드 기능에 대한 자세한 내용은 섹션을 참조하세요Amazon S3 미리 서명된 URLs 작업.

높은 수준의 변경 사항

다음 목록에는 미리 서명된 URL 다운로드에 대한 v1과 v2의 주요 차이점이 요약되어 있습니다.

  • 패키지: com.amazonaws.services.s3software.amazon.awssdk.services.s3.

  • 클라이언트 클래스: AmazonS3 (동기식) → S3AsyncClient (비동기식).

  • 아키텍처: 동기식 차단 호출 →를 사용한 비동기식 호출CompletableFuture.

  • 멀티파트: Transfer Manager를 통해서만 사용 가능 →를 사용하는 클라이언트에서 직접 사용 가능multipartEnabled(true).

  • Transfer Manager: 파일 대상만 → 파일, 바이트 또는 사용자 지정 변환기.

종속성, 패키지 및 클래스 이름의 변경 사항

다음 표에는 v1에서 v2로 변경된 종속성 및 클래스 이름이 나와 있습니다.

변경 v1 v2

Maven 종속성

<dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-bom</artifactId> <version>1.12.7971</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> </dependency> </dependencies>
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.48.02</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> <!-- Optional: for Transfer Manager --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3-transfer-manager</artifactId> </dependency> </dependencies>
패키지 이름 com.amazonaws.services.s3 software.amazon.awssdk.services.s3
클래스 이름 AmazonS3, TransferManager S3AsyncClient, S3TransferManager

1 Maven Central 웹 사이트의 최신 버전입니다. 2 Maven Central 웹 사이트의 최신 버전입니다.

API 변경 사항

S3 클라이언트 다운로드

다음 표에서는 S3 클라이언트 다운로드에 대한 v1 및 v2 API 호출을 비교합니다.

사용 사례: v1 v2
클라이언트 생성
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
S3AsyncClient s3AsyncClient = S3AsyncClient.create(); AsyncPresignedUrlExtension extension = s3AsyncClient.presignedUrlExtension();
미리 서명된 URL 생성
Date expiration = new Date( System.currentTimeMillis() + 600_000); URL presignedUrl = s3Client.generatePresignedUrl( new GeneratePresignedUrlRequest( "my-bucket", "my-key") .withMethod(HttpMethod.GET) .withExpiration(expiration));
S3Presigner presigner = S3Presigner.create(); PresignedGetObjectRequest presigned = presigner.presignGetObject(r -> r .getObjectRequest(req -> req .bucket("my-bucket").key("my-key")) .signatureDuration(Duration.ofMinutes(10))); URL presignedUrl = presigned.url(); presigner.close();
다운로드 요청 생성
PresignedUrlDownloadRequest downloadRequest = new PresignedUrlDownloadRequest(presignedUrl);
PresignedUrlDownloadRequest downloadRequest = PresignedUrlDownloadRequest.builder() .presignedUrl(presignedUrl) .build();
스트림에 다운로드
PresignedUrlDownloadResult result = s3Client.download(downloadRequest); InputStream content = result.getS3Object() .getObjectContent();
ResponseBytes<GetObjectResponse> bytes = extension.getObject(downloadRequest, AsyncResponseTransformer.toBytes()) .join();
파일로 다운로드
s3Client.download(downloadRequest, new File("/tmp/file.bin"));
extension.getObject(downloadRequest, Paths.get("/tmp/file.bin")) .join();
범위와 함께 다운로드
PresignedUrlDownloadRequest rangeRequest = new PresignedUrlDownloadRequest(presignedUrl); rangeRequest.setRange(0, 1023); s3Client.download(rangeRequest);
PresignedUrlDownloadRequest rangeRequest = PresignedUrlDownloadRequest.builder() .presignedUrl(presignedUrl) .range("bytes=0-1023") .build(); extension.getObject(rangeRequest, Paths.get("/tmp/partial.bin")) .join();

Transfer Manager 다운로드

다음 표에서는 Transfer Manager 다운로드에 대한 v1 및 v2 API 호출을 비교합니다.

사용 사례: v1 v2
Transfer Manager 생성
TransferManager tm = TransferManagerBuilder.standard().build();
S3TransferManager tm = S3TransferManager.create();
다운로드
PresignedUrlDownload download = tm.download( new PresignedUrlDownloadRequest(presignedUrl), new File("/tmp/file.bin")); download.waitForCompletion();
PresignedFileDownload download = tm.downloadFileWithPresignedUrl( PresignedDownloadFileRequest.builder() .presignedUrlDownloadRequest( downloadRequest) .destination(Paths.get("/tmp/file.bin")) .addTransferListener( LoggingTransferListener.create()) .build()); download.completionFuture().join();

자세한 내용은 미리 서명된 URL을 사용하여 다운로드 단원을 참조하십시오.

구성 변경

S3 클라이언트

다음 표에서는 v1에서 v2로의 S3 클라이언트 구성 변경 사항을 설명합니다.

설정 v1 v2
멀티파트 구성 PresignedUrlDownloadConfig.withDownloadSizePerRequest(long) S3AsyncClient.builder().multipartConfiguration(c -> c.minimumPartSizeInBytes(...))
사용자 지정 헤더 PresignedUrlDownloadRequest.putCustomRequestHeader(String, String) 지원되지 않음. 다운로드 시 Range 및 만 설정할 If-Match 수 있습니다.

Transfer Manager

다음 표에서는 Transfer Manager 구성 변경 사항을 v1에서 v2로 설명합니다.

설정 v1 v2
진행 상황 추적 PresignedUrlDownloadConfig.withS3progressListener(...) PresignedDownloadFileRequest.builder().addTransferListener(...)
재시도 시 재개 PresignedUrlDownloadConfig.withResumeOnRetry(true) 지원되지 않음
일시 중지/재개 지원되지 않음 지원되지 않음
참고

AWS CRT 기반 S3 클라이언트(S3AsyncClient.crtBuilder())는 현재 미리 서명된 URL 확장을 지원하지 않습니다. S3AsyncClient.builder()를 사용합니다.