_이 글은 Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady 제출물입니다.
제가 만든 것 (What I Built)
우리 모두 그런 경험을 해봤을 겁니다. 애매하게 이름 붙여진 PDF, 스크린샷, 문서 파일들로 가득 찬 다운로드 폴더와 '언젠가 정리하겠다'고 다짐하는 파일들 말입니다.
문제는 파일을 정리하기 어렵다는 것이 아닙니다. 꾸준히 그것을 하는 것이 지루하고 귀찮다는 것입니다.
만약 AI가 파일 관리를 블랙박스처럼 만들지 않으면서 그 혼란을 정리하는 데 도움을 줄 수 있다면 어떨까요?
이것이 Hacktoberfest 2026 Week 3를 위해 제작된, 로컬 우선(local-first)의 AI 파일 정리 도구인 DustBunny의 아이디어입니다.
🐰 DustBunny란 무엇인가요?(What Is DustBunny?)
DustBunny는 파일을 분석하고 더 의미 있는 파일 이름과 폴더 목적지를 제안함으로써 사용자가 복잡한 폴더를 이해하도록 돕습니다.
단순히 경직된 명명 규칙에 의존하는 대신, Ollama를 통해 오픈 웨이트 언어 모델(open-weight language model)을 사용하여 상황 인식적(context-aware) 정리 제안을 생성합니다. 또한 이 도구는 추천 이유를 설명할 수 있어, 사용자가 단순히 자동화된 결정에 맹목적으로 의존하기보다 파일이 왜 특정 위치에 속하는지 이해하도록 돕습니다.
목표는 AI가 사용자님의 파일 시스템 전체를 장악하게 하는 것이 아닙니다. 파일을 정리하는 과정을 더 쉽게 만들면서도 사용자가 통제권을 유지할 수 있도록 하는 것입니다.
💡 제가 이것을 만든 이유 (Why I Built It)
파일의 혼란은 점진적으로 쌓입니다. 다운로드한 문서는 일반적인 이름이 붙고, 유용한 파일은 수십 개의 다른 파일들 사이에 사라지며, 중요한 자료는 찾기 어려워집니다.
전통적인 파일 정리 도구들은 예측 가능한 규칙에 대해서는 도움을 줄 수 있지만, 의미 있는 정리는 종종 그 파일이 무엇에 관한 것인지 이해하는 것을 필요로 합니다.
클라우드 기반 AI는 또 다른 고려 사항을 도입합니다. 즉, 파일 내용을 외부 서비스로 전송하는 것이 모든 사용자에게 바람직하지 않을 수 있다는 점입니다.
저는 다른 접근 방식을 탐구하고 싶었습니다. 바로 AI 지원 정리를 실용적이고, 설명 가능하며(explainable), 로컬 우선으로 만드는 것입니다.
DustBunny는 오픈 웨이트 모델들이 유용한 일상 업무를 어떻게 지원할 수 있는지 탐색하는 동시에, 친숙한 워크플로우에 AI를 가져옵니다.
✨ DustBunny가 할 수 있는 것들 (What Can DustBunny Do?)
파일 분석: 애플리케이션의 정리 워크플로우를 통해 사용자가 선택한 폴더 내 파일을 처리합니다.
더 나은 파일명 제안: 일반적이거나 도움이 되지 않는 이름을 더 설명적인 대안으로 대체할 것을 제안합니다.
폴더 목적지 추천: 의미 있는 폴더 구조를 포함하여 파일이 속할 수 있는 목적지를 제안합니다.
제안 근거 설명: 사용자가 추천 사항을 평가할 수 있도록 그 이유(reasoning)를 제공합니다.
사용자 통제권 유지: AI의 출력을 절대적인 지시가 아닌, 하나의 제안으로 간주하여 사용자에게 최종 결정권을 부여합니다.
핵심 아이디어는 간단합니다. AI는 사용자가 더 나은 결정을 내리도록 돕는 것이지, 그 결정을 눈에 보이지 않게 만드는 것이 아닙니다.
데모
코드
DustBunny
개인 정보 보호를 최우선으로 하며 로컬에서만 작동하는 AI 파일 정리 도구로, 파일을 이동하거나 이름을 바꾸거나 삭제하지 않고도 분류하고 이름을 변경하는 방법을 제안합니다.
문제점 (The Problem)
폴더가 쌓입니다: Document1.pdf, notes.txt, scan_20240115.pdf, meeting.md. 나중에 무언가를 찾는 것은 힘든 일입니다. 클라우드 AI 도구도 도움이 될 수 있지만, 파일을 외부 서버에 업로드합니다.
해결책 (The Solution)
DustBunny는 오직 사용자의 기기에서만 실행됩니다. 폴더를 지정하거나 (또는 브라우저에서 하나 선택) 하면 다음 작업을 수행합니다:
.txt, .md, 그리고 .pdf 파일을 로컬에서 스캔합니다.
- 텍스트를 추출합니다 (PDF는 PyMuPDF를 통해, 텍스트/마크다운은 직접).
- 로컬 Ollama 모델 (
qwen3.5:2b)에 텍스트만 전송합니다.
- 파일당 구조화된 제안을 반환합니다:
- 카테고리 (예: "Financial", "Code", "Personal")
- 제안 파일명 (설명적, 확장자 없음)
- 제안 목적지 폴더
- 콘텐츠에 기반한 한 문장 설명
- 신뢰도 추정치 (모델 자체의 불확실성으로부터)
- 복사 버튼과 함께 결과를 표시합니다 — 사용자가 무엇을 할지 결정합니다.
파일은 절대 수정되지 않습니다.
GitHub에서 보기
구현 과정 (How I Built It)
🧠 DustBunny의 AI: Qwen 3.5 2B + Ollama
DustBunny는 Ollama를 통해 로컬에서 서비스되는 오픈 웨이트(open-weight) 언어 모델인 Qwen 3.5 2B를 사용합니다.
추론(inference)을 위해 호스팅된 LLM API에 의존하기보다는, DustBunny는 로컬에서 실행되는 Ollama 인스턴스와 통신합니다. 이 모델은 의미 있는 파일 이름과 적절한 폴더 목적지를 포함하여 파일 정리 제안을 생성합니다.
작고 간결한 모델을 선택하는 것은 중요한 엔지니어링 결정이었습니다. 저는 유료 추론(inference) API에 의존하지 않고도 로컬 AI가 일상적인 하드웨어에서 실용적인 작업을 처리할 수 있는지 탐구하고 싶었습니다.
개발 과정 중에는 처음에 Gemma 3 1B로 실험하다가 Qwen 3.5 2B로 전환했습니다. 이후 불필요한 지연 시간(latency)을 줄이고 애플리케이션이 예상하는 구조화된 출력을 모델이 생성하도록 돕기 위해 확장 사고(extended thinking) 비활성화 등 추론 구성을 개선했습니다.
더 작은 로컬 모델을 다루는 것은 또한 실질적인 어려움을 가져왔습니다. 모델의 출력은 항상 완벽하게 구조화되거나 일관적이지 않기 때문에, 모든 응답을 맹목적으로 신뢰하기보다는 애플리케이션에 검증(validation) 및 오류 처리(error handling)가 필요합니다.
이러한 경험은 중요한 설계 원칙을 형성했습니다. 유용한 AI 애플리케이션은 단순히 뛰어난 모델 이상이 필요하며, 그 주변에 신뢰할 수 있는 시스템이 필요합니다.
Qwen 3.5 2B와 Ollama를 결합함으로써, DustBunny는 클라우드 의존적인 AI 워크플로우에 대한 실용적인 대안을 탐색합니다. 로컬 추론은 프로젝트의 개인 정보 보호(privacy-conscious) 설계에 도움을 주지만, 애플리케이션의 전반적인 네트워크 동작은 여전히 구성 및 다른 서비스에 따라 달라집니다.
🛠️ 작동 방식 (How It Works)
DustBunny는 현대적인 웹 인터페이스와 Python 백엔드, 그리고 로컬에서 실행되는 AI 모델을 결합합니다.
프론트엔드(Frontend) — React + Vite
파일 정리 워크플로우와 상호 작용하고 제안을 검토할 수 있는 인터페이스를 제공합니다.
백엔드(Backend) — Python + FastAPI
애플리케이션의 백엔드 로직과 인터페이스와 AI 기반 기능 간의 통신을 처리합니다.
AI — Qwen 3.5 2B + Ollama
파일 이름 및 폴더 목적지에 대한 문맥 인식(context-aware) 제안을 생성하기 위해 언어 모델을 로컬에서 실행합니다.
이 애플리케이션은 로컬 우선(local-first) 워크플로우를 기반으로 설계되었습니다. AI 출력을 맹목적으로 실행해야 할 지침으로 취급하기보다는, 사용자가 검토할 수 있는 제안을 생성하는 데 중점을 둡니다.
왜 오픈 혁신이 중요할까요?
🔓 오픈 웨이트(Open-Weight) AI가 중요한 이유
오픈 소스 소프트웨어는 사람들이 이를 검사하고(inspect), 학습하며(learn), 적응시키고(adapt), 기반으로 구축할 수 있을 때 가장 유용합니다.
DustBunny는 오픈 웨이트 AI의 실질적인 측면을 탐구합니다. 즉, 챗봇이나 독립형 모델 시연에 그치는 것이 아니라 실제 애플리케이션의 일부로 모델을 사용하는 것입니다.
또한, 작고 압축된 모델을 로컬에서 실행하면 사용자의 하드웨어 및 구성에 따라 호스팅되는 추론 API(hosted inference API)에 의존하지 않고 실험할 기회를 만듭니다.
이는 AI 기반 도구에 대한 중요한 설계 원칙을 강조합니다. 즉, 추천은 이해 가능해야 하며, 사용자는 결과적인 행동(consequential actions)에 대한 통제권을 유지해야 합니다.
파일 분류, 추천 품질, 평가 및 다양한 로컬 모델 지원을 개선할 여지가 있습니다. 오픈 소스 기반은 커뮤니티의 피드백과 기여를 통해 그러한 개선을 가능하게 합니다.
🧰 사용된 기술 (Built With):
React + Vite — 프론트엔드(Frontend)
Python + FastAPI — 백엔드(Backend)
Qwen 3.5 2B — 오픈 웨이트 언어 모델(Open-weight language model)
Ollama — 로컬 모델 추론(Local model inference)