사역을 위한 하네스 엔지니어링 — 결정론적 안전 코드 계층
별칭: 사역 하네스 엔지니어링 · Harness Engineering for Ministry · Hooks · Defense-in-Depth
사역을 위한 하네스 엔지니어링 — 결정론적 안전 코드 계층
한 줄 정의
LLM의 본질적 확률성(stochastic) 때문에 system prompt만으로는 안전 100% 보장 ❌. 모델을 감싸는 결정론적(deterministic) 검증 계층 = 하네스. Claude Code의 hooks 시스템이 1급 메커니즘. Ch.6 회차의 표준 기법.
요약
프롬프트가 사역자 측 자율, 컨텍스트가 시스템 측 자율이라면, 하네스는 코드 측 강제. 사역 AI의 안전 공학.
핵심 도구: Claude Code의 settings.json hooks (UserPromptSubmit · PreToolUse · PostToolUse · Stop). 3중·4중 가드레일을 코드 레벨에서 강제.
본 카드는 가드레일 카드의 공학 측면 짝. 가드레일 카드는 신학·정책 측면, 본 카드는 코드·구현 측면.
본문 상세
1. 자율적 vs 결정론적 — 3 층 방어
| 층 | 방식 | 시점 | 도구 |
|---|---|---|---|
| 1 | 사역자 자율 | 매 프롬프트 | 거룩한 질문 |
| 2 | 시스템 자율 | 영구 설정 | CLAUDE.md, Custom GPT |
| 3 | 코드 강제 | 실시간 | Hooks |
→ 자율 2 층 통과해도 마지막 1% 위반은 코드가 차단. 본 카드 영역.
2. Claude Code Hooks 6 이벤트
| 이벤트 | 발화 | 용도 |
|---|---|---|
| UserPromptSubmit | 입력 직후 | 입력 검증 |
| PreToolUse | 도구 호출 직전 | 파라미터 검증 |
| PostToolUse | 도구 호출 직후 | 응답 후처리 |
| Stop | 턴 종료 | 감사 로깅 |
| SessionStart | 세션 시작 | 컨텍스트 주입 |
| Notification | 알림 | 외부 통지 |
차단: exit code 2 + stderr {"decision": "block", "reason": "..."} JSON.
3. ONPP 4 중 하네스 매핑 (상세)
| 가드레일 층 | 훅 | 매처 | 스크립트 |
|---|---|---|---|
| 1 성경 | PreToolUse | Write|Edit | bible-validator.js |
| 2 비전 | UserPromptSubmit | .* | guardrail-check.js |
| 3 사역지침 | UserPromptSubmit | .* | guardrail-check.js |
| 4 PII | PreToolUse | Bash|WebFetch | pii-masker.js |
| 4 응답 | PostToolUse | .* | privacy-scrubber.js |
| 감사 | Stop | .* | audit-logger.js |
4. Defense-in-Depth 흐름
사용자 입력
↓
[UserPromptSubmit] ← 2 층 + 3 층 + 4 층 1차
↓
모델 추론
↓
[PreToolUse] ← 1 층 + 4 층 2차
↓
도구 실행
↓
[PostToolUse] ← 4 층 응답 스크러빙
↓
[Stop] ← 감사 로깅
↓
응답
각 층 독립 차단 가능. 하나 실패해도 다른 층이.
5. Fail-Secure 원칙
"의심스러우면 차단 (When in doubt, block)"
❌ fail-open (에러면 통과)
try { validate(input); } catch (e) { process.exit(0); }
✓ fail-secure (에러면 차단)
try { validate(input); } catch (e) {
console.error(JSON.stringify({decision:"block", reason:`...`}));
process.exit(2);
}
6. 3 인 체제 (Separation of Duties)
| 역할 | 사역 AI 적용 |
|---|---|
| 만든 자 | AI 또는 사역자 (초안) |
| 검토하는 자 | 다른 사역자 또는 doctrine-sidecar (Canon 9~11) |
| 승인하는 자 | 담당 교역자 (배포) |
세 역할이 같은 사람이면 눈먼 점.
7. Human-in-the-Loop (HITL)
자동화 ❌, 사람 승인 필수:
| 상황 | 승인권자 |
|---|---|
| 신학 판단 필요 | 담당 교역자 |
| 긴급 기도 전사 발송 | Level 1~2 관리자 |
| 개인정보 처리 | Level 1 관리자 |
| 외부 API 신규 연동 | Level 1 관리자 |
permissions.ask + Notification hook.
사역 적용
단계적 도입 (사역자용)
1주: 사역 AI 정책 작성 — 4 층 중 가장 중요한 것 선정 2주: System Prompt 신학 베이스라인 3주: 자체 검증 체크리스트 4주: Claude Code hooks 도입 (개발자 협업)
도구별 적용
| 도구 | 적용 |
|---|---|
| Claude Code | settings.json hooks 그대로 |
| ChatGPT (Web) | Custom GPT instructions + 사용자 검증 |
| Gemini | System instructions + 응답 점검 |
| API | Wrapper 함수 정규식 |
| 자체 챗봇 | 본 카드 코드 차용 |
한계와 주의사항
- 가드레일 100% 보장 ❌
- 정규식 우회 가능 ("신·천·지" 분리 변형) — 정기 갱신
- Soft 경고만으로 ❌ — Hard 차단 우선
- HITL 없는 자동 승격 ❌ (Canon 8)
- 사용자 권한으로 hooks 우회 가능 — 평신도 권한 ❌
전 사역 적용 매트릭스 (온누리교회 전체)
본 하네스 패턴은 온누리교회 전 사역 영역에 적용된다. 차세대 사역본부 사례(case/onpp-22-agents)는 한 인스턴스일 뿐.
| 사역 영역 | 하네스 적용 예시 |
|---|---|
| 예배 사역 | 찬양 가사·주보 자동 검수 (저작권·신학 정확성) · 성경 본문 인용 자동 검증 |
| 설교 사역 | 설교 초안 term/scripture-audit · 이단 표현 차단 · 인용 본문 31K 구절 대조 |
| 제자훈련 | 일대일·소그룹 자료 가드레일 (B2KG 일대일제자양육 KB 연동) · 학습자 PII 격리 |
| 선교 사역 | 다국어 번역 검증 · 현지 문화 민감도 체크 · 비교종교 표현 case/ 분기 강제 |
| 교육 사역 | 주일학교·다음세대 교재 연령별 가드레일 · term/sandbox-environment 격리 |
| 행정 사역 | 교회 문서·공지 자동 작성 시 term/community-language-linter 적용 |
| 상담 사역 | concept/sacred-privacy 강제 (AES-256·일회성 세션·읽기 전용) |
| 문화 사역 | 카드뉴스·영상 자막 신학 검증 · 문화는 복음의 도구 원칙 |
| 사회봉사 | 외부 발표·보도자료 검수 · 교회 대외 발언 가드레일 |
| 차세대 (사례) | ONPP 22~38 에이전트 — 본 패턴의 가장 정교한 인스턴스 (case/onpp-22-agents) |
하나의 하네스 패턴, 모든 사역 인스턴스화 — 차세대는 한 사례, 전 사역이 같은 골격을 공유한다.
관련
- synthesis/ai-seonyong-ch6-harness-engineering — Ch.6 ★ 본 카드 핵심 회차
- concept/3-layer-guardrail — 가드레일 (정책 측면)
- concept/prompt-engineering-for-ministry · concept/context-engineering-for-ministry — 1·2 층 자율
- term/agent-orchestration — 22~38 에이전트 협업
- case/onpp-22-agents — 차세대 운영 사례 (한 인스턴스)
"When in doubt, block. 결정론적 안전 코드가 사역의 1%를 지킨다." "하나의 하네스, 전 사역 인스턴스화."