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

누가 볼 수 있는지와 하지 않을 것

권한 확인을 주소에 담지 않는다

마지막 절은 접근 제어입니다. 앞에서 주소를 사람마다 다르게 만들면 원가가 몇 배가 된다고 했으므로, 그러지 않는 방법을 찾아야 합니다.

조각마다 물어보면 검사가 병목이 된다

조각마다 권한을 물으면 검사 횟수가 조각 수만큼 늘어난다 8분 영상을 4초 조각으로 나누면 조각이 120개 조각마다 검사 한 번 볼 때 검사 120번 시작할 때 한 번 짧게 만료되는 표를 준다 표에 담을 것은 무엇을 어디까지 언제까지 볼 수 있는지다 표가 유출되면 만료까지는 남이 볼 수 있다. 그 창을 짧게 둔다 표를 사람마다 다르게 만들면 캐시 적중률이 무너진다 주소는 같게 두고 표는 주소 밖에 담는다

8분 영상을 4초 조각으로 나누면 조각이 120개입니다. 조각마다 권한을 물으면 한 번 볼 때 검사가 120번입니다. 시청 하루 3억 회 (평균 8분 시청)에 곱하면 검사가 하루 수백억 건입니다.

그래서 시작할 때 한 번 확인하고 짧게 만료되는 표를 줍니다.

표에 담는 것
무엇을 볼 수 있는지다른 영상에 쓰지 못하게
언제까지인지유출돼도 오래 못 쓰게
위조가 아니라는 증명스스로 만들지 못하게

엣지가 표를 검사하면 우리 서버까지 오지 않습니다. 검사는 하되 우리에게 오지는 않는 구조입니다.

표를 어디에 담나

여기서 앞 절의 제약이 걸립니다. 표를 주소에 넣으면 주소가 사람마다 달라집니다.

주소는 모두 같게 둔다
표는 주소가 아닌 곳에 담아 보낸다

이렇게 하면 엣지가 캐시 키로 주소만 쓰고 표는 검사에만 씁니다. 적중률과 접근 제어를 함께 얻습니다.

이 구조가 성립하려면 엣지가 표를 검사할 수 있어야 합니다. 검사 규칙을 엣지가 알아야 하므로, 그것을 어떻게 전달할지가 실무의 문제가 됩니다.

유출을 완전히 막을 수는 없다

시청자의 화면에 재생되는 것은 시청자가 저장할 수 있습니다. 표를 아무리 잘 만들어도 그것은 막지 못합니다.

막을 수 있는 것막을 수 없는 것
권한 없는 사람의 접근권한 있는 사람의 복제
주소를 퍼뜨려 오래 쓰는 것화면을 녹화하는 것

무엇을 막는지 명확히 하는 것이 중요합니다. 완전한 보호를 목표로 두면 끝이 없고, 그 사이에 값싼 대비를 빠뜨립니다.

만료 시간이 그 값싼 대비입니다. 표가 유출돼도 만료까지만 쓸 수 있으므로, 창을 짧게 두면 퍼뜨리는 것이 무의미해집니다.

하지 않기로 한 것

뺀 것이유
실시간 방송미리 만들어 둘 시간이 없어 결정이 다 바뀐다
화면 녹화 방지재생되는 것은 저장될 수 있다
시청 기록으로 추천하기뉴스 피드 아키타입에서 다룬다
지역별 시청 제한표에 조건 하나를 더하는 문제다

요구사항에 있던 여유를 다시 짚어 둡니다. 저장된 영상이라 미리 만들 시간이 있었고, 조회가 몰려 있어서 무엇을 미리 만들지 고를 수 있었고, 조각이 바뀌지 않아 캐시를 길게 둘 수 있었습니다. 이 셋이 이 설계의 대부분을 만들었습니다.

면접에서 이렇게 나옵니다

Q.조각마다 권한을 확인하면 무엇이 문제입니까

검사 횟수가 조각 수만큼 늘어납니다.

8분 영상을 4초 조각으로 나누면 120개입니다. 한 번 볼 때 검사가 120번이고, 시청 하루 3억 회 (평균 8분 시청)에 곱하면 하루 수백억 건입니다.

그래서 시작할 때 한 번 확인하고 짧게 만료되는 표를 줍니다.

표에 담는 것
무엇을 볼 수 있는지다른 영상에 쓰지 못하게
언제까지인지유출돼도 오래 못 쓰게

흔한 실수: 표 검사를 우리 서버에서 하는 것. 그러면 조각 요청이 다 우리에게 옵니다. 엣지가 검사하면 검사는 하되 우리에게 오지 않습니다.

Q.권한 표를 주소에 담으면 어떻게 됩니까

주소가 사람마다 달라져 캐시 적중률이 무너집니다.

주소는 모두 같게 둔다
표는 주소가 아닌 곳에 담아 보낸다

이렇게 하면 엣지가 캐시 키로 주소만 쓰고 표는 검사에만 씁니다. 적중률과 접근 제어를 함께 얻습니다.

전송비가 가장 큰 비용 항목이므로 이 차이가 곧 원가입니다.

흔한 실수: 주소에 담는 것을 편의로 고르는 것. 구현이 가장 쉽고 잘 작동하는 것처럼 보입니다. 비용은 규모가 커진 뒤에 드러나고, 그때는 이미 그 주소 형식에 여러 곳이 묶여 있습니다.

Q.영상 유출을 완전히 막을 수 있습니까

막을 수 없습니다. 재생되는 것은 저장될 수 있습니다.

막을 수 있는 것막을 수 없는 것
권한 없는 사람의 접근권한 있는 사람의 복제
주소를 퍼뜨려 오래 쓰는 것화면을 녹화하는 것

무엇을 막는지 명확히 하는 것이 중요합니다. 완전한 보호를 목표로 두면 끝이 없습니다.

만료 시간이 값싼 대비입니다. 창을 짧게 두면 표를 퍼뜨리는 것이 무의미해집니다.

흔한 실수: 완전한 보호를 목표로 두고 복잡한 장치를 쌓는 것. 그 사이에 만료 시간을 짧게 두는 값싼 대비를 빠뜨리는 경우가 많습니다. 막을 수 있는 것을 확실히 막는 편이 낫습니다.

Q.이 설계를 가능하게 한 요구사항의 여유가 무엇이었습니까

저장된 영상이라는 것, 조회가 몰려 있다는 것, 조각이 바뀌지 않는다는 것입니다.

미리 만들 시간이 있었다: 여러 화질을 준비할 수 있다
조회가 몰려 있다: 무엇을 미리 만들지 고를 수 있다
조각이 바뀌지 않는다: 캐시를 길게 두고 병렬로 만들 수 있다

이 셋이 설계의 대부분을 만들었습니다. 실시간 방송을 범위 밖으로 둔 것도 첫 번째가 사라지기 때문입니다.

흔한 실수: 요구사항에서 제약만 세고 여유를 세지 않는 것. 여유가 곧 선택지입니다. 어떤 여유에 기대고 있는지 적어 두면, 요구사항이 바뀔 때 무엇이 무너지는지 바로 알 수 있습니다.

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

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

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