대용량 블롭(Blob) 처리
시스템 디자인 인터뷰에서 대용량 파일을 다루는 법
시스템 디자인 인터뷰에서 대용량 파일을 다루는 법
동영상,이미지, 문서 같은 큰 파일은 분산 시스템에서 특별 취급이 필요합니다.
기가바이트급 바이트를 서버로 밀어 넣는 대신, 프리사인드 URL을 써서 클라이언트가 직접 객체 스토리지로 업로드하고, 다운로드는 CDN에서 받게 하세요. 그러면 이어받기 업로드, 병렬 전송, 진행률 추적까지, 토이 프로젝트와 실제 시스템을 가르는 요소들을 얻습니다.
문제
시스템 디자인 공부를 했다면, 큰 파일은 DB가 아니라 S3 같은 블롭 스토리지에 둬야 한다는 건 이미 아실 겁니다. 스토리지를 컴퓨트와 분리하면 독립적으로 스케일할 수 있고 DB 성능도 유지되죠.
왜 블롭 스토리지인가?
DB는 복잡한 쿼리가 필요한 구조적 데이터엔 강하지만, 거대한 바이너리에겐 최악입니다. 100MB 파일을 BLOB으로 넣으면 쿼리·백업·복제 성능이 무너집니다. 반면 S3 같은 오브젝트 스토리지는 무제한 용량, 99.999999999%(11 nines) 내구성, 오브젝트 단위 과금에 최적화되어 있어요. 일반적으로 10MB 이상이고 SQL 쿼리가 필요 없다면 블롭 스토리지가 정답입니다.
하지만 블롭 스토리지가 저장 문제는 풀어도 전송 문제는 못 풉니다. 표준 방식은 파일 바이트를 애플리케이션 서버를 경유시킵니다. 클라이언트가 2GB 영상을 업로드하면 API 서버가 받고, 그걸 스토리지로 다시 보냅니다. 다운로드도 반대 경로죠. 작은 파일엔 되지만, 큰 파일로 가면 깨집니다.


