PeerTube: 탈중앙화 영상 플랫폼의 기술적 구조
PeerTube는 YouTube, Vimeo 같은 중앙화된 영상 플랫폼의 대안으로 등장한 오픈소스 프로젝트다. Framasoft가 개발하고 AGPL-3.0 라이선스로 공개된 이 프로젝트는 현재 GitHub에서 15,000개 이상의 스타를 보유하며 활발히 유지되고 있다. 단순한 영상 호스팅 툴이 아니라, 페더레이션(Federation) 아키텍처를 기반으로 여러 독립 서버가 서로 연동되는 분산 네트워크를 구성한다는 점에서 백엔드 개발자 관점에서 주목할 만하다.
핵심 설계 철학은 "벤더 락인 없음(No vendor lock-in)"이다. 사용자는 특정 서비스에 종속되지 않고, 자신이 원하는 인스턴스에 가입하거나 직접 인스턴스를 운영하면서도 다른 서버의 크리에이터를 팔로우하고 콘텐츠를 소비할 수 있다.
ActivityPub 기반 페더레이션과 실무적 함의
PeerTube의 서버 간 통신은 ActivityPub 프로토콜을 기반으로 동작한다. ActivityPub은 W3C 표준으로, Mastodon 등 다양한 탈중앙화 서비스들이 공통으로 채택하는 소셜 네트워킹 프로토콜이다. 이를 통해 서로 다른 PeerTube 인스턴스, 심지어 Mastodon 계정과도 상호운용이 가능하다.
백엔드 설계 관점에서 이 구조는 몇 가지 흥미로운 도전 과제를 내포한다.
- 분산 상태 동기화: 영상 메타데이터, 좋아요, 댓글 등이 여러 서버에 걸쳐 동기화되어야 한다.
- 서버 간 신뢰 모델: HTTP Signatures를 이용해 요청의 출처 서버를 검증한다.
- 이벤트 기반 전파: 팔로우/언팔로우, 영상 업로드 등 모든 행위가 Activity 객체로 직렬화되어 원격 서버로 POST 요청을 통해 전달된다.
// Activity 예시 (간략화)
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Create",
"actor": "https://instance-a.example/accounts/alice",
"object": {
"type": "Video",
"name": "My new video",
"url": "https://instance-a.example/videos/watch/abc123"
}
}
기술 스택과 모노레포 구성
PeerTube의 레포지토리 구조를 보면 apps, client, packages, server 디렉터리로 나뉜 pnpm 기반 모노레포로 구성되어 있다. 서버 사이드는 Node.js(TypeScript)로 작성되어 있으며, 클라이언트는 Angular 기반이다. 공통 패키지는 packages 디렉터리에서 관리되어 서버와 클라이언트 간 타입 공유가 가능한 구조다.
Java 백엔드 개발자 입장에서 직접적인 코드 재사용은 어렵지만, 이 모노레포 전략과 인터페이스 공유 패턴은 멀티 모듈 Gradle 프로젝트에서 API 스펙 모듈을 공유하는 방식과 개념적으로 유사하다. 또한 16,000회 이상의 커밋 히스토리를 가진 장기 운영 오픈소스 프로젝트로서, 코드 구조 변화 추적이나 대규모 리팩토링 전략을 학습하기에도 좋은 참고 사례다.
정리
- PeerTube는 ActivityPub 프로토콜 기반의 페더레이션 아키텍처로, 서버 간 분산 상태 동기화와 신뢰 검증 설계를 실제 구현한 오픈소스 레퍼런스다.
- 벤더 락인 없는 분산 시스템 설계는 마이크로서비스나 멀티 테넌시 환경을 설계하는 백엔드 개발자에게 실질적인 아키텍처 인사이트를 제공한다.
- pnpm 모노레포와 타입 공유 구조는 멀티 모듈 프로젝트에서 인터페이스 일관성을 유지하는 전략으로 응용할 수 있다.