
지난 글에서 제 노트 4만여 개를 5.5배 빠르게 검색한 과정을 공유했습니다. 그 글의 마지막 조각 — “글자는 달라도 뜻이 같은 노트”를 잡아내는 헤드리스 하이브리드 임베더 — 를 다듬어 오픈소스로 공개합니다.
이름은 byeori(벼리). 앱도, GPU도, 클라우드도 없이 마크다운 노트 폴더를 로컬에서 검색하는 명령줄 도구입니다. 정확매칭(ripgrep)과 의미검색(벡터)을 한 번에 묶어 순위를 매깁니다. 한국어·교차언어를 지원하고, 라이선스는 Apache-2.0입니다.
Claude Code 사용 분석 시리즈 — 공개에 앞서, 제가 앞세운 강점이 사실인지부터 직접 검증한 결과까지 정직하게 적었습니다(과장 없음).
① byeori는 “앱 안에 사는” 의미검색의 반대입니다 — 앱을 안 켜도, GPU 없이, 데이터를 기기 밖으로 보내지 않고, 어디서든(크론·CI·노트북) 돕니다.
② 제가 앞세운 강점을 직접 검증했습니다. 한국어·교차언어는 사실(다만 특화 최고는 아님), 중소기업·1인 맞춤은 강점, 속도도 사실, 정확성은 “회수율은 오르되 정밀도는 보통”으로 정직하게 적었습니다. 공개 예제에서 영어 질의가 한국어 노트를 1순위(0.43)로 찾았습니다.
③ 저장소는 이미 공개되어 있습니다 — github.com/peterkimpmp/byeori (Apache-2.0, 테스트 통과). 5분이면 설치·색인·검색까지 됩니다.
의미검색만 ‘앱 안에’ 갇혀 있었습니다
“글자 검색은 앱 없이도 잘 됩니다. 그런데 ‘비슷한 뜻’까지 찾으려는 순간, 대부분 노트 앱의 플러그인에 손이 갑니다. 앱이 켜져 있어야 하고, 스크립트로 부를 수도 없죠. 그 마지막 한 층만 떼어내면, 완전히 앱 없는 검색이 됩니다.”
— 지난 글(벤치마크)이 남긴 숙제
지난 글의 결론은 “외부 도구로 갈아타지 말고, 내 직접 읽기 방식의 낭비만 고치면 더 빠르고 튼튼하다”였습니다. 다만 한 가지가 남았습니다 — 의미(임베딩) 검색입니다. 글자가 일치하지 않아도 뜻이 같은 노트를 찾는 이 기능은, 흔히 노트 앱의 플러그인에 묶여 있습니다.
그래서 그 한 층을 앱 없이 돌아가는 작은 도구로 직접 만들었고, 쓸 만하다고 판단해 오픈소스로 공개합니다. 이름은 byeori입니다.
- byeori가 무엇인가 — 그리고 왜 또 하나의 검색 도구인가
- 강점이 진짜인가 — 제 주장(한국어/맞춤/속도·정확성)을 직접 검증한 결과
- 어떻게 동작하나 — 5단계, 그리고 5분이면 시작하는 법
- 정직한 한계 — 무엇을 못 하는지, 어디에 안 맞는지
‘그물의 머리줄’을 당기면, 맞는 노트가 딸려 옵니다
벼리는 그물의 위쪽을 꿰어 잡아당기는 한 가닥 줄입니다. 그 줄을 당기면 그물 전체가 따라 올라오죠. 검색이 해야 할 일이 정확히 그것입니다 — 맞는 한 가닥을 당기면 나머지가 딸려 온다.
한 줄로 정의하면 — 앱도, GPU도, 클라우드도 없이 마크다운 노트 폴더를 로컬에서 검색하는 명령줄 도구입니다. “Obsidian 의미검색” 도구들은 대개 앱 안에 살지만, byeori는 그 반대로 어디에든 둘 수 있는 도구입니다.
제가 앞세운 강점을 직접 검증했습니다 (과장 없이)
오픈소스로 내면서, 제가 앞세웠던 강점 세 가지가 사실인지부터 확인했습니다. 마케팅 문구가 아니라 실측과 한계를 같이 적습니다.
제가 처음 강조하지 못했지만, 실제로 가장 큰 차이는 헤드리스라는 점입니다. 크론·CI·에어갭 어디서나 돌고, 임베더가 없으면 글자 검색으로 우아하게 강등되며, 저장 형식이 numpy/json이라 들여다볼 수 있습니다(블랙박스 아님).
있을 때와 없을 때, 그리고 숫자
“하이브리드가 좋다”는 말보다 숫자가 정직합니다. byeori가 있을 때(어휘+시맨틱)와 없을 때(어휘 단독)를 같은 쿼리로 비교했습니다.
질문의 단어가 노트에 글자 그대로 없으면 놓칩니다. “직원 번아웃”으로 찾으면 “소진·탈진”이라 쓴 노트, 같은 주제를 영어로 적은 노트는 회수되지 않습니다.
뜻이 같으면 표현·언어가 달라도 끌어옵니다. 같은 6개 패러프레이즈·교차언어 쿼리에서, 어휘가 못 띄운 관련 노트를 합계 37건 추가 회수했고, 영어 질의는 어휘 0건 → byeori가 한국어 노트를 1순위로 찾았습니다.
속도도 숫자로 옮기면 — byeori의 엔진을 제 실제 vault(노트 약 1.5만 개)에 돌린 실측입니다.
※ 제 실제 vault(노트 약 1.5만·청크 11.7만, 맥) 실측과 공개 예제 기준입니다. 절대값은 노트 규모·하드웨어·모델에 따라 달라지며, 핵심은 비율과 패턴입니다 — 병목은 검색이 아니라 모델 로드이고, 그래서 상주 서버가 답입니다.
다섯 단계로 동작합니다
제목(#·##·###) 경계로 노트를 나누고, 각 조각 앞에 머리말 맥락(제목·태그)을 붙여 조각이 스스로 문맥을 갖게 합니다.
정적 임베딩(numpy만, torch/GPU 없음). 기본은 다국어 모델, 환경변수로 더 강한 모델로 교체할 수 있습니다.
numpy 평면 행렬 한 파일. 조각마다 내용 해시로 키를 매겨, 다시 색인할 때 바뀐 것만 임베딩합니다.
어휘(ripgrep)와 의미(코사인 상위)를 상호 순위 융합(RRF)으로 병합. 색인·임베더가 없으면 글자 검색으로 강등됩니다.
모델과 색인을 작은 통로(소켓) 뒤에 상주시켜 질의를 데워 둡니다(차가운 1초 → 따뜻한 수십 ms).
아키텍처 — byeori는 ‘vault’와 ‘LLM’ 사이에 있습니다
byeori는 그 자체로 답하지 않습니다. 노트 폴더(vault)와 LLM(Claude·Codex) 사이에 앉아, “맞는 노트를 찾아 순위 매겨 건네는” 검색 레이어 역할만 합니다.
직접 읽기 (앱·GPU·클라우드 없음)
.byeori/serve · 모델+인덱스 상주(warm)
search · 어휘(ripgrep) + 시맨틱(cosine) → RRF 병합
순위 매긴 관련 노트 (top-k)
시퀀스 — 질문 하나가 흐르는 길
search("___", --mode hybrid) 호출설치 → 색인 → 검색
파이썬만 있으면 됩니다. 첫 실행 때 작은 모델(수십 MB)을 한 번 내려받고, 이후엔 전부 로컬입니다.
# 설치
pip install git+https://github.com/peterkimpmp/byeori
# 1) 색인 (이후엔 바뀐 것만 다시 임베딩)
byeori index ~/notes
# 2) (선택) 데운 서버 — 질의가 수십 ms
byeori serve ~/notes &
# 3) 검색 — 기본은 하이브리드
byeori search ~/notes "회의 후 결정된 액션 아이템 정리"
byeori search ~/notes "model evaluation" --mode semantic --top-k 5
빠른 글자 검색을 함께 쓰려면 ripgrep을 설치해 두면 좋습니다(brew install ripgrep). 없으면 의미검색만으로도 동작합니다.
작은 팀·1인을 위한, 사적이고 저렴한 검색
내 지식베이스를 사적으로(클라우드에 안 올리고), 저렴하게(인프라 없이), 커스터마이즈해서 검색하고 싶은 소규모 팀·1인 컨설턴트·지식근로자에게 맞습니다. 특히 한국어·혼합언어 노트를 쓰는 분에게요.
특허 부여 + 자유로운 재사용으로 상업·엔터프라이즈 환경에 적합합니다. byeori는 의도적으로 작고 독립적인, 공개·무료 검색 레이어입니다. 마음껏 쓰고, 고치고, 회사 안에 넣으셔도 됩니다.
무엇을 못 하는지도 적습니다
- 정적 임베딩은 빠르지만 최고 정밀도는 아닙니다. 속도·무GPU를 위해 정밀도를 일부 양보합니다. 더 강한 모델로 교체하거나, 원격(클라우드) 임베딩을 옵션으로 켤 수 있습니다.
- numpy 평면 저장은 수십만 조각까지 적합합니다. 그 이상 규모는 전용 벡터 저장소(예정)가 정답입니다.
- v1엔 재랭킹(reranking)이 없습니다 — 자연스러운 다음 단계입니다.
- 이건 풀 RAG(검색 증강 생성·Retrieval-Augmented Generation) 프레임워크가 아니라 초점을 좁힌 검색 도구입니다.
필요한 한 층만, 작게 — 그리고 공개
큰 프레임워크나 무거운 인프라가 답이 아닐 때가 많습니다. 제겐 “앱 없이 도는 의미검색 한 층”이 필요했고, 그래서 딱 그만큼만 작게 만들었습니다. 쓸 만하다고 판단해 오픈소스로 공개합니다 — 같은 고민을 하는 분께 그대로 쓸모가 있기를 바랍니다.
→ github.com/peterkimpmp/byeori (Apache-2.0)
※ 본 글의 수치(교차언어 1순위 0.43 등)는 공개 저장소의 합성 예제에서의 실측이며, 노트 규모·하드웨어·모델에 따라 달라집니다. byeori는 제 운영 하네스에서 쓰던 헤드리스 임베더를 독립 도구로 추출·일반화한 것입니다.
「Karpathy의 LLM과 Obsidian 지식 결합」
「llm-wiki vs 10년 obsidian-vault — 30시간 RAG 실측 회고」
「RAG 지식관리와 PM — PO·PM·PL의 조직 자산화」
「Fable 5 첫 하루 — 모델 × 하네스 × RAG」
「구글 OKF·Obsidian Vault·llm-wiki — 무엇을 어떻게 시작할까」
「내 노트 4만 개 검색 — 직접 읽기 vs 전용 CLI, 하이브리드 5.5배」
- S-1 Agentic PM의 시대가 열리다 — LG전자 SW PM 워크숍을 마치며
- S-2 삼성전자 PMC: AI와 함께하는 PM 교육 혁신
- S-3 SKT Agent 도출을 위한 AI 퍼실리테이션 기법
- S-4 리스크는 그릇이었다 — LG전자 SW공학연구소 GenAI RISK 워크숍 NEW
- S-5 코드 한 줄 없이 손익관리팀이 만든 에이전트 — 신한EZ손해보험 NEW
- S-6 “어디까지 입력해도 되나요?” — 삼성 구매 현장의 Agentic 각성 NEW
- S-7 지금 Agentic으로 전환해야 하는 이유 — 삼성·LG·KT·Clean&Science 300여 분의 증명 NEW
- P-0 7인의 사고 체계 종합 프레임워크
- P-1 Karpathy: 제약 설계 + 닫힌 루프
- P-2 Sutskever: 압축이 곧 지능이다
- P-3 Hassabis: 제1원리 분해
- P-4 LeCun: 세계 모델 + 예측
- P-5 Hinton: 거버넌스 + 자기부정
- P-6 Ng: AI 전환 플레이북
- P-7 Fei-Fei Li: 인간중심 설계
- P-8 Builders 종합: Boris·Cat·Truell·Masad·Murati·Brockman
- P-9 Operators 종합: Altman·Amodei·Nadella·Pichai·Zuckerberg·Suleyman
- P-10 Hardware 양강: Jensen Huang · Lisa Su
- G-1 삼성전자 GAUSS PM Agent: 효과적 설계로 주니어 PM 지원하기
- G-2 주니어 PM 위한 AI 하네스 구축 가이드
- G-3 대기업 직장인을 위한 AI Agent & Skill 추천 가이드 2026
- A-1 AI 코딩 에이전트 시대, 거버넌스 없이 괜찮을까?
- A-2 AI가 코딩하고, AI가 관리한 1주일의 기록
- A-3 AI-SDLC 도입, 그 첫 실험의 소회
- A-4 AI 멀티 에이전트 개발 효과성 분석
- A-5 Fable 5와 보낸 첫 하루 — 모델 × 하네스 × RAG 실측 회고
- CC-3 Opus xhigh 솔로 vs ultracode 멀티에이전트 — 작업유형별 A/B 실측
- CC-4 내 노트 4만 개 검색 — LLM 직접 읽기 vs 전용 CLI, 하이브리드 5.5배
- CC-5 Obsidian 노트를 앱 없이 검색 — 오픈소스 byeori(벼리)