본문으로 건너뛰기
HexaTransfer
블로그로 돌아가기
기술 심층 분석

Serverless 파일 전송: Architecture and Design

Build serverless 파일 전송 systems with AWS Lambda, Azure Functions, or Google Cloud Functions. Cost-effective and auto-scaling designs.

개인정보보호위원회(PIPC)는 클라우드 환경에서의 개인정보 처리에 대한 안전 조치를 요구합니다. 서버리스 파일 전송 시스템은 서버를 직접 관리하지 않고도 프로덕션 서비스를 운영할 수 있게 해주며, 요청 볼륨과 함수 실행 시간에 대해서만 비용을 지불합니다. AWS Lambda, Azure Functions, Google Cloud Functions가 컴퓨팅을 처리하고, S3·Blob Storage·GCS가 파일을 저장하며, 프리사인 URL은 클라이언트가 스토리지에 직접 업로드할 수 있게 해주어 Lambda가 바이트를 처리하지 않아도 됩니다.

서버리스가 파일 전송에 잘 맞는 이유

파일 전송은 버스트성입니다. 사용자가 업로드를 시작하면 몇 분간 요청이 폭발하다가 조용해집니다. 이 패턴을 위해 24/7 VM 플릿을 운영하는 것은 낭비입니다. Lambda는 요청에 맞춰 스핀업되고, 100ms 단위로 요금이 청구되며, 수동 설정 없이 수천 개의 동시 호출로 스케일링됩니다. 실제 파일 바이트는 프리사인 URL을 통해 클라이언트에서 S3로 직접 전송되므로, Lambda는 10GB 페이로드가 아니라 메타데이터와 인증 검사만 처리합니다.

핵심 컴포넌트와 역할

최소 서버리스 아키텍처: API Gateway(또는 에지 인증용 CloudFront Functions)가 HTTPS 요청을 받고, Lambda Functions가 업로드 초기화·메타데이터 CRUD·다운로드 권한 부여를 처리하며, S3가 실제 파일 저장소, DynamoDB 또는 RDS Aurora Serverless v2가 전송 메타데이터, SES나 SNS가 알림 이메일, EventBridge가 비동기 이벤트 라우팅을 담당합니다. 아홉 가지 서비스, 서버 제로. Terraform 또는 AWS CDK로 스택을 프로비저닝합니다.

프리사인 URL을 통한 S3 직접 업로드

서버리스를 경제적으로 만드는 패턴: 클라이언트가 Lambda를 호출하면 Lambda가 15분 유효한 프리사인 POST 또는 PUT URL을 생성해 반환하고, 클라이언트가 S3에 직접 업로드합니다. Lambda는 약 100ms 실행되며 $0.0000002 정도의 비용이 발생합니다. 10GB 업로드는 Lambda 관여 여부와 무관하게 S3 표준 요금으로 청구됩니다. 멀티파트 업로드의 경우 Lambda가 각 파트의 프리사인 URL을 생성하고, 클라이언트가 파트를 병렬 업로드하며, 최종 Lambda가 CompleteMultipartUpload를 완료합니다.

이벤트 기반 후처리

S3가 객체 업로드를 완료하면 이벤트를 발행합니다. S3 Event Notifications 또는 EventBridge가 Lambda 함수로 라우팅합니다: Lambda 컨테이너 이미지로 ClamAV 실행, Lambda 레이어의 ImageMagick으로 썸네일 생성, DynamoDB에서 전송 상태 업데이트, SES로 알림 이메일 발송. 각 단계는 필요할 때만 실행됩니다. 데드레터 큐가 실패를 조용히 사라지지 않게 잡아줍니다.

콜드 스타트와 완화 방법

Lambda 콜드 스타트는 지속적인 불만 사항입니다. Node.js Lambda는 일반적으로 200~500ms, Python도 비슷하며, Java나 .NET Lambda는 1~3초가 걸립니다. 사용자 대면 업로드 초기화는 콜드 스타트를 피해야 합니다. Provisioned Concurrency는 웜 풀을 유지하며 비용은 GB-초당 $0.0000041667입니다. Go나 Rust로 작성된 최소 의존성의 핫 경로 함수는 콜드 스타트가 100ms 미만입니다. 바이러스 검사·알림 같은 백그라운드 Lambda는 비동기 작업이므로 콜드 스타트가 무관합니다.

서버리스 규모의 데이터베이스 선택

Aurora Serverless v2는 0.5~128 ACU로 수요에 맞춰 컴퓨팅을 스케일링해 버스트성 워크로드에 비용 효율적입니다. DynamoDB On-Demand 요금은 요청당 청구되어 트래픽이 예측 불가능할 때 이상적입니다. RDS Proxy는 Lambda-RDS 연결 고갈을 방지합니다. 단순한 전송 메타데이터에는 DynamoDB가 종종 더 쉽습니다: 파티션 키 transfer_id와 정렬 키 메타데이터 필드로 구성된 싱글 테이블 설계가 모든 CRUD를 한 자릿수 밀리초에 처리합니다.

API Gateway, HTTP API, 에지 옵션

AWS는 세 가지 API 프론트 도어를 제공합니다. REST API Gateway는 기능이 풍부하지만 백만 요청당 $3.50으로 비쌉니다. HTTP API는 더 새롭고 백만 요청당 $1.00으로 저렴하며 대부분의 Lambda 기반 API에 적합합니다. CloudFront Functions와 Lambda@Edge는 초저지연 인증이나 리다이렉트 로직을 에지에서 실행합니다. 파일 전송 서비스에는 가장 가까운 지역의 HTTP API와 에셋 캐싱을 위한 CloudFront 조합이 비용과 성능의 균형을 맞춥니다.

인증 패턴

Cognito, Auth0, 또는 커스텀 Lambda 권한자가 발행한 JWT 토큰이 모든 요청에서 검증됩니다. API Gateway는 JWT 권한자를 기본 지원해 Lambda 실행 전에 토큰을 검증하므로 잘못된 요청에 Lambda 비용이 발생하지 않습니다. 익명 파일 공유(HexaTransfer 모델)의 경우, URL 프래그먼트에 포함된 무작위 256비트 토큰이 식별자이자 복호화 키 역할을 합니다. Lambda는 식별자만 검증하고 키는 클라이언트 측에 유지됩니다.

비용 구조와 스케일링 주의사항

서버리스 경제학은 전통적인 모델을 뒤집습니다. 낮은 트래픽은 사실상 무료이지만 높은 트래픽은 예상치 못한 비용을 만들 수 있습니다. 월 1,000만 건 전송의 전형적인 비용: Lambda 호출 $2~$20, API Gateway $10~$35, DynamoDB $20~$100, S3 스토리지는 보존 기간에 따라 크게 다름, S3 이그레스가 CDN이 없으면 가장 큰 항목. DynamoDB 스로틀에서 Lambda가 무한 재시도하는 버그가 한 시간에 $500을 만들 수 있습니다. 모든 Lambda에 CloudWatch 청구 경보와 동시성 제한을 설정하세요.

HexaTransfer는 서버리스와 컨테이너 기반 서비스의 하이브리드를 사용해 아키텍처를 단순하고 비용을 예측 가능하게 유지하며, 올바름과 신뢰성을 최우선으로 합니다.

https://hexatransfer.com — 무료, 계정 불필요, 최대 10GB.

엔드투엔드 암호화로 대용량 파일을 안전하게 전송

엔드투엔드 암호화로 최대 10GB의 파일을 무료로 전송하세요. 계정이 필요하지 않습니다. 업로드 전에 브라우저에서 파일이 암호화되어 다른 사람은 읽을 수 없습니다.

파일 보내기