Rails 8.1 업데이트를 통해 ActiveStorage::Blob
open 메서드는 이제 블록 없이 호출될 수 있으며, 이는 개발자에게 임시 파일의 라이프사이클에 대한 전적인 제어 권한을 부여합니다.
기존 ActiveStorage::Blob
open의 한계
-
자동 삭제 및 제약: 기존에는 블록 사용이 필수였고, 블록 종료 시 임시 파일이 즉시 삭제되어 백그라운드 작업 스케줄링 시 파일 접근 오류를 유발했습니다.
-
메모리 비효율: 임시 파일 경로 유지를 위해
blob.download를 사용하면 전체 파일을 메모리에 로드하여 대용량 파일 처리 시 메모리 스파이크를 야기했습니다.
블록 없는 ActiveStorage::Blob
open의 이점
새로운 방식은 file = blob.open을 통해 임시 파일을 얻고, 필요에 따라 file.close 및 file.unlink를 호출하여 수동으로 파일을 관리할 수 있게 합니다. 이는 다음과 같은 복잡한 워크플로우를 효율적으로 지원합니다.
-
대용량 파일 처리: 대용량 CSV 파일 스트리밍 및 다중 패스 처리 시 반복적인 다운로드 없이 파일을 재사용합니다.
-
다단계 작업 파이프라인: 다운로드, 유효성 검사, 변환 등 여러 단계로 구성된 작업에서 동일한 임시 파일을 지속적으로 활용하여 효율성을 높입니다.
-
외부 도구 및 분산 처리: FFmpeg, ImageMagick과 같은 외부 도구 통합 및 파일 분할을 통한 효율적인 분산 처리가 가능해집니다.
블록 API 사용 시점
단기적이거나 작은 작업(예: 이미지 크기 조정, PDF 유효성 검사)에서는 자동 정리가 이점인 기존 블록 API가 여전히 유용합니다.