개인정보 탐지(PII Detection) 기능 추가
배경
텍스트 내 개인정보를 자동으로 탐지하고 마스킹하여 GDPR 및 개인정보보호법 준수를 지원하는 기능이 필요합니다.
목표
- 텍스트에서 개인정보 자동 탐지
- 탐지된 정보 자동 마스킹
- 위험도 레벨 제공
- 기존 비속어 필터링과 독립적으로 운영
탐지 대상 개인정보
우선순위 높음
- 전화번호 (010-1234-5678, 01012345678, +82-10-xxxx-xxxx)
- 이메일 주소 (user@example.com)
- 주민등록번호 (123456-1234567)
우선순위 중간
- 카드번호 (1234-5678-9012-3456, Luhn 알고리즘 검증 포함)
- 계좌번호
- 여권번호 (한국 여권)
우선순위 낮음
주요 기능
1. 탐지 기능
- 정규식 기반 패턴 매칭
- 유형별 신뢰도 점수 제공
- 위치 정보 제공 (시작/끝 인덱스)
2. 마스킹 기능
- 부분 마스킹 (기본):
010-****-5678
- 완전 마스킹:
***************
- 유형별 커스텀 마스킹 전략
3. 검증 기능
- 카드번호: Luhn 알고리즘 검증
- 주민번호: 유효성 검증 로직
- 검증 통과 여부를 응답에 포함
4. 위험도 평가
- CRITICAL: 고위험 정보 2개 이상 (주민번호, 카드번호)
- HIGH: 고위험 정보 1개
- MEDIUM: 일반 정보 3개 이상
- LOW: 그 외
응답 데이터 구조
{
"trackingId": "uuid",
"status": {...},
"detected": [
{
"type": "PHONE",
"value": "010-1234-5678",
"masked": "010-****-5678",
"startIndex": 6,
"endIndex": 19,
"confidence": 0.99,
"isValid": true
}
],
"maskedText": "연락처는 010-****-5678입니다",
"summary": {
"totalCount": 1,
"byType": {
"PHONE": 1
},
"riskLevel": "MEDIUM"
},
"elapsed": "3ms"
}
기술 구현
Architecture
기존 비속어 필터링과 동일한 멀티모듈 구조 사용:
profanity-shared (공통 모델)
PiiType enum
DetectedPii record
PiiDetectionResponse record
PiiSummary record
profanity-domain (비즈니스 로직)
PiiDetector interface
RegexPiiDetector 구현체
MaskingStrategy 인터페이스 및 구현체
LuhnValidator (카드번호 검증)
SsnValidator (주민번호 검증)
profanity-api (프레젠테이션)
PiiDetectionController
- 기존
@VerifiedClientOnly 인증 재사용
구현 방식
- 정규식 기반 패턴 매칭 (ML 모델 불필요)
- 각 PII 유형별 Pattern 정의
- 마스킹 전략 패턴 적용
성능 목표
- 처리 속도: 1KB 텍스트당 < 5ms
- 정확도: 95% 이상 (False Positive < 5%)
- 추가 메모리: < 10MB
구현 단계
Phase 1 (필수, 2-3일)
Phase 2 (추가 기능, 1-2일)
참고사항
- 기존 비속어 필터링 코드 수정 없음
- 독립적인 기능으로 추가
- 동일한 인증 체계(X-API-KEY) 재사용
- 동일한 응답 구조 패턴 유지
개인정보 탐지(PII Detection) 기능 추가
배경
텍스트 내 개인정보를 자동으로 탐지하고 마스킹하여 GDPR 및 개인정보보호법 준수를 지원하는 기능이 필요합니다.
목표
탐지 대상 개인정보
우선순위 높음
우선순위 중간
우선순위 낮음
주요 기능
1. 탐지 기능
2. 마스킹 기능
010-****-5678***************3. 검증 기능
4. 위험도 평가
응답 데이터 구조
{ "trackingId": "uuid", "status": {...}, "detected": [ { "type": "PHONE", "value": "010-1234-5678", "masked": "010-****-5678", "startIndex": 6, "endIndex": 19, "confidence": 0.99, "isValid": true } ], "maskedText": "연락처는 010-****-5678입니다", "summary": { "totalCount": 1, "byType": { "PHONE": 1 }, "riskLevel": "MEDIUM" }, "elapsed": "3ms" }기술 구현
Architecture
기존 비속어 필터링과 동일한 멀티모듈 구조 사용:
profanity-shared (공통 모델)
PiiTypeenumDetectedPiirecordPiiDetectionResponserecordPiiSummaryrecordprofanity-domain (비즈니스 로직)
PiiDetectorinterfaceRegexPiiDetector구현체MaskingStrategy인터페이스 및 구현체LuhnValidator(카드번호 검증)SsnValidator(주민번호 검증)profanity-api (프레젠테이션)
PiiDetectionController@VerifiedClientOnly인증 재사용구현 방식
성능 목표
구현 단계
Phase 1 (필수, 2-3일)
Phase 2 (추가 기능, 1-2일)
참고사항