화면을 보면 불편했다. 서가 분류(인덱스)도 있고 태그도 있는데, 둘이 같은 일을 하는 것처럼 겹쳐 보였다. 문서가 늘어날수록 칸은 갈라지고 칩은 늘었고, 위키 목록은 정리된 느낌이 안 났다. 「지금 화면이 보기 좀 불편한데 index와 태그가 있는데 뭔가 구성을 좀 잘할순 없을까」라는 말이 나온 게 그 무렵이다.
처음엔 UI 배치 문제인 줄 알았다. 사실은 더 아래 층이었다. 분류가 어긋나면 위키 자리 잡기도 같이 어긋났다.
분류가 틀리면 위키도 틀린다
마이위키에서 1차 분류(L1)는 서가 1단이다. 문서가 “어느 칸에 앉느냐”를 정한다. 2차는 그 안 세부 칸. 키워드는 그 칸들을 가로질러 모아 보는 칩이다. 이 말을 처음부터 이렇게 정리해 둔 건 아니었다. 쓰다 보니 서로 역할이 뒤섞였다.
프로젝트 공간을 열면 같은 제품이 여러 칸으로 쪼개져 있었다. slowloop, SlowLoop, slowloop lab, SlowLoop Lab, slowloop-lab. 표기만 다른데 서가에서는 다섯 칸이었다. 「지금 프로젝트 인덱스 보면 같은 의미가 많은데 slowloop 관련되서 이런거 하나로 통합 안되나」. 맞는 말이었다. hermes나 한새암은 한 칸으로 잘 묶였는데, 브랜드 이름만 흔들리면 AI가 칸을 새로 팠다.
「이거 AI가 인덱스 만드는거 아니야?」. 맞다. 사람이 폴더 트리를 손으로 짜는 구조가 아니다. 문서마다 칸을 달고, 시스템이 그걸 그려 준다. 파편은 버그라기보다 품질 문제였다. 동의어를 대표 칸 하나로 묶는 규칙이 약하면 표기 따라 칸이 갈라진다. 프롬프트에 동의어 규칙을 넣고, 분류를 다시 짜게 하니 다섯 칸이 하나로 붙었다. 브랜드 이름을 코드에 박지 않고 패턴만 둔 것도 그때 정한 방향이다.
더 웃긴 실수도 있었다. 공간 이름이 1차 칸 접두어처럼 들어가 버리는 경우. 공간 자체가 이미 루트인데 경로에 공간 이름을 또 얹으면 서가가 이중으로 접힌다. 관심사 공간에 프로젝트 축이 섞이거나, 단일 제품 공간에 제품명을 1차로 또 쓰는 식의 축 혼선도 있었다. 「l1 이 1차 인덱스 맞아?」라고 확인부터 하게 된 것도, 이름이 헷갈릴 만큼 축이 흐려 있었기 때문이다.
분류가 잘못되면 위키 자리도 당연히 이상해진다. 요약·반영이 칸을 따라가니까. 서가 지도가 틀리면 그 위에 쌓인 문서 위치도 틀린다. 세컨드 쪽 분류를 손본 것과 비슷한 교훈이다. 찾기·앉히기 구조가 망가지면 본문 품질을 만져도 체감이 안 나온다.
태그는 적을 땐 되고, 천 개쯤 되면 못 쓴다
태그(키워드 칩)는 문서가 적을 때는 편했다. 몇 십 개면 칩을 눌러 모아 보기에 충분하다. 그런데 문서가 천 개 근처로 가면 이야기가 달라진다. 칩이 너무 많아지고, 비슷한 말이 늘어나고, 필터를 걸어도 화면이 정리된 느낌이 안 난다. “관련 문서 모아 보기”가 아니라 “칩 바다에서 하나 고르기”가 된다.
처음엔 서가 분류랑 태그를 거의 같은 층으로 다뤘다. 칸 이름을 태그로 또 붙이기도 했다. 그러면 종단 분류와 횡단 필터가 한 줄에 겹친다. 서가에 이미 “slowloop-lab”이 있는데 칩에도 같은 말이 또 있다. 필터를 걸면 키워드 목록이 안 바뀌고 그대로인 것처럼 보이기도 했다. 「1차인덱스별로 태크 관리는 안하고있나? 필터걸면 키워드가 안바뀌고 그대로네」. 기대한 건 서가 칸을 고르면 그 안 문서 기준으로 칩이 좁혀지는 쪽이었는데, 역할이 안 갈려 있으면 그렇게 안 보인다. 분류는 자리, 키워드는 가로지르는 표시인데, 둘이 같은 단어를 복제하면 화면이 두 배로 지저분해진다.
그래서 역할을 갈랐다.
분류는 종단이다. 문서는 한 칸에 앉는다. 1차/2차 두 단이 기본이고, 한 단만 오면 보정해서라도 칸을 만든다. 공간 성격에 따라 1차 축을 하나로 고른다. 여러 앱을 모은 공간이면 제품 이름, 단일 제품 공간이면 모듈·레이어, 관심사 공간이면 생활·관심 영역. 축을 섞지 않는다. 공간 이름은 경로에 다시 넣지 않는다. 구현 세부는 2단이나 키워드 쪽으로 밀고, 1단은 한 축으로만 깐다.
키워드는 횡단 필터다. 서가 칸을 가로질러 같은 주제·시리즈·계열을 모아 보는 칩. 칸 이름을 칩에 복제하지 않는다. 시리즈 번호나 버전 파편은 그룹 대표로 합친다. 칩 하나가 곧 그룹 하나다. “이 칸에 있다”는 분류 몫이고, “이 계열로 모아 본다”는 키워드 몫이다.
이 분리를 말로만 두지 않고 생성 규칙에도 넣었다. 같은 그룹을 단 문서가 너무 적으면 칩으로 남기지 않는다. 공간 전체 키워드 예산도 두었다. 목표 대략 삼십, 단단한 한도는 사십 근처. 넘치면 빈도 위주로 남기고 나머지는 걷어 낸다. 한도를 정수로만 둘지, 「한도를 정수가 아니고 비율로 할까 현재 인덱스에 포함된 전체 문서 갯수로 해가지고」처럼 전체 장수 비율로 둘지도 같이 이야기했다. 결국 키워드 쪽은 공간 단위 상한, 병합 쪽은 칸 장수 대비 예산으로 비슷한 감각을 나눠 썼다. 숫자가 달라도 “무한히 늘리지 않는다”는 전제는 같다.
키워드 폭증을 막은 캡을, 병합에도 걸었다
역할 분리만으로 끝이 아니었다. 키워드는 그래도 잘 늘어난다. AI가 문서마다 새 말을 만들고 싶어 하기 때문이다. 개수 제약을 넣자 그제야 어느 정도 잠겼다. 새 칩을 함부로 못 만들고, 기존 어휘를 먼저 재사용하게 하니 화면이 덜 지저분해졌다. 없는 그룹을 매번 발명하는 대신, 이미 있는 칩에 붙이는 쪽으로 기울었다.
같은 감각을 문서 병합에도 가져갔다. 앞에서 스티키 병합을 이야기했을 때와 이어진다. 요약 배치가 끝나면 초안을 제목·요약 기준으로 묶고, 확정본만 서가에 올린다. 파편이 너무 많으면 위키가 얇은 카드 나열이 되고, 사람이 나중에 합치기만 누르기엔 부담이 크다. 그래서 배치 끝에 한 번 묶는다.
문제는 묶는 범위였다. 공간 전체를 한 번에 보면 키워드만 겹쳐도 상관없는 글이 붙을 수 있다. “둘 다 AI” “둘 다 생활” 같은 느슨한 공통점만으로 합치면 안 된다. 마인크래프트와 기도문이 한 문서가 되거나, 제품 이름과 전혀 다른 생활 메모가 붙는 식의 사고를 프롬프트로만 막기엔 약했다.
그래서 병합을 2차 분류, 즉 서가 칸 안으로 가두었다. 같은 1차/2차 칸 안에서만 합침 후보를 본다. 칸을 넘어 합치는 건 코드에서 거절한다. 칸마다 장수 예산도 둔다. 공간 전체 문서 수와 칸 수를 보고 느슨한/단단한 한도를 잡고, 압력이 큰 칸을 우선으로 나눈다. 한 칸이 너무 크면 그 칸을 여러 요청으로 쪼개되, 다른 칸 문서와 섞지 않는다. 합침 세기 힌트는 보조일 뿐이고, 장수 예산과 칸 경계가 본체다.
효과가 생각보다 괜찮았다. 완벽하진 않다. 그래도 예전에 보이던 “전혀 다른 주제인데 한 카드로 붙는” 사고는 줄었다. 키워드 겹침만으로 전 공간을 훑던 때보다, 서가 칸이라는 울타리가 먼저 작동한다. 같은 칸 안에서는 제목·요약이 비슷하면 붙고, 칸이 다르면 애초에 후보에 안 오른다.
본문을 못 주는 모델을 울타리로 다루는 일
왜 이런 캡이 먹히냐면, 병합 모델에 본문을 다 넣지 않기 때문이다. 넣는 건 id, 제목, 요약, 어느 칸인지 정도다. 토큰과 비용 때문이다. 제목과 요약에 같은 고유명이나 제품명이 보이면 합치라고 할 수 있고, 실제로 그게 맞는 경우도 많다. 반대로 제목만 비슷한 다른 맥락도 있다. 본문을 못 읽으니 키워드 겹침이 과하게 끈적해질 수 있다. 모델이 똑똑해도, 입력이 얇으면 판단 재료가 없다.
그때 분류가 울타리가 된다. “이 칸 안에서만 합쳐”라고 가두면, 전 공간 키워드 스티커로 붙이던 실수가 줄어든다. 분류가 종단으로 먼저 자리를 잡고, 그 안에서만 횡단 신호가 일하게 하는 그림이다. 키워드 캡이 칩 폭발을 막듯, 서가 캡이 과합침을 막는다. 같은 개수 제약 감각이 다른 층에 쓰인 셈이다. 프롬프트로 “신중히 합쳐”라고 쓰는 것보다, 후보 집합 자체를 칸 단위로 줄이는 편이 안정적이었다.
그렇다고 끝난 건 아니다. 동의어 규칙은 계속 보강해야 하고, 공간 성격별 1차 축도 실사용에서 흔들린다. 필터 화면도 아직 어색한 구석이 있다. 분류가 맞아야 위키가 산다는 감각만은 분명해졌다. 분류를 예쁘게 보이게 하는 장식이 아니라, 그 다음 병합·조회·정리가 기대대로 돌게 하는 바닥이다.
화면이 불편해서 시작한 이야기였고, 결국 “칸과 칩이 무슨 일을 하는지”를 가르고 “몇 개까지 허용할지”를 숫자로 가둔 이야기다. 그 가둠이 없으면 모델은 제목과 요약의 겹침만 보고 상관없는 글을 붙인다. 가둬 두면 완벽하진 않아도, 적어도 서가 밖으로 새는 합치기는 줄어든다.