마지막 절은 접근 제어입니다. 앞에서 주소를 사람마다 다르게 만들면 원가가 몇 배가 된다고 했으므로, 그러지 않는 방법을 찾아야 합니다.
조각마다 물어보면 검사가 병목이 된다
8분 영상을 4초 조각으로 나누면 조각이 120개입니다. 조각마다 권한을 물으면 한 번 볼 때 검사가 120번입니다. 시청 하루 3억 회 (평균 8분 시청)에 곱하면 검사가 하루 수백억 건입니다.
그래서 시작할 때 한 번 확인하고 짧게 만료되는 표를 줍니다.
| 표에 담는 것 | 왜 |
|---|---|
| 무엇을 볼 수 있는지 | 다른 영상에 쓰지 못하게 |
| 언제까지인지 | 유출돼도 오래 못 쓰게 |
| 위조가 아니라는 증명 | 스스로 만들지 못하게 |
엣지가 표를 검사하면 우리 서버까지 오지 않습니다. 검사는 하되 우리에게 오지는 않는 구조입니다.
표를 어디에 담나
여기서 앞 절의 제약이 걸립니다. 표를 주소에 넣으면 주소가 사람마다 달라집니다.
주소는 모두 같게 둔다
표는 주소가 아닌 곳에 담아 보낸다
이렇게 하면 엣지가 캐시 키로 주소만 쓰고 표는 검사에만 씁니다. 적중률과 접근 제어를 함께 얻습니다.
이 구조가 성립하려면 엣지가 표를 검사할 수 있어야 합니다. 검사 규칙을 엣지가 알아야 하므로, 그것을 어떻게 전달할지가 실무의 문제가 됩니다.
유출을 완전히 막을 수는 없다
시청자의 화면에 재생되는 것은 시청자가 저장할 수 있습니다. 표를 아무리 잘 만들어도 그것은 막지 못합니다.
| 막을 수 있는 것 | 막을 수 없는 것 |
|---|---|
| 권한 없는 사람의 접근 | 권한 있는 사람의 복제 |
| 주소를 퍼뜨려 오래 쓰는 것 | 화면을 녹화하는 것 |
무엇을 막는지 명확히 하는 것이 중요합니다. 완전한 보호를 목표로 두면 끝이 없고, 그 사이에 값싼 대비를 빠뜨립니다.
만료 시간이 그 값싼 대비입니다. 표가 유출돼도 만료까지만 쓸 수 있으므로, 창을 짧게 두면 퍼뜨리는 것이 무의미해집니다.
하지 않기로 한 것
| 뺀 것 | 이유 |
|---|---|
| 실시간 방송 | 미리 만들어 둘 시간이 없어 결정이 다 바뀐다 |
| 화면 녹화 방지 | 재생되는 것은 저장될 수 있다 |
| 시청 기록으로 추천하기 | 뉴스 피드 아키타입에서 다룬다 |
| 지역별 시청 제한 | 표에 조건 하나를 더하는 문제다 |
요구사항에 있던 여유를 다시 짚어 둡니다. 저장된 영상이라 미리 만들 시간이 있었고, 조회가 몰려 있어서 무엇을 미리 만들지 고를 수 있었고, 조각이 바뀌지 않아 캐시를 길게 둘 수 있었습니다. 이 셋이 이 설계의 대부분을 만들었습니다.