본문 바로가기
C.W.K.
Stream
Lesson 01 of 05 · published

모든 Quote 는 Observation 이야

~11 min · provenance, observation-data, metadata, trust

Level 0Open Gate
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"가격은 세상에 대한 사실이 아니야. 어느 source 가 어느 순간에 뭐라고 했는지에 대한 사실이지. 그렇게 저장해."

시장 데이터는 observation 데이터야

주가를 그냥 숫자 하나로, '그 가격' 으로 생각하고 싶어지지. 근데 세상 어딘가에 읽히길 기다리는 '그' 가격 같은 건 없어. 있는 건 특정 provider 가 특정 거래일에 대해 특정 시각에 보고한 값뿐이야. Keep 는 그 겸손을 데이터 모양에 그대로 새겼어. 모든 quote 와 FX row 는 observation 이고, 값 옆에 네 가지가 따라붙어. 적용되는 market date, 가져온 fetch 시각, 알려준 source, 그리고 사용된 provider ticker. 숫자가 맨몸으로 저장되는 일은 없어.

메타데이터가 선택사항이 아닌 이유

provenance 조각 하나하나가 언젠가 반드시 나올 질문에 대비하는 거야.

  • market date — 이거 오늘 종가야? 아니면 연휴로 시장이 닫혀 있어서 지난 금요일 값이야?
  • fetch 시각 — 이 observation 은 지금 얼마나 묵었어? 5초 전에 가져온 거야, 5시간 전 거야?
  • source — primary 한테서 온 값이야, 확인 거친 fallback 한테서 온 값이야? 둘은 미묘하게 다를 수 있고, 어느 쪽을 보고 있는지는 알아야지.
  • provider ticker — 그 provider 의 어떤 심볼로 얻은 값이야? ticker 표기법은 source 마다 다르고, 여기서 어긋나면 아주 미묘한 부류의 버그가 태어나.

이 중 하나라도 떼어 내면 값은 더 믿음직해 보이면서 실제로는 덜 믿을 만해져.

provenance 는 데이터의 일부지, 곁다리 장식이 아니야. 출처도 날짜도 나이도 댈 수 없는 값은 추론에 쓸 수 없는 값이야. 메타데이터는 디버깅하다 필요하면 붙이는 부속이 아니라, 맨숫자를 조심스러운 사람이 믿어도 되는 무언가로 바꿔 주는 본체야.

이 습관이 사 오는 차분함

이건 북극성 얘기로 곧장 이어져. 모든 숫자가 제 provenance 를 달고 다니니, Keep 는 낡은 값을 신선한 척 꾸미거나 출처를 얼버무릴 필요가 없어. 그냥 보여주면 돼. "이 가격, 이 source, 이 날짜 기준, 40분 경과." 이 정직함이 화면을 차분하게 지켜 줘. 알고 보니 낡았던 자신만만한 숫자에 뒤통수 맞을 일이 없으니, 도구 전체를 의심하게 되는 그 불쾌한 학습도 일어나지 않아.

아키텍처 전체가 같은 모양이야. provenance 달린 observation 은 이미 본 패턴의 시장 데이터 버전이야. 현금은 source 태그와 함께 저장되고, fallback 은 스스로 자백하고, 이력은 날짜를 달고 append-only 로 쌓여. Keep 는 자리만 바꿔 가며 같은 말을 반복하고 있는 거야. 값과 그 값의 출처 이야기는 언제나 함께 다닌다.

Code

숫자는 혼자 다니지 않는다·python
# 이렇게 하지 마. 맨가격은 저장되는 순간 자기 이야기를 잃어.
price = 187.42

# 이렇게 해. observation 은 제 provenance 를 달고 다녀.
quote = {
    "value": 187.42,
    "market_date": "2026-07-24",     # 적용되는 거래일
    "fetched_at":  "2026-07-24T20:11:03Z",
    "source":      "massive",         # primary? 확인 거친 fallback?
    "provider_ticker": "TICK",        # 그 provider 쪽 심볼
}

# 이제 downstream 의 누구든 추측 없이 답할 수 있어.
# 얼마나 묵었는지, 어디서 왔는지. 메타데이터와 값은 한 몸이야.

External links

Exercise

네 코드가 바깥에서 가져오는 값을 아무거나 골라 봐. 가격, 날씨, 환율, API 응답 뭐든. 나중에 그 값을 얼마나 믿을지 따지려면 어떤 provenance 를 함께 저장해야 할까? source, timestamp, 어떤 식별자로 조회했는지, 어느 endpoint 였는지까지 적어 봐. 그다음 맨값만 저장했다가 그 필드 중 하나가 없어서 생기는 구체적인 버그를 묘사해 봐.
Hint
고전적인 버그는 이거야. 숫자만 저장해 뒀는데 몇 주 뒤엔 그게 신선한지 낡았는지, 두 provider 중 누가 준 건지 가릴 방법이 없는 상황. ticker 나 식별자가 어긋나는 경우가 특히 고약해. 값은 멀쩡해 보이는데 엉뚱한 대상의 값인 거지. provenance 가 바로 그걸 잡아내는 장치야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.