Coti Lab
Jitsi Meet 셀프호스팅 화상회의 서버
셀프호스팅

Jitsi Meet으로 셀프호스팅 화상회의 서버 만들기

Coti
4분

Jitsi Meet은 2003년 코넬대 연구 프로젝트에서 출발해 2018년 8x8에 인수된 이후에도 계속 오픈소스로 공개되고 있는 WebRTC 화상회의 프로젝트로, meet.jit.si라는 공개 인스턴스만 해도 매달 수백만 건의 회의가 열립니다. Zoom이나 구글 미트처럼 회의마다 계정 가입과 앱 설치를 요구하지 않고 링크 하나로 브라우저에서 바로 접속되는 구조가 특징인데, 이 코드를 그대로 가져와 자기 서버에 설치하면 회의 데이터가 외부 업체 서버를 거치지 않는 완전한 개인 화상회의 인프라를 가질 수 있어요. 그렇다면 Jitsi Meet으로 셀프호스팅 화상회의 서버를 어떻게 만들 수 있을까요?

Jitsi Meet은 어떤 프로젝트인가

Jitsi Meet은 WebRTC 표준을 기반으로 동작하는 오픈소스 화상회의 플랫폼으로, 참가자는 별도 프로그램 설치 없이 웹 브라우저에서 링크를 클릭하는 것만으로 회의에 참여할 수 있어요. 내부적으로는 시그널링과 방 관리를 담당하는 Prosody(XMPP 서버), 영상 스트림을 중계하는 JVB(Jitsi Videobridge), 웹 프론트엔드를 제공하는 web 컴포넌트가 조합되어 동작하는데, 이 구조 덕분에 참가자 수가 늘어나도 미디어 서버가 부담을 나눠 처리할 수 있어요.

Zoom·구글 미트와 다른 지점

여기서 끝이 아니에요. Jitsi Meet을 직접 운영하는 가장 큰 이유는 회의 데이터가 어디에도 남지 않는다는 확신을 가질 수 있다는 점이에요. Zoom이나 구글 미트는 편리하지만 결국 회의 메타데이터와 영상 트래픽이 그 회사의 서버를 거쳐 가는데, 의료·법률 상담이나 사내 기밀 회의처럼 민감한 대화를 다루는 조직이라면 이 지점이 부담이 될 수 있어요. Jitsi Meet은 자체 서버에서 모든 트래픽을 처리하기 때문에 이런 걱정 없이 화상회의를 운영할 수 있고, 참가자 초대 방식도 회의 이름 하나로 만든 링크를 공유하는 게 전부라 진입 장벽이 낮아요.

Docker Compose로 서버 구성하기

Jitsi Meet 공식 저장소는 docker-compose 기반의 배포 구성을 제공해서, 환경 변수 파일 하나만 채우면 여러 컴포넌트를 한 번에 띄울 수 있어요. 아래는 핵심 서비스만 간추린 예시예요.

services:
  web:
    image: jitsi/web:stable
    ports:
      - "8443:443"
    environment:
      - ENABLE_LETSENCRYPT=1
      - LETSENCRYPT_DOMAIN=meet.example.com
      - LETSENCRYPT_EMAIL=admin@example.com
      - XMPP_DOMAIN=meet.jitsi
    depends_on:
      - prosody
      - jicofo
      - jvb
  prosody:
    image: jitsi/prosody:stable
    environment:
      - XMPP_DOMAIN=meet.jitsi
  jicofo:
    image: jitsi/jicofo:stable
    environment:
      - XMPP_DOMAIN=meet.jitsi
    depends_on:
      - prosody
  jvb:
    image: jitsi/jvb:stable
    ports:
      - "10000:10000/udp"
    environment:
      - XMPP_DOMAIN=meet.jitsi
      - JVB_ADVERTISE_IPS=<서버_공인_IP>
    depends_on:
      - prosody

핵심은 JVB 컨테이너의 10000/udp 포트예요. 웹 화면은 TCP로 프록시를 태울 수 있지만, 실제 영상·음성 스트림은 UDP로 오가기 때문에 이 포트가 막혀 있으면 화면은 뜨는데 영상은 아예 연결되지 않는 상황이 벌어져요.

TURN·STUN 서버가 필요한 이유

같은 네트워크가 아닌 참가자끼리는 P2P로 직접 연결되지 않는 경우가 흔한데, 특히 회사나 대학처럼 방화벽이 엄격한 네트워크에서는 UDP 트래픽 자체가 막혀 있을 수 있습니다. 이럴 때 STUN 서버는 참가자의 공인 IP를 알아내는 역할을, TURN 서버는 직접 연결이 불가능할 때 트래픽을 중계하는 역할을 해요. Jitsi Meet은 기본적으로 공개 STUN 서버를 사용하도록 설정되어 있지만, 외부 참가자가 많은 환경이라면 coturn 같은 TURN 서버를 직접 붙여서 연결 성공률을 높이는 게 안정적인 운영의 핵심이에요.

Tailscale로 사설망 회의로 좁히기

회사 내부 회의처럼 애초에 특정 인원만 접속하면 되는 상황이라면, Jitsi Meet 서버를 공인 인터넷에 노출하지 않고 Tailscale로 구성한 사설 네트워크 안에서만 접근하도록 좁히는 방법도 있어요. 이렇게 하면 회의 링크가 외부로 유출되더라도 Tailscale 네트워크에 속한 기기가 아니면 애초에 접속 자체가 불가능해서, 방화벽 규칙을 복잡하게 관리하지 않고도 접근 범위를 확실하게 제한할 수 있어요.

결론

Jitsi Meet은 계정 가입 절차 없이 링크 하나로 접속되는 편의성과, 회의 데이터가 외부로 나가지 않는 프라이버시를 동시에 챙길 수 있는 몇 안 되는 화상회의 솔루션이에요. Docker Compose로 기본 골격을 세우고 TURN 서버와 UDP 포트 개방까지 신경 쓰면, Zoom을 대체할 만한 안정적인 화상회의 인프라를 스스로 운영할 수 있어요. 원격 접근 범위를 더 좁히고 싶다면 Tailscale과 조합하는 방식도 함께 고려해볼 만해요.

자주 묻는 질문

Q1. 참가자도 계정을 만들어야 하나요?

아니요, Jitsi Meet은 참가자가 링크만 클릭하면 브라우저에서 바로 접속할 수 있고 회의 방을 만드는 호스트조차 계정 가입이 필수는 아니에요.

Q2. 화질이나 참가 인원에 제한이 있나요?

이론적으로는 서버 자원이 허용하는 한 인원 제한이 없지만, 실제로는 CPU와 대역폭 때문에 참가자가 많아질수록 화질을 자동으로 낮추는 방식으로 안정성을 유지해요.

Q3. Zoom이나 구글 미트보다 보안이 더 안전한가요?

네, 자체 서버에 데이터가 남기 때문에 외부 업체의 데이터 정책에 의존하지 않아도 되고, 종단 간 암호화 옵션까지 켜면 서버 운영자조차 영상 내용을 볼 수 없는 구조로 운영할 수 있어요.

Q4. 모바일에서도 쓸 수 있나요?

네, iOS와 안드로이드용 공식 Jitsi Meet 앱이 있고, 앱 설치 없이 모바일 브라우저로 링크에 바로 접속하는 것도 가능해요.

Q5. 서버 자원은 얼마나 필요한가요?

소규모 팀 기준으로는 vCPU 2개, 메모리 4GB 정도의 서버로도 몇 명 규모의 화상회의를 무리 없이 돌릴 수 있고, 인원이 늘어날수록 CPU 자원이 비례해서 더 필요해져요.

Q6. 녹화 기능도 지원하나요?

네, Jibri라는 별도 컴포넌트를 추가로 설치하면 회의를 녹화하거나 유튜브 같은 플랫폼으로 실시간 스트리밍하는 것도 가능해요.

C
Coti 백엔드 개발자
프로필

댓글

첫 번째 댓글을 남겨보세요!