연동 가이드

채팅 연동은 왜 플랫폼마다 다를까

트위치는 채널명만 넣으면 끝나는데 치지직은 프록시가 필요하고 유튜브는 API 키를 받아야 합니다. 귀찮게 느껴지지만 각각 이유가 분명합니다. 원리를 알면 연동이 실패했을 때 어디를 봐야 하는지 바로 알 수 있습니다.

목차

  1. 한눈에 비교
  2. 트위치 — 가장 단순한 이유
  3. 유튜브 — 할당량이라는 함정
  4. 치지직 — CORS라는 벽
  5. 중계 서버가 해결하는 것
  6. 연동 실패 원인별 해결

01 한눈에 비교

세 플랫폼은 채팅을 외부에 열어 주는 방식이 서로 다릅니다. 그래서 준비물도, 걸리는 제약도 다릅니다.

항목트위치유튜브치지직
준비물채널명API 키 또는 로그인채널 주소
로그인 필요불필요권장불필요
사용량 제한없음일일 할당량없음
브라우저 직접 연결가능가능막힘(CORS)
연동 난이도쉬움보통보통

처음이라면 트위치로 시작하는 걸 권합니다. 준비물이 채널명 하나뿐이라 연동이 되는지 몇 초 만에 확인할 수 있고, 문제가 생겨도 변수가 적습니다.

02 트위치 — 가장 단순한 이유

트위치 채팅은 사실 IRC라는 오래된 채팅 프로토콜 위에서 돌아갑니다. 1988년에 만들어진 그 IRC가 맞습니다. 트위치는 이 IRC 서버를 웹소켓으로도 열어 두고, 익명 접속을 허용합니다.

익명 접속이 허용된다는 게 핵심입니다. 계정 없이 "이 채널 채팅방에 들어가서 듣기만 하겠다"가 가능합니다. 그래서 오버레이는 여러분의 로그인 정보 없이도 채널명만으로 채팅을 읽을 수 있습니다.

  • API 키를 발급받을 필요가 없습니다
  • 일일 사용량 제한이 없어 장시간 방송에도 끊기지 않습니다
  • 채널명만 맞으면 즉시 연결됩니다
채널명은 URL의 마지막 부분입니다. twitch.tv/mychannel이라면 mychannel이 채널명입니다. 화면에 보이는 표시 이름(한글 닉네임 등)이 아니라 주소에 들어가는 영문 아이디를 넣어야 합니다. 이 둘이 다른 스트리머가 많아서 자주 헷갈리는 지점입니다.

구독·후원(비트) 알림도 같은 IRC 연결로 들어옵니다. 트위치가 이런 이벤트를 채팅 메시지와 같은 통로로 흘려보내기 때문입니다.

03 유튜브 — 할당량이라는 함정

유튜브는 IRC 같은 실시간 채팅 통로를 외부에 열어 두지 않습니다. 대신 YouTube Data API로 "지금까지의 새 메시지를 주세요"라고 반복해서 물어보는 방식만 제공합니다.

할당량이 왜 문제인가

이 API는 무료지만 하루에 쓸 수 있는 양이 정해져 있습니다. 기본 할당량은 하루 10,000 유닛이고, 채팅을 한 번 조회할 때마다 유닛이 깎입니다. 실시간처럼 보이려면 몇 초에 한 번씩 계속 물어봐야 하므로, 방송이 길어질수록 할당량이 빠르게 소진됩니다.

할당량이 바닥나면 그날은 더 이상 채팅을 못 읽습니다. 다음 날 태평양 표준시 자정에 초기화될 때까지 기다려야 합니다. 장시간 방송하는 스트리머가 "중간에 갑자기 채팅이 안 뜬다"고 하는 경우 대부분 이것입니다.

API 키는 비밀입니다. 오버레이 주소에 API 키가 포함되는 방식이라면, 그 주소를 남에게 보여 주면 안 됩니다. 방송 화면에 주소가 노출되지 않게 주의하고, 구글 클라우드 콘솔에서 키에 HTTP 리퍼러 제한을 걸어 두세요. 키가 유출되면 남이 여러분의 할당량을 태울 수 있습니다.

로그인 방식이 더 편한 이유

API 키를 직접 발급받는 대신 구글 계정으로 로그인하는 방식을 지원하는 도구라면 그쪽이 낫습니다. 키를 발급·관리할 필요가 없고, 진행 중인 라이브 방송을 자동으로 찾아 연결해 주기 때문입니다. 방송을 켤 때마다 영상 주소를 새로 넣지 않아도 됩니다.

다만 로그인 방식은 처음 한 번 권한을 승인해야 하고, 구글 계정 보안 설정에서 권한을 해제하면 다시 로그인해야 합니다.

04 치지직 — CORS라는 벽

치지직은 채팅 API가 있지만, 브라우저에서 직접 부를 수 없습니다. 여기서 등장하는 게 CORS입니다.

CORS가 뭔가

CORS(교차 출처 리소스 공유)는 브라우저의 보안 규칙입니다. A 사이트에서 열린 페이지가 B 사이트의 데이터를 마음대로 읽지 못하게 막습니다. 이게 없으면 악성 사이트가 여러분이 로그인해 둔 다른 사이트의 정보를 몰래 읽어 갈 수 있습니다.

서버는 "누가 내 데이터를 읽어도 되는지"를 응답 헤더로 알려 줍니다. 트위치의 채팅 웹소켓은 누구나 읽어도 된다고 열어 두었고, 치지직 API는 그렇지 않습니다. 그래서 blute.app에서 열린 오버레이가 api.chzzk.naver.com을 직접 부르면 브라우저가 응답을 차단합니다.

버그가 아닙니다. 치지직이 막은 것도, 오버레이가 잘못 만든 것도 아닙니다. 브라우저가 원래 그렇게 동작하도록 설계되어 있습니다. 그래서 우회가 아니라 다른 경로가 필요합니다.

해결 방법 두 가지

첫째, CORS 프록시를 거치는 방법입니다. 중간에 있는 서버가 대신 치지직에 요청하고, 그 결과를 "누구나 읽어도 됨" 표시를 붙여 돌려줍니다. 브라우저 입장에서는 프록시와 통신하는 것이므로 차단되지 않습니다. 다만 공개 프록시는 느리거나 갑자기 죽을 수 있어 안정성이 떨어집니다.

둘째, 서비스의 중계 서버를 쓰는 방법입니다. 브라우저가 아니라 서버가 치지직에 접속하므로 CORS 자체가 적용되지 않습니다. 브라우저 보안 규칙은 브라우저에만 적용되기 때문입니다. 사용자는 채널 주소만 넣으면 되고 프록시 설정이 필요 없습니다.

05 중계 서버가 해결하는 것

중계 방식은 CORS 말고도 여러 문제를 한꺼번에 해결합니다. 요즘 오버레이 서비스들이 이 구조를 쓰는 이유입니다.

  • CORS 회피 — 서버가 접속하므로 브라우저 규칙이 적용되지 않습니다
  • 비밀값 보호 — API 키나 토큰이 브라우저 주소에 노출되지 않습니다
  • 연결 안정성 — OBS를 껐다 켜도 서버 쪽 연결은 유지됩니다
  • 다중 송출 통합 — 여러 플랫폼 채팅을 서버에서 합쳐 하나의 오버레이 주소로 보냅니다

특히 마지막이 큽니다. 트위치와 치지직에 동시 송출한다면, 각 플랫폼마다 오버레이를 따로 얹는 대신 하나의 주소가 양쪽 채팅을 모두 받습니다. OBS 장면이 단순해지고 CPU도 덜 씁니다.

트레이드오프도 있습니다. 중계 서버가 죽으면 채팅이 멈춥니다. 브라우저 직접 연결은 서비스가 사라져도 플랫폼만 살아 있으면 동작합니다. 대신 직접 연결은 위의 제약들을 사용자가 직접 감당해야 합니다.

06 연동 실패 원인별 해결

"연결됨"인데 채팅이 안 뜬다

연결 자체는 성공했는데 메시지가 안 들어오는 경우입니다. 대부분 다른 채널에 연결된 것입니다. 표시 이름과 채널 아이디를 헷갈렸거나, 유튜브라면 지난 방송의 영상 주소를 넣었을 수 있습니다. 본인 채팅창에 직접 한 줄 쳐 보면 바로 확인됩니다.

유튜브에서 방송을 못 찾는다

라이브가 실제로 시작된 뒤에 연결해야 합니다. "대기 중" 상태의 예약 방송은 채팅방이 아직 열리지 않아 찾지 못할 수 있습니다. 방송 시작 후 다시 시도하세요.

치지직에서 계속 실패한다

프록시 방식이라면 프록시 주소가 살아 있는지 확인하세요. 공개 프록시는 예고 없이 중단됩니다. 채널 아이디는 주소의 chzzk.naver.com/ 뒤에 오는 32자리 문자열입니다.

중간에 끊겼다 다시 붙는다

플랫폼 쪽에서 연결을 끊는 것은 정상입니다. 잘 만든 오버레이는 자동으로 재연결합니다. 다만 OBS 소스에 "보이지 않을 때 소스 종료"가 켜져 있으면 장면을 전환할 때마다 연결이 끊기고 다시 붙습니다. 채팅 오버레이라면 이 옵션을 끄세요.

다른 기기에서 이미 쓰는 중이라고 나온다

같은 채널을 두 곳에서 동시에 연결하면 충돌합니다. PC와 노트북 양쪽에서 관리 화면을 열어 둔 경우가 흔합니다. 쓰지 않는 쪽에서 연결을 해제하세요.