데이터 신탁
개인 데이터를 제3자가 대신 관리해주는 서비스
개인 데이터를 제3자가 대신 관리해주는 서비스
데이터 신탁(Data Trust)은 개인이 자신의 데이터 관리 권한을 신뢰할 수 있는 제3의 기관에 위임하여, 해당 기관이 개인을 대신해 데이터 활용 결정을 내리는 제도입니다. EU Data Governance Act(DGA)에서 '데이터 중개 서비스'의 한 형태로 규정되어 2023년 9월부터 시행되고 있습니다.
데이터 신탁의 핵심 가치는 정보 비대칭 해소입니다. 개인은 복잡한 개인정보 동의 요청을 매번 판단하기 어렵고, 기업은 개별 동의 수집의 비용이 높습니다. 신탁 기관이 중간에서 개인의 이익을 대변하며 데이터 활용 조건을 협상하고 관리합니다.
한국에서는 '본인신용정보관리업'(마이데이터)이 유사한 개념이며, 금융 분야에서 2022년부터 본격 시행되었습니다. 다만 마이데이터는 데이터 이동권 중심이고, 데이터 신탁은 보다 적극적인 수탁자의 의사결정 권한을 포함한다는 차이가 있습니다.
AI 맥락에서 데이터 신탁은 윤리적 AI 학습 데이터 확보의 새로운 경로가 될 수 있습니다. 신탁 기관이 개인들의 데이터를 집합적으로 관리하면서 AI 학습 목적 제공 여부, 보상 분배, 편향 방지 조건 등을 협상할 수 있습니다.
# 데이터 신탁 서비스 개념 구현 예제
from dataclasses import dataclass, field
from datetime import datetime
from typing import List, Dict, Optional
from enum import Enum
import uuid
class DataUsePurpose(Enum):
RESEARCH = "research" # 학술 연구
AI_TRAINING = "ai_training" # AI 모델 학습
MARKETING = "marketing" # 마케팅
PERSONALIZATION = "personalization" # 개인화 서비스
PUBLIC_INTEREST = "public_interest" # 공익 목적
class ConsentDecision(Enum):
ALLOW = "allow"
DENY = "deny"
CONDITIONAL = "conditional" # 조건부 허용
@dataclass
class DataSubject:
"""데이터 주체 (개인)"""
subject_id: str
name: str
trust_preferences: Dict[DataUsePurpose, ConsentDecision]
data_assets: List[str] # 신탁에 맡긴 데이터 유형
@dataclass
class DataUseRequest:
"""데이터 활용 요청"""
request_id: str
requester: str # 요청 기업/기관
purpose: DataUsePurpose
data_types: List[str] # 요청 데이터 유형
duration_days: int # 활용 기간
compensation: float # 제안 보상금 (원)
ethical_review: bool # 윤리 심사 통과 여부
created_at: datetime = field(default_factory=datetime.now)
class DataTrust:
"""데이터 신탁 기관"""
def __init__(self, trust_name: str):
self.trust_name = trust_name
self.subjects: Dict[str, DataSubject] = {}
self.requests: List[DataUseRequest] = []
self.decisions: Dict[str, Dict] = {} # request_id -> 결정 내역
def register_subject(self, name: str,
preferences: Dict[DataUsePurpose, ConsentDecision],
data_assets: List[str]) -> str:
"""개인 등록 및 신탁 위임"""
subject_id = str(uuid.uuid4())[:8]
self.subjects[subject_id] = DataSubject(
subject_id=subject_id,
name=name,
trust_preferences=preferences,
data_assets=data_assets
)
print(f"[신탁 등록] {name}님의 데이터가 신탁되었습니다.")
return subject_id
def submit_data_use_request(self, request: DataUseRequest) -> str:
"""데이터 활용 요청 접수"""
self.requests.append(request)
print(f"[요청 접수] {request.requester}의 {request.purpose.value} 목적 요청")
return request.request_id
def evaluate_request(self, request_id: str) -> Dict:
"""신탁 기관이 개인들을 대신해 요청 평가"""
request = next((r for r in self.requests if r.request_id == request_id), None)
if not request:
return {"error": "요청을 찾을 수 없습니다"}
# 각 개인의 선호도에 따라 집합적 결정
allow_count = 0
deny_count = 0
affected_subjects = []
for subject_id, subject in self.subjects.items():
# 요청 데이터 유형이 신탁된 데이터와 겹치는지 확인
if any(asset in request.data_types for asset in subject.data_assets):
affected_subjects.append(subject_id)
pref = subject.trust_preferences.get(request.purpose, ConsentDecision.DENY)
if pref == ConsentDecision.ALLOW:
allow_count += 1
elif pref == ConsentDecision.DENY:
deny_count += 1
else: # CONDITIONAL
# 조건 검증 (예: AI 학습은 윤리 심사 통과 필수)
if request.purpose == DataUsePurpose.AI_TRAINING:
if request.ethical_review:
allow_count += 1
else:
deny_count += 1
# 집합적 결정 (과반수 기준)
total = allow_count + deny_count
decision = "approved" if allow_count > deny_count else "denied"
# 보상 분배 계산
compensation_per_person = request.compensation / len(affected_subjects) if affected_subjects else 0
result = {
"request_id": request_id,
"decision": decision,
"affected_subjects": len(affected_subjects),
"allow_votes": allow_count,
"deny_votes": deny_count,
"compensation_per_person": compensation_per_person,
"conditions": self._generate_conditions(request) if decision == "approved" else []
}
self.decisions[request_id] = result
return result
def _generate_conditions(self, request: DataUseRequest) -> List[str]:
"""승인 시 부가 조건 생성"""
conditions = []
if request.purpose == DataUsePurpose.AI_TRAINING:
conditions.append("학습된 모델에 대한 편향 감사 보고서 제출 의무")
conditions.append("모델 카드에 데이터 출처로 신탁 기관 명시")
conditions.append("상업적 이용 시 추가 로열티 협의")
return conditions
# 사용 예시
trust = DataTrust("한국AI데이터신탁")
# 개인들이 신탁에 데이터 위임
trust.register_subject(
name="홍길동",
preferences={
DataUsePurpose.RESEARCH: ConsentDecision.ALLOW,
DataUsePurpose.AI_TRAINING: ConsentDecision.CONDITIONAL,
DataUsePurpose.MARKETING: ConsentDecision.DENY
},
data_assets=["건강데이터", "금융데이터"]
)
# AI 기업이 학습 데이터 요청
request = DataUseRequest(
request_id="REQ-2024-001",
requester="AI헬스케어(주)",
purpose=DataUsePurpose.AI_TRAINING,
data_types=["건강데이터"],
duration_days=365,
compensation=1000000,
ethical_review=True
)
trust.submit_data_use_request(request)
# 신탁 기관이 집합적 결정
result = trust.evaluate_request("REQ-2024-001")
print(f"결정: {result['decision']}, 부가조건: {result['conditions']}")
사업개발: 헬스케어 AI 학습에 필요한 건강 데이터를 어떻게 확보할 수 있을까요? 개별 동의는 비용이 너무 높아요.
법무팀: 데이터 신탁 기관 활용을 검토해보세요. EU DGA에서도 인정하는 방식이고, 신탁 기관이 윤리적 활용 조건을 협상해줍니다.
ML엔지니어: 신탁을 통하면 법적 리스크도 줄어드나요?
법무팀: 네, 개별 동의보다 집합적 관리가 컴플라이언스 증빙에 유리합니다. 다만 신탁 기관이 부과하는 조건(편향 감사 등)을 이행해야 해요.
면접관: 데이터 신탁과 마이데이터의 차이점을 설명해주세요.
지원자: 마이데이터는 주로 데이터 이동권에 초점을 맞춰 개인이 자신의 데이터를 직접 관리하고 이동시킵니다. 반면 데이터 신탁은 관리 권한 자체를 신탁 기관에 위임해서, 기관이 개인을 대신해 데이터 활용 결정을 내립니다. EU DGA에서는 이를 'data intermediary'로 규정하고, 중립성과 수탁자 의무를 부과하고 있습니다.
시니어: 데이터 소스가 신탁 기관인데, 메타데이터에 그 정보가 없네요.
주니어: 신탁 계약 정보도 기록해야 하나요?
시니어: 네, 신탁 기관명, 계약 ID, 허용된 용도, 부가 조건(편향 감사 의무 등)을 메타데이터로 관리해야 합니다. 나중에 조건 이행 여부 감사할 때 필요해요.