AI로 LCK Discord 알림봇 만들기

AI로 LCK Discord 알림봇 만들기

AI로 LCK Discord 알림봇 만들기

퇴근길 지하철에서 e스포츠 뉴스를 뒤적거리다 보면 LCK 첫 세트가 이미 끝나 있는 경우가 많더라구요. 오늘은 AI 코딩 비서인 Claude Code를 활용해서 내가 지정한 채널로 실시간 알림을 쏴주는 LCK Discord 알림봇 만들기 과정을 시작해볼게요. 지난 글에서 해외 직구와 상품 분석 에이전트를 조립해봤으니, 이번엔 외부 데이터를 긁어와 실시간으로 반응하는 봇 시스템으로 확장해봅시다.

준비물은 Claude Code나 Codex 중 하나만 골라서 준비하시면 됩니다. 두 도구 중 어떤 것을 선택하셔도 무방하지만, 이 포스트에서는 터미널 제어와 파일 편집을 직관적으로 수행하는 Claude Code를 기준으로 안내할게요. 여기에 알림을 전달받을 Discord 서버와 웹훅 URL만 한 줄 복사해두면 바로 코딩에 들어갈 수 있습니다.

1
LCK Discord 알림봇 전송 테스트하기
AI에게 보낸 프롬프트
디스코드 웹훅 URL로 'LCK 경기 알림 봇 작동 테스트'라는 문자열을 전송하는 Node.js 스크립트를 작성해줘. HTTP 라이브러리는 axios를 사용하고 파일명은 index.js로 지정해줘.

이 첫 단계에서는 디스코드로 메시지가 누락 없이 잘 도착하는지 먼저 확인하는 게 좋습니다. 처음부터 크롤링 로직까지 한 번에 섞어버리면 에러가 났을 때 어디서 막혔는지 원인 파악이 어렵거든요. 스크립트 생성이 완료되면 터미널에 `node index.js`를 입력해서 디스코드 채널에 알림이 띵동 하고 뜨는지 확인해봅니다.

2
Playwright로 LCK 경기 일정 파싱하기
AI에게 보낸 프롬프트
index.js 파일에 네이버 e스포츠 일정 페이지에서 오늘 경기 정보를 가져오는 기능을 추가해줘. e스포츠 사이트는 동적으로 렌더링되니까 Playwright를 사용해서 일정 목록이 보일 때까지 대기했다가 파싱하도록 작성해줘.

LCK 공식 일정은 별도의 오픈 API가 없어서 브라우저를 켜고 화면을 직접 긁어와야 하거든요. AI에게 Playwright를 써달라고 구체적으로 지정해야 화면 로딩을 얌전히 기다리는 견고한 스크립트가 완성됩니다. 코드 생성이 끝나면 터미널 창에 오늘 예정된 팀 이름과 경기 시간이 제대로 추출되는지 로그로 체크해보시죠.

3
1분 주기로 시작 체크하고 중복 알림 막기
AI에게 보낸 프롬프트
index.js에 1분마다 오늘의 경기 일정 배열을 돌며 체크하는 감시 루프를 넣어줘. 경기 시작 10분 전이거나 정각에 해당하면 디스코드 웹훅으로 알림을 보내줘. 이미 보낸 알림은 sentMatches 배열에 기록해서 중복 전송하지 않도록 조치해줘.

주기적 감시는 봇의 기본이지만, 1분마다 똑같은 알림을 난사하면 디스코드 채널이 금방 복잡해집니다. AI에게 이미 알림을 쏜 경기를 기억하는 로컬 캐싱 배열을 만들어 달라고 지시하는 한 줄이 핵심이죠. 이 코드가 들어가면 오늘 예정된 경기가 시작될 때 딱 한 번만 디스코드에 알림 카드가 멋지게 뿌려집니다.

4
예외 처리와 백그라운드 무한 대기 세팅
AI에게 보낸 프롬프트
네트워크 장애나 사이트 구조 변경으로 크롤링이 실패해도 봇이 뻗지 않고 계속 돌 수 있게 전체 코드를 try-catch로 보강해줘. 예외가 발생하면 5분 뒤에 재시도하는 대기 처리도 추가해줘.
아무리 코드가 잘 짜여도 외부 서버가 잠시 먹통이 되면 프로세스가 죽어버리는 현상이 발생하구요. 에러가 나면 조용히 로그만 남기고 다음 주기에 다시 시도하는 예외 처리를 무조건 덧붙여야 무인으로 며칠씩 내버려둬도 든든합니다. 이렇게 완성된 파일을 켜두면 매일 알아서 오늘 경기 예고와 실시간 온에어 정보를 물어다 줍니다.

여기서 막히면

현상: 디스코드 웹훅 전송 단계에서 `400 Bad Request` 에러 코드가 떨어지며 알림이 전달되지 않음

원인: 디스코드 웹훅이 원하는 JSON 데이터 포맷에 맞지 않게 임의의 텍스트만 보냈을 때 주로 터지는 문제입니다.

해결: axios 요청부에서 `data: { content: message }`와 같이 디스코드 규격에 맞는 content 키 값으로 메시지를 한 번 감싸서 POST를 전송하도록 Claude Code에게 수정을 지시하세요.

현상: 터미널을 돌려보면 경기 일정 정보가 아무것도 없는 빈 배열 `[]`만 찍힘

원인: 네이버 e스포츠 페이지의 일정이 자바스크립트로 늦게 생성되는데 크롤러가 너무 빨리 긁어가서 그렇습니다.

해결: Playwright 코드 내에서 e스포츠 경기 카드가 화면에 뜰 때까지 기다려주는 `page.waitForSelector('.event_card')` 같은 요소를 확실히 추가해주어야 해결돼요.

현상: 며칠 잘 돌아가던 봇 스크립트가 어느 날 아침에 멈춰 있음

원인: 메모리 부족이나 일시적인 크롬 브라우저 프로세스 누수로 인해 로컬 리소스가 바닥나서 뻗었을 확률이 높거든요.

해결: 에러 로그를 확인한 뒤 가벼운 라이브러리인 cheerio와 axios 기반으로 로직을 가볍게 다이어트하거나, 윈도우 작업 스케줄러를 활용해 매일 아침 자동으로 재부팅되도록 세팅해두면 무리 없이 굴러갑니다.

다음에 붙여볼 것

오늘 완성한 LCK Discord 알림봇 제품에 네이버 쇼핑이나 지마켓의 제휴 마케팅 API를 결합해서, 우리 팀이 승리하는 순간 어울리는 기념 굿즈 세일 정보를 채널에 함께 뿌리는 수익화 파이프라인을 엮어볼 수도 있습니다. 다음 글에서는 여러 웹사이트의 쇼핑 핫딜을 결합해 실시간으로 유통을 다루는 파이프라인으로 넘어가볼게요.

관련 검색어

  • 🔍 Claude Code 사용법
  • 🔍 Claude Code 비교
  • 🔍 LCK 알림봇 사용법
  • 🔍 LCK 알림봇 비교
  • 🔍 Discord 봇 사용법
  • 🔍 Discord 봇 비교

댓글 쓰기

다음 이전