ActiveStorage의 파일 처리 과정은 파일이 업로드된 후 Attachment
모델의 after_create_commit
콜백을 통해 비동기적으로 블롭(Blob)을 분석하는 작업이 큐에 추가되면서 시작됩니다. 이 분석 과정은 ActiveStorage
모듈에 등록된 분석기 목록에서 해당 파일에 적합한 첫 번째 분석기를 선택하여 실행됩니다. 기본적으로 ActiveStorage는 이미지(Vips 및 ImageMagick), 비디오, 오디오 데이터용 표준 분석기를 제공합니다. 개발자는 ActiveStorage::Analyzer
를 상속받는 커스텀 클래스를 작성하고 이를 분석기 목록의 맨 앞에 추가함으로써 기존의 분석 로직을 확장할 수 있습니다.
이 글에서는 커스텀 분석기의 두 가지 주요 활용 사례를 제시합니다. 첫 번째는 오디오 파일에서 파형 데이터를 추출하고 저장하는 것입니다. 예를 들어, Song
모델에 오디오 파일을 첨부했을 때, 기본 분석기는 MIME 타입 정보만 제공합니다. ActiveStorage::WaveformAnalyzer
와 같은 커스텀 분석기를 구현하여 ffmpeg
를 활용, 오디오 샘플 데이터를 압축된 파형 데이터로 변환하여 metadata
컬럼에 저장할 수 있습니다. 이 과정에서 모든 샘플을 저장하는 비효율성을 피하기 위해 제곱 평균 제곱근(RMS)을 계산하여 데이터를 압축하는 기술이 사용됩니다.
두 번째 사례는 이미지에서 Blurhash를 계산하는 것입니다. Blurhash는 이미지의 압축된 표현으로, 이미지 로딩 시 플레이스홀더로 사용하여 사용자 경험을 향상시킬 수 있습니다. blurhash
Ruby gem을 활용하고 ActiveStorage::Analyzer::ImageAnalyzer::ImageMagick
를 상속받는 커스텀 분석기를 구현하여 이미지의 축소된 버전을 생성하고 이를 기반으로 Blurhash 문자열을 계산하여 metadata
에 저장합니다. 이 두 사례는 ActiveStorage가 ffmpeg
나 ImageMagick
와 같은 외부 바이너리를 분석 파이프라인에 쉽게 통합할 수 있도록 설계되었음을 보여줍니다.