결정 거버넌스 — gate
gate 는 한국형 내부 전자결재 + e-sign + HTML 문서 + 법무검색을 하나의 AI-driven 결정→실행 파이프라인으로 묶는 신규 Rust + Postgres 서비스다. para-os §7(결정로그 ≠ 결재워크플로)의 물질화 — 성숙한 거버넌스 Area 가 독립 서비스로 졸업한 형태.
본 페이지 = gate 거버넌스 아키텍처 설계 (착수 직전 설계 + e-sign 엔진 빌트, 2026-06-07). 결정 SSOT = D-gate-1(scope·Phase) · D-gate-2(record SoR) · D-gate-3(actuation·e-sign 경계, e-sign 부분 D-gate-5 가 supersede) · D-gate-4(법무) · D-gate-5(e-sign 직접구현 = 암호등급 자체 서명엔진, 빌트+검증 — D-gate-3 integrator 입장 supersede). 마스터플랜·착수 큐 = B-bp-decision-pipeline-esign (service=gate, roadmap M9). 설계 전모·리서치 결론은 gate machine 메모리 2파일.
1. Phase 경계 — narrowed Phase-1 (경로 A)
7라운드 설계 후 7-agent red-team 이 풀설계(결재 + 직접 e-sign + 법무 RAG flywheel + 공개 SaaS + 결제 + 멀티테넌트 = 1인이 동시에 짓는 6~7 규제제품)에 NO-GO(11 P0 / 16 P1 / 8 누락) 판정했다. 결정적 사실 — 11 P0 가 전부 “야심 5종”에 거주한다. 따라서 narrowed Phase-1 은 대부분의 P0 를 해소가 아니라 defer 로 회피한다 (D-gate-1).
단, e-sign 은 예외 (2026-06-07 D-gate-5): 운영자가 “모두싸인의 기능을 직접, 암호등급으로 구현” 지시 → e-sign 은 defer 가 아니라 직접-build 로 빌트됐다 (§6). red-team 이 직접-build 를 막았던 P0(HSM·HTML→PDF 결정성·custody)는 이제 해소-또는-명시: 결정성 = canonical decision bytes 로 지금(typst PDF render 는 later), HSM = trait abstraction ready(dev = software key), custody =
esign_sealappend-only + RFC3161 TSA. 진짜 잔여 Phase-2 = 외부 서명자 본인확인기관(정보통신망법 §23-3, 자가구축 불가) — 그 외 직접 e-sign P0 는 닫혔다.
| 영역 | Phase-1 (확정·착수 가능) | Phase-2+ (각자 게이트, defer) |
|---|---|---|
| 결정로그 | gate decision SoR (record≠process) | — |
| 결재워크플로 | 기안→DOA→승인/반려/보류→시행 상태기계 | — |
| 문서 | HTML spine → PDF 렌더 | — |
| e-sign | gate-native 직접-build 암호 서명엔진 (CAdES-T server-seal + RFC3161 + esign_seal evidence + verify_seal; 모두싸인 = optional alt provider) — D-gate-5 | 외부 서명자 본인확인기관 통합(정보통신망법 §23-3) · 하드닝: HSM·PAdES 서명-PDF·prod-key |
| 실행 | actuation ledger (멱등 + reconcile) | saga 보상 (e-sign+결제+분개) |
| 가로 거버넌스 | Blueprint gate.decision citation mirror | visibility-gated mirror 테이블 |
| 배포 대상 | AXE-internal only (realchoice/Truvia table-stakes) | 공개 SaaS (+tenant_id RLS·self-IdP) |
| 법무 | pgvector-KR 내부검색만 (결재 자동주입 X) | Pinecone+Cohere+Gemini flywheel (+PIPA 자문) |
| 결제 | 없음 | 포트원/토스/Paddle (+전자금융/전자상거래) |
| 테넌시 | 없음 (owner_id RLS) | cross-tenant 축적 (+PIPA 가명정보) |
빌드게이트(코드보다 먼저) = B-gate-bonin-id-contract(본인확인기관 계약, 수주~수개월) · B-gate-legal-counsel(변호사법 §109 + PIPA 의견서) · B-gate-phase2-gates.
2. record ≠ process — SoR = gate, Blueprint = mirror
- 결정 로그 (record) — 무엇이·누가·언제·무슨 권한으로·뭘 근거로 결정됐나. append-only, 불변(수정 아닌 supersede). SoR = gate
decision테이블 (서비스가 SoR 소유, D-gate-2). - 결재 워크플로 (process) — 기안 → 결재선(DOA) → 승인/반려/보류 → 시행. 그 위 policy-driven·agent-assisted 레이어. 워크플로 완료 → 결정로그 한 줄 방출.
왜 gate 가 SoR 인가: round-1 은 결정로그를 Blueprint core primitive(가로) 로 뒀으나 = AXE-internal 전제. standalone 외부제품 요구가 refine — record 의 집을 gate 로 옮겼다. 근거(grounded): /architecture/artifacts “MCP backend = sole owner, data 중복 0” · /architecture/data “cross-service = 직접 DB read 금지, 명시적 신호채널(pg_notify/outbox)만” · D-cortex-9 = service-owns-SoR + Blueprint visibility-gated mirror 가 이미 빌트(template 기성). Blueprint = gate.decision citation mirror(optional consumer 1종, 외부고객 = OFF, gate 단독 완결).
3. 핵심 테이블 (Blueprint-agnostic)
| 테이블 | 역할 |
|---|---|
document | HTML 작성 스파인(풍성한 포맷) + 변수(AI/템플릿 fill) + rendered_pdf_ref(서명용) + version + kind(기안/계약/통지). 내부결재 + e-sign = 같은 document 의 두 phase. |
workflow | 내부결재 상태기계: draft→상신→in_review(결재선 step)→승인/반려/보류→시행→done. |
approval_step | 결재선 (kind: 승인/전결/협조/합의/대결 · state: pending/approved/rejected/held/skipped). 반려·철회·서명거절 역흐름 = 1급 시민(red-team 누락 #8). |
doa_policy | 전결규정 (entity · decision_type · amount_min/max → line jsonb). |
signature | 내부+외부 서명 통합 primitive (provider ∈ {internal, gate, modusign} · signers · envelope_id · cert_ref · status). §4. |
esign_seal | 암호 봉인 evidence (append-only, 전자문서법 §5 custodian) — decision_id · sealed_bytes_hash · CMS/CAdES-T DER(detached 서명 + RFC3161 토큰) · signer_cert_ref · tsa_url · sealed_at. 시행 시 esign.gate actuator 가 1행 append, verify_seal 가 읽음. §4·§6. |
actuation | 실행 ledger (actuator_kind · payload · idempotency_key · state · result_ref · reconciled_at). §5. |
event | append-only audit. |
decision | gate SoR terminal record (authority · actor · decided_at · basis citations · supersedes). canonical bytes = esign_seal 봉인 대상. |
4. 서명 = 한 primitive
내부 sign-off = 외부 e-sign = 같은 primitive signature. 누가·법적무게만 다르다. provider ∈ {internal, gate, modusign}:
internal— 결재선 step 의 인증된 결재 승인 (UI sign-off). gate identity = 실지명의.gate(Phase-1, D-gate-5) — gate-native 암호 봉인. 시행 시 승인된 결정의 canonical bytes 를 단일 서버 서명 identity 로 CAdES-T server-seal →esign_seal에 evidence 저장. 봉인 1건 =signature(provider=gate)+esign_seal1행. §6.modusign(optional alt provider) — 외부 카운터파티 라운드트립이 필요할 때의 대체 경로 (esign.send/EsignStub). Phase-1 의 대안이지 기본 아님.
내부 결재 승인도, gate 서버 봉인도, 외부 모두싸인 e-sign 도 “행위자가 결정을 시점에 (법적으로) 확정”하는 한 종류의 행위 — para-os §84 와 정합.
5. actuation ledger + reconcile (분산 일관성)
승인된 결정 → actuator 호출 (frame.post_journal / index.register_deal 등; Area 서비스 = 결정 파이프라인의 actuator). 결정→실행은 분산 트랜잭션이므로:
actuation.idempotency_key = uuidv5(workflow + seq + actuator + payload_hash)— gate 측 재시도 멱등.- reconcile 워커 (frame-worker 패턴, pg_notify) — inflight→done/failed 정합.
- ⚠️ gate idempotency_key 는 외부 이중실행을 못 막는다 (red-team P0 #5) —
esign.gate봉인은 gate 내부 actuator라esign_seal(decision_id 유일) append 가 멱등이지만, 외부 provider 경로(모두싸인 alt) 는 provider-side idempotency 토큰 필요. saga 보상(e-sign+결제+분개)은 결제 도입 Phase-2.
6. e-sign 경계 — Phase-1 = gate-native 직접-build 암호 서명엔진
2026-06-07 pivot (D-gate-5, D-gate-3 e-sign 경계 supersede): D-gate-3 은 e-sign 을 모두싸인 integrator 로 두고 직접-build 를 Phase-2 로 defer 했으나, 운영자가 “모두싸인의 기능을 직접, 암호등급으로 구현” 지시 → Phase-1 이 직접-build 엔진이다. 빌트+검증 완료 (이 세션).
Phase-1 = BUILD (직접 구현, 작동·검증됨) — gate 가 자체 암호 서명엔진을 갖는다 (para-os §84 와 정합: gate = 결정 파이프라인의 actuator, 봉인은 esign.gate actuator):
- ① CMS/PKCS#7 CAdES-BES detached 서명 (RSA-2048 + SHA-256).
DocumentSignertrait(HSM-ready abstraction) +SoftwareSigner(self-signed X.509). 적대적 리뷰(위조 도달경로 없음) + openssl 양방향 interop, 7 tests. - ② RFC3161 신뢰 타임스탬프 → CAdES-T (hand-rolled ASN.1, 단일 clean dep line). default = DigiCert RSA TSA; 한국 prod = Koscom/CrossCert config-swap. 9 tests + live round-trip.
- ⑤ 워크플로 배선: 시행(execute) 시
esign.gateactuator 가 승인된 결정을 server-seal — canonical decision bytes → CAdES-T → append-onlyesign_sealevidence 테이블 저장 (전자문서법 §5 custodian). 신규verify_sealMCP tool = 서명 + 무결성 + 타임스탬프 검증. e2e: 결재→seal→verify valid · 저장 CMS openssl cross-verify 통과 · DB tamper→integrity fail.
법적 근거 — 전자서명법 (2020, 공인 폐지): 사서명(private/internal e-sign)은 실지명의 + 서명의사면 유효, 운영 라이선스 불요. gate 매핑 = 실지명의 = 인증된 gate identity(내부 서명자) · 서명의사 = 결재 승인 행위. → 내부/사내 e-sign 은 본 엔진으로 합법 완결.
모두싸인 = optional alternative provider (기본 아님): 외부 카운터파티 라운드트립이 필요할 때 signature.provider=modusign 경로 (esign.send/EsignStub) 가 여전히 존재. gate-native 봉인이 Phase-1 기본, 모두싸인은 대안.
잔여 하드닝 / Phase-2:
- 외부 서명자 본인확인 = 진짜 Phase-2 — 방통위 지정 본인확인기관 통합(B-gate-bonin-id-contract, 정보통신망법 §23-3 자가구축 불가). 내부 서명자는 gate auth = 실지명의라 불요; 외부 신원 강증명만 게이트.
- HSM (cryptoki/PKCS#11) —
DocumentSignertrait 가 이미 abstraction-ready, dev 는 software key. prod = HSM-backedDocumentSigner구현 + 서명키 DR/escrow(분실 = 전 과거서명 검증불가). - PAdES 서명-PDF 컨테이너 (③④) — typst deterministic render + pyHanko PAdES. 현재 봉인 대상 = decision canonical bytes(결정적); 사람이 읽는 sealed-PDF 는 later.
- production 키관리 — dev 는 ephemeral key. prod = 영속 서버 서명 identity + 회전·백업.
MUST NOT (Phase 무관, 불변): 자체 CA · per-user cert · 자체 TSA · “공인/인증” 주장. gate 는 단일 서버 서명 identity 로 봉인한다 (per-user cert 발급 없음) — 이것이 ModuSign-recipe 모델(provider 가 서버 서명으로 봉인, 사용자별 인증서 없이). 자체 TSA 도 안 만든다 — 외부 RFC3161 TSA(DigiCert/Koscom/CrossCert)에 위임.
환경 변수 (signing identity + TSA): GATE_ESIGN_KEY_PEM / GATE_ESIGN_CERT_PEM (서버 서명 키·인증서 PEM, 또는 GATE_ESIGN_KEY_DIR 로 디렉터리 지정) · GATE_TSA_URL (RFC3161 TSA 엔드포인트, default DigiCert / 한국 prod Koscom·CrossCert). prod 의 GATE_ESIGN_KEY_PEM = 비밀 → customers.yaml services.gate.secrets[] 에 등재(blueprint OIDC 서명키 blueprint/axe/oidc-signing-key 패턴, /architecture/secrets).
7. 법무 모듈 가드레일
gate 법무모듈 = 검색·요약·번역·템플릿(로폼: user-blank, 기계적)만 (D-gate-4).
하드룰 — 변호사법 §109(형사)·§34(5): 법률상담/사안별 자문/대리/결과예측-as-advice 금지. 공개 “AI 법률상담” 금지(AI대륙아주 7개월 폐쇄·징계 선례). 변호사 노출 시 정액광고만(로톡 모델 — 알선료/성공보수/광고수익배분 금지). 모든 출력 “법률 정보, 자문 아님” disclaimer. cite = retrieval-verified(존재 + 시행일/선고일 temporal 강제). 결재 자동주입 차단 — AI 기안이 법령/판례를 auto-approve 경로에 주입하지 않음(red-team P0 #2).
Phase-1 data: 국가법령정보 OPEN API(open.law.go.kr, 이용제한없음·무료) + data.go.kr 판례(상용 OK) + HF korean_law_open_data_precedents(openrail). 대법원/헌재 + 법령 grade(하급심 = 엘박스/케이스노트 상용 walled 라 제외). SoR = gate Postgres, index = pgvector-KR(Pinecone 아님). lbox_open/kcl = CC BY-NC = 유료제품 금지.
Phase-2 gate: Pinecone + Cohere rerank + Gemini embed flywheel(LLM비용 사용자부과·DB 복리) + cross-tenant 축적 = PIPA 처리근거·가명정보·국외이전(§28-8) 자문(B-gate-legal-counsel) 선결. B2B/internal-use 유지 = 최저위험.
8. 규제 경계 요약
| 법령 | 무엇을 강제하나 | Phase |
|---|---|---|
| 전자서명법 (2020, 공인폐지) | 사서명도 실지명의 + 서명의사면 유효 — 직접구현 합법, 운영 라이선스 불요. gate: 실지명의 = gate auth · 서명의사 = 결재 승인 | Phase-1 (직접 e-sign 빌트, D-gate-5) |
| 전자문서법 §5 | 서명문서 + 메타 무결성 보관 (gate = evidence custodian via esign_seal append-only + RFC3161 TSA) | Phase-1 (gate-native 봉인) |
| 정보통신망법 §23-3 | 본인확인 자가구축 불가 → 방통위 지정 본인확인기관 통합 필수 | Phase-2 (외부 서명자 신원 한정; 내부 서명자는 gate auth = 실지명의라 불요) |
| 변호사법 §109/§34 | 법률사무 무면허 금지 — 검색·정보 한정, 자문/대리/auto-주입 금지 | Phase-1 (법무 활성 시) |
| 개인정보보호법 (PIPA) | cross-tenant 축적·국외이전·CI/DI = 처리근거·가명정보·DPIA | Phase-2 (flywheel/SaaS 전제) |
| 전자상거래법 (2025 개정) | 정기결제 명시동의·셀프해지·사전고지·다크패턴 금지 | Phase-2 (결제 전제) |
대법원 2017도13263(해시 무결성 → 서명시점 해시 + custody chain) · 민사소송법 §358(실제 서명행위 → 진정성립)이 증거능력 타깃. 제외문서 = 유언·부동산등기·공정증서·일부보증(민법 §428-2).
9. Phase-2 게이트 (deferred)
각 야심은 자기 P0/규제 게이트를 동반한다 (B-gate-phase2-gates):
- e-sign — 엔진은 Phase-1 빌트 (D-gate-5), 잔여만 Phase-2/하드닝: (Phase-2) 외부 서명자 본인확인기관 통합(정보통신망법 §23-3) · (하드닝) HSM/KMS
DocumentSigner(trait ready) + 서명키 DR/escrow · PAdES 서명-PDF(typst deterministic render + pyHanko) · production 키관리. 닫힌 항목: 자체 PKI 서버서명·CAdES-T·RFC3161 타임스탬프·custody(esign_seal)·canonical-bytes 결정성·para-os §84 재결정 = §6 참조. - Pinecone 법무 flywheel — PIPA 자문 · 비식별/가명정보 · namespace 테넌트격리 · PII 임베딩 전 제거 코드강제.
- 공개 SaaS — tenant_id RLS substrate(owner_id RLS 재설계, red-team P0 #8) · self-IdP tenant바인딩/iss/aud/per-tenant 시크릿/MFA(P0 #9) · rate-limit·abuse · 서브도메인 격리.
- 결제 — 전자금융/전자상거래법(동의·셀프해지·사전고지·다크패턴) · LLM 미터링 과금 · Paddle MoR 영세율. (Stripe = 한국법인 불가.)
- cross-tenant 축적 — PIPA 근거 확정 후.
10. 착수 순서
docs-first(본 페이지 + D-gate-1~5) → cp -R cortex gate scaffold(auth 3-branch ladder[HS256 / Blueprint OIDC / Entra] · gate_app NOSUPERUSER + gate.actor GUC RLS · append-only audit · blue/green caddy 상속, index 도메인 미상속) → 포트 41xx 배선(pg4100 / blue4110 / green4111 / proxy4112) → 7테이블 migration(6 + esign_seal) → 상태기계 → esign.gate actuator(gate-native CAdES-T server-seal + esign_seal + verify_seal, D-gate-5 — 빌트) + 모두싸인 alt-provider actuator(Actuator trait + EsignStub → 모두싸인 sandbox, optional) → customers.yaml services.gate.secrets[](+ GATE_ESIGN_KEY_PEM 서명키) · cloudflared · pre-push guard.
관련
- /architecture/para-os §7 — 결정로그 ≠ 결재워크플로 (본 페이지의 상위 철학)
- /architecture/artifacts — Artifact · Citation 저장/스키마 (Blueprint mirror 토대)
- /architecture/data — 데이터 격리 · cross-service 신호채널 규율
- D-gate-1 · D-gate-2 · D-gate-3 · D-gate-4 · D-gate-5(e-sign 직접구현) — 본 페이지의 결정 등재
- B-bp-decision-pipeline-esign — 마스터플랜 + 착수 큐 (service=gate, M9)