3중·4중 가드레일 — 사역 AI의 Defense-in-Depth
Concept (개념)ministryverifiedFri Apr 24

3중·4중 가드레일 — 사역 AI의 Defense-in-Depth

별칭: 3중 가드레일 · 4중 가드레일 · Defense-in-Depth · 가드레일 동심원 · Bible Authority + Vision + Ministry + Privacy

#가드레일#defense-in-depth#ONPP#harness#hooks#ClaudeCode#사역AI안전#11조Canon

3중·4중 가드레일 — 사역 AI의 Defense-in-Depth

「의심스러우면 차단한다(When in doubt, block)」 — Fail-Secure 원칙

한 줄 정의

LLM이 본질적으로 확률적(stochastic) 이라 system prompt만으로는 출력 안전을 100% 보장 못 함. 모델을 감싸는 결정론적(deterministic) 검증 계층 = 가드레일. 사역 AI에서는 3~4 층 동심원으로 배치 (성경 권위 → 교회 비전 → 사역 매뉴얼 → 개인정보 보호). 각 층이 독립적으로 차단 가능해야 한다 (Defense-in-Depth).

요약

LLM의 답변 99%는 옳다. 그러나 1%의 신학·교리·개인정보 오류가 사역 현장에서는 치명적이다. AI가 새가족 안내문에 무심코 "신천지 같은 단체와도 협력 가능"이라 쓰거나, 양육 자료에 동반자 실명 + 상담 내용을 그대로 노출하면 회복 불가능한 피해다. 이 1%를 막는 것이 가드레일이다.

본 LLMWiki는 3 층 (성경 권위 → 교회 비전 → 사역 매뉴얼) 을 기본으로 채택한다. 운영 시스템(ONPP 등)에서는 4 층 (개인정보 보호 추가) 으로 확장한다. 모든 계층은 독립적으로 차단 가능해야 한다 — 한 층이 실패해도 다른 층이 잡는다.

핵심 원칙은 fail-secure = "의심스러우면 차단". 훅 스크립트 자체에 에러가 나도 통과시키지 ❌, 차단한다. fail-open(에러 시 통과)은 절대 금지 안티패턴. ONPP가 온누리교회 차세대본부에서 실제 운영 중인 4중 가드레일 패턴을 본 카드는 그대로 인용·일반화한다.

본 카드는 Ch.6 하네스 엔지니어링 회차의 핵심 자료. Claude Code의 settings.json hooks 시스템(UserPromptSubmit · PreToolUse · PostToolUse · Stop)으로 실제 구현되며, 정규식 패턴·exit code·차단 메시지까지 구체적으로 명시.

본문 상세

1. 왜 가드레일이 필요한가 — 4 가지 사역 리스크

소책자(차세대본부)와 ONPP 지침서가 동일하게 진단:

리스크사역 현장 사례피해
신학적 오류AI가 "성경에 따르면 모든 종교가 같은 진리"라고 답변다음 세대 신앙 혼동
이단 교리 인용AI가 신천지·여호와의증인 자료를 "성경 해석"으로 인용변증 무력화
개인정보 누출양육 보고에 동반자 실명·연락처·상담 내용 그대로 LLM에 전송외부 API 서버에 영구 기록
사역 지침 위반교사가 "말 안 들으면 벌 줘" 식 권위주의 발화를 AI가 무비판 수용다음 세대 양육 철학 붕괴

→ 이 리스크는 모델 개선만으로는 해결 ❌. 모델을 감싸는 하네스(harness) 가 필수.

2. 3 층 가드레일 (본 LLMWiki 기본 모델)

1 층: 성경의 권위 (Bible Authority) — 최외곽

권위 근거: Sola Scriptura (오직 성경) — 우리말성경 66권만, 외경·이단 교리 ❌

적용 영역:

  • 모든 카드(특히 term/·concept/·synthesis/·article/)
  • 신학·교리 표현 자동 검증
  • 성경 인용의 책·장·절 정합성 (예: 요한복음 4:55 ❌ — 4장은 54절까지)

구현 (본 LLMWiki):

  • README.md Canon 9·10·11
  • frontmatter status: draft 자동 부여 → 사람 검증 후 verified 승격 (Canon 8)
  • A04.04 doctrine-sidecar 에이전트가 자동 스캔

차단 사례:

  • 외경 권명 (토비트·유딧·지혜서·집회서·바룩·마카비) 감지 시 즉시 차단
  • 이단 단체명 (신천지·여호와의증인·몰몬·안식교·통일교) 감지 시 차단
  • 존재하지 않는 성경 구절 번호 감지 시 차단

2 층: 교회 비전·목회 철학 (Vision Layer)

권위 근거: 온누리교회 Acts 29 비전 + 하용조 「복음은 물(본질), 문화는 그릇(용기)」

적용 영역:

  • 사용자가 AI에 던지는 질문(UserPromptSubmit)
  • 새가족·양육·예배·사역 도구 자동 저작물

차단 사례 (정규식):

패턴차단 메시지
/교회.*(비판|저격|공격)/"온누리 비전과 충돌하는 요청. 교역자와 상의하세요"
/(타 종교|이단).*포교/"교회 비전 위반"
/비성경적.*옹호/"복음 본질 침해 가능"

3 층: 사역 매뉴얼 (Ministry Layer) — 최내곽 (3 층 모델)

권위 근거: 차세대본부 사역 지침 — 예꿈(영유아) / 꿈땅(유초등) / 파워웨이브(중고등) 연령별 매뉴얼

적용 영역:

  • 양육 자료·교사 발화·연령별 콘텐츠

차단 사례:

  • 권위주의 발화: "시키는 대로 해", "말 안 들으면 벌 줘", "때려"
  • 신체 접촉 지시
  • 연령 부적합 콘텐츠 (폭력·자해·성적 묘사·중독성)
  • 교사 행동 수칙 위반

Role-based System Prompts (부서별 차별화):

sbg-yk (예꿈, 영유아): "단순하고 밝은 어휘만 사용"
sbg-kt (꿈땅, 유초등): "호기심 존중, 구체적 예시"
sbg-pw (파워웨이브, 중고등): "삶의 고민에 공감하는 톤"

3. 4 층 가드레일 (운영 시스템 — ONPP 등)

위 3 층에 4 층 (개인정보 보호 — Privacy Layer) 추가. 가장 안쪽 = 가장 중요.

4 층: 개인정보 보호 (Privacy) — 최내곽 (운영 시스템)

권위 근거: 개인정보보호법 + 자체 PII 정책

가장 안쪽에 배치하는 이유: 다른 모든 층을 통과한 입력도 LLM 서버로 떠나기 직전 마지막 한 번 더 마스킹돼야 한다. 원문이 단 한 번이라도 외부 API로 나가면 되돌릴 수 없다.

자동 검출 정규식 (한국어 PII):

항목정규식마스킹 결과
한국 휴대폰\b01[016789]-?\d{3,4}-?\d{4}\b010-****-****
주민등록번호\b\d{6}-[1-4]\d{6}\b******-*******
한글 실명 + 직책\b[가-힣]{2,4}\s*(형제|자매|목사|전도사|장로|집사|권사|성도)\b홍*동 형제
이메일\b[\w.+-]+@[\w-]+\.[\w.-]+\b****@****.***
주소(도로명)\b[가-힣]+(시|도)\s[가-힣]+(구|군)\s[가-힣]+(동|로|길)\b**시 **구 **로
질병명(암|당뇨|고혈압|우울증|치매|뇌졸중|폐렴)[질환]

Hard 차단 vs Soft 경고:

  • Hard: 휴대폰·주민번호 → 즉시 exit code 2 차단
  • Soft: 이메일·실명+직책 → 경고 로그 후 통과 (정책에 따라 차단으로 변경 가능)

암호화: 운영 DB는 AES-256-GCM (예: prayers.content_encrypted 컬럼)

4. Claude Code Hooks 구현 (실제 코드)

4.1 settings.json 매처 매핑 (ONPP 운영 사례)

{
  "permissions": {
    "ask": ["WebFetch", "Bash(curl:*)", "Bash(git push:*)"],
    "deny": ["Bash(rm -rf:*)", "Bash(sudo:*)"]
  },
  "hooks": {
    "UserPromptSubmit": [{
      "matcher": ".*",
      "hooks": [{ "type": "command", "command": "node .claude/hooks/guardrail-check.js" }]
    }],
    "PreToolUse": [
      { "matcher": "Write|Edit",
        "hooks": [{ "type": "command", "command": "node .claude/hooks/bible-validator.js" }] },
      { "matcher": "Bash|WebFetch",
        "hooks": [{ "type": "command", "command": "node .claude/hooks/pii-masker.js" }] }
    ],
    "PostToolUse": [{
      "matcher": ".*",
      "hooks": [{ "type": "command", "command": "node .claude/hooks/privacy-scrubber.js" }]
    }],
    "Stop": [{
      "matcher": ".*",
      "hooks": [{ "type": "command", "command": "node .claude/hooks/audit-logger.js" }]
    }]
  }
}

4.2 매처 매핑 표

가드레일 층훅 이벤트매처스크립트
1 층 성경PreToolUseWrite|Editbible-validator.js
2 층 비전UserPromptSubmit.*guardrail-check.js
3 층 사역지침UserPromptSubmit.*guardrail-check.js
4 층 개인정보PreToolUseBash|WebFetchpii-masker.js
4 층 응답PostToolUse.*privacy-scrubber.js
감사Stop.*audit-logger.js

4.3 Defense-in-Depth 흐름

사용자 입력
   ↓
[UserPromptSubmit] ← 2 층 비전 + 3 층 사역지침 검사
   ↓
Claude 모델 추론
   ↓
[PreToolUse] ← 1 층 성경 검증 + 4 층 PII 마스킹
   ↓
도구 실행 (Bash/Write/WebFetch)
   ↓
[PostToolUse] ← 4 층 응답 PII 스크러빙
   ↓
[Stop] ← 감사 로깅 (request_id · timestamp · masked_payload · response_hash)
   ↓
사용자 응답

5. Fail-Secure 원칙 — 의심스러우면 차단

안티패턴 (절대 금지):

// ❌ 절대 금지 — 에러면 그냥 통과 (fail-open)
try {
  validate(input);
} catch (e) {
  process.exit(0);
}

올바른 패턴:

// ✅ 권장 — 에러 시 차단 (fail-secure)
try {
  validate(input);
} catch (e) {
  console.error(JSON.stringify({
    decision: "block",
    reason: `검증 오류 발생, 안전 차단: ${e.message}`
  }));
  process.exit(2);
}

원칙:

  • 모든 검증 실패 시 기본 차단 (whitelist 방식)
  • 훅 스크립트 자체 에러 시에도 차단 (try/catch 후 exit code 2)
  • Bypass는 명시적 권한 필요 (--skip-hooks 사용 ❌, settings.json 편집은 교역자 승인 필수)

6. Human-in-the-Loop (HITL) 체크포인트

다음 상황은 반드시 사람의 승인:

상황승인권자트리거
신학적 판단 필요담당 교역자bible-validator가 unsure 플래그 반환
긴급 기도 전사 발송Level 1~2 관리자is_urgent=true 기도가 bulk notification 대상
개인정보 처리 작업Level 1 관리자PII 마스킹 실패 또는 복호화 필요 작업
외부 API 신규 연동Level 1 관리자WebFetch 신규 도메인

permissions.ask 목록 + Notification hook으로 구현.

7. 본 LLMWiki의 11조 Canon 적용

본 카드의 가드레일 개념이 본 LLMWiki README.md Canon 9·10·11에 반영:

  • Canon 9: 모든 카드는 ① 성경 권위 ② 온누리 비전 ③ 사역 매뉴얼 = 3중 가드레일 통과 필수
  • Canon 10: AI 인격화 금지 (그분·존재·지능·인격·의지·감정·영혼 ❌)
  • Canon 11: 기독교 언어 전용 (타 종교 용어 혼용 ❌)

위 3 조 자체가 본 LLMWiki의 가드레일 1·2·3 층의 표현. 도서·소책자에서는 동일 개념을 평신도 언어로 풀이.

8. 차세대본부 소책자의 비유 — 오케스트라

Part 2에서는 오케스트라를 지휘합니다. 여러 AI 에이전트를 3중 가드레일 안에서 조율합니다.

비유 요소가드레일 의미
지휘자사역자 (Imago Dei, 성화 진행 중)
악기들여러 AI 에이전트 (Claude·ChatGPT·Gemini·Pagefind 등)
무대 가장자리 (펜스)3중 가드레일 — 음악이 무대 밖으로 새지 않도록
악보성경 + 교회 비전 + 사역 매뉴얼
청중다음 세대 응원단 + 동반자

가드레일은 음악을 막는 펜스가 ❌, 음악이 본질에서 벗어나지 않게 하는 무대 경계.

9. 4 층의 우선순위와 충돌 처리

여러 층이 동시에 발동하면:

1 층 성경 권위 (최우선)
    ↓ 통과
2 층 교회 비전
    ↓ 통과
3 층 사역 매뉴얼
    ↓ 통과
4 층 개인정보 (최후 게이트, LLM 전송 직전)
    ↓ 통과
실행

상위 층이 차단하면 하위 층 검사 무관하게 차단. 하위 층이 차단해도 동일한 차단 응답 (사용자에게는 어느 층이든 "차단됨"으로 표시).

사역 적용

어떤 사역에서 어떻게 쓰는가?

사역가드레일 적용
새가족 환영 자동 답신1 층(이단 단체 인용 차단) + 2 층(교회 비전 일치) + 3 층(연령 부적합 ❌)
양육 자료 자동 생성1·2·3 층 + 4 층 필수 (동반자 PII 보호)
설교 초안 작성1 층(외경·이단 교리 차단) + 2 층(교회 비전)
카드뉴스 SNS 발송1·2·3 층 + 사용자 검토 (Canon 8)
상담 챗봇4 층 최우선 (개인정보) + 1·2·3 층 + Human-in-the-Loop 필수

본 LLMWiki에서 가드레일 위반 시 흐름

새 카드 작성 시도
   ↓
A04.04 doctrine-sidecar 자동 스캔
   ↓
Canon 9 위반? (성경/온누리/사역 매뉴얼 충돌)
   ├─ ✓ 통과 → status: draft (사람 검증 후 verified)
   └─ ✗ 위반 → status: draft 강제 + 사용자 검토 큐에 추가
Canon 10 위반? (AI 인격화)
   └─ ✗ 위반 → 표현 수정 제안 + 사람 승인 후 작성
Canon 11 위반? (타 종교 언어)
   └─ ✗ 위반 → case/ 카테고리로 강제 이동 + 출처 표기 요구

도구별 적용 가이드

AI 도구가드레일 적용 방식
Claude Codesettings.json hooks (위 4.1 그대로)
ChatGPT (Web)Custom GPT instructions에 가드레일 명시 + 사용자 자체 검증
GeminiSystem instructions 고정 + 응답 후 사람 점검
ChatGPT APIWrapper 함수에 가드레일 정규식 통합
자체 개발 챗봇본 카드의 코드 그대로 차용

한계와 주의사항

  • 가드레일은 100% 보장 ❌ — Defense-in-Depth로 위험 최소화. 정기 감사·사용자 피드백 필수
  • 정규식 패턴은 우회 가능 — "신·천·지" (점 분리) 같은 변형. 정기 갱신 + 의심 패턴 학습
  • Soft 경고만으로 충분한 ❌ — 운영 시스템은 Hard 차단 우선
  • HITL 없는 자동 승격 ❌ — Canon 8 절대 위반
  • 사용자 권한으로 hooks 우회 가능하므로 — 평신도 사용자는 settings.json 편집 권한 ❌
  • 로그 기록: 모든 차단 이벤트 audit.log에 JSONL 기록, 정기 리뷰

핵심 인용 / 명언

「의심스러우면 차단한다(When in doubt, block)」 — Fail-Secure 원칙

"복음은 물이고, AI는 그릇이다. 그릇이 깨지거나 오염되면 아무리 좋은 물도 흘려보낼 수 없다." — ONPP 4중 가드레일 지침서 §1.1

"각 층은 독립적으로 차단 가능해야 한다. 하나가 실패해도 다른 층이 방어한다." — Defense-in-Depth 원칙

관련