⚖️AI 규제

고위험 AI

High-Risk AI

EU AI Act에서 정의한 안전·기본권에 높은 위험을 초래하는 AI. 의료, 교육, 고용 분야 등이 해당.

📖 상세 설명

고위험 AI(High-Risk AI)는 EU AI Act(인공지능법)에서 정의한 분류로, 사람의 안전이나 기본권에 상당한 위험을 초래할 수 있는 AI 시스템을 말합니다. 이러한 AI 시스템은 시장에 출시되기 전 엄격한 요건을 충족해야 하며, 사용 중에도 지속적인 모니터링과 규제가 적용됩니다.

EU AI Act는 2024년 8월 1일 공식 발효되었으며, 세계 최초의 포괄적 AI 규제법으로 전 세계 AI 규제의 기준점 역할을 하고 있습니다. 고위험 AI는 두 가지 경로로 분류됩니다:

┌─────────────────────────────────────────────────────────────────────────────┐ │ EU AI Act 고위험 AI 분류 체계 │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────────────────────────┐ ┌──────────────────────────────────┐ │ │ │ Annex I (부속서 I) │ │ Annex III (부속서 III) │ │ │ │ EU 제품 안전 법률 연계 AI │ │ 독립형 고위험 AI 영역 │ │ │ ├──────────────────────────────────┤ ├──────────────────────────────────┤ │ │ │ • 기계류 (Machinery) │ │ 1. 생체 인식 및 분류 │ │ │ │ • 의료 기기 (Medical Devices) │ │ 2. 중요 인프라 관리 │ │ │ │ • 완구 안전 (Toy Safety) │ │ 3. 교육 및 직업 훈련 │ │ │ │ • 무선 장비 (Radio Equipment) │ │ 4. 고용 및 인력 관리 │ │ │ │ • 승강기 (Lifts) │ │ 5. 필수 서비스 접근 │ │ │ │ • 폭발물 (Explosives) │ │ 6. 법 집행 │ │ │ │ • 선박 장비 (Marine Equipment) │ │ 7. 이민·망명·국경 통제 │ │ │ │ • 철도 시스템 (Rail Systems) │ │ 8. 사법 및 민주적 절차 │ │ │ └──────────────────────────────────┘ └──────────────────────────────────┘ │ │ │ │ │ │ └──────────────┬───────────────────────┘ │ │ ▼ │ │ ┌────────────────────────────────────────┐ │ │ │ 고위험 AI 의무 사항 │ │ │ ├────────────────────────────────────────┤ │ │ │ ✓ 위험 관리 시스템 (Art. 9) │ │ │ │ ✓ 데이터 거버넌스 (Art. 10) │ │ │ │ ✓ 기술 문서화 (Art. 11) │ │ │ │ ✓ 자동 로깅 (Art. 12) │ │ │ │ ✓ 투명성 & 정보 제공 (Art. 13) │ │ │ │ ✓ 인간 감독 (Art. 14) │ │ │ │ ✓ 정확성·견고성·사이버보안 (Art. 15) │ │ │ │ ✓ 적합성 평가 & CE 마킹 │ │ │ └────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘

고위험 AI로 분류되는 Annex III의 8개 영역:

  • 생체 인식 (Biometrics): 원격 생체 인식, 감정 인식, 생체 분류 시스템
  • 중요 인프라 (Critical Infrastructure): 도로 교통, 수도·가스·전기 공급, 디지털 인프라 관리
  • 교육·직업훈련 (Education): 입학 허가, 학습 평가, 학생 행동 모니터링, 부정행위 탐지
  • 고용 (Employment): 채용 공고, 이력서 심사, 면접 평가, 해고·성과·승진 결정
  • 필수 서비스 (Essential Services): 신용 평가, 대출 심사, 보험 가격 산정, 응급 서비스 배분
  • 법 집행 (Law Enforcement): 범죄 위험 평가, 증거 신뢰성 평가, 범죄 분석 AI
  • 이민·망명 (Migration/Asylum): 비자 신청 심사, 신청서 검토, 불법 입국 탐지
  • 사법 (Justice): 법률 해석 지원, 사건 적용 AI, 분쟁 해결 지원

📅 EU AI Act 시행 타임라인

2024년 8월 1일
EU AI Act 공식 발효 (Official Journal 게재)
2025년 2월 2일
금지된 AI 관행 (Prohibited AI) 조항 시행 시작
2025년 8월 2일
범용 AI (GPAI) 모델 관련 조항 시행
2026년 8월 2일
Annex I 기반 고위험 AI (기존 EU 법률 연계) 시행
2027년 8월 2일
Annex III 고위험 AI 전면 시행 (채용, 교육, 금융 등)

📋 고위험 AI 필수 요구사항

🔍 위험 관리 시스템

AI 시스템 전 생애주기에 걸친 위험 식별, 분석, 평가, 완화 프로세스 수립

📊 데이터 거버넌스

학습/검증/테스트 데이터셋의 품질, 대표성, 편향성 관리 체계

📝 기술 문서화

시스템 설계, 개발, 테스트 정보의 상세 문서 작성 및 유지

📁 자동 로깅

운영 중 이벤트 자동 기록, 추적 가능성 보장

💡 투명성 보장

배포자·사용자에게 충분한 정보 제공, 결과 해석 가능성

👤 인간 감독

인간이 AI 시스템을 모니터링하고 개입할 수 있는 체계

🎯 정확성·견고성

적절한 정확도 수준, 오류·공격에 대한 복원력

🔐 사이버보안

무단 접근, 조작, 데이터 유출 방지 조치

📊 과징금 체계

위반 유형 최대 과징금 매출 비율
금지된 AI 관행 위반 3,500만 유로 전 세계 연매출 7%
고위험 AI 요건 위반 1,500만 유로 전 세계 연매출 3%
기타 의무 위반 750만 유로 전 세계 연매출 1.5%
허위 정보 제공 750만 유로 전 세계 연매출 1%

※ SME(중소기업) 및 스타트업에는 감경 조항이 적용될 수 있습니다.

💻 코드 예제

# EU AI Act 고위험 AI 분류 체커 (Python)
from dataclasses import dataclass, field
from enum import Enum
from typing import List, Optional

class AnnexIIICategory(Enum):
    BIOMETRICS = "1. 생체 인식"
    CRITICAL_INFRASTRUCTURE = "2. 중요 인프라"
    EDUCATION = "3. 교육·직업훈련"
    EMPLOYMENT = "4. 고용"
    ESSENTIAL_SERVICES = "5. 필수 서비스"
    LAW_ENFORCEMENT = "6. 법 집행"
    MIGRATION = "7. 이민·망명"
    JUSTICE = "8. 사법"

class RiskLevel(Enum):
    PROHIBITED = "금지"
    HIGH_RISK = "고위험"
    LIMITED_RISK = "제한적 위험"
    MINIMAL_RISK = "최소 위험"

@dataclass
class HighRiskAIClassifier:
    """EU AI Act 고위험 AI 분류기"""

    system_name: str
    system_description: str
    deployment_region: str
    intended_purpose: str

    def check_prohibited_practices(self) -> List[str]:
        """금지된 AI 관행 체크"""
        prohibited_indicators = []

        checks = {
            "subliminal": "무의식적 조작 기법 사용",
            "exploit_vulnerable": "취약 계층 착취",
            "social_scoring": "소셜 스코어링 (공공기관)",
            "predictive_policing": "개인 대상 범죄 예측",
            "emotion_workplace": "직장/교육 감정 인식",
            "facial_scraping": "무차별 얼굴 데이터 수집",
            "real_time_biometric": "실시간 원격 생체인식 (법집행)",
        }

        # 실제 구현에서는 NLP/규칙 기반으로 판단
        purpose_lower = self.intended_purpose.lower()
        for key, desc in checks.items():
            if key.replace("_", " ") in purpose_lower:
                prohibited_indicators.append(desc)

        return prohibited_indicators

    def check_annex_iii_category(self) -> Optional[AnnexIIICategory]:
        """Annex III 고위험 영역 해당 여부"""
        purpose = self.intended_purpose.lower()

        category_keywords = {
            AnnexIIICategory.BIOMETRICS: ["생체", "얼굴 인식", "지문", "감정 인식"],
            AnnexIIICategory.CRITICAL_INFRASTRUCTURE: ["전력", "가스", "수도", "교통 관제"],
            AnnexIIICategory.EDUCATION: ["입학", "학습 평가", "시험", "부정행위"],
            AnnexIIICategory.EMPLOYMENT: ["채용", "이력서", "면접", "인사 평가", "해고"],
            AnnexIIICategory.ESSENTIAL_SERVICES: ["대출", "신용", "보험", "응급"],
            AnnexIIICategory.LAW_ENFORCEMENT: ["범죄", "수사", "증거", "경찰"],
            AnnexIIICategory.MIGRATION: ["비자", "이민", "망명", "국경"],
            AnnexIIICategory.JUSTICE: ["판결", "법원", "재판", "분쟁 해결"],
        }

        for category, keywords in category_keywords.items():
            if any(kw in purpose for kw in keywords):
                return category
        return None

    def classify(self) -> dict:
        """AI 시스템 위험 분류 수행"""
        result = {
            "system_name": self.system_name,
            "risk_level": RiskLevel.MINIMAL_RISK,
            "prohibited_practices": [],
            "annex_iii_category": None,
            "eu_market_applicable": "EU" in self.deployment_region.upper(),
            "obligations": [],
            "deadline": None,
        }

        # Step 1: 금지된 관행 체크
        prohibited = self.check_prohibited_practices()
        if prohibited:
            result["risk_level"] = RiskLevel.PROHIBITED
            result["prohibited_practices"] = prohibited
            result["deadline"] = "2025-02-02 (이미 시행 중)"
            return result

        # Step 2: Annex III 고위험 체크
        category = self.check_annex_iii_category()
        if category:
            result["risk_level"] = RiskLevel.HIGH_RISK
            result["annex_iii_category"] = category.value
            result["deadline"] = "2027-08-02"
            result["obligations"] = [
                "위험 관리 시스템 구축 (Art. 9)",
                "데이터 거버넌스 수립 (Art. 10)",
                "기술 문서 작성 (Art. 11)",
                "자동 로깅 구현 (Art. 12)",
                "투명성 보장 (Art. 13)",
                "인간 감독 체계 (Art. 14)",
                "정확성·견고성·보안 (Art. 15)",
                "적합성 평가 및 CE 마킹",
            ]

        return result

    def generate_report(self) -> str:
        """분류 결과 보고서 생성"""
        result = self.classify()

        report = f"""
╔══════════════════════════════════════════════════════════════╗
║             EU AI Act 고위험 AI 분류 보고서                  ║
╠══════════════════════════════════════════════════════════════╣
║ 시스템명: {result['system_name']:<44}║
║ 위험 등급: {result['risk_level'].value:<43}║
║ EU 시장 적용: {'예' if result['eu_market_applicable'] else '아니오':<40}║
╚══════════════════════════════════════════════════════════════╝
"""
        if result["risk_level"] == RiskLevel.PROHIBITED:
            report += """
⛔ [금지된 AI 관행 해당]
다음 금지 조항에 해당될 수 있습니다:
"""
            for p in result["prohibited_practices"]:
                report += f"  • {p}\n"

        elif result["risk_level"] == RiskLevel.HIGH_RISK:
            report += f"""
⚠️ [고위험 AI 해당]
분류 영역: {result['annex_iii_category']}
준수 마감: {result['deadline']}

필수 의무 사항:
"""
            for ob in result["obligations"]:
                report += f"  ✓ {ob}\n"

        else:
            report += """
✅ [고위험 AI 비해당]
별도의 강제 의무 없이 자율 규제 적용
"""

        return report

# 사용 예시
classifier = HighRiskAIClassifier(
    system_name="AI 채용 심사 시스템",
    system_description="이력서 분석 및 면접 평가 AI",
    deployment_region="EU, 한국",
    intended_purpose="채용 프로세스에서 이력서 심사 및 면접 평가 지원"
)

print(classifier.generate_report())
# EU AI Act 기술 문서 생성기 (Art. 11 준수)
from dataclasses import dataclass, field
from typing import List, Dict, Optional
from datetime import datetime
import json

@dataclass
class TechnicalDocumentation:
    """EU AI Act Article 11 기술 문서 템플릿"""

    # 1. 일반 정보
    system_name: str
    version: str
    provider_name: str
    provider_address: str
    intended_purpose: str
    high_risk_category: str

    # 2. 시스템 설명
    general_description: str = ""
    interaction_with_hardware: str = ""
    software_version: str = ""
    input_data_types: List[str] = field(default_factory=list)
    output_data_types: List[str] = field(default_factory=list)

    # 3. 개발 과정
    design_specifications: str = ""
    development_methodology: str = ""
    training_approach: str = ""

    # 4. 데이터셋 정보
    training_data_description: str = ""
    training_data_source: str = ""
    data_preparation_methods: str = ""
    data_labeling_info: str = ""
    bias_examination: str = ""

    # 5. 성능 메트릭
    performance_metrics: Dict[str, float] = field(default_factory=dict)
    validation_methodology: str = ""
    known_limitations: List[str] = field(default_factory=list)

    # 6. 위험 관리
    identified_risks: List[str] = field(default_factory=list)
    risk_mitigation_measures: List[str] = field(default_factory=list)

    # 7. 인간 감독
    human_oversight_measures: str = ""
    operator_instructions: str = ""

    def generate_document(self) -> str:
        """기술 문서 생성"""
        doc = f"""
════════════════════════════════════════════════════════════════════
                    기술 문서 (TECHNICAL DOCUMENTATION)
                         EU AI Act Article 11 준수
════════════════════════════════════════════════════════════════════

문서 생성일: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
문서 버전: {self.version}

────────────────────────────────────────────────────────────────────
1. 일반 정보 (GENERAL INFORMATION)
────────────────────────────────────────────────────────────────────

시스템명: {self.system_name}
공급자: {self.provider_name}
주소: {self.provider_address}
고위험 분류: {self.high_risk_category}

의도된 목적:
{self.intended_purpose}

────────────────────────────────────────────────────────────────────
2. 시스템 설명 (SYSTEM DESCRIPTION)
────────────────────────────────────────────────────────────────────

일반 설명:
{self.general_description}

소프트웨어 버전: {self.software_version}

입력 데이터 유형:
{chr(10).join(f'  • {t}' for t in self.input_data_types)}

출력 데이터 유형:
{chr(10).join(f'  • {t}' for t in self.output_data_types)}

하드웨어 상호작용:
{self.interaction_with_hardware}

────────────────────────────────────────────────────────────────────
3. 개발 과정 (DEVELOPMENT PROCESS)
────────────────────────────────────────────────────────────────────

설계 사양:
{self.design_specifications}

개발 방법론:
{self.development_methodology}

학습 접근법:
{self.training_approach}

────────────────────────────────────────────────────────────────────
4. 데이터셋 정보 (DATA INFORMATION)
────────────────────────────────────────────────────────────────────

학습 데이터 설명:
{self.training_data_description}

데이터 출처:
{self.training_data_source}

데이터 준비 방법:
{self.data_preparation_methods}

레이블링 정보:
{self.data_labeling_info}

편향성 검토:
{self.bias_examination}

────────────────────────────────────────────────────────────────────
5. 성능 지표 (PERFORMANCE METRICS)
────────────────────────────────────────────────────────────────────

"""
        for metric, value in self.performance_metrics.items():
            doc += f"  {metric}: {value}\n"

        doc += f"""
검증 방법론:
{self.validation_methodology}

알려진 제한사항:
{chr(10).join(f'  • {l}' for l in self.known_limitations)}

────────────────────────────────────────────────────────────────────
6. 위험 관리 (RISK MANAGEMENT)
────────────────────────────────────────────────────────────────────

식별된 위험:
{chr(10).join(f'  • {r}' for r in self.identified_risks)}

완화 조치:
{chr(10).join(f'  • {m}' for m in self.risk_mitigation_measures)}

────────────────────────────────────────────────────────────────────
7. 인간 감독 (HUMAN OVERSIGHT)
────────────────────────────────────────────────────────────────────

감독 조치:
{self.human_oversight_measures}

운영자 지침:
{self.operator_instructions}

════════════════════════════════════════════════════════════════════
                           [문서 끝]
════════════════════════════════════════════════════════════════════
"""
        return doc

    def to_json(self) -> str:
        """JSON 형식으로 내보내기"""
        data = {
            "document_version": self.version,
            "generated_at": datetime.now().isoformat(),
            "general_info": {
                "system_name": self.system_name,
                "provider": self.provider_name,
                "high_risk_category": self.high_risk_category,
            },
            "performance": self.performance_metrics,
            "risks": self.identified_risks,
            "limitations": self.known_limitations,
        }
        return json.dumps(data, indent=2, ensure_ascii=False)

# 사용 예시
doc = TechnicalDocumentation(
    system_name="AI 채용 심사 시스템 v2.0",
    version="2.0.1",
    provider_name="KAITRUST Corp.",
    provider_address="서울특별시 강남구",
    intended_purpose="채용 과정에서 이력서 분석 및 초기 심사 지원",
    high_risk_category="Annex III - 4. 고용",
    general_description="NLP 기반 이력서 분석 및 직무 적합도 점수 산출",
    input_data_types=["PDF 이력서", "텍스트 자기소개서"],
    output_data_types=["적합도 점수 (0-100)", "핵심 역량 추출"],
    performance_metrics={"Accuracy": 0.87, "F1-Score": 0.84},
    identified_risks=["성별 편향", "학력 편향", "연령 편향"],
    risk_mitigation_measures=["공정성 감사", "편향성 테스트", "인간 최종 검토"],
)

print(doc.generate_document())
# EU AI Act 자동 로깅 시스템 (Art. 12 준수)
from dataclasses import dataclass, field
from datetime import datetime
from typing import Any, Dict, List, Optional
from enum import Enum
import hashlib
import json
import uuid

class EventType(Enum):
    SYSTEM_START = "system_start"
    SYSTEM_STOP = "system_stop"
    PREDICTION_REQUEST = "prediction_request"
    PREDICTION_RESPONSE = "prediction_response"
    HUMAN_OVERRIDE = "human_override"
    ERROR = "error"
    CONFIG_CHANGE = "config_change"
    DATA_ACCESS = "data_access"

@dataclass
class LogEntry:
    """EU AI Act 준수 로그 엔트리"""
    event_id: str
    timestamp: str
    event_type: EventType
    system_version: str
    operator_id: Optional[str]
    input_hash: Optional[str]  # 입력 데이터 해시 (개인정보 보호)
    output_summary: Optional[str]
    confidence_score: Optional[float]
    human_verified: bool
    metadata: Dict[str, Any]

class HighRiskAILogger:
    """EU AI Act Article 12 자동 로깅 시스템"""

    def __init__(self, system_name: str, system_version: str):
        self.system_name = system_name
        self.system_version = system_version
        self.logs: List[LogEntry] = []
        self.retention_period_days = 365 * 5  # 5년 보관 (Art. 12(4))

    def _generate_event_id(self) -> str:
        return str(uuid.uuid4())

    def _hash_input(self, input_data: Any) -> str:
        """입력 데이터 해시화 (개인정보 보호)"""
        data_str = json.dumps(input_data, sort_keys=True, default=str)
        return hashlib.sha256(data_str.encode()).hexdigest()[:16]

    def log_prediction(self,
                        input_data: Any,
                        output: Any,
                        confidence: float,
                        operator_id: Optional[str] = None,
                        human_verified: bool = False) -> str:
        """예측 요청/응답 로깅"""
        event_id = self._generate_event_id()

        # 요청 로그
        request_log = LogEntry(
            event_id=event_id,
            timestamp=datetime.utcnow().isoformat() + "Z",
            event_type=EventType.PREDICTION_REQUEST,
            system_version=self.system_version,
            operator_id=operator_id,
            input_hash=self._hash_input(input_data),
            output_summary=None,
            confidence_score=None,
            human_verified=False,
            metadata={"input_type": type(input_data).__name__}
        )
        self.logs.append(request_log)

        # 응답 로그
        response_log = LogEntry(
            event_id=event_id,
            timestamp=datetime.utcnow().isoformat() + "Z",
            event_type=EventType.PREDICTION_RESPONSE,
            system_version=self.system_version,
            operator_id=operator_id,
            input_hash=self._hash_input(input_data),
            output_summary=str(output)[:200],
            confidence_score=confidence,
            human_verified=human_verified,
            metadata={"output_type": type(output).__name__}
        )
        self.logs.append(response_log)

        return event_id

    def log_human_override(self,
                           event_id: str,
                           operator_id: str,
                           original_output: Any,
                           overridden_output: Any,
                           reason: str):
        """인간 개입/오버라이드 로깅"""
        override_log = LogEntry(
            event_id=event_id,
            timestamp=datetime.utcnow().isoformat() + "Z",
            event_type=EventType.HUMAN_OVERRIDE,
            system_version=self.system_version,
            operator_id=operator_id,
            input_hash=None,
            output_summary=f"Original: {str(original_output)[:50]}, Overridden: {str(overridden_output)[:50]}",
            confidence_score=None,
            human_verified=True,
            metadata={"reason": reason}
        )
        self.logs.append(override_log)

    def log_error(self, error_type: str, error_message: str,
                   operator_id: Optional[str] = None):
        """에러 로깅"""
        error_log = LogEntry(
            event_id=self._generate_event_id(),
            timestamp=datetime.utcnow().isoformat() + "Z",
            event_type=EventType.ERROR,
            system_version=self.system_version,
            operator_id=operator_id,
            input_hash=None,
            output_summary=None,
            confidence_score=None,
            human_verified=False,
            metadata={"error_type": error_type, "message": error_message}
        )
        self.logs.append(error_log)

    def export_logs(self, format: str = "json") -> str:
        """로그 내보내기 (감사용)"""
        log_data = []
        for log in self.logs:
            log_data.append({
                "event_id": log.event_id,
                "timestamp": log.timestamp,
                "event_type": log.event_type.value,
                "system_version": log.system_version,
                "operator_id": log.operator_id,
                "input_hash": log.input_hash,
                "output_summary": log.output_summary,
                "confidence_score": log.confidence_score,
                "human_verified": log.human_verified,
                "metadata": log.metadata,
            })
        return json.dumps(log_data, indent=2, ensure_ascii=False)

    def get_audit_summary(self) -> str:
        """감사 요약 생성"""
        total = len(self.logs)
        predictions = len([l for l in self.logs
                          if l.event_type == EventType.PREDICTION_RESPONSE])
        overrides = len([l for l in self.logs
                        if l.event_type == EventType.HUMAN_OVERRIDE])
        errors = len([l for l in self.logs
                     if l.event_type == EventType.ERROR])

        return f"""
╔═══════════════════════════════════════════════╗
║         EU AI Act 로깅 감사 요약              ║
╠═══════════════════════════════════════════════╣
║ 시스템: {self.system_name:<30}║
║ 버전: {self.system_version:<32}║
╠═══════════════════════════════════════════════╣
║ 총 로그 수: {total:<28}║
║ 예측 건수: {predictions:<29}║
║ 인간 개입: {overrides:<29}║
║ 에러 발생: {errors:<29}║
║ 개입 비율: {(overrides/max(predictions,1)*100):.1f}%{' '*23}║
╚═══════════════════════════════════════════════╝
"""

# 사용 예시
logger = HighRiskAILogger("AI-Hiring-System", "2.0.1")

# 예측 로깅
event_id = logger.log_prediction(
    input_data={"resume_id": "R-12345", "position": "Engineer"},
    output={"score": 85, "recommendation": "Interview"},
    confidence=0.92,
    operator_id="OP-001"
)

# 인간 오버라이드 로깅
logger.log_human_override(
    event_id=event_id,
    operator_id="HR-MANAGER-01",
    original_output={"score": 85},
    overridden_output={"score": 75},
    reason="직무 경험 부족 고려"
)

print(logger.get_audit_summary())

🗣️ 실무에서 이렇게 말하세요

💬 경영진 보고에서

"우리 채용 AI가 EU에서 서비스되면 고위험 AI로 분류됩니다. Annex III의 '고용' 카테고리에 해당하며, 2027년 8월까지 CE 마킹과 적합성 평가를 완료해야 합니다. 위반 시 최대 1,500만 유로 과징금이 부과됩니다."

💬 법무팀 협의에서

"고위험 AI는 Article 9부터 15까지 7개 핵심 요건을 충족해야 합니다. 특히 Article 12의 자동 로깅은 5년간 보관 의무가 있어서 스토리지 비용도 고려해야 해요."

💬 개발팀 회의에서

"고위험 AI의 핵심은 '추적 가능성'입니다. 모든 의사결정 과정을 로깅하고, 왜 그런 결과가 나왔는지 설명할 수 있어야 해요. SHAP이나 LIME 같은 XAI 라이브러리가 필수입니다."

💬 컨설팅 미팅에서

"고위험 AI 적합성 평가는 두 가지 경로가 있어요. 대부분은 자체 평가(self-assessment)로 가능하지만, 생체 인식처럼 민감한 영역은 공인 기관(Notified Body)의 제3자 평가가 필요합니다."

💬 면접에서

"EU AI Act의 고위험 AI 요건을 분석해서 우리 AI 시스템의 갭을 식별한 경험이 있습니다. 특히 데이터 거버넌스와 인간 감독 기능이 가장 큰 보완 영역이었고, MLOps 파이프라인에 compliance-by-design을 적용했습니다."

⚠️ 흔한 실수 & 주의사항

EU 외 지역 면제 착각

EU에 직접 서비스하지 않아도 EU 시민 데이터를 처리하거나 EU 기업에 AI 시스템을 공급하면 적용될 수 있습니다. GDPR과 유사한 역외 적용 원칙입니다.

시행 시점 오해

전면 시행은 2027년이지만 금지된 관행은 2025년 2월부터 적용됩니다. 또한 기존 시스템도 2030년까지 준수해야 하는 경과 조치가 있습니다.

B2B AI는 해당 없다는 착각

기업용 AI도 고위험 영역(채용, 신용평가 등)에 사용되면 동일하게 규제됩니다. 최종 사용 목적이 기준입니다.

AI 컴포넌트만 해당

AI가 안전 제품(의료기기, 기계류 등)의 일부로 사용될 때도 Annex I 경로로 고위험 AI가 될 수 있습니다.

올바른 접근법

AI 시스템별로 Annex I/III 해당 여부를 판단하고, 문서화된 위험 평가 체계를 구축하세요. 'Compliance by Design' 원칙으로 개발 초기부터 요건을 반영하는 것이 비용 효율적입니다.

🔥 실제 사례로 배우기

📌 이탈리아 ChatGPT 일시 금지 (2023) 이탈리아 | GDPR 위반 | 30일 서비스 중단

이탈리아 데이터보호청(Garante)이 OpenAI ChatGPT의 서비스를 일시 금지했습니다. 아동 보호 미비, 학습 데이터의 법적 근거 부재, 투명성 부족 등이 문제였습니다. OpenAI는 연령 확인, 개인정보 처리 투명성 개선, EU 데이터 주체 권리 보장 등을 약속한 후 서비스를 재개했습니다.

교훈: EU AI Act 시행 전에도 GDPR으로 AI 서비스가 제재받을 수 있습니다. AI Act는 더 구체적인 요건을 부과하므로, 범용 AI(GPAI)를 사용하는 고위험 AI 시스템은 이중 규제에 대비해야 합니다.
📌 Clearview AI EU 퇴출 (2022-2023) 프랑스, 이탈리아, 영국 | 얼굴인식 | 누적 7천만 유로 과징금

미국 얼굴인식 기업 Clearview AI가 EU 여러 국가에서 GDPR 위반으로 대규모 과징금을 부과받았습니다. 프랑스 CNIL(2,000만 유로), 이탈리아 Garante(2,000만 유로), 영국 ICO(750만 파운드) 등이 무단 생체정보 수집과 처리에 대해 제재했습니다.

교훈: 생체 인식은 EU AI Act Annex III의 1번 항목입니다. 무차별 얼굴 이미지 스크래핑은 AI Act에서 아예 금지됩니다(Art. 5). 생체 인식 AI는 가장 엄격한 규제 대상입니다.
📌 HireVue AI 면접 시스템 논란 (2019-2021) 미국 | 채용 AI | FTC 제소

AI 기반 면접 평가 시스템 HireVue가 얼굴 표정 분석을 통한 평가로 비판받았습니다. EPIC(Electronic Privacy Information Center)이 FTC에 조사를 요청했고, HireVue는 결국 얼굴 분석 기능을 폐기했습니다. 투명성 부족과 편향 가능성이 주요 쟁점이었습니다.

교훈: 채용 AI는 EU AI Act에서 명시적 고위험 영역입니다. 특히 감정 인식이나 생체 분석을 결합하면 더 높은 규제 강도가 적용됩니다. 투명성과 설명 가능성은 필수입니다.

📝 이해도 퀴즈

Q1. EU AI Act에서 고위험 AI가 분류되는 두 가지 경로는?

A) Annex I (제품 안전 법률 연계) + Annex III (독립형 영역)
B) Article 5 (금지) + Article 6 (허용)
C) GDPR + AI Act
D) 위험 평가 + 적합성 평가

✅ 정답: A) 고위험 AI는 두 경로로 분류됩니다. Annex I은 의료기기, 기계류 등 기존 EU 제품 안전 법률에 AI가 적용되는 경우이고, Annex III는 채용, 교육, 금융 등 8개 독립적 고위험 영역입니다.

Q2. EU AI Act 고위험 AI 관련 조항(Annex III)의 전면 시행 시점은?

A) 2024년 8월
B) 2025년 2월
C) 2026년 8월
D) 2027년 8월

✅ 정답: D) Annex III 기반 고위험 AI(채용, 교육, 금융 등)는 2027년 8월 2일부터 전면 시행됩니다. 단, 금지된 AI 관행은 2025년 2월, Annex I 기반 고위험 AI는 2026년 8월에 먼저 시행됩니다.

Q3. 고위험 AI 요건 위반 시 최대 과징금은?

A) 750만 유로 또는 매출 1.5%
B) 1,500만 유로 또는 매출 3%
C) 2,000만 유로 또는 매출 4%
D) 3,500만 유로 또는 매출 7%

✅ 정답: B) 고위험 AI 요건 위반 시 최대 1,500만 유로 또는 전 세계 연매출 3% 중 높은 금액이 과징금으로 부과됩니다. 3,500만 유로/7%는 금지된 AI 관행 위반에 해당합니다.

🔗 관련 용어

📚 더 배우기