데이터파이프라인

무료 데이터 소스 두 곳이 동시에 멈춘 날: 수집 계층의 이중화 설계

2026. 08. 22

거래소 시세 시스템 장애와 공시 API 호출 한도 소진이 겹치며 데이터 수집이 전면 중단됐습니다. 무료 공공 데이터에 의존하는 개인 프로젝트에서 소스 이중화를 어떻게 설계했는지, 실패한 우회 시도들과 함께 기록합니다.

프로젝트 배경

소속
개인 연구 프로젝트 (진행중)
프로젝트
stock-kg · 한국 주식시장 지식그래프
기간
2026 ~ 진행중
담당
단독 · 온톨로지 설계-파이프라인-백테스트

한국 주식시장의 공시·뉴스·수급 데이터를 지식그래프로 적재해 투자 가설을 검증하는 개인 연구 프로젝트입니다. 예산 없이 무료 공공 소스(DART OpenAPI, 거래소 데이터, RSS)만으로 운영하며, 매일 자동 수집이 돌아야 신호 파이프라인이 유지됩니다. 이 글은 ADR-017에 해당하는 구간의 기록입니다.

데이터파이프라인크롤링장애대응지식그래프ADR

1. 연구 배경: 무료 소스 위에 세운 일일 파이프라인

이 프로젝트의 수집 계층은 전부 무료 소스입니다. 공시는 DART OpenAPI, 종목 마스터와 수급은 거래소 데이터를 감싼 라이브러리, 뉴스는 금융 RSS. 매일 정해진 시각에 수집이 돌고, 그 데이터가 지식그래프에 적재되어야 다음 날 신호 계산이 가능합니다.

무료 소스의 대가는 통제 불가능성입니다. SLA도, 지원 창구도, 사전 공지도 없습니다. 이 사실을 머리로는 알고 있었지만, 설계에 반영한 것은 두 소스가 같은 시기에 멈춘 뒤였습니다.

2. 문제 정의: 이틀에 걸친 동시 장애

이틀 사이에 두 가지 장애가 겹쳤습니다.

거래소 시세 시스템 다운. 종목 마스터와 수급 데이터를 가져오던 경로가 모두 실패했고, 24시간이 지나도 복구되지 않았습니다. 라이브러리 문제가 아니라 원천 시스템의 장애라 할 수 있는 것이 없었습니다.

DART API 호출 한도 소진. 공시 상세 보강과 과거분 백필을 병행하다 일일 1만 호출 한도에 도달했습니다. 자정 리셋까지 대기 외에는 방법이 없습니다.

두 소스가 동시에 막히자 파이프라인의 실태가 드러났습니다. 새 가설 검증에 필요한 데이터 적재가 멈추고, 모의운용 신호의 핵심 입력(수급)이 끊기고, 종목 마스터 갱신도 불가능했습니다. 단일 출처 의존은 기능이 아니라 운영 리스크라는 것이 이날의 결론이었습니다.

3. 기술적 난점: 우회 시도의 실패 기록

대체 경로를 찾는 과정에서 시도한 것들이 전부 성공하지는 않았습니다. 실패한 시도를 먼저 기록합니다.

시도결과
거래소 사이트 직접 스크래핑차단 — anti-scraping이 강해 우회 비용이 이득을 초과
수급 라이브러리의 다른 엔드포인트원천 사이트 개편으로 엔드포인트 폐기, 동작 불능
포털 공매도 잔고 페이지404 — 해당 경로 자체가 폐기됨

난점은 세 가지였습니다. 첫째, 대체 소스도 결국 HTML 페이지라 구조 변경에 취약합니다. 둘째, 같은 데이터라도 소스마다 단위와 집계 기준이 다릅니다(주식 수 기준 vs 금액 기준). 셋째, 크롤링에는 허용 범위 문제가 있습니다. robots.txt와 이용 관행상 개인 분석 수준은 허용 영역이지만, 대량·상업적 수집은 아닙니다. 사용량을 그 경계 안에 묶어야 했습니다.

4. 대안 검토

1안. 유료 데이터 서비스 도입

  • 장점: SLA와 정형화된 데이터. 장애 리스크의 근본 해소.
  • 단점: 개인 연구 프로젝트의 비용 구조에 맞지 않고, 기존 그래프 스키마와의 결합 작업도 별도로 필요합니다. 무료 소스로 가능한 범위를 소진하기 전에는 시기상조로 판단했습니다.

2안. 공공 뉴스 아카이브 API (언론재단)

  • 장점: 포털보다 정형화된 데이터.
  • 단점: 별도 가입·키 발급 절차가 있고, 당장의 장애 대응에는 과합니다. 후순위로 보류했습니다.

3안. 포털 금융 페이지를 보조 소스로 추가

  • 장점: 종목별로 미리 분류된 뉴스(개체 인식 불필요)와 1년치 이상의 수급 이력을 페이지네이션으로 확보 가능. 무료이며 기존 장애 소스와 인프라가 분리되어 있습니다.
  • 단점: HTML 파싱 의존 — 페이지 개편 시 깨집니다. 동일 데이터의 중복 적재 문제도 생깁니다.

5. 설계 결정 및 근거: 보조 소스 추가와 출처 분리 원칙

3안을 채택하되, 두 가지 원칙을 함께 정했습니다.

출처를 데이터에 라벨로 남깁니다. 보조 소스에서 온 수급 데이터는 기존 데이터와 같은 노드 타입으로 적재하되 출처 필드를 분리했습니다. 두 소스는 단위·집계 기준이 달라 섞으면 오염되는데, 라벨이 있으면 분석 시점에 어느 출처의 결과인지 항상 구분할 수 있고, 단위 통합은 별도 작업으로 미룰 수 있습니다.

소비 측 인터페이스는 바꾸지 않습니다. 가설을 표현하는 Cypher 쿼리는 노드 타입의 통일된 인터페이스만 바라보므로, 수집 소스가 바뀌어도 가설 코드는 한 줄도 변경되지 않습니다. 수집 계층의 장애 대응이 검증 계층으로 전파되지 않게 하는 격리입니다.

운영 절차도 명문화했습니다. 평상시에는 기존 소스의 정기 수집을 유지하고, 장애 시에만 보조 소스 백필 스크립트를 수동 실행합니다. 보조 소스를 상시 병행 수집하지 않는 것은 사용량을 개인 분석 범위 안에 묶기 위한 결정입니다.

6. 실험 결과

이중화 이후의 변화입니다.

항목이전이후
주 소스 장애 시 수급 수집전면 중단보조 소스로 지속
수급 계열 보조 수집 모듈없음4종 (일별 수급 · 펀더멘털 · 공매도 · 시세)
가설 쿼리 수정 필요0건 (인터페이스 불변)

뉴스는 이와 별도로 상시 RSS 수집(다중 매체 폴링 + 근접 중복 제거 + NER 종목 매핑)이 누적되는 구조로 운영되며, 커버리지가 시간과 함께 자랍니다. 현재 55만 건 이상이 그래프에 적재되어 감성 feature의 입력이 되고 있습니다.

한계도 그대로 남습니다. HTML 파싱 의존은 구조 변경 한 번이면 깨지는 취약성이고, 공매도 잔고처럼 무료 경로가 전부 막힌 데이터는 여전히 미해결로 남아 있습니다. 유료 데이터 외에는 답이 없을 수 있다는 것도 기록해 둡니다.

7. 결론 및 시사점

무료 소스 의존 시스템에서 이중화는 선택이 아니라 전제입니다. SLA 없는 소스는 반드시 멈추고, 하필 여러 개가 같이 멈춥니다. "멈추면 어떻게 되는가"를 장애가 나기 전에 설계에 반영해야 합니다.

이종 소스 통합의 핵심은 병합이 아니라 구분입니다. 단위가 다른 데이터를 서둘러 합치는 대신 출처 라벨로 분리 적재하면, 오염 없이 확보부터 할 수 있습니다. 통합은 언제든 할 수 있지만, 오염된 데이터를 되돌리기는 어렵습니다.

수집 계층의 변동을 소비 계층에서 격리하는 인터페이스가 유지보수 비용을 결정합니다. 소스가 바뀔 때마다 가설 코드를 고쳐야 했다면 이중화는 부채가 됐을 것입니다. 통일된 노드 인터페이스 덕분에 이중화가 자산이 될 수 있었습니다.