Claude Code 활용 SRT 취소표 알림봇 만들기 (텔레그램 연동)

Claude Code 활용 SRT 취소표 알림봇 만들기 (텔레그램 연동)

Claude Code 활용 SRT 취소표 알림봇 만들기 (텔레그램 연동)

기차 예매 대란 때마다 화면 새로고침만 누르던 노가다를 끝냅니다

오늘 만들 것
기차 예매 대란 때마다 화면 새로고침만 누르던 노가다를 끝냅니다

명절 연휴나 주말이 다가오면 고향 방문이나 여행을 위해 기차표 예매를 시도하는 사례가 많습니다. 하지만 매번 매진된 화면만 마주하며 스마트폰 새로고침 버튼을 반복해서 누르는 작업은 상당한 피로감을 유발하곤 합니다. 이 같은 번거로움을 해결하고자 실시간으로 좌석을 감시하는 알림 시스템을 직접 구축해 보면 어떨까요? 터미널 기반 AI 도구인 Claude Code를 활용해 수서발 부산행 SRT 열차의 SRT 취소표 발생 상태를 실시간으로 체크하고 텔레그램 메시지로 받아보는 봇을 구현하는 과정을 소개합니다.

프로그래밍 언어에 익숙하지 않은 초보자라도 구현하는 데 무리가 없습니다. 기본적인 개발 환경 준비부터 패키지 설치, 구동 테스트에 이르는 작업을 AI 도구가 단계별로 지원하기 때문입니다. 사용자는 텔레그램에서 전송용 토큰과 대화방 정보만 발급받아 스크립트에 입력하는 것만으로 충분합니다.

파이썬 SRT 라이브러리와 텔레그램 연동의 원리

파이썬 SRT 라이브러리와 텔레그램 연동의 원리

알림 서비스의 기본 원리는 직관적입니다. 예매 페이지를 일일이 분석하고 파싱하는 복잡한 방식 대신, 기존에 잘 구축된 오픈소스 파이썬 라이브러리를 가져와 사용합니다. 이러한 방식은 웹 페이지의 디자인이나 구조가 변경되더라도 에러가 발생할 확률을 획기적으로 줄여주는 장점이 있습니다.

조회된 빈자리 데이터는 텔레그램 API를 거쳐 지정된 사용자의 스마트폰으로 곧장 푸시 알림 형태로 전달됩니다. 텔레그램은 누구나 무료로 대화방 전송 채널을 개설할 수 있으며, 연동 방식도 매우 간단하여 개인 자동화 프로젝트에 자주 활용되는 도구입니다.

Claude Code 기반 프로젝트 초기 환경 구성

Claude Code 기반 프로젝트 초기 환경 구성

알림 시스템을 완성하려면 가장 먼저 개발 환경을 준비하고 도구를 시작해야 합니다. 로컬 컴퓨터에 새로운 디렉터리를 만들고 터미널 인터페이스를 활성화하는 과정이 요구됩니다.

1
작업 디렉터리 준비 및 AI 도구 실행

명령 프롬프트나 파워쉘 창에서 아래의 명령을 차례대로 입력하여 전용 폴더를 만들고 AI 도구를 시작할 수 있습니다.

AI에게 보낸 프롬프트
mkdir srt-cancellation-bot
cd srt-cancellation-bot
claude

도구의 대화 환경이 활성화되면 개발에 필요한 내용을 한국어로 요청하면 됩니다. 예를 들어 "파이썬 SRT 라이브러리로 수서에서 부산으로 가는 특정 날짜의 남은 좌석을 모니터링하고, 빈자리 상황을 실시간으로 체크해서 텔레그램 채널로 메시지를 전송하는 코드를 구현해줘"라고 입력합니다. 그러면 필요한 의존 패키지와 코드 구성이 순차적으로 정비됩니다.

모니터링을 담당하는 파이썬 코드 작성

안정적인 좌석 조회를 위해 불필요한 연산을 지양하고, 핵심적인 모니터링 주기 제어와 텔레그램 푸시 알림 기능에 집중하여 스크립트를 작성합니다. 구조를 명료하게 설계할수록 예기치 못한 에러에 대처하기가 쉬워집니다.

2
의존성 설치 및 모니터링 스크립트 작성

도구 환경 내에서 패키지 설치 명령을 수행하여 연동 모듈을 갖추고, 이어서 srt_notifier.py 파일을 생성해 코드를 작성합니다.

import time
import json
import urllib.request
from SRT import SRT

# 사용자 개인 설정
SRT_ID = "YOUR_SRT_ID"          # SRT 10자리 회원번호
SRT_PW = "YOUR_SRT_PASSWORD"    # SRT 비밀번호
DEP_STATION = "수서"
ARR_STATION = "부산"
DATE = "20260627"               # 조회할 날짜 (YYYYMMDD)
TIME_FROM = "080000"            # 출발 시간 이후 (HHMMSS)
TIME_TO = "120000"              # 출발 시간 이전 (HHMMSS)

TELEGRAM_BOT_TOKEN = "YOUR_BOT_TOKEN"
TELEGRAM_CHAT_ID = "YOUR_CHAT_ID"

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}")

def monitor_srt():
    # SRT 로그인
    srt = SRT(SRT_ID, SRT_PW)
    print(f"SRT {DEP_STATION} -> {ARR_STATION} ({DATE}) 모니터링 가동...")
    
    notified_trains = set()

    while True:
        try:
            # 조건에 맞는 모든 열차 조회
            trains = srt.search_train(DEP_STATION, ARR_STATION, DATE, TIME_FROM, TIME_TO)
            
            for train in trains:
                # 일반실 또는 특실 좌석이 있는지 확인
                is_seat_avail = train.general_seat_available() or train.special_seat_available()
                train_key = f"{train.train_number}_{train.dep_time}"
                
                if is_seat_avail:
                    if train_key not in notified_trains:
                        msg = f"[SRT 잔여석 발생!]\n\n열차번호: {train.train_number}\n출발: {train.dep_station} ({train.dep_time})\n도착: {train.arr_station} ({train.arr_time})\n\n지금 바로 예약을 진행하세요!"
                        send_telegram_message(TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID, msg)
                        print(f"잔여석 감지: {train.train_number}호 열차 알림 전송 완료")
                        notified_trains.add(train_key)
                else:
                    # 다시 매진되면 중복 알림 목록에서 제거
                    if train_key in notified_trains:
                        notified_trains.remove(train_key)
                        
        except Exception as e:
            print(f"모니터링 오류 발생: {e}")
            
        time.sleep(30)  # 30초 대기 후 재조회

if __name__ == '__main__':
    monitor_srt()

작성이 완료되면 코드가 올바르게 구현되었는지 검증해 볼 차례입니다. 작성된 내용과 원본의 차이를 비교하려면 AI 도구 창에서 변경분(diff) 확인 명령어를 내려서 계정 매개변수가 알맞게 설정되었는지 확인하면 편리합니다.

CLAUDE.md 활용 설정 가이드 세팅

여러 차례에 걸쳐 대화를 나누고 코드를 다듬다 보면, 기존에 설정해 둔 로그인 정보나 매개변수 설정값이 덮어씌워질 위험이 있습니다. 이를 예방하기 위해 작업 폴더의 최상위에 안내서인 CLAUDE.md 파일을 작성해 두는 기법을 권장합니다.

3
설정 가이드 파일 생성

프로젝트 루트 경로에 명시적 가이드를 담은 CLAUDE.md 파일을 작성해 배치합니다.

AI에게 보낸 프롬프트
# SRT Notifier Instructions
- 파이썬 외부 의존성: `SRT` 라이브러리를 사용할 것.
- 개인 정보(회원 ID, 비밀번호, 텔레그램 토큰)는 코드를 수정해도 임의로 삭제하거나 초기화하지 말고 유지할 것.
- 모니터링 호출 간격(API Rate Limit 고려)은 최소 20초 이상 유지하여 서버 과부하를 막을 것.
- 스크립트 가동 실행어: `python srt_notifier.py`

이 설정서가 준비되어 있으면, 추후 알림 메시지 포맷을 변경하거나 세부 출력 형태를 수정해 달라고 지시하더라도 중요 로그인 정보나 구동 환경이 안정적으로 보존됩니다.

주의해야 할 서버 요청 제한

기차표 예약과 관련된 서비스는 과도한 트래픽 유입이나 매크로를 이용한 자동 조회를 차단하고자 엄격한 요청 제한 정책을 적용합니다. 모니터링 주기를 너무 짧게 가져가면 IP 차단 조치를 당해 모니터링 자체가 중단될 우려가 큽니다. 그러므로 약 30초 정도의 충분한 대기 주기를 설정해 조회 명령을 전달하길 권장합니다. 덧붙여 실제 결제 단계까지 완전히 자동화하는 행위는 운영 정책에 반할 수 있어, 빈자리 안내 메시지를 받은 후에는 사용자가 직접 앱으로 접속하여 예약을 마무리해야 안전을 도모할 수 있습니다.

알림봇의 실행 및 최종 검증

이제 모든 스크립트 파일과 설정 파일 작성을 완료했으므로, 실시간 작동 검증을 수행할 차례입니다. 터미널 백그라운드 환경에서 안정적으로 프로그램을 구동하고 원활하게 작동하는지 테스트합니다.

4
로컬 터미널 기반 구동 및 실시간 알림 검증

작성된 실행 명령을 입력하여 모니터링을 개시합니다.

AI에게 보낸 프롬프트
python srt_notifier.py

구동이 개시되면 현재 설정된 감시 구간 정보와 모니터링 작동 현황이 터미널 화면에 차례로 기록됩니다. 이제 매번 예매 사이트에 접속해 새로고침을 거듭하는 비효율적인 수작업을 지속할 이유가 없습니다.

메시지 수신 상태 점검

프로그램이 가동된 상태에서 잠시 대기한 후, 본인이 설정한 텔레그램 채팅방으로 열차 번호와 출발 및 도착 시각 정보가 포함된 푸시 알림이 원활히 들어오는지 관찰합니다. 안내 문구가 정확하게 전달된다면 모든 연동 및 모니터링 환경이 잘 갖춰진 셈입니다. 이후 메시지가 수신되는 타이밍에 맞춰 곧바로 승차권 예약 단계를 진행하면 손쉽게 원하는 기차표를 구할 수 있습니다.

중요한 연휴 기간이나 주말 승차권 선점을 위해 낭비되던 소모적인 새로고침 시간을 이로써 현격히 줄이게 됩니다. 로컬 컴퓨팅 환경에서 실행되는 간단한 명령어 한 줄과 Claude Code 도구의 도움으로 완성한 스크립트를 통해, 기차표 예매의 스트레스에서 벗어나 보다 유연하게 여정을 계획할 기회를 가져가길 기대합니다.

관련 검색어

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

댓글 쓰기

다음 이전