PostgreSQL로 화상 회의? 데이터베이스를 활용한 혁신적인 시도!
PostgreSQL을 활용하여 실시간 화상 회의 시스템(Real-time Video Conferencing System)을 구축, 데이터베이스를 메시지 브로커(Message Broker)로 활용
SvelteKit 프런트엔드(Frontend), Node.js 기반 WebSocket 서버(pg-relay), PlanetScale PostgreSQL을 사용하여 구현
논리적 복제(Logical Replication)를 통해 데이터베이스에서 실시간 데이터 스트리밍(Real-time Data Streaming)을 구현하여 15fps 비디오 전송 성공
WebRTC 대신 PostgreSQL을 선택한 이유와 성능 및 트레이드오프(Performance and Trade-offs)에 대한 커뮤니티의 다양한 의견 제시
PostgreSQL을 활용한 비디오 프레임 전송
저자는 브라우저에서 캡처한 비디오 프레임을 JPEG로 인코딩하여 video_frames 테이블에 저장한다. 논리적 복제(Logical Replication)를 통해 변경 사항을 감지하고, WebSocket을 통해 수신자에게 전송한다. 이러한 방식은 데이터베이스의 WAL(Write-Ahead Log)을 활용하여 데이터의 지속성(Durability)을 보장하며, 15fps의 비디오 스트리밍을 가능하게 한다. 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 각 통화 세션의 데이터를 안전하게 관리한다.
성능 및 기술적 고려 사항
구현 과정에서 저자는 LISTEN/NOTIFY 방식과 Unlogged 테이블을 고려했지만, 8KB 페이로드 제한(Payload Limit)과 WAL 미사용(No WAL)으로 인한 문제로 인해 포기했다. 대신 논리적 복제(Logical Replication)를 선택하여 데이터의 순서 보장(Order Guarantee)과 데이터 지속성(Data Durability)을 확보했다. 5초 간격의 데이터 삭제(Data Purging)를 통해 데이터베이스의 저장 공간을 효율적으로 관리한다.
WebRTC vs PostgreSQL: 트레이드오프 분석
저자는 WebRTC 대신 PostgreSQL을 선택한 이유로 논리적 복제(Logical Replication)의 이해와 데이터베이스의 일반적인 실시간 백엔드(General-purpose Real-time Backend)로서의 가능성을 탐구하기 위함이라고 밝혔다. WebRTC는 UDP를 사용하여 낮은 지연 시간(Low Latency)을 추구하지만, 데이터 손실이 발생할 수 있다. 반면, PostgreSQL은 데이터 지속성(Data Durability)을 보장하지만, 지연 시간(Latency)이 증가할 수 있다. CUSeeMe와 같은 과거 기술과의 비교를 통해 데이터베이스를 활용한 화상 회의의 새로운 가능성을 제시한다.
커뮤니티의 반응과 추가적인 개선 방향
커뮤니티에서는 MPEG 스트림(MPEG Stream)과 같은 프레임 간 차이(Frame Difference)를 전송하는 방식의 최적화를 제안했다. 또한, Kafka를 활용한 CDC(Change Data Capture) 및 Time Travel 구현에 대한 아이디어가 제시되었다. WebRTC의 사용을 권장하는 의견과 함께, 데이터베이스를 활용한 화상 회의 구현의 기술적 도전(Technical Challenge)과 성능(Performance)에 대한 논의가 이루어졌다. 데이터 미저장 정책(Zero-Retention Policy)을 통해 개인 정보 보호를 강화할 수 있다.