위키룸 개발로그 · 3화
사유고 책을 붙여 위키룸이 됐다: '새 화면 적용'과 실제 연결은 달랐다
사유고의 책을 세 번째 자료로 붙이고 이름을 위키룸으로 바꿨다. 같은 주에 새 화면을 적용했다는데 첫 화면은 그대로였고, 카카오톡은 연결 안 됨으로 떠 있었다. 새로고침 버튼 하나는 검색 DB를 잠갔다.

8월 12일, 세 번째 자료를 붙였다. 종이책을 찍어 OCR로 옮긴 사유고의 책들이다. 카카오톡과 유튜브에서 찾던 질문을 책에도 똑같이 던지고 싶었다.
책을 가져오지 않고 잇는다
시작은 헛발이었다. 에이전트가 사유고 스킬 문서가 있는 경로를 책 원본이 있는 경로로 가정하고 작업을 시작했다. 바로잡고 나서 방향을 정했다. 책 원문을 위키룸 DB로 복사하지 않는다. 사유고는 이미 책 목록 원장과 자기 검색 API(bge-m3 임베딩과 FAISS 색인)를 갖고 있다. 위키룸은 그 원장을 읽고 그 API를 부른다.
처음에는 목록의 첫 책이 자동으로 선택되는 동작이 있었다. 질문은 책 한 권이 아니라 서재 전체에 하는 거라서, 기본 검색 범위를 전체 책으로 바꿨다. 당시 88권이었다. 결과를 누르면 원본 스캔부터 여는 대신, 그 쪽의 OCR 원문과 질문과의 연결점과 이어서 찾아볼 질문을 먼저 보여 주게 했다.
이날 앱 이름도 “기억 작업실”에서 위키룸으로 바꿨다. 흩어진 자료를 근거 붙은 위키 문서로 엮는 방이라는 뜻이다.
첫 화면이 그대로였다
같은 날 밖에서 만든 새 UI 디자인을 앱에 적용했다. 적용했다는 보고를 받고 앱을 열었는데 화면이 그대로였다. 새 디자인은 검색 결과와 상세 화면에만 들어가 있었다. 검색하기 전 첫 화면에서는 차이를 볼 수 없었다. 변경 범위를 하위 결과 화면으로 좁게 잡고, 사용자가 제일 먼저 보는 화면을 완료 기준에 넣지 않은 탓이었다.
첫 화면과 사이드바와 상단 경로와 검색 화면까지 다시 짰다. 상단 경로는 눌러서 이동할 수 있게 했다.
더 이상한 게 있었다. 위키룸의 기반은 카카오톡인데, 앱은 카카오톡이 연결되지 않았다고 표시하고 있었다. 확인해 보니 그 “연결 안 됨”과 0건 표시는 실제 아카이브 상태를 검사한 결과가 아니었다. 임시로 박아 둔 빈 화면이었다. 카카오톡을 읽는 Rust 코드는 있었지만 앱과 이어져 있지 않았다. 카카오톡을 기본 화면으로 올리고, 로컬 아카이브의 동기화와 검색과 상태를 앱에 연결했다.
새로고침이 DB를 잠갔다
다음 날, 카카오톡을 연결했는데 또 연결이 안 된다는 증상이 나왔다. 이번에는 연결이 끊긴 게 아니었다. 대화 목록의 새로고침 버튼이 상태만 확인하는 게 아니라 전체 재동기화를 실행하고 있었다. 재동기화가 SQLite에 쓰는 동안 검색이 같은 DB를 읽으려다 막혔다.
상태 확인과 상태 변경이 버튼 하나에 묶여 있던 게 원인이었다. 둘을 나눴다. DB는 WAL 모드로 바꿔 쓰는 중에도 읽을 수 있게 하고, 잠겨 있으면 5초까지 기다리게 했다. 검색 구간을 다시 만들 때는 트랜잭션 안에서 통째로 바꿔 끼우고, 중간에 실패하면 이전 색인을 그대로 남긴다. 동시에 쓰는 상황과 실패 뒤 이전 색인이 보존되는지를 테스트로 묶었다.
빌드 성공, 새 창이 뜸, 파일이 생김. 이번 주에 겪은 일은 모두 이런 신호가 초록색인데 사용자가 보는 화면에서는 미완성이었던 경우다. 그 뒤로 완료를 확인할 때는 실제 DB 연결, 검색 결과, 화면 전환을 따로따로 봤다.