Claude Code로 YES24 취소표 텔레그램 알림봇 만들기

Claude Code로 YES24 취소표 텔레그램 알림봇 만들기

Claude Code로 YES24 취소표 텔레그램 알림봇 만들기

새로고침만 하다가 자리 놓치기 싫다면

오늘 만들 것
새로고침만 하다가 자리 놓치기 싫다면

YES24 공연 상세 페이지를 몇 분마다 다시 열어보는 방식은 금방 지칩니다. 그래서 오늘은 공연 URL 하나만 넣어두고 버튼 문구가 달라질 때 텔레그램으로 알려주는 작은 도구를 만드는 흐름으로 갑니다. YES24 취소표 알림봇이라고 부르기엔 거창할 필요도 없습니다. 지금 필요한 건 취소표가 풀렸는지 먼저 알아채는 일입니다.

이 글은 개발 경력이 긴 사람보다 Claude Code로 눈에 보이는 결과를 빨리 만들고 싶은 사람 쪽에 맞춰 적었습니다. Codex를 쓰는 분도 아래 프롬프트 예시는 거의 그대로 옮겨서 시작할 수 있습니다. 처음부터 여러 기능을 얹지 않고, 한 공연을 읽고 한 번 알리는 버전부터 붙이면 흐름이 훨씬 또렷하게 잡힙니다.

준비물은 네 가지면 된다

준비물은 길지 않습니다. Claude Code, YES24 공연 URL 하나, 텔레그램 봇 토큰, 내 채팅 ID면 시작할 수 있습니다. 여기서 여러 공연을 한 번에 묶으려 들면 파일도 늘고 상태 관리도 바로 복잡해집니다. 첫 버전은 URL 한 개만 감시하는 쪽이 훨씬 낫습니다.

숫자는 두 개만 기억하면 됩니다. 첫 5분 안에는 현재 상태를 콘솔에 찍는 데까지 가고, 그다음부터 텔레그램 알림과 반복 실행을 붙입니다. 이 순서를 지키면 YES24 취소표 알림봇의 첫 모양이 빨리 보이고, 중간에 어디서 막히는지도 금방 찾을 수 있습니다.

처음 버전은 버튼 글자만 읽으면 된다

1
규칙 메모부터 깔기
AI에게 보낸 프롬프트
/init 해줘. 이 폴더는 YES24 취소표 텔레그램 알림봇용이야. 첫 버전 파일은 `package.json`, `.env.example`, `yes24-watch.mjs`만 만들고, 결과 문구는 한국어로 짧게. 처음엔 URL 한 개만 감시하고 과한 기능은 넣지 마.

이 한 줄은 범위를 줄이는 역할을 합니다. 처음부터 파일이 많아지면 초보 입장에서는 어디를 열어야 하는지부터 흐려집니다. 파일을 세 개로 못 박아두면 Claude Code가 곁가지로 새는 일을 줄일 수 있고, 나중에 다시 봐도 구조를 바로 따라가기 쉽습니다.

결과 문구를 짧게 해달라고 적어두는 것도 꽤 쓸모 있습니다. 터미널에 설명이 길게 쏟아지면 상태를 읽는 시간이 늘어납니다. YES24 취소표 알림봇은 누가 봐도 지금 막혔는지, 열렸는지, 못 읽었는지만 바로 보이면 됩니다.

2
편집 전에 뼈대만 보자
AI에게 보낸 프롬프트
/plan YES24 공연 상세 URL 하나를 열어서 예매 버튼이나 잔여석 문구를 읽고 현재 상태만 콘솔에 출력하는 첫 버전을 설계해줘. Telegram 전송과 반복 실행은 아직 넣지 마.

페이지 감시는 셀렉터가 어긋나면 바로 헛돌기 때문에 코드부터 길게 쓰는 것보다 무엇을 읽을지 먼저 정리하는 편이 낫습니다. 계획은 3단 정도면 충분합니다. 페이지 열기, 버튼 문구 읽기, 상태 출력. 여기까지만 정리돼도 첫 골격은 이미 잡힌 셈입니다.

이 단계에서 너무 많은 경우의 수를 미리 넣을 필요는 없습니다. 공연마다 버튼 문구가 조금씩 다를 수 있으니, 첫 버전은 일단 대표 문구를 읽고 `AVAILABLE`, `BLOCKED`, `UNKNOWN` 세 상태로만 나누면 됩니다. 분류가 단순해야 다음 단계에서 알림 조건도 깔끔하게 붙습니다.

3
첫 결과는 콘솔 한 줄이면 된다
AI에게 보낸 프롬프트
계획대로 `yes24-watch.mjs`를 만들어줘. Playwright로 `TARGET_URL`을 열고 예매 버튼 텍스트나 품절 문구를 읽어서 `AVAILABLE`, `BLOCKED`, `UNKNOWN` 중 하나와 읽은 문구를 콘솔에 출력해. 실행 명령도 같이 적어줘. 파일은 하나로 유지해.

여기서 필요한 건 화려한 완성이 아니라 반응 확인입니다. Playwright가 페이지를 열고, 보이는 문구를 읽고, 지금 상태를 세 값 가운데 하나로 출력하면 첫 번째 목적은 끝입니다. 콘솔에 문구 한 줄이 찍히는 순간부터 이 작업은 눈에 보이는 결과물로 바뀝니다.

터미널에서는 `npm init -y`, `npm i playwright dotenv node-telegram-bot-api` 정도면 출발할 수 있습니다. 그런 다음 `node yes24-watch.mjs`를 돌렸을 때 버튼 문구나 품절 문구가 한 줄로 보이면 다음 단계로 넘어가면 됩니다. 5분 안에 여기까지 오면 이후 수정도 훨씬 수월합니다.

4
텔레그램 붙여서 폰으로 받기
AI에게 보낸 프롬프트
이제 같은 파일에 Telegram 전송을 붙여줘. `.env`에서 `BOT_TOKEN`, `CHAT_ID`, `TARGET_URL`을 읽고, 상태가 `AVAILABLE`로 바뀌었거나 버튼 문구가 이전과 달라졌을 때만 메시지를 보내. 마지막 상태는 `state.json`에 저장해.

알림 단계에서는 많이 보내는 것보다 덜 시끄럽게 보내는 쪽이 더 중요합니다. 같은 문구를 몇 분마다 계속 받으면 바로 꺼버리게 되니까, 마지막 상태를 `state.json`에 저장해 두고 상태가 바뀌었을 때만 보내는 흐름으로 잡아야 합니다. 이 부분이 들어가야 실제로 쓸 만한 YES24 취소표 알림봇이 됩니다.

메시지 형식도 길게 설명할 필요는 없습니다. 공연명, 현재 상태, 감지 시각, URL 네 줄이면 폰에서 바로 판단할 수 있습니다. 상태 변화가 생겼을 때만 조용히 알려주는 방식이 공연 예매 상황에서는 더 편합니다.

5
문구를 사람이 읽기 좋게 정리하기
AI에게 보낸 프롬프트
알림 문구를 짧게 다듬어줘. 공연명, 상태, 감지 시각, URL 네 줄만 보내고, `state.json`이 없으면 자동 생성되게 해줘. 에러가 나면 긴 스택 대신 무엇을 확인할지 한 줄만 보여줘.

첫 버전은 돌아가기만 해도 의미가 있지만, 계속 켜둘 도구라면 읽는 느낌도 정리돼 있어야 합니다. 알림이 네 줄 안에서 끝나면 폰 화면에서 내용을 한 번에 파악할 수 있고, 에러도 확인할 지점만 남기면 다시 손보기 수월합니다.

이 단계까지 오면 코드 양은 크지 않은데 사용감은 꽤 달라집니다. 나중에 다른 예매처를 붙이더라도 이 포맷을 먼저 만들어 두면 문구가 길어져서 놓치는 일이 줄어듭니다.

6
Claude Code가 알아서 다시 돌게 하기
AI에게 보낸 프롬프트
/loop 3m `node yes24-watch.mjs`를 실행해서 상태를 확인해줘. 상태 변화가 있으면 알려주고, 실패하면 원인만 짧게 적어줘.

`/loop`는 반복 확인을 붙일 때 편합니다. 세션이 살아 있는 동안 3분마다 다시 확인하니까 브라우저 탭을 붙잡고 직접 새로고침할 필요가 없습니다. 공연 하나를 지켜보는 용도라면 이 정도 자동화만으로도 충분히 쓸 수 있습니다.

다만 이 방식은 세션 기반이라 터미널을 닫거나 대화를 새로 열면 같이 멈춥니다. 하루 종일 켜둘 운영형이 필요하면 그다음 단계에서 GitHub Actions나 별도 서버로 옮기면 됩니다. 이 글에서는 빠르게 만들고 바로 써보는 흐름까지만 가져갑니다.

7
마지막엔 읽기 검수 한 번
AI에게 보낸 프롬프트
/review 방금 만든 YES24 취소표 텔레그램 알림봇에서 중복 알림, 셀렉터 깨짐, 비밀키 출력 위험만 봐줘. 코드는 바꾸지 말고 지적만 해줘.

마지막에 `/review`를 붙여두면 놓치기 쉬운 구멍을 빨리 찾을 수 있습니다. 특히 중복 알림, 셀렉터 흔들림, 환경변수 노출 같은 문제는 처음 만들 때는 잘 안 보이는데 나중에 바로 불편으로 돌아옵니다.

리뷰에서 항목이 몇 개 나오더라도 한 번에 범위를 넓힐 필요는 없습니다. 지금 바로 거슬리는 문제만 고치고, 여러 공연 감시나 다른 예매처 확장은 다음 순서로 넘기면 됩니다.

안 풀릴 때는 이 순서로 보면 된다

계속 `UNKNOWN`만 찍힐 때
스크립트는 도는데 문구를 못 읽는다면 YES24 페이지에서 실제로 보이는 버튼 텍스트를 다시 잡는 쪽부터 보면 됩니다. 팝업이나 다른 레이어를 먼저 읽는 경우가 있어서 클래스 이름만 믿으면 엇나갈 때가 있습니다.

이럴 때는 `headless: false`로 한 번 열어달라고 하고, `button`, `a`, `text=` 기준으로 다시 찾아달라고 말하면 됩니다. 화면에 보이는 글자를 기준으로 다시 잡는 편이 훨씬 덜 흔들립니다.

텔레그램 메시지가 안 올 때
콘솔에는 상태가 찍히는데 폰으로 안 오면 `BOT_TOKEN`, `CHAT_ID`, 봇과의 대화 시작 여부부터 보면 됩니다. 토큰 사이에 공백이 들어가 있거나, 봇과 대화를 시작하지 않은 상태면 메시지가 막히는 경우가 많습니다.

텔레그램에서 봇을 찾아 `start`를 먼저 보내고, `.env` 값을 다시 확인한 뒤 테스트 메시지 한 번만 보내는 코드로 점검하면 어디서 끊기는지 금방 파악할 수 있습니다.

`/loop`를 걸어놨는데 조용해질 때
처음에는 돌다가 몇 시간 뒤 반응이 없으면 세션 상태를 먼저 의심하면 됩니다. `/loop`는 세션이 살아 있을 때만 이어지기 때문에 터미널을 닫으면 멈춥니다.

지금 목표는 장기 운영 시스템을 만드는 일이 아니라 YES24 공연 페이지를 감시해서 폰으로 받는 흐름을 만드는 데 있습니다. 여기까지 손에 익히면 다음 배포 단계로 넘어갈 때도 무엇을 분리해야 하는지 판단이 쉬워집니다.

다음 확장은 여기서 시작하면 된다

한 걸음 더

첫 버전이 살아 있으면 확장 방향은 단순합니다. 같은 방식으로 인터파크나 멜론티켓을 따로 붙이거나, 공연 두세 개를 배열로 받아서 순서대로 확인하게 바꾸면 됩니다. 그래도 출발점은 그대로입니다. URL 한 개와 알림 한 번을 먼저 성공시키는 것, 그게 YES24 취소표 알림봇을 가장 빨리 손에 넣는 방법입니다.

그다음부터는 기능보다 운영 판단이 더 또렷해집니다. 어떤 문구를 바꿔야 덜 시끄러운지, 3분 간격이 맞는지, `AVAILABLE` 기준을 더 좁혀야 하는지도 그때부터 보입니다. 첫 버전은 그렇게 자랍니다.

관련 검색어

  • 🔍 Claude Code 사용법
  • 🔍 Claude Code 비교
  • 🔍 YES24 취소표 알림봇 사용법
  • 🔍 YES24 취소표 알림봇 비교
  • 🔍 텔레그램 봇 사용법
  • 🔍 텔레그램 봇 비교

댓글 쓰기

다음 이전