리더는 생각보다 빨리 쌓여
출처 마흔 개를 삼십 분 주기로 돌리면 하루에 수천 행이야. 그중 거의 아무것도 안 읽혀. 도착해서, 최근 창에 몇 시간 앉아 있다가, 똑같은 것들한테 밀려나. 그걸 다 영원히 들고 있는 건 원칙이 아니라 관성이야. 아무도 다시 안 볼 재료 때문에 모든 질의랑 백업이랑 인덱스가 부풀거든.
그래서 리더한테 보존 정책이 필요해. 그리고 그걸 쓰는 순간 그 예외에 대해 약속을 한 거야. 저장 버튼이 있는 이유 전체가 저장이 뭔가를 의미한다는 거니까.
두 부류를, 소리 내어
실사용을 견디는 정책은 무뚝뚝해. 기간 지난 저장 안 한 기사는 퇴비, 저장한 기사는 영구, 그리고 모든 이벤트는 가리키는 기사가 어떻게 됐든 영구. 뉴스 리더한텐 두 주가 합리적인 창이야. 읽다 만 게 사라지지 않을 만큼 길고, 저장고가 작업 집합으로 남을 만큼 짧고.
나중에 공유도 저장이랑 같이 영속성 주장에 합류했어. 그 논리는 기술이 아니라 제품 논증이라 남겨둘 값어치가 있고. 기사를 발행하는 건 그냥 챙겨두는 것보다 강한 약속이고, 자기가 올린 글 선반이 두 주 뒤에 조용히 비는 건 애초에 없던 것보다 나쁜 거짓말이니까.
삭제자는 하나, 이름 붙여서
여기가 구조적인 부분이야. 보존 함수가 어느 행을 봐줄지 조심하는 걸로는 부족해. 시스템 전체에서 기사를 지우는 코드 경로가 정확히 하나여야 하고, 나머지 모든 경로는 구조적으로 그럴 수 없어야 해. 어떤 캐스케이드도 기사 표에 닿으면 안 되고, 어떤 정리 작업도 지름길을 타면 안 되고, "테스트용으로만" 있는 관리 도우미도 있으면 안 된다는 뜻이야.
이유는 영속성 보장이 그 주제를 자기가 소유한다고 생각하는 함수 하나가 아니라 가능한 모든 실행에 대한 주장이라서야. 조심스러운 삭제자 하나 더하기 부주의한 캐스케이드 하나는 보장이 아예 없는 시스템이고, 다음 강의가 정확히 그 얘기고.
보존은 유도된 것 전부를 덮어
잊기 쉬운 마지막 조각. 쌓이는 게 기사만이 아니야. 수집 로그, 캐시된 샘플, 렌더링된 오디오, 추출된 본문 — 유도된 산물마다 창이 필요하고, 자기가 설명하는 것의 수명에 묶여야 해. 일 년 전에 퇴비가 된 기사를 설명하려고 영원히 보관되는 수집 로그는 순수한 침전물이야.