데이터 수집 목표
데이터·투자·재테크 스터디 1주차 실습을 따라, 서울 아파트 매매/전월세 실거래가(국토교통부 API), KB통계(아파트 가격지수), 주식/지수 데이터(삼성전자 등 대표 종목 + KOSPI/KOSDAQ)를 각각 API로 수집해서 로컬 DuckDB 하나에 정리해보고 싶었습니다.
활용한 도구
Claude Code: 프로젝트 초기 세팅부터 수집 스크립트 작성, 에러 디버깅까지 전 과정을 대화로 진행
UV: 파이썬 가상환경/의존성 관리
DuckDB + Polars: 데이터 저장 및 처리 (Pandas 대신 Polars 사용 — 스터디에서 강조한 메모리 이슈 회피 팁)
공공데이터포털 API: 국토교통부 아파트 매매/전월세 실거래가
PublicDataReader: KB통계(가격지수) — API 키 불필요
FinanceDataReader: 주식/지수 데이터 — API 키 불필요
데이터 수집 과정
실습 전용 폴더를 따로 만들고
uv init+uv venv로 가상환경 구성,duckdb/polars/publicdatareader/finance-datareader설치CLAUDE.md에 "Pandas 대신 Polars 우선 사용" 정책을 문서화해 이후 모든 작업에 자동 반영되게 함
공공데이터포털에서 아파트 매매 실거래·전월세 실거래 두 API를 각각 활용신청 → 승인 후 인증키를
.env에 저장(키는 채팅창에 입력하지 않고 파일을 직접 열어 입력)서울 25개 구 × 2025년 1월~2026년 6월 범위로 매매/전월세 데이터를 API로 수집해 DuckDB에 적재
KB통계(아파트 매매/전세 가격지수, 월간)를 PublicDataReader로 수집
삼성전자 등 5개 종목 + KOSPI/KOSDAQ 지수를 FinanceDataReader로 수집
시행착오와 해결책
전월세 API 403 에러: 매매 API는 바로 승인·정상 동작했는데 전월세 API는 승인 직후 한동안 403이 남. 시간을 두고 재시도하니 정상화됨 — 승인 반영에 지연이 있을 수 있다는 걸 배움
DuckDB ↔ Polars 연동 에러:
pyarrow패키지가 없어서 첫 수집 시도(서울 25개 구 전체, 약 20분 소요)가 저장 단계에서 실패. 라이브러리를 추가하고 처음부터 다시 수집해야 했음 → 앞으로는 저장 로직까지 먼저 소규모로 검증한 뒤 전체 수집을 돌리는 게 낫겠다고 판단KB통계 API 연결 끊김: PublicDataReader 라이브러리의 특정 함수가 브라우저 User-Agent 헤더 없이 요청을 보내서 KB 서버가 연결을 끊는 문제가 있었음. 요청에 User-Agent 헤더를 직접 주입해서 우회
배운 점과 향후 계획
같은 계정의 인증키라도 API별로 승인 반영 시점이 다를 수 있다는 것
대용량 데이터를 다룰 때 저장 파이프라인(이번엔 DuckDB 연동)까지 사전 검증하지 않으면, 수집 자체는 성공해도 마지막에 전부 날아갈 수 있다는 것
공공 API라도 서버마다 요구하는 요청 조건(헤더 등)이 다를 수 있어, 라이브러리를 그대로 믿기보다 응답을 직접 확인하는 습관이 필요하다는 것
2주차 실습(Streamlit 대시보드 제작)에 이 데이터를 바로 활용
매일 자동 수집되는 스케줄러(크론잡) 추가는 아직 안 했음 — 필요해지면 진행 예정
수집 범위를 서울 전체에서 관심 지역/종목으로 넓히는 것은 추후