관심 회사 공시는 매번 직접 보러 가기 귀찮습니다. 카카오톡 방에서는 이미 누가 캡처해서 올린 뒤고, 증권 앱 알림은 너무 늦거나 너무 많구요. 그래서 오늘은 Claude Code로 DART 공시 알림봇을 하나 만들어볼 겁니다.
완성 모습은 단순해요. 관심 회사 이름을 적어두면, 새 공시가 뜰 때 텔레그램으로 회사명, 공시 제목, 링크가 날아옵니다. 처음에는 조회만 하고, 그다음에 알림을 붙이면 됩니다. 5분 안에 첫 결과는 터미널에 공시 목록으로 보여야 합니다.
이전 편에서 상품 비교표를 자동으로 뽑았다면, 이번에는 돈 냄새가 조금 더 납니다. 매수 추천 같은 건 절대 안 하고요. 그냥 내가 보기로 한 회사의 새 소식만 빨리 받는 작은 봇입니다.
준비물은 하나만 고르면 됨
오늘 작업은 Claude Code 하나만 씁니다. Claude Code 공식 문서에서 제가 이번 편에 실제로 쓸 만하다고 본 건 세 가지였어요. 자연어로 만들 기능을 말하면 파일을 만들고 명령까지 실행해주는 것, 프로젝트 루트의 CLAUDE.md를 매 세션 읽는 것, 파일 변경을 되돌릴 수 있는 체크포인트입니다.
우리는 이 셋만 씁니다. 전체 기능 외울 필요 없습니다. 이건 외우지 말고 그냥 이렇게 해.
필요한 건 DART 오픈API 키, 텔레그램 봇 토큰, 내 텔레그램 chat_id입니다. 키가 아직 없으면 일단 Step 1까지만 만들어도 괜찮아요. 첫 결과는 샘플 키 없이도 화면 구조를 볼 수 있게 시킬 겁니다.
DART 공시 알림봇 바닥부터 깔기
1
폴더랑 첫 조회만 만들기
AI에게 보낸 프롬프트
Claude Code로 DART 공시 알림봇 첫 버전을 만들어줘. 파일은 app.py, .env.example, CLAUDE.md만 만들어. 첫 버전은 텔레그램 전송 없이 DART 공시 목록을 터미널에 10개 출력하면 돼. 관심 회사명은 config 안에 삼성전자, 네이버, 카카오 예시로 넣어줘. 코딩 모르는 사람이 실행할 거라서 실행 명령도 README 대신 app.py 맨 위 주석에 적어줘.
왜 이렇게 시켰나: 처음부터 알림, 저장, 예약까지 다 넣으면 AI가 과하게 벌립니다. 우리는 공시 10개가 화면에 찍히는 것만 먼저 봅니다.
이렇게 나오면 OK: 터미널에 회사명, 공시 제목, 날짜, 링크가 10줄 정도 나옵니다. 여기서 이렇게 하면 안 돼요. 처음부터 “자동으로 매일 돌게 해줘”까지 같이 넣으면 어디서 틀렸는지 못 잡습니다.
2
CLAUDE.md로 알림 말투 고정하기
AI에게 보낸 프롬프트
CLAUDE.md에 이 프로젝트 규칙을 넣어줘. 텔레그램 알림 문구는 짧고 담백하게 써. 이모지 금지. 투자 조언처럼 보이는 문장 금지. 매수, 매도, 급등, 대박 같은 단어 금지. 알림 형식은 회사명 / 공시 제목 / 날짜 / 링크 4줄로 고정해.
왜 이렇게 시켰나: 알림봇은 문구가 조금만 과해도 이상해집니다. 공시 알림이 “대박 공시 감지”처럼 오면 바로 지우고 싶거든요.
이렇게 나오면 OK: CLAUDE.md 안에 금지어와 4줄 형식이 들어갑니다. 이 파일이 있으면 Claude Code가 다음 수정 때도 그 규칙을 계속 참고합니다.
3
텔레그램으로 한 번 보내기
AI에게 보낸 프롬프트
이제 Telegram Bot API sendMessage로 테스트 알림을 보내는 기능을 붙여줘. .env에서 TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID를 읽게 해줘. app.py를 실행하면 첫 번째 공시 1건만 텔레그램으로 보내고, 나머지는 터미널에만 출력해줘.
왜 이렇게 시켰나: 처음부터 10개를 다 보내면 내 폰이 시끄럽습니다. 1건만 보내고 형식부터 봅니다.
이렇게 나오면 OK: 텔레그램에 회사명, 공시 제목, 날짜, 링크가 4줄로 옵니다. 여기서 이렇게 하면 안 돼요. 토큰을 코드 안에 직접 붙여넣으면 나중에 GitHub에 올릴 때 위험합니다. .env로 빼야 합니다.
4
중복 알림 막기
AI에게 보낸 프롬프트
이미 보낸 공시는 sent_items.json에 저장해서 다시 보내지 않게 해줘. 공시 고유번호가 있으면 그 값을 쓰고, 없으면 회사명+제목+날짜를 합쳐서 중복 키로 써줘. 새 공시가 없으면 텔레그램을 보내지 말고 터미널에 새 공시 없음이라고만 출력해.
왜 이렇게 시켰나: 알림봇에서 제일 짜증 나는 게 같은 알림 반복입니다. DART 공시 알림봇은 조용해야 오래 씁니다.
이렇게 나오면 OK: 첫 실행에는 알림이 오고, 바로 한 번 더 실행하면 “새 공시 없음”만 보입니다. 여기까지 했으면 반은 끝남. 나머지는 다듬기입니다.
5
Claude Code에게 직접 검수시키기
AI에게 보낸 프롬프트
지금 만든 DART 공시 알림봇을 코딩 모르는 사람이 쓴다고 생각하고 검수해줘. 실행이 막힐 만한 곳, 토큰이 노출될 만한 곳, 같은 알림이 반복될 만한 곳만 찾아줘. 새 기능 제안은 하지 말고 고쳐야 할 것만 말해줘.
왜 이렇게 시켰나: 검수 프롬프트에서 새 기능을 열어두면 AI가 대시보드니 예약 UI니 말이 길어집니다. 우리는 막히는 곳만 잡습니다.
이렇게 나오면 OK: .env 누락, DART 응답 실패, 텔레그램 실패, 중복 저장 같은 것만 짚습니다. Claude Code는 체크포인트가 있어서 파일 수정 전 상태로 되돌릴 수 있으니, 이상하게 바뀌면 undo를 요청하면 됩니다.
여기서 막히면 거의 이 셋
현상: DART 요청에서 인증 오류가 뜹니다. 원인: API 키를 .env에 넣었지만 app.py가 .env를 읽지 못했을 가능성이 큽니다. 해결: 터미널에서 .env 파일 이름이 정확한지 보고, Claude Code에 “python-dotenv로 .env를 읽게 고쳐줘”라고만 시키세요. 긴 설명 필요 없습니다.
현상: 텔레그램 메시지가 안 옵니다. 원인: 봇 토큰은 맞아도 chat_id가 틀리면 조용히 실패하는 경우가 많습니다. 해결: 텔레그램에서 봇에게 아무 말이나 먼저 보내고, getUpdates로 chat_id를 다시 확인하세요. Claude Code에는 “chat_id 확인 방법을 터미널 명령으로 보여줘”라고 시키면 됩니다.
현상: 같은 공시가 계속 옵니다. 원인: sent_items.json 저장 위치가 실행 위치마다 달라졌을 수 있습니다. 해결: app.py 파일이 있는 폴더를 기준으로 sent_items.json을 저장하게 바꾸면 됩니다. “현재 파일 위치 기준으로 저장 경로 고정해줘”라고 말하면 충분합니다.
다음에는 조건을 하나만 붙이면 됨
한 걸음 더
Claude Code로 DART 공시 알림봇을 만들고 나면 바로 붙이고 싶은 건 키워드 필터입니다. 예를 들면 “계약”, “공급”, “자사주”, “유상증자” 같은 단어가 들어간 공시만 따로 받는 식이죠.
매달 주식 앱 알림을 다 켜두면 피곤합니다. 내가 보는 회사 몇 개만 조용히 감시하는 쪽이 더 오래 갑니다. 다음 편에서는 이 알림을 아침 브리핑처럼 한 번에 묶어 보내는 쪽으로 가보면 재밌겠습니다.