선임 선생님께 묻던 일이 검색창 한 줄로 — 학교 행정 문서 로컬 RAG 지식창고 완전 정복
📚 매년 누적되는 학교 교육과정 운영계획서, 연구학교 보고서, 교원 연수 자료 PDF·MD 파일들을 교무실 공용 로컬 볼트에 집대성하고, 로컬 AI 챗봇으로 '작년 현장체험학습 안전사고 대책 매뉴얼 조항'을 1초 만에 검색·열람합니다. 선임 교사에게 구두로 묻거나 종이 바인더를 뒤적이던 시간이 끝납니다.
기본 도구는 제미나이 프롬프트로 만든 단일 HTML 문서 목차 검색기(통신 0), 확장은 로컬 RAG(검색 증강 생성, Retrieval-Augmented Generation) — 문서를 조각으로 찾아 답을 만드는 내 PC 안의 전산 비서입니다. 설치는 옵시디언(Obsidian)과 Ollama 두 프로그램이 전부입니다.
📖 한 줄 정의
심기 모드(데이터 임베딩): API 데이터를 미리 받아 HTML 파일 안 상수로 박아두는 방식(앱 실행 중 외부 통신 0).
학내망 원칙: 학교 배포 웹앱은 개인정보 수집·저장·전송 없음(외부 CDN·API 호출 0, 단일 파일) — 학생은 학내망에서 교사 PC 서버에 접속.
1. 3대 핵심 분석 비교표
| 무엇이 바뀌었나요? / 영역 | 초보자를 위한 쉬운 설명 | 이렇게 한번 써보세요! |
|---|---|---|
| 문서 아카이빙(기록 보관) | 연도별 폴더 + 마크다운(Markdown) 표준 서식으로 문서를 통일 — 종이 바인더의 내용이 검색 가능한 자산이 됩니다. 개인정보가 담긴 문서는 아카이빙 대상에서 분리(보호 대상은 목록만). | 연도별 폴더 설계. |
| 기본 도구: 목차 검색기 | 단일 HTML — 문서 제목·키워드 상수를 심고 검색하면 해당 파일 경로를 바로 보여줍니다. 로컬 AI 없이도 검색 효율이 10배가 됩니다. | searchIndex 함수. |
| 확장: 로컬 RAG 챗봇 | 문서 조각(청크)을 임베딩(embedding — 문장을 숫자 벡터로 바꾸는 기법)으로 인덱싱하고, 질문과 가장 가까운 조각을 찾아 로컬 LLM이 답을 조립 — '조항 그대로'가 답에 붙습니다. 심기 모드(데이터 임베딩)와 이름이 비슷하지 전혀 다른 개념입니다. | Ollama 연동. |
| 원칙·정합 | 검색·추론 전부 교무실 공용 PC(보안망 내부)에서만 — 외부 API·클라우드 호출 0. 개인정보 문서는 별도 보호(아카이빙 제외 목록 운영). | EMBED_INDEX. |
2. 핵심 아키텍처 해설
① 문서 → 마크다운 아카이빙 루틴
## 2026_현장체험학습_안전대책
### 3. 안전사고 대응 절차
- 발생 즉시 인솔교사 → 보건교사 → 책임교사 통보 체계
- 사고 유형별 초기 대응 조항: 3-2 (실측 문서 조항 인용)
PDF 내용을 연도·문서명·조항 구조로 마크다운 옮겨 담으면, 볼트 전체가 한 번의 검색으로 열리는 지식이 됩니다.
② 기본 도구: 단일 HTML 목차 검색기
const INDEX = [
{ title: "2026 현장체험학습 안전대책", tag: "안전", path: "2026/안전대책.md" },
{ title: "2026 교육과정 운영계획서", tag: "과정", path: "2026/운영계획서.md" }
];
function searchIndex(word) {
return INDEX.filter(function (x) {
return x.title.indexOf(word) > -1 || x.tag.indexOf(word) > -1;
});
}
문서 제목·태그 상수를 심은 검색기 — 로컬 AI 없이도 필요한 문서 경로가 즉시 나옵니다(심기 모드).
③ 확장: 로컬 RAG 파이프라인
async function askLocal(question) {
const res = await fetch("http://localhost:11434/api/generate", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
model: "gemma2:2b",
prompt: "아래 문서 조각에서 답을 찾아 조항 번호와 함께 답해줘:\n"
+ findChunks(question) + "\n질문: " + question,
stream: false
})
});
return (await res.json()).response;
}
문서 조각 검색 → 로컬 LLM 조립의 2단계 RAG. 인터넷 연결이 끊겨도 검색과 답변이 계속됩니다.
④ 원칙·정합
개인정보(성명·연락처)가 포함된 문서는 아카이빙 전에 마스킹하거나 목록에서 제외하는 운영 규칙을 명시하고, 볼트는 교무실 공용 PC에 두되 별도 암호 폴더로 관리합니다.
3. 초보자를 위한 바이브 코딩 실전 사용 예시
- 프롬프트 복사 — 아래 '제미나이 전용 에러 제로 프롬프트' 전체를 복사해 Gemini에 붙여넣습니다.
- 역질문 답변 — Gemini의 질문 3가지(아카이빙 문서 유형, 태그 체계, 로컬 연동 여부)에 답하면 설계가 확정됩니다.
- HTML 파일 실행 — 완성 코드를 '행정창고.html'로 저장 후 더블클릭 — 교무실 공용 PC에서 문서 목차 검색이 시작됩니다.
제미나이 전용 에러 제로 프롬프트
[🚨 에러 방지 기본 안전장치]
1. 결과물은 외부 라이브러리·CDN 의존성 없이 단일 HTML 파일로 완성한다.
2. 사운드는 Web Audio API로 직접 합성한다: 검색 완료 '똑', 문서 없음 '삑'. 오디오 파일 사용 금지.
3. 파일 상단 INDEX 상수에 문서 제목·태그·볼트 경로를 정의해두어 외부 통신 없이 목차 검색이 가능하게 한다.
4. 검색은 제목·태그 부분 일치 방식으로 간단하게 구현하되, 결과에 '볼트에서 여는 경로'를 함께 표시한다.
5. 개인정보(성명·연락처)가 포함된 문서는 INDEX에 경로만 남기고 내용은 저장하지 않는다(보호 대상 분리).
6. 로컬 LLM(Ollama) 연동 토글을 제공하되, 기본값은 오프라인 목차 검색 모드로 두고 http://localhost:11434 호출은 교사가 명시적으로 활성화할 때만 실행한다.
7. 외부 클라우드, 구글 드라이브, 상용 AI API 호출 코드를 절대 넣지 않는다(학내망 보안 원칙).
8. // TODO, /* 생략 */ 같은 미완성 코드는 절대 넣지 말고 끝까지 완성한다.
[❓ 역질문 유도]
코드를 바로 만들지 말고, 아래 3가지를 먼저 나에게 질문한 뒤 내 답변으로 설계를 확정한다.
Q1. 아카이빙할 문서 유형 3~4가지는? (운영계획서·안전대책·연수 자료 등)
Q2. 문서 태그 체계는? (연도 / 업무 구분 / 유형 3단 권장)
Q3. 로컬 LLM(Ollama) 연동 기능을 포함할까, 목차 검색 모드로만 할까?
🎯 에디터 한줄평
학교에는 선생님의 기억에만 있는 지식이 놀랍도록 많습니다. 그 기억이 은퇴하면 학교도 한 단계 뒤로 물러서기 마련인데, 이 지식창고는 학교의 기억을 문서로 남기고 누구나 찾을 수 있는 자산으로 바꿉니다. '임베딩'이라는 단어의 두 얼굴(파일 안에 데이터 심기 vs 문장을 벡터로 바꾸기)까지 정확히 구별해주는 짜임새 — 학교 행정 디지털화의 훌륭한 시작점입니다.
📚 기술·교육 참고 링크
- Obsidian 공식 웹사이트 : 학교 행정 문서를 마크다운 볼트로 아카이빙
- Ollama 공식 웹사이트 : 보안망 내부에서만 구동되는 로컬 LLM 실행기
- 교육·행정 연계: 학교 자율연수·현장체험학습 안전 매뉴얼 등 학내망 공개 행정 자료 기준 활용