media-processing

2 개의 포스트

Scale" is usually translated as "대 (새 탭에서 열림)

메타(Meta)는 수년간 유지해 온 내부 전용 FFmpeg 포크(fork) 버전을 폐기하고, 최신 기능을 오픈소스 업스트림 버전에 통합함으로써 대규모 미디어 처리 인프라를 성공적으로 현대화했습니다. 이를 통해 매일 수십억 건의 비디오 처리를 더 효율적으로 수행할 수 있게 되었으며, 최신 코덱 지원과 시스템 안정성이라는 두 마리 토끼를 잡았습니다. 결과적으로 메타는 커뮤니티와의 협력을 통해 멀티 레인 트랜스코딩과 실시간 품질 지표 계산 같은 핵심 기능을 표준 FFmpeg에 안착시키는 성과를 거두었습니다. **효율적인 멀티 레인 트랜스코딩 구현** * DASH(Dynamic Adaptive Streaming over HTTP) 환경에서는 하나의 소스 영상을 다양한 해상도와 비트레이트의 '레인'으로 동시에 인코딩해야 하며, 기존의 직렬 방식이나 단순 병렬 프로세스 실행은 중복 디코딩으로 인한 자원 낭비가 심했습니다. * 메타는 단일 FFmpeg 명령 내에서 하나의 디코더가 읽은 프레임을 여러 인코더로 전달하는 구조를 채택하여 프로세스 시작 오버헤드와 컴퓨팅 비용을 대폭 절감했습니다. * 기존 FFmpeg은 여러 인코더 사용 시 각 프레임을 직렬로 처리했으나, 메타의 설계가 반영된 FFmpeg 6.0~8.0 버전부터는 모든 인코더 인스턴스를 병렬로 실행하는 향상된 스레딩 모델이 도입되었습니다. **라이브 스트리밍을 위한 실시간 품질 지표 측정** * 압축에 따른 화질 저하를 수치화하는 PSNR, SSIM, VMAF 등의 지표는 라이브 스트리밍 서비스의 품질 관리에 필수적입니다. * 기존에는 인코딩이 완료된 후 별도의 명령어로 품질을 계산해야 했으나, 메타는 인코딩 파이프라인 내에 디코더를 즉시 배치하는 '인루프(in-loop) 디코딩' 방식을 제안했습니다. * FFmpeg 7.0부터 이 기능이 공식 지원됨에 따라, 단일 파이프라인 안에서 압축 전후 프레임을 실시간으로 비교하여 지연 시간 없이 품질 지표를 추출할 수 있게 되었습니다. **전략적 업스트리밍과 하드웨어 가속기 지원** * 메타는 커뮤니티에 광범위한 이익을 줄 수 있는 범용 기능은 적극적으로 업스트리밍하여 기술적 부채를 줄이는 전략을 취하고 있습니다. * 반면, 메타의 전용 ASIC인 MSVP(Meta Scalable Video Processor) 지원과 같은 특정 인프라 의존적 기능은 표준 API를 준수하되 내부 패치로 관리하여 오픈소스 메인테이너의 부담을 최소화합니다. * 이러한 접근 방식은 표준화된 하드웨어 API를 활용함으로써 내부 가속기와 소프트웨어 파이프라인 간의 마찰을 줄이고 최신 FFmpeg 버전으로의 리베이스(Rebase)를 용이하게 만듭니다. 대규모 미디어 서비스를 운영하는 조직은 자체적인 최적화에 매몰되기보다, 핵심 기능을 오픈소스 표준에 기여함으로써 장기적인 유지보수 비용을 절감하고 생태계의 발전을 도모하는 것이 기술적으로나 사업적으로 유리합니다. 메타의 사례는 내부 포크의 한계를 극복하고 오픈소스 프로젝트와 공생하며 인프라 효율성을 극대화한 모범적인 사례로 평가됩니다.

대규모 환경의 Rust (새 탭에서 열림)

WhatsApp은 최근 30억 명 이상의 사용자들을 멀웨어 위협으로부터 보호하기 위해 미디어 처리 라이브러리를 Rust 언어로 재구축하여 성공적으로 배포했습니다. 이는 글로벌 규모의 서비스에서 Rust가 프로덕션 환경에 적합함을 증명한 사례로, 특히 메모리 안전성이 취약한 C/C++ 기반의 미디어 파싱 라이브러리에서 발생할 수 있는 보안 취약점을 근본적으로 해결하는 데 중점을 두었습니다. 결과적으로 WhatsApp은 성능과 메모리 효율성을 동시에 개선하면서도 사용자 보안을 한층 더 강화하는 성과를 거두었습니다. **미디어 보안의 취약점과 대응의 역사** - 이미지나 영상처럼 무해해 보이는 파일도 운영체제의 취약점을 공격하는 악성 코드를 포함할 수 있으며, 2015년 안드로이드의 'Stagefright' 취약점이 대표적인 사례입니다. - 당시 WhatsApp은 OS 라이브러리의 패치를 기다리는 대신, 자체 개발한 C++ 기반의 미디어 일관성 검사 라이브러리인 'wamedia'를 통해 표준을 준수하지 않는 파일을 사전에 차단하는 방식을 택했습니다. - 하지만 미디어 체크 로직 자체가 신뢰할 수 없는 입력을 자동으로 처리하기 때문에, 이 라이브러리 자체의 메모리 안전성을 확보하는 것이 보안의 핵심 과제로 떠올랐습니다. **Rust를 통한 대규모 현대화 및 성능 개선** - WhatsApp은 점진적인 수정 대신 기존 C++ 버전과 병행하여 Rust 버전의 라이브러리를 새롭게 개발했습니다. - 두 언어 간의 호환성을 보장하기 위해 '디퍼런셜 퍼징(Differential Fuzzing)'과 광범위한 통합 테스트를 거쳐 안전성을 검증했습니다. - 기존 160,000줄의 C++ 코드를 90,000줄의 Rust 코드로 대체했으며, 결과적으로 이전보다 더 우수한 성능과 낮은 런타임 메모리 사용량을 기록했습니다. - 안드로이드, iOS, 웹, 웨어러블 등 다양한 플랫폼 지원을 위한 빌드 시스템 구축과 바이너리 크기 최적화라는 기술적 난관을 극복하고 글로벌 배포를 완료했습니다. **다층 방어 체계 'Kaleidoscope'의 구축** - Rust로 작성된 이 라이브러리들은 'Kaleidoscope'라 불리는 종합 보안 체크 시스템의 핵심 구성 요소입니다. - 단순히 파일 구조의 결함을 찾는 것을 넘어, PDF 내의 스크립트 요소나 임베디드 파일, 확장자를 위조한 MIME 타입 변조 등을 감지합니다. - 실행 파일이나 앱 설치 파일과 같은 위험한 파일 형식을 식별하여 사용자 인터페이스(UX) 차원에서 특별 관리함으로써 비공식 클라이언트나 악성 첨부파일로부터 사용자를 보호합니다. **메모리 안전 언어 중심의 보안 로드맵** - WhatsApp의 분석에 따르면 심각도가 높은 취약점의 대부분은 C/C++의 메모리 관리 문제에서 발생하며, 이를 해결하기 위해 새로운 코드 작성 시 메모리 안전 언어(Memory Safe Language)를 기본으로 선택하고 있습니다. - 불필요한 공격 표면을 최소화하고, 기존 C/C++ 코드에 대해서는 강화된 메모리 할당자와 보안 버퍼 API를 적용하는 등 보안 보증 투자를 병행하고 있습니다. - 이번 Rust 도입의 성공을 바탕으로 향후 더 많은 영역에 Rust 채택을 가속화하여 내부 방어 체계를 지속적으로 강화할 계획입니다. **결론 및 제언** WhatsApp의 사례는 보안이 중요한 클라이언트 사이드 애플리케이션에서 Rust가 단순한 대안을 넘어 최고의 선택지가 될 수 있음을 보여줍니다. 특히 외부에서 유입되는 미가공 데이터를 파싱해야 하는 시스템이라면, 메모리 안전성이 보장되는 Rust로의 전환을 통해 보안 사고의 근본 원인을 제거하고 운영 효율성을 높이는 전략을 적극 검토할 필요가 있습니다.