2026년 8월 회고
2026년 8월을 회고한다.
2026년 8월을 회고한다.
결함 12건 중 11건이 게이트가 초록불인 상태에서 발견됐다. 그래서 게이트를 더 만들었더니, 그중 하나는 검사 대상이 0건인 채로 통과를 보고하고 있었다
공개 전에 눈으로 다 봤다고 보고했는데 실제로는 시크릿만 본 것이었다. 사내에서만 뜻이 통하는 개발 라벨은 어떤 패턴에도 안 걸려 그대로 나갔다
관리 API가 무인증인 것을 코드를 읽다가 발견했다. 게이트는 그때도 초록불이었다. 자동으로 잡으려고 만든 첫 판은 오탐이 아니라 미탐 기계였다
허용목록을 비워두면 아무것도 통과하지 않는 구조로 시작했다. 설계 문서 첫 절에 적은 건 기능 목록이 아니라 이전 전제의 철회였고, 그러자 할 일이 줄었다
도구를 하나 늘릴 때마다 CLI와 도구 서버 두 곳을 손으로 고쳤다. 폴더에 메타파일만 두면 자동으로 잡히게 바꿨는데, 중간에 골랐던 구조는 52분 만에 버렸다
사양을 먼저 읽으라고 지시했는데 세 번 다 읽지 않았다. 지시문은 지켜졌는지 확인할 방법조차 없어서, 편집이 일어날 때마다 반드시 도는 훅으로 옮겼다
골든 케이스 31개로 검색 방식 A와 B를 비교했더니 3%p 차이가 났다. 그 차이가 진짜인지 우연인지 Wilson 신뢰구간과 paired bootstrap으로 검정해보니 상당수가 노이즈였다
DB 3개를 federation해 검색하니 DB당 넉넉히 가져온 후보가 배로 불어나 리랭킹이 느려졌다. 전체 리랭킹 풀을 DB 수로 나눠 배분했더니 속도가 3분의 1로 줄었는데 품질은 그대로였다
검색할 때마다 외부 API를 호출하면 비용이 쌓이고 오프라인에서는 아예 못 쓴다. 모델을 한 번만 로컬로 내려받아 이후 전 과정을 CPU에서 완전히 오프라인으로 돌렸다
2026년 7월을 회고한다.
검색 시스템을 만들어도 에이전트가 직접 못 쓰면 매번 사람이 대신 검색해서 붙여줘야 한다. MCP 도구 3개로 그 다리를 놓았다
예전에 어떤 문제를 어떻게 풀었는지 정확한 단어가 기억나지 않을 때, git 히스토리를 임베딩으로 색인해 자연어로 찾아봤다
매번 전체를 다시 수집·재색인하는 대신, manifest.json으로 바뀐 것만 골라 처리하는 Bronze/Silver 구조를 만들었다
원본과 가공본을 한 곳에 뒤섞어 처리하다가 정제 로직을 고치고 싶어도 원본을 되돌릴 수 없었던 경험에서, Bronze/Silver/Gold로 계층을 나누는 이유를 정리했다
ONNX cross-encoder 리랭커를 int8 동적 양자화했더니 크기는 1/4로 줄고 속도는 빨라졌는데, 정확도는 오히려 떨어졌다
onnxruntime 기반 cross-encoder와 스레드 튜닝으로 CPU 리랭킹 지연을 2463ms에서 565ms로 줄였다. 그전엔 잘못된 측정 조건 때문에 리랭킹 자체를 뺐었다
1차 검색 결과를 다시 정렬하고 싶을 때 뭉뚱그려 부르는 "리랭크"가 실제로는 cross-encoder·RRF·가중합 중 무엇을 가리키는지 정리했다
작성자 상태 괄호와 카테고리 표기 노이즈를 백필 대신 조회 시점 정규화로 처리해 28,922건 카테고리 채움율을 0%에서 100%로 올렸다
FTS5 unicode61 토크나이저 전환에 조사 정규화까지 더해 한국어 키워드 검색 정확도를 22.6%에서 85%까지 끌어올렸다