문서

P2 노출 가드 — 표준답변·안내글의 고객 챗봇 노출 개인정보·비공개 가드 정본

최초 작성 — 2026-06-18 · 개인정보보호관리자(privacy-officer) · Phase 2 고객 챗봇이 표준답변(hp_standard_answer)·안내글(hp_announce)을 인용·노출하기 전 적용해야 할 PII 마스킹·비공개 출처 차단·직원 내부표현 필터·승인 게이트의 정본

갱신 — 2026-06-19 · privacy-officer · 재큐레이션 복원 스크린샷(이미지) PII 검수 기준 확정(§4-A)·승인 게이트 이미지 필수 체크(§4-2)·PII 게이트 상태 컬럼(§4-B)·텍스트 정규식 보강(§2-1). 배경: created_by='llm-curator-v3' approved 580건 중 이미지 보존 345건(51.3%) — 본문 텍스트는 마스킹됐으나 스크린샷 속 PII는 자동 제외되지 않음(사람 검수 필수)

이 문서가 해소하는 미정 항목(다른 정본이 본 문서에 위임):

포지셔닝: 수집·분류·승인 워크플로 자체는 위 두 정본이 정본이다. 본 문서는 그 워크플로에 개인정보·비공개 노출 관점의 가드(검사 규칙·승인 체크리스트·차단 조건·적법성) 만을 얹는다. 실제 마스킹 파이프라인·승인 UI·자동 스캔 구현은 §8 핸드오프로 api/admin/dba에 넘긴다(본 문서는 코드를 만들지 않는다).


1. 위협 모델 — 무엇이 어디서 새는가

표준답변·안내글은 PMS 문의/직원 안내글에서 수집된다(출처 source_post_id). 본문(answer/body)·이미지·출처 메타에 다음이 섞여 들어올 수 있다.

#노출 경로유형위험도정보주체 범위
L1표준답변/안내글 본문에 원 문의자·제3자 PII(이름·연락처·이메일·사업자번호·주소) 잔존PII 본문 잔존high원 문의 고객·담당자
L2이미지 인용(hp_image_asset)의 캡션·화면 캡처 속 고객정보(관리화면 스크린샷에 명단·연락처)이미지 PIIhigh캡처 화면에 등장한 다수 고객
L3비공개 댓글(private_yn='Y') 파생 정보가 본문/출처로 노출비공개 파생critical비공개로 답한 특정 고객·계약
L4출처 표기/역추적(source_post_id) 인용 시 원 게시물 식별자·프로젝트·업체명 노출출처 식별medium원 문의 고객사
L5안내글(staff 작성)에 특정 고객·계약·내부 정책·가격 언급이 고객에게 그대로 노출내부표현high언급된 특정 고객사 + 회사 영업기밀
L6다른 고객 정보 교차 노출 — A 고객 문의에서 수집된 답변에 B 고객 식별정보가 인용교차 노출critical무관한 제3 고객
L7매칭/생성 시 OpenAI(AI Gateway 경유) 전송 = 개인정보 국외 이전. 본문에 PII가 남아있으면 그대로 국외 전송국외 이전high본문에 남은 모든 정보주체

핵심 원칙: 승인(approval_status='approved')은 챗봇 사용의 필요조건이지 PII 안전의 충분조건이 아니다. 승인 단계에 PII·비공개 가드를 명시적으로 끼워 넣지 않으면 "승인됨 = 그대로 노출"이 되어 L1·L3·L5·L6이 그대로 흐른다.


2. 노출 가드 규칙 (챗봇 인용·노출 전 검사)

표준답변/안내글이 P2 고객 챗봇 응답에 인용·노출되기 전 아래 4중 가드를 통과해야 한다. 1차는 승인 시점(저장 게이트), 2차는 노출 시점(런타임 가드) — 이중화한다(승인 후 본문 수정·정규식 갱신을 흡수).

2-1. G1 — PII 마스킹 (본문·캡션, hp_setting safety 재사용)

  • 재사용 자산: hp_setting safety 그룹의 pii_masking(on/off) + pii_patterns. 현 시드는 3종뿐(주민번호 \d{6}-[1-4]\d{6} · 전화 \d{3}-\d{3,4}-\d{4} · 이메일 정규식). 별도 정규식 세트를 새로 만들지 않고 이 시드를 정본으로 공유한다(REQUIREMENTS NFR-1 AC-1.3·§9 safety 시드와 정합).
  • 보강 필요 패턴(현 시드 미포함 → 3종에서 6종으로 — §8 dba/api 핸드오프, §7-2 P5):
    • 사업자등록번호 \d{3}-\d{2}-\d{5}마스킹 대상 추가([사업자번호]). 고유식별정보는 아니나 법인·개인사업자 식별이 가능하므로 마스킹한다.
    • 계좌번호 — 은행별 자릿수가 제각각이라 단일 정규식 오탐이 크다. 보수적 패턴 + "계좌/입금/예금주" 키워드 근접으로만 후보화하고, 최종 판정은 C2 사람 검수가 보완한다.
    • 카드번호 \d{4}-\d{4}-\d{4}-\d{4} — 16자리 하이픈 구분 형태. 일반 숫자열 오탐을 줄이기 위해 키워드 근접(카드/승인번호)으로 보강하고 C2 사람 검수가 보완한다.
    • (기존) 이름+연락처 근접 결합.
  • 계좌·카드는 정규식 단독으로 오탐/미탐이 큰 영역이라 자동 마스킹의 신뢰도가 낮다 → 키워드 근접으로 후보를 좁히되 최종 안전판은 §4-2 C2 사람 검수로 둔다.
  • 적용 면: answer/body 본문 + 인용 이미지의 description 캡션 + 출처 표기 문자열. 임베딩 생성 입력에도 동일 적용(마스킹 후 임베딩 — 그래야 벡터·국외전송에 PII가 남지 않는다, L7).
  • 마스킹 표기: 값 자체를 제거하고 [연락처]·[이메일]·[사업자번호] 류 플레이스홀더로 치환(부분 노출 010-****-1234는 재식별 위험 — 전체 치환 권장).
  • 고유식별정보 특칙: 주민등록번호가 발견되면 마스킹이 아니라 해당 표준답변/안내글을 차단(노출 불가) 후 운영자 알림. 주민번호는 원칙적 처리 금지 대상이라 "마스킹해서 노출"이 아니라 "원천 제거 후 재검토"가 맞다(개인정보보호법 §24의2).

2-2. G2 — 비공개 출처 파생 차단 (L3·L4)

  • 차단 조건: 표준답변/안내글의 source_post_id가 가리키는 원 게시물의 답변이 비공개 댓글(private_yn='Y')에서 파생됐으면 → P2 노출 후보에서 제외. 비공개 댓글 본문은 이미 api에서 LLM 입력·외부 반환이 차단돼 있으나(src/index.ts private_yn != 'Y' 필터·content: isPrivate ? null), 수집 단계에서 비공개 내용이 사람 손으로 본문에 옮겨졌을 가능성을 승인 게이트에서 사람이 확인해야 한다(자동 탐지 불가 영역).
  • 비공개 출처 플래그(C1 자동): source_post_id비공개 댓글에서 파생된 자산이면 C1 자동 스캔이 private_source_flag를 세운다. 이 플래그는 자동 차단이 아니라 승인 화면에 경고를 띄워 사람 확인을 강제하는 신호다(일반화 녹임 여부는 자동 판정 불가이므로 C2 승인자가 §4-2 체크리스트에서 직접 판단). 컬럼은 §4-B에 정의.
  • 출처 표기 마스킹(L4): P2 응답에 출처를 노출할 때 원 게시물 ID·프로젝트명·고객사명을 그대로 인용하지 않는다. 출처는 "검증된 표준답변" 수준의 일반화된 라벨만 노출(예: 토픽·서비스 라벨). source_post_id는 admin 내부 역추적 전용이며 P2 응답 페이로드에 포함 금지.
  • 봇 가시성 연계: FR-10 AC-10.1 — P2 고객 노출 봇은 visibility=public 고정(ADMIN-PLAN §4-13). 비공개 파생 표준답변은 internal 봇(상담사 보조)에서만 허용.

2-3. G3 — 직원 내부표현 필터 (안내글 특유, L5)

안내글은 staff가 작성한 글이라 고객 직접 노출이 부적절한 표현이 섞인다. §3에서 상술.

2-4. G4 — 교차 고객/일반화 검증 (L6)

  • 본문이 특정 1개 고객·계약·1회성 사례에 묶여 있으면 P2 노출 부적합 → 일반화(고객 식별정보 제거·범용 안내문 재작성)된 버전만 승인. CURATION §5-1 "재사용성" 판단과 동일 게이트에서 PII 관점을 함께 본다.
  • 한 표준답변에 원 문의자 외 제3 고객이 언급되면(L6) 무조건 차단·재작성.

3. 안내글(hp_announce) 특유 위험과 가드

안내글은 직원(staff) 작성 공지·안내문이라 Q&A와 위험 프로파일이 다르다. HARVEST §5-3에서 안내글을 별도 테이블·별도 승인 메뉴로 분리했으므로, 안내글 승인 게이트에 아래 3종 추가 검사를 둔다.

위험설명위험도P2 노출 적절성가드
A1. 특정 고객·계약 언급"○○공단 환급과정은…" 류 특정 고객사·계약 직접 지칭high부적절고객사명 제거·일반화 후 승인. 일반화 불가하면 internal 한정
A2. 내부 정책·가격단가·할인율·내부 운영 기준·미공개 로드맵high (영업기밀)부적절가격·내부정책 라인 제거 또는 공개 가능 범위로 재작성. 미정 시 차단
A3. "비공개로 처리"류 표현"이 건은 비공개로 안내드렸습니다", "내부적으로만 공유" 등 비공개 신호어medium부적절비공개 신호어(blocked_words 확장 후보) 탐지 → 자동 플래그 + 사람 확인
  • 안내글 출처·말투 가드(H8): 안내글이 P2에 노출될 때는 "검증된 안내"로 일반화된 말투로만 인용하고, 원 작성 직원·내부 게시물을 출처로 노출하지 않는다. 안내글의 valid_from/valid_to(유효기간) 경과분은 P2 노출 후보에서 자동 제외(노후 정책의 고객 오안내 방지).
  • 분류 근거 가드: 안내글/표준답변의 staff·customer 분류는 classify.ts명시 규칙(@malgnsoft.com / company='맑은소프트')만 사용한다. 이름·말투·도메인 패턴으로 개인을 추정해 분류하지 않는다(추정 금지 — HARVEST §5-5 프롬프트 규약과 정합).

4. 승인 워크플로 연계 — 어디에 게이트를 두는가

approval_status 전이(draft → reviewing → approved, CURATION §3-3) 중 reviewing → approved 전이에 PII/노출 체크를 강제한다. 3계층으로 둔다(자동 스캔 + 사람 체크리스트 + 런타임 가드).

4-1. 계층별 책임

계층시점주체내용
C1 자동 스캔draft 저장 시 + 승인 진입 시api(자동)pii_patterns(6종) 매치 → 본문/캡션 PII 후보 하이라이트, 주민번호 발견 시 승인 차단, 비공개 출처(source_post_idprivate_yn='Y') private_source_flag 세움, 안내글 비공개 신호어(A3) 플래그, 이미지는 §4-A I1 Vision 1차 트리아지(suspect 플래그)까지만
C2 사람 체크리스트reviewing → approved 직전승인자(admin/developer)§4-2 체크리스트 전 항목 확인 — admin UI에 필수 체크박스로. 미체크 시 승인 버튼 비활성
C3 런타임 가드P2 챗봇 노출 시점api(자동)노출 직전 pii_masking·출처 마스킹 재적용 + 비공개/유효기간 경과 재확인(승인 후 변경 흡수)

C2(사람)는 책임 소재를 명확히 한다 — 승인자가 체크리스트에 체크하면 그 표준답변/안내글의 P2 노출 적합성에 대한 승인자 책임이 감사 로그(hp_audit_log)에 기록된다(누가·언제 승인). agent는 승인 권한이 없으므로(CURATION §1-3) PII 게이트의 최종 책임은 admin/developer.

4-2. 승인 체크리스트 (admin UI 필수 체크박스)

reviewing → approved 전이 시 승인자가 확인:

  • 본문·이미지 캡션에 이름·연락처·이메일·주소·사업자번호 등 PII가 없다(또는 마스킹됨). 자동 스캔 하이라이트 0건 또는 검토 완료.
  • 주민등록번호 등 고유식별정보가 없다(있으면 승인 불가 — 원천 제거 후 재상신).
  • (이미지 보유 시) 인용 이미지/스크린샷 PII 검수(§4-A)가 완료되어 모든 인용 이미지의 image_pii_status ∈ clear/removed/masked 다(롤업 기준 동일). pending·suspect·blocked가 하나라도 포함되면 승인 불가. 이 항목 미체크 시 승인 버튼 비활성.
  • 비공개 댓글(private_yn='Y')에서 파생된 내용이 본문에 없다(출처 게시물 확인). private_source_flag 경고 시 본문 일반화 녹임 여부 직접 확인.
  • 원 문의자 외 제3 고객 정보가 인용되지 않았다(교차 노출 L6).
  • (안내글) 특정 고객사·계약·내부 가격/정책·"비공개" 표현이 없다(또는 일반화됨).
  • 출처로 원 게시물 ID·프로젝트·고객사명이 노출되지 않는다(일반화 라벨만).
  • (안내글) 유효기간이 유효하다(만료 공지를 P2에 승인하지 않음).

체크리스트 전 항목 통과 시에만 approved. 하나라도 불확실하면 반려(rejected, 사유 필수) 또는 internal 한정 승인(상담사 보조 전용, P2 비노출).

이미지 게이트는 하드 게이트다 — 이미지 보유 자산은 image_pii_status 롤업(인용 이미지 최악값, §4-B)이 clear/removed/masked가 아니면 admin UI에서 승인 버튼이 비활성화되며 강제 우회 불가. 승인자·판정 결과는 감사 로그(hp_audit_log)에 누가·언제 기록.

4-3. 단정 불가 영역 (법무/DPO 확인 필요)

  • 비공개 댓글 내용이 일반화돼 본문에 녹은 경우 자동 탐지 불가 — 사람 판단 의존. 운영 중 누락 사례가 발견되면 법무/DPO와 일반화 허용 경계를 재합의.
  • 사업자번호·법인명의 "개인정보" 해당 여부는 개인사업자 여부에 따라 갈린다 — 법무/DPO 확인 필요. 본 정책은 보수적으로 마스킹 대상에 포함.

4-A. 이미지/스크린샷 PII 검수 기준 (L2 — 사람 검수 기본)

표준답변/안내글이 인용하는 이미지(hp_image_asset)에는 관리화면 스크린샷·고객 명단 표·캡처 등이 섞이며, 본문 텍스트와 달리 정규식 마스킹이 닿지 않는다. 재큐레이션 복원 자산 580건 중 345건(51.3%)이 이미지를 보존하고 있고, 본문 텍스트는 마스킹됐어도 스크린샷 속 PII는 자동 제외되지 않았다. 따라서 이미지 PII 검수의 기본은 사람 검수다(사용자 방침).

  • Vision 자동은 검수 보조(트리아지)일 뿐 자동 통과 금지. Vision 1차는 사람 검수 우선순위를 매기는 트리아지로만 쓴다. Vision이 "PII 없음"으로 본 것을 근거로 자동 통과시키지 않는다 — Vision 미탐(false negative) = PII 노출이므로, 자동 통과는 미탐 리스크를 그대로 떠안는다.

처리 순서 (I1→I2→I3)

단계주체내용산출
I1 Vision 1차api(자동, 보조)AI Gateway→OpenAI Vision으로 PII 의심 이미지 플래그 → image_pii_status='suspect' 후보화(검수 큐 우선순위용)suspect 플래그(통과 권한 없음)
I2 사람 검수admin 승인자admin 미리보기에서 이미지 확인(suspect 우선). 아래 체크리스트로 유형·위치 판단검수 의견
I3 판정admin 승인자clear / removed(이미지 인용 자체 삭제) / masked(가림 처리본 교체) / blocked(자산 노출 차단) 확정 + pii_checked_by·pii_checked_at 기록최종 image_pii_status

검수 체크리스트 (값 전사 금지 — 유형·위치만 기록)

검수자는 화면에 보이는 PII 값을 절대 텍스트로 옮겨 적지 않는다(전사 자체가 2차 노출). 발견 시 유형 라벨과 위치(이미지 ID·대략 영역)만 기록한다.

  • 인명·연락처·이메일·주소가 화면에 보인다
  • 고객 명단·표(여러 고객 행이 한 번에 노출되는 관리화면 리스트)가 보인다
  • 계좌·카드·사업자번호가 보인다
  • 주민등록번호 등 고유식별정보가 보인다 → 있으면 즉시 blocked·제외(마스킹 아님, §2-1·5-3 고유식별정보 특칙 동일)
  • 내부 관리화면(고객 비노출 전용 화면)이 그대로 캡처돼 있다
  • 제3자 정보가 교차 노출된다(원 문의자 외 고객, L6)
  • 일반 조작안내(메뉴·버튼 위치 등)로서 적합한가 — 적합하면 clear 후보

판정 규칙

  • clear — PII 없음·일반 조작안내로 적합. (단, 사용자 방침상 Vision 단독 clear는 금지, 사람 판정 필요)
  • masked — 일부 PII 영역을 가린 처리본으로 교체하면 노출 가능
  • removed — 가림으로 해결 불가하거나 이미지가 본질적으로 명단/내부화면 → 인용 이미지 자체를 답변에서 제거
  • blocked — 고유식별정보 포함 등 노출 절대 불가 → 자산 차단·운영자 알림

국외 이전 유의(Vision 1차): I1은 이미지를 AI Gateway→OpenAI(국외) 로 보낸다 = 개인정보 국외 이전(§5-2 L7과 동일 쟁점). Vision 프롬프트에 값을 전사하도록 요구하지 않으며(유형·위치만 반환), Gateway 프롬프트/응답 로그에 PII가 잔존하지 않는지 api-developer가 점검(§7-2 P7).

표본 검수 운영(cs-operator): (1) 이미지 보유 345건은 100% I1 1차 큐에 적재해 사람 검수 대상으로 올린다. (2) clear 판정분은 무작위 재검수(주 10~20% 표본)로 미탐을 사후 회수. (3) 신규 인용 승인 전 동일 게이트(I1→I3)를 통과시켜 백필 이후 유입분도 동일 기준 적용.

4-B. PII 게이트 상태 컬럼 (DB 영속화 — §8 dba 핸드오프)

승인 게이트(C1·C2)와 이미지 검수(§4-A) 결과를 영속화하는 컬럼. 컬럼 ENUM 값은 최종 통합본으로 고정한다.

테이블컬럼값/타입의미
hp_standard_answer, hp_announcepii_text_statusENUM pending/clear/masked/blocked본문 텍스트 PII 판정(C1 스캔 + C2 확인). 텍스트가 있는 자산에 적용
hp_standard_answer, hp_announceprivate_source_flagTINYINT(0/1)비공개 출처 파생 경고(§2-2 C1 자동)
hp_standard_answer, hp_announceimage_pii_statusENUM none/pending/suspect/clear/removed/masked/blocked인용 이미지 롤업(아래)
hp_standard_answer, hp_announcepii_checked_by, pii_checked_at사용자ID, DATETIME텍스트 게이트 검수자·시각
hp_image_assetimage_pii_statusENUM none/pending/suspect/clear/removed/masked/blocked이미지 단위 판정(§4-A I3)
hp_image_assetpii_checked_by, pii_checked_at사용자ID, DATETIME이미지 검수자·시각
hp_image_assetpii_finding_types유형 라벨 목록(아래 타입 주석)발견 유형 라벨(예: name,phone,account) — 값 전사 금지
  • 롤업 규칙: 답변/안내글의 image_pii_status = 인용한 이미지들의 image_pii_status 중 최악값. 우선순위(나쁨→좋음): blocked > pending > suspect > removed/masked/clear. 이미지가 없으면 none. 승인은 롤업이 clear/removed/masked(또는 none)일 때만 가능(§4-2).
  • MySQL 5.6 제약: 실서버 MySQL 5.6은 JSON 타입을 지원하지 않으므로 pii_finding_typesLONGTEXT(콤마 구분 라벨 또는 JSON 문자열)로 저장한다.
  • 백필: 재큐레이션 580건은 텍스트 pii_text_status='pending'으로, 이미지 보유 345건의 이미지 자산은 image_pii_status='pending'으로 백필 후 §4-A 게이트를 거쳐 확정한다.

5. 적법성 (한국 개인정보보호법·정보통신망법)

5-1. 수집·인용의 근거 (원 문의자 동의 범위)

  • PMS 문의·답변은 상담·고객지원 목적으로 수집된 개인정보다. 이를 표준답변/안내글 자산으로 2차 가공해 챗봇에 노출하는 것은 원 수집 목적(해당 고객 상담)과 다른 목적일 수 있다 → 목적 외 이용 소지.
  • 완화책: 표준답변/안내글은 개인 식별정보를 제거한 일반화 형태(가명/익명화) 로만 P2에 노출한다. 식별정보가 제거되면 더 이상 특정 개인의 개인정보가 아니므로 목적 외 이용 쟁점이 해소된다. → §2~4 가드의 적법성 근거 = "P2 노출본은 식별정보 없는 일반화본"이 전제.
  • 식별정보를 제거할 수 없는(특정 고객사에만 유효한) 답변은 P2 노출 부적합 → internal 한정. 위험도 high, 정보주체 범위 = 원 문의 고객.

5-2. 국외 이전 (OpenAI / AI Gateway 경유) — L7

  • 챗봇 매칭·생성·임베딩 시 본문이 AI Gateway → OpenAI(국외) 로 전송된다 = 개인정보 국외 이전(개인정보보호법 §28의8).
  • 가드: P2 노출 후보 본문은 §2-1 마스킹을 임베딩·프롬프트 전송 전에 적용해 PII가 국외로 나가지 않게 한다. 마스킹된 일반화본만 전송되면 국외이전 대상 개인정보가 최소화된다.
  • AI Gateway 로깅: Gateway가 프롬프트/응답을 캐싱·로깅하므로(malgn-helper 게이트) 로그에 PII가 남지 않도록 전송 전 마스킹이 선결이다. 로깅 보존기간·PII 잔존 여부는 api-developer와 별도 점검(현행 메모와 동일 포인트).
  • 위탁·국외이전 고지/동의: Cloudflare(처리위탁)·OpenAI(국외이전)·AWS는 개인정보처리방침에 위탁·국외이전 항목(수탁자·이전국가·항목·목적·보유기간) 고지가 필요하다. P2 고객 대상 서비스 오픈 전 개인정보처리방침 정비 필요 — 위험도 high, 법무/DPO 확인 필요.

5-3. 보존기간·파기

자산권고 보존근거
표준답변/안내글 본문무기한(soft delete) — 단 식별정보 제거 후 보존ADMIN-PLAN §9 "자료·표준답변 무기한"은 자산 가치 전제이며 식별정보 없는 일반화본 한정으로 해석. 식별정보 잔존본은 자산이 아니라 위험
source_post_id출처 역추적 메타admin 내부 보존 가능, P2 페이로드 비노출L4
안내글 유효기간 경과분보존하되 P2 노출 제외(valid_to 경과)§3
챗 로그·LLM 로그 PII본문 90일/메타 1년 후 익명화(ADMIN-PLAN §9) — 마스킹 후 저장이 선결NFR-6
  • 민감정보·고유식별정보(주민번호 등)는 자료·로그에서 발견 시 즉시 제거·차단(보존 대상 아님). 위험도 critical.

6. 위험도·정보주체 범위 요약

ID위험위험도정보주체1차 가드
L1본문 PII 잔존high원 문의 고객G1 마스킹 + C2 체크
L2이미지 캡션·스크린샷 PIIhigh캡처 화면 내 다수 고객G1(캡션) + §4-A 이미지 사람 검수(I1 Vision 보조→I2/I3 사람 판정) + §4-2 이미지 하드 게이트(image_pii_status)
L3비공개 댓글 파생critical비공개 응답 받은 특정 고객G2 차단 + C2 체크
L4출처 식별자 노출medium원 문의 고객사G2 출처 마스킹
L5안내글 내부표현(고객·가격·정책)high특정 고객사 + 회사 영업기밀G3 + A1~A3
L6교차 고객 노출critical무관한 제3 고객G4 + C2 체크
L7OpenAI 국외 이전 PIIhigh본문 내 전 정보주체G1(전송 전 마스킹) + 처리방침
주민번호 등 고유식별정보critical해당 개인마스킹 아닌 차단·제거

7. 결정 사항 (이 문서로 확정) / 미정

7-1. 결정

결정근거
승인 ≠ PII 안전. reviewing→approvedPII/노출 체크리스트 필수 게이트(C2)L1·L3·L5·L6
가드는 승인 시점(C1·C2) + 노출 시점(C3) 이중화승인 후 본문 수정·정규식 갱신 흡수
PII 마스킹은 hp_setting safety pii_patterns 재사용(별도 세트 안 만듦) + 3종→6종 보강(사업자번호 마스킹·계좌·카드 키워드 근접)REQUIREMENTS NFR-1 AC-1.3 정합·§2-1
이미지/스크린샷 PII는 사람 검수 기본 — Vision 자동은 트리아지 보조만, 자동 통과 금지(미탐=노출)§4-A·사용자 방침
이미지 보유 자산은 image_pii_status 롤업(최악값)이 clear/removed/masked일 때만 승인 — 미체크 시 승인 버튼 비활성(하드 게이트)§4-2·4-B
비공개 출처 파생은 private_source_flag승인 화면 경고(자동 차단 아닌 사람 확인 강제)§2-2 C1
주민번호 등 고유식별정보는 마스킹이 아니라 차단·원천 제거(본문·이미지 동일)개인정보보호법 §24의2
비공개 출처(private_yn='Y') 파생분은 P2 노출 제외(internal 한정)FR-10 AC-10.1·10.2
출처는 일반화 라벨만 노출, source_post_id·프로젝트·고객사명 P2 페이로드 비노출L4
P2 노출본은 식별정보 제거된 일반화/가명본만 — 목적 외 이용·국외이전 쟁점 완화§5-1·5-2
임베딩·프롬프트 전송 전 마스킹(국외이전·Gateway 로그에 PII 미잔존)§5-2
staff/customer 분류는 classify.ts 명시 규칙만(이름·패턴 추정 금지)HARVEST §5-5

7-2. 미정 (법무/DPO·후속 협의)

#항목누가영향
P1비공개 내용이 일반화돼 본문에 녹은 경우 허용 경계법무/DPO + 기획§4-3
P2사업자번호·법인명의 개인정보 해당 여부(개인사업자)법무/DPO§2-1·4-3
P3개인정보처리방침 위탁·국외이전(Cloudflare·OpenAI·AWS) 고지문 정비법무/DPO + planner§5-2
P4AI Gateway 로그 PII 잔존·보존기간 실측 점검api-developer§5-2
P5마스킹 정규식 보강(사업자번호·계좌·카드, 3종→6종) 시드 추가dba + api§2-1
P6안내글 "비공개 신호어" 사전(A3) — blocked_words 확장 vs 별도 키기획 + api§3
P7이미지 Vision 1차(I1) 국외이전 — 프롬프트/응답 값 미전사·Gateway 로그 PII 잔존 점검api-developer + 법무/DPO§4-A·5-2
P8이미지 마스킹(가림) 처리 도구·masked 산출물 교체 방식(R2 처리본 관리)api + admin + dba§4-A I3

8. 핸드오프 — 후속 작업 (코드는 담당 에이전트가 구현)

대상넘기는 것
api-developer(1) reviewing→approved 전이에 PII 자동 스캔(C1)pii_patterns(6종) 매치 하이라이트·주민번호 차단·비공개 출처(source_post_idprivate_yn='Y') private_source_flag 세움·안내글 신호어(A3) 플래그. (2) 이미지 I1 Vision 1차 트리아지(§4-A) — suspect 플래그까지만(자동 통과 금지), 값 미전사 프롬프트, Gateway 로그 PII 잔존 점검(P7). (3) C3 런타임 가드 — P2 노출/임베딩/프롬프트 전송 직전 마스킹·출처 마스킹·유효기간/비공개·image_pii_status 재확인. (4) P2 응답 페이로드에서 source_post_id·프로젝트·고객사명 제거, 일반화 라벨만. (5) AI Gateway 로그 PII 잔존 실측(P4). (6) 이미지 마스킹 처리본 교체 방식(P8). 실제 마스킹 함수·취약점은 security-reviewer와 분리 검토
admin(frontend)/standard-answers·/announces 상세에 승인 전 PII 체크리스트(§4-2) 필수 체크박스 + 자동 스캔 하이라이트 패널 + 이미지 미리보기 검수 UI(§4-A I2/I3, suspect 우선·판정 버튼 clear/removed/masked/blocked). 이미지 롤업 image_pii_status가 clear/removed/masked가 아니면 승인 버튼 비활성(하드 게이트). 승인자·이미지 판정 결과 감사 로그 기록
dba(1) pii_patterns 시드에 사업자번호·계좌·카드 정규식 보강(3종→6종, P5). (2) §4-B 컬럼 추가 — hp_standard_answer/hp_announcepii_text_status(ENUM pending/clear/masked/blocked)·private_source_flag·image_pii_status(ENUM none/pending/suspect/clear/removed/masked/blocked, 롤업)·pii_checked_by/at; hp_image_assetimage_pii_status(동일 ENUM)·pii_checked_by/at·pii_finding_types(MySQL 5.6 → LONGTEXT, 라벨만). (3) 백필 — 580건 pii_text_status='pending'·이미지 345건 image_pii_status='pending'. (4) 안내글 신호어 사전 저장처(P6)
cs-operator(1) 이미지 보유 345건 100% I1 1차 큐 적재·사람 검수 수행(§4-A I2/I3). (2) clear 판정분 무작위 재검수(주 10~20% 표본). (3) 신규 인용 승인 전 동일 게이트 운영. (4) 검수 시 값 전사 금지(유형·위치 라벨만)
planner(1) 본 정본을 CURATION §8-D/T8·HARVEST H8/§9-E·REQUIREMENTS Q3 해소로 상호참조 갱신. (2) 개인정보처리방침 위탁·국외이전 고지문 정비를 P2 오픈 전 마일스톤으로(P3, 법무/DPO 협업)
법무/DPO§7-2 P1·P2·P3·P7 확정 — 일반화 허용 경계·사업자번호 해석·처리방침 국외이전 고지·이미지 Vision 1차 국외이전 적법성
security-reviewer마스킹 정규식 우회(부분 일치·인코딩)·런타임 가드 누락·이미지 게이트 강제 우회(image_pii_status 검증 누락)보안 취약점 검토(본 문서는 정책, 취약점은 분리)

9. 정합 — 다른 정본과의 관계

정본관계
REQUIREMENTS.mdFR-10.3·NFR-6.3·Q3가 본 문서로 해소. 본 문서가 비공개·PII 세부 규칙 정본
STANDARD-ANSWER-CURATION.md§8-D·T8(비공개 출처 P2 가드)를 본 문서로 위임. 승인 워크플로(§3)에 §4 PII 게이트를 얹음
PMS-INQUIRY-HARVEST.mdH8·§9-E(안내글 P2 가드)를 본 문서 §3으로 해소. 수집 단계에서 비공개 본문 미혼입은 HARVEST 책임, 노출 가드는 본 문서
ADMIN-PLAN.md§4-9 안전 가드(pii_patterns)·§4-13 봇 가시성(public/internal)과 G1·G2 연계
HP-SCHEMA.mdprivate_yn 마스킹 관례·source_post_id 역추적과 정합. §4-B PII 게이트 컬럼(pii_text_status·image_pii_status·private_source_flag·pii_checked_by/at·pii_finding_types)을 dba가 추가 시 HP-SCHEMA 현행화 필요(이번 편집 범위 외)
Malgn Helper(고객상담 AI 챗봇) 프로젝트 문서·작업 이력