⚖️ AI 규제/윤리

열람권

Right of Access

자신의 개인정보 처리 현황을 열람할 권리. GDPR 제15조, 개인정보보호법 제35조에서 보장.

📖 상세 설명

열람권(Right of Access)은 정보주체가 자신의 개인정보가 어떻게 처리되고 있는지 확인할 수 있는 기본적인 권리입니다. GDPR 제15조는 정보주체가 컨트롤러에게 자신의 개인정보 처리 여부와 처리 목적, 개인정보 유형, 수령인 정보, 보유 기간, 권리 행사 방법 등을 요청하고 무료로 사본을 받을 수 있다고 규정합니다. 한국 개인정보보호법 제35조 역시 동일한 권리를 보장합니다.

열람 요청 시 제공해야 하는 정보의 범위는 상당히 넓습니다. 처리 목적, 개인정보 범주, 제3자 제공 현황, 예정된 보유 기간, 정정/삭제/처리제한 요청권 안내, 감독기관 민원 제기 권리, 자동화된 의사결정 및 프로파일링 여부와 그 논리 등이 포함됩니다. 특히 AI 시스템이 자동화된 의사결정에 사용되는 경우, 그 논리와 정보주체에 대한 예상 결과를 "유의미한 정보"로 제공해야 합니다.

컨트롤러는 열람 요청을 받은 후 지체 없이, 늦어도 1개월 이내에 응답해야 합니다. 요청이 복잡하거나 건수가 많은 경우 2개월까지 연장 가능하나, 연장 사유를 1개월 내에 통지해야 합니다. 전자적 수단으로 요청받은 경우 일반적으로 사용되는 전자 형식(예: PDF, CSV)으로 제공해야 하며, 추가 사본 요청 시에는 합리적인 수수료를 부과할 수 있습니다.

열람권 행사 거부는 매우 제한적인 경우에만 가능합니다. 타인의 권리와 자유에 부정적 영향을 미치는 경우(예: 영업비밀, 제3자 개인정보 포함), 명백히 근거 없거나 과도한 요청의 경우에 한합니다. GDPR 위반 시 최대 2,000만 유로 또는 전 세계 매출의 4% 과징금이 부과될 수 있으며, 2024년 Meta는 열람권 요청 처리 지연으로 9,100만 유로 과징금을 부과받은 바 있습니다.

💻 코드 예제

# 열람권(Subject Access Request) 처리 시스템 구현 예제
# GDPR Article 15 및 개인정보보호법 제35조 준수

from datetime import datetime, timedelta
from dataclasses import dataclass
from typing import Optional, List, Dict
import json

@dataclass
class AccessRequest:
    """열람 요청 데이터 구조"""
    request_id: str
    data_subject_id: str
    request_date: datetime
    requested_info: List[str]  # 요청 정보 유형
    status: str  # pending, processing, completed, extended, rejected
    due_date: datetime
    extension_reason: Optional[str] = None
    completed_date: Optional[datetime] = None

class SubjectAccessRequestHandler:
    """정보주체 열람권 요청 처리 시스템"""

    STANDARD_DEADLINE_DAYS = 30  # GDPR 1개월
    MAX_EXTENSION_DAYS = 60     # 최대 연장 시 총 2개월

    def __init__(self, db_connection):
        self.db = db_connection

    def create_request(self, data_subject_id: str,
                      requested_info: List[str]) -> AccessRequest:
        """열람 요청 접수"""
        request = AccessRequest(
            request_id=f"SAR-{datetime.now().strftime('%Y%m%d%H%M%S')}",
            data_subject_id=data_subject_id,
            request_date=datetime.now(),
            requested_info=requested_info,
            status="pending",
            due_date=datetime.now() + timedelta(days=self.STANDARD_DEADLINE_DAYS)
        )

        # 접수 확인 이메일 발송 (생략)
        print(f"✅ 열람 요청 접수: {request.request_id}")
        print(f"   응답 기한: {request.due_date.strftime('%Y-%m-%d')}")

        return request

    def gather_personal_data(self, data_subject_id: str) -> Dict:
        """정보주체의 모든 개인정보 수집 (GDPR Article 15 요건)"""

        # 실제 구현 시 각 시스템에서 데이터 수집
        personal_data = {
            "기본정보": {
                "처리 여부": True,
                "처리 목적": ["서비스 제공", "고객 지원", "마케팅(동의 시)"],
                "개인정보 범주": ["식별정보", "연락처", "거래내역", "서비스 이용기록"],
                "보유 기간": "계약 종료 후 5년 (법적 의무)",
            },
            "수령인_정보": {
                "제3자 제공": ["결제대행사(PG)", "배송업체", "클라우드 서비스(AWS)"],
                "국외 이전": {
                    "여부": True,
                    "이전 국가": "미국(AWS)",
                    "안전장치": "표준계약조항(SCC) 체결"
                }
            },
            "자동화된_의사결정": {
                "사용 여부": True,
                "적용 영역": "신용평가, 개인화 추천",
                "논리 설명": "거래 이력과 행동 패턴을 분석하여 신용도 점수 산출",
                "예상 영향": "신용 등급에 따라 할부 한도 차등 적용",
                "이의제기_권리": "인간 담당자 검토 요청 가능"
            },
            "권리_안내": {
                "정정권": "부정확한 정보 정정 요청 가능",
                "삭제권": "특정 조건 하 삭제 요청 가능",
                "처리제한권": "처리 일시 중단 요청 가능",
                "이동권": "구조화된 형식으로 데이터 수령/이전 가능",
                "감독기관_민원": "개인정보보호위원회에 민원 제기 가능"
            },
            "실제_데이터": {
                "이름": "홍길동",
                "이메일": "hong@example.com",
                "전화번호": "010-1234-5678",
                "가입일": "2022-03-15",
                "최근_로그인": "2026-01-25",
                "거래_건수": 47,
                "마케팅_동의": False
            }
        }

        return personal_data

    def process_request(self, request: AccessRequest) -> Dict:
        """열람 요청 처리 및 응답 생성"""

        request.status = "processing"

        # 본인 확인 (생략 - 실제 구현 필요)

        # 개인정보 수집
        personal_data = self.gather_personal_data(request.data_subject_id)

        # 응답 문서 생성
        response = {
            "요청_번호": request.request_id,
            "요청일": request.request_date.isoformat(),
            "응답일": datetime.now().isoformat(),
            "정보주체_확인": "본인 확인 완료",
            "개인정보_처리현황": personal_data,
            "추가_사본_요청": "추가 사본 요청 시 1건당 1,000원 수수료 발생",
            "문의처": "privacy@company.com"
        }

        request.status = "completed"
        request.completed_date = datetime.now()

        return response

    def export_response(self, response: Dict, format: str = "json") -> str:
        """응답을 전자 형식으로 내보내기"""
        if format == "json":
            return json.dumps(response, ensure_ascii=False, indent=2)
        # PDF, CSV 등 추가 형식 지원 가능
        return json.dumps(response, ensure_ascii=False, indent=2)

# 사용 예시
handler = SubjectAccessRequestHandler(db_connection=None)

# 1. 열람 요청 접수
request = handler.create_request(
    data_subject_id="user-12345",
    requested_info=["기본정보", "자동화된_의사결정", "제3자_제공"]
)

# 2. 요청 처리
response = handler.process_request(request)

# 3. 결과 출력
print("\n" + "="*60)
print("📋 개인정보 열람 결과 (GDPR Article 15)")
print("="*60)
print(handler.export_response(response))

🗣️ 실무에서 이렇게 말해요

법무팀: "이번 달 SAR(Subject Access Request)이 급증했습니다. 30일 내 응답 기한을 맞추기 어려운 상황입니다."

개인정보 담당자: "GDPR에 따르면 복잡한 요청의 경우 2개월까지 연장 가능합니다. 단, 1개월 내에 연장 사유를 정보주체에게 통지해야 해요. 자동화된 SAR 처리 시스템 도입을 검토해야 할 것 같습니다."

법무팀: "AI 추천 시스템 관련 열람 요청이 많은데, 어디까지 공개해야 하나요?"

개인정보 담당자: "자동화된 의사결정에 사용된 논리를 '유의미한 정보'로 제공해야 합니다. 알고리즘 전체가 아니라 '어떤 데이터가 사용되고, 결과가 어떻게 영향을 미치는지' 수준이면 됩니다."

면접관: "열람권 요청을 거부할 수 있는 경우는 언제인가요?"

지원자: "매우 제한적입니다. 첫째, 타인의 권리와 자유에 부정적 영향을 미치는 경우입니다. 예를 들어 응답에 제3자의 개인정보가 포함되어 그 사람의 프라이버시를 침해할 때입니다. 둘째, 명백히 근거 없거나 과도한 요청, 예를 들어 동일인이 반복적으로 같은 요청을 하는 경우입니다. 다만 거부 시에도 그 사유를 정보주체에게 알리고, 감독기관에 민원 제기할 수 있음을 안내해야 합니다."

시니어: "SAR 응답에 로그인 기록이 포함되어 있는데, IP 주소도 개인정보라서 같이 제공해야 해요."

주니어: "IP 주소를 마스킹하면 안 되나요?"

시니어: "아뇨, 열람권은 정보주체 본인의 데이터를 있는 그대로 제공하는 것이에요. 단, 다른 사람의 IP가 섞여 있으면 그 부분은 익명화해야 합니다. 타인의 권리 보호와 본인 권리 보장의 균형이 중요해요."

⚠️ 주의사항

📚 더 배우기