3. 외부 API 라우팅 룰 의사코드 (pseudo-code)

두 번 요청한 Q3/Q1(외부 API 라우팅) 내용을 합쳐서,

백엔드/AI Gateway 개발자가 그대로 참고할 수 있게 정리한 버전이야.

3-1. 공통 타입 정의 (예시 Enum)

enum DocType {
  LEGAL_4D,        // 4대 법정 교육
  JOB_INTERNAL,    // 직무/사내 정책
  NOTICE,
  FAQ,
  INCIDENT_REPORT,
  OTHER
}

enum Sensitivity {
  LOW,
  MEDIUM,
  HIGH,
  UNKNOWN
}

enum PiiRisk {
  NONE,
  LOW,
  MEDIUM,
  HIGH,
  UNKNOWN
}

enum FeatureType {
  CHAT_LLM,
  VIDEO_SCRIPT_LLM,
  TTS,
  VIDEO_RENDER,
  OTHER
}

3-2. 외부 호출 허용 여부 판단 함수

function canUseExternalAPI(docMeta, featureType):
    # 필수 메타데이터
    docType       = docMeta.doc_type         # DocType
    sensitivity   = docMeta.sensitivity      # Sensitivity
    piiRisk       = docMeta.pii_risk         # PiiRisk
    sourceDomain  = docMeta.source_domain    # 예: "kisa.or.kr", "moel.go.kr"
    isPublic      = docMeta.is_public        # 공공/대외 공개 여부 (bool)

    # 0. featureType별 외부 사용 가능 범위 제한
    if featureType not in [VIDEO_SCRIPT_LLM, TTS]:
        # 기본 정책: 챗봇/QA/내부 정책 답변용 LLM은 외부 금지
        return false

    # 1. 기본 보안 룰: 민감도 또는 PII가 애매/높으면 무조건 내부
    if sensitivity in [HIGH, UNKNOWN]:
        return false
    if piiRisk in [MEDIUM, HIGH, UNKNOWN]:
        return false

    # 2. 도메인/자료 출처 기반 화이트리스트 체크
    if not isPublic:
        return false
    if sourceDomain not in EXTERNAL_WHITELIST_DOMAINS:
        return false

    # 3. 문서 종류 기반 조건 (4대교육만 허용)
    if docType != LEGAL_4D:
        return false

    # 4. 여기까지 통과한 경우에만 외부 사용 허용
    return true

3-3. 실제 라우팅 예시

function routeToLLMOrTTS(request, docMeta, featureType):
    if canUseExternalAPI(docMeta, featureType):
        return callExternalAPI(request, featureType)
    else:
        return callInternalModel(request, featureType)