무료 모델 사용량 할당은 아키텍처가 아니다
요약
본 글은 AI 모델의 '무료 등급(free tier)' 사용 자체를 비판하기보다, 이 서비스에 의존하여 구축되는 시스템 아키텍처의 결합도 문제를 지적합니다. 벤더 SDK나 특정 응답 엔벨로프 가정 등은 편리하지만 장기적으로 높은 전환 비용을 초래하므로, 포터빌리티(Portability)를 최우선으로 고려해야 합니다.
핵심 포인트
- 무료 토큰 할당량은 자원일 뿐이며, 아키텍처의 결합도 문제와는 별개입니다.
- 벤더 SDK 사용이나 특정 응답 구조 가정 등은 편리하지만 높은 전환 비용을 유발합니다.
- 해결책으로 네트워크 통신과 디스크 읽기를 모두 지원하는 단일 호출 형태의 어댑터 패턴을 제안합니다.
- 전환 가능성을 측정하기 위해 '녹화(record)'와 '재생(replay)' 모드를 활용한 테스트 프로세스를 권장합니다.
무료 모델 접근성은 정말 유용합니다. 하지만 그 주변에 스택을 구축하는 것은 그렇지 않습니다.
모든 무료 등급(free tier)은 다르게 끝납니다. 어떤 것은 축소되고, 어떤 것은 형태가 바뀌고, 어떤 것은 단순히 느려지기만 합니다. 어느 것을 얻게 될지 예측할 수 없습니다. 하지만 전환 자체는 지루하게 만들 수 있습니다.
이것이 전체 논점입니다. 포터빌리티(Portability)는 무료 등급에서 유지해야 할 부분입니다. 그 외의 모든 것은 임대하는 것입니다.
명확히 진술된 주장
무료 토큰 사용량 할당은 설계 결정이 아니라 자원일 뿐입니다. 이는 호출 비용을 지불할 뿐, 그 위에 구축하는 결합도(coupling)에 대한 비용은 지불하지 않습니다.
여기 테스트가 있습니다. 만약 두 번째 엔드포인트로 이동하는 것이 스프린트 기간이 걸린다면, 당신에게는 애초에 무료 등급이 없었던 것입니다. 그것은 잠금장치가 걸린 할인일 뿐입니다.
저는 무료 등급 자체를 반대하는 것이 아닙니다. 제가 주장하는 것은 출구(exit)를 알기 전에 그것들을 소진하는 것을 반대한다는 것입니다.
실질적인 결합도의 모습
아무도 의도적으로 결합도를 높이지 않습니다. 그것은 작은 편리함들을 통해 도착합니다.
- 함수 시그니처에 벤더 SDK(vendor SDK) 유형이 나타납니다.
- 툴 호출 스키마(Tool-call schemas)가 에지에서 변환되지 않고 데이터베이스에 저장됩니다.
- 재시도 및 스트리밍 로직이 하나의 응답 엔벨로프(response envelope)를 가정합니다.
- 프롬프트 템플릿이 한 모델의 특이점(quirks)에 맞춰 조정되고 다른 것은 아무것도 없습니다.
- 테스트 스위트가 단일 호스트에 대해서만 항상 녹색 상태(green)입니다.
각 항목은 지금 당장 몇 시간을 절약해 줍니다. 하지만 나중에는 일주일의 비용을 초래합니다.
아티팩트: 하나의 어댑터, 두 가지 모드
해결책은 두 개의 구현체를 가진 단일 호출 형태입니다. 하나는 네트워크와 통신하고, 다른 하나는 디스크에서 읽어옵니다.
# gateway.py — 스케치일 뿐; 아직 라이브 엔드포인트에 대해 실행되지 않음
from __future__ import annotations
...
선택은 한 곳에 머뭅니다. 그곳은 리뷰에서 논쟁할 수 있는 함수입니다.
def build_provider(mode: str) -> Provider:
if mode ==
## 훈련 과정: 한 시간 안에 전환할 수 있음을 증명하라
분기별로 한 번 실행하십시오. 그 결과를 리포지토리 README에 작성하세요.
1. 주(primary) 엔드포인트에서 실제 프롬프트 10개를 기록합니다. 카세트(cassettes)를 git에 저장합니다.
2. 네트워킹을 비활성화한 상태로 스위트를 재생 모드(replay mode)로 실행합니다. 모든 것이 통과해야 합니다.
3. 동일한 스위트를 두 번째 엔드포인트에 지정합니다. 테스트 파일을 변경하지 마십시오.
4. 출력 결과를 비교하여 보고서를 작성합니다. 차이점을 보고하고, 아직 점수를 매기지 마십시오.
5. 전환하기 위해 변경한 라인 수를 계산합니다. 그 숫자가 당신의 결합도(coupling score)입니다.
6. 전체 과정을 측정합니다. 한 시간을 초과하는 것은 백로그 항목입니다.
pip install -e .
CASSETTES=cassettes python -m gateway --record --suite suites/core.yaml
CASSETTES=cassettes python -m gateway --replay --suite suites/core.yaml
솔직한 참고 사항입니다. `--record`와 `--replay` 플래그는 제가 사용하고 싶은 인터페이스이며, 실제로 실행해 본 CLI는 아닙니다. 이를 자체 러너(runner)에 연결하십시오.
## 논쟁할 수 있는 의사 결정 테이블
| 상황 | 무료 할당량 (Free allowance) | 무료 서버 옵션 (Free server option) | 유료 엔드포인트 (Paid endpoint) |
| --- | --- | --- | :--- |
| 에이전트 루프 학습 | 예 (Yes) | 예 (Yes) | 아니오 (No) |
| ... |
읽을 때는 기본값으로, 법규로 읽지 마십시오. 요점은
무료 서버 옵션은 다른 격차를 메웁니다. 녹화 프록시와 카세트 스토어를 그곳에서 실행하여, 결정하는 동안 드릴 비용이 들지 않게 합니다.
## 제한 사항
- 재생(Replay)은 재현성(reproducibility)을 증명할 뿐, 품질을 증명하지는 않습니다. 카세트는 무슨 일이 일어났는지 말해줄 뿐, 무엇이 올바른지는 말해주지 않습니다.
- 카세트는 정확한 프롬프트에 묶입니다. 프롬프트를 수정하면 다시 녹화해야 합니다.
- 당신의 스위트(suite)를 통과하는 두 번째 엔드포인트가 해당 엔드포인트들이 동등하다는 것을 의미하지는 않습니다.
- 무료 인프라는 벤치마크 대상이 아닙니다. 여기서 얻은 지연 시간(latency) 수치를 발표하지 마십시오.
- 이 드릴은 결합(coupling)을 감지합니다. 하지만 이미 배포된 결합까지 제거해주지는 않습니다.
## 사용해서는 안 되는 경우
제공업체 변경이 계약상 금지되어 있다면 이 드릴을 건너뛰세요. 단일 엔드포인트만 있고 이동할 그럴듯한 이유가 없다면 건너뛰세요. 프롬프트가 이미 버전 관리되고 테스트되었다면도 건너뛰세요. 왜냐하면 당신은 이 문제를 해결했기 때문입니다.
또한, 무료 티어가 영구적인 플랜이 되기를 원한다면 건너뛰세요. 무료 티어는 영구적이지 않습니다. 이것이 바로 이 글이 존재하는 전체 이유입니다.
## 마무리
먼저 퇴장 계획(exit plan)을 작성하고, 그 후에 할당량을 사용하십시오. 어댑터를 무료 엔드포인트에 겨누고 드릴을 한 번 실행하세요. 만약 전환하는 데 오후가 걸린다면, 당신은 저렴한 비용으로 무언가를 배웠다는 뜻입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기