Overview
이메일 본문, 상담 로그, 게시글 같은 비정형 텍스트는 단순 치환만으로 테스트에 필요한 문맥을 유지하기 어렵습니다. Datatrans의 Python 규칙에 LLM을 연동해 개인정보를 가상 데이터로 대체하고 문장을 재작성하는 방식을 구성할 수 있습니다.
LLM 출력에는 개인정보가 남거나 의미가 달라질 수 있으므로 결과 검수와 별도 탐지 규칙이 필요합니다. 모델의 배포 위치, 데이터 전송 범위와 보안 정책을 확인한 뒤 적용합니다.
What You'll Accomplish
Instructions
LLM 스크램블링 함수 작성
Python 함수로 개인정보를 가상 데이터로 대체하고 전체 문장을 재작성하는 로직을 정의합니다. domain registry에 등록된 신뢰된 plugin만 사용합니다.
# /secure/rules/llm_rule.py
import json
from urllib.request import Request, urlopen
def scramble_with_llm(content):
prompt = (
"개인정보를 가상 데이터로 바꾸고 문장을 재작성하세요. "
"설명 없이 변환한 본문만 반환하세요.\n\n" + content
)
payload = json.dumps({
"model": "llama3", "prompt": prompt, "stream": False
}).encode("utf-8")
request = Request(
"http://127.0.0.1:11434/api/generate",
data=payload, headers={"Content-Type": "application/json"}
)
with urlopen(request, timeout=120) as response:
result = json.load(response)["response"].strip()
if not result or result == content:
raise ValueError("LLM output did not pass de-identification checks")
return result Assignment YAML 작성
비정형 텍스트 컬럼에 LLM rule을 매핑합니다. Multi-column rule은 columns 수와 같은 개수의 값을 반환해야 합니다.
# /secure/rules/llm.yaml
TGT_USER.CUST_CONSULT:
- columns: CONSULT_CONTENT
rules: SC_LLM_PARAPHRASE
args: CONSULT_CONTENT 스크램블링 이관 실행
Runtime 오류가 나면 해당 Target과 같은 Target을 쓰는 Mapping을 중단하고 실패 데이터를 원본값으로 적재하지 않습니다. 다른 테이블은 계속될 수 있고 이전 commit은 남을 수 있으며, 최종 상태는 COMPLETED_WITH_ERRORS·exit code 0입니다.
datatrans source=SRC_USER/password@host:1521/SRCDB \
target=TGT_USER/password@host:1521/TGTDB \
tables=SRC_USER.CUST_CONSULT \
remap_schema=SRC_USER:TGT_USER \
scrambles=/secure/rules/llm.yaml \
table_action=APPEND \
jobname=LLM_SCRAMBLE 결과 품질 확인
이관된 텍스트의 문맥 유지와 비식별 여부를 표본 검수합니다. 로그에는 row 값이 기록되지 않으므로 타겟 데이터에서 직접 확인합니다.
SELECT CONSULT_CONTENT FROM TGT_USER.CUST_CONSULT
WHERE ROWNUM <= 5; How It Works
대상 식별
비정형 텍스트 컬럼 선정
LLM 구성
재작성 프롬프트 및 모델 설정
문장 재작성
개인정보 대체 및 문장 재구성
품질 확인
문맥 유지 및 비식별 여부 검증