🏢 Netflix 기술 스택 분석

9 min read
netflixmicroservicesawsjavanodejsreactkafkacassandrastreamingcdnchaos-engineeringspring-bootzuul

넷플릭스가 전 세계 2.4억 사용자에게 스트리밍 서비스를 제공하는 기술 스택 심층 분석 - 마이크로서비스, AWS, Chaos Engineering의 교과서

🏢 Netflix 기술 스택 분석

전 세계 2.4억 구독자에게 매일 1.4억 시간의 콘텐츠를 스트리밍하는 Netflix의 기술 스택을 심층 분석합니다.
"Freedom and Responsibility" - Netflix의 엔지니어링 문화와 기술적 혁신


📊 회사 개요

서비스 규모

  • 구독자: 190개국 2.38억 명 (2024 Q3)
  • 콘텐츠: 15,000+ 타이틀 (지역별 상이)
  • 트래픽: 인터넷 트래픽의 15% 차지
  • 동시 스트림: 피크 시간 수천만 동시 스트림
  • 데이터 전송: 일일 600TB+

엔지니어링 조직

  • 엔지니어: 2,500명+
  • 팀 구조: 자율적인 소규모 팀 (2-pizza teams)
  • 문화: "Highly Aligned, Loosely Coupled"
  • 오픈소스: 200+ 프로젝트 공개

기술적 도전과제

  1. 글로벌 스케일: 전 세계 실시간 스트리밍
  2. 개인화: 1억 개의 서로 다른 Netflix 버전
  3. 신뢰성: 99.99% 가용성 목표
  4. 성능: 시작 시간 < 2초, 리버퍼링 최소화

🏗️ 아키텍처 Overview

시스템 다이어그램

┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Devices │────►│ Edge │────►│ Backend │ │ (TV,Mobile) │ │ (AWS CDN) │ │ (AWS) │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ ┌─────▼─────┐ ┌─────▼─────┐ │ │ Zuul │ │ EVCache │ │ │ (Gateway) │ │ (Cache) │ │ └───────────┘ └───────────┘ │ │ └────────────────────────────────────────┤ ┌─────▼─────┐ │ Microsvcs │ │ (1000+) │ └───────────┘ 

핵심 설계 원칙

  1. Microservices First: 1000+ 마이크로서비스
  2. Stateless Design: 수평 확장 가능
  3. Circuit Breakers: 장애 격리
  4. Chaos Engineering: 의도적 장애 주입
  5. Data Replication: 다중 리전 복제

진화 과정

  • 2008: 모놀리스에서 AWS 마이그레이션 시작
  • 2010: 스트리밍 서비스 런칭
  • 2012: Chaos Monkey 도입
  • 2015: 글로벌 엣지 인프라 구축
  • 2020: Studio 기술 통합
  • 2023: 광고 지원 티어 인프라

🧩 기술 스택 상세

Backend 기술

// Netflix의 전형적인 마이크로서비스 구조 @SpringBootApplication @EnableEurekaClient @EnableHystrix @EnableFeignClients public class VideoMetadataService { @Autowired private EVCache evCache; @HystrixCommand( fallbackMethod = "getDefaultMetadata", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000"), @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "20") } ) public VideoMetadata getVideoMetadata(String videoId) { // EVCache 체크 VideoMetadata cached = evCache.get("metadata:" + videoId); if (cached != null) return cached; // Cassandra에서 조회 VideoMetadata metadata = cassandraRepo.findById(videoId); evCache.set("metadata:" + videoId, metadata, 300); return metadata; } } 

주요 백엔드 기술:

  • 언어: Java (주력), Python, Node.js, Go
  • 프레임워크: Spring Boot, Play Framework
  • API Gateway: Zuul 2
  • 서비스 디스커버리: Eureka
  • 로드 밸런싱: Ribbon
  • Circuit Breaker: Hystrix
  • 구성 관리: Archaius

Frontend 기술

// Netflix TV UI의 React 컴포넌트 예시 const VideoPlayer = () => { const [manifest, setManifest] = useState(null); const [bitrate, setBitrate] = useState("auto"); useEffect(() => { // 적응형 비트레이트 스트리밍 const player = new NetflixPlayer({ adaptiveBitrate: true, bufferSize: 30, // 30초 버퍼 maxBitrate: getMaxBitrateForDevice(), onBitrateChange: (newBitrate) => { setBitrate(newBitrate); trackEvent("bitrate_change", { bitrate: newBitrate }); }, }); return () => player.destroy(); }, []); return <PlayerUI bitrate={bitrate} />; }; 

플랫폼별 기술:

  • Web: React, Falcor (GraphQL 대안)
  • TV Apps: React + Gibbon (렌더링 레이어)
  • Mobile: Native (Swift/Kotlin) + React Native
  • 게임 콘솔: C++ 기반 커스텀 UI

Data & Infrastructure

데이터베이스

-- Cassandra 데이터 모델 예시 CREATE TABLE viewing_history ( user_id UUID, video_id UUID, timestamp timestamp, position_seconds int, device_type text, PRIMARY KEY ((user_id), timestamp, video_id) ) WITH CLUSTERING ORDER BY (timestamp DESC); 

데이터 저장소:

  • Cassandra: 시청 기록, 메타데이터 (100+ 클러스터)
  • EVCache: 분산 캐시 (Memcached 기반)
  • S3: 정적 에셋, 백업
  • Elasticsearch: 검색, 로그 분석
  • Spark: 배치 처리, ML 학습

스트리밍 인프라

# CDN 구성 Open Connect: Appliances: 17,000+ Locations: 1,000+ ISPs Cache_Hit_Rate: 95%+ Encoding: Formats: [H.264, H.265, AV1, VP9] Profiles: 120+ per title Bitrates: 235kbps - 15.5Mbps Adaptive_Streaming: Protocol: DASH + Custom Chunk_Size: 4 seconds Buffer_Target: 30 seconds 

DevOps & SRE

Chaos Engineering

# Chaos Monkey 설정 예시 chaos_config = { "enabled": True, "schedule": { "type": "cron", "expression": "0 9-17 * * 1-5" # 평일 업무시간 }, "termination": { "probability": 0.01, # 1% 확률로 인스턴스 종료 "strategies": ["RANDOM", "OLDEST"], "excluded_clusters": ["critical-payment", "auth-service"] }, "notifications": { "slack": "#chaos-engineering", "email": "oncall@netflix.com" } } 

Chaos Engineering 도구:

  • Chaos Monkey: 랜덤 인스턴스 종료
  • Chaos Kong: 전체 리전 장애 시뮬레이션
  • Chaos Gorilla: 가용 영역 장애
  • Latency Monkey: 네트워크 지연 주입
  • Conformity Monkey: 모범 사례 준수 확인

모니터링 스택

// Atlas 메트릭 수집 예시 class VideoStreamingMetrics { constructor() { this.registry = new Atlas.Registry(); this.playbackStarts = this.registry.counter("playback.starts"); this.rebufferRatio = this.registry.gauge("playback.rebuffer.ratio"); this.startupTime = this.registry.timer("playback.startup.time"); } trackPlaybackStart(metadata) { this.playbackStarts.increment({ device: metadata.device, country: metadata.country, title: metadata.titleId, }); this.startupTime.record(metadata.startupTime); } } 

관측성 도구:

  • Atlas: 시계열 메트릭 (자체 개발)
  • Vector: 실시간 로그 분석
  • Mantis: 실시간 스트림 프로세싱
  • Vizceral: 트래픽 시각화

💡 핵심 기술 인사이트

1. 개인화 알고리즘

# 추천 시스템 간소화 예시 def get_recommendations(user_id): # 1. 협업 필터링 similar_users = find_similar_users(user_id) collaborative_recs = aggregate_preferences(similar_users) # 2. 콘텐츠 기반 필터링 user_profile = build_user_profile(user_id) content_recs = find_similar_content(user_profile) # 3. 딥러닝 모델 neural_recs = deep_ranking_model.predict(user_id) # 4. 앙상블 final_recs = ensemble_blend( collaborative_recs * 0.4, content_recs * 0.3, neural_recs * 0.3 ) return personalize_artwork(final_recs, user_id) 

2. A/B 테스팅 플랫폼

  • 규모: 동시에 1000+ 실험 진행
  • 분할: 사용자를 수천 개 셀로 분할
  • 메트릭: 시청 시간, 구독 유지율, 참여도
  • 통계: Bayesian 추론 사용

3. Open Connect CDN

  • 자체 CDN: ISP 내부에 캐시 서버 배치
  • 효율성: 95%+ 캐시 히트율
  • 하드웨어: 커스텀 최적화 서버
  • 소프트웨어: FreeBSD 기반

📈 성과 & 지표

기술적 성과

  • 가용성: 99.99% (연간 52분 다운타임)
  • 스트리밍 시작 시간: < 2초
  • 리버퍼링: < 0.5%
  • 비디오 품질: 평균 1080p+
  • 전 세계 동시 스트림: 수천만

비즈니스 영향

  • AWS 비용: 연간 $5억+ (추정)
  • 인프라 효율성: 지속적 개선으로 비용 절감
  • 개발 속도: 일일 수천 번 배포
  • 실험 속도: 연간 수만 개 A/B 테스트

🎓 Netflix에서 배울 점

✅ 적용 가능한 패턴

  1. Circuit Breaker Pattern: 장애 전파 방지
  2. Bulkhead Pattern: 리소스 격리
  3. API Gateway Pattern: 중앙화된 엔트리 포인트
  4. Service Mesh: 서비스 간 통신 관리
  5. Chaos Engineering: 사전 장애 대응

❌ 피해야 할 실수

  1. 과도한 마이크로서비스: 작은 팀에는 부담
  2. 분산 모놀리스: 잘못된 서비스 분리
  3. 캐시 의존성: EVCache 없이는 작동 불가
  4. 복잡한 디버깅: 분산 시스템의 어려움

📚 추천 리소스


🔮 미래 전망

현재 집중 분야

  1. AV1 코덱: 대역폭 30% 절감
  2. 게임 스트리밍: 클라우드 게이밍 인프라
  3. 실시간 인코딩: 라이브 이벤트 지원
  4. 엣지 컴퓨팅: 더 가까운 곳에서 처리
  5. AI/ML: 더 정교한 개인화

기술 트렌드

  • 서버리스: 일부 워크로드 이전
  • WebAssembly: 클라이언트 성능 향상
  • 5G: 모바일 스트리밍 품질 개선
  • Blockchain: 콘텐츠 권리 관리 실험

"우리는 엔터테인먼트를 재창조하고 있습니다. 기술은 그 여정의 핵심입니다."

  • Netflix Engineering

마지막 업데이트: 2025-01-28

Found this helpful? Share it with others!
Tweet

🔗 Related Content

You might also be interested in these articles

🏢 company

🏢 Uber 기술 스택 분석

우버가 매일 2,500만 건의 라이드를 실시간으로 매칭하는 기술 스택 심층 분석 - Go, Java, Node.js로 구축한 글로벌 실시간 마켓플레이스

15 min read
uber, microservices+12
Read more
🏢 company

🏢 Canva 기술 스택 분석

캔바가 1억 명 이상의 사용자에게 쉽고 강력한 디자인 도구를 제공하는 기술 스택 심층 분석 - Java, TypeScript, AWS로 구축한 대규모 디자인 플랫폼

32 min read
canva, java+10
Read more
🏢 company

🏢 Stripe 기술 스택 분석

스트라이프가 전 세계 수백만 비즈니스의 결제를 처리하는 기술 스택 심층 분석 - Ruby, Go, Java로 구축한 금융 인프라의 미래

33 min read
stripe, ruby+11
Read more
🏢 company

🏢 Airbnb 기술 스택 분석

에어비앤비가 전 세계 400만 개의 숙소를 연결하는 글로벌 마켓플레이스 기술 스택 심층 분석 - Ruby on Rails에서 Service-Oriented Architecture로의 진화

24 min read
airbnb, ruby+12
Read more
🏢 company

🏢 배달의민족 기술 스택 분석

배달의민족이 한국 배달 문화를 혁신하며 동남아로 확장한 기술 스택 심층 분석 - Java, Spring, Kotlin으로 구축한 O2O 플랫폼

51 min read
baemin, woowa+10
Read more
🏢 company

🏢 Spotify 기술 스택 분석

스포티파이가 전 세계 5억 명에게 8,300만 곡을 스트리밍하는 기술 스택 심층 분석 - 마이크로서비스, 머신러닝, 그리고 음악 추천의 비밀

25 min read
spotify, java+12
Read more

Found this helpful?

Help us improve this content by contributing on GitHub or sharing your feedback with the community.