지난 1화에서 사이트를 만들기 시작한 이유까지 적었습니다. 오늘은 그다음 단계 — "한국 주식 데이터는 어디서 어떻게 모으는가"에 대한 시행착오를 정리합니다.
미국 주식이라면 야후 파이낸스나 Alpha Vantage 같은 무료 데이터 소스가 잘 정리되어 있지만, 한국 주식은 데이터가 여러 기관에 분산되어 있고 형식도 모두 다릅니다. 처음 3개월은 분석 로직보다 데이터 정리에 더 많은 시간을 들였습니다.
한국 주식 데이터의 3대 출처
| 출처 | 제공 데이터 | 접근 방식 | 비용 |
|---|---|---|---|
| 한국거래소 (KRX) | 시세, 거래량, 외국인·기관 수급, 공시 일정 | KRX 정보데이터시스템, Open API | 무료 (일부 제한) |
| 금융감독원 DART | 재무제표, 사업보고서, 공시 원문 | OpenDART API | 무료 |
| 증권사 OpenAPI | 실시간 시세, 호가, 잔고, 주문 | 키움·KIS API | 무료 (계좌 필요) |
세 가지 출처는 제공 데이터가 겹치는 부분도 있고 다른 부분도 있어서, 어떤 데이터를 어디서 받을지 매핑하는 게 첫 번째 과제였습니다.
KRX 데이터 — 가장 기본이지만 가장 까다로움
KRX는 한국 주식 데이터의 1차 출처입니다. 일일 종가, 거래량, 외국인·기관 순매수가 모두 여기서 시작됩니다.
장점
- 가장 권위 있는 원천 데이터
- 일별·종목별 모두 제공
- 외국인·기관·개인 수급 분리 데이터 있음
시행착오
처음에는 KRX 정보데이터시스템(data.krx.co.kr)에서 직접 데이터를 받아 봤습니다. 그런데 다음 문제가 있었습니다.
- API가 공식 문서화되어 있지 않음 — 사이트 자체의 비공개 엔드포인트를 추적해야 함
- 요청 헤더가 까다로움 — Referer, User-Agent 같은 헤더가 정확해야 응답 옴
- CSV 다운로드는 가능하지만 자동화에 부적합 — 매일 수동 다운로드는 비현실적
- 종목 코드 형식이 통일 안 됨 — 어떤 페이지에서는 6자리 숫자, 어떤 페이지에서는 7자리 (앞에 'A' 붙음)
결국 KRX 데이터 수집 자동화에만 2주 정도 소요됐습니다.
해결
- 비공식 API 엔드포인트를 분석해 정기 수집 스크립트 작성
- 종목 코드는 항상 6자리 숫자로 통일하는 정규화 함수 도입
- 요청 실패에 대비한 재시도 로직 (지수 백오프)
OpenDART — 재무 데이터의 보고
금융감독원 전자공시(DART)는 한국 상장사의 재무 데이터, 사업보고서, 공시 원문을 받을 수 있는 곳입니다. OpenDART API로 자동 수집이 가능합니다.
장점
- 공식 API + 공식 문서 존재
- API 키 발급이 간단 (이메일 인증)
- XBRL 형식의 구조화된 재무 데이터 제공
시행착오
- API 호출 한도 — 일일 1만 회 제한. 종목 2,500개 × 분기 4 × 항목 30개 계산하면 한도 초과 위험
- 공시 시점 vs 실제 결산 시점의 차이 — 분기보고서는 결산일 후 45일 안에 제출되지만, 데이터 활용 시점은 시장과 시차 있음
- 재무 항목 명칭 불일치 — 같은 "영업이익"도 회사마다 표기 방식이 미묘하게 다름 (XBRL 태그는 통일되어 있으나 실제 활용에는 추가 정제 필요)
- 연결 vs 별도 — 어떤 기준을 쓸지 사전에 결정 필요
해결
- 호출 한도 절약을 위해 종목별 분기마다 1회만 수집, 로컬 캐시 활용
- 재무 데이터는 발표 후 5거래일 지난 시점부터만 활용 (시차 반영)
- 연결 기준을 기본으로 하되, 별도 기준만 보고하는 종목은 예외 처리
증권사 OpenAPI — 실시간 영역
KRX·DART는 일별 데이터까지가 한계입니다. 실시간 호가, 분 단위 시세, 실거래 주문이 필요하면 증권사 API를 써야 합니다.
대표적으로 키움증권 OpenAPI+와 한국투자증권 KIS Developers API가 있습니다.
| 항목 | 키움 OpenAPI+ | KIS Developers |
|---|---|---|
| 접근 방식 | Windows OCX | REST API |
| 운영체제 제약 | Windows 전용 | 모든 OS |
| 인증 | HTS 로그인 기반 | OAuth 토큰 |
| 자동화 친화성 | 낮음 (GUI 의존) | 높음 |
| 모의투자 지원 | 있음 | 있음 |
저는 처음에 키움 OpenAPI+로 시작했지만, Windows 전용에다 OCX 의존성 때문에 자동화가 까다로워 KIS Developers로 갈아탔습니다.
시행착오
- 토큰 갱신 — KIS API는 24시간마다 토큰 갱신 필요. 자동 갱신 로직 구현 필수
- 호출 빈도 제한 — TPS 제한이 있어 한 번에 종목 200개를 동시 조회할 수 없음
- 시세 vs 잔고 API의 권한 분리 — 시세 조회만 쓸 거면 별도 권한 신청 불필요하나, 잔고·주문 API는 추가 동의 필요
가장 큰 함정 — 데이터 정합성
세 출처에서 같은 종목의 같은 시점 데이터를 받아도 미묘하게 다른 경우가 있습니다.
| 함정 | 사례 |
|---|---|
| 종목 코드 표기 | KRX는 6자리, 일부 API는 7자리(A 접두), DART는 회사 고유번호(corp_code) |
| 종목명 변경 이력 | 같은 종목이 사명 변경하면 과거 데이터 매칭이 끊김 |
| 액면분할·합병 | 가격이 갑자기 1/10이 되거나 합쳐짐 |
| 휴장일 처리 | 같은 거래일이 출처마다 다르게 표기되는 경우 |
특히 종목 코드 매핑이 가장 큰 문제였습니다. 결국 별도 "코드 매핑 테이블"을 만들어 (KRX 6자리 ↔ DART corp_code ↔ 증권사 API 코드)를 모두 연결하는 마스터 테이블을 운영하게 됐습니다.
결측치와 이상치 처리
데이터를 모은 후 절반의 시간은 정제에 들어갔습니다.
자주 발생하는 결측치
- 거래정지 종목의 일별 시세 (가격 없음)
- 신규 상장 종목의 과거 데이터 (날짜 없음)
- 외국인 보유율 미공시 종목
자주 발생하는 이상치
- 액면분할 직후 가격 급변 (분할 비율 적용 필요)
- 무상증자 권리락 (가격 단절)
- 비정상 거래 (장중 일시 가격 폭등 후 회복)
이런 케이스마다 처리 규칙을 만들어 두지 않으면 분석 결과가 왜곡됩니다. 예를 들어 액면분할 종목의 60일 수익률을 그대로 계산하면 -90%가 나오는데, 실제로는 가격이 같은 경우가 많습니다.
정리 — 데이터 인프라가 분석의 절반
지금 돌이켜 보면, 분석 모델을 만드는 시간보다 데이터 인프라를 안정화하는 시간이 훨씬 많이 들었습니다. 그리고 이 부분이 데이터 기반 도구의 신뢰성을 결정합니다.
분석 로직은 언제든 바꿀 수 있지만, 데이터가 잘못되면 분석 결과를 검증할 수도 없습니다. "쓰레기를 넣으면 쓰레기가 나온다"는 말이 가장 자주 떠올랐던 시기입니다.
| 단계 | 비중 (체감 시간) |
|---|---|
| 데이터 수집 자동화 | 30% |
| 데이터 정합성 맞추기 | 25% |
| 결측치·이상치 처리 | 15% |
| 분석 모델 설계 | 20% |
| 시각화·UI | 10% |
이 비율이 한국 주식 데이터 분석 도구를 직접 만들어 본 사람의 일반적인 시간 배분이라고 봅니다.
다음 화 예고
다음 3화에서는 "왜 점수와 신호를 분리하기로 했나"를 다뤄 보려 합니다. 데이터를 모으고 점수를 매기는 데까지 왔지만, 그 점수를 그대로 매수·매도 신호로 쓰지 않기로 결정한 배경 이야기입니다.
사이트 → https://www.leetrader.kr
블로그 → https://www.leetrader.kr/blog
이전 화 → 개발 일지 1화 (왜 만들기 시작했는가)
정리된 데이터가 어떻게 보이는지 확인
본 글에서 다룬 KRX·DART·증권사 API 데이터가 실제로 어떻게 정리되어 한 화면에 표시되는지 운영 화면에서 직접 보실 수 있습니다.
https://www.leetrader.kr/app
본 글은 Lee Trader Lab 운영자가 직접 작성한 개발 일지입니다.
본 시리즈는 시스템 개발 과정에 대한 기록이며, 특정 종목의 매수·매도 권유나 투자 자문이 아닙니다.
투자 판단과 손익 책임은 투자자 본인에게 있습니다.
'주식 추천 시스템 개발' 카테고리의 다른 글
| 2026년 6월 2일 오늘의 시장 국면 진단 — AI 분석 (0) | 2026.06.03 |
|---|---|
| 2026년 6월 2일 AI 모델이 눈여겨본 종목 5개 (0) | 2026.06.02 |
| 주식 종목을 찾는 시스템을 만들어 봤어요. (0) | 2026.06.02 |
| AI 주식 분석 사이트를 직접 만들기 시작한 이유 — 평범한 개인 투자자의 개발 일지 (0) | 2026.05.29 |
| AI 주식 추천 점수만 믿으면 안 되는 5가지 이유 — 그래서 어떻게 활용해야 할까 (0) | 2026.05.28 |
| AI로 코스피·코스닥 200여 종목을 매일 분석해주는 무료 사이트 — Lee Trader Lab (0) | 2026.05.27 |
| 04_서버 이관에 용이한 Docker로 구성(주식추천시스템) (0) | 2026.04.20 |