Data AI에게 맡길 수 없는 민감정보 탐지
2026.07.31 17:46- 작성자 관리자
- 조회 408
AI에게 맡길 수 없는 일 — 민감정보 탐지의 정석
민감정보 탐지를 AI에 맡기면 아직 가리지 않은 정보가 새어 나갑니다. 그래서 찾는 일만큼은 재현·감사 가능한 결정론적 방법을 사용해야 합니다.
MCP(Model Context Protocol)로 외부 도구와 데이터를 붙이고 에이전틱 AI가 요약·분류·추출까지 알아서 처리하는 풍경이 이제 낯설지 않습니다. 문서를 던지면 핵심을 뽑아 주고 표를 보여 주면 이상치를 짚어 줍니다. 이쯤 되면 데이터 보호 공정도 통째로 맡기고 싶은 유혹이 생깁니다. "여기서 민감정보 좀 찾아 줘"라고 한마디 하면 될 것 같으니까요.

그런데 바로 이 지점에서 손이 묶입니다. 민감정보를 찾아 달라며 데이터를 AI에게 통째로 넘기는 순간, 아직 가리지 않은 바로 그 정보를 AI가 먼저 들여다보게 됩니다. 보호하려던 대상을 보호받지 못한 상태로 내보이는 셈입니다. 공항 보안검색대의 엑스레이 스캐너를 떠올려 보시면 좋겠습니다. 스캐너는 가방을 열지 않고도 위험물을 훑어냅니다. 탐지를 AI에게 맡긴다는 건, 스캐너 대신 검색 요원 앞에 짐을 전부 풀어 보여 주는 것과 같습니다. 따라서 데이터 보호 공정 가운데 유독 '탐지'에만은 별도의 '정석'이 필요합니다.
찾고, 등급 매기고, 가리는 세 공정
민감정보 보호를 하나의 덩어리로 뭉뚱그리기 쉽지만, 실제로는 순서가 뚜렷한 세 공정입니다. 가장 먼저 데이터 안에서 보호할 대상을 찾고(탐지), 찾아낸 항목의 위험도를 따져 등급을 매기고(분류), 등급에 맞춰 가립니다(마스킹·비식별).
탐지가 첫 단추인 이유는 단순합니다. 못 찾은 것은 가릴 수 없습니다. 분류 알고리즘이 아무리 정교하고 마스킹 규칙이 아무리 촘촘해도, 애초에 탐지 단계에서 놓친 항목은 그 뒤 공정을 통째로 지나쳐 그대로 살아남습니다. 주민등록번호 한 줄을 못 찾으면, 그 한 줄만 노출되는 것이 아니라 "우리는 민감정보를 다 가렸다"는 전제 자체가 무너집니다. 탐지 누락 한 건이 보호 체계 전체의 신뢰를 갉아먹습니다.
탐지는 보호 공정의 병목이자 품질의 출발점입니다. 여기서 얼마나 빠짐없이, 그리고 얼마나 정확하게 찾아내느냐가 이후 모든 단계의 상한선을 정합니다. 이 첫 공정을 어떻게 설계하느냐가 이 글의 핵심입니다.
탐지를 AI에게 맡기는 순간, 논리가 무너집니다
그렇다면 가장 손쉬운 방법은 무엇일까요? AI에게 데이터를 건네며 "민감정보를 찾아 줘"라고 시키는 것입니다. 언어 이해력이 뛰어난 모델이니 형식이 제각각인 개인정보도 알아서 골라낼 것 같습니다. 그런데 과연 잘 될까요? 그렇지 않습니다.
탐지의 대상은 아직 가려지지 않은 원본 데이터입니다. 주민등록번호도, 계좌번호도, 진료 기록도 날것 그대로 담겨 있습니다. 이걸 찾아 달라며 AI에, 특히 우리의 경계선 바깥에 있는 외부 대형언어모델(LLM)에 입력한다는 것은, 노출을 막으려는 행위로 노출을 실행하는 것입니다. 앞뒤가 맞지 않습니다. 도둑을 막으려고 금고 비밀번호를 먼저 알려 주는 것과 다르지 않습니다.
엑스레이 스캐너로 돌아가 볼까요. 스캐너의 미덕은 가방을 열지 않는다는 데 있습니다. 내용물을 꺼내 늘어놓지 않고도 정해진 위험물 목록으로 내부를 훑어냅니다. 비노출 스캐닝입니다. 반면 AI에게 탐지를 맡기는 방식은 짐을 죄다 풀어 검색대 위에 펼쳐 놓는 것입니다. 위험물을 찾겠다는 목적은 같지만 그 과정에서 이미 모든 것이 드러나 버립니다.
외부 모델에 데이터를 넘겼을 때 그 데이터가 어디로 흐르는지는 알 수 없습니다. 프롬프트가 로그로 남을 수도 있고 경우에 따라 학습 데이터로 잔류할 수도 있으며, 처리 경로 전체를 이용자가 감사하기도 어렵습니다. 무엇을 찾아냈는지 이전에, 원본 데이터가 우리의 경계를 넘어갔다는 사실 자체가 이미 사고입니다. 탐지만큼은 AI에게 맡길 수 없는 일이라고 보는 이유가 여기에 있습니다.
로컬 모델이라는 한 발 물러선 답
물론 방법이 아주 없는 것은 아닙니다. 데이터를 외부로 내보내지 않고 신뢰 경계 안에서 돌아가는 로컬 개체명 인식(NER, Named Entity Recognition) 모델을 쓰면 어떨까요. 원본이 조직 바깥으로 나가지 않으니 앞서 말한 노출 문제는 상당 부분 해소됩니다. 실제로 형식이 일정하지 않은 이름이나 주소 같은 항목을 찾는 데는 이런 모델이 규칙 기반보다 유연하게 작동하기도 합니다.
하지만 여기에는 두 가지 걸림돌이 남습니다. 첫 번째는 신뢰성입니다. 로컬 모델이라는 조건이 지켜질 때만 성립하는 이야기이고, 그 모델이 연결된 시스템에서 편의를 이유로 외부 API를 한 번이라도 끌어 쓰는 순간 앞 절의 자기모순으로 되돌아갑니다.
두 번째는 산출물의 성격입니다. 모델의 탐지 결과는 100%가 아닙니다. 같은 입력에도 버전이나 파라미터에 따라 결과가 흔들릴 수 있고 "왜 이 값을 민감정보로 판정했는가"를 규칙처럼 정확하게 설명하기 어렵습니다. 재현성과 감사 추적이 약하다는 뜻입니다. 규제 대응 국면에서 "우리는 이런 기준으로 빠짐없이 탐지했음을 증빙할 수 있습니다"라고 말해야 할 때, 확률적 판정만으로는 근거가 부족합니다.
그래서 도달하는 결론은 이렇습니다. 결정론적 규칙을 기준선(baseline)으로 두고 AI는 어디까지나 그 위를 보조하는 역할에 머물러야 합니다. 이 글에서 말하는 '정석'이란 바로 이 결정론적 기준선을 가리킵니다. 같은 입력이면 언제나 같은 결과를 내고 판정 근거를 그대로 되짚어 볼 수 있는 방법이 탐지의 바닥을 받쳐야 합니다. 로컬 모델은 이 바닥 위에서 놓치기 쉬운 부분을 메우는 보조 장치로 쓸 때 가치가 있습니다.
다시 탐지의 정석으로
기준선이 되는 결정론적 탐지 기법은 오래전부터 다듬어져 왔습니다. 화려하지는 않지만 규제 증빙 앞에서 가장 든든한 방법들입니다.
- 패턴 매칭(정규식): 주민등록번호, 카드번호, 계좌번호, 이메일, 전화번호처럼 형식이 고정된 식별자를 잡아냅니다. 형식이 정해져 있다는 것은 곧 규칙으로 표현할 수 있다는 뜻입니다.
- 체크섬 검증: 형식만 맞으면 다 잡는 정규식은 엉뚱한 숫자열까지 걸러 냅니다. 여기서 카드번호의 룬(Luhn) 검증식이나 주민등록번호 검증 규칙을 한 번 더 통과시키면 오탐(false positive)을 크게 줄일 수 있습니다.
- 사전(딕셔너리) 대조: 성씨, 지명처럼 형식이 없어 규칙으로 표현하기 어려운 항목은 미리 준비한 목록과 대조해 찾습니다.
- 문맥·컬럼명 힌트:
RRN,CUST_TEL같은 컬럼 이름이나 주석은 그 안에 무엇이 들었는지 알려 주는 강력한 단서입니다. 데이터에 대한 정보, 즉 메타데이터를 탐지에 끌어들이는 대목입니다.
예를 들어 카드번호 탐지는 형식 확인과 체크섬을 다음과 같이 겹쳐 씁니다.
import re def looks_like_card(value: str) -> bool: # 1단계: 형식 확인 — 13~16자리 숫자 digits = re.sub(r"[ -]", "", value) if not re.fullmatch(r"\d{13,16}", digits): return False # 2단계: Luhn 체크섬으로 오탐 제거 total, parity = 0, len(digits) % 2 for i, d in enumerate(map(int, digits)): if i % 2 == parity: d *= 2 if d > 9: d -= 9 total += d return total % 10 == 0
이 방법들의 공통점은 결정론적이고 재현 가능하며 감사 추적이 가능하다는 것입니다. 어떤 규칙으로 무엇을 찾았는지 코드와 로그에 그대로 남습니다. "왜 이 값을 잡았는가"에 대해 근거를 가지고 답할 수 있습니다. 결정론적 방식이 탐지의 정석이라는 입지를 굳건히 지킬 수 있는 이유입니다.
정형과 비정형, 탐지 난이도가 다릅니다
같은 탐지라도 데이터의 생김새에 따라 난이도가 크게 갈립니다. 여기서 개념을 둘로 나눠 보겠습니다.
정형 데이터는 컬럼 단위로 정리돼 있고 스키마가 있습니다. 고객전화 컬럼에는 전화번호가, 주민번호 컬럼에는 주민등록번호가 들어 있으리라 기대할 수 있습니다. 탐지 대상이 어디쯤 있는지 위치를 좁힐 수 있으니 상대적으로 다루기 쉽습니다. 컬럼 이름과 형식만으로도 상당수를 걸러 냅니다.
비정형 데이터는 사정이 다릅니다. 문서, 로그, 상담 메모 같은 자유 텍스트에는 어디에 무엇이 섞여 있는지 미리 알 수 없습니다. 한 문장 안에 이름과 연락처와 계좌번호가 뒤엉켜 있기도 합니다. 정규식과 사전만으로는 문맥을 읽지 못해 놓치는 부분이 생깁니다. 앞서 이야기한 로컬 모델의 보조가 가장 크게 필요한 곳이 바로 여기입니다. 형식이 없는 자유 텍스트일수록 규칙의 한계가 드러나고 문맥을 읽는 모델의 유연함이 규칙을 보완합니다.
현장에서 겪어 보면, 스키마상으로는 단순 메모 컬럼인데 그 자유 서술 안에 전화번호 같은 민감정보가 통째로 적혀 있는 경우를 자주 봅니다. 정형 데이터의 껍질을 쓰고 있어도 내용은 비정형인 셈입니다. 컬럼 유형만 믿지 말고 자유 텍스트가 담긴 컬럼은 비정형에 준해 다시 훑어야 합니다.

오탐과 미탐 사이
탐지에는 피할 수 없는 긴장이 하나 있습니다. 두 가지 실수가 서로 반대 방향으로 잡아당깁니다. 과탐(false positive)은 멀쩡한 값까지 민감정보로 잘못 잡는 것입니다. 그러면 가리지 않아도 될 데이터까지 마스킹되어 데이터의 활용성이 떨어집니다. 미탐(false negative)은 실제 민감정보를 놓치는 것입니다. 이건 곧 유출로 이어집니다.
규칙을 느슨하게 풀면 미탐이 줄지만 과탐이 늘고, 빡빡하게 조이면 과탐이 줄지만 미탐이 늘어납니다. 한쪽을 누르면 다른 쪽이 부풀어 오릅니다. 그렇다면 어느 쪽으로 기울여야 할까요? 정답은 하나로 고정돼 있지 않습니다. 앞서 말한 분류, 즉 민감도 등급에 따라 임계값을 달리하는 것이 현실적입니다. 유출 시 피해가 큰 고위험 항목은 미탐을 최소화하는 쪽으로, 다소 과탐을 감수하더라도 놓치지 않게 조입니다. 반대로 활용도가 중요한 항목은 과탐을 억제해 데이터의 쓸모를 지킵니다.
이 트레이드오프를 완화하는 실무적 열쇠가 앞서 본 체크섬과 문맥 병용입니다. 형식만 맞으면 잡던 것을 체크섬으로 한 번 더 거르고 컬럼명 문맥으로 판정을 보정하면 미탐을 크게 늘리지 않고도 과탐이 줄어듭니다. 모든 상황을 한 방에 해결하는 단일 규칙은 없습니다. 여러 기법을 겹쳐 쌓아 서로의 빈틈을 메우는 설계가 정석에 가깝습니다.
탐지에서 마스킹으로
탐지가 끝나면 결과를 분류로 넘깁니다. 찾아낸 항목마다 민감도 등급을 매기는 단계입니다. 같은 개인정보라도 이름과 주민등록번호의 무게가 다릅니다. 등급이 정해져야 가리는 방식도 정해집니다.
마스킹 기법은 등급과 용도에 따라 갈립니다. 원본을 저장 단계에서 아예 바꿔 두는 정적 마스킹과 조회 시점에만 가리는 동적 마스킹, 나중에 원래 값으로 되돌릴 수 있는 가역 방식과 되돌릴 수 없는 비가역 방식이 있습니다. 분석용으로 배포하는 데이터라면 비가역 비식별이, 특정 권한자에게만 원본을 열어 줘야 한다면 동적·가역 방식이 어울립니다. 이 선택 하나하나가 별도의 주제여서 여기서는 자세히 설명하지 않겠습니다.
핵심 원칙은 변하지 않습니다. 이 세 공정, 곧 탐지와 분류와 마스킹은 AI에게 데이터를 열어 주기 전에 데이터 단계에서 끝나 있어야 합니다. AI가 받아 보는 것은 이미 위험물이 걸러진 짐이어야 합니다. 순서를 뒤집으면 앞에서 본 자기모순으로 되돌아갈 뿐입니다.
탐지는 '아는 만큼' 정확해집니다 — 메타데이터의 힘

지금까지의 이야기를 하나로 꿰는 마지막 고리가 있습니다. 탐지가 얼마나 정확한가는 결국 그 데이터를 우리가 얼마나 알고 있느냐에 달려 있습니다.
컬럼의 의미와 표준, 그리고 데이터가 어디서 흘러와 어디로 가는지의 계보(리니지)를 이미 파악하고 있다면, 탐지는 전체를 무작정 훑는 전수 스캔이 아니라 표적 스캔이 됩니다. CUST_RRN 컬럼에 주민등록번호가 들어 있다는 사실을 데이터 사전이 이미 알려 준다면, 그 컬럼은 열어 보기 전에 이미 고위험으로 지정할 수 있습니다. 어떤 표준 코드가 어떤 개인정보와 짝을 이루는지 알면, 규칙을 훨씬 좁고 정확하게 겨누게 됩니다. 정확도가 오르고 스캔 범위가 줄어 속도가 빨라지며, 엉뚱한 곳을 뒤지지 않으니 과탐도 함께 줄어듭니다. 앞서 도구상자에서 심어 둔 '문맥·컬럼명 힌트'가 여기서 본격적으로 힘을 발휘합니다.
이것이 데이터 거버넌스와 메타데이터 관리가 탐지의 전제 조건인 이유입니다. 데이터의 의미가 정돈돼 있을수록 탐지는 신뢰할 수 있는 공정이 되고 그렇게 걸러진 데이터라야 비로소 AI에게 안전하게 열어 줄 수 있습니다. 데이터를 아는 일이 데이터를 지키는 일의 바탕이 됩니다.
열지 않고 훑는다는 원칙
AI가 요약도, 분류도, 추출도 척척 대신하는 시대입니다. 그럼에도 민감정보 탐지만큼은 AI에게 맡길 수 없는 일로 남습니다. 찾아 달라며 원본을 넘기는 순간 아직 가리지 않은 정보가 그대로 새어 나가기 때문입니다.
그래서 탐지의 정석은 데이터를 노출하지 않는 결정론적 방법입니다. 정규식과 체크섬, 사전과 문맥 단서를 겹쳐 쌓아, 같은 입력이면 같은 결과를 내고 판정 근거를 그대로 되짚을 수 있는 기준선을 세우는 것입니다. 로컬 모델은 그 기준선 위에서 비정형 텍스트의 빈틈을 메우는 보조로 쓸 때 제값을 합니다. 엑스레이 스캐너가 가방을 열지 않고 훑어내듯, 데이터를 펼치지 않고 찾아내는 것이 원칙입니다.
이제 우리 조직의 탐지 공정을 되짚어 볼 차례입니다. 무엇으로 민감정보를 찾고 있는지, 그 판정이 재현 가능하고 감사 추적이 되는지, 컬럼의 의미를 알고 표적 스캔을 하고 있는지 점검해 보시길 권합니다. 사전과 규칙을 꾸준히 갱신하고 문맥 보강을 게을리하지 않는 일, 그것이 탐지를 정석대로 세운 뒤에도 이어지는 숙제입니다.
| 다음글 | AI Ready Data를 위한 7가지 체크리스트 | 2026-07-31 |
|---|---|---|
| 이전글 | AI 시대에 왜 데이터 거버넌스인가 | 2026-07-31 |