홍진경
🐶 AI 찐친
📚 학습반장
🚀 SNS 챌린지 달성자

나만의 투자에이전트, 국내 배당 ETF 모듈을 만들다

📝 한줄 요약

지난주 해외배당캘린더 모듈에 이어서 국내 배당 ETF 모듈을 추가한 이야기 입니다. 데이터 소스를 검증하고 ETF 후보 1,155개 중, 실제로 볼 종목의 기준을 정해서 45개로 좁힌 이야기입니다.

바쁘시면 이것만 읽어도 돼요:

  • 미션은 하나였습니다 — "해외주도 수집해봤으니 국내주 데이터도 수집해보자."

  • 답을 찾기 전에 데이터부터 믿을 수 있어야 했어요 — 국내 주식이나 ETF 정보는 어디서 얻지? 데이터 소스를 비교하고, 조용히 잘리거나 왜곡된 값들을 걷어냈어요.

  • 핵심 결정은 "숫자 하나로 자르지 않는 것" — 성격이 다른 건 유형으로, 목적에 못 미치는 건 실적으로 나눠 걸렀어요.

  • 그 덕분에 "시장지수"로만 분류돼 놓칠 뻔했던 종목을 구했어요.

  • 결과: 1,155개가 45개로 좁혀졌고, 국내·미국 배당을 한 곳에서 보게 됐어요.

🎯 이런 분들께 도움돼요

  • AI 코딩 도구와 협업하는 법을 배우고 싶은 분

  • AI로 투자·재무 관리 에이전트를 직접 만들어보고 싶은 분

  • 후보가 너무 많아서 신뢰할 수 있는 기준으로 걸러내야 하는 분

😫 문제 상황 (Before)

지난 주 Claude Code로 미국 배당주 캘린더를 완성했습니다. 다음 순서로 국내 배당 ETF를 붙이려고 데이터를 열어봤는데, 후보가 1,155개였습니다.

진짜 문제는 "자동화가 안 돼 있다"가 아니라 1,155개 중 무엇을 보여주고 무엇을 뺄지 기준이 없다는 것이었습니다. 그동안은 여러 사이트를 오가며 확인하고 감으로 판단해왔으니까요. 은퇴 준비를 도와주는 개인화된 투자에이전트를 만들어가는 중이었는데, 국내 배당이라는 조각만 이 질문에 답하지 못한 채 비어 있었습니다.

🛠️ 사용한 도구

  • 도구명: Claude Code

  • 데이터 소스: 후보 4곳(공공데이터포털·SEIBro·yfinance·네이버금융)을 검토해 3곳(공공데이터포털·SEIBro·yfinance)을 조합


🔧 설계도

🔧 작업 과정

데이터부터 믿을 수 있어야 했다.

미국은 소스 하나에 yfinance만 더하면 됐지만, 국내는 그렇지 않았습니다. 후보 4곳을 검토했는데, 소스마다 주는 값도 함정도 달랐습니다.

소스

제공하는 값

특징·한계

공공데이터포털(금융위)

ETF 시세·순자산

날짜를 반드시 넣어야 함 — 안 넣으면 전량 페이징(116만 건). 하루 조회 10,000건 한도. 배당률 필드는 액면가 기준이라 시가 수익률과 값이 다름

SEIBro

분배금·유형·청산 여부

페이지가 조용히 잘림(월 30건 상한) — 실제 997종목이 205종목으로 보였고, 직접 세어봐야 알 수 있었음

yfinance

배당락일

국내 공식 소스 어디에도 없는 값을 유일하게 제공. 처음엔 "계산해서 추정해야 한다"고 잘못 판단했다가, 이미 이 소스에 값이 있다는 걸 재확인

네이버금융

구조 참고용

초기에 검토했지만 최종 파이프라인엔 쓰지 않음

공공데이터포털 승인 후엔 종목 하나(삼성전자 1우선주)로 실제 값을 검증했습니다. 배당금이 기준일에서 지급일까지 3.5개월 걸린다는 걸 확인하고, yfinance 값과도 일치시켰습니다.

세 소스를 하나로 합칠 때는 별도의 규칙이 필요했습니다. 값의 성격이 다르면 우선순위도 달라야 했습니다 — 실제 있었던 일(SEIBro의 분배 이력)은 더 완전한 쪽을 그대로 쓰고, 계산으로 유추한 값(배당률)은 다른 소스와 대조하는 용도로만 썼습니다. 합치는 순서도 문제였습니다. 어떤 소스를 먼저 등록하느냐에 따라, 같은 종목이 ETF가 아니라 개별주로 잘못 분류될 뻔한 적도 있었습니다. 게다가 합치는 과정(조인)이 실패해도 프로그램은 에러 없이 "시세 없음"이라는 그럴듯한 사유로 조용히 넘어갔습니다. 그래서 합치기가 제대로 됐는지 확인하는 절차를, 무엇을 포함할지 정하기 에 두기로 했습니다 — 뒤에 두면 병합 실패가 진짜 원인이 아니라 그럴듯한 사유로 둔갑해버리니까요.

이렇게 소스를 정리한 뒤에도, 데이터를 믿을 수 있게 만드는 과정 자체가 만만치 않았습니다. 가장 아찔했던 순간은 수집 도중이었습니다.

그러니까 내가 기준을 잡아서 일부만 수집하자고 했는데. 빨리 작업을 중단해.

시세 조회에 날짜 필터를 빼먹어, 하루 한도(10,000건)를 훌쩍 넘는 116만 건을 요청하고 있었습니다. 즉시 멈추고 날짜 필터를 필수로 고쳤습니다.

개별주보다 ETF 가 사용자 의도에 맞는거같아. 개별주를 전부 수집할 필요는 없을 거 같아.

개별 종목까지 모으려던 계획을 ETF로 좁히자 71,642건짜리 수집 문제가 통째로 사라지고, 공공데이터포털 호출도 하루 3회로 줄었습니다. 데이터는 이제 믿을 수 있게 됐습니다.

기준을 두 가지로 나누다 — 이 작업의 핵심

남은 건 1,155개 중 뭘 보여줄지 정하는 일이었습니다.

해외지수 종목 제외. 해외 배당주로 관리하니까. 커버드콜 제외.
133개로 하고. 금리형은 제외하자. 테마형도 부적합 조건이니 제외.

기준을 하나로 뭉치지 않고 두 가지로 나눴습니다. 성격이 다른 것(해외지수·커버드콜·금리형·테마)은 유형으로, 목적에 못 미치는 것(수익률 2% 미만)은 실적으로 걸러냈습니다.

이렇게 나눈 이유는 곧바로 증명됐습니다. "시장지수"로 분류된 29개 종목 중 하나가 실제로는 전체 2위 수익률이었습니다. 유형만 믿었다면 좋은 종목 하나를 놓칠 뻔했습니다.

등급을 매길지도 고민했지만 만들지 않기로 했습니다. 미국은 "50년 연속 증가" 같은 긴 이력이 있어 등급이 의미가 있었지만, 국내 ETF는 대부분 상장 3년이 안 돼 압축할 이력이 없었습니다. 등급을 매기면 판정을 내리는 주체가 시스템이 되는 셈이라, 대신 "조건을 이렇게 두면 결과가 이렇다"는 규칙만 보여주기로 했습니다.

두 기준을 통과한 결과, 1,155개는 45개로 좁혀졌습니다.

45개, 그리고 화면이 됐다

기준이 정해진 뒤엔 화면만 남았습니다. 국내는 배당락일·기준일·지급일이 서로 달라 3단 토글을 만들고, 매달 들어오는 현금은 "월별 현금 사다리"로 보여주되 빈 달은 점선 자리로 남겨 구멍이 눈에 띄게 했습니다. "이 날 사면 못 받습니다" 같은 해석 문구는 매뉴얼로 옮기고, 종목명 대신 코드로 표시하는 등 화면을 보며 몇 차례 더 다듬었습니다.

✅ 결과 (After)

Before vs After

항목

Before

After

"뭘 믿고 뭘 뺄까"

전체 리스트를 그대로 보거나 수작업 필요

유형·실적 두 기준으로 45개까지 좁힘

데이터 신뢰성

확인할 방법 없음

3개 소스를 검증 후 결합, 조용한 실패를 막는 검증 루프

공공데이터포털 호출

설계 없이 시작하면 하루 한도(10,000건) 순식간에 초과

하루 3회로 안정화

관리 범위

미국 배당만

국내·미국 배당 + 투자 전략까지 한 곳에서, 시뮬레이션과 연결

결과물

한국어 텍스트가 포함된 달력의 스크린샷
  • 국내 배당 ETF 45종목 편입

💬 이 과정에서 배운 AI 활용 팁

효과적이었던 것

  1. "뭘 걸러낼까"를 숫자 하나로 뭉치지 않고, 성격이 다른 것과 목적에 못 미치는 것을 나눠 물었다 — 분류만 믿었으면 놓쳤을 종목을 구했다

  2. 코드를 짜기 전에 데이터 소스부터 비교·검증하게 시켰다 — 후반 수정을 크게 줄여줬다

  3. "계산해서 추정해야 한다"는 답을 그대로 받아들이지 않고 되물었다 — 이미 있는 데이터를 놓치고 있었다는 게 드러났다

  4. 이상하게 딱 떨어지는 숫자(매달 정확히 30건)를 그냥 넘기지 않았다 — 데이터가 잘렸다는 신호였다

  5. 소스를 합칠 때 값의 성격(사실 vs 계산값)별로 우선순위를 정하고, 합치기가 제대로 됐는지 확인하는 절차를 판정 전에 뒀다 — 병합 실패가 그럴듯한 사유로 둔갑하는 걸 막았다

이렇게 하면 안 돼요

  1. "기준을 잡아서 일부만 수집하자"고 지시했지만, 그 기준이 실제로 어디에 적용되는지 확인하지 않았다 — AI가 판정에만 기준을 적용하고 수집은 전량으로 하고 있어 하루 조회 한도를 다 쓸 뻔했다

  2. 검증을 통과했다고 안심하면 안 된다 — "아는 값"만 확인하는 검증은 통과해도 실제 화면에서는 다른 문제가 나올 수 있다

🌍 다른 업무에 적용한다면?

"후보가 너무 많은데 뭘 믿고 뭘 걸러야 할지 모르겠다"는 문제라면 같은 접근을 쓸 수 있습니다(여러 공급업체 중 계약할 곳 고르기, 여러 이력서 중 서류 통과자 고르기 등). 기준을 하나로 뭉치지 말고 "성격이 달라서 빼는 것"과 "실적이 못 미쳐서 빼는 것"을 나눠보면, 분류만으로는 놓쳤을 좋은 후보를 구할 수 있습니다.

🚀 앞으로의 계획

국내·미국 배당과 투자 전략까지 갖췄으니, 다음은 실제로 보유한 자산을 관리하는 보유 포트폴리오와 전략을 미리 시험해보는 가상 투자 포트폴리오로 확장할 계획입니다. 개별 관심종목(임박한 배당 순 목록)도 이어서 지원할 예정입니다.

📋 재사용 가능한 프롬프트

프롬프트 1: 걸러내는 기준을 두 가지로 나눠 설계하기

[후보 목록]에서 무엇을 보여줄지 정해야 해. 기준을 하나로 뭉치지 말고 두 가지로 나눠줘 — 성격 자체가 달라서 빼야 하는 것과, 목적에 못 미쳐서 빼야 하는 것. 각 기준으로 제외된 항목 중 놓치면 아까운 게 있는지도 확인해줘.

프롬프트 2: 코딩 전에 데이터 소스부터 검증시키기

코딩 시작 전에 [사용할 데이터]의 출처 후보를 비교해줘. 각 소스가 어떤 값을 제공하는지, 신뢰도와 한계는 무엇인지 정리해줘. [특정 사례 하나]로 실제 값을 검증해서 보여줘.

프롬프트 3: AI의 전제를 재질문으로 검증하기

[AI가 "계산/추정해야 한다"고 답했을 때] 왜 그걸 계산해야 하는거야? [원하는 정보]가 이미 어딘가에 정보로 제공되는 게 아니야? 다시 확인해줘.

4
2개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.