시스템 설계, 기술 면접 대비

동영상 스트리밍 설계 면접 퀴즈

한 번 만들고 수천 번 내려준다

동영상 서비스의 재생을 요구사항부터 끝까지 설계합니다. 업로드 5만에 시청 3억, 화질 5단계, 시작 2초, 끊김 1퍼센트 미만, 전송비가 최대 비용이라는 제약 아래에서 조각과 목록, 적응 화질, 인코딩 순서, 무엇을 미리 만들지, 전송 원가, 시작과 끊김의 상충, 접근 제어를 다룹니다.

로그인 없이 풀어보기
17개 문제, 무료

이 설계에 주어진 요구사항

문제는 모두 이 하나의 요구사항 안에서 풉니다.

동영상 스트리밍 설계

동영상 서비스

올라온 영상을 여러 기기에서 보게 합니다. 올리는 과정은 파일 업로드에서 다루고 여기서는 재생을 봅니다.

이번에 만드는 기능

  • 영상을 눌러 바로 보기
  • 네트워크가 변해도 계속 보기
  • 중간으로 건너뛰고 이어서 보기
  • 권한이 있는 사람만 보기

범위 밖

  • 영상을 올리는 과정
  • 실시간 방송
  • 영상 추천과 순위
  • 화면 녹화를 막는 것

지켜야 하는 수치

업로드
하루 5만 개 (평균 10분)
시청
하루 3억 회 (평균 8분 시청)
화질
5단계
시작
누른 뒤 2초 안에 첫 화면
끊김
재생 시간의 1퍼센트 미만
조회 분포
상위 1퍼센트 영상이 조회의 90퍼센트
비용
전송비가 가장 큰 항목

전제로 주어진 것

  • 영상 하나를 만드는 값은 한 번 내고 내려주는 값은 볼 때마다 낸다
  • 영상 압축은 앞 화면과의 차이만 기록한다
  • 시청자의 네트워크 속도는 시청 중에 변한다
  • 한 번 인코딩한 조각은 다시 바뀌지 않는다

학습할 핵심 개념

요구사항과 재생이라는 문제
조각과 목록
화질을 누가 고르나
인코딩을 어떤 순서로 하나
무엇을 미리 만들지 정한다
전송 원가
시작과 끊김의 상충
누가 볼 수 있는지와 하지 않을 것

핵심 개념 미리보기

동영상 스트리밍 설계 면접에서 꼭 나오는 개념을 미리 확인하세요

요구사항과 재생이라는 문제

핵심

동영상 서비스를 설계합니다. 올리는 문제는 파일 업로드에서 다뤘으므로, 여기서는 올라온 영상을 어떻게 보게 하는지를 봅니다.

항목
대상동영상 서비스
업로드하루 5만 개 (평균 10분)
시청하루 3억 회 (평균 8분 시청)
화질5단계
시작누른 뒤 2초 안에 첫 화면
버퍼링재생 시간의 1퍼센트 미만
조회 분포상위 1퍼센트 영상이 조회의 90퍼센트
비용전송비가 가장 큰 항목

만드는 값과 내려주는 값이 다르다

영상 하나를 한 번 만들어 수천 번 내려주므로 만드는 비용을 읽기로 갚는다 비율이 커서 막대로 그릴 수 없다 업로드 5만 하루 시청 3억 6000배 영상 하나를 만드는 데 드는 값은 한 번만 낸다 내려주는 값은 볼 때마다 낸다 그래서 만들 때 일을 더 해서 내려줄 때를 값싸게 만든다 다만 무한정 그럴 수는 없다 거의 안 보는 영상에 만드는 값을 다 내면 그 값이 낭비가 된다

업로드는 하루 5만 개 (평균 10분)이고 시청은 하루 3억 회 (평균 8분 시청)입니다. 영상 하나를 만드는 값은 한 번만 내고, 내려주는 값은 볼 때마다 냅니다.

그래서 만들 때 일을 더 해서 내려줄 때를 값싸게 만드는 쪽으로 기웁니다. 여러 화질을 미리 만들어 두는 것도, 조각으로 잘라 두는 것도 그 판단입니다.

다만 무한정 그럴 수는 없습니다. 조회가 상위 1퍼센트 영상이 조회의 90퍼센트로 몰려 있어서, 거의 안 보는 영상에 만드는 값을 다 내면 그 값이 그대로 낭비가 됩니다. 이 상충이 뒤에서 한 절을 차지합니다.

통째로 내려주면 안 되는 이유

파일 하나를 그대로 주는 방식은 세 가지가 걸립니다.

문제내용
시작이 늦다다 받아야 재생이 시작된다
버린 것이 많다30초 보고 껐으면 나머지가 낭비다
화질을 바꿀 수 없다받는 중에 네트워크가 변해도 대응이 없다

첫 번째가 요구사항과 정면으로 부딪힙니다. 2초 안에 첫 화면을 보여줘야 하는데, 10분 영상을 다 받는 데 그보다 훨씬 오래 걸립니다.

그래서 영상을 조각으로 잘라 필요한 만큼만 받게 합니다. 이것이 이 아키타입의 골격입니다.

두 요구가 서로를 밀어낸다

2초 시작과 버퍼링 재생 시간의 1퍼센트 미만은 함께 두면 상충합니다.

시작을 빠르게 하려면 조금만 받고 재생을 시작해야 한다
끊기지 않으려면 넉넉히 받아 두어야 한다

이 둘을 어떻게 함께 지키는지가 뒤의 한 절입니다. 요구사항을 읽을 때 서로 밀어내는 쌍을 찾아 두면 어느 절이 어려울지 미리 알 수 있습니다.

다루지 않는 것

뺀 것이유
올리는 과정파일 업로드 아키타입에서 다룬다
영상 추천과 순위뉴스 피드 아키타입에서 다룬다
실시간 방송지연 요구가 완전히 달라 별도 설계가 된다
자막과 음성 트랙 여러 개같은 구조를 반복 적용하는 문제다

세 번째를 빼는 것이 중요합니다. 저장된 영상은 미리 만들어 둘 시간이 있고 실시간 방송은 없습니다. 이 차이가 인코딩과 전송의 모든 결정을 바꾸므로, 하나를 먼저 끝냅니다.

면접에서 이렇게 나옵니다
  • Q.영상 서비스에서 만드는 값과 내려주는 값의 차이가 설계에 어떻게 반영됩니까
  • Q.영상 파일을 통째로 내려주면 무엇이 문제입니까
  • Q.요구사항에서 서로 밀어내는 쌍을 찾으면 무엇을 얻습니까

조각과 목록

핵심

앞 절에서 조각으로 잘라 필요한 만큼만 받게 하기로 했습니다. 그 조각을 얼마로 자르고 어떻게 찾게 하는지가 이 절입니다.

조각과 목록 파일

영상을 조각으로 나누고 목록 파일로 어디에 무엇이 있는지 알려준다 통째로 한 파일 다 받아야 재생이 시작되고, 껐을 때 받은 것이 버려진다 조각으로 나눈 것 몇 초 단위 첫 조각만 받으면 재생이 시작된다 조각 목록 파일이 필요하다 화질마다 어떤 조각이 어디 있는지, 조각 하나가 몇 초인지 적는다

영상을 몇 초 단위로 자릅니다. 그리고 어떤 조각이 어디 있는지 적은 목록 파일을 함께 둡니다. 재생하는 쪽은 목록을 먼저 받고 필요한 조각을 순서대로 받습니다.

목록에는 이런 것이 들어갑니다.

항목왜 필요한가
화질 종류와 각 화질의 목록 위치어떤 선택지가 있는지 안다
조각 주소어디서 받을지 안다
조각 하나의 길이어디로 건너뛸지 계산한다
전체 길이진행 바를 그린다

목록 파일이 있어야 탐색이 가능합니다. 사용자가 5분 지점으로 건너뛰면, 조각 길이로 나눠 몇 번째 조각인지 계산해 그것만 받습니다. 통째 파일에서는 이 계산을 할 수 없습니다.

조각 길이를 얼마로 하나

짧게 자를수록 유리한 것과 불리한 것이 갈립니다.

조각 길이유리한 점불리한 점
짧다 (2초 내외)시작이 빠르다. 화질 전환이 잦게 가능하다요청 수가 많다. 목록이 길어진다
길다 (10초 내외)요청이 적다. 압축 효율이 좋다시작이 늦다. 전환이 굼뜨다

요청 수를 계산해 봐야 합니다. 8분을 2초로 자르면 조각이 240개이고, 시청 하루 3억 회 (평균 8분 시청)에 곱하면 하루 수백억 건의 조각 요청입니다. 조각을 짧게 하는 결정은 요청 수를 그만큼 늘리는 결정입니다.

그래서 흔히 중간을 고릅니다. 시작 부분만 짧은 조각으로 두고 뒤는 길게 두는 방법도 있습니다. 시작이 급한 것은 앞부분뿐입니다.

조각은 스스로 재생 가능해야 한다

영상 압축은 앞 화면과의 차이만 기록하는 방식을 씁니다. 그래서 아무 지점에서 잘라 버리면 그 조각만으로는 화면을 만들 수 없습니다.

조각의 첫 화면은 앞을 참조하지 않는 완전한 화면이어야 한다

이 제약이 두 가지를 강제합니다. 첫째, 조각 경계를 아무 데나 둘 수 없습니다. 둘째, 완전한 화면을 자주 넣어야 하므로 조각을 짧게 하면 파일 크기가 커집니다. 조각 길이 결정에 압축 효율이 걸리는 이유입니다.

목록을 어떻게 내려주나

목록 파일은 작고 모든 시청자에게 같습니다. 조각도 같습니다. 둘 다 사람마다 다르게 만들지 않는 것이 중요합니다.

주소가 사람마다 다르면 엣지가 같은 조각을 사람 수만큼 따로 저장합니다. 적중률이 무너지고, 그것이 곧 비용입니다. 접근 제어는 주소가 아닌 다른 방법으로 하며 뒤에서 다룹니다.

면접에서 이렇게 나옵니다
  • Q.조각 목록 파일에 무엇을 담아야 합니까
  • Q.조각을 2초로 자르는 것과 10초로 자르는 것 중 무엇을 고르시겠습니까
  • Q.조각 경계를 아무 지점에나 둘 수 있습니까

화질을 누가 고르나

핵심

화질 5단계를 미리 만들어 둡니다. 그러면 시청자에게 어느 것을 줄지 정해야 하는데, 그 결정을 서버가 하면 안 됩니다.

판단은 받는 쪽이 한다

받는 쪽이 실제 받은 속도를 보고 다음 조각의 화질을 고른다 조각마다 화질을 다시 고른다 높음 낮음 받은 속도에 맞춘다 첫 조각은 낮은 화질로 받는다. 시작이 빨라진다 중간에 느려지면 낮추고, 여유가 생기면 올린다 서버는 무엇을 줄지 고르지 않는다. 있는 것을 알려주기만 한다

서버는 시청자의 네트워크 상태를 모릅니다. 알 수 있는 것은 조금 전에 보낸 것이 얼마나 빨리 갔는지인데, 그것도 서버 쪽에서 보는 값입니다.

받는 쪽은 자기가 실제로 얼마나 빨리 받았는지버퍼가 얼마나 남았는지를 압니다. 그래서 다음 조각의 화질을 받는 쪽이 고릅니다.

역할하는 일
서버어떤 화질이 있는지 목록으로 알려준다
받는 쪽다음 조각을 어느 화질로 받을지 고른다

서버가 무상태가 됩니다. 조각 요청은 그냥 파일 요청이고, 누가 어떤 화질을 보고 있는지 기억할 필요가 없습니다. 이것이 엣지에서 그대로 캐시될 수 있는 이유이기도 합니다.

무엇을 보고 고르나

두 신호를 함께 봅니다.

신호
최근에 받은 속도지금 네트워크가 얼마나 되는가
남은 버퍼실패할 여유가 얼마나 있는가

속도만 보면 잘못 판단합니다. 속도가 좋아 보여도 버퍼가 거의 비었으면 높은 화질을 시도할 여유가 없습니다. 반대로 버퍼가 넉넉하면 조금 무리해도 됩니다.

그리고 올릴 때와 내릴 때가 대칭이 아닙니다.

내릴 때는 빠르게 내린다. 끊기는 것을 막아야 한다
올릴 때는 천천히 올린다. 올렸다가 다시 내리면 더 나쁘다

화질이 계속 오르내리면 더 나쁘다

전환 판단을 민감하게 만들면 화질이 자주 바뀝니다. 시청자에게는 한 단계 낮은 화질로 안정된 것보다 나쁩니다. 화면이 계속 흐려지고 선명해지는 것은 눈에 띕니다.

그래서 전환에 여유를 둡니다. 올릴 기준과 내릴 기준을 다르게 두어, 경계 근처에서 왕복하지 않게 합니다. 한 번 바꾼 뒤에는 잠시 유지합니다.

화질 목록에 무엇을 넣나

5단계를 어떻게 벌려 놓을지도 결정입니다.

잘못된 배치문제
단계가 너무 촘촘하다전환해도 체감이 없고 만드는 값만 든다
단계가 너무 벌어져 있다한 단계 내리면 눈에 띄게 나빠진다

그리고 가장 낮은 화질은 아주 느린 네트워크에서도 끊기지 않을 만큼 낮아야 합니다. 그것이 마지막 방어선입니다. 가장 낮은 것으로도 못 받으면 재생이 멈춥니다.

면접에서 이렇게 나옵니다
  • Q.어느 화질을 줄지 서버가 정하면 무엇이 문제입니까
  • Q.화질 전환을 무엇을 보고 결정하시겠습니까
  • Q.화질이 자주 오르내리는 것은 왜 문제입니까

더 많은 개념과 문제는 가입 후 이용할 수 있어요

먼저 5문제 맛보기

동영상 스트리밍 설계 면접 빈출 질문

실제 면접에서 자주 나오는 질문들입니다

Q.

영상 서비스에서 만드는 값과 내려주는 값의 차이가 설계에 어떻게 반영됩니까

요구사항과 재생이라는 문제 개념 정리 보기
Q.

영상 파일을 통째로 내려주면 무엇이 문제입니까

요구사항과 재생이라는 문제 개념 정리 보기
Q.

요구사항에서 서로 밀어내는 쌍을 찾으면 무엇을 얻습니까

요구사항과 재생이라는 문제 개념 정리 보기
Q.

실시간 방송을 이번 범위에서 빼는 이유가 무엇입니까

요구사항과 재생이라는 문제 개념 정리 보기
Q.

조각 목록 파일에 무엇을 담아야 합니까

조각과 목록 개념 정리 보기
Q.

조각을 2초로 자르는 것과 10초로 자르는 것 중 무엇을 고르시겠습니까

조각과 목록 개념 정리 보기
Q.

조각 경계를 아무 지점에나 둘 수 있습니까

조각과 목록 개념 정리 보기
Q.

목록과 조각 주소를 사람마다 다르게 만들면 어떻게 되나요

조각과 목록 개념 정리 보기

이런 점이 좋아요

만드는 값과 내려주는 값을 나눠 보는 감각

적중률을 성능이 아니라 원가로 읽는 눈

서로 밀어내는 두 요구를 상태를 나눠 함께 지키는 판단

지금 바로 시작하세요

무료로 동영상 스트리밍 설계 퀴즈를 풀고, AI 오답 분석으로 실력을 키우세요.