데브허브 | DEVHUB | Design Spotify Like a Senior Engineer (System Design Interview)Design Spotify Like a Senior Engineer (System Design Interview)
- Spotify 시스템 디자인은 오디오 전송, 메타데이터 관리, 객체 저장소 등 다양한 기술을 포함하는 고전적인 문제로, 미드레벨 개발자의 시스템 설계 능력 향상에 매우 유용합니다. 🎶
- 시스템 설계는 요구사항 이해, 용량 계획, 고수준 아키텍처, 읽기/쓰기 흐름, API 및 데이터베이스 설계, 확장성 고려의 7단계로 진행됩니다. 🪜
- 50만 사용자, 3천만 곡을 목표로 하며, 아티스트의 곡 업로드, 사용자의 검색 및 재생, 플레이리스트 관리, 사용자 프로필, 기본 모니터링이 핵심 요구사항입니다. 🎯
- 3천만 곡의 오디오 파일은 약 90TB의 원본 데이터를 필요로 하며, 복제본 및 버전 관리를 고려하면 2~3배 더 많은 저장 공간이 필요해 오디오가 저장 비용의 대부분을 차지합니다. 💾
- 사용자당 일일 10~15곡 스트리밍 시, 평균 3.5분 청취 및 128-160kbps 품질로 인해 오디오 데이터가 대역폭(특히 송신 비용)의 주요 원인이 됩니다. 📶
- 고수준 아키텍처는 사용자 앱, 로드 밸런서, RESTful API 서버, 메타데이터용 SQL DB, 오디오 파일용 Blob Storage(S3 등)로 구성되며, Blob Storage는 보안을 위해 서명된 URL을 사용합니다. 🏗️
- 사용자 재생 흐름은 앱에서 API 서버로 요청, JWT 인증, SQL DB에서 메타데이터 조회, 서명된 URL 생성, 앱으로 반환, 앱이 서명된 URL로 Blob Storage에서 오디오 스트리밍 순으로 진행됩니다. ▶️
- 아티스트 업로드 흐름은 앱에서 API 서버로 요청, 파일 형식/크기 검증, Blob Storage에 오디오 저장, 메타데이터 추출 및 SQL DB 저장, (선택적) CDN 무효화 후 성공 응답으로 이루어집니다. ⬆️
- API는 검색/발견(예:
/search, /songs/trending), 콘텐츠 접근(예: /songs/{ID}), 플레이리스트 관리(예: /playlists, /playlists/{ID}/songs), 사용자 액션(예: /songs/{ID}/like), 사용자 관리(예: /users/me/playlists)를 위한 RESTful 엔드포인트를 포함합니다. 🌐
- 데이터 저장은 불변하는 오디오 파일을 위한 Blob Storage(S3)와 사용자, 아티스트, 곡, 플레이리스트 등 모든 메타데이터를 위한 관계형 데이터베이스(PostgreSQL/MySQL)로 구성됩니다. 🗄️
- 시스템은 5천만 명 이상의 사용자를 지원하기 위한 확장성 전략을 고려해야 하며, 이는 시스템 설계의 중요한 마지막 단계입니다. 🚀
- 시니어 엔지니어는 미드레벨 개발자와 차별화되는 시스템 설계 역량을 갖추기 위한 특정 기술 피라미드를 이해하고 습득해야 합니다. 🧠