Netflix

17 개의 포스트

netflixtechblog.com

태그로 필터

netflix

글로벌 스토리텔링의 (새 탭에서 열림)

넷플릭스는 전 세계 190개국 이상에서 50개 이상의 언어로 서비스를 제공하며 급격히 성장했으나, 이 과정에서 로컬라이제이션(현지화) 분석 워크플로우가 파편화되고 파이프라인이 중복되는 기술 부채를 겪게 되었습니다. 이를 해결하기 위해 넷플릭스는 비즈니스 로직을 중앙 집중화하고 데이터 파이프라인을 통합하는 현대화 전략을 추진하여 보고의 일관성을 확보하고 운영 효율성을 높였습니다. 결과적으로 이러한 아키텍처 개선은 단순한 지표 관리를 넘어, 사용자 경험을 심층적으로 이해하고 현지화 품질을 고도화하는 기반이 되고 있습니다. **데이터 감사와 백엔드 통합 파이프라인 구축** * 기존의 40개가 넘는 대시보드와 도구를 전수 조사하여 사용성과 코드 품질을 평가하고, 프론트엔드 시각화 수정보다는 백엔드 파이프라인 통합에 집중했습니다. * 운영 성과, 생산 역량, 재무 지표 등 서로 분산되어 있던 기존의 더빙 파트너 관련 대시보드들을 하나의 통합 데이터 레이어로 병합하여 관리 효율을 극대화했습니다. * 데이터 소스를 통합함으로써 "특정 자산을 누가 제작했는가"와 같은 복잡한 질문에 대해 단일화된 답변을 제공할 수 있는 환경을 조성했습니다. **'기술 외적 부채' 해결을 통한 인사이트 도출** * 도구가 복잡하여 이해관계자들이 해석에 어려움을 겪는 '기술 외적 부채(Not-So-Tech Debt)'를 해결하기 위해 데이터 스토리텔링 방식을 개선했습니다. * 개별적으로 보고되던 오디오(더빙)와 텍스트(자막) 지표를 '소비 언어(Consumption Language)'라는 개념으로 결합하여, 사용자가 원어로 감상하는지 혹은 현지화된 콘텐츠를 선호하는지 더 직관적으로 파악할 수 있게 했습니다. * 이를 통해 자막과 더빙 중 어떤 방식을 조합했을 때 사용자의 만족도가 높은지 등 구체적인 선호도 데이터를 분석할 수 있게 되었습니다. **중앙 집중형 비즈니스 로직(Write Once, Read Many) 설계** * 로컬라이제이션 지표의 핵심 로직을 '언어 자산 생산자(Language Asset Producer)' 테이블과 같은 공유 테이블로 중앙화하여 비즈니스 로직의 중복을 제거했습니다. * 한 번 정의된 로직을 여러 하위 도메인(더빙 품질, 번역 품질 등)에서 참조하는 구조를 통해, 상위 로직이 변경될 때 모든 시스템에 즉각적으로 반영되도록 설계했습니다. * 이러한 구조적 변화는 데이터의 일관성을 보장하고, 로직 수정 시 발생하는 대규모 유지보수 부담을 획기적으로 줄여주었습니다. **이벤트 레벨 분석을 통한 세밀한 사용자 경험 최적화** * 자산 단위의 지표를 넘어, 개별 자막 줄(line) 단위의 데이터를 캡처하는 '이벤트 레벨 분석'으로 데이터 모델을 확장하고 있습니다. * 자막의 읽기 속도(reading speed)와 같은 미세한 특성이 사용자의 몰입도와 리텐션에 어떤 영향을 미치는지 정교하게 분석합니다. * 분석된 데이터를 바탕으로 번역가들에게 제공하는 스타일 가이드를 정교화하여, 전 세계 모든 사용자가 언어 장벽 없이 최상의 시청 경험을 누릴 수 있도록 지원합니다. 현대적인 데이터 분석 환경을 구축하기 위해서는 단순히 도구를 늘리는 것이 아니라, 파편화된 로직을 중앙화하고 사용자 중심의 데이터 모델로 재설계하는 과정이 필수적입니다. 넷플릭스의 사례처럼 데이터 아키텍처를 '자산' 단위에서 '이벤트' 단위로 구체화하면, 비즈니스 운영 효율화뿐만 아니라 실제 제품의 품질과 고객 경험을 직접적으로 개선하는 강력한 인사이트를 얻을 수 있습니다.

netflix

JDK Vector API를 활용 (새 탭에서 열림)

넷플릭스는 추천 시스템의 핵심 로직인 '비디오 참신성 점수(serendipity scoring)' 계산 과정에서 발생하는 과도한 CPU 점유율(7.5%) 문제를 해결하기 위해 대대적인 최적화를 수행했습니다. 개별 벡터의 유사도를 반복 계산하던 기존 방식을 행렬 연산 기반의 배치 처리로 전환하고, 메모리 레이아웃 최적화와 JDK Vector API를 도입함으로써 연산 효율을 극대화하고 클러스터 유지 비용을 절감하는 성과를 거두었습니다. **기존 구현의 성능 병목 현상** * 후보 영화군(M)과 사용자의 시청 기록(N)을 비교할 때 $O(M \times N)$의 중첩 루프 구조로 코사인 유사도를 계산하여 순차적 작업 부하가 컸습니다. * 파편화된 메모리 접근 방식과 반복적인 임베딩 조회로 인해 캐시 지역성이 떨어졌으며, 이는 서비스 전체 CPU 프로파일링에서 주요 핫스팟으로 나타났습니다. * 특히 대량의 배치 요청이 들어올 경우 계산량이 기하급수적으로 늘어나 전체 서비스의 응답 속도에 악영향을 주었습니다. **행렬 연산으로의 전환 및 배치화** * 수많은 작은 도트 곱(dot product) 연산을 하나의 행렬 곱셈($M \times D$와 $D \times N$ 행렬의 곱)으로 재설계하여 수학적 최적화의 기반을 마련했습니다. * 모든 행을 단위 벡터로 정규화한 후 행렬 연산을 수행하여 한 번에 모든 유사도 점수를 산출하는 방식으로 알고리즘을 개선했습니다. * 단일 요청과 배치 요청을 모두 지원하도록 인터페이스를 확장하여 하위 호환성을 유지하면서도 처리 효율을 높였습니다. **메모리 레이아웃 최적화와 객체 재사용** * 다차원 배열(`double[][]`) 사용 시 발생하는 가비지 컬렉션(GC) 압박과 메모리 비연속성 문제를 해결하기 위해 1차원 평면 버퍼(`double[]`) 구조를 도입했습니다. * `ThreadLocal<BufferHolder>`를 활용해 각 스레드에서 연산용 버퍼를 재사용함으로써 매 요청마다 발생하는 메모리 할당 비용을 제거했습니다. * 데이터 레이아웃을 행 우선(row-major) 순서의 연속된 메모리로 배치하여 CPU 캐시 효율을 비약적으로 향상했습니다. **네이티브 라이브러리(BLAS)의 한계와 대안** * 고성능 선형 대수 라이브러리인 BLAS 도입을 검토했으나, 자바와 네이티브 코드 간의 JNI(Java Native Interface) 전환 오버헤드로 인해 실질적인 성능 이득이 크지 않았습니다. * 또한 자바의 행렬 레이아웃과 네이티브 라이브러리 요구 사양 간의 차이로 인해 추가적인 데이터 복사 비용이 발생하여 기대 성능에 미치지 못했습니다. * 이를 해결하기 위해 자바 환경 내에서 하드웨어의 SIMD 기능을 직접 활용할 수 있는 JDK Vector API가 최종적인 최적화 도구로 선택되었습니다. 알고리즘의 시간 복잡도를 개선하는 것만큼이나 메모리 배치와 CPU의 하드웨어 가속(SIMD)을 고려한 저수준 최적화가 중요합니다. 특히 대규모 트래픽을 처리하는 자바 기반 마이크로서비스라면 JDK Vector API를 통해 네이티브 라이브러리 호출 없이도 고성능 연산을 구현할 수 있습니다.

netflix

넷플릭스의 마운트 메 (새 탭에서 열림)

넷플릭스는 컨테이너 런타임을 현대화하는 과정에서 수백 개의 컨테이너가 동시에 부팅될 때 시스템이 멈추거나 헬스 체크가 실패하는 심각한 병목 현상에 직면했습니다. 조사 결과, 이는 컨테이너 보안을 위해 도입된 사용자 네임스페이스(User Namespace)의 `idmap` 마운트 작업이 리눅스 커널의 VFS(가상 파일 시스템) 전역 잠금 장치에서 경합을 일으키기 때문으로 밝혀졌습니다. 특히 이러한 현상은 구형 다중 소켓(NUMA) 하드웨어 아키텍처에서 더욱 두드러지게 나타났으며, 최신 단일 소켓 인스턴스로 전환함으로써 스케일링 성능을 크게 개선할 수 있었습니다. **컨테이너 보안 강화와 마운트 폭증의 관계** - 넷플릭스는 보안 강화를 위해 각 컨테이너에 고유한 사용자 범위를 할당하는 새로운 런타임(Kubelet + Containerd)으로 전환했습니다. - 파일 소유권을 실제로 변경하는 비용을 줄이기 위해 커널의 `idmap` 마운트 기능을 사용하는데, 이는 각 레이어마다 `open_tree`, `mount_setattr`, `move_mount` 등의 호출을 발생시킵니다. - 50개의 레이어를 가진 컨테이너 100개를 동시에 실행할 경우, 이론적으로 약 20,000번 이상의 마운트 관련 작업이 수행되며 이는 커널의 마운트 테이블 전역 락(Global Lock)에 엄청난 부하를 줍니다. **커널 및 하드웨어 수준의 병목 현상 진단** - 시스템 분석 결과, CPU는 커널의 `path_init()` 함수 내 시퀀스 락(Sequence Lock)을 기다리는 스핀 루프(Spin Loop)에서 대부분의 시간을 소비하며 'Pause' 명령어를 반복 실행했습니다. - TMA(Topdown Microarchitecture Analysis) 분석에 따르면 파이프라인 슬롯의 95.5%가 경합된 액세스로 인해 중단되었으며, 57%는 가짜 공유(False Sharing)로 인해 발생했습니다. - 여러 코어가 동일한 캐시 라인에 접근하려고 시도하면서 캐시 라인 바운싱(Cache Line Bouncing) 현상이 발생하여 시스템 성능이 급격히 저하되었습니다. **인스턴스 아키텍처에 따른 성능 차이** - 테스트 결과, 5세대 인텔 듀얼 소켓 인스턴스인 `r5.metal`은 100개 이상의 컨테이너가 동시에 실행될 때 성능이 급격히 저하되며 실패하는 모습을 보였습니다. - 반면, 단일 소켓 및 단일 NUMA 도메인을 사용하는 7세대 인스턴스(`m7i.metal-24xl`, `m7a.24xlarge`)는 높은 동시성 환경에서도 훨씬 낮은 지연 시간과 높은 성공률을 유지했습니다. - 이는 NUMA 아키텍처의 프로세서 간 상호 연결(Interconnect) 대기 시간이 전역 락 경합 상황에서 병목 현상을 수배로 증폭시키기 때문입니다. 대규모 컨테이너 환경을 운영한다면 컨테이너 이미지의 레이어 수를 최소화하여 마운트 발생 횟수를 줄여야 합니다. 또한, 컨테이너 생성 및 삭제가 빈번한 워크로드의 경우 다중 소켓 기반의 구형 인스턴스보다는 메모리 접근 대기 시간이 짧고 락 경합에 유리한 최신 단일 소켓 혹은 단일 NUMA 노드 아키텍처를 선택하는 것이 성능 안정성에 유리합니다.

netflix

MediaFM: 넷 (새 탭에서 열림)

넷플릭스는 방대한 콘텐츠 카탈로그를 정밀하게 이해하기 위해 비디오, 오디오, 텍스트를 결합한 자체 멀티모달 파운데이션 모델인 MediaFM을 개발했습니다. 이 모델은 쇼트(Shot) 단위의 정보를 긴 문맥 속에서 학습하여 내러티브 구조와 감정적 흐름을 파악하며, 광고 타겟팅, 클립 인기 예측, 장르 분류 등 다양한 서비스의 기반 기술로 활용됩니다. 결과적으로 MediaFM은 단순한 프레임 분석을 넘어 영상의 전체적인 맥락을 기계가 읽을 수 있게 변환함으로써 넷플릭스의 콘텐츠 운영 효율과 사용자 경험을 크게 향상시키고 있습니다. **트리모달 데이터의 결합과 전처리** * 모델의 기본 분석 단위는 쇼트 경계 감지 알고리즘으로 분할된 '쇼트(Shot)'이며, 각 쇼트에서 비디오, 오디오, 텍스트 세 가지 핵심 모달리티를 추출합니다. * 비디오는 내부 모델인 SeqCLIP, 오디오는 Meta의 wav2vec2, 자막 및 오디오 설명은 OpenAI의 text-embedding-3-large를 사용하여 개별 임베딩을 생성합니다. * 추출된 세 임베딩을 하나로 결합하여 2304차원의 통합 벡터를 만들고, 이를 최대 512개의 시퀀스로 구성하여 트랜스포머 인코더에 입력합니다. * 작품의 시놉시스와 태그 같은 타이틀 수준의 메타데이터를 [GLOBAL] 토큰으로 변환하여 삽입함으로써, 개별 쇼트가 전체 작품의 맥락을 반영할 수 있도록 설계했습니다. **트랜스포머 기반 아키텍처와 학습 방식** * MediaFM은 BERT와 유사한 구조의 트랜스포머 인코더를 사용하여 쇼트 간의 시간적 관계와 문맥적 정보를 학습합니다. * '마스크 쇼트 모델링(Masked Shot Modeling, MSM)' 기법을 학습 목표로 사용하며, 입력 시퀀스의 20%를 마스킹하고 주변 정보를 통해 원래의 결합 임베딩을 코사인 유사도 기반으로 예측하도록 훈련합니다. * 최적화 과정에서 하이퍼파라미터 튜닝을 위해 Muon 옵티마이저를 도입하여 기존 AdamW 방식보다 성능을 유의미하게 개선했습니다. * 이 과정을 통해 생성된 임베딩은 단순한 정보를 넘어 영상의 전후 흐름이 반영된 '문맥화된 표현(Contextualized representation)'이 됩니다. **주요 활용 사례 및 성능 평가** * 광고 적합성(Ad Relevancy): 추출된 임베딩을 통해 특정 광고 배치에 적합한 클립을 분류하고 후보군을 식별하여 광고 서빙 시스템의 효율을 높입니다. * 클립 인기 및 톤 분석: 클립의 클릭률(CTR)을 바탕으로 상대적 인기를 예측하거나, 영상의 분위기(공포, 유머 등 100여 개 카테고리)를 정밀하게 분석합니다. * 장르 분류 및 리트리벌: 11개의 주요 장르 분류와 더불어, 특정 작품을 홍보하기에 적합한 '가치 있는 클립'인지 여부를 판별하는 이진 분류 작업에 활용됩니다. * 성능 평가 결과, 특정 클립을 단독으로 분석하는 것보다 전체 에피소드라는 더 큰 문맥 안에서 임베딩을 추출할 때 모든 작업에서 월등한 성능을 보였습니다. MediaFM은 넷플릭스가 보유한 대규모 엔터테인먼트 특화 데이터를 학습하여 콘텐츠의 깊은 의미를 파악하는 강력한 도구입니다. 특히 신작 출시 시 데이터가 부족한 '콜드 스타트' 문제를 해결하고, 예고편이나 아트워크 같은 홍보 자산을 최적화하는 데 기여함으로써 미디어 산업에서 멀티모달 AI가 나아가야 할 실질적인 방향을 제시하고 있습니다.

netflix

넷플릭스의 LL (새 탭에서 열림)

넷플릭스는 일반적인 기초 모델을 자사 서비스의 카탈로그와 사용자 맥락에 맞게 최적화하기 위해, 인프라의 복잡성을 추상화한 '포스트 트레이닝(Post-Training) 프레임워크'를 구축했습니다. 이 프레임워크는 대규모 분산 GPU 클러스터 환경에서 데이터 파이프라인과 모델 훈련 워크플로우를 효율적으로 조율하여 연구자들이 하드웨어가 아닌 모델 혁신에만 집중할 수 있게 돕습니다. 결과적으로 엔지니어링 병목 현상을 해결함으로써 개인화 추천 및 검색 경험을 고도화하는 데 핵심적인 역할을 수행합니다. ### 데이터 처리 및 모델 설정의 기술적 난제 - **정교한 손실 마스킹(Loss Masking):** 지시어 이행(Instruction following)이나 연쇄 사고(CoT) 품질을 높이기 위해, 프롬프트가 아닌 응답(Assistant) 토큰에만 손실을 적용하여 모델이 부적절한 텍스트를 학습하지 않도록 제어합니다. - **시퀀스 패킹(Sequence Packing):** 가변적인 문장 길이로 인한 연산 낭비를 줄이기 위해 여러 샘플을 고정 길이 시퀀스로 묶고, 샘플 간 간섭을 방지하는 '도큐먼트 마스크'를 적용하여 GPU 효율을 극대화합니다. - **분산 로딩 및 메모리 최적화:** 단일 GPU 메모리를 초과하는 모델을 위해 FSDP(Fully Sharded Data Parallel)나 TP(Tensor Parallel) 샤딩을 사용하며, 대규모 어휘집 처리 시 발생하는 메모리 스파이크를 방지하기 위해 로짓 청킹(Logit chunking) 기법을 도입했습니다. ### 넷플릭스 포스트 트레이닝 프레임워크의 구조 - **기술 스택의 통합:** 넷플릭스 내부 ML 플랫폼인 'Mako' 위에서 PyTorch, Ray, vLLM 등 오픈소스 구성 요소를 결합하여 단일 노드부터 수백 개의 GPU까지 확장 가능한 환경을 제공합니다. - **표준화된 레시피:** SFT(지도 미세 조정), DPO(직접 선호도 최적화), RL(강화 학습), 지식 증류 등 주요 워크플로우를 설정 파일만으로 실행할 수 있는 재사용 가능한 레시피 형태로 지원합니다. - **유연한 아키텍처 확장성:** 단순 챗 모델을 넘어 도메인 특화 특수 토큰 사용이나 비표준 아키텍처 실험이 가능하도록 유연성과 확장성을 최우선으로 설계되었습니다. ### 시스템 고도화를 위한 4대 핵심 요소 - **데이터(Data):** 로컬 저장 공간을 초과하는 대규모 데이터를 클라우드에서 실시간 스트리밍하며, CPU 기반 패킹 작업을 GPU 연산과 비동기적으로 병렬 처리하여 유휴 시간을 제거합니다. - **모델(Model):** Qwen, Gemma 등 최신 아키텍처와 MoE(Mixture-of-Experts) 모델을 지원하며, LoRA 통합 및 고수준 샤딩 API를 통해 복잡한 분산 코딩 없이도 대형 모델을 다룰 수 있게 합니다. - **연산(Compute):** MFU(Model FLOPS Utilization) 모니터링을 통해 연산 효율을 실시간 추적하며, 장애 발생 시 훈련 상태를 정확히 복구할 수 있는 정교한 체크포인팅 시스템을 갖추었습니다. - **워크플로우(Workflow):** 단순 학습 루프를 넘어 온폴리시(On-policy) 강화 학습처럼 생성(Rollout)과 업데이트가 반복되는 복잡한 단계를 SPMD(Single Program, Multiple Data) 스타일로 관리합니다. 복잡한 분산 시스템의 세부 사항을 프레임워크 수준에서 표준화함으로써, 넷플릭스는 고도화된 AI 모델 실험의 진입 장벽을 낮추고 대규모 서비스에 최적화된 모델을 더 빠르게 배포할 수 있는 기반을 마련했습니다. 이러한 엔지니어링 접근 방식은 인프라의 복잡성에 구애받지 않고 최신 모델링 기법을 신속하게 도입하려는 기업들에게 유용한 사례가 됩니다.

netflix

RDS Postgres에서 Aurora Postgres로의 마 (새 탭에서 열림)

넷플릭스는 기능성, 성능 및 총소유비용(TCO)을 종합적으로 검토한 결과, 사내 관계형 데이터베이스 표준을 Amazon Aurora PostgreSQL로 전환하기로 결정했습니다. 약 400개에 달하는 기존 RDS PostgreSQL 클러스터를 효율적으로 이전하기 위해 넷플릭스는 가동 중지 시간을 최소화하고 데이터 무결성을 보장하는 자동화된 셀프 서비스 마이그레이션 워크플로우를 구축했습니다. 이를 통해 개별 서비스 팀은 운영 부담 없이 클라우드 네이티브 아키텍처의 확장성과 고가용성 이점을 누릴 수 있게 되었습니다. ### Aurora PostgreSQL 표준화 배경 * **높은 호환성:** 내부 분석 결과, 기존 관계형 데이터베이스에서 실행되는 애플리케이션의 95% 이상이 Aurora PostgreSQL 환경에서 원활하게 지원됨을 확인했습니다. * **클라우드 네이티브 이점:** 전통적인 단일 노드 PostgreSQL에 비해 확장성, 고가용성 및 탄력성 측면에서 Aurora의 분산 아키텍처가 월등한 우위를 점하고 있습니다. * **생태계 및 로드맵:** 강력한 커뮤니티 지원을 받는 PostgreSQL의 오픈 생태계와 대규모 글로벌 분산 애플리케이션에 최적화된 Aurora의 기능 로드맵이 결정적인 요인이 되었습니다. ### 대규모 마이그레이션의 운영 및 기술적 과제 * **운영의 규모 가변성:** 400개에 가까운 클러스터를 수동으로 이전하는 것은 인적 오류의 위험이 크고 운영 팀에 과도한 부담을 주므로, 자동화된 셀프 서비스 방식이 필수적이었습니다. * **데이터 무결성 및 가동 중지 최소화:** '제로 데이터 손실'을 보장하는 동시에, 서비스 신뢰도에 영향을 주지 않도록 쓰기 트래픽을 중단하고 전환하는 시간을 극도로 짧게 유지해야 합니다. * **제어 권한의 한계:** 플랫폼 팀은 데이터베이스를 관리하지만 클라이언트 애플리케이션의 동작(쓰기 일시 중단 등)을 직접 제어할 수 없으며, 보안상 사용자 데이터베이스의 자격 증명(Credentials)에 직접 접근하지 않고 마이그레이션을 수행해야 하는 제약이 있습니다. * **생태계 패리티 유지:** 핵심 데이터뿐만 아니라 파라미터 그룹, 읽기 전용 복제본(Read Replica), 복제 슬롯 등 연관된 모든 구성 요소를 동일하게 이전해야 성능 저하를 방지할 수 있습니다. ### AWS 권장 마이그레이션 기법의 활용 * **스냅샷 기반 마이그레이션:** RDS PostgreSQL의 수동 스냅샷을 생성하여 Aurora로 변환하는 방식으로, 구조는 단순하지만 스냅샷 생성부터 완료 시까지 쓰기 트래픽을 중단해야 하므로 가동 중지 시간이 길다는 단점이 있습니다. * **Aurora 읽기 전용 복제본 기반 마이그레이션:** 기존 RDS를 소스로 하는 Aurora 읽기 복제본을 생성하여 비동기 복제를 수행합니다. 복제 지연(Lag)이 충분히 낮아졌을 때 짧은 순간만 트래픽을 중단하고 복제본을 승격(Promote)시키므로, 스냅샷 방식보다 가동 중지 시간을 현저히 줄일 수 있습니다. ### 성공적인 전환을 위한 전략적 결론 대규모 데이터베이스 마이그레이션은 단순한 데이터 복사를 넘어 복제, 정지(Quiescence), 검증, 전환의 정교한 조율이 필요합니다. 넷플릭스의 사례처럼 데이터베이스 전문가가 아닌 서비스 담당자도 쉽고 안전하게 마이그레이션을 수행할 수 있도록 자동화된 컨트롤 플레인을 구축하는 것이 대규모 인프라 현대화의 핵심입니다. 특히 가동 중지 시간에 민감한 서비스라면 AWS의 읽기 전용 복제본 승격 방식을 자동화 워크플로우에 통합하는 것이 가장 권장되는 접근법입니다.

netflix

넷플릭스 그래프 (새 탭에서 열림)

넷플릭스는 기업 내 복잡한 데이터 생태계를 효율적으로 탐색하기 위해 기존의 구조화된 쿼리 언어(DSL) 방식에서 생성형 AI 기반의 자연어 검색으로 진화하고 있습니다. 대규모 언어 모델(LLM)을 활용하여 사용자의 모호한 질문을 정확한 필터 문구로 변환함으로써 기술적 장벽을 낮추고 업무 효율성을 극대화하는 것이 이번 프로젝트의 핵심입니다. 이를 통해 사용자 의도를 정확히 반영하면서도 기존 시스템의 안정성을 유지하는 신뢰 중심의 검색 플랫폼을 구축하고자 합니다. ## 자연어 검색 도입 배경과 비즈니스 요구사항 * **기존 방식의 한계:** 사용자들은 수백 개의 필드가 포함된 복잡한 UI에서 필터를 수동으로 설정하거나 특정 DSL(Domain Specific Language)을 학습해야 하는 번거로움을 겪었습니다. * **사용자 경험 개선:** 기술적인 구조가 아닌 일상적인 언어(예: "90년대 미국 로봇 영화")로 데이터를 즉시 찾을 수 있게 하여 검색 과정의 마찰을 줄이고자 합니다. * **시스템 보완 전략:** 기존 애플리케이션을 완전히 대체하는 것이 아니라, 자연어를 DSL로 변환하는 기능을 추가하여 기존 검색 인프라에 RAG(검색 증강 생성) 기능을 보강하는 방향을 선택했습니다. ## Text-to-Query 변환의 세 가지 핵심 기준 * **구문적 정확성 (Syntactic):** 생성된 문장이 Graph Search Filter DSL의 문법 규칙을 완벽하게 따라야 하며, 파싱이 가능한 형태여야 합니다. * **의미적 정확성 (Semantic):** 인덱스에 실제로 존재하는 필드만 사용해야 하며, 데이터 타입에 맞는 비교 연산자를 사용하고 '통제된 어휘(Controlled Vocabulary)'의 허용 범위를 준수하여 환각(Hallucination) 현상을 방지해야 합니다. * **화용적 정확성 (Pragmatic):** 기술적으로 완벽한 쿼리일지라도, 그것이 사용자가 실제로 질문한 의도와 목적을 정확하게 담아내야 합니다. ## 컨텍스트 엔지니어링을 통한 성능 최적화 * **메타데이터 활용:** GraphQL 스키마에서 추출한 필드 설명, 타입 정보 등을 LLM의 컨텍스트로 제공하여 모델이 데이터 구조를 이해하도록 돕습니다. * **통제된 어휘(Controlled Vocabulary) 관리:** 국가명이나 장르와 같이 정해진 값의 목록이 있는 경우, 이를 메타데이터에 포함하여 LLM이 유효한 값 내에서만 쿼리를 생성하도록 유도합니다. * **확장성 문제 해결:** 수백 개의 필드와 수천 개의 유효값을 가진 대규모 인덱스의 경우, 모든 정보를 프롬프트에 넣으면 지연 시간이 늘어나고 정확도가 떨어지므로 필요한 정보만 선별하여 제공하는 정교한 컨텍스트 구성 전략을 사용합니다. 넷플릭스의 사례는 복잡한 기업용 데이터 검색 시스템에서 LLM을 직접적인 해답 제공자가 아닌, 검증된 기존 DSL을 생성하는 '번역기'로 활용함으로써 데이터의 정확성과 시스템의 신뢰성을 동시에 확보할 수 있음을 보여줍니다. 전문적인 데이터 탐색이 필요한 도메인일수록 이러한 단계적 AI 통합 접근 방식이 효과적입니다.

netflix

Temporal이 넷플릭스의 안정 (새 탭에서 열림)

넷플릭스는 배포 시스템인 Spinnaker의 클라우드 작업 안정성을 높이기 위해 '지속 가능한 실행(Durable Execution)' 플랫폼인 Temporal을 도입했습니다. 기존 시스템은 인스턴스 재시작이나 네트워크 일시 오류 발생 시 작업 상태를 잃어버리는 구조적 한계로 인해 약 4%의 배포 실패율을 보였습니다. Temporal 도입 후, 상태 정보를 자동으로 유지하고 장애 시 중단 지점부터 재개하는 방식을 통해 일시적 장애로 인한 실패율을 0.0001%까지 획기적으로 낮추는 성과를 거두었습니다. **기존 Spinnaker 구조와 상태 관리의 한계** * 배포 엔진인 Orca가 Clouddriver에 작업을 요청하면, Clouddriver는 내부 오케스트레이션 엔진을 통해 클라우드 제공업체의 API를 호출하는 구조였습니다. * 작업 상태가 메모리나 휘발성 저장소에 유지되었기 때문에, 클러스터 업데이트나 인스턴스 종료와 같은 운영 작업 중 실행 중인 모든 작업이 유실되거나 일관성이 깨지는 문제가 빈번했습니다. * 복잡한 다단계 클라우드 작업 중 중간 단계에서 오류가 발생하면, 수동으로 개입하여 상태를 정리하거나 재시도 로직을 직접 복잡하게 구현해야만 했습니다. **Temporal을 이용한 지속 가능한 실행 구현** * 비즈니스 로직을 담당하는 '워크플로우(Workflow)'와 외부 API 호출 등 부수 효과를 수행하는 '액티비티(Activity)'를 분리하여 설계했습니다. * Temporal은 작업의 모든 실행 단계를 데이터베이스에 기록(Event Sourcing)하므로, 실행 중 프로세스가 죽더라도 새 인스턴스에서 마지막 상태를 복구하여 즉시 재개할 수 있습니다. * 개발자는 일시적인 네트워크 오류나 API 제한에 대비한 복잡한 재시도 코드를 작성하는 대신, Temporal의 선언적 재시도 정책을 활용해 "장애가 없는 것처럼" 코드를 작성할 수 있게 되었습니다. **도입 결과 및 운영 효율성 향상** * 일시적 장애로 인한 배포 실패율이 4%에서 0.0001%로 감소하며 시스템 신뢰도가 비약적으로 상승했습니다. * CDN 장비 업데이트와 같이 며칠 혹은 몇 주가 소요되는 장기 실행 작업도 타임아웃이나 상태 유실 걱정 없이 안정적으로 관리할 수 있게 되었습니다. * 인프라 운영 팀은 시스템 점검이나 배포를 위해 기존 작업을 강제로 중단하거나 완료될 때까지 기다릴 필요가 없어져 운영 유연성이 크게 확보되었습니다. 복잡한 분산 시스템에서 상태 관리와 재시도 로직을 직접 구현하는 것은 매우 까다롭고 오류가 발생하기 쉽습니다. 넷플릭스의 사례처럼 장기 실행 작업이나 높은 신뢰성이 요구되는 마이크로서비스 환경에서는 Temporal과 같은 워크플로우 엔진을 도입하여 인프라 수준에서 안정성을 보장받는 것이 효율적입니다.

netflix

Netflix Live Origin. Xia (새 탭에서 열림)

넷플릭스의 라이브 오리진(Live Origin)은 클라우드 라이브 스트리밍 파이프라인과 자사 콘텐츠 전송 네트워크(CDN)인 오픈 커넥트(Open Connect) 사이에서 콘텐츠 공급을 조율하는 핵심 마이크로서비스입니다. 이 시스템은 다중 파이프라인 구조와 지능적인 세그먼트 선택 로직을 통해 실시간 방송 중 발생할 수 있는 데이터 손실이나 지연을 효과적으로 방지합니다. 결과적으로 넷플릭스는 라이브 환경에서도 VOD 수준의 안정성과 고품질 시청 경험을 전 세계 사용자에게 제공할 수 있게 되었습니다. **다중 파이프라인 기반의 탄력적인 아키텍처** 라이브 스트리밍은 실시간 특성상 프레임 누락이나 세그먼트 손실 같은 결함이 발생할 가능성이 높습니다. 라이브 오리진은 이를 극복하기 위해 다음과 같은 전략을 사용합니다. * **이중화된 파이프라인:** 서로 다른 클라우드 리전에서 독립적으로 운영되는 중복 파이프라인을 운영하여, 한쪽 경로에 결함이 생겨도 다른 경로의 정상 세그먼트를 즉시 선택할 수 있습니다. * **지능적 후보 선택:** 패키저에서 수행된 미디어 검사 메타데이터를 활용하여, 여러 후보 세그먼트 중 가장 품질이 좋은 것을 결정론적 순서에 따라 선택합니다. * **에포크 로킹(Epoch Locking):** 클라우드 인코더 단계부터 적용된 에포크 로킹 기술을 통해 오리진이 여러 파이프라인의 세그먼트 중 최적의 결과물을 일관되게 식별하고 조합할 수 있도록 합니다. **오픈 커넥트와의 스트리밍 최적화** 기존 VOD에 최적화되어 있던 오픈 커넥트(Open Connect) 인프라를 라이브에 맞게 확장하여 효율적인 전송 구조를 구축했습니다. * **요청 병합(Request Collapsing):** 동일한 세그먼트에 대해 수많은 클라이언트 요청이 동시에 몰릴 때, 오리진에는 단 하나의 요청만 보내고 나머지는 응답을 기다리게 하여 서버 부하(Thundering Herd 문제)를 방지합니다. * **세그먼트 템플릿 활용:** 오픈 커넥트 가전(OCA)은 라이브 이벤트 설정 데이터를 기반으로 유효한 세그먼트 범위를 미리 파악하며, 범위를 벗어난 잘못된 요청을 사전에 차단합니다. * **적응형 채우기(Adaptive Fill):** 오리진은 응답 헤더를 통해 OCA에 백업 파이프라인 위치를 알려줍니다. 특정 리전의 오리진에 문제가 발생하면 OCA가 스스로 다른 리전의 오리진으로 전환하여 데이터를 가져옵니다. **효율적인 저장소 관리 및 관찰 가능성** AWS EC2 인스턴스에서 동작하는 라이브 오리진은 대규모 트래픽과 데이터를 관리하기 위해 정교한 리소스 관리 기법을 도입했습니다. * **계층화된 스토리지:** 실시간으로 자주 액세스되는 세그먼트는 RAM에 저장하고, 상대적으로 덜 빈번한 데이터는 SSD에 저장하는 계층 구조를 통해 응답 속도를 극대화했습니다. * **자동 가비지 컬렉션:** 라이브 이벤트의 진행 상황에 맞춰 오래된 세그먼트를 자동으로 삭제하는 시간 기반 가비지 컬렉션을 수행하여 스토리지 공간을 효율적으로 유지합니다. * **실시간 모니터링:** 수천 개의 지표를 실시간으로 수집하여 파이프라인의 건강 상태를 추적하며, 장애 발생 시 즉각적인 대응이 가능한 가시성을 확보하고 있습니다. 라이브 오리진은 단순한 저장소를 넘어 라이브 스트리밍의 안정성을 결정짓는 지능형 브로커 역할을 수행합니다. 실시간 방송의 불확실성을 소프트웨어 계층의 이중화와 지능적 선택 로직으로 해결하고자 하는 기술적 접근은 대규모 라이브 서비스를 설계할 때 중요한 이정표가 됩니다. 특히 클라이언트의 복잡도를 낮추면서 서버 측에서 장애를 복구하는 설계 방식은 사용자 경험을 최우선으로 하는 서비스 기획에 필수적인 요소입니다.

netflix

Date] | [Publication (새 탭에서 열림)

넷플릭스는 개방형 비디오 코덱인 AV1을 도입하여 현재 전체 스트리밍의 약 30%를 처리하고 있으며, 이는 기존 코덱 대비 효율성과 화질 면에서 압도적인 성과를 보여주고 있습니다. 안드로이드 모바일을 시작으로 스마트 TV, 웹 브라우저, 최신 애플 기기까지 지원 범위를 넓힌 결과, 동일 대역폭에서 더 높은 화질을 제공하고 버퍼링을 45% 감소시키는 등 사용자 경험을 혁신했습니다. 이러한 성공을 바탕으로 넷플릭스는 라이브 스트리밍과 사용자 참여형 콘텐츠(UGC)에도 AV1을 적극 활용하며 차세대 표준인 AV2 시대를 준비하고 있습니다. **AV1 코덱의 탄생과 특징** * 2015년 넷플릭스를 포함한 산업 리더들이 결성한 AOMedia(Alliance for Open Media)를 통해 개발된 차세대 오픈 소스 미디어 기술입니다. * 기존의 H.264/AVC 코덱의 한계를 넘어 압축 효율성을 극대화하고, 로열티가 없는 개방형 표준을 지향하며 2018년 공식 출시되었습니다. * 고해상도(4K), 고프레임 레이트(HFR) 콘텐츠를 더 적은 데이터로 전송할 수 있는 강력한 압축 성능을 제공합니다. **안드로이드에서 스마트 TV로의 확장** * **모바일 우선 도입:** 2020년 안드로이드 환경에서 ARM 칩셋에 최적화된 `dav1d` 소프트웨어 디코더를 활용해 첫 서비스를 시작했으며, 이는 데이터 사용량에 민감한 모바일 사용자들에게 큰 혜택을 주었습니다. * **하드웨어 가속 지원:** 2021년부터는 스마트 TV 제조사 및 SoC 벤더와 협력하여 하드웨어 디코더 인증을 진행, 대화면 기기에서도 고품질 AV1 스트리밍이 가능해졌습니다. * **생태계 완성:** 2022년 웹 브라우저 지원에 이어 2023년에는 애플의 M3 및 A17 Pro 칩 탑재 기기까지 지원 범위를 확대하며 광범위한 디바이스 생태계를 구축했습니다. **기술적 성과와 시청 경험의 향상** * **화질 개선:** AV1 스트리밍 세션은 기존 AVC 대비 4.3점, HEVC 대비 0.9점 높은 VMAF(비디오 품질 측정 지표) 점수를 기록하며 시각적 품질이 크게 향상되었습니다. * **효율성 증대:** AVC 및 HEVC와 비교해 대역폭 사용량을 약 1/3 절감했으며, 이는 네트워크 환경이 좋지 않은 상황에서도 끊김 없는 시청을 가능하게 합니다. * **안정성 확보:** 대역폭 절감 효과 덕분에 스트리밍 중 발생하는 버퍼링 중단 현상이 45% 감소하는 가시적인 성과를 거두었습니다. **라이브 스트리밍 및 UGC로의 응용** * **라이브 이벤트 최적화:** 최근 넷플릭스가 추진하는 라이브 스트리밍(예: 톰 브래디 로스트, 제이크 폴 vs 마이크 타이슨 경기)에 AV1을 적용하여 지연 시간을 줄이고 화질을 높였습니다. * **SVT-AV1 활용:** 실시간 인코딩 성능이 뛰어난 오픈 소스 인코더 `SVT-AV1`을 사용해 고품질 라이브 방송을 안정적으로 송출하고 있습니다. * **Moments 기능:** 사용자가 콘텐츠의 특정 장면을 저장하고 공유하는 'Moments' 기능의 UGC 비디오에도 AV1을 적용하여 빠른 인코딩과 효율적인 저장을 실현했습니다. AV1의 성공적인 정착은 개방형 표준 코덱이 대규모 스트리밍 서비스의 품질과 효율성을 동시에 잡을 수 있음을 증명했습니다. 넷플릭스는 향후 등장할 AV2 코덱에 대해서도 적극적인 기여와 도입을 예고하고 있으며, 이는 전 세계 사용자들에게 더욱 진화된 미디어 경험을 제공하는 밑거름이 될 것입니다.

netflix

넷플릭스가 실시간 분산 그래프를 구축한 방법과 이유: 1부 — 인터넷 규모의 데이터 스트림 수집 및 처리 (새 탭에서 열림)

넷플릭스는 비디오 스트리밍을 넘어 광고, 라이브 이벤트, 모바일 게임으로 비즈니스를 확장하면서 발생하는 데이터 파편화 문제를 해결하기 위해 '실시간 분산 그래프(RDG)'를 구축했습니다. 기존 마이크로서비스 아키텍처에서 발생하는 데이터 고립을 극복하고, 다양한 서비스 접점에서 발생하는 사용자 활동을 실시간으로 연결하여 개인화된 경험을 제공하는 것이 핵심 목표입니다. 이를 통해 복잡한 데이터 조인 없이도 수억 개의 노드와 엣지 사이의 관계를 즉각적으로 파악할 수 있는 기술적 기반을 마련했습니다. **데이터 파편화와 비즈니스 환경의 변화** * 스트리밍, 게임, 라이브 스포츠 등 서비스 영역이 넓어지면서 사용자가 여러 기기와 도메인에서 수행하는 활동을 하나의 맥락으로 통합해야 할 필요성이 커짐. * 넷플릭스의 강점인 마이크로서비스 아키텍처(MSA)는 서비스 독립성에는 유리하지만, 데이터가 각 서비스에 고립(Silo)되어 있어 통합적인 데이터 과학 및 엔지니어링 작업에 큰 비용이 발생함. * 기존 데이터 웨어하우스 방식은 데이터가 서로 다른 테이블에 저장되고 처리 주기가 제각각이라, 실시간으로 연관 관계를 분석하는 데 한계가 있음. **그래프 모델 도입의 기술적 이점** * **관계 중심 쿼리:** 테이블 기반 모델에서 필요한 비용 중심적인 조인(Join)이나 수동적인 비정규화 없이도 노드와 엣지 사이를 빠르게 탐색(Hop)할 수 있음. * **유연한 확장성:** 새로운 엔티티나 관계 유형이 추가될 때 대대적인 스키마 변경이나 아키텍처 재설계 없이도 신속하게 데이터 모델을 확장할 수 있음. * **패턴 및 이상 탐지:** 숨겨진 관계, 순환(Cycle) 구조, 그룹화 등을 식별하는 작업을 기존의 포인트 조회 방식보다 훨씬 효율적으로 수행함. **실시간 데이터 수집 및 처리 파이프라인 (RDG 레이어 1)** * 전체 시스템은 수집 및 처리, 저장, 서빙의 3개 레이어로 구성되며, 첫 번째 단계인 수집 레이어는 이기종 업스트림 소스로부터 이벤트를 받아 그래프 데이터를 생성함. * DB의 변경 사항을 추적하는 CDC(Change Data Capture)와 애플리케이션의 실시간 로그 이벤트를 주요 소스로 활용하여 데이터 소외 현상을 방지함. * 수집된 원시 데이터는 스트리밍 처리 엔진을 통해 그래프 스키마에 맞는 노드와 엣지 형태로 변환되며, 대규모 트래픽 환경에서도 실시간성을 유지하도록 설계됨. 복잡하게 얽힌 현대의 서비스 환경에서 데이터 간의 관계를 실시간으로 규명하는 것은 사용자 경험 고도화의 핵심입니다. 넷플릭스의 RDG 사례처럼 파편화된 마이크로서비스의 데이터를 그래프 형태로 통합하는 접근 방식은, 실시간 통찰력이 필요한 대규모 분산 시스템 설계 시 강력한 해결책이 될 수 있습니다.

netflix

넷플릭스의 Meta (새 탭에서 열림)

넷플릭스는 머신러닝(ML) 및 AI 워크플로우의 프로토타이핑부터 프로덕션 운영까지의 전 과정을 효율화하기 위해 오픈소스 프레임워크인 메타플로우(Metaflow)를 지속적으로 발전시켜 왔습니다. 특히 최신 업데이트인 Metaflow 2.19 버전에서는 'Spin'이라는 기능을 도입하여, 대규모 데이터와 모델을 다루는 ML 개발 과정에서 필수적인 빠른 반복 시도(Iterative development)와 상태 유지(Stateful iteration)를 획기적으로 가속화했습니다. 이를 통해 개발자는 코드 변경 사항을 즉각적으로 확인하면서도 운영 환경의 안정성을 동시에 확보할 수 있습니다. **ML 및 AI 워크플로우에서의 반복 개발 특성** * **데이터와 모델 중심의 반복:** 전통적인 소프트웨어 공학의 코드 중심 개발과 달리, ML/AI 개발은 크기가 크고 가변적인 데이터 및 모델을 중심으로 이루어집니다. * **비결정적 과정:** 데이터 변환이나 모델 학습은 실행 시마다 결과가 조금씩 달라지는 확률적 특성을 가지며, 연산 비용이 매우 높습니다. * **노트북의 장점과 한계:** 주피터(Jupyter)와 같은 노트북 도구는 메모리에 상태를 유지하여 빠른 피드백을 주지만, 실행 순서의 불명확성, 숨겨진 상태 문제, 재현성 부족 등의 고질적인 문제를 안고 있습니다. **메타플로우의 체크포인트 기반 상태 관리** * **@step을 통한 체크포인트 설정:** 메타플로우의 각 단계(`@step`)는 체크포인트 경계 역할을 수행하며, 단계가 종료될 때 모든 인스턴스 변수를 아티팩트(Artifact)로 자동 저장합니다. * **Resume 기능의 활용:** 기존의 `resume` 명령어를 사용하면 특정 단계부터 실행을 재개할 수 있어, 실패한 지점이나 수정이 필요한 지점부터 다시 시작할 수 있습니다. * **노트북 방식과의 차별점:** 실행 순서가 명시적이고 결정적이며, 모든 상태가 버전화되어 저장되므로 결과의 추적과 재현이 매우 용이합니다. **Spin: 반복 개발 속도의 극대화** * **지연 시간 단축:** 기존의 `resume` 방식은 특정 단계부터 전체를 다시 실행해야 하므로 반복 주기 사이에 일정 수준의 지연(Latency)이 발생했습니다. * **점진적 실험의 가속화:** 새로운 'Spin' 기능은 이러한 지연을 최소화하여 노트북 수준의 즉각적인 피드백을 제공하면서도 메타플로우의 견고한 상태 관리 기능을 그대로 활용합니다. * **워크플로우 엔진과의 통합:** 메타플로우는 넷플릭스의 워크플로우 오케스트레이터인 마에스트로(Maestro)와 긴밀하게 연동되어, 개발 환경에서 테스트한 로직을 프로덕션 규모로 확장하는 데 소요되는 오버헤드를 최소화합니다. 데이터 과학자와 엔지니어는 Metaflow 2.19 버전을 통해 Spin 기능을 직접 체험해 볼 수 있습니다. 실험적인 탐색 단계에서는 노트북처럼 빠른 속도를 누리고, 배포 단계에서는 엔지니어링 표준을 준수하는 견고한 파이프라인을 구축하고자 한다면 메타플로우의 새로운 반복 개발 워크플로우를 도입해 보길 권장합니다.

netflix

훈련 후 생성 추천 시스템: 장점 가중치 감독 세부 조정 | 넷플릭스 기술 블로그 | 넷플릭스 테크블로그 (새 탭에서 열림)

넷플릭스는 사용자 행동을 순차적으로 예측하는 생성형 추천 시스템(Generative Recommenders)의 성능을 한 단계 높이기 위해 사후 학습(Post-training) 기술인 '가중치 적용 지도 미세 조정(Advantage-Weighted Supervised Finetuning, 이하 A-SFT)'을 도입했습니다. 기존의 생성형 추천 모델은 단순히 과거의 시퀀스를 모방하는 데 그쳐 실제 사용자 만족도를 충분히 반영하지 못했으나, A-SFT는 노이즈가 많은 추천 환경의 보상 신호를 효과적으로 학습에 활용합니다. 이 방법론은 반사실적 데이터(Counterfactual feedback) 확보가 어려운 추천 시스템의 한계를 극복하고, 보상 모델의 불확실성 속에서도 모델을 사용자 선호도에 더 정교하게 정렬시키는 결론을 도출했습니다. **생성형 추천 시스템의 한계와 사후 학습의 필요성** * 생성형 추천 모델(GR)은 트랜스포머 아키텍처를 활용해 사용자의 다음 활동을 예측하는 순차적 변환 태스크로 추천 문제를 정의합니다. * 단순히 관찰된 과거 행동을 모방하는 방식은 트렌드나 외부 요인에 의한 상호작용을 구분하지 못하며, 사용자가 실제로 만족하지 않은 콘텐츠를 반복 추천할 위험이 있습니다. * 따라서 시청 시간, 클릭률, 평점 등 명시적·암묵적 피드백을 활용해 모델을 사용자 선호에 맞게 조정하는 사후 학습 과정이 필수적입니다. **추천 시스템 사후 학습의 주요 난제** * **반사실적 피드백의 부재:** LLM과 달리 추천 시스템은 사용자가 실제로 경험한 온-폴리시(On-policy) 데이터만 존재하며, 수주에서 수년에 걸친 사용자 시퀀스에 대해 가상의 시나리오에 대한 피드백을 얻는 것은 불가능에 가깝습니다. * **보상 신호의 높은 노이즈:** 시청 시간이 길다고 해서 반드시 만족도가 높은 것은 아니며(시간 제약 등으로 중단 가능), 보상 모델 자체가 높은 불확실성과 분산을 가집니다. * **기존 기법의 적용 한계:** 반사실적 데이터를 요구하는 PPO(근사 정책 최적화)나 DPO(직접 선호도 최적화) 같은 최신 LLM 최적화 기법을 추천 도메인에 그대로 적용하기 어렵습니다. **A-SFT: 불확실한 보상을 활용하는 최적화 전략** * A-SFT는 지도 미세 조정(SFT)의 안정성과 강화 학습의 이점 함수(Advantage function)를 결합하여 보상 모델의 방향성 신호를 학습에 반영합니다. * 보상 모델이 높은 분산을 가질 때에도 보상 자체에 매몰되지 않고, 이점 함수를 통해 상대적으로 더 나은 행동에 가중치를 두어 학습함으로써 성능 저하를 방지합니다. * 이 방식은 보상 모델이 없을 때 사용하는 '행동 복제(Behavior Cloning)'와 완벽한 보상 모델을 전제로 하는 '온라인 강화 학습' 사이의 적정 지점을 찾아내어 모델 성능을 최적화합니다. **실무적 권장 사항** 추천 시스템의 사후 학습 전략을 선택할 때는 보상 모델의 품질과 일반화 능력을 먼저 고려해야 합니다. 보상 모델의 노이즈가 심할 경우 이를 과도하게 최적화하면 오히려 성능이 하락할 수 있으므로, A-SFT와 같이 보상의 방향성을 활용하면서도 학습의 안정성을 유지할 수 있는 가중치 기반의 접근법을 사용하는 것이 권장됩니다. 이는 특히 실제 서비스 데이터와 같이 피드백이 불완전한 환경에서 생성형 모델을 사용자 가치에 정렬시키는 데 매우 효과적인 도구가 될 수 있습니다.

netflix

스트림 뒤편: 라이브 이벤트를 위한 실시간 추천 3부 | 넷플릭스 기술 블로그 | 넷플릭스 테크블로그 (새 탭에서 열림)

넷플릭스는 수천만 명의 시청자가 동시에 접속하는 라이브 이벤트 상황에서 시스템 과부하를 방지하면서도 실시간 개인화 추천을 제공하기 위해 '프리페칭(Prefetching)'과 '실시간 브로드캐스팅'이라는 2단계 전략을 도입했습니다. 이 시스템은 이벤트 시작 전 미리 데이터를 기기에 저장해 두었다가, 실제 시작 시점에는 최소한의 신호만 보내 로컬에서 추천 정보를 활성화함으로써 '천둥 번개 효과(Thundering Herd)' 문제를 효과적으로 해결합니다. 이를 통해 넷플릭스는 클라우드 자원을 무리하게 확장하지 않고도 전 세계 수억 대의 기기에 지연 없는 실시간 스트리밍 경험을 제공할 수 있게 되었습니다. **라이브 이벤트와 시동 시간의 제약** * VOD와 달리 라이브 이벤트는 모든 시청자가 특정 시점에 동시에 접속하므로, 짧은 시간 내에 수억 개의 기기에 업데이트를 전달해야 하는 기술적 난관이 존재합니다. * 단순히 서버를 증설하는 선형적 확장은 비효율적이며, 다른 핵심 서비스의 자원을 고갈시킬 위험이 있습니다. * 성공적인 실시간 추천을 위해서는 업데이트 소요 시간(Time), 서비스 처리 용량(Request Throughput), 요청의 다양성(Compute Cardinality)이라는 세 가지 제약 조건을 동시에 최적화해야 합니다. **프리페칭을 통한 트래픽 분산** * 이벤트 시작 전 사용자가 평소처럼 앱을 탐색하는 동안, 라이브 이벤트와 관련된 메타데이터, 아트워크, 개인화된 추천 리스트를 미리 기기 캐시에 저장합니다. * 이를 통해 서버 요청을 시간에 따라 자연스럽게 분산시켜, 이벤트 직전 발생하는 트래픽 스파이크를 제거하고 시스템 안정성을 확보합니다. * 서버 측에서 미리 계산된 '구체화된 추천(Materialized Recommendations)'을 제공함으로써 기기별 요청의 복잡도를 낮춥니다. **저카디널리티 실시간 브로드캐스팅** * 이벤트가 실제로 시작되거나 일정이 변경될 때, 넷플릭스의 푸시 서비스(Zuul Push)를 통해 연결된 모든 기기에 '저카디널리티(Low-cardinality)' 메시지를 전송합니다. * 이 메시지는 복잡한 데이터를 담지 않고 단순히 미리 캐싱된 데이터를 화면에 표시하라는 트리거 역할만 수행하여 네트워크 부하를 최소화합니다. * '최소 한 번(At-least-once)' 전달 방식을 채택하여 네트워크 상태가 불안정한 기기도 다시 온라인 상태가 되면 누락된 업데이트를 즉시 따라잡을 수 있도록 설계되었습니다. **데이터 기반의 동적 적응** * 라이브 이벤트의 특성상 경기 시간이 지연되거나 일정이 변동될 수 있는데, 브로드캐스팅 시스템은 이러한 실시간 제작 상황에 맞춰 전송 타이밍을 동적으로 조절합니다. * 수천만 대의 기기가 동시에 서버에 데이터를 재요청하는 대신 로컬 데이터를 활용하게 함으로써, 전 세계 모든 사용자가 동일한 순간에 일관된 추천 UI를 볼 수 있게 합니다. 라이브 이벤트와 같은 초고부하 상황에서는 무조건적인 서버 증설보다는 클라이언트의 로컬 자원을 활용하고 서버 부하를 시간적으로 분산하는 아키텍처가 필수적입니다. 실시간성이 중요한 서비스라면 모든 데이터를 실시간으로 전송하기보다, 정적인 데이터는 미리 배치하고 상태 변화를 알리는 최소한의 신호만 실시간으로 처리하는 하이브리드 접근 방식을 권장합니다.

netflix

100배 빠르게: 넷플릭스 마에스트로의 워크플로 엔진을 어떻게 강화했는가 (새 탭에서 열림)

넷플릭스는 대규모 데이터 및 머신러닝 워크플로우를 관리하는 오케스트레이터인 'Maestro'의 엔진을 전면 개편하여 성능을 100배 이상 향상시켰습니다. 기존 수 초 단위에 달하던 실행 오버헤드를 밀리초(milliseconds) 단위로 단축함으로써, 광고나 라이브 스트리밍과 같이 저지연 및 고빈도 스케줄링이 필요한 신규 비즈니스 요구사항을 충족하게 되었습니다. 이번 업데이트를 통해 Maestro는 확장성뿐만 아니라 극도로 빠른 실행 속도까지 갖추게 되어 개발자들의 작업 효율을 획기적으로 개선했습니다. **기존 아키텍처의 한계와 병목 현상** * **3계층 구조의 복잡성:** Maestro는 API/런타임, 엔진, 내부 플로우 엔진의 3단계로 구성되었으나, 각 계층 간의 데이터 전달과 상태 동기화 과정에서 상당한 시간이 소요되었습니다. * **폴링(Polling) 방식의 지연:** 기존의 내부 플로우 엔진은 일정 간격으로 태스크를 확인하는 폴링 방식으로 동작하여, 단계별 상태 전이 시마다 초 단위의 불필요한 대기 시간이 발생했습니다. * **분산 큐 및 데이터베이스 부하:** 분산 작업 큐(Dyno-queues)와 데이터베이스 액세스 패턴에서 발생하는 오버헤드로 인해 워크플로우가 복잡해질수록 전체 실행 속도가 저하되는 문제가 있었습니다. * **경합 조건 발생:** 강력한 일관성 보장이 부족하여 특정 단계가 두 개의 워커에서 동시에 실행되는 등의 레이스 컨디션(Race condition) 문제가 간혹 발생했습니다. **100배 빠른 엔진을 위한 설계 최적화** * **이벤트 기반 리액티브 모델:** 폴링 방식을 폐기하고 이벤트 기반 아키텍처를 도입하여, 태스크 완료 즉시 다음 단계가 실행되도록 지연 시간을 최소화했습니다. * **상태 머신 직접 관리:** 워크플로우 그래프를 내부 플로우 태스크로 변환하던 중간 레이어를 제거하고, 엔진이 직접 워크플로우와 단계별 상태 머신을 제어하도록 단순화했습니다. * **데이터 액세스 최적화:** 데이터베이스 쓰기 횟수를 줄이고 효율적인 캐싱 및 분산 잠금(Distributed Locking) 메커니즘을 적용하여 성능과 안정성을 동시에 확보했습니다. * **추상화 계층 정합성:** Maestro 엔진이 상태 전이와 생명주기를 전담하게 함으로써, 하부 플로우 엔진에 대한 의존성을 없애고 엔진의 실행 효율을 극대화했습니다. **성능 향상 결과 및 활용 사례** * **실행 속도 극대화:** 워크플로우 엔진의 내부 오버헤드가 수 초에서 밀리초 단위로 줄어들며 전체적인 응답 속도가 100배 이상 개선되었습니다. * **신규 비즈니스 지원:** 1시간 미만의 짧은 주기로 실행되는 스케줄링이나 광고(Ads), 게임 등 저지연 워크플로우가 필수적인 도메인에 적용 가능해졌습니다. * **개발 생산성 제고:** 반복적인 개발 및 테스트 사이클에서 발생하는 대기 시간이 사라져 엔지니어들의 반복 작업 효율이 크게 향상되었습니다. 대규모 확장성과 초고성능을 동시에 요구하는 환경이라면, 넷플릭스에서 검증되고 오픈 소스로 공개된 최신 버전의 Maestro 도입을 적극적으로 검토해 볼 가치가 있습니다. 특히 기존 워크플로우 엔진의 지연 시간으로 인해 실시간 처리에 어려움을 겪고 있는 조직에 강력한 해결책이 될 수 있습니다.