피드로 돌아가기
Dev.toBackend
원문 읽기
Direct Uploads 도입을 통한 Puma 워커 병목 제거 및 인프라 비용 최적화
Pro File Uploads in Rails 8: Speed and Scalability with Direct Uploads
AI 요약
Context
사용자 브라우저에서 Rails 서버를 거쳐 스토리지로 이동하는 기존 파일 업로드 방식의 한계 분석. 대용량 파일 전송 시 Puma 워커가 점유되어 전체 애플리케이션 응답성이 저하되는 구조적 병목 현상 발생.
Technical Solution
- 브라우저에서 Cloud Storage(S3, R2)로 직접 데이터를 전송하는 Direct Uploads 아키텍처 전환
- Rails 서버의 역할을 데이터 스트림 처리에서 최소한의 Metadata 핸들링으로 축소하여 서버 부하 제거
- S3/R2 대시보드 내 CORS 설정 최적화를 통한 브라우저 보안 제약 해결 및 전송 경로 확보
- ActiveStorage의
direct_upload: true속성 적용을 통한 클라이언트 사이드 업로드 로직 자동화 - Stimulus 컨트롤러와
direct-upload:progress이벤트를 연동한 비동기 업로드 상태 시각화 구현 - 서버 리소스 점유 없이 스토리지 서비스가 업로드의 99%를 처리하는 오프로딩 구조 설계
실천 포인트
1. 프로덕션 환경에서 Local Disk 사용을 지양하고 S3/R2 등 외부 Cloud Storage 도입 여부 검토
2. 대용량 파일 업로드 시 서버 Worker의 I/O Wait 및 Thread 점유율 모니터링
3. 클라이언트-스토리지 간 직접 통신을 위한 CORS 정책 설정 확인
4. 사용자 경험 향상을 위해 ActiveStorage 이벤트 기반의 Progress Bar 구현 적용