📊 sunnypoint
개발일지

[2026-08-02]작업일지

6분 읽기

CMDP 통합과 한국시장 데이터 경계 복구

지난주 LangAlpha 분석 파이프라인에서 발생했던 7건의 실패 유형을 면밀히 복기하며 확정한 품질 개선 마스터 플랜을 실제 코드에 전면 반영했다. 이번 작업에서는 상용 시스템의 안정성을 해치지 않기 위해 트렁크 전체를 무차별 머지하는 방식 대신, CMDP 핵심 구현인 PR #312와 필요한 정확성 후속 커밋들만 체리픽하여 깔끔하게 통합했다. 무엇보다 데이터 검증 위치를 대폭 전환하여 답변을 생성할 때마다 API나 LLM으로 재검산하던 과중한 런타임 부담을 줄였다. 인제스트 시점에 단 한 번 검증을 거친 결과를 DataQualityMeta 메타데이터로 저장·전파하고, 답변 생성 단계에서는 이 품질 태그만 즉시 참조하도록 조치하여 전체 응답 속도와 자원 효율을 크게 끌어올렸다.

한국시장 데이터 스택의 세부 경계도 대폭 정비했다. 동일 종목(instrument identity)이더라도 KRX, NXT, 그리고 통합 피드(integrated)를 feed_variant 기준의 독립된 캐시 및 핀 네임스페이스로 엄격히 격리했다. 이와 함께 캐시 봉투(cache envelope) 버전을 v6로 올림으로써 과거 형식의 캐시 데이터와 충돌하는 문제를 근본적으로 차단했다. 시세 일봉 데이터 처리 역시 Kiwoom 일봉은 임시 데이터(provisional), KRX 공식 일봉은 최종 데이터(final)로 역할을 명확히 나누었으며, 임시 데이터가 최종 데이터로 교체될 때는 OHLC 시고저가 수치가 동일하더라도 리비전 번호가 증가하도록 설계하여 데이터 추적성을 확보했다. 만약 CMDP 기능 플래그가 비활성화된 환경에서는 404를 반환하여 웹 클라이언트가 기존 레거시 바 피드로 즉시 폴백(fallback)되도록 예외 처리도 꼼꼼히 유지했다.

데이터 품질 계약 강화와 Claim 원장 체계 구축

분석 리포트의 신뢰도를 높이기 위해 통화, 컨센서스, 검증 표현 전반에 걸친 품질 계약을 강화했다. 한국 상장 종목의 기준 시세 통화는 KRW로 엄격히 유지하되, 환율 적용 시점이나 출처(FX lineage) 정보가 없이 통화가 불일치하는 경우에만 강하게 차단하도록 설정했다. 통화 정보 자체가 누락된 경우에는 답변 전체를 차단하지 않고 limited 품질 라벨로 강등하여 유연성을 두었다. 미국 상장 한국 기업 ADR의 USD 표시나 환율 출처가 명시된 환산 수치는 정상 허용했고, 커버리지가 전혀 없는(coverage=0) 목표가는 즉시 차단하되 단순 표본 부족이나 집계 기간 미비는 제한적 표현으로 낮춰 출처와 한계를 명확히 설명하도록 조치했다. 또한 DART나 KRX 등 공인된 데이터 출처에서 최종 확정되기 전까지는 실적의 상회·하회를 단정 짓는 표현을 철저히 금지했다.

모델이 출력하는 분석 근거를 추적하기 위해 검증 표현 단계를 계산 확인, 동일 계열 대사, 독립 검증 세 가지로 정밀하게 분류했다. 답변 생성 시에는 구조화된 클레임 블록(terminal claim block)을 직접 출력하여 데이터베이스에 바로 저장하도록 만들었고, 각 클레임에는 수치, 통화, 단위, 기준시점을 명시하게 했다. 이전 클레임과의 연결 고리를 유지하기 위해 활성 클레임의 식별자와 스탠스(stance), 타임 호라이즌을 모델에 주입함으로써, 모델이 기존 의견을 수정할 때 변경 사유와 증거 차이(evidence_delta)를 명확히 기록하도록 조치했다. 근거 설명 없는 임의 변경은 unexplained_revision으로 자동 판정하도록 파이프라인을 구축했다.

자동화 진단, 실시간 언어 교정 및 종합 회귀 검증

운영 자동화와 오류 진단 체계도 한 단계 끌어올렸다. 데이터베이스 마이그레이션(023)을 적용하여 오류 발생 단계와 상세 에러 코드를 전용 필드에 안전하게 보관하도록 개선했다. 특히 한국어 리포트 생성 시 코드 블록, URL, 숫자, 티커(ticker), ASCII 식별자, 클레임 JSON 구성을 검사 대상에서 제외함으로써 언어 위반 검사 도중 발생하던 오탐 현상을 대폭 축소했다. 만약 브리핑 자동 발행 시 언어 위반이 감지되면, 동일한 수집 데이터팩을 유지한 상태에서 위반 내역을 반영한 교정 프롬프트를 통해 즉시 1회 재배포를 시도하는 자동 복구 로직을 장착했다.

클레임 원장 구조를 신설하는 마이그레이션(024)을 마무리한 뒤, 주간 클레임 평가 스크립트(score_claims_weekly.py)를 구현하여 5거래일 기준 방향 적중률, 목표가 진입 여부, 그리고 최대 불리적 진입 폭(max_adverse_excursion_pct)을 자동 집계하도록 만들었다. 기존 추정 오차 표기에서 발생하던 용어 혼선을 정리하기 위해 절대 오차와 비율 오차 필드를 명확히 분리했다. 실측 검증 단계에서는 삼성전자(005930) 등 실제 상장 종목을 대상으로 KRX 및 Kiwoom 라이브 섀도 테스트를 성공적으로 진행했으며, NXT 미지원 종목에서 발생하던 시세 누락 건을 no-coverage 상태로 원천 강등 조치했다. 백엔드 유닛 테스트 5,391건과 프론트엔드 테스트 1,902건을 포함해 코드 스타일 및 정적 분석까지 모두 통과하여 안정적인 배포 준비를 완료했다.

오늘의 소감

잘 고친다고 고쳤으나, 생각보다 각국가의 환율이나 정보 오차가 완벽하게 고치는게 쉬운 일은 아닌거 같다.

금융시장에서 환율부터 시작해서 생각보다 간단한거 같으나, 의뢰로 처리해야 할 예외가 많다.

#개발일지

의견 나누기

💬 GitHub Discussions 댓글 위젯 영역 (Giscus 활성화 예정)