Pinterest 미디어 스택 분석: 비동기 I/O와 FFmpeg를 이용한 고성능 다운로더 구축

발행: (2026년 4월 25일 PM 03:07 GMT+9)
3 분 소요
원문: Dev.to

Source: Dev.to

소개

엔지니어로서 우리는 매일 대규모 플랫폼이 어떻게 콘텐츠를 전달하는지에 관심을 갖습니다. Pinterest는 단순한 이미지 공유 사이트가 아니라 시각적 발견을 지원하는 거대한 미디어 전송 엔진입니다. 하지만 개발자가 아카이브 도구를 만들려고 할 때, Pinterest 고유의 동적 렌더링과 적응형 비트레이트 스트리밍(ABR)은 큰 기술적 장벽이 됩니다.

Pinterest의 비디오는 단순한 MP4 파일로 제공되지 않습니다. 사용자 경험을 최적화하기 위해 HLS(.m3u8) 포맷이 사용됩니다. 페이지 내 PWS_DATA 스크립트 태그에 주입된 Redux 상태 트리를 추출해 필요한 미디어 정보를 얻습니다.

Downloader의 핵심은 Python Asyncio + FastAPI + Redis 스택으로 구축되어 있으며, 다음 포인트가 중요합니다.

  • 잘게 나뉜 TS(Transport Stream) 파일을 가져와 하나의 MP4로 병합해야 합니다.

  • 무손실 다중화(Lossless Muxing)

    ffmpeg -i input.m3u8 -c copy output.mp4

    H.264/HEVC 등 코덱이 표준을 준수한다면 -c copy 플래그를 사용해 픽셀 재계산을 피하고 컨테이너 변환만 밀리초 단위로 완료합니다.

  • 병렬 세그먼트 페치
    여러 코루틴을 활용해 수십 개의 TS 파일을 동시에 가져와 다운로드 시간을 단축합니다.

  • Pinterest의 엄격한 반크롤링 방어(WAF)에 대응하기 위해 인프라 계층에서의 공이 필요합니다.

이 프로젝트는 단순한 스크래핑 작업이 아니라 스트리밍 프로토콜, 비동기 시스템 설계, 그리고 대규모 네트워크 요청 최적화의 집대성입니다. 현재 더 빠른 속도를 위해 Rust로 일부 모듈을 재작성하는 방안도 검토 중입니다.

기술 스택 개요

  • Backend: Python / FastAPI / Redis / FFmpeg
  • Core: 비동기 코루틴 풀 + HLS 실시간 캡슐화 엔진
  • Architecture: Docker 마이크로서비스
  • Frontend: HTML5 / Tailwind CSS / Vanilla JS / PWA

HLS 처리와 대규모 크롤링 설계에 대해 자유롭게 댓글로 토론해 주세요.

Tags: WebDev, Pinterest, Python, OpenSource, Programming, MediaStreaming, DevTools, Architecture

0 조회
Back to Blog

관련 글

더 보기 »

내가 마침내 봇에게 '지루한' 일을 맡긴 방법

Google Cloud NEXT ’26에 대한 나의 견해: 우리 모두를 위한 “Agentic” 시대 NEXT ’26에 참석한 모든 사람들은 “Agents”에 대해 이야기하고 있습니다. 이것이 공상과학 용어처럼 들린다면, …