119 데이터에는 신고자·환자·요구조자 정보가 섞여 있습니다. 이런 데이터를 외부 AI 도구에 붙여넣거나 공개 저장소에 올리면, 한 번의 실수로 개인정보가 영구히 노출됩니다. 이 안내서는 데이터를 내보내기 전에 로컬에서 1차 점검하는 방법입니다.
이 안내서를 끝내면 개인정보 패턴을 자동으로 1차 점검하고, 자동 도구가 못 잡는 것이 무엇인지 알아 사람이 무엇을 끝까지 봐야 하는지 판단할 수 있습니다.
점검은 3단입니다
한 가지 도구로 끝나지 않습니다. 세 단계가 겹겹이 받칩니다.
- 정규식 점검 — 주민번호·전화번호 같은 패턴을 로컬에서 기계가 1차로 찾습니다 (아래 PII 가드)
- 문맥 점검 — 패턴은 없지만 "날짜+장소+사건유형" 조합처럼 맥락으로 식별되는 위험을 점검합니다
- 사람 최종 확인 — 이름·상세주소·사건 서사처럼 기계가 못 잡는 것을 사람이 봅니다
무엇을 잡는가 — block과 warn
PII 가드는 표준 라이브러리만 쓰는 로컬 스크립트입니다. 발견한 값은 절대 다시 출력하지 않고 가립니다(마스킹).
| 등급 | 잡는 패턴 | 의미 |
|---|---|---|
| block | 주민·외국인등록번호, 여권번호 | 실행 중단 대상 |
| warn | 휴대전화, 이메일, 차량번호, 카드번호 추정 | 사람이 확인 후 진행 |
실제 패턴은 이렇게 정의돼 있습니다(필요할 때 참고).
PYTHON
BLOCK_PATTERNS = {
"주민/외국인등록번호": re.compile(r"\b\d{6}[-\s]?[1-8]\d{6}\b"),
"여권번호": re.compile(r"\b[MSRODG]\d{8}\b"),
}
WARN_PATTERNS = {
"휴대전화": re.compile(r"\b01[016789][-\s]?\d{3,4}[-\s]?\d{4}\b"),
"이메일": re.compile(r"[\w.+-]+@[\w-]+\.[\w.-]+"),
"차량번호": re.compile(r"\b\d{2,3}[가-힣]\d{4}\b"),
"카드번호추정": re.compile(r"\b(?:\d[ -]?){15,16}\b"),
}
종료 코드가 곧 판정입니다
스크립트를 실행하면 종료 코드로 결과를 알려줍니다.
BASH
python pii_guard.py sample.csv memo.txt
| 종료 코드 | 의미 | 다음 행동 |
|---|---|---|
| 0 (표시 없음) | 알려진 패턴 없음 | 그래도 이름·상세주소·사건 서사는 사람이 본다 |
| 0 + warn | 전화·이메일 등 확인 필요 | 공개 필요성·마스킹 수준을 기록 |
| 1 (block) | 차단 패턴 발견 | 공개·업로드·AI 입력 중단 |
| 2 | 파일 없음·사용법 오류 | 현재 위치와 파일명 확인 |
▸ 소방 활용 포인트
119 데이터는 신고자·환자 정보가 섞이기 쉽습니다. 외부 AI나 공개 저장소에 올리기 전 반드시 이 점검을 거치고, 공개하지 않을 자료는 외부 AI에도 넣지 마세요. warn은 통과가 아니고 block은 중단 신호이며, 가드는 보조 장치일 뿐 최종 확인은 사람입니다.직접 해보기 (안전한 연습 파일)
실제 신고자·환자 자료가 아니라, 합성 문자열로 만든 연습 파일로만 시험합니다.
POWERSHELL
("연습용 경고: " + "010-" + "0000-" + "0000") | Set-Content -Encoding UTF8 sample_warn.txt
("연습용 차단: " + "000000-" + "1000000") | Set-Content -Encoding UTF8 sample_block.txt
python pii_guard.py sample_block.txt
차단 패턴이 있으면 값을 가린 채 이렇게 알려 줍니다.
TEXT
⛔ 차단 1건 — 제거 전에는 진행할 수 없습니다: - [주민/외국인등록번호] sample_block.txt 1행: 000███████████ ℹ️ 가드는 보조 장치입니다. 이름·주소는 기계가 못 잡습니다 — 최종 확인은 사람이 합니다.
사람이 끝까지 봐야 하는 것
자동 점검을 통과해도 다음은 사람이 직접 확인합니다.
TEXT
- [ ] 신고자명, 환자명, 요구조자명, 연락처, 상세주소를 제거했습니다. - [ ] 사건번호, 출동번호, 내부 보고번호가 실제 건을 특정하지 않는지 확인했습니다. - [ ] 공개용 예제 데이터는 합성 데이터 또는 공개 가능한 데이터만 사용했습니다. - [ ] AI 도구에 넣을 텍스트는 필요한 최소 정보만 남겼습니다.
정규식이 못 잡는 것
PII 가드는 알려진 패턴만 찾습니다. 다음은 자동 탐지가 실패할 수 있어 사람의 판단이 필요합니다.
- 이름·상세주소·드문 직책과 상황의 조합
- 실제 신고 내용·현장 사진 설명·사진 속 글자
- 의료정보·수사정보·내부 작전정보 (패턴이 없어도 공개 대상이 아닐 수 있음)
⚠️ 흔한 실수
일부만 가린 실제 번호는 block이 놓칠 수 있고, 공용 대표번호·공개 이메일은 warn이 잘못 잡을 수 있습니다. 도구의 결과는 시작점이지 결론이 아닙니다.