Appearance
마이데이터 개인정보 처리 시나리오
기준: 2026-09-12 PR3 구현, 2026-09-13 코드 대조, 2026-10-14 정규식 익명화 개정. 루트 SPEC.md §4-3(2026-10-14 개정 포함)·§11-1을 따른다. 구현·테스트와 실제 사설 경로 배포·모델 정확도 검증은 구분한다.
마이데이터 상담에 사용하는 질문과 설명 자료에서 개인정보 식별자를 제거한 뒤 상담 모델에 전달한다. 마이데이터 값의 대부분(연봉 8천만원, 금리, 기간, 금액 등)은 개인을 식별하지 못하므로 그대로 사용한다. 자유 문장에서는 직접 식별자만 정규식 익명화로 토큰화하며(기본, 모델 호출 없음), 사설 EKS 소형 모델이 구성된 경우 대신 선택할 수 있다. 처리기는 상담 설명을 만드는 Bedrock 모델과 별도로 선택하며, 설명 모델은 플랫폼 모델 목록에서 고른다. 정형 고객정보는 내부 코드가 정해진 필드를 토큰화한다. 모델이 이미 계산된 금액이나 상품 조건을 개인정보로 다시 분류하지 않도록 역할을 분리한다.
이름·연락처 등을 가린 것만으로 완전한 익명성을 확보했다고 판단하지 않는다. 처리 결과에는 실제 모델, 탐지 유형·건수, 규칙 검사, 독립 개체명 인식(NER, Named Entity Recognition) 검사의 구성 여부와 실패 이유를 구분해 표시한다. NER는 문장에서 이름·주소 같은 개체를 찾는 추가 검사이며, 미구성이면 이 검사를 수행하지 않았다는 뜻이다.
화면에서 실행하기
- 마이데이터 상담에서 프라이버시 처리기 목록을 조회한다. 정규식 익명화는 항상 표시되고 기본으로 선택된다.
- 필요하면 사설 EKS 모델을 선택한다. 미등록 모델이나 응답하지 않는 모델은 선택할 수 없다. Bedrock 경로에서는 설명 모델도 고른다.
- 합성 입력 예시의 이름·주소, 전화·이메일, 계좌·금액 보존 중 하나를 질문에 채운다.
- 상담을 실행하고 질문 프라이버시 처리 → 설명 자료 최종 개인정보 검사 근거를 확인한다.
- 개인정보 처리에 실패하면 상담을 중단한다. 이전 고객 응답이나 다른 처리기 결과로 자동 대체하지 않는다.
예시의 인물·주소·연락처·계좌와 금융 수치는 가상 데이터다. 먼저 이 합성 시나리오로 연결과 차단 동작을 확인한다. 상담 질문은 최대 500자이며, 서버가 긴 질문을 잘라서 일부만 검사하지 않는다.
실제 처리 순서
정규식 익명화
기본 처리기 regex-anonymizer는 API 안에서 버전이 고정된 규칙으로 아래 직접 식별자만 요청별 임의 토큰으로 바꾼다. 같은 요청 안의 같은 값은 같은 토큰을 받고, 원문과 토큰의 매핑은 저장하거나 반환하지 않는다.
| 바꾸는 값 | 그대로 두는 값 |
|---|---|
| 이름(“제 이름은”, “성함은”, “저는 ○○입니다”, “○○님·씨”, “○○ 고객님” 같은 문맥. 문맥이 약한 뒤의 세 가지는 흔한 성씨(복성 포함)로 시작하는 짧은 한글 이름만 보고, 전세·금리·정규직 같은 상태어는 이름으로 보지 않음), 휴대전화·유선전화, 이메일 | 연봉·월급·대출 금액(8천만원, 6,500,000원, 25000000원) |
| 주민·외국인등록번호, 여권번호, 카드번호, 계좌번호 | 금리·기간(3.5%, 12개월)과 기준일(2026-10-14) |
생년월일(문맥이 있는 경우), 도로명·번지까지 있는 주소, CUST-·ACCT- 식별자 | 시·구 수준 지역(서울 강남구), 직업·호칭(회사원, 고객님) |
처리 후 독립 규칙 검사에서 식별자가 남아 있으면 상담을 중단한다. 정규식은 문맥 없는 이름이나 형식이 다른 주소를 놓칠 수 있으므로, 처리된 질문은 다시 입력 Guardrails 검사를 거친다. 영수증에는 처리기·규칙 버전·유형별 건수·문자 수·처리된 질문 미리보기·지연 시간·modelInvoked: false가 표시되며, 원본 값은 들어가지 않는다.
사설 EKS 모델을 선택한 경우
모델은 식별자의 종류와 입력 안의 정확한 문자열만 제안한다. 코드는 제안의 형식·범위·겹침을 검사한 뒤 실제 치환을 수행한다. 모델 응답이 잘렸거나 형식이 잘못된 경우, 존재하지 않는 문자열을 제시한 경우, 금액·금리·기간이 달라진 경우에는 통과시키지 않는다. 검증된 처리 토큰은 다시 개인정보로 분류하지 않는다. 탐지·검사용 보기에서는 해당 토큰만 같은 길이의 빈 값으로 바꾸고, 설명 모델에 전달할 자료에는 토큰을 유지한다. 사용자가 처리 토큰 형식을 새 질문에 직접 넣는 것은 거부하므로, 임의의 원문을 검사에서 제외할 수 없다. 처리 후 토큰 때문에 문장이 길어져 검사 한도를 넘으면 일부를 잘라 통과시키지 않고 상담을 중단한다.
질문은 입력 Guardrails보다 먼저 처리하며, 조회·계산으로 만든 설명 자료도 설명 모델에 전달하기 전에 다시 검사한다. 정형 설명 자료는 신뢰된 내부 생산자가 토큰화하고 독립 규칙·Bedrock Guardrails가 검사한다. 두 번째 sLLM 재작성은 하지 않으며 privacy_payload는 modelInvoked: false로 표시한다.
코드는 설명을 버퍼링하고 출력 Guardrails 처리 후 텍스트를 전달한다. /s2/finalize의 수치 검증·재식별과 Semantic 비교는 그 뒤에 수행한다. 따라서 위 흐름도를 모든 수치 오류가 화면 표시 전에 차단된다는 보장으로 해석하지 않는다. 마이데이터 실행은 개인별 조회값과 회신이 포함되는 공용 이벤트 캐시를 읽거나 쓰지 않는다.
제거와 복원의 구분
| 대상 | 처리 |
|---|---|
| 새 질문에서 탐지한 자유 텍스트 식별자 | 요청별 임의 토큰으로 제거. 복원 매핑을 반환하거나 저장하지 않음 |
| 기존 내부 플레인의 고객 식별 토큰 | 기존 내부 매핑으로 고객 회신에서 복원할 수 있음. 원본을 설명 모델에 전달하지 않음 |
| 원금·금리·납입기간 | 치환 전후 보존 여부를 검사. 상담 계산의 기준은 기존 결정론적 계산엔진 |
| 프라이버시 검사 영수증 | 모델·버전·유형·건수·지연·상태를 기록. 모델 원문 응답과 탐지한 원본 문자열은 포함하지 않음 |
클라우드 계측에는 처리된 질문의 해시·길이와 사용자 식별 해시도 남는다. 기존 내부 플레인의 감사 저장소는 처리된 질문이 포함된 프롬프트와 고객 정보 복원 매핑을 보관한다. 이 내부 감사 자료는 검사 영수증과 별개이며, 접근 권한·암호화·보존 기간을 별도로 관리해야 한다.
따라서 전체 시스템을 ‘복원이 불가능한 완전 익명화 시스템’으로 표시하지 않는다. 실제 데이터의 간접 식별 가능성과 탐지 누락은 별도로 평가해야 한다.
모델 선택과 버전
기본 처리기는 정규식 익명화이며, EKS가 구성되지 않아도 상담을 실행할 수 있다. 설명 모델은 플랫폼 모델 목록(예: Claude Sonnet 5.5, GPT-6.1 Sol)에서 선택하며 개인정보 처리기와 별개다. 사설 EKS의 초기 연결 대상은 기존 EKS의 Qwen3-8B다. Gemma 4·DeepSeek는 교체 후보이며, 엔드포인트·모델 ID·리비전과 사설 통신 정책이 등록되고 실제 모델 조회가 성공해야 사용할 수 있다. 다른 모델의 탐지 정확도나 호환성을 Qwen 결과로 대신하지 않는다.
모델 리비전이 unverified이면 실제 가중치 버전을 확인하지 못했다는 뜻이다. 이를 승인된 튜닝 모델로 해석하지 않는다. 현행 사설 게이트웨이는 독립 NER를 미구성(not-configured)으로 반환한다. 이 영수증을 별도 NER 모델 실행으로 해석하지 않으며, 이후 Bedrock Guardrails의 독립 검사와도 구분한다.
Bedrock Gemma를 설명용 모델로 선택하는 것은 EKS의 Gemma 개인정보 처리 모델을 배포했다는 뜻이 아니다. 실행 화면에서 두 모델의 역할과 호출 경로를 각각 확인한다.
선택 사항: SageMaker 튜닝
기본 모델의 평가에서 부족한 사례를 찾았을 때 튜닝을 준비한다. 저장소의 platform/privacy/training 도구는 승인된 학습·평가 JSONL을 검증하고 SageMaker CreateTrainingJob 요청을 준비한다.
- 학습·평가 예제의 중복과 잘못된 라벨을 검사한다.
- 승인된 학습 이미지와 모델 아티팩트, 암호화된 S3 위치, 역할·사설 네트워크를 지정한다.
- 준비한 요청을 승인된 환경에서 실행한다. 준비 도구 자체는 AWS 호출·업로드·학습을 수행하지 않는다.
- 별도 평가 데이터로 유형별 탐지 재현율, 과잉 제거, 금융 수치 보존과 지연을 비교한다.
- 통과한 모델 아티팩트와 버전을 고정하고 EKS에 배포한 뒤 모델 목록에 등록한다.
제공된 소량의 합성 예제는 형식과 처리 흐름을 확인하는 용도다. 통계적으로 충분한 튜닝 데이터나 정확도 보증 자료가 아니다. 학습 요청 준비, 학습 완료, 평가 통과, 운영 배포 승인은 서로 다른 상태로 관리한다.
운영 연결 확인
이 절은 사설 EKS 처리기를 선택할 때만 적용한다. 정규식 익명화는 인증 API 안에서 실행되며 별도 네트워크 경로가 없다. EKS 개인정보 처리 경로는 인증 API → IAM 전용 Lambda 중계 → 내부 로드밸런서 → EKS CPU 처리기 → 사설 모델 서비스로 구현돼 있다. 질문 원문은 API와 중계를 지나므로 사설 모델 배치를 전체 사용자 데이터가 API 밖으로 나오지 않는다는 뜻으로 설명하지 않는다. platform/infra/lib/privacy-stack.ts는 기존 EKS VPC를 재사용하며 데이터 플레인 VPC와 별도다. GPU·VPC 피어링은 추가하지 않고, 배포된 중계 ARN·게이트웨이 이미지·대상 연결은 별도로 확인한다. 공용 모델 엔드포인트나 Lambda Function URL을 만들지 않는다. 로드밸런서 컨트롤러·NLB 대상과 주소·네트워크 정책의 실제 집행을 확인한 뒤 연결 완료로 판단한다. /health는 게이트웨이 상태이며 실제 모델 준비 상태는 모델 목록 조회와 별도 호출로 확인한다. HTTP는 기존 VPC 내부에서 사용하며, 이 구성만으로 애플리케이션 TLS나 전체 클러스터 격리를 달성했다고 표시하지 않는다.
실행 전 확인할 항목은 모델 응답, 차단 동작, 역할별 접근, 원문이 없는 로그, 캐시 비사용, 금융 수치 보존이다. 기존에 만들어진 마이데이터 이벤트 캐시는 새 경로에서 재생하지 않으며, 잔존 기록의 정리는 별도 운영 절차로 확인한다.
구현 근거: platform/api/handlers/s2.py, platform/api/common/anonymize.py, platform/api/common/privacy.py, platform/api/common/pii.py, platform/privacy/gateway/, platform/privacy/relay/handler.py, platform/privacy/deploy/. 배포 전제와 운영 확인은 platform/infra/README-privacy.md를 따른다.