Foundry
동영상 스트리밍 설계
심화
핵심

조각과 목록

무엇을 어디서 받을지 어떻게 알려주나

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

조각과 목록 파일

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

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

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

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

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

조각 길이를 얼마로 하나

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

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

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

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

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

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

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

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

목록을 어떻게 내려주나

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

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

면접에서 이렇게 나옵니다

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

화질 종류, 조각 주소, 조각 길이, 전체 길이입니다.

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

목록이 있어야 탐색이 가능합니다. 5분 지점으로 건너뛰면 조각 길이로 나눠 몇 번째인지 계산해 그것만 받습니다.

흔한 실수: 목록을 서버가 사용자마다 만들어 주는 것. 목록도 조각도 모든 시청자에게 같으므로, 사람마다 다르게 만들면 엣지 적중률이 무너집니다.

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

요청 수를 계산해 보고 중간을 고릅니다.

조각 길이유리한 점불리한 점
짧다시작이 빠르다. 전환이 잦다요청 수가 많다
길다요청이 적다. 압축 효율이 좋다시작이 늦다

8분을 2초로 자르면 조각이 240개이고 시청 하루 3억 회 (평균 8분 시청)에 곱하면 하루 수백억 건입니다.

시작 부분만 짧게 두고 뒤는 길게 두는 방법도 있습니다. 시작이 급한 것은 앞부분뿐입니다.

흔한 실수: 시작 시간만 보고 짧게 정하는 것. 조각을 짧게 하는 결정은 요청 수를 그만큼 늘리는 결정입니다. 그 요청을 받는 비용도 함께 계산해야 합니다.

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

둘 수 없습니다. 조각의 첫 화면은 앞을 참조하지 않는 완전한 화면이어야 합니다.

영상 압축은 앞 화면과의 차이만 기록합니다. 그래서 아무 지점에서 자르면 그 조각만으로는 화면을 만들 수 없습니다.

완전한 화면이 있는 지점에서만 자른다

이 제약이 조각 길이 결정에도 걸립니다. 완전한 화면을 자주 넣어야 하므로 조각을 짧게 하면 파일 크기가 커집니다.

흔한 실수: 조각 길이를 원하는 값으로 정한 뒤 인코딩을 맞추지 않는 것. 인코딩할 때 완전한 화면 간격을 조각 길이에 맞춰 두어야 원하는 지점에서 잘립니다. 순서가 반대면 조각 길이가 들쭉날쭉해집니다.

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

엣지가 같은 조각을 사람 수만큼 따로 저장하고, 적중률이 무너집니다.

목록 파일과 조각은 모든 시청자에게 같은 내용입니다. 주소가 다르면 캐시는 그것을 서로 다른 것으로 봅니다.

적중률이 떨어지면 원본에서 나가는 전송량이 늘고, 전송비가 가장 큰 비용 항목이므로 그것이 곧 원가가 됩니다.

흔한 실수: 접근 제어를 위해 주소에 사용자 정보를 넣는 것. 자연스러운 방법처럼 보이지만 비용 구조를 바꿉니다. 주소는 같게 두고 권한 확인은 주소 밖에서 하는 방법을 뒤에서 다룹니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

읽었으면 문제로 확인해보세요

동영상 스트리밍 설계 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.