Blog
진창수

진창수

MeetNote 개발 회고 — 로컬 회의록 자동화 Obsidian 플러그인

1주일, 115커밋으로 만든 로컬 회의록 자동화 도구의 개발 과정과 기술적 결정들을 돌아봅니다.

MeetNoteObsidianWhisper회고

원문: 42class.com/posts/meetnote-retrospective

왜 만들었나

회의록 작성은 모든 조직의 반복 업무입니다. 클라우드 서비스는 비용과 보안 문제가 있고, 녹음 파일을 수동으로 정리하는 것은 시간이 많이 듭니다. 데이터를 외부로 보내지 않으면서, 회의가 끝나면 마크다운으로 정리된 회의록이 자동으로 만들어지는 도구가 필요했습니다.

핵심 기술 결정

로컬 우선

모든 처리를 로컬에서 수행합니다. 음성 인식(Whisper large-v3-turbo), 화자 분리(pyannote.audio 3.1), 요약(Claude CLI 또는 Ollama)까지 외부 서비스 없이 동작합니다. Apple Silicon MPS, NVIDIA CUDA를 자동 감지하여 GPU가 있으면 60분 회의를 약 5분에 처리합니다.

마크다운 출력

마크다운은 AI 에이전트에게 전달하기 가장 좋은 포맷입니다. 회의록이 Obsidian 볼트에 마크다운으로 저장되면, 다른 문서와 자연스럽게 연결되고 AI가 맥락으로 활용할 수 있습니다.

누적 학습 화자 인식

가장 만족스러운 기능은 화자 임베딩 데이터베이스입니다. 회의를 할수록 화자별 음성 특징이 축적되고, 코사인 유사도 매칭으로 정확도가 점점 올라갑니다. 자기 개선하는 시스템입니다.

개발 과정에서 배운 것

  • 플랫폼별 모델 선택이 중요하다 — macOS, Linux, Windows마다 최적의 모델과 런타임이 다릅니다
  • STT와 화자 분리의 타임스탬프 정렬이 예상보다 까다로웠습니다
  • Docker 빌드 최적화 — 레이어 캐싱 전략으로 46분 → 3분 미만으로 단축했습니다
  • 환각(hallucination) 필터링 — Whisper가 무음 구간에서 생성하는 잘못된 텍스트를 걸러내는 로직이 필요합니다

약 1주일, 115커밋으로 첫 버전을 완성했습니다.