Claude Code 활용 Chzzk 방송 알림 봇 1시간 만에 완성
방송 시작 알림을 받으려고 화면을 새로고침하던 수고를 끝냅니다
좋아하는 스트리머가 언제 방송을 켤지 몰라 플랫폼 화면을 수시로 새로고침해 본 적이 있을 것입니다. 기존 플랫폼에서 제공하는 기본 알림은 서버 부하 등으로 인해 전송이 늦어지거나 누락되는 상황이 종종 발생합니다.
이러한 불편을 덜고자 네이버 치지직 플랫폼의 방송 상태를 실시간으로 추적하는 자동화 알림 시스템을 구상하게 되었습니다. 이번에 활용할 도구는 명령줄 인터페이스(CLI)에서 작동하는 터미널 AI 도구인 Claude Code 시스템입니다.
코딩 관련 지식이 많지 않아도 인공지능이 프로그램 설계부터 구현까지 전체 과정을 보조하므로 부담 없이 시작할 수 있습니다. 사용자는 터미널 환경에서 몇 가지 대화를 나누고 필요한 매개변수만 입력하면 완성도 높은 시스템을 갖추게 됩니다.
서버를 직접 임대하거나 복잡한 클라우드 설정을 거치지 않고도 개인 컴퓨터에서 작동하는 형태로 먼저 개발을 진행합니다. 모바일 기기로 메시지를 바로 받아볼 수 있어 실시간 반응 속도가 매우 뛰어납니다.
그럼 지금부터 터미널 AI 비서와 함께 가볍고 빠른 알림용 프로그램을 구축하는 단계를 순서대로 살펴보겠습니다.

네이버 치지직의 공개 API 정보와 외부 메신저 연동
해당 라이브 플랫폼은 외부 서비스와의 자유로운 연동을 돕기 위해 별도의 인증 키가 필요 없는 공개 API 경로를 제공합니다. 방송인의 고유 채널 아이디 정보를 주소 뒷부분에 붙여 호출하면 실시간 송출 현황을 즉시 불러올 수 있습니다.
누구나 제한 없이 접근할 수 있어서 간결한 연동 구조를 만드는데 최적의 환경을 자랑합니다. 이렇게 조회한 실시간 상태 정보는 전 세계적으로 널리 쓰이는 메신저의 API 기능과 연결하여 사용자에게 알림으로 전달됩니다.
텔레그램 플랫폼은 개발자를 위해 매우 직관적인 메시지 전송 규격을 개방해 두고 있습니다. 대화방을 만들고 봇 생성기와의 대화 몇 마디만으로도 고유 인증 토큰을 손쉽게 발급받을 수 있습니다.
타 메신저 서비스와 비교했을 때 외부 프로그램에서의 접근 방식이 단순하여 소규모 개인용 자동화 시스템에 자주 채택됩니다. 이렇게 확보한 메신저 토큰과 대상 채널의 아이디를 연동 파일에 설정하면 발송 준비가 완료됩니다.
이제 AI 도구를 켜고 구체적인 프로젝트 뼈대를 구성하는 작업으로 넘어가겠습니다.

AI 도구로 프로젝트를 시작하고 빠르게 뼈대 세우기
가장 먼저 수행할 작업은 알림 봇의 소스 코드가 저장될 전용 폴더를 만들고 터미널 인터페이스를 활성화하는 일입니다. 터미널 창을 열고 아래 명령어를 순서대로 실행하여 빈 디렉터리를 만들고 명령줄 비서 프로그램을 구동합니다.
수동으로 여러 파일을 만들고 파일 형식을 고민하던 번거로운 과정을 크게 단축할 수 있습니다.
로컬 PC 터미널 창에 다음 명령어를 복사하여 순차적으로 실행해 줍니다. 비어 있는 공간을 만들고 도구를 가동하는 간단한 절차입니다.
cd stream-notifier
claude
인공지능 대화 창이 활성화되면 현재 디렉터리 내부에 치지직 송출 상태를 감시하는 시스템을 만들어 달라고 요구합니다. 프롬프트를 접한 AI 비서는 요청을 해석하고 알림 감지에 필요한 파이썬 소스 코드 양식을 설계하여 제안합니다.
사용자는 화면에 표시되는 파일 생성 내역을 훑어보고 실행 승인 버튼만 누르면 됩니다.
파이썬 표준 라이브러리만으로 만든 초경량 조회 코드
프로그램을 만들 때 외부 라이브러리를 많이 사용하면 설치 환경에 따라 라이브러리 버전 충돌 오류가 일어날 수 있습니다. 컴퓨터에 기본적으로 내장된 파이썬 기본 패키지만 활용해 개발하면 이러한 종속성 문제를 원천적으로 방지합니다.
별도의 가상 환경을 만들거나 패키지 관리 도구를 설치할 필요가 없어서 관리가 무척 편해집니다.
대화형 비서인 Claude Code에게 추가 패키지 설치 없이 내장 모듈만으로 구성된 연동 스크립트를 작성해 달라고 요청합니다. 소스 코드의 맨 위쪽에는 스트리머 아이디와 메시지 전송용 토큰 정보를 손쉽게 변경할 수 있도록 설정 변수로 모아둡니다.
import urllib.request
import json
import time
CHANNEL_ID = "YOUR_CHANNEL_ID"
TELEGRAM_BOT_TOKEN = "YOUR_BOT_TOKEN"
TELEGRAM_CHAT_ID = "YOUR_CHAT_ID"
STATE_FILE = "chzzk_state.json"
def get_live_status(channel_id):
url = f"https://api.chzzk.naver.com/service/v1/channels/{channel_id}/live-status"
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
try:
with urllib.request.urlopen(req) as response:
data = json.loads(response.read().decode('utf-8'))
if data.get("code") == 200:
return data.get("content", {})
except Exception as e:
print(f"조회 실패: {e}")
return None
def send_telegram_message(token, chat_id, text):
url = f"https://api.telegram.org/bot{token}/sendMessage"
payload = json.dumps({"chat_id": chat_id, "text": text}).encode('utf-8')
req = urllib.request.Request(url, data=payload, headers={'Content-Type': 'application/json'})
try:
with urllib.request.urlopen(req) as response:
pass
except Exception as e:
print(f"알림 발송 실패: {e}")
이 코드는 네트워크 통신 장애가 일어 나거나 서버 점검 시간대에 접어들어도 모니터링이 멈추지 않도록 설계되었습니다. 에러 발생 시 프로그램이 튕겨 나가지 않도록 예외 처리 구문이 빈틈없이 들어가 있어서 안정적인 동작을 보여줍니다.
AI 엔진이 작성해 준 스크립트가 현 디렉터리에 정상적으로 저장되었는지 확인해 줍니다.
중복 발송을 막는 상태 기록과 로컬 캐싱 구현
단순히 일정 간격마다 방송 여부만 확인해 메신저 알림을 보내게 설계하면 방송이 켜져 있는 내내 알림 메시지가 반복 발송됩니다. 스마트폰에 수많은 중복 메시지가 쌓이지 않게 하려면 송출 상태가 꺼짐에서 켜짐으로 전환되는 바로 그 시점만 가려내야 합니다.
상태를 로컬 저장소에 파일 형태로 보관하는 가벼운 캐시 장치를 도입하면 이 문제를 해결할 수 있습니다.
매번 정보를 수집할 때마다 로컬 캐시 파일에 적힌 직전 상태와 현재 라이브 여부를 대조하는 구조를 갖춥니다. 방송이 켜진 직후 한 번만 조건문이 참이 되도록 만들어 메시지 전송 로직이 최초 한 번만 호출되게 통제합니다.
def main():
try:
with open(STATE_FILE, "r") as f:
state = json.load(f)
except FileNotFoundError:
state = {"is_live": False}
print("실시간 모니터링 가동 시작...")
while True:
status = get_live_status(CHANNEL_ID)
if status:
is_live = status.get("status") == "OPEN"
live_title = status.get("liveTitle", "제목 없음")
if is_live and not state.get("is_live"):
message = f"[알림] 스트리머 방송 시작!\n\n제목: {live_title}\n주소: https://chzzk.naver.com/live/{CHANNEL_ID}"
send_telegram_message(TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID, message)
print("신규 방송 감지 - 알림 전송 완료.")
state["is_live"] = is_live
with open(STATE_FILE, "w") as f:
json.dump(state, f)
time.sleep(60) # 60초 간격 조회
if __name__ == "__main__":
main()
캐시 기반 필터를 거치면서 서버를 며칠 내내 켜놓아도 상태 변동이 일어나지 않는 한 쓸데없는 알림이 전송되지 않습니다. 생성되는 json 텍스트 파일의 용량은 매우 미미하므로 하드 디스크 여유 공간이나 램 사용량에 지장을 주지 않습니다.
이 조건 제어 방식을 끝으로 뼈대가 되는 모니터링 코드가 짜임새 있게 완비됩니다.
장치 구동의 현실적인 부분과 주기 조절 팁
이 모니터링 스크립트는 명령을 실행한 개인용 컴퓨터가 인터넷망에 계속 연결되어 있어야 작동하는 단순 구조를 지닙니다. 따라서 노트북 덮개를 닫거나 절전 모드로 진입하면 추적 흐름도 일시 중단된다는 물리적인 한계가 존재합니다.
24시간 내내 모니터링을 끊임없이 수행하고 싶다면 외부의 소형 가상 서버 환경으로 스크립트를 옮겨 심는 것이 바람직합니다.
플랫폼 서버에 질의하는 대기 주기를 너무 짧게 가져가면 과도한 트래픽 유발로 인해 해당 서버에서 접근을 차단할 수 있습니다. 10초 미만의 지나친 연속 조회는 웹 방화벽 보안 규칙에 걸려 실제 생방송 온에어 타이밍에 알림이 먹통이 되는 문제를 낳습니다.
플랫폼 가이드와 안정성을 고려하여 요청 주기 사이에는 최소 60초 이상의 대기 시간을 지정하는 방식을 제안합니다.
단일 명령 구동으로 방송 모니터링 체계를 시작하세요
이 알림 방식은 지인들과 모여 있는 소규모 커뮤니티 대화방에서도 요긴하게 쓰일 수 있습니다. 알림 전송 대상 대화방에 다른 멤버들을 초대해 두면 모두가 거의 동시에 생방송 온에어 정보를 전달받는 공간이 완성됩니다.
다소 무겁고 관리하기 까다로운 별도 모듈 대신 가볍고 튼튼한 파이썬 단일 스크립트로 구성해 복잡도를 대폭 낮췄습니다.
프로그램 코드 작성이 모두 마무리되면 로컬 환경의 터미널에 명령어를 입력하여 감시 활동을 시작합니다. 실행을 시작한 프로그램은 터미널 안에서 묵묵히 데이터를 받아오며 상태 전송과 로컬 캐시 갱신 작업을 교대로 진행합니다.
프로젝트를 실행하고 관리하는 대부분의 디테일은 CLI 기반의 터미널 동반자 프로그램과 협업하며 간편하게 수정할 수 있습니다. 요구하는 사항들을 자연어 대화로 풀어서 건네기만 해도 그에 맞는 수정안을 바로 제공받는 편리함을 누려보시기 바랍니다.
매번 사이트를 일일이 들어가 확인하던 무의미한 새로고침을 끝내고 터미널 AI가 조율하는 안정적인 모니터링 시스템을 구성해 보길 권합니다.
이런 글도 있어요
관련 검색어
- 🔍 Claude Code 사용법
- 🔍 Claude Code 비교
- 🔍 Chzzk 사용법
- 🔍 Chzzk 비교
- 🔍 텔레그램 봇 사용법
- 🔍 텔레그램 봇 비교