아마란스 볼트 구축 해설 · 2026.06 – 07

잠자던 결재문서 7,200건이 대답을 시작했다

사내 그룹웨어(ERP)에 6년치 결재문서·규정·이사회 자료가 쌓여 있었다. 있는 건 아는데, 꺼내 쓰는 사람은 없었다. 이걸 통째로 내려받아 검색 창고로 만들고 ChatGPT와 Claude에 연결했다. 이제 "작년 이사회에서 무슨 안건을 다뤘지?"라고 물으면, 원본 문서를 인용한 답이 돌아온다. 이 페이지는 그 과정이 어떤 순서로, 왜 그렇게 만들어졌는지를 따라 할 수 있게 풀어쓴 해설이다.

7,236건
색인된 문서 — 결재 6,114 · 규정 조문 672 · 이사회/운영위 450 (2026-07 기준)
약 7주
구축 기간 (2026-06-07 ~ 07 하순) — 비개발자 1인 + AI 코딩
22:30
매일 밤 자동 갱신 — 새 문서 수집부터 재색인까지 무인 실행
개요

무엇을 만든 건가

한 줄로 줄이면 이렇다. 서고에 사서를 앉혔다. 문서를 아무리 쌓아도, 찾아주는 사람이 없으면 그건 지식이 아니라 짐이다. 이 시스템은 ERP의 결재문서를 매일 밤 내려받아(서고 입고), 전부 텍스트로 바꿔 색인하고(도서 목록 작성), AI가 그 색인을 도구로 뒤질 수 있게 연결한다(사서 채용). 그래서 누구든 이렇게 물을 수 있다:

답은 항상 근거 문서번호·제목·날짜와 함께 온다. 문서에 없는 내용이면 "확인 안 됨"이라고 답하게 되어 있다 — 아는 척하는 사서는 사서가 아니니까.

경위

어떤 순서로 일어난 일인가

계획서 한 장에서 출발한 게 아니다. 질문 하나에서 출발해, 매 단계의 발견이 다음 단계를 불렀다. 날짜는 실제 대화 기록 보관소(ChatVault — 구축자가 모든 AI 대화를 모아 두는 개인 아카이브)에서 복원한 것이다.

"옵시디언은 잘못하면 쌓여 있는 정보의 무덤이 될 수 있지" — 2026-06-07, 모든 것의 출발점이 된 진단. 위키는 쌓는 도구지 꺼내 쓰는 도구가 아니었다.
06-07
온톨로지 조사 시작. "위키와 온톨로지는 뭐가 다르지?"라는 질문에서 출발 — 온톨로지란 개념과 개념 사이의 관계까지 정리한 지식 지도를 말한다. 같은 날 자료 볼트에서 OpenCrab(오픈소스 지식그래프 제품)을 발견했다.
06-08~09
OpenCrab 해부. 깃허브의 MIT 오픈소스를 뜯어 "진짜 제품엔 있고 우리에겐 없는 것" 3가지(검색 품질·전체 지형 요약·같은 개념 통합)를 찾아냈다. 개념 학습용 테스트베드 볼트도 이때 만들었다.
06-10~12
온톨로지 MCP 첫 배포. 기존 AI 자료 위키를 지식그래프로 바꿔 MCP(AI에 외부 도구를 꽂는 표준 규격 — STEP 05에서 자세히)로 노출. 개인용/팀용 권한 분리와 리버스프록시(요청을 대신 이어주는 중계 서버) 구조를 이때 완성했다 — 이 뼈대가 뒤에 아마란스에 그대로 재사용된다.
06-28
ChatGPT 연결 오류 해결. ChatGPT 커넥터가 간헐적으로 400 오류를 내던 원인(세션 ID 관리 방식)을 찾아 서버를 무상태(stateless) 방식으로 전환.
07-03~05
아마란스 ERP 자동화 착수 → "통째로 내려받자". 결재문서 자동 조회를 만들다가 "아예 전부 내려받아 질문 가능한 창고로 만들자"로 확장. 문서 5,922건 다운로드.
07-06
대전환 — 전량 위키화 폐기. "별첨까지 2만 개가 넘는데 이걸 전부 위키화한다는 게…" — 같은 시기 문서마다 AI 요약을 돌리던 배치가 이틀 만에 API 환산 약 $550를 태웠다. 방침을 "검색 중심 + 선별 위키화"로 바꿨다. 이 프로젝트에서 가장 중요한 결정.
07-07
MCP 개통 + 지식노트 설계. ChatGPT에서 문서 검색·열람이 되기 시작. 답변에서 나온 결론을 저장해 재사용하는 "자가발전 루프"도 이날 설계됐다.
07-09
재단 규정집 553개 조문 자료화. 전 규정이 담긴 HWP 한 파일을 조문(제N조) 단위로 분해해 원문 그대로 색인 — 조문 553개에 부칙·별표까지 더해져 색인 기준 672건이 됐고, "규정 몇 조" 질문이 정확해졌다.
07-10~12
온톨로지 팩 방법론 확정. 주제 하나를 깊게 파는 "지식 팩" 5단계 파이프라인을 정의하고 파일럿 2개가 연속 합격 — 재현 가능한 방법이 됐다.
07-22~23
직원용 안내 완성, 실사용 시작. 비개발자 직원이 따라 할 수 있는 커넥터 등록 가이드 배포. 웹 ChatGPT에서 "지식저장"이라고 말하면 노트가 쌓이는 것까지 실사용으로 확인됐다.
구조

한눈에 보는 전체 구조

일곱 단계가 위에서 아래로 흐른다. ①~③은 AI를 전혀 쓰지 않는 순수 기계 작업이고(그래서 비용이 0에 가깝다), AI는 ④부터 등장한다. 이 순서 자체가 이 시스템의 비용 철학이다.

①수집 — 로그인된 크롬을 재사용해 ERP 문서를 매일 내려받기
raw/ 원본 아카이브
↓
②추출 — 본문·첨부·규정을 전부 텍스트로 (HWP 파싱 + OCR)
extract/ doc.md 문서당 1장
↓
③색인 — SQLite 전문검색(FTS5)으로 즉답 검색 만들기
index/search.db
↓
④선별 위키화 — 고가치 문서만 AI가 구조화 요약
wiki/ 요약 카드·허브
↓
⑤MCP 연결 — 검색·열람·저장 도구를 ChatGPT·Claude에 꽂기
MCP 서버 두 벌(권한 분리)
↓
⑥지식노트 — 답변의 결론을 근거와 함께 저장, 다음 검색에 재사용
wiki/knowledge/
↓
⑦온톨로지 팩 — 특정 주제만 깊게 파는 지식 상자 (선택)
packs/ 주제별 팩
STEP 01

수집 — 열쇠는 이미 내 손에 있었다

ERP엔 공식 API가 없다. 그런데 열쇠는 이미 있다: 내가 매일 로그인해서 쓰는 크롬 창이다. 원격 조종 포트를 열어 둔 채 크롬을 띄우면, 수집 스크립트가 그 창에 올라타 브라우저의 인증을 그대로 빌려 쓴다. ERP가 요구하는 요청 서명(위조 방지 도장)도 브라우저 안에서 계산시켜 값만 받아온다 — 서명 열쇠는 브라우저 밖으로 꺼내지 않는다.

내려받은 문서는 한 건당 폴더 하나: 메타정보(기안자·결재선·날짜) + 본문 파일 + 첨부 원본 + "완료 도장"(.done 마커). 도장이 찍힌 문서는 다시 안 받으니, 매일 밤 돌려도 새 문서만 쌓인다.

여기서 지킨 선 ERP에서는 조회와 다운로드만 한다. 상신·결재·삭제 버튼은 어떤 자동화도 누르지 않는다. 심지어 로그인 직후 뜨는 "출근 체크 하시겠습니까?" 팝업도 "확인"을 누르면 진짜 출근이 찍히기 때문에, 반드시 취소로만 닫게 만들었다.
STEP 02

추출 — 모든 문서를 "읽을 수 있는 한 장"으로

AI는 HWP나 스캔 PDF를 바로 못 읽는다. 그래서 모든 문서를 마크다운 한 장(doc.md)으로 변환한다. 위쪽엔 문서번호·제목·날짜·기안자 같은 명찰을, 아래엔 본문과 첨부파일 텍스트를 담는다. 첨부는 PDF·HWP(표 포함)·엑셀·이미지까지 풀고, 스캔본은 OCR(문자인식)로 읽되 "숫자는 오독 가능, 원본 대조 필요"라는 경고 배너를 자동으로 붙인다.

가장 큰 복병은 겉보기엔 본문이 있는데 실제론 빈 껍데기인 문서였다. ERP가 내려주는 본문 파일이 사실은 빈 양식 틀인 경우가 많았던 것. 이런 문서는 대기열에 등록해 두고, ERP 뷰어의 "PC저장" 기능으로 실제 내용이 담긴 PDF를 다시 내려받는 보충 배치(refill)가 매일 조금씩 채운다. 이때 기존 파일은 절대 덮어쓰지 않고 새 파일·새 마커로 저장한다 — 원본은 건드리지 않는다는 원칙.

함정 "글자 수가 있으니 본문이 있다"는 판정은 틀린다. 한글 뷰어의 호환 안내 문구가 본문으로 오인된 사례가 후보 59건 중 54건(92%)이었다. 상투 문구 목록으로 걸러야 했다.
STEP 03

색인 — 검색은 공짜여야 한다

추출된 텍스트 전체를 SQLite 데이터베이스 하나에 색인한다. 쓴 기술은 화려한 AI가 아니라 SQLite에 내장된 전문검색(FTS5)이다. 글자를 3자씩 잘라 색인하는 trigram 방식이라 한국어도 형태소 분석 없이 부분일치 검색이 된다. 결재문서·규정 조문·이사회 자료가 종류 딱지를 달고 한 DB에 들어 있고, 검색 한 번에 1초 미만, 비용 0원.

벡터 임베딩(의미 기반 검색)도 만들어서 실제 질의 수십 개로 비교해 봤다 — 결과는 전문검색과 동률. 정형화된 공문 코퍼스에선 키워드 검색이 이미 충분했다. 그래서 임베딩은 "보류"로 결론. 유행이 아니라 측정이 결정하게 한 대목이다.

STEP 04

선별 위키화 — $550짜리 수업

처음 계획은 "문서마다 AI가 요약 카드를 만들자"였다. 이 배치가 이틀 만에 API 환산 약 $550어치를 태우고 세션 한도에 걸려 멈췄다. 문서가 수천 건이면 전량 AI 처리는 돈 먹는 하마가 된다는 걸 몸으로 배운 것이다.

그래서 구조를 3층으로 바꿨다. 전량은 기계가(검색 색인·텍스트 캐시), AI는 선별한 것만. 어떤 문서가 요약할 가치가 있는지도 AI에게 묻지 않고 규칙(SQL)으로 거른다 — 반복 서식(근태·지출결의)은 제외하고, 제목에 이사회·예산·규정·협약 같은 고가치 단어가 있는 것만 후보로. 배치엔 "사용량 한도(429) 감지 시 즉시 전체 중단" 규칙도 박았다. 한도는 재시도한다고 풀리지 않으니까.

STEP 05

MCP 연결 — 사서에게 도구 상자를 쥐여 주다

MCP(Model Context Protocol)는 AI에 외부 도구를 꽂는 표준 규격이다. 검색·문서 열람·첨부 읽기·지식 저장, 이 도구들을 MCP 서버로 노출하면 ChatGPT와 Claude가 직접 서고를 뒤진다.

같은 서버 코드를 두 벌(인스턴스)로 나눠 띄운 게 핵심이다 — 설정만 달리한 같은 프로그램을 두 개 실행해 두는 것. 일반 직원용 인스턴스는 민감문서(급여·인사·평가 등 2,255건)를 검색 색인 단계에서 아예 제외해서, 차단이 아니라 "존재 자체가 안 보이는" 상태로 만들었다. 관리부서용 인스턴스만 전체를 본다. 명단은 키워드 추측이 아니라 문서 단위 목록(deny-list)으로 관리한다.

외부 연결은 3겹이다: MCP 서버는 사설망(Tailscale) 주소에만 묶어 두고 → 공개 서버(Caddy)가 추측 불가능한 시크릿 주소를 그쪽으로 이어 주고 → 그 주소를 ChatGPT 커넥터(유료 플랜의 개발자 모드)에 등록한다. URL 자체가 열쇠인 구조.

함정 ChatGPT 커넥터는 MCP 세션 ID를 일관되게 유지하지 못해 400 오류를 낸다. 서버를 '무상태' 방식으로 돌리는 게 해법이다(켜야 할 옵션 두 개의 정확한 이름은 AI 설계서에 있다). 도구를 새로 추가하면 커넥터를 껐다 켜야 보이는 것도 같이 알아둘 것.
STEP 06

지식노트 — 쓸수록 똑똑해지는 반쪽

여기까지는 "찾아주는" 시스템이다. 지식노트는 거기에 기억을 붙인다. 질문에 답하다가 재사용 가치가 있는 결론이 나오면 — 예컨대 여러 문서를 조합해야 나오는 통계나 제도 정리 — AI가 근거 문서번호와 함께 노트로 저장한다. 다음에 비슷한 질문이 오면 검색이 그 노트를 먼저 내민다. 질문 → 답변 → 저장 → 재사용의 순환. 쓰는 사람이 많아질수록 창고가 똑똑해진다.

저장은 아무거나 안 받는다. 서버가 직접 검사한다:

STEP 07

온톨로지 팩 — 시험 범위만 정리한 노트

전사 검색이 도서관 전체라면, 팩은 특정 주제 하나를 위해 꾸린 지식 상자다. "이 주제만큼은 깊고 정확하게 답해야 한다" 싶을 때 만든다. 상자 안엔 목표 선언문(mission), 사람용 지도, 개념·관계 목록, 그리고 모든 주장의 원문 발췌(증거)가 들어 있다.

만드는 절차는 5단계다: 범위와 합격 기준을 먼저 동결하고 → 증거를 모으고 → 개념·관계를 추출하고 (증거 없는 항목은 격리) → 독립 검사자가 위조 여부를 전수 검사하고 → 마지막으로 팩 파일만 보고 시험 문제를 풀게 해서 합격해야 완성이다. 이 방식은 앞서 해부했던 OpenCrab에서 차용해, 파일럿 두 개가 연속 합격하며 검증됐다.

"팩은 동결된 질문만큼만 똑똑하다" — 파일럿 2호가 실사용 질문에서 한 번 무너진 뒤 얻은 교훈. 시험 문항은 시스템 주인이 직접 내야 하고, 실사용에서 못 답한 질문은 증분 패치로 메운다.
원칙

처음부터 끝까지 지킨 선

ERP는 읽기 전용조회·다운로드만. 결재·상신·삭제 버튼은 어떤 자동화도 누르지 않는다.
원본은 비파괴내려받은 raw 원본은 수정·삭제하지 않는다. 고칠 게 있으면 파이프라인을 고쳐 다시 만든다.
개인정보 4중 방어문서 단위 차단 명단(색인 레벨) + 문맥 키워드 판정 + 지식노트 개인정보 저장 거부 + 질문자 비기록.
모르면 모른다고 답한다모든 답변은 문서 인용 필수. 검색 결과에 없으면 "문서에서 확인 안 됨"이 정답이다.
비용은 구조로 막는다전량 AI 처리 금지, 한도(429) 감지 시 즉시 중단, 검색·추출은 AI 없이. AI는 가치가 확인된 곳에만.
교훈

넘어진 자리들

따라 만들 사람이 같은 곳에서 넘어지지 않도록, 대표 함정 여섯 개만 추렸다. 전체 15개는 AI용 설계서에 있다.

함정 1빈 껍데기 본문

ERP가 주는 본문 파일이 실은 빈 양식 틀. 겉보기 글자 수로 판정하면 속는다.

함정 2한글 자소 분리(NFC/NFD)

맥에서 파일명 속 한글이 눈엔 같아도 컴퓨터엔 다른 글자. 비교 전 정규화 필수 — 매칭 버그의 단골 원인.

함정 3한도는 재시도로 안 풀린다

API 사용량 한도(429)에 걸렸는데 재시도를 반복하면 토큰만 태운다. 감지 즉시 전체 중단이 정답.

함정 4뷰어 안내문의 배신

"상위 버전 문서입니다" 같은 뷰어 배너가 본문으로 오인된 게 후보의 92%였다. 상투 문구 목록으로 차단.

함정 5침묵 실패

ERP 화면이 개편되자 배치가 이틀간 조용히 헛돌았다. 성공 코드가 아니라 "진전량"을 감시해야 한다.

함정 6한글 프로그램 자동화의 덫

한글(HWP) 자동화용 COM 방식은 원격 터미널에서 무한 정지한다. 서버에선 hwp5 라이브러리로 파싱.

따라 만들기

우리 조직 버전을 만들고 싶다면

준비물은 생각보다 짧다: 상시 켜 둘 PC 한 대, Python, SQLite(내장 검색이면 충분), 그리고 코드를 다뤄 줄 AI(Claude Code 등). 외부에서 ChatGPT로 쓰려면 유료 플랜과 공개 서버 하나가 추가로 필요하다. 다만 준비물이 짧다고 일까지 짧은 건 아니다 — 원본 구현도 AI와 붙어 약 7주가 걸렸다. 아래 설계서는 그 시행착오를 건너뛰게 해 주는 지름길이다.

이 해설과 짝을 이루는 AI 실행용 재현 설계서(마크다운 문서)는 아래 버튼으로 바로 내려받을 수 있다. 단계별 구현 스펙·데이터 스키마·안전 규칙·함정 15개가 담겨 있어서, AI에게 통째로 주고 이렇게 지시하면 된다:

AI-재현-설계서.md 마일스톤 M1~M6 · 데이터 스키마 · 안전 불변 조건 7 · 함정 15 — AI에게 그대로 건네는 설계도
설계서 내려받기
"이 설계서대로 우리 조직 버전을 만들어줘. 우리 그룹웨어는 ○○이고, 문서는 대략 ○건이야. 마일스톤 M1부터 순서대로 가자."

설계서의 마일스톤은 M1(수집·추출)부터 M6(팩)까지 순서가 정해져 있고, M2까지는 AI API 비용이 사실상 들지 않는다. 작게 시작해서 실사용으로 검증하며 넓히는 순서다.