You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4.5 KiB

Phase 2 운영 Runbook

1. 목적

이 문서는 운영자가 Phase 2 수집 파이프라인을 실행, 점검, 재시도, 복구할 때 따르는 절차를 정의합니다.

2. 일일 운영 루틴

장 전 / 오전

  • SEC submissions poll 정상 동작 여부 확인
  • 전일 FINRA 파일 수집 완료 여부 확인
  • FRED 최신 observation lag 확인
  • source freeze 설정이 의도치 않게 켜져 있지 않은지 확인

장 후

  • Alpaca daily bars 적재 완료 여부 확인
  • SEC 신규 filing 유입량 점검
  • 실패 잡 및 quarantine 건수 확인
  • 데이터 품질 검증 리포트 확인

3. 기본 확인 명령

예시 명령은 프로젝트 CLI 이름에 맞게 조정합니다.

python -m apps.ops.show_recent_runs --limit 20
python -m apps.ops.show_failed_runs --since 24h
python -m apps.ops.show_checkpoints
python -m apps.ops.show_quarantine --since 7d

4. 특정 source 수동 실행

SEC poll

python -m apps.collector.sec_collector.main --mode poll --run-id MANUAL_SEC_POLL_001

Alpaca daily backfill

python -m apps.collector.alpaca_collector.main \
  --mode backfill \
  --symbols AAPL,MSFT,NVDA \
  --start-date 2026-01-01 \
  --end-date 2026-01-31

FRED sync

python -m apps.collector.fred_collector.main --mode poll

FINRA fetch

python -m apps.collector.finra_collector.main --mode poll

5. 실패 시 대응 절차

5.1 단일 run 실패

  1. job_runs에서 상태와 오류 유형 확인
  2. raw 파일이 쓰였는지 확인
  3. checkpoint가 잘못 전진했는지 확인
  4. retriable 이면 동일 파라미터로 재시도
  5. terminal 이면 source payload와 schema drift 여부 확인

5.2 같은 잡이 연속 실패

  1. source freeze 여부 확인
  2. 환경변수/자격정보/네트워크 상태 확인
  3. 최근 코드 변경 사항 확인
  4. 원문 payload 1건을 replay 하여 문제 재현
  5. 필요 시 해당 job freeze 후 다른 source는 계속 진행

6. Quarantine 처리

확인 항목

  • 어떤 source인가
  • 어떤 object type인가
  • 언제부터 발생했는가
  • 동일 원인 반복인가

절차

  1. quarantine raw와 sidecar 열람
  2. schema violation 또는 필수 필드 누락 원인 파악
  3. 파서/정규화 로직 수정 필요 여부 판단
  4. 수정 후 replay 수행
  5. 정상 결과 확인 시 quarantine 해제 또는 새 run으로 재처리

7. Checkpoint 복구

증상

  • 이미 처리한 데이터를 계속 다시 가져옴
  • 새 데이터가 안 들어옴
  • 특정 source만 오래 lag 발생

절차

  1. 현재 checkpoint 값 백업
  2. 최근 성공 run 기준 정상 위치 확인
  3. 필요한 경우 checkpoint reset 실행
  4. 작은 범위 backfill로 검증
  5. 문제 없으면 정상 poll 재개

주의:

  • checkpoint reset은 운영자 수동 승인 후에만 수행
  • reset 전 snapshot 기록 필수

8. Replay 절차

Replay는 raw를 다시 해석하거나 구조화할 때 사용합니다.

예:

python -m apps.collector.sec_collector.main \
  --mode replay \
  --raw-path data/raw/sec/2026-03-12/.../filing.txt

확인할 것:

  • replay run_id가 따로 생성되었는가
  • 외부 API 호출이 발생하지 않았는가
  • structured row가 기대한 대로 갱신되었는가

9. 데이터 이상 탐지 시 판단 기준

SEC

  • 특정 대형 종목 filing이 비정상적으로 누락됨
  • filing_date 또는 accession 누락
  • 99.1 artifact가 갑자기 전부 사라짐

Alpaca

  • 전일 bars가 없거나 너무 적음
  • OHLC 순서 이상
  • volume이 0 또는 과도하게 작음

FRED

  • 최신 observation이 지나치게 오래 갱신되지 않음
  • series metadata가 바뀜

FINRA

  • 파일 헤더 형식 변경
  • symbol row 급감
  • ratio 계산 불가 행 급증

10. 일시적 중단(Freeze/Drain)

Freeze

신규 실행을 즉시 막습니다.

Drain

현재 실행만 마무리하고 다음 스케줄부터 멈춥니다.

사용 예:

  • source 응답 포맷 변화 의심
  • 저장 계층 장애
  • 코드 배포 직후 이상 발견

11. 운영자가 반드시 남겨야 하는 기록

  • 문제 발생 시각
  • 영향 받은 source/job
  • 영향 범위(날짜/심볼/CIK)
  • 임시 조치
  • 영구 수정 필요 여부
  • replay/backfill 수행 여부

12. 운영 종료 체크

  • 실패 run이 남아 있지 않은가
  • checkpoint lag가 허용 범위 내인가
  • quarantine 신규 건이 있는가
  • raw/staging/structured count가 대체로 합리적인가
  • 다음 배치를 막는 freeze가 켜져 있지 않은가