데이터가 스스로 깨끗해지는 시스템
3줄 요약
- 시장 데이터를 수집하고, 계약(스키마)에 맞게 적재하고, 건강 게이트로 검증한 뒤에만 하류에 공급하는 파이프라인을 3개의 물리적으로 분리된 시스템으로 구축했다.
- 매일 아침 수집→리서치→집행이 사람 개입 없이 연쇄 실행되며, 앞 단계가 불량이면 뒤 단계가 자동 차단된다 — 더러운 데이터는 아예 흐르지 못한다.
- 실자본이 걸린 실행 계층은 fail-closed(불확실하면 멈춤)로 설계 — 리스크 게이트를 통과하지 못한 어떤 주문도 나가지 않는다.
1. 문제 — 데이터 시스템은 수집이 아니라 신뢰가 어렵다
자동매매·리서치 시스템을 만들며 확인한 것: 데이터를 모으는 코드는 하루면 짠다. 어려운 것은 그 다음 전부다.
- 수집이 조용히 끊겨도 아무도 모른다 — 3주 뒤 백테스트가 구멍 난 데이터로 돌아간다.
- 수집기와 분석기가 같은 폴더에 살면, 분석 코드가 원본 데이터를 “살짝 고치는” 순간부터 진실이 사라진다.
- 연구 결과가 좋아 보여도, 그것이 실행돼도 되는 근거(데이터 품질·전략 검증)가 코드 어디에도 없다.
2. 설계 — 경계는 폴더가 아니라 계약으로 긋는다
시스템을 역할별로 3개의 독립 저장소로 물리 분리하고, 사이는 문서화된 계약으로만 잇는다.
[수집] ──lake-schema 계약──▶ [연구] ──strategy-artifact 계약──▶ [집행/관제]
canonical 데이터 레이크 팩터·백테스트 3트랙 운용
읽기 전용 서빙 검증된 아티팩트만 산출 리스크 게이트·fail-closed
- 수집 계층: canonical 레이크를 유지하고 소비자에게 읽기 전용으로 서빙. 스키마 변경은 계약 문서(
lake-schema) 경유 + 결재로만 — 하류가 모르는 컬럼 변경이 원천 봉쇄된다. Point-in-Time 원칙으로 “그 시점에 알 수 있었던 것”만 기록해 미래 정보 누출을 차단. - 연구 계층: 레이크를 소비해 전략 아티팩트를 만든다. 산출물은 자유 형식이 아니라 인터페이스 계약(
strategy-artifact)을 충족하는 것만 실행 계층이 받는다. - 집행 계층: 관제탑이 페이퍼 2트랙 + 화이트리스트 실주문 1트랙을 운용. 모든 주문은 리스크 게이트 통과가 필수이고, 상태 머신 밖의 실행 로직은 금지. 출금 자동화·거래소 간 자금 이동은 설계 차원에서 존재하지 않는다.
3. 운영 — 매일 아침, 사람 없이
| 시각 | 단계 | 실패 시 |
|---|---|---|
| 09:00 | 증분 수집 + 건강 게이트 | 하류 전체 자동 차단 |
| 09:15 | 리서치 사이클 — 가동 중 전략의 건강도 재평가, 신규 후보는 페이퍼로 성적 누적 | 해당 전략 강등 |
| 09:25 | 3트랙 집행 (페이퍼 2 + 화이트리스트 실주문 1) | fail-closed 정지 |
이 루프가 “자체 피드백으로 데이터와 전략이 정제되는” 구조다: 수집 품질이 게이트에서 걸러지고, 배포된 전략의 실측 건강도가 다음 날 리서치의 입력이 되고, 검증 안 된 것은 페이퍼 트랙에 격리된 채 성적만 쌓는다. 승격은 데이터가 결정하고, 정지는 시스템이 결정한다.
테스트는 집행 계층에만 221개 — 돈이 걸린 경로일수록 회귀 커버리지를 집중 배치했다. 전 파이프라인은 전용 서버에서 24/7 가동 중이다.
4. 결과 — 어디에 팔리는 역량인가
이 아키텍처는 트레이딩 전용이 아니다. “여러 소스에서 데이터를 모아, 믿을 수 있는 상태로 만들어, 업무에 자동 공급한다”는 문제는 재고·매출·마케팅 성과·연구 데이터 등 모든 도메인에서 동일하다.
- 데이터 파이프라인 구축: 수집→계약 적재→품질 게이트→서빙의 표준 골격 이식
- 레거시 데이터 정비: “시트는 많은데 믿을 수 없다”에 대한 실증 방법론 (→ 마케팅 대행사 A 케이스의 14,824행 이관·정규화와 동일 원리)
- 미션 크리티컬 자동화: fail-closed·리스크 게이트·승인 체인 — 틀리면 돈이 나가는 시스템을 다뤄 본 설계 규율
방법론 박스 — 재사용되는 원칙
- 경계는 계약으로. 시스템 간 인터페이스는 폴더 구조가 아니라 문서화된 스키마 계약 + 변경 결재로 지킨다.
- 게이트가 흐름을 지배한다. 품질 검증을 통과하지 못한 데이터는 하류로 흐르지 못하게 — 알림이 아니라 차단.
- fail-closed. 돈이 걸린 시스템은 불확실할 때 멈추는 것이 정상 동작이다.
- 승격은 실측으로. 새 로직은 격리 트랙에서 성적을 쌓고, 승격 기준을 넘을 때만 실전에 들어간다.