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

재구축과 함께 죽는 인용

~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
"다시 찾아갈 수 없는 인용은 인용이 아냐. 각주 모양을 한 소문일 뿐이지."

인용은 미래에 하는 약속이야

어떤 문장을 인용한다는 것은 나중에도 같은 자리로 돌아가 정확한 단어를 확인할 수 있다고 약속하는 일이야. 다음 주나 내년뿐 아니라 데이터베이스를 다시 만들고 기계를 바꾼 뒤에도 그래야 해. 주소가 모르는 사이 다른 내용을 가리킬 수 있다면 약속은 이미 깨진 셈이야. 아직 따라가 확인하지 않아서 드러나지 않았을 뿐이지.

쉽게 붙인 주소는 쉽게 움직여

  • 검색 결과의 순번: '세 번째 결과'는 쿼리나 코퍼스가 달라지면 바로 다른 문서가 돼.
  • DB 행 번호: 삽입할 때 붙인 자동 증가 id는 인덱스를 지우고 다시 만들면 새로 배정돼. 예전의 id=417이 엉뚱한 chunk를 가리킬 수도 있어.
  • 문자 위치만 저장한 주소: 4120–4229 위쪽을 편집하면 뒤의 모든 위치가 밀려나.

셋 다 오늘은 잘 작동해 보여서 더 위험해. 깨진 링크처럼 즉시 실패하지 않고, 재구축 뒤에 다른 내용으로 조용히 연결될 수 있거든.

재색인은 일상적인 작업이야

살아 있는 코퍼스에서는 파일을 고치고 새 문서를 넣을 때마다 인덱스 일부가 다시 만들어져. chunking profile을 바꾸면 범위는 더 커지고. 그러니 재색인을 드문 재난처럼 취급해 주소 설계를 미룰 수 없어. 위치나 삽입 순서에 묶인 인용은 매일 썩을 기회를 얻고, 틀린 문단에 도착할 때까지 아무 경고도 주지 않아.

참조는 놓인 자리보다 내용에 묶어. 행 번호와 순번은 저장 방식이 바뀌면 사라지지만, 내용에서 계산한 주소는 같은 내용을 다시 만들 때 되살아나. 내구성 있는 참조는 대상이 스스로 주소를 결정해야 해.

다음 단계: 텍스트가 자기 이름을 짓게 해

Lantern은 문서의 내용 해시와 chunk의 문자 범위, 그 범위를 만든 profile을 함께 해시해 chunk id를 계산해. 데이터베이스가 우연히 붙인 이름이 아니라 텍스트의 지문을 만드는 거야. 같은 소스와 같은 규칙으로 다시 색인하면 새 기계에서도 같은 id가 나와. 이 성질이 재구축할 때마다 죽던 인용을 다시 확인할 수 있는 약속으로 바꿔.

Code

행 번호를 가리킨 인용은 재구축하면 썩고, 내용에 묶인 인용은 남아·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쪽', '목록의 네 번째 항목', 번호로만 문서 구역을 가리키는 링크 같은 것 말이야. 밑의 데이터가 재정렬되거나 다시 만들어지면 그 참조가 어디를 가리키는지 따져보고, 내용 자체에 닻을 내리도록 다시 설계해. 재편 뒤에도 같은 대상을 찾으려면 무엇을 해시하거나 함께 저장해야 할까?
Hint
해법은 좌표 대신 내용에 본질적인 걸 잡는 거야 — 텍스트의 해시나 정확한 단어들 자체. 참조가 내용에서 재계산될 수 있으면, 재색인에 절대 고아가 안 돼.

Progress

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

댓글 0

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

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