반응형
📥 S3 파일 다운로드 설계 (Server to Server 포함)
파일 다운로드는 단순 기능이 아니라 아키텍처 문제입니다.
이번 글에서는 4가지 다운로드 방식과 실무 활용 패턴을 정리합니다.
✅ S3 다운로드 방식 4가지
- 📂 Public URL
- 🔐 Presigned URL
- 🖥 서버 중계 다운로드
- 🔗 Server to Server 다운로드
🔗 Server to Server 다운로드란?
서버가 직접 S3에서 파일을 가져와 내부적으로 사용하는 방식입니다.
- ✔ 클라이언트가 아닌 서버 간 통신
- ✔ 외부 노출 없이 안전한 처리
- ✔ 배치, 데이터 처리에 주로 사용
📊 언제 사용하는가?
- 📦 이미지 리사이징 / 썸네일 생성
- 📄 PDF 변환, 파일 가공
- 📊 로그 분석 및 데이터 처리
- 🔄 다른 스토리지로 파일 이동
📌 즉, 사용자 다운로드가 아니라 “서버 내부 작업용 다운로드”입니다.
⚙️ 동작 구조
기본 흐름은 다음과 같습니다.
- 1️⃣ Spring 서버가 S3에 요청
- 2️⃣ S3에서 파일 스트림 수신
- 3️⃣ 서버에서 파일 처리 (변환/분석)
- 4️⃣ 결과 저장 또는 다른 서비스로 전달
🧠 핵심 설계 포인트
- ✔ 메모리 사용 최소화 (스트리밍 처리)
- ✔ 대용량 파일은 분할 처리
- ✔ 네트워크 비용 고려
- ✔ 재시도 로직 설계 (Retry)
📌 Server to Server는 단순 다운로드가 아니라 데이터 처리 파이프라인입니다.
🔐 보안 특징
- ✔ IAM Role 기반 접근 (Access Key 불필요)
- ✔ 외부 URL 노출 없음
- ✔ 내부 네트워크에서 안전하게 처리
📌 가장 안전한 방식 중 하나입니다.
⚠ 주의사항
- ❌ 서버 메모리에 파일 전체 로드
- ❌ 대용량 처리 시 타임아웃
- ❌ 병렬 처리 설계 부족
📌 특히 대용량 파일은 반드시 스트리밍 기반 처리가 필요합니다.
📊 다른 방식과 비교
| 방식 | 사용 대상 | 특징 |
|---|---|---|
| Public URL | 이미지 | 빠르지만 보안 약함 |
| Presigned URL | 사용자 다운로드 | 보안 + 성능 균형 |
| 서버 중계 | 제어 필요 | 유연하지만 비용 큼 |
| Server to Server | 내부 처리 | 가장 안전, 백엔드 작업용 |
🎯 결론
S3 다운로드는 상황에 따라 전략이 달라집니다.
- ✔ 사용자 다운로드 → Presigned URL
- ✔ 공개 리소스 → Public URL
- ✔ 내부 처리 → Server to Server
특히 Server to Server는 백엔드 아키텍처의 핵심입니다.