이 문서를 통해 아래 질문들에 답할 수 있게 됩니다.

  • AI provider 의존성은 어떤 위험을 가지는가?
  • multi-provider와 fallback은 언제 도움이 되고 언제 복잡도만 늘리는가?
  • provider abstraction을 설계할 때 어디까지 추상화해야 하는가?

개요

AI 서비스는 provider에 의존한다. provider는 모델 품질, 가격, rate limit, 장애, 데이터 정책, API 기능을 제공한다. 이 의존성은 기술 리스크이면서 비용과 보안 리스크다.

Multi-provider 전략은 이 리스크를 줄일 수 있지만 복잡도도 만든다.

Provider Risk

위험:

  • provider 장애
  • rate limit 변경
  • 가격 변경
  • 모델 deprecation
  • API 응답 형식 변경
  • 데이터 보존 정책 변경
  • 특정 지역 규제 이슈

백엔드는 이 위험을 adapter, fallback, 계약, 모니터링으로 관리한다.

Provider Abstraction

완전한 provider 독립은 어렵다. provider마다 structured output, tool calling, safety behavior, tokenization, streaming 방식이 다르다.

현실적인 추상화:

  • 내부 model profile
  • 내부 LlmClient interface
  • 공통 result DTO
  • provider-specific adapter
  • provider별 capability registry

코드로 이해하기

capability를 명시한다.

providers:
  openai:
    supports_structured_output: true
    supports_tool_calling: true
    supports_prompt_cache: true
  local_vllm:
    supports_structured_output: partial
    supports_tool_calling: false
    supports_prompt_cache: false

서비스는 capability를 확인하고 feature를 선택한다.

Fallback 설계

fallback은 다음 조건을 만족해야 한다.

  • 같은 schema를 지킨다.
  • 품질 eval을 통과했다.
  • 비용과 latency가 허용된다.
  • safety behavior 차이를 알고 있다.
  • 사용자에게 품질 저하를 알릴 정책이 있다.

fallback을 장애 때 처음 쓰면 더 큰 장애가 날 수 있다.

인프라 협업 포인트

provider가 늘어나면 secret, outbound, rate limit, 비용 계정, 모니터링이 늘어난다. 인프라팀과 provider별 key, quota, alert, circuit breaker를 합의한다.

개인 프로젝트 최소 기준

  • provider model 이름을 코드 곳곳에 쓰지 않는다.
  • model profile을 둔다.
  • provider 장애 시 사용자 메시지를 둔다.
  • key를 안전하게 관리한다.

기업 운영 수준 기준

  • vendor risk review를 한다.
  • fallback provider를 eval한다.
  • provider별 사용량과 비용을 추적한다.
  • 모델 deprecation 대응 계획을 둔다.
  • 데이터 처리 정책을 보안팀과 검토한다.

실전 팁

  • 추상화를 너무 얇게 만들면 provider 변경 때 흔들리고, 너무 두껍게 만들면 provider 장점을 못 쓴다.
  • 핵심 도메인 서비스는 내부 DTO에 의존하게 한다.
  • provider별 특수 기능은 capability check 뒤에 사용한다.
  • 모델 deprecation 공지는 운영 일정으로 관리한다.

위험 신호!

  • provider model 이름이 서비스 코드 전체에 흩어져 있다.
  • fallback provider를 한 번도 테스트하지 않았다.
  • provider 장애가 전체 서비스 장애가 된다.
  • 데이터 보존 정책을 확인하지 않았다.

확인 질문

확인 질문

  • provider abstraction이 완전한 독립을 보장하지 않는 이유는 무엇인가?
    • provider마다 기능, 출력, 안전 정책, tokenization, 비용 구조가 다르기 때문이다.
  • fallback provider를 운영에 넣기 전 필요한 것은 무엇인가?
    • schema, 품질, 비용, latency, 안전 정책에 대한 eval과 테스트다.

Spring AI 적용 연결

참고 문서