데브허브 | DEVHUB | Spring Boot: Download Big Files from S3 with Multipart #springboot #awsSpring Boot: Download Big Files from S3 with Multipart #springboot #aws
- 대용량 파일을 작은 청크로 분할하여 동시 다운로드하고, 실패 시 재시도하며, 모든 청크 다운로드 후 하나의 파일로 재조립하는 멀티파트 다운로드 원리를 설명합니다. 🧩
- AWS S3에서 대용량 파일 다운로드를 위해 AWS Common Runtime(CRT) 기반 S3 클라이언트를 사용합니다. 🚀
- AWS SDK의 고수준 유틸리티인 Amazon S3 Transfer Manager는 멀티파트 전송을 통해 성능을 향상시키고, 실시간 진행 상황 모니터링 및 일시 중지/재개 기능을 제공하여 유연성을 높입니다. 📈
- Spring Batch 잡을 활용하여 파일을 다운로드하고(CRT 및 Transfer Manager 사용), 이후 파일 레코드를 청크 단위로 처리하여 데이터베이스에 저장하는 2단계 애플리케이션 구조를 제안합니다. 🏗️
- AWS 계정 없이 로컬 개발 환경에서 S3 API와 호환되는 MinIO를 사용하여 S3 기능을 시뮬레이션하며, Docker Compose로 PostgreSQL과 함께 MinIO를 실행합니다. 🐳
spring-cloud-aws-dependencies, spring-cloud-aws-starter-s3, aws-crt-s3, s3-transfer-manager 등의 Spring Boot 의존성을 사용하고, S3 엔드포인트, 액세스 키, 시크릿 키, 리전 등을 설정합니다. ⚙️
MyCustomS3Client 클래스에서 S3Template을 사용하여 버킷 내 파일을 나열하고, S3TransferManager와 DownloadFileRequest를 통해 지정된 경로로 파일을 다운로드하는 로직을 구현합니다. 💾
DownloadFileRequest에 LoggingTransferListener를 추가하여 파일 다운로드의 실시간 진행 상황을 콘솔에 로깅할 수 있습니다. 📊
- AWS S3 대신 MinIO를 사용하여 신용카드 인증 없이도 S3와 동일한 코드로 개발 및 테스트가 가능한 유연한 개발 환경 구축 방법을 강조합니다. 💡