Design Loom
녹화가 끝난 뒤 업로드하는 서비스가 아니라, 녹화 중에도 영상을 처리해서 공유 가능한 시스템
Introduction & Requirements
“사용자가 화면을 녹화하면 mp4 파일을 서버에 업로드하고, 업로드가 끝나면 링크를 만들면 되지 않을까요?”
작은 데모라면 됩니다. 그런데 Loom의 제품 가치는 단순히 화면 녹화 파일을 저장하는 데 있지 않습니다. 사용자는 녹화가 끝난 뒤 긴 업로드와 처리 시간을 기다리고 싶어 하지 않습니다. 녹화가 끝나자마자 링크를 복사하고, 상대방은 그 링크를 열자마자 영상을 재생하기를 기대합니다.
이 서비스의 비즈니스적 본질은 “영상을 저장한다”가 아니라 “비동기 커뮤니케이션의 지연 시간을 줄인다”입니다. 회의 대신 Loom을 보냅니다. 긴 이메일 대신 Loom을 보냅니다. 제품 설명, 코드 리뷰, 디자인 피드백, 고객 지원 답변을 영상으로 전달합니다. 그러면 시스템은 녹화 파일을 안전하게 저장하는 것만으로는 부족합니다. 녹화와 동시에 업로드를 시작하고, 업로드된 조각을 빠르게 재생 가능한 형태로 바꾸고, 공유 링크는 먼저 발급하고, 고화질 버전은 뒤에서 따라오게 만들어야 합니다.
Clarifying Questions - 인터뷰 전, 또는 시스템 디자인 전에 명확한 설계를 위해 해야 하는 질문들 입니다. 이 단계에서 설계 범위 그리고 최적화에 대한 부분들, 중점적으로 설계를 해야하는 부분들을 명확하게 가져갈 수 있습니다.
“녹화가 끝나기 전부터 업로드를 시작해야 하나요, 아니면 녹화가 끝난 뒤 전체 파일을 한 번에 업로드 해야 되나요?”
이 질문 하나가 전체 시스템에 영향을 줄 수 있습니다. 전체 파일을 한 번에 올리는 구조는 단순합니다. 하지만 30분짜리 화면 녹화를 생각해보세요. 사용자는 녹화가 끝난 뒤 업로드가 끝날 때까지 기다립니다. 업로드 도중 네트워크가 끊기면 처음부터 다시 올려야 할 수도 있습니다. 녹화 파일이 커질수록 사용자 경험은 점점 나빠집니다. 그래서 Loom 시스템 디자인에서는 녹화 중에도 작은 영상 분할 데이터 chunk 를 계속 업로드하고, 서버는 먼저 도착한 분할 데이터 chunk 부터 처리합니다.
여기서 말하는 점진적 처리는 라이브 방송처럼 녹화 중 상대방이 동시에 본다는 뜻이 아닙니다. 녹화 중 조각을 미리 올려두고, 녹화 종료 직후 준비된 앞부분부터 빠르게 재생 가능하게 만드는 방향으로 잡겠습니다.


