"어떤 파일은 그 자체가 글이고, 어떤 파일은 글을 안에 가둔 상자야. 상자라면 먼저 꺼내야 해."
원본으로 삼을 것이 두 종류야
마크다운이나 일반 텍스트는 파일의 바이트가 곧 글이야. 하지만 PDF와 Word 문서, HTML이 뒤섞인 웹페이지는 달라. 읽고 싶은 글이 특정 형식 안에 싸여 있어서 검색하기 전에 깨끗한 텍스트로 꺼내야 하지. Lantern은 이 차이를 referenced와 captured라는 두 코퍼스 종류로 구분해.
참조형(referenced): 파일이 바로 문서일 때
referenced 코퍼스에서는 디스크의 텍스트 파일이 권위 있는 원본이야. 파일을 읽고 chunk로 나누어 색인하면 끝이야. doc_sha256도 파일 자체의 해시를 써. Lantern은 이 파일을 보존한다고 약속하지 않고, 제자리에서 읽어 검색 가능하게 만들 뿐이야. 파일을 잃으면 원본도 사라져.
캡처형(captured): 꺼낸 텍스트가 문서일 때
captured 코퍼스에는 adapter가 필요해. PDF나 DOCX를 마크다운으로 바꾸거나, 웹페이지에서 태그를 걷어내고 본문만 추출하지. 그렇게 얻은 텍스트를 스냅샷 저장소에 보존한 뒤 chunk로 나누어 색인해. 여기서는 스냅샷의 해시가 doc_sha256이 되고 모든 문자 위치도 그 변환된 텍스트를 기준으로 삼아. 원본 바이트의 source_sha256은 따로 기록해서 소스가 그대로라면 비싼 변환을 다시 하지 않게 해.
검색할 때는 같아 보여도 진실의 자리가 달라
두 종류 모두 chunk를 만들고 같은 검색 API와 출처 정보 형식을 써. 하류에서는 거의 똑같아 보여. 그러나 무엇을 권위 있는 문서로 삼는지는 완전히 달라. referenced는 디스크 파일이고, captured는 변환해 보존한 스냅샷이야. 이 선택 하나가 소스가 사라졌을 때 내용도 함께 사라질지, Lantern 안에 정확한 텍스트가 남을지를 결정해.
그러니 코퍼스 종류는 성능 옵션이 아니야. 소스가 사라졌을 때 무엇을 되찾을 책임이 있는지 정하는 보존 계약이지. 튼튼한 텍스트 파일은 참조형으로 충분하지만, 재현하기 어려운 PDF 변환 결과나 바뀔 수 있는 웹 본문은 캡처형이어야 그 약속을 지킬 수 있어.