가볍게 여는 사내 화상회의
WebRTC·WebSocket·STUN으로 서너 명이 링크로 참여하는 작은 화상회의를 만들고, P2P 구조의 인원·네트워크 한계와 개인정보 범위를 설명합니다.

목차
급하게 고객과 화면을 보며 이야기해야 할 때가 있습니다. 기존 회의 도구를 써도 되지만, 필요한 기능만 있는 작은 공간이 하나쯤 있으면 좋겠다는 생각이 들었습니다. 그래서 별도 설치 없이 링크로 들어오는 화상회의 도구를 만들었습니다.
필요한 것만 남기기
회의에 들어가기 전 카메라와 마이크를 확인하고, 초대받은 사람은 대기실을 거쳐 입장합니다. 회의 중에는 채팅과 화면 공유를 쓸 수 있고, 인원이나 대화 방식에 따라 화면 배치도 바꿀 수 있습니다.
페이지를 열기만 해서는 카메라나 마이크 권한을 요청하지 않습니다. 미리 확인하고 싶으면 장치 테스트 시작을 누르고, 테스트를 건너뛰었다면 입장을 누를 때 처음 권한을 요청합니다.
기능을 더 붙이는 것보다 회의를 여는 과정이 짧아야 한다는 쪽에 더 신경을 썼습니다. 방을 만들고 링크를 건네는 데 설명이 필요 없을 정도가 목표였습니다.
회의를 여는 순서
- 호스트가 이름을 입력하고, 필요하면 장치 테스트 시작과 스피커 테스트로 카메라·마이크·스피커 상태를 확인합니다.
- 회의방에 들어가 제목을 정한 뒤 초대 링크를 복사해 전달합니다.
- 초대받은 사람은 별도 계정 없이 링크를 열고 표시 이름만 입력합니다.
- 호스트가 대기실에서 입장을 승인하면 바로 영상과 음성이 연결됩니다.
회의가 시작된 뒤에는 갤러리·발표자·자유 배치 화면을 상황에 맞게 고를 수 있습니다. 호스트가 현재 배치를 모든 참가자에게 적용하거나, 특정 참가자를 중심 화면으로 지정하는 것도 가능합니다.
작은 회의에 필요한 운영 기능
- 대기실과 초대 링크 — 초대받지 않은 사람이 바로 들어오지 않도록 호스트가 참가자를 확인하고 승인합니다.
- 화면 공유와 채팅 — 문서나 제품 화면을 함께 보면서 필요한 주소와 내용을 채팅으로 남길 수 있습니다.
- 저대역폭 모드 — 연결이 느릴 때 영상 크기와 프레임을 낮춰 대화를 이어갑니다.
- 자막과 녹화 — 지원하는 브라우저에서는 음성 자막을 켜고, 내 카메라나 공유 화면을 WebM 파일로 저장할 수 있습니다.
- 후속 조치 메모 — 고객 요청, 약속한 일정과 담당자를 회의방별로 기록합니다.
브라우저끼리 연결하기
회의 참가와 대기실·채팅 같은 상태는 WebSocket으로 전달하고, 영상과 음성은 WebRTC로 참가자끼리 연결합니다. 현재 공개 서비스의 ICE 설정은 STUN만 제공하며 TURN 중계 서버는 구성하지 않았습니다. 그래서 일반 가정망에서는 연결되더라도, 직접 연결이 막힌 사내망·대칭 NAT·엄격한 방화벽 환경에서는 영상과 음성이 연결되지 않을 수 있습니다.
제한된 네트워크까지 안정적으로 지원하려면 짧게 만료되는 자격증명을 발급하는 TURN 서버와 TCP·TLS 중계 경로를 별도로 운영해야 합니다. 이 글은 그 구성을 완료한 프로덕션 회의 시스템이라고 주장하지 않습니다.
왜 소규모 전용인가
"참가자가 늘면 부담도 는다"는 말은 사실 꽤 가파른 이야기입니다. 이 구조에서는 서버가 영상을 중계하지 않고 참가자들이 서로 직접 연결합니다. 그래서 각자가 자기 영상을 나머지 전원에게 따로따로 올려보내야 합니다.
- 3명 회의 → 각자 2개씩 올려보냄
- 5명 회의 → 각자 4개씩
- 10명 회의 → 각자 9개씩
영상 하나에 1Mbps씩 잡으면 10명 회의에서는 각 참가자가 9Mbps를 올려야 합니다. 일반적인 가정·사무실 회선은 내려받기보다 올리기가 훨씬 좁기 때문에, 여기서 먼저 막힙니다. 참가자 수가 늘 때 화질이 떨어지거나 소리가 끊기는 이유입니다.
많은 인원을 지원하는 서비스들은 중간에 영상을 받아 다시 뿌려주는 서버를 둡니다. 그러면 각자는 자기 영상 하나만 올리면 됩니다. 대신 서버 비용과 운영 부담이 붙습니다.
이 도구는 그 서버를 두지 않는 쪽을 골랐습니다. 서너 명이 급하게 화면을 함께 보는 상황에 맞춘 선택이고, 그래서 웨비나나 전사 회의에는 맞지 않습니다. 기능을 덜 넣은 게 아니라 감당할 범위를 좁게 잡은 것입니다.
연결이 안 될 때 확인할 순서
영상이 보이지 않는다고 카메라 고장부터 의심할 필요는 없습니다. 연결은 다음 경계를 차례로 통과합니다.
- 브라우저에서 카메라·마이크 권한이 허용됐는지 확인합니다.
- 같은 기기에서 미리보기가 나오면 장치 읽기까지는 성공한 것입니다.
- 참가자 목록과 채팅이 되면 WebSocket 시그널링은 연결된 것입니다.
- 영상만 실패하면 ICE 후보 교환과 STUN 연결 기록을 확인합니다.
- 회사망에서만 실패한다면 현재 서비스에는 TURN이 없다는 점을 확인하고, TURN이 구성된 별도 환경이라면 TCP·TLS 중계 경로를 점검합니다.
이 순서로 보면 장치 권한, 회의 상태 전달, 실제 미디어 경로를 섞지 않고 확인할 수 있습니다. 저대역폭 모드는 이미 성립한 연결의 부담을 낮추는 기능이지, 막힌 방화벽을 통과시키는 기능은 아닙니다.
사용 범위에 대한 안내
이 도구는 사내와 고객 상담용으로 만든 개인 제작 도구입니다. 통화 내용은 참가자 브라우저 사이에서 암호화되어 오가지만, 규제 대상 정보나 법적 보존이 필요한 회의를 위해 설계·검증한 시스템은 아닙니다. 그런 용도에는 해당 요건을 명시적으로 지원하는 상용 서비스를 쓰는 것이 맞습니다.
초대 링크와 대기실은 편의를 위한 입장 절차이지 계정 기반 신원 확인이 아닙니다. 링크를 받은 사람은 입장을 요청할 수 있으므로 공개 채널에 링크를 올리지 말고, 호스트는 표시 이름만 믿지 말고 참가자를 별도로 확인해야 합니다. 브라우저가 연결 경로를 찾는 동안 현재 설정된 STUN 서버 운영자가 참가자의 IP 주소와 연결 메타데이터를 처리할 수 있습니다. TURN을 별도로 설정한 사용자는 해당 TURN 운영자의 처리 방침도 확인해야 합니다. 자세한 범위는 사이트의 개인정보처리방침에 적었습니다.

