개발

토로너스 음성 토론 구현기 — 실시간 발언권 관리의 도전

2021-03-15·2분 읽기

왜 음성인가

토론에서 음성의 역할은 텍스트와 다릅니다.

텍스트로는 논리를 정확하게 전달할 수 있지만, 감정과 확신의 깊이를 담기 어렵습니다. 목소리에는 설득력이 있습니다. 같은 내용이라도 누가 어떤 톤으로 말하느냐에 따라 청중의 반응이 달라집니다.

실제 토론 대회를 생각해보면, 발표자의 목소리와 태도가 점수에 크게 영향을 줍니다. 토로너스에서도 음성 토론이 더 생동감 있는 경험을 만들 거라고 믿었습니다.

발언권 관리

음성 토론에서 가장 중요한 것은 발언권 관리입니다.

실제 토론에서는 사회자가 발언권을 조율합니다. 앱에서는 이것을 자동화해야 했습니다.

기본 규칙은 단순하게 잡았습니다. 토론 참여자는 발언 요청을 할 수 있고, 현재 발언자가 끝내면 다음 순번이 자동으로 마이크를 갖게 됩니다. 방관자(청중)는 듣기만 할 수 있습니다.

인앱 구매 아이템 "마이크"는 발언권 우선순위를 높여주는 역할을 합니다. 게임에서 아이템이 캐릭터를 강화하듯, 마이크 아이템이 토론에서 발언 기회를 늘려주는 개념입니다.

기술 스택: WebRTC

실시간 음성 전송에는 WebRTC를 사용했습니다.

WebRTC는 브라우저와 앱에서 실시간 미디어(오디오/비디오) 통신을 가능하게 하는 표준 프로토콜입니다. 피어 간 직접 연결(P2P)을 기반으로 하여 지연 시간이 낮습니다.

다만 P2P는 참여자 수가 늘어날수록 각자가 처리해야 할 연결 수가 기하급수적으로 늘어납니다. 참여자가 많은 토론에서는 SFU(Selective Forwarding Unit) 서버를 통해 중계하는 방식으로 전환했습니다.

음질과 네트워크 환경

모바일 환경에서 가장 큰 변수는 네트워크입니다.

와이파이 환경에서는 품질이 좋아도, LTE에서 끊기거나 지하철에서 완전히 연결이 끊기는 상황이 생깁니다. 음성 품질을 네트워크 상황에 따라 자동으로 조절하는 어댑티브 비트레이트(adaptive bitrate) 로직을 추가했습니다. 연결이 좋으면 고품질, 나쁘면 저품질로 자동 전환됩니다.

배운 것

음성 기능은 앱에서 가장 구현 난이도가 높은 기능 중 하나입니다.

텍스트 기능은 대부분 비동기로 처리할 수 있지만, 음성은 실시간이라 지연 시간이 곧 사용자 경험입니다. 100ms 이상 지연되면 대화가 어색해지고, 500ms를 넘으면 사용하기 어렵습니다.

이 기능 덕분에 네트워크, 실시간 통신, 미디어 처리에 대해 많이 배웠습니다. 어렵지만 가장 보람 있는 구현이었습니다.