본문 바로가기
C.W.K.
Stream
Lesson 02 of 04 · published

여기 파일링, 그때 쓰임

~9 min · ui-honesty, two-truths, explicit-dates, surface

Level 0식은 화로
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"이른 날을 고르면 그날 아래 crumb 을 파일링하되, 그때 낸 척은 안 해."

모델의 진실은 표면까지 닿아야 해

DB 에 날짜 두 개를 두는 건 절반이야. 화면에 하나만 보이면 사용자 머릿속이 조용히 모델을 도로 뭉쳐. 카드에 날짜 하나 보고 '언제 썼나' 로 여기거든. 그 crumb 이 backdate 됐을 때도. 두 진실 규칙은 보여야 진짜로 지켜진 거야. 그래서 crumb 의 target_date 가 captured_at 이 떨어지는 날과 다르면, Vesta 카드는 둘 다 또렷이 보여줘. 한 날에 filed, 다른 날에 written.

둘이 같으면, 그러니까 오늘 오늘 일을 붙잡은 흔한 경우엔 둘 다 보이는 게 소음이야. 그래서 카드는 날짜 하나만 보여줘. 규칙은 간단하고 화면을 차분하게 지켜. 진실이 같으면 날짜 하나, 갈리는 순간 둘 다. 인터페이스는 절대 날짜를 지어내지 않고 갈림을 숨기지도 않아. 모델이 아는 걸 그대로 비출 뿐이야.

모델이 두 진실을 나눴으면, UI 가 그걸 조용히 합치면 안 돼. 신중한 백엔드에 게으른 화면이면 결국 거짓말하는 제품이야. 사용자는 화면만 보니까. 데이터에 있는 갈림은 인터페이스에서도 읽혀야 해. 안 그러면 둘째 칸에 값을 치르고 마지막 한 뼘에서 그 값을 버린 거야.

로컬 날짜는 명시적, 절대 추측 아냐

화면이 피해야 할 더 조용한 함정이 있어. 읽는 시점에 로컬 날짜를 추론하는 것. UTC 순간만 저장하고 그릴 때마다 '그게 무슨 날이었지?' 계산하면, 답이 읽는 사람의 현재 타임존을 따라 흔들려. 한 존에서 밤 11시에 쓴 crumb 이 다른 존에서 보면 다음 날로 튈 수 있어. Vesta 는 그걸 거부해. 로컬 날짜와 타임존은 쓰는 시점에 딱 붙잡아 저장하고, 읽을 때 다시 계산 안 해. crumb 이 쓰인 날은 일어난 순간 고정된 사실이지, 볼 때 어디 서 있느냐에 따라 바뀌는 계산이 아냐.

Code

날짜 하나, 혹은 둘. 근데 추측한 건 절대 안 돼·typescript
function crumbDateLabel(crumb: Crumb): string {
  const writtenDay = crumb.captured_local_date; // stored, not inferred
  const filedDay = crumb.target_date;

  // truths agree -> one calm date
  if (writtenDay === filedDay) return filedDay;

  // truths diverge -> show both, honestly
  return `filed ${filedDay} \u00b7 written ${writtenDay}`;
}

// captured_local_date is stored at write time, so 'written' never
// shifts when a reader in another timezone opens the card later.

External links

Exercise

쓴 순간과 속하는 날을 함께 지닌 날짜 항목에, 가장 작은 정직한 라벨을 설계해 봐. 날짜 하나 대 둘을 언제 보일지 규칙을 쓰고, 다를 때 라벨이 뭐라 할지 정해. 그다음 세게 밀어붙여 봐. 밤 11시 45분에 쓰여 '어제' 로 파일링된 crumb 에 네 라벨은 뭘 보여? 어느 날짜가 어느 건지 읽는 사람이 절대 헷갈리지 않게 만들어.
Hint
어려운 경우는 자정 근처 backdate 야. written 과 filed 가 하루 차이라 헷갈리기 쉽지. 각 날짜에 역할(filed / written)을 붙여, 숫자만 말고. 맨 'Mar 13 · Mar 14' 는 어느 게 어느 건지 하나도 안 알려줘.

Progress

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

댓글 0

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

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