GitHub - Doggy-Footprint/Obsidian-keyword-suggest

Grounding Plugin

Motivation

Untitled

저는 Obsidian을 통해 개인 지식 관리, personal knowledge management를 하고 있습니다. Obsidian 노트가 속한 폴더, 그리고 그 폴더가 속한 폴더의 hierarchy에 따라 지식을 관리하는 것에 더해 internal link를 통해 지식을 관리할 수 있도록 돕는 노트 정리 앱입니다. Obsidian에서 internal link를 만드는 방법은 [[]] 를 사용하는 것입니다. Obsidian 앱은 [[ 를 인식하여 연관 있는 노트를 제안Suggest합니다.

그리고, 저는 [[ 를 통해 internal link를 만드는 게 익숙해지지 않고, 집중력을 잃는 다는 것을 깨달았고, [[ 표시 없이도 자동으로 노트를 제안하는 플러그인을 만들기로 생각했습니다.

Domain Research

Obsidian Plugin API look around

Obsidian에서 제공하는 Plugin API를 연습해볼 필요가 있었습니다.

아래 두 페이지를 통해 정보를 얻었고, 기본적인 플러그인을 제작했습니다.

  1. Obsidian Docs: Obsidian Plugin 관련 API 정보를 제공합니다.
  2. Obsidian Help: Obsidian 사용정보를 제공합니다. Domain Research를 위해 참고했습니다.

위 문서에서 목록으로 정리해둔 API를 사용해보고 내린 결론은 다음과 같습니다.

<aside> ⚠️ Obsidian Plugin API문서화가 잘 되어 있지 않습니다. 정확히는 대부분의 API는 설명이 없습니다. → 테스트와 검색, Obsidian Plugin dev discord, 기존 Plugin을 참조하여 API의 사용법을 확인했습니다.

</aside>

<aside> ⚠️ Obisidian Plugin테스트가 어려웠습니다. 지속적인 테스트를 위해 다른 방법을 찾아야 했습니다. → 이는 Separation of Business Logic으로 이어집니다.

</aside>

<aside> ⚠️ Obsidian에서 기본으로 제공하는 제안Suggest 을 override하는 형태로 구현하는 게 첫 번째 아이디어 였습니다만, Obsidian Plugin API는 그런 형태의 동작을 제공하지 않는 것으로 보였습니다. 따라서 이 계획은 폐기했습니다.

</aside>

Core Obsidian Plugin APIs

Obsidian Plugin API를 통해 생각한 기능을 구현할 수 있는지 확인했습니다. 개발 전 생각한 핵심 기능은 2가지 입니다.

  1. 유저의 입력에 따라 적절하게 관련 노트를 제안한다. 제안을 클릭하면 Obsidian Internal Link를 추가한다.
  2. vault읽어온 다음, 조건(폴더, 태그 등)에 맞는 노트를 따로 선별하여 저장소에 저장(in-memory)해둔다. 유저가 노트 내용을 수정하면 이 저장된 정보도 변경되어야 한다.

유닛 테스트를 통해 아래 API를 사용하여 생각하는 기능을 구현할 수 있는 것을 확인했습니다.