이 글은 Obsidian에 LLM Wiki 만들기 시리즈의 1편이다.
시작은 이랬다.
Obsidian의 플러그인 만드는 방법은? Gemini API를 써서 채팅하는 그런 plugin을 만들고 싶다
플러그인을 만들어본 적도, 어디서부터 시작해야 하는지도 몰랐다. 그런데 왜 하필 새로 만들기로 했을까 — Obsidian 커뮤니티엔 이미 AI 채팅 플러그인이 여럿 있는데.
왜 CLI가 아니라 API 직접 호출인가
개발 초반에 공교롭게도 구글이 Gemini CLI를 종료하고 Go로 새로 짠 Antigravity CLI(명령어
agy)로 갈아타는 발표를 했다. 터미널에서 gemini 명령어를 쓰던 사람들은 다들 마이그레이션을
해야 하는 상황이었다. (이 CLI 단종 얘기는 나중에 쓴 다른 글에도
잠깐 나온다 — 그때는 헷갈리는 대상으로만 등장했는데, 사실 이 플러그인을 만들 때 이미 한 번
마주쳤던 이슈였다.)
다행히 이 플러그인은 그 영향권 밖에 있었다. 구글 공식 CLI 프로그램을 거치지 않고
https://generativelanguage.googleapis.com/... 엔드포인트로 API 요청을 직접 쏘는
방식이었기 때문이다. CLI가 없어지든 이름이 바뀌든, gemini-2.5-flash/gemini-2.5-pro
모델 자체와 API 엔드포인트는 그대로 살아있으니 상관없었다. 이때 “CLI 도구 이름은 계속
바뀌어도(Bard → Gemini → Duet AI → Antigravity), API로 부르는 모델 브랜드명은 상대적으로
안정적이다”라는 감을 잡았다. 이게 나중에 플러그인 이름을 정할 때도 영향을 줬다.
이미 있는 10개와 비교해보기
본격적으로 뭘 더 만들지 정하기 전에, 비슷한 역할을 하는 기존 플러그인 10개를 쭉 비교해봤다.
| 플러그인 | 강점 | 약점 |
|---|---|---|
| Copilot | 거의 모든 API 지원, 기능 풍부 | 무겁고 초기 설정 진입장벽 높음 |
| Text Generator | 강력한 템플릿, 워크플로우 자동화 | 채팅보다는 문서 생성 중심 |
| Smart Connections | 노트 전체를 벡터 임베딩해서 기억 | 초기 인덱싱 오래 걸림, 토큰 급증 위험 |
| BMO Chatbot | 사이드바 채팅 UX가 깔끔, 페르소나 커스텀 쉬움 | 외부 연동/고도화 기능 부족 |
| Obsidian Ava | 글쓰기 편집 보조(재작성/톤 변경) 강함 | 연속 대화 컨텍스트 유지 약함 |
| Khoj | 로컬 파일/GitHub 등 다양한 소스 결합 | 별도 서버/계정 필요, 구조 복잡 |
| AI Research Assistant | 긴 문서 분석, 학술 리포트에 강함 | 가벼운 메모 정리엔 UI가 무거움 |
| Companion | 인라인 자동완성(Copilot 스타일) | 독립적인 채팅방 기능 자체가 없음 |
| Canvas Conversation | 캔버스 마인드맵과 결합, 시각적 확장 | 빠른 타이핑 대화엔 동선 복잡 |
| Simple AI Chat | 초경량, 에러 적음 | 확장성 거의 없음 |
훑어보니 내가 원하는 건 이 중 어느 하나도 정확히 채워주지 않았다. BMO Chatbot의 깔끔한 채팅 UX와 페르소나 커스텀, Simple AI Chat의 가벼움은 마음에 들었지만, 둘 다 확장성(노트 연동, 모델 실시간 전환 같은)이 부족했다. 반대로 Copilot이나 Smart Connections처럼 기능이 많은 쪽은 그만큼 무겁고 설정이 복잡했다.
그래서 잡은 차별화 포인트
- 감성적인 페르소나: 다른 플러그인들은 “User”/“AI” 같은 딱딱한 이름을 바꾸려면 소스를
직접 고쳐야 하는데, 설정 화면에서 바로
주인님/집사처럼 이름을 붙일 수 있게 만들었다. - 실시간 모델 전환: 깊은 설정 창에 안 들어가고 사이드바 상단에서 바로 모델을 바꿀 수 있게 — Copilot 같은 대형 플러그인보다 동선이 짧다.
- 가벼운 확장성: Smart Connections처럼 무거운 임베딩 없이도, 필요할 때만 현재 노트를 가져와서 쓰는 쪽으로 방향을 잡았다 (이 부분은 나중에 별도로 다룰 만큼 설계가 꽤 재밌어졌다).
이름은 왜 “Gemini Butler”가 됐나
기능 얼개가 어느 정도 잡히고 나서 이름을 정할 차례였다. 후보는 Gemini Chat Companion,
Gemini Knowledge Assistant, Gemini Core Chat, 그리고 Gemini Butler였다.
Gemini를 꼭 넣기로 한 이유는 단순했다 — Obsidian 유저가 플러그인 목록에서 이름만 보고
“아, 구글 AI 스튜디오 API 키 쓰는 플러그인이구나”를 1초 만에 알아챌 수 있어야 한다는
것. Antigravity처럼 최신이지만 낯선 이름은 오히려 정체성을 흐린다고 판단했다.
Butler(집사)가 붙은 건, 이미 설정 화면에서 AI 응답 페르소나 이름을 “집사”로 지어뒀던
게 그대로 플러그인 이름으로 넘어온 거였다. 그래서 지금 저장소 이름도
obsidian-gemini-butler로 남아있다. 다만 이건 그때 1차로 붙인 이름이라, 최종 이름은
아직 확정 전이다.
이렇게 방향과 이름을 정하고 나서, 진짜 재밌는 설계 고민들이 시작됐다. 다음 편은 아주 당연해 보이지만 실전에서 제대로 걸려 넘어졌던 문제 — LLM은 시계가 없다는 것부터다.