FastAPI 개인정보 마스킹: AI API 전송 전에 처리하는 실무 방법
FastAPI 개인정보 마스킹은 생성형 AI API와 백엔드 서비스를 연결할 때 적용하기 좋은 개인정보 보호 방법입니다.
외부 AI 서비스에 데이터를 보내기 전에 이름, 전화번호, 이메일 등 AI 처리에 필요하지 않은 정보를 제거하면 개인정보가 불필요하게 외부로 전달되는 것을 줄일 수 있습니다.
예를 들어 다음 요청을 생각해보겠습니다.
{
"name": "홍길동",
"email": "hong@example.com",
"phone": "010-1234-5678",
"message": "배송이 아직 도착하지 않았습니다."
}
AI의 목적이 고객 문의를 배송, 교환, 환불로 분류하는 것이라면 실제 필요한 데이터는 message 하나일 수 있습니다.
Pydantic 모델을 분리한다
사용자가 보내는 요청 모델과 AI API에 전달하는 모델을 따로 정의할 수 있습니다.
from pydantic import BaseModel
class CustomerRequest(BaseModel):
name: str
email: str
phone: str
message: str
class AIRequest(BaseModel):
message: str
AI 호출 직전에는 다음처럼 필요한 필드만 선택합니다.
def build_ai_request(data: CustomerRequest) -> AIRequest:
return AIRequest(message=data.message)
이 방법은 단순하지만 장점이 큽니다.
코드를 보는 개발자가 AI API에 어떤 데이터가 전달되는지 바로 확인할 수 있기 때문입니다.
이메일 마스킹 함수
업무상 이메일 일부가 필요하다면 전체 주소를 제거하지 않고 일부만 가릴 수 있습니다.
def mask_email(email: str) -> str:
local, domain = email.split(“@”, 1)
if len(local) <= 2:
return f"**@{domain}"
return f"{local[:2]}***@{domain}"
예를 들어:
hong@example.com
은:
ho***@example.com
으로 변경됩니다.
전화번호 마스킹
def mask_phone(phone: str) -> str:
parts = phone.split("-")
if len(parts) != 3:
return "****"
return f"{parts[0]}-****-{parts[2]}"
010-1234-5678
은:
010-****-5678
형태가 됩니다.
개인정보 처리 로직을 서비스 계층으로 분리한다
라우터마다 마스킹 코드를 작성하는 것보다 개인정보 전처리를 별도 계층으로 구성하는 것이 좋습니다.
Router
↓
Privacy Filter
↓
AI Service
↓
External AI API
예를 들어:
class PrivacyService:
def build_safe_payload(self, data: CustomerRequest) -> dict:
return {
"message": data.message
}
AI 기능이 늘어나더라도 동일한 개인정보 처리 규칙을 재사용할 수 있습니다.
로그에도 동일한 기준을 적용한다
외부 AI 요청에서 개인정보를 제거하고 로그에는 그대로 남긴다면 개인정보 보호 효과가 줄어듭니다.
예를 들어:
logger.info(
"customer email=%s phone=%s",
mask_email(data.email),
mask_phone(data.phone),
)
처럼 동일한 마스킹 함수를 재사용할 수 있습니다.
하지만 가장 좋은 방식은 애초에 개인정보를 로그에 기록하지 않는 것입니다.
logger.info(
"request_id=%s category=%s",
request_id,
category,
)
처럼 문제 해결에 필요한 기술 정보 중심으로 기록하는 것이 좋습니다.
자유 텍스트도 주의해야 한다
구조화된 필드만 제거한다고 모든 개인정보가 사라지는 것은 아닙니다.
사용자가 문의 내용에 직접 전화번호를 적을 수도 있습니다.
제 전화번호는 010-1234-5678인데 배송 확인 부탁드립니다.
따라서 자유 텍스트를 외부 AI에 전달하는 서비스라면 전화번호, 이메일 등 주요 개인정보 패턴을 검사하는 별도 과정도 고려할 수 있습니다.
FastAPI 개인정보 마스킹 체크리스트
- AI용 요청 객체가 따로 있는가?
- 전체 데이터베이스 객체를 그대로 AI에 보내고 있지 않은가?
- 이름이 실제 AI 업무에 필요한가?
- 이메일을 제거하거나 마스킹할 수 있는가?
- 전화번호를 제거할 수 있는가?
- 로그에도 개인정보가 남지 않는가?
- 자유 입력 텍스트에 개인정보가 포함될 수 있는가?
마무리
FastAPI 개인정보 마스킹의 핵심은 복잡한 보안 라이브러리를 사용하는 것이 아닙니다.
외부 AI로 데이터를 보내기 전에 AI가 실제로 필요한 정보만 별도로 구성하는 것이 가장 중요한 첫 단계입니다.
사용자 요청 모델과 AI 요청 모델을 분리하는 것만으로도 데이터 흐름이 명확해지고 향후 개인정보 정책을 변경하기도 쉬워집니다.
댓글 0
첫 댓글을 남겨보세요.