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

원본과 파생 상태를 가르는 선

~12 min · derived-vs-authoritative, core-bet, recovery, architecture

Level 0꺼진 심지
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"'어느 복사본이 진짜야?'라는 질문에는 언제나 답이 하나여야 해. 둘이 되는 순간 버그가 시작돼."

진실과 그 복사본을 구별해

시스템 안의 데이터를 하나 가리키고 물어봐. 이것이 원본인가, 원본에서 다시 만든 것인가? 원본을 맡은 저장소는 권위 있는 출처야. 언제든 버리고 원본에서 다시 만들 수 있는 것은 파생 상태고. 튼튼한 시스템은 자신이 가진 모든 데이터가 어느 쪽인지 설명할 수 있어. 대답이 흐릿한 곳이 있다면 복구할 때 반드시 문제가 생겨.

복사는 권위를 둘로 갈라

파일을 한곳에 모으려고 복사하기 전에는 답이 간단해. 원래 파일이 진짜야. 그런데 모음 폴더에 똑같은 파일을 하나 더 두면 두 복사본이 모두 원본처럼 보여. 한쪽만 고친 뒤 여섯 달이 지나면 어느 버전을 남기려 했는지 알기 어려워지지. 복사는 글을 모은 게 아니라, 무엇을 믿어야 하는지 모호하게 만든 거야.

레지스트리는 선을 넘지 않아

Lantern은 원본을 복사하지 않고 주소만 등록해. 그래서 파일은 계속 권위 있는 출처로 남아. 그 파일에서 만든 chunk 테이블과 FTS 인덱스, 벡터는 모두 파생 상태야. 원본과 어긋나면 원본이 이기고, 인덱스는 버린 뒤 다시 만들면 돼. 서로 진짜라고 주장하는 복사본이 생길 틈이 없어.

파생 상태가 어긋나면 고치지 말고 다시 만들어. 인덱스나 캐시를 한 줄씩 맞추려 들면 놓친 예외가 오염으로 남아. 권위 있는 출처가 멀쩡하다면 가장 확실한 복구는 파생 상태를 버리고 처음부터 계산하는 거야.

검색 엔진만의 규칙이 아니야

캐시와 검색 인덱스, 구체화 뷰, 비정규화 테이블, 썸네일, 컴파일 결과도 같은 범주야. 이들은 중요하지 않다는 뜻이 아니라 다시 만들 수 있다는 뜻이야. 파생임을 분명히 표시하고 두 번째 원본으로 승격시키지 마. 문제가 생겼을 때 수선이 아니라 재구축을 택할 수 있어야 해. Lantern이 원본은 건드리지 않고 인덱스는 과감히 버릴 수 있는 이유도 바로 이 구분에 있어.

백업과 경쟁하는 복사본도 구별해야 해. 백업은 자기 역할이 복구용이고 원본이 따로 있다는 걸 분명히 알고 있어. 반면 두 폴더를 모두 편집하면서 둘 다 진짜라고 부르면 권위가 갈라져. 위험한 것은 복사 행위 자체보다 어느 쪽을 믿어야 하는지 설명할 수 없는 상태야.

Code

기준 원본에서 다시 만들어 복구해·python
# Recovery model: purge-and-rebuild, never patch-and-reconcile.

def heal_corpus(corpus_id: str) -> None:
    # WRONG (the temptation): crawl the index, diff against the files,
    # and surgically patch the rows that look stale. This is where
    # corruption hides — one missed edge case and the index lies forever.
    #
    # RIGHT: the index is derived, so throw it away and rebuild it.
    delete_all_chunks(corpus_id)          # drop the derived state
    for doc in walk_declared_roots(corpus_id):
        chunks = chunk(read(doc))          # re-derive from the authoritative file
        insert_chunks(corpus_id, doc, chunks)
    # The originals were never touched. The index is now provably correct.

External links

Exercise

같은 내용을 두 벌 보관하는 곳을 찾아봐. 동기화한 노트나 백업 폴더, 내보낸 파일이면 좋아. 어느 쪽이 기준 원본이고 어느 쪽이 다시 만들 수 있는 복사본인지 각각 정해. 둘 다 똑같이 진짜처럼 느껴지는 쌍이 있다면 이미 잠복 버그를 찾은 거야. 파생 복사본을 잃었을 때 기준 원본에서 어떻게 다시 만들지도 적어.
Hint
복사본 하나를 지워도 다른 쪽에서 똑같이 다시 만들 수 있는지 확인해봐. 그렇다면 지운 쪽은 파생 상태야. 어느 쪽을 지워야 할지 가릴 수 없다면 Lantern이 처음부터 막으려는 권위의 모호함이 이미 생긴 거야.

Progress

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

댓글 0

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

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