Obsidian 플러그인 ‘Metadata Auto Classifier’를 개발한 이유

최근에 저는 Obsidian 플러그인인 Metadata-Auto-Classifier를 개발하고 있습니다. 가장 큰 동기는 제가 가장 좋아하는 도구인 Obsidian에서 직접 플러그인을 만들어보고 싶었기 때문입니다. 또한, 이름에서 알 수 있다시피 직접 노트에 메타데이터를 입력하는 것이 번거로워서 이를 해결하고 싶었습니다.

메타 데이터는 왜 중요할까?

Obsidian은 Notion이나 다른 데이터베이스처럼 노트에 메타데이터를 추가할 수 있습니다. 처음에는 태그나 별칭(alias) 외에 커스텀 메타데이터를 추가하는 것의 중요성을 잘 몰랐습니다. 그러나 노트가 점점 많아지면서 메타데이터의 가치가 얼마나 큰지 깨닫게 되었습니다.

노트의 내용이 길어지고 수가 많아질수록, 다시 그 노트로 돌아왔을 때 맥락을 이해하는 데 시간이 더 걸립니다. 이때 메타데이터는 그 노트가 어떤 주제인지, 어떤 목적을 가지고 있는지를 빠르게 알려줍니다. 생성 날짜, 제목, 태그 등의 메타데이터를 통해 노트의 특성을 파악하고 관련된 내용을 연상할 수 있습니다.

잘 작성된 메타데이터는 해당 노트가 내 지식 체계에서 어떤 위치를 차지하는지 알려주어 정보 관리에 큰 도움이 됩니다. 예를 들어, JavaScript 튜토리얼을 작성하고 싶다면 다음과 같이 메타데이터를 활용할 수 있습니다:

  • 프로젝트 노트 검색: JavaScript로 만든 프로젝트 노트를 찾아볼 수 있습니다.
  • 태그 활용: ‘js’ 태그가 붙은 노트를 모아볼 수 있습니다.
  • 역할 기반 필터링: ‘개발자’라는 메타데이터가 있는 노트를 찾아 내가 개발자로서 JavaScript를 어떻게 사용했는지 확인할 수 있습니다.
  • 주제별 페이지 탐색: ‘JavaScript’라는 이름의 페이지를 찾아 관련 정보를 종합할 수 있습니다.

이처럼 메타데이터를 활용하면 여러 관점에서 JavaScript에 대한 정보를 체계적으로 모을 수 있습니다.

메타데이터를 통한 지식 강화

자유도가 높은 Obsidian 환경에서 프론트 매터(메타데이터)는 우리의 지식을 바라보는 데 추가적인 차원을 제공합니다. 특정 메타데이터를 기반으로 노트를 모아서—프로젝트 노트나 개발자 인사이트처럼—작업의 특정 측면에 집중할 수 있습니다. 이러한 조직화는 제가 개발자로서 수행한 모든 작업을 보거나 특정 프로젝트와 관련된 모든 노트를 검토할 수 있게 해줍니다.

실제 제 노트를 예시로 들면 제가 프로그래밍 관련 기록을 할 때는 persona라는 속성에 🔥 Programmer 노트를 링크를 해둡니다.

위와 같이 링크가 쌓이면, 나중에 🔥 Programmer노트를 찾아 갔을 때는 아래와 같이 제가 프로그래밍 관련 일을 얼마나 했는지 알 수 있습니다!

결과적으로 메타데이터는 방대한 노트들 사이에서 필요한 정보를 빠르게 찾고, 지식을 효율적으로 관리하는 데 필수적인 역할을 합니다.

플러그인 소개

Metadata-Auto-Classifier은 현재 노트의 내용을 분석하여 LLM를 사용해 각 메타데이터 필드에 대한 값을 추천합니다. 문서의 내용을 읽고, 해당 노트의 여러 프론트매터를 순차적으로 입력할 수 있습니다. 사용자는 자신이 설정한 속성에 따라 노트를 분류할 수 있습니다. 이를 위해 기본 값으로 tags를 설정해두었으며, 현재 가지고 있는 모든 태그 중 연관성에 따라 자동으로 태그를 삽입할 수 있습니다.

따라서, 프론트매터 입력 및 사용자 조정이 가능하며, 입력 항목의 개수도 조절이 가능합니다

현재 지원 기능

  1. API를 통한 자동 문서 분류

    • AI 모델을 사용하여 문서 내용을 분석하고 적절한 카테고리를 자동으로 할당합니다.
  2. 사용자 정의 프론트매터 생성

    • 사용자가 원하는 대로 프론트매터 필드를 추가하고 관리할 수 있습니다.
  3. 태그 자동 생성

    • 문서 내용을 기반으로 관련 태그를 자동으로 생성합니다.

개발자로서 고민하고 있는 포인트

1. 오픈 소스 AI 모델 지원 확대

  • 다양한 LLM 통합: 현재는 OpenAI API를 사용하고 있지만, 플러그인의 유연성과 접근성을 높이기 위해 로컬 LLM(Local Language Model)이나 다른 오픈 소스 AI 모델과의 호환성을 고려하고 있습니다. 이를 통해 사용자는 자신이 선호하는 AI 모델을 선택하거나 커스텀 모델을 적용할 수 있게 됩니다.
  • 모듈식 아키텍처 설계: 다양한 AI 모델을 지원하기 위해 플러그인의 아키텍처를 모듈화하고자 합니다. 인터페이스나 추상 클래스를 정의하여 각 AI 제공자별로 구현체를 만들 수 있도록 구조를 설계하면, 새로운 모델 추가 시 코드 변경을 최소화할 수 있습니다.
  • 성능 및 호환성 검증: 오픈 소스 모델은 성능이나 API 구조가 다양하므로, 각 모델에 대한 성능 테스트와 호환성 검증이 필요합니다.
    • 이를 위해 자동화된 테스트 스위트를 구축하고, 지속적인 통합(CI) 환경에서 검증 과정을 통합할 계획입니다.
    • Obsidian에서 테스트 케이스를 어떻게 만들까 고민입니다 하하

2. 부분적 컨텍스트 분석 지원

  • 선택 영역 기반 처리: 사용자가 노트의 특정 부분을 선택하면 해당 부분만을 기반으로 메타데이터를 생성할 수 있도록 기능을 추가하고자 합니다. 이를 위해 에디터에서 선택된 텍스트를 감지하고, 그 내용을 AI 모델에 전달하는 로직을 구현해야 합니다.
  • 콘텐츠 분할 및 병렬 처리: 긴 노트의 경우 토큰 제한에 걸릴 수 있으므로, 노트를 의미 있는 단위로 분할하여 각 부분을 개별적으로 처리한 후 결과를 통합하는 방법을 고려하고 있습니다.
  • 맥락 유지 전략: 부분적인 내용만으로 메타데이터를 생성할 때 전체 문맥이 손실될 수 있으므로, 노트의 요약 정보나 주요 키워드를 함께 제공하여 AI 모델이 보다 정확한 결과를 도출할 수 있도록 할 계획입니다.

3. 사용자 정의 분류 기준 제공

각 프론트매터 항목이 어떻게 구분되어야 하는지에 대한 명확한 지침이나 예시를 사용자로부터 입력받아 AI 모델에 전달함으로써 분류 정확도를 높이고자 합니다. 현재는 분류해야 할 값을 유저가 넣어주면 AI가 판단하고 넘기도록 하고 있습니다. 분류 항목에 대한 맥락을 추가하면 좀 더 사용자가 의도한 대로 분류를 할 수 있을 것이라 생각합니다.

4. 대용량 노트 처리 전략

  • 토큰 제한 대응 방안: 현재는 노트 전체를 한 번에 처리하지만, 긴 노트의 경우 토큰 제한으로 인해 문제가 발생할 수 있습니다. 이를 해결하기 위해 노트를 일정한 크기로 분할하고, 각 부분을 순차적으로 또는 병렬로 처리한 후 결과를 종합하는 방법을 고려하고 있습니다.
  • 요약 기반 처리: 노트의 핵심 내용을 추출하거나 요약본을 생성하여, 그 요약된 정보를 기반으로 메타데이터를 생성하는 방법도 검토하고 있습니다. 이를 통해 처리 시간을 단축하고 토큰 제한 문제를 완화할 수 있습니다.
  • 메모리 및 성능 최적화: 대용량 데이터를 처리할 때 메모리 사용량을 최소화하고 성능을 최적화하기 위한 알고리즘과 데이터 구조를 적용할 계획입니다.

5. 향상된 사용자 경험 (UX) 개선

  • 직관적인 UI 디자인: 플러그인의 인터페이스를 개선하여 사용자가 기능을 쉽게 이해하고 활용할 수 있도록 노력하고 있습니다. 아이콘, 메뉴 구조, 설정 화면 등을 재설계하여 사용자 친화성을 높이고자 합니다.
  • 실시간 피드백 제공: 메타데이터 생성 과정에서 진행 상태나 결과를 실시간으로 표시하여 사용자에게 투명성을 제공합니다. 예를 들어, 진행률 표시바나 알림 메시지를 통해 사용자가 현재 어떤 작업이 진행 중인지 알 수 있도록 합니다.
  • 사용자 맞춤 설정 강화: 다양한 사용자 요구에 대응하기 위해 설정 옵션을 확대하고, 프리셋이나 프로파일 기능을 도입하여 사용자가 자신의 작업 흐름에 맞게 플러그인을 커스터마이즈할 수 있도록 할 계획입니다.
  • 도움말 및 가이드 제공: 플러그인의 기능과 사용 방법을 쉽게 이해할 수 있도록 튜토리얼, FAQ, 툴팁 등의 도움말을 제공하고자 합니다. 이를 통해 초기 사용자도 부담 없이 플러그인을 활용할 수 있습니다.
  • 에러 처리 및 로그 기능 개선: 오류 발생 시 명확한 에러 메시지와 해결 방법을 제시하고, 로그 기능을 통해 문제 진단이 용이하도록 시스템을 개선할 예정입니다.