넷플릭스에서 QoE를 높이기 위해 하고 있는 것들에 대한 내용을 정리하고자 한다.
이 포스팅은 Optimizing the Netflix Streaming Experience with Data Science 이 블로그 글을 참고하여 작성하였다.
넷플릭스는 영화 추천 뿐만 아니라, 체감 품질(QoE / quality of experience)에도 많은 투자를 하고 있는 서비스이다.
넷플릭스는 체감 품질(QoE)를 위해, 스트리밍 서비스의 품질에 많은 노력을 기하고 있다.
이를 위해서 Adaptive Streaming과 Open Connect 같은 네트워크 기술에 많은 투자를 하고 있기도 하다.
그리고 스트리밍 기술에 집중하기 위하여, 데이터를 기반으로 스트리밍 서비스를 개발하는 별도의 팀을 구성하기도 했다.
넷플릭스에서 QoE를 높이기 위해, 집중했던 네가지 문제는 아래와 같다.
- 스트리밍 경험을 높이는 데에 필요한 요소 분석 : QoE 요소들이 사용자 경험에 미치는 영향 분석하기
- 스트리밍 경험 향상 1 : 각 유저에게 개인화된 스트리밍 경험을 만들어주기
- 스트리밍 경험 향상 2 : 유저의 영상 조회 패턴을 기반으로, 엣지 서버에 캐싱해둘 영상 정해두기
- 스트리밍 경험 향상 3 : 유저의 영상 조회 데이터, 피드백을 기반으로 영상의 기술적 품질을 향상시키기
스트리밍 경험을 높이는 데에 필요한 요소 분석
넷플릭스에서는 유저가 넷플릭스를 사용하는 패턴을 분석해서, 유저의 행동을 예측한다. 예를 들어, 넷플릭스에서 특정 기능을 구현했을 때, 유저의 영화 시청 시간이 어떻게 달라질 수 있는지를 예측해낸다.
유저의 행동 패턴에 영향을 줄 수 있는 품질 요소로는 Rebuffer Rate와 Bit Rate가 있다.
디바이스의 버퍼에 영상 데이터가 없으면, 새로 영상 데이터를 받아와야한다. 영상 재생 도중 이러한 현상이 계속 발생되면, 영상을 보다가 일시정지가 발생하게 된다. 이렇게 버퍼에 영상 데이터를 저장하기 위해 서버에 요청하는 빈도를 의미하는 지표가 Rebuffer Rate이다.
또다른 품질요소는 Bit Rate이다. Bit Rate는 영상의 품질과도 관련이 있다. Bit Rate가 낮으면, 유저는 낮은 해상도의 영상을 보게 된다. 그리고 Bit Rate가 높으면, 좀더 고화질의 영상을 볼 수 있다.
그런데 Rebuffer Rate와 Bit Rate는 트레이드 오프 관계에 있다.
네트워크 용량에는 제한이 있기 때문에, Bit Rate가 너무 높으면 이 제한에 걸릴 수도 있다.
이 경우, 영상 데이터를 제대로 못받아오게 된다. 그러면 다시 새로운 영상을 다운받아야하니까, 유저 입장에서는 영상 재생 도중에 흐름이 뚝뚝 끊기는 현상이 발생할 수 있다.
QoE를 최적화하는 데에 필요한 요소는 이 외에도 더 많은데, 각 요소들이 어떤 영향을 미칠 수 있는지 이해하는게 중요하다. 그리고 서로의 관계를 파악한 후 절충점을 찾아서 적용하는게 필요하다.
그래서 각 QoE 요소들이 사용자의 행동에 어떤 영향을 미치는지 정량화하고, 예측해내는게 필요하다. 그다음 이걸 함수로 만들어서 자동화한다면, 이를 기반으로 유저마다 특화된 스트리밍 경험을 줄 수 있다.
스트리밍 경험을 높이기 위한 방법
개인화된 스트리밍 경험
영상 캐싱 최적화
영상 품질 최적화
품질 검사 프로세스, 설문지를 통한 사용자 피드백 수집, 사용자 패턴 데이터를 기반으로 이상현상 모니터링 등을 통해 좋은 품질의 영상이 공급될 수 있도록 노력하고 있다.
읽어보면 좋을 추가 자료들
Optimizing Content Quality Control at Netflix with Predictive Modeling
Netflix HTTP Adaptive Streaming ( 슬라이드 쉐어 )
TOAST 기술 블로그 : 웹 기술로 구현하는 Adaptive HTTP Streaming
논문 : HTTP 적응적 스트리밍 서비스의 QoE 향상을 위한 세그먼트 특성 기반의 비디오 품질 조절 기법
넷플릭스 자료 : 탁월한 시청 경험 제공을 위한 넷플릭스(Netflix)와 전 세계 인터넷 서비스 제공업체(ISP)의 협업 현황
'소프트웨어-이야기 > 아키텍처' 카테고리의 다른 글
동영상 플랫폼 이해하기 (1) - HLS (0) | 2019.12.19 |
---|---|
(GraphQL) GraphQL 개념잡기 (2) | 2019.08.15 |
트위터 팔로워 타임라인 시스템 분석 (0) | 2019.07.29 |
(카오스 엔지니어링)카오스 몽키 (1) | 2018.03.21 |
(Strangler Pattern/스트랭글러 패턴) 레거시 코드를 마이크로 서비스 아키텍처로 개선하기 (0) | 2018.03.09 |