AI, Rust, 그리고 Obsidian을 활용해 공부의 마찰을 줄인 방법
Source: Dev.to
위 링크에 있는 글의 전체 내용을 제공해 주시면, 해당 텍스트를 한국어로 번역해 드리겠습니다. (코드 블록, URL 및 마크다운 형식은 그대로 유지됩니다.)
문제: 문서화 마찰
모든 학생은 필기가 기억을 유지하는 데 기본적이라는 것을 알고 있지만, 필기의 형식을 맞추는 행위는 종종 학습 자체보다 더 많은 에너지를 소비합니다. 나는 연구는 순조롭게 진행되었지만, Obsidian에서의 문서화가 수동적인 병목 현상이 되는 순환에 갇힌 것을 발견했습니다.
공부할 주제가 열 개나 될 때, “채팅에서 복사 → Obsidian 열기 → 파일 만들기 → 붙여넣기”라는 워크플로우조차도 여전히 너무 느렸고, 나는 중간에 노트를 포기하게 되었습니다.
아이디어: 노트 자동화
나는 주제 이름만으로 완전한 Markdown 노트를 생성하는 애플리케이션을 만들기로 했습니다. 그 결과가 noteap이며, 수동 단계를 없애는 3계층 시스템입니다.
Source: …
아키텍처 개요
| 레이어 | 기술 | 책임 |
|---|---|---|
| Interface | React Native | 주제(예: “Rust Ownership”)를 입력할 수 있는 간단한 UI |
| Brain | Node.js + Gemini AI | 주제를 받아 프롬프트 엔지니어링을 통해 코드 예시가 포함된 구조화된 Markdown 파일을 생성하고 MongoDB에 저장 |
| Synchronizer | Rust | 보류 중인 노트를 가져와 .md 파일로 변환하고 Obsidian의 “New Notes” 폴더에 삽입하는 데스크톱 클라이언트 |
Interface (React Native)
사용자가 주제를 입력하는 최소한의 앱. 방해 요소 없이 하나의 입력 필드와 제출 버튼만 제공.
Brain (Node.js + Gemini AI)
// Example: server endpoint handling a topic request
app.post('/generate', async (req, res) => {
const { topic } = req.body;
const prompt = `Create a detailed Markdown note about ${topic}, including code examples and sections.`;
const markdown = await gemini.generate(prompt);
const id = await db.notes.insert({ topic, markdown, status: 'pending' });
res.json({ id });
});
- Gemini AI를 사용해 잘 구조화된 Markdown 문서를 생성합니다.
pending상태와 함께 결과를 MongoDB에 저장합니다.
Synchronizer (Rust)
use std::fs;
use reqwest::blocking::Client;
use serde::Deserialize;
#[derive(Deserialize)]
struct Note {
id: String,
markdown: String,
}
fn main() {
let client = Client::new();
let resp = client.get("https://my-noteap-server.com/pending")
.send()
.unwrap()
.json::>()
.unwrap();
for note in resp {
let path = format!("/path/to/Obsidian/New Notes/{}.md", note.id);
fs::write(path, note.markdown).expect("Failed to write note");
// Optionally mark as processed on the server
}
}
- 시스템 시작 시 실행되는 단일 바이너리로 동작합니다.
- 보류 중인 노트를 가져와 Obsidian 폴더에 직접 기록하고, 컴퓨터를 열 때 바로 사용할 수 있도록 합니다.
Deployment
Node.js 서버는 AWS EC2 인스턴스에서 Docker 컨테이너 내부에서 실행되며, 모바일 앱과 Rust 클라이언트가 통신할 수 있는 안정적인 URL을 제공합니다.
연구 배경
Annie Piolat 등은 “Cognitive effort during note taking” (Applied Cognitive Psychology, 2005)에서, 필기 (note‑taking)가 가장 많은 정신적 노력을 요구하는 작업 중 하나이며 상당한 인지적 노력을 소모한다는 점을 제시했습니다. 형식화와 조직 단계는 종종 제가 **문서 마찰(documentation friction)**이라고 부르는 현상을 만들어, 학습에 사용할 수 있는 에너지를 소모하게 합니다.
“필기 (note‑taking)는 매우 높은 노력이 요구되는 활동이며, 노트를 형식화하는 행위는 학습 자체보다 더 많은 정신 자원을 소모할 수 있다.” – Piolat, A., Olive, T., & Kellogg, R. T. (2005)
자동화의 이점
- 에너지 보존: 포맷팅 단계를 제거함으로써 정신 자원을 활성 리뷰와 적용에 사용할 수 있습니다.
- 시간 절약: 수동 복사‑붙여넣기가 사라지고, 노트가 자동으로 Obsidian에 나타납니다.
- 일관성: 생성된 모든 노트가 동일한 구조를 따라 탐색 및 학습이 쉬워집니다.
결론 및 행동 촉구
노트 작성 워크플로우를 자동화함으로써 이전에 “문서화 마찰” 때문에 잃어버렸던 시간과 정신 에너지를 되찾았습니다. 관료주의에 시간을 들이는 대신 검토와 실용적인 적용에 집중할 수 있게 되었습니다.
시간과 노트를 어떻게 관리하시나요? 워크플로우의 어떤 부분을 자동화해 본 적이 있나요?
참고문헌
PIOLAT, A.; OLIVE, T.; KELLOGG, R. T. Cognitive effort during note taking. Applied Cognitive Psychology, 2005.