C.W.K.
Stream
Lesson 01 of 04 · published

죽는 citation

~11 min · citation, fragility, durability, link-rot

Level 0불 꺼진 심지
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"돌아갈 수 없는 citation 은 citation 이 아냐. 각주 달린 소문이야."

citation 이 실제로 약속하는 것

뭔가 인용하면, 미래의 너와 널 믿는 모두에게 약속하는 거야: 여기로 가면, 이 정확한 단어들을 찾을 거야. citation 의 가치 전부는 그 약속이 지켜지는 거야 — 다음 주, 내년, DB 재구축 후, 기계를 바꾼 후에도. citation 은 변화 속 안정성 만큼만 좋아. 가리키는 게 citation 모르게 움직일 수 있으면, 약속은 이미 깨진 거야. 아직 안 걸렸을 뿐이야.

다들 반사적으로 집는 깨지기 쉬운 기본값

결과를 참조하는 반사적 방법 셋이 전부 현실과 닿으면 죽어:

  • 위치: "3번째 검색 결과." 쿼리를 다시 돌리거나 코퍼스를 재색인하면, 3번째 결과가 이제 딴 거야.
  • Row id: DB 가 삽입 시점에 배정한 auto-increment 정수. 인덱스를 purge 하고 재구축하면 모든 행이 새 번호를 받아 — 저장한 id=417 이 이제 무관한 chunk 나 아무것도 안 가리켜.
  • Offset 만: "문서의 문자 4120–4229." 그 지점 위가 편집돼 모든 offset 이 옮겨지기 전까진 괜찮아.

각각 오늘 되니까 안정적으로 느껴져. 각각 다음 재구축에 배선된 시한폭탄이야.

재색인은 드문 일이 아냐

이걸 이론이 아니라 급한 걸로 만드는 게 여기 있어: 살아 있는 코퍼스에선 재색인이 계속 일어나. 모든 편집, 모든 새 문서, 모든 profile 조정이 인덱스 어떤 조각의 재구축을 유발해. citation 이 위치-묶임이나 row-id-묶임이면, 천천히 썩는 게 아냐 — 매일매일 무효화되고 있고, 하나를 따라가서 틀린 문단에 내려앉기 전까진 못 알아채.

참조를 위치나 삽입 순서가 아니라 내용에 앵커해. 뭔가 어디 앉는지에 의존하는 건(어느 행, 어느 위치, 가변 문서의 어느 offset) 그게 움직이면 깨져. 내용이 무엇인지에서 파생된 건 모든 재편성을 살아남아. 내구성 있는 참조는 구조상 content-addressed 야 — 주소가 그것 자체에서 계산돼.

고침, 미리보기

다음 레슨이 답을 지어: 내용과 좌표를 함께 해시해 계산한 chunk id, 그래서 id 가 선반에 붙인 라벨이 아니라 텍스트의 지문이야. 인덱스를 재구축하고, 새 기계로 옮기고, 전부 purge 하고 다시 수집해 — 지문은 동일하게 나오고, 그걸 쓴 모든 citation 이 여전히 약속한 곳에 정확히 내려앉아. content-addressing 이 citation 을 소문에서 보증으로 바꿔.

Code

Row-id citation 은 재구축에 썩고, content-addressed 는 안 썩어·python
# FRAGILE: cite by the row id the database happened to assign.
citation = {"chunk_row_id": 417}
# Tomorrow you purge and rebuild the index (routine!). Rows get renumbered.
rebuild_index()
fetch(citation["chunk_row_id"])   # -> a DIFFERENT chunk, or a KeyError. Silent rot.

# DURABLE: cite by a fingerprint of the content itself.
citation = {"chunk_id": "9f3ce1a7b2..."}   # hash of content + coordinates + profile
rebuild_index()                             # same sources, same profile...
fetch(citation["chunk_id"])   # -> the SAME chunk. The fingerprint didn't change.

External links

Exercise

내용이 아니라 위치를 가리키는, 네가 저장한 참조를 찾아 — '결과 2페이지' 북마크, '그 목록의 4번째 항목' 이라 적은 노트, 번호로 문서 섹션을 가리키는 링크. 밑의 것이 재정렬되거나 재구축되면 그게 어떻게 되는지 물어. 그다음 참조를 내용 자체에 앵커되게 재설계해. 재편성을 살아남게 뭘 해시하거나 복사할래?
Hint
그 이동은 내용에 본질적인 뭔가를 잡는 거야 — 텍스트의 해시나 정확한 단어들 자체 — 좌표 대신. 참조가 내용에서 재계산될 수 있으면, 재색인에 절대 고아가 안 돼.

Progress

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

댓글 0

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

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