Claude Code로 번개장터 Telegram 알림봇 1시간 만에 완성

Claude Code로 번개장터 Telegram 알림봇 1시간 만에 완성

Claude Code로 번개장터 Telegram 알림봇 1시간 만에 완성

중고폰 살 때 계속 새로고침하기 귀찮더라구요

오늘 만들 것
중고폰 살 때 계속 새로고침하기 귀찮더라구요

당근마켓도 좋지만 한정판 스니커즈나 단종된 IT 기기를 구할 때는 번개장터에 매물이 훨씬 많이 올라옵니다. 문제는 인기 검색어는 올라오자마자 5분 안에 다 팔려나간다는 점입니다. 매번 스마트폰 앱을 켜서 새로고침할 수도 없고, 24시간 화면만 붙잡고 있을 수도 없어서 알림 봇을 하나 만들기로 했습니다. Claude Code를 켜서 1시간 만에 뚝딱 완성했는데, 결과가 꽤 만족스럽습니다. 매물이 뜨면 텔레그램으로 사진과 가격이 바로 날아옵니다.

준비물은 딱 하나만 있으면 됩니다

준비물은 딱 하나만 있으면 됩니다

이번 작업에는 Claude Code만 사용합니다. 터미널 환경에서 스스로 코드를 짜고 실행하고 에러까지 고쳐주는 도구라서, 시작만 해두면 흐름을 잡기 쉽습니다. Node.js가 설치된 컴퓨터와 텔레그램 토큰만 준비하면 뼈대는 바로 완성됩니다. 아직 Claude Code 세팅이 안 된 분들은 터미널에 npm install -g @anthropic-ai/claude-code 명령어로 설치부터 해주시면 준비 끝입니다.

1
번개장터 검색 페이지에서 매물 가져오기

첫 단계부터 기능을 너무 많이 넣으면 바로 꼬입니다. 가볍게 내가 원하는 키워드로 검색된 최근 매물의 제목과 가격만 가져오는 기본 스크립트부터 짜달라고 시킬 겁니다. Claude Code를 켜고 아래 프롬프트를 보냈습니다.

AI에게 보낸 프롬프트
Playwright를 사용해서 번개장터에서 '아이패드 프로'를 검색한 최신 매물 목록을 가져오는 Node.js 스크립트를 짜줘. 파일명은 bgzt.js로 하고, 일단 최신 매물 5개의 제목과 가격만 터미널에 출력하는 간단한 코드면 돼.

Claude Code는 번개장터의 동적 페이지 구조를 분석해서 Playwright 기반 셀렉터를 자동으로 잡아줍니다. 실행까지 알아서 해보더니 터미널에 매물 이름과 가격이 찍히는 것을 직접 보여주더라구요. 정적 텍스트가 아니라 실시간으로 올라온 진짜 매물이 콘솔에 뜨는 순간, 일이 눈에 보이기 시작합니다.

2
텔레그램 알림과 중복 전송 방지 로직 결합

이제 매물을 확인했으니 내 폰으로 받아볼 차례입니다. 하지만 매번 실행할 때마다 같은 매물을 계속 보내면 텔레그램 방이 금방 복잡해집니다. 이미 보낸 매물은 건너뛰도록 간단한 로직을 추가해야 합니다. 파일 형태로 이전에 보낸 매물 ID를 저장해두는 방식을 쓰기로 했습니다. Claude Code에게 수정을 요청합니다.

AI에게 보낸 프롬프트
bgzt.js 파일에 텔레그램 봇 API 연동을 추가해줘. 그리고 중복 알림을 막기 위해 이미 보낸 매물의 ID를 sent_ids.json 파일에 로컬 캐시로 저장하고, 새로 올라온 매물만 텔레그램 채널로 발송하게 고쳐줘. 매물의 상세 주소와 가격 정보가 메시지에 포함되어야 해.

Claude Code가 코드를 고치고 나더니 sent_ids.json 파일을 스스로 생성하고 첫 테스트 발송까지 완료했습니다. 폰을 보니 텔레그램으로 아이패드 프로 매물 링크와 가격이 깔끔하게 도착해 있더라구요. 복잡한 데이터베이스 없이 파일 하나로 캐싱을 해결하니까 속도도 빠르고 가벼워서 마음에 듭니다.

3
매분 자동으로 도는 스케줄러 등록하기

우리가 컴퓨터 앞에 앉아서 이 스크립트를 수동으로 누를 수는 없는 노릇이죠. 터미널을 닫아도 알아서 1분마다 번개장터를 감시하도록 크론탭이나 로컬 스케줄러를 붙여야 진짜 봇이 됩니다. 이번엔 pm2나 간단한 interval 로직을 추가해서 백그라운드에서 상시 작동하도록 만들었습니다.

AI에게 보낸 프롬프트
bgzt.js가 1분마다 자동으로 돌며 새 매물을 감시하도록 내장형 스케줄러를 추가해줘. pm2 같은 외부 도구 없이 Node.js의 setInterval을 활용해서 무한 루프 돌게 만들고, 터미널 로그에는 실행 시간과 새로 발견된 매물 개수만 찍어주라.

이제 코드는 완성되었습니다. 터미널에서 node bgzt.js를 실행해 두면 1분마다 조용히 번개장터를 탐색합니다. 새로운 꿀매물이 등록되는 순간 즉시 폰으로 텔레그램 진동이 울리는 것을 확인할 수 있습니다.

여기서 막히면 이것만 체크해보세요

여기서 막히면 이것만 체크해보세요

  • 현상: Playwright가 페이지를 열 때 timeout 에러가 나거나 번개장터 사이트가 전혀 열리지 않습니다.
    원인: 번개장터의 봇 방지 시스템이 자동화 브라우저의 접속 시도를 비정상적인 접근으로 판단하고 차단했을 수 있습니다.
    해결: Playwright 실행 옵션에서 headless 모드를 false로 설정하여 실제 화면이 뜨도록 바꾸는 편이 안전합니다. 여기에 일반 크롬 브라우저와 동일한 user-agent 헤더 값을 추가하면 차단 우회가 수월해집니다. Claude Code에게 브라우저 우회 설정을 코드에 넣어달라고 요청하면 알아서 해결해 줍니다.
  • 현상: 텔레그램으로 알림 메시지는 오지만 보낸 매물 정보가 sent_ids.json 파일에 저장되지 않아 동일한 알림이 중복으로 들어옵니다.
    원인: 스크립트 실행 과정에서 기존 로컬 json 파일을 제대로 파싱하지 못했거나 쓰기 권한 문제로 파일 갱신이 막힌 상태입니다.
    해결: 코드 내에서 fs.existsSync 함수를 사용해 sent_ids.json 파일이 실제로 존재하는지 먼저 확인해야 합니다. 파일 읽기 작업이 정상적으로 수행되었는지 검증하고, 새 ID를 추가한 뒤 fs.writeFileSync로 안전하게 저장하도록 예외 처리를 덧붙여 주면 작동합니다.
  • 현상: 텔레그램 API 연동 과정에서 404 Not Found 혹은 400 Bad Request 에러 코드가 콘솔 터미널에 뜹니다.
    원인: 봇 생성 시 발급받은 Token 값이 일부분 누락되었거나 알림을 전달할 채널의 Chat ID 값이 잘못 매핑된 탓이 큽니다.
    해결: 텔레그램 웹 브라우저 API 호출 링크로 들어가서 봇이 소속된 방의 고유 ID를 직접 조회해 볼 수 있습니다. Chat ID 값 맨 앞에 마이너스(-) 기호가 빠지진 않았는지 유심히 확인하셔야 합니다. 토큰값의 대소문자 오타를 수정한 뒤 스크립트의 환경 변수로 정확히 입력해주시면 깔끔하게 해결됩니다.

다음에 붙여볼 것

한 걸음 더

이번에는 키워드 하나만 감시했지만, 감시할 키워드를 여러 개 배열로 등록해서 멀티 키워드 감시봇으로 확장할 수도 있습니다. 키워드별로 가격 상한선(예: '아이패드 프로 11인치는 60만 원 이하일 때만 알림')을 다르게 세팅해두면 원치 않는 고가 매물 알림을 거르는 필터링 봇으로도 진화가 가능하구요. 다음 편에는 이 번개장터 알림에 당근마켓 크롤러까지 붙여서 통합 중고 거래 모니터링 파이프라인을 만들어보겠습니다.

관련 검색어

  • 🔍 Claude Code 사용법
  • 🔍 Claude Code 비교
  • 🔍 번개장터 사용법
  • 🔍 번개장터 비교
  • 🔍 텔레그램 봇 사용법
  • 🔍 텔레그램 봇 비교

댓글 쓰기

다음 이전