홈으로 돌아가기

WebRTC 기반 P2P 비디오 서비스: 9개월 만에 처음부터 개발

Vizavi 프로젝트 — 9개월 만에 처음부터 개발된 P2P 비디오 서비스. 자체 STUN/TURN 서버와 Node.js 기반 시그널링 서버를 사용한 WebRTC 기반 아키텍처. 데이터베이스 없이 JSON 파일에 데이터 저장하며 소규모 VPS에서 실행.

1코어 VPS에서 9개월 만에 비디오 서비스 조립 방법
Advertisement 728x90

# # 1코어 VPS에서 처음부터 P2P 비디오 서비스 구축: 9개월 개발기

여가 시간 9개월 동안, 오지 출신 전기 기술자가 'Vizavi'라는 완전한 기능을 갖춘 P2P 비디오 서비스를 만들어냈습니다—등록이나 앱 설치 없이 사용 가능. 1코어, 512 MB RAM의 소박한 VPS에서 처음부터 구축되었으며, WebRTC를 활용해 직접적인 P2P 연결을 하고 차단을 우회합니다. 결과는 브라우저 기반 솔루션으로, 러시아 도메인을 사용해 로컬 네트워크 제한 환경에서도 안정적으로 작동합니다.

아이디어에서 현실로: 'Vizavi' 탄생기

이 프로젝트는 창작자가 주류 비디오 서비스의 차단에 부딪히면서 대안을 찾던 중 시작되었습니다. 신경망 실험 중에 아이디어가 떠올랐죠: "비디오 통화 앱을 만들 수 있을까?" WebRTC 기본, STUN/TURN 서버, ICE 후보에 깊이 파고들었고, 첫 성공적인 테스트 통화가 본격 개발의 불씨가 되었습니다. 핵심 기능: 회원가입이나 앱 없이 브라우저에서 짧은 숫자 룸 코드를 입력하면 바로 연결.

아키텍처는 '룸 기반' 모델을 따릅니다: 사용자가 https://vizavi.rf/ 에 룸 번호를 입력하면, 참가자 2명이 모이면 시스템이 자동 연결해줍니다. 룸 코드 공유는 사용자 몫—메신저, 전화, 또는 대면으로. 장벽을 최소화: 링크 클릭 후 카메라/마이크 권한만 부여하면 끝.

Google AdInline article slot

기술 스택: 미니멀리즘 철학

모스크바 데이터센터의 임대 VPS에서 실행되며, 최소 사양입니다:

  • 1 CPU 코어
  • 512 MB RAM
  • 10 GB SSD 디스크 (3.3 GB 사용)
  • OS Debian 11

인프라는 다음과 같습니다:

  • Coturn — NAT traversal을 위한 자체 STUN/TURN 서버
  • Node.js (시그널링 서버), PM2로 관리
  • Nginx를 리버스 프록시로
  • Let’s Encrypt의 SSL, 자동 갱신
  • 기본 보안으로 UFW와 Fail2Ban
  • 클라이언트와 서버 로직은 바닐라 JavaScript
  • Express로 정적 파일과 REST API
  • Socket.io로 실시간 WebRTC 시그널링

데이터 저장은 전통 데이터베이스 대신 JSON 파일을 사용합니다. 서버 자원이 제한적이라 적합하고 배포도 간단합니다. 처음부터 만든 커스텀 관리 패널로 실시간 연결 통계와 활동을 모니터링합니다.

Google AdInline article slot

룸 유형: 기본부터 VIP까지

시스템은 세 가지 룸 유형을 지원합니다:

  • 기본 룸 — 2인용 기본 설정. 같은 번호 입력 시 자동 연결. 통화 녹음, IP 로깅, 메시지 저장 없음.
  • VIP 룸 — 계층 구조 추가: 소유자가 채팅 제어, 회의 녹음, 게스트 킥아웃 가능. 게스트는 화면 공유와 파일 전송 가능. 다중 연결 대기열과 입구 메시지 보드 포함.
  • 관찰 룸 (개발 중) — '베이비 모니터'처럼: 한 기기는 카메라, 다른 기기는 시청자 역할. 오래된 스마트폰을 비디오 피드로 재활용할 계획.

주요 강점: 연결 전 불필요한 단계 없음. 등록이나 사용자 이름 요구하는 경쟁자와 달리, 룸 코드 입력 후 즉시 연결.

보안과 프라이버시: 현재 상태

WebRTC 내장 엔드투엔드 암호화로 오디오와 비디오 스트림이 보호됩니다. 다만 개선이 필요한 부분:

Google AdInline article slot
  • 채팅 기록은 브라우저 localStorage에 평문으로 저장
  • VIP 입구 메시지는 암호화되지 않은 JSON 파일에 저장
  • 룸 접근 인증 없음

창작자는 민감 데이터용이 아니라고 밝히며, 보호 강화 필요성을 인정합니다. 512 MB RAM VPS에서 전체 암호화 추가는 보안과 성능 균형이 관건입니다.

개발자들을 위한 핵심 교훈

  • 아키텍처 미니멀리즘 — 데이터베이스 대신 JSON, 불필요 의존성 제거가 저사양 VPS 운영의 핵심.
  • 시그널링 서버 유연성 — Socket.io가 봇과 스캐너 트래픽에도 WebRTC 시그널을 원활히 처리.
  • 사용자 경험 — 등록이나 이름 입력 같은 단계를 생략하면 참여율이 즉시 상승.
  • 지속적인 보안 — UFW와 Fail2Ban 같은 기본은 필수지만, 정기 감사 필요.

시스템은 스캐너와 봇의 지속적 탐색에 대응해 필터링합니다: 비브라우저 클라이언트는 JavaScript 없는 간소한 HTML 페이지만 제공. 서버 부하 감소와 SEO에도 도움.

이 프로젝트는 WebRTC 같은 기술이 초보 개발자도 도달할 수 있음을 증명합니다. 단계적 구축, 핵심 기능 집중, Coturn·Let’s Encrypt 같은 도구 활용으로 성공. 다음 목표: 메시지 암호화와 동시 연결 확대.

— Editorial Team

Advertisement 728x90

다음 읽기