피드로 돌아가기
From N*M to N+M: A Zero-Dependency LLM Provider Layer
Dev.toDev.to
Backend

N*M 복잡도를 N+M으로 낮춘 300줄 규모의 Zero-Dependency LLM Provider Layer 설계

From N*M to N+M: A Zero-Dependency LLM Provider Layer

Santaz2026년 6월 2일11intermediate

Context

LLM Provider 증가에 따라 Base Class와 Subclass를 활용한 Template Method 패턴을 적용했으나, 동일 프로토콜을 사용하는 서로 다른 벤더들이 늘어남에 따라 클래스 폭발(Class Explosion) 발생. 프로토콜(코드)과 프로바이더(데이터)를 동일한 클래스 내에 결합함으로써 발생하는 중복 코드와 유지보수 효율 저하 문제를 식별.

Technical Solution

  • Protocol과 Provider를 분리하여 'Protocol은 코드, Provider는 데이터'로 정의하는 아키텍처 전환
  • OpenAI, Anthropic, Google 등 3종의 핵심 API 프로토콜을 독립적인 객체로 추상화하여 로직 중복 제거
  • 개별 벤더 정보(baseUrl, API Key, Model Name)를 단순 데이터 레지스트리 행(Row)으로 처리하여 확장성 확보
  • Zero-Dependency 원칙을 통해 외부 프레임워크 의존성을 완전히 배제한 경량 추상화 계층 구현
  • Core 로직을 500 LOC 이하로 제한하여 코드 가독성과 분석 속도를 극대화한 제약 조건 설정
  • Provider의 상태 정보만 노출하고 실제 스케줄링 로직을 분리하여 Core와 Scheduler 간의 결합도 제거

1. 확장 시 클래스 수가 기하급수적으로 늘어난다면 '전략(Strategy)'과 '설정(Configuration)'이 혼재되어 있는지 검토할 것

2. 추상화 계층의 복잡도를 제어하기 위해 메서드 개수(예: 8개 이하)나 코드 라인 수(LOC)에 물리적 상한선을 설정할 것

3. 핵심 라이브러리 설계 시 의존성 제거(Zero-Dependency)가 단순한 취향이 아닌 제품의 카테고리적 정체성이 될 수 있음을 고려할 것

원문 읽기