Skip to content

개인정보 탐지(PII Detection) - 마스킹 기능 추가 #65

@Whale0928

Description

@Whale0928

개인정보 탐지(PII Detection) 기능 추가

배경

텍스트 내 개인정보를 자동으로 탐지하고 마스킹하여 GDPR 및 개인정보보호법 준수를 지원하는 기능이 필요합니다.

목표

  • 텍스트에서 개인정보 자동 탐지
  • 탐지된 정보 자동 마스킹
  • 위험도 레벨 제공
  • 기존 비속어 필터링과 독립적으로 운영

탐지 대상 개인정보

우선순위 높음

  • 전화번호 (010-1234-5678, 01012345678, +82-10-xxxx-xxxx)
  • 이메일 주소 (user@example.com)
  • 주민등록번호 (123456-1234567)

우선순위 중간

  • 카드번호 (1234-5678-9012-3456, Luhn 알고리즘 검증 포함)
  • 계좌번호
  • 여권번호 (한국 여권)

우선순위 낮음

  • IP 주소
  • 주소 (도로명, 지번)

주요 기능

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일)

  • profanity-shared에 데이터 모델 추가
  • profanity-domain에 RegexPiiDetector 구현
  • 전화번호, 이메일, 주민번호 패턴 구현
  • 기본 마스킹 전략 구현
  • profanity-api에 컨트롤러 추가

Phase 2 (추가 기능, 1-2일)

  • Luhn 알고리즘 카드번호 검증
  • 주민번호 유효성 검증
  • 계좌번호, 여권, IP, 주소 패턴 추가
  • 테스트 코드 작성

참고사항

  • 기존 비속어 필터링 코드 수정 없음
  • 독립적인 기능으로 추가
  • 동일한 인증 체계(X-API-KEY) 재사용
  • 동일한 응답 구조 패턴 유지

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions