C.W.K.
Stream
Lesson 02 of 05 · published

Live Tick 은 만료돼

~10 min · ttl, overlay, durability, freshness

Level 0Open Gate
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"live 가격은 거주자가 아니라 손님이야. 15분 받고, 그다음 durable close 가 의자를 되찾아."

Live 는 overlay 지 대체가 아냐

스트리밍이 켜지면 live tick 이 가장 현재 가격을 줘. 근데 Keep 은 그 live 값이 진실이 되게 절대 안 둬 — durable close 위에 칠해진 임시 overlay 고, 만료가 있어. LIVE_TTL_SECONDS — 15분 — 뒤 live tick 이 만료되고, '현재 값' 의 소유권이 저장된 completed close 로 돌아가. durable close 가 거주자; live tick 은 타이머 달린 손님이야.

왜 만료가 중요한가

만료가 없다고 상상해. Keep 을 열고, 스트리밍이 한동안 돌고, 그다음 노트북이 자거나, 네트워크가 끊기거나, 자리를 떠. 마지막 live tick 이 이제 화면에 얼어붙어 — 한 시간 전, 아니면 어제 가격이, fresh 한 것과 똑같이 권위 있어 보이며 앉아. 그 얼어붙은 tick 이 가장 위험한 종류의 stale 데이터야: live 로 보이는데 아냐. TTL 이 그 실패 모드를 죽여. 새 tick 없이 15분이 지나면, Keep 은 옛것을 그만 믿고 durable close 로 fallback 해, 적어도 그건 자기 날짜를 정직하게 지녀. 알려진 close 가 거짓말하는 tick 을 이겨.

덧없는 데이터는 자기 만료를 지녀야 해, 아니면 기본으로 거짓말이 돼. 한순간만 유효한 값은 TTL 없이는 그 순간이 지난 뒤에도 오래 유효한 척 계속 보여져. 변동적 데이터를 시간 제한하는 건 최적화가 아냐 — '지금 live' 와 '한 시간 전에서 얼어붙어, 척하는' 의 차이야.

명시적으로 만든 레이어링

어떤 종목이든 Keep 의 현재 값은 작은 스택이야: 바닥에 durable completed close(항상 존재, 항상 날짜 붙음), 그 위에 fresh 한 동안에만 칠해진 live tick. 읽기는 top-down 으로 resolve 하되 TTL 을 존중해 — 창 안의 live tick 이 이기고; 만료된 건 존재한 적 없는 것처럼 무시돼. 이게 'pause' 를 안전하게 해(다음 레슨): pause 는 새 tick 을 멈출 뿐, 기존 overlay 는 스스로 나이 들어 나가고, 정직한 durable close 를 책임지게 남겨.

쉬는 상태는 항상 durable close 야. live 가격의 모든 게 흥분이 멈출 때 — pause 하거나, 노트북 닫거나, TTL 이 지나면 — 표면이 막힌 live 숫자가 아니라 차분하고 날짜 붙은 저장 close 로 가라앉게 설계됐어. live 는 네가 opt-in 하는 예외; completed close 가 홈베이스야.

Code

live tick 은 TTL 안에서만 이겨 (예시)·typescript
const LIVE_TTL_SECONDS = 15 * 60;

function currentValue(durableClose: Close, liveTick: Tick | null): Value {
  if (liveTick && ageSeconds(liveTick) < LIVE_TTL_SECONDS) {
    return { value: liveTick.value, basis: "live" };   // fresh overlay 가 이김
  }
  // tick 없음, 또는 만료됨: 날짜 붙은 durable close 로 fallback.
  // 만료된 tick 은 존재한 적 없는 것처럼 다뤄.
  return { value: durableClose.value, basis: "close", asOf: durableClose.date };
}

// stale tick 은 현재 가격인 척 절대 못 해:
// TTL 지나면, 정직한 close 가 조용히 소유권을 되찾아.

External links

Exercise

UI 에서 'live' 나 'real-time' 값을 보여주는 곳을 찾아. 물어: 업데이트가 그냥 멈추면(sleep, disconnect, 탭 백그라운드) 무슨 일이 일어나? 마지막 값이 얼어붙어 권위 있어 보이는 채로 남아? TTL 을 설계해: 얼마 뒤 그 값을 그만 믿어야 하고, 뭘로 fallback 해? '지금 42' 와 '한 시간 전 42, 얼어붙음' 의 차이를 묘사해.
Hint
위험한 경우는 live 로 보이는데 더는 업데이트 안 되는 값 — 얼어붙은 tick 은 라벨된 stale 값보다 나빠, 멈춘 걸 신호하는 게 없으니까. TTL 더하기 정직한 fallback('...기준 last close 로 되돌림')이 조용한 freeze 를 보이는 올바른 downgrade 로 바꿔.

Progress

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

댓글 0

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

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