01문제
에이전트를 업무에 붙이면 사람이 쓴 것보다 훨씬 촘촘한 기록이 남는다. 무엇을 물었고 무엇을 고쳤고 어떤 파일을 봤는지가 자동으로 쌓인다. 조직 입장에서는 이것이 곧 지식 자산이라 모으고 싶고, 개인 입장에서는 자기 작업 로그가 통째로 열람되는 상태를 받아들일 수 없다. 두 요구는 정면으로 충돌한다.
흔한 타협은 둘 중 하나를 포기하는 것이다. 전사 공유를 포기하면 지식관리가 안 되고, 개인 격리를 포기하면 도입 자체가 거부된다. 이 과제에서는 둘 다 포기하지 않는 대신 격리가 실제로 강제되는지를 증명하는 방식을 요구 사항으로 올렸다.
기술적으로 걸린 지점은 명확했다. 도입 후보였던 오픈소스 메모리 서버는 인증이 단일 공유 키 하나뿐이었다. 즉 키를 가진 클라이언트는 누구의 저장소든 조회할 수 있고, "누가 어느 저장소를 볼 수 있는가"를 강제하는 계층이 아예 없었다. 이 상태에서 팀 전체를 붙이면 사고가 예외가 아니라 기본 동작이 된다.
02제약
- 개인 저장소는 본인만. 관리자도 열람할 수 없어야 한다. 권한 표를 문서로 두는 수준으로는 통과되지 않는다.
- 누락 없는 축적. 격리를 이유로 팀 지식이 비면 도입 목적이 사라진다. 개인 → 팀 → 전사 승격 경로가 있어야 한다.
- 완전 오프라인 가능. 외부 클라우드로 임베딩이나 요약 요청을 보낼 수 없다. 추출용 LLM을 외부에 의존하는 구성은 후보에서 제외된다.
- 업스트림을 포크로 갈라놓지 않는다. 오픈소스 본체를 뜯어 고치면 업스트림 변화를 못 따라간다. 강제 계층은 앞단에 두는 방식이어야 한다.
- 재현 가능한 배포. 담당자가 바뀌어도 같은 상태를 다시 세울 수 있어야 한다. 수동 셋업 문서 20쪽은 재현이 아니다.
03접근
1) 강제 지점을 하나로 만들었다
메모리 서버 앞에 정책 게이트웨이를 두고 모든 요청이 그 한 곳을 지나게 했다. 기본값은 거부다. 토큰이 자기 저장소에 대한 권한을 증명하지 못하면 통과하지 못한다. 업스트림 본체는 수정하지 않았으므로 업그레이드 경로가 살아 있다.
2) 헤더만 보지 않고 본문까지 봤다
게이트웨이를 본문 인지 방식으로 만들었다. 저장소 지정이 헤더에만 있는 게 아니라 호출 본문의 인자에도 들어올 수 있기 때문이다. 헤더만 검사하는 구현은 본문에 다른 저장소를 실어 보내는 요청을 그대로 통과시킨다. 이 우회는 가정이 아니라 실제로 재현해 본 뒤 막았다.
3) 성공 기준을 문장에서 종료코드로 옮겼다
"격리했다"는 서술을 신뢰 근거로 쓰지 않기로 하고, 검증 스크립트가 9개 게이트를 모두 통과할 때만 통과로 정의했다. 게이트는 상태 확인, 저장소 프로비저닝, 적재-조회 왕복, 격리와 귀속, 적대적 우회 거부, 계약 드리프트, 강제 규칙 동작, 리랭커 구성 일치, 백업 복원이다. 한 개라도 0이 아니면 배포가 아니다.
4) 적대적 시나리오를 상시 검사에 넣었다
권한 없는 토큰, 경로 우회, 헤더와 본문을 동시에 쓰는 저장소 스머글링, 귀속 위조 4종을 매 실행에서 거부하는지 확인한다. 침투 테스트를 한 번 하고 보고서를 남기는 방식이 아니라, 회귀 검사로 상주시켜 나중에 생긴 구멍도 잡히게 했다.
5) 조회를 믿지 않고 실측했다
1주(7일) 트라이얼에서 운영 데이터 211건을 쌓아 조회 기반 검색의 완전성을 측정했다. 의미 검색으로 관련 기록을 불러오는 방식의 재현율은 15.6%였다. 이 수치를 확인한 뒤 업무보고처럼 누락이 치명적인 작업에서는 검색 대신 시간 범위 직조회를 원칙으로 확정했다.
6) 요약 레이어를 껐다
자동 요약 기능은 편의성이 크지만 원본을 덮어쓰는 형태로 오염을 만든다. 정보 오염 위험을 근거로 이 레이어를 껐다. 대신 일일·주간 보고를 별도 합성 파이프라인으로 만들고 품질을 따로 평가해 환각률 0을 확인한 뒤 운영에 넣었다.
7) 스택을 오픈소스로 공개했다
고객사 데이터가 아닌 격리 스택 자체를 MIT로 공개했다. 게이트웨이, 검증 게이트, 프로파일, 복원 절차가 그대로 들어 있다. 격리를 주장으로 파는 대신 남이 직접 돌려 볼 수 있게 만드는 편이 신뢰 근거로 강하다. 비교용 평가 하네스도 함께 열어, 대안 구현과 동일 조건에서 재보게 했다.
04결과
| 항목 | 실측 |
|---|---|
| 통과 기준 실행 게이트 | 9개 전부 GREEN |
| 매 실행 거부를 확인하는 적대적 우회 | 4종 |
| 트라이얼 운영 실측 기록 | 211건 / 7일 |
| 조회 기반 검색 재현율 | 15.6% |
| 보고 합성 파이프라인 환각률 | 0 |
| 완전 오프라인 구성 런타임 메모리 | 1.5-2.1GB |
| 공개 평가셋 조회 정확도 | 8/8 |
결과물은 권한 격리를 유지한 채로 누락 없이 쌓이는 전사 지식관리 뼈대다. 개인 저장소는 본인만 열람하고, 팀 저장소는 귀속이 기록되며, 승격은 3단계로 명시돼 있다. 도입 판단을 내리는 쪽이 확인해야 하는 것은 설명이 아니라 검증 스크립트의 종료코드 하나로 줄었다.
05재현 가능한 부분
이 과제에서 나온 자산 중 다음은 공개돼 있거나 이식 가능하다.
- 정책 게이트웨이. 기본 거부, 본문 인지 검사, 접근 제어 목록, 감사 로그를 담은 앞단 강제 계층.
- 9게이트 검증 스크립트. 상태·프로비저닝·왕복·격리와 귀속·적대적 거부·계약 드리프트·강제 규칙·리랭커 일치·백업 복원. 종료코드 0이 곧 통과 정의.
- 적대적 검사 4종. 권한 없는 토큰, 경로 우회, 헤더+본문 저장소 스머글링, 귀속 위조.
- 무인 부트스트랩과 프로파일. 한국어 구성과 경량 구성을 나눠 두고, 이미지를 다이제스트로 고정해 같은 상태를 다시 세울 수 있게 한 배포 절차.
- 동일 조건 비교 하네스. 조회 정확도와 지연에 오프라인 가능성·추출 LLM 의존·격리 강제·감사·호스트 풋프린트를 더해 의사결정 매트릭스를 뽑는 평가 도구. 실행하지 못한 항목은 수치를 지어내지 않고 예외로 남긴다.
이식되지 않는 것은 고객사의 조직 구조와 권한 등급 매핑, 그리고 실제 업무 데이터다. 그 부분은 조직마다 다시 정의해야 하고, 그 정의가 곧 접근 제어 목록의 입력이 된다.
격리 요건이 있는 지식관리 도입을 검토 중이라면
bk@bkan.dev 문의 폼은 두지 않는다. 메일 한 통이면 된다.