개인정보 마스킹 처리 - RAG 파이프라인에 적용

문정현·2024년 11월 19일
0

챗봇 개발기

목록 보기
8/8

RAG 파이프라인에 새롭게 추가된 개인정보 마스킹 처리에 대해 설명하려고 한다. Retrieve 된 데이터의 컨텍스트를 정규식을 사용해 마스킹 처리하는 로직을 구현함으로써, 개인정보 보호를 강화할 수 있었다.

RAG 파이프라인에서의 마스킹 처리

RAG(Retrieval-Augmented Generation) 파이프라인에서는 Retrieve 단계에서 외부 데이터베이스에서 가져온 정보를 LLM에 제공해 답변을 생성한다. 여기서 개인정보가 포함될 수 있는 컨텍스트를 정규식을 활용해 마스킹 처리하여, 민감한 정보를 안전하게 관리할 수 있도록 했다.

정규식을 활용한 마스킹 후처리 로직

Retrieve된 데이터의 컨텍스트를 정규식으로 처리해 개인정보를 마스킹하는 로직을 구현했다. 아래 코드는 전화번호, 이메일, IP 주소와 같은 정보를 마스킹하는 방법을 보여준다.

마스킹 코드

import re

# 정규식 패턴 리스트 정의
regex_patterns = {
    'phone': r'(\d{3})-(\d{4})-(\d{4})',
    'email': r'(\b\w{1})\w+(@\w+\.\w+\b)',
    'ip': r'(\d{1,3}\.){3}\d{1,3}'
}

def pii(content):
    # 전화번호는 가운데 4자리만 마스킹
    content = re.sub(regex_patterns['phone'], r'\1-****-\3', content)
    
    # 이메일은 사용자 이름의 일부만 마스킹
    content = re.sub(regex_patterns['email'], r'\1****\2', content)
    
    # IP 주소 일부만 마스킹
    content = re.sub(regex_patterns['ip'], r'***.***.***.\1', content)

    return content

def process_pii(data: list[dict]) -> list[dict]:
    # 각 객체의 'content' 필드를 마스킹하고 반환
    result = []
    for obj in data:
        if 'content' in obj:
            obj['content'] = pii(obj['content'])
        result.append(obj)
    return result

def main(data: list[dict]) -> dict:
    return {
        "result": process_pii(data)
    }

마스킹 처리 설명

  1. 전화번호 마스킹: 전화번호는 가운데 4자리만 ***로 마스킹한다. 예를 들어 010-1234-5678010-****-5678로 표시된다.
  2. 이메일 마스킹: 이메일 주소의 사용자 이름 부분은 일부만 마스킹 처리한다. 예를 들어 user@example.comu****@example.com으로 표시된다.
  3. IP 주소 마스킹: IP 주소의 일부를 **로 마스킹한다. 예를 들어 192.168.0.1**.***.***.1로 표시된다.

마무리

개인정보 보호는 모든 시스템에서 중요한 부분이다. 특히 RAG 파이프라인과 같이 데이터를 검색하고 활용하는 시스템에서는 이러한 마스킹 처리를 통해 민감한 정보를 보호할 필요가 있다. 이번 포스트에서는 정규식을 활용해 Retrieve된 데이터의 개인정보를 효과적으로 마스킹 처리하는 방법을 설명했다. 앞으로도 이러한 마스킹 로직을 강화하고, 커스터마이징된 다양한 시나리오에 적용해 개인정보 보호를 계속해서 개선할 계획이다.

profile
기록 == 성장

0개의 댓글