2026년 6월 회고
2026년 6월을 회고한다.
2026년 6월을 회고한다.
FTS5(BM25) 키워드 검색과 sqlite-vec 벡터 KNN을 RRF(k=60)로 합쳐 별도 벡터 DB 없이 하이브리드 검색을 SQLite 파일 하나에 담았다
bi-encoder와 cross-encoder가 계산 횟수와 속도에서 왜 다른지 목(mock) 인코더로 비교하고, 검색과 재정렬을 왜 나눠 쓰는지 정리했다
키워드 검색과 벡터 검색이 서로 다른 실패 사례를 갖는다는 걸 토이 데이터로 확인하고, 하이브리드가 왜 필요한지 정리했다
어색한 한국어 기술 제목을 영문으로 번역했다가 한국어로 다시 옮기면 더 자연스러운 표현이 나온다. 이 방법으로 블로그 제목 7개를 고친 과정을 기록했다
SPA에서 URL 변경이 아닌 DOM 변경을 감시해 페이지 전환을 감지하고 새 콘텐츠가 렌더링된 후 자동 수집하는 방법을 정리했다
DOM 쿼리와 이벤트 디스패치로 브라우저 북마크릿에서 요소를 클릭하고 인터랙티브 셀렉터를 생성하는 방법을 정리했다
Beacon API와 JSONP 비콘으로 브라우저 북마크릿에서 CORS 없이 내 서버에 데이터를 전달하는 방법을 정리했다
javascript: URL로 브라우저를 제어하는 북마크릿의 원리, 설치 방법, 그리고 어디에 쓸 수 있는지 정리했다
동일 출처 정책의 원리, CORS 헤더 동작 방식, 그리고 Beacon·JSONP·서버 프록시 같은 예외 경로를 정리했다
2026년 5월을 회고한다.
4단계 폴백도 안 되는 케이스를 장벽 유형별로 분류하고 각각 현실적인 대안을 정리했다
curl_cffi부터 실제 Chrome 프로필까지 4단계 폴백 체인을 도메인별로 캐싱해 매번 첫 단계부터 시도하지 않아도 되는 구조를 만들었다
ux.py의 4단계 폴백 로직을 MCP 도구로 싸서 에이전트가 URL만 넘기면 수집되는 구조를 만들었다
solve_cloudflare=True 하나로 안 되던 이유와 WebRTC·Canvas·headless 세 가지를 동시에 막아야 했던 과정을 기록했다
curl_cffi부터 playwright까지 빠른 방법 순으로 시도하고 도메인별 성공 방법을 캐싱하는 구조를 만들었다
requests와 playwright로 안 되는 사이트를 StealthyFetcher 한 줄로 통과한 과정을 기록했다
과거 글 통계와 임베딩 few-shot 선택에 자기 참조·중복 제외 위생 규칙을 더해 LLM이 내 문체로 초안을 만드는 파이프라인을 정리했다
LLM이 생성한 변환 코드를 schema 계약과 대조해 검증을 통과해야만 결과를 반환하는 샌드박스를 만들었다
키워드 매칭 우선 + 임베딩 유사도 폴백 분류기에, 오분류 사례에서 키워드를 자동 등록하는 자가학습 레이어를 붙였다