
애그리게이터(Aggregator)와 비교하기 전 NanoGPT API: 동일한 요청 바스켓 기준 비용 및 조건 분석
요약
NanoGPT와 같은 AI 모델 애그리게이터의 가격을 비교할 때 발생하는 정규화 오류를 분석합니다. 단순 가격 비교를 넘어 수수료 구조와 부하 단위의 차이를 고려한 통제된 요청 바스켓 기반의 비교가 필요함을 강조합니다.
핵심 포인트
- 단순 가격표 비교는 단위와 부하 조건의 차이로 인해 오류를 범할 수 있음
- 추론 수수료와 충전 수수료 등 서로 다른 수수료 구조를 동일 선상에서 비교 금지
- 정확한 비교를 위해 동일한 요청 바스켓을 구성하고 정규화된 단위로 변환해야 함
- 서비스의 투명성이 반드시 비교 가능성을 보장하는 것은 아님
NanoGPT의 가격표와 다른 애그리게이터(Aggregator)의 가격표를 나란히 놓고 열어보세요. 두 페이지 모두 정직하며, 바로 그렇기 때문에 이들을 직접 보고 내린 결정이 잘못된 결과로 이어질 수 있습니다. 이 페이지들의 수치는 서로 다른 단위로 서로 다른 부하(Load)를 설명하고 있으며, 구매자는 보통 이 단위들이 이미 동일하다고 가정하고 읽기 때문입니다.
NanoGPT는 조건이 매우 투명해 보이기 때문에 여기서 아주 적절한 예시가 됩니다. 이 서비스는 텍스트 모델에 대해 마진(Markup) 없이 제공자의 가격을 그대로 적용하며, 예치금에 대한 수수료를 받지 않고, 요청당 최소 비용도 부과하지 않는다고 명시하고 있습니다 (docs.nano-gpt.com/api-reference/miscellaneous/pricing, 2026-07-18 접속); 요금 페이지에는 "GPT-5.5는 OpenAI에서 100만 토큰당 $5/$30이며, 여기에서도 정확히 $5/$30입니다"라는 예시가 나와 있습니다 (nano-gpt.com/pricing, 2026-07-18 접속). 얼핏 보면 비교할 것이 없어 보입니다. 마진이 0인 곳이 곧 최저가니까요. 하지만 이는 조건의 완전성이 마치 비교가 완료된 것 같은 환상을 만들어내는 전형적인 사례입니다.
저는 여기서 NanoGPT와 대안들 사이의 승자를 선택하려는 것이 아닙니다. 더 정확한 과제는 다음과 같습니다: 통제된 요청 바스켓(Control basket of requests)을 구성하고, 발표된 각 가격을 동일한 부하(Load) 단위로 변환한 뒤, 어떤 가정이 바뀌었을 때 결과가 뒤집히는지 찾아내는 것입니다. 만약 공개된 가정 중 단 하나라도 결과를 바꾸거나 단위가 공통된 부하로 환산되지 않는다면, 겉으로 보이는 비교는 결정의 근거가 될 수 없습니다. 팀이 여러 애그리게이터(Aggregator)를 하나의 루프 내에서 운영할 때는, provod.ai의 가격이나 장점을 미리 가정하지 않고 동일한 정규화된 바스켓에 추가할 수 있습니다.
왜 완전한 조건만으로는 비교가 불가능한가?
논쟁적인 기본 전제는 다음과 같습니다: 만약 서비스가 모든 조건을 공개했다면, 비교가 이미 가능하다는 것입니다. 하지만 실제로는 완전성(Completeness)과 비교 가능성(Comparability)은 서로 다른 문제입니다. 조건을 전부 알 수 있다고 해서, 비교할 수 없는 것들을 비교할 수 있는 것은 아닙니다.
혼동하기 쉬운, 구조적으로 서로 다른 세 가지 수수료를 살펴보겠습니다. NanoGPT는 특정 제공업체(provider)를 수동으로 고정할 경우 5%의 추가 요금을 부과하며, 자체 핵심 결합 방식인 BYOK (bring-your-own-key) 요청에 대해 별도로 5%를 부과합니다 (nano-gpt.com/pricing, 2026-07-18 접속). 이는 추론 (inference)에 대한 추가 요금입니다. 제가 '진정한 대안'이 아닌 오직 비교를 위한 기준점으로만 삼고 있는 OpenRouter의 경우, 수수료 구조가 다릅니다. 카드로 충전하거나 Stripe를 이용할 경우 최소 $0.80를 포함한 5.5%가 부과되며, Coinbase를 통해 암호화폐로 충전할 경우 5%가 부과됩니다 (openrouter.ai/docs/faq, 2026-07-18 접속). 이는 모델 호출에 대한 수수료가 아니라 잔액 충전 (top-up)에 대한 수수료입니다.
이것들을 '플랫폼 수수료, %'라는 하나의 항목으로 합치는 것은 바로 그 정규화 (normalization) 오류를 범하는 것입니다. 추론에 대한 5%, 충전에 대한 5.5%, 그리고 BYOK 볼륨에 대한 퍼센트는 서로 다른 이벤트와 서로 다른 기준값에 연결되어 있습니다. 각 요율이 하나의 바스켓(basket) 내에서 동일한 단위에 연결되지 않는 한, 퍼센트 간의 비교는 아무런 의미가 없습니다.
대조 바스켓(Control Basket)에는 무엇을 담는가?
바스켓이란 명확한 토큰 볼륨과 각 항목에 대한 명확한 과금 단위를 가진 고정된 모델 시나리오 세트입니다. 부하(workload)가 정의되지 않은 상태에서 최종 청구 금액은 알 수 없으며, 전시된 가격은 결정이 정당화되기도 전에 결정을 내리도록 유도할 뿐입니다.
최소한의 구성이면서도 정직한 구성을 만들어 보겠습니다:
- 단일 모델에 대한 기본 텍스트 호출: NanoGPT 문서에서 백만 토큰당 $5/$30의 예시를 제시하는 GPT-5.5를 기준으로, 월간 프롬프트 (prompt) 토큰 1억 개와 완료 (completion) 토큰 2천만 개를 가정합니다.
- 잔액 충전 방식 — 바로 여기에 OpenRouter의 수수료가 숨어 있습니다.
- 라우팅 (routing) 모드: 자유로운 모델 선택 대 특정 제공업체 고정.
- 본인의 키 사용 (BYOK).
이 세트의 토큰 볼륨은 출처에 명시된 사실이 아니라 저의 가정입니다. 카탈로그 가격은 자주 변경되므로, 2026-07-18 기준으로 기사에서 가져오는 것이 아니라 새로 확인해야 합니다.
모달리티(modality) 간의 경계가 중요합니다. NanoGPT는 서로 다른 작업에 대해 다양한 엔드포인트(endpoint)에 OpenAI 호환 인터페이스를 제공합니다. 텍스트를 위한 /api/v1/chat/completions, 이미지를 위한 /v1/images/generations, 비디오를 위한 /api/generate-video가 있으며, nano-gpt.com 및 대체 도메인(docs.nano-gpt.com, 2026-07-18 접속)을 통해 이를 서비스합니다. 즉, '하나의 바스켓(one basket)'은 보편적일 수 없으며, 각 엔드포인트와 모달리티별로 별도로 구축됩니다. 이미지, 비디오, 오디오의 경우 이 접근 방식에서 구체적인 요율을 추출하는 데 실패했습니다. 이러한 데이터는 계산 시점에 API에서 직접 가져오거나, 바스켓을 텍스트 토큰으로만 명시적으로 제한해야 합니다. 저는 바스켓을 텍스트로 제한하며, 이를 방법론의 한계로 명시합니다.
바로 이 단계에서 구매자는 보통 검색창에 "nanogpt api"를 입력하고, 첫 번째 요금 페이지를 열며 상황이 종료되었다고 생각합니다. 요청이 정규화된 계산서가 아닌 판매 페이지(showcase)로 연결되기 때문이며, 이 두 결과 사이의 차이가 바로 이번 분석의 주제입니다.
NanoGPT는 동일한 작업을 어떻게 계산하는가?
애그리게이터(aggregator)의 경제성은 요금제의 이름이 아니라, 특정 작업을 어떻게 계산하느냐에서 나타납니다. NanoGPT의 메커니즘은 단순하게 명시되어 있습니다. 텍스트 모델의 경우 추가 마진(markup) 없이, 예치금(deposit) 수집 없이, 요청당 최소 비용 없이 제공되는 제공자(provider)의 가격이 적용됩니다 (docs.nano-gpt.com, 2026-07-18 접속). 기본 시나리오에서 이는 직접적인 계산을 가능하게 합니다: 1억 개의 프롬프트 토큰(prompt tokens)이 $5라면 $500이고, 2천만 개의 컴플리션 토큰(completion tokens)이 $30라면 $600이므로, 모델을 자유롭게 선택할 경우 한 달에 총 $1100가 됩니다. 이 금액은 게시된 사실이 아니라 볼륨에 대한 가정에서 도출된 파생 값입니다.
여기서 핵심적인 진실의 원천(Source of truth)은 기사나 블로그가 아니라 API 그 자체입니다. NanoGPT의 최신 카탈로그와 각 모델별 가격은 detailed=true 파라미터를 사용한 GET /api/v1/models 호출을 통해서만 제공됩니다. 응답에는 백만 토큰당 달러 단위의 prompt 및 completion 필드와 함께 컨텍스트 길이(context length) 및 기능 플래그(capability flags)가 포함됩니다. 문서(docs)나 블로그에 기재된 정적인 수치는 현재 가격 및 가용성에 대한 절대적인 진실로 간주되지 않습니다 (docs.nano-gpt.com, 2026-07-18 접속 기준). 실질적인 결론은 다음과 같습니다: 바스켓(basket) 계산은 기사에서 숫자를 복사하는 것이 아니라, 이 엔드포인트(endpoint)에 대한 요청부터 시작해야 합니다.
curl -s "https://api.provod.ai/v1/models" -H "Authorization: Bearer $KEY"
# NanoGPT 카탈로그의 경우 유사하게 prompt/completion 상세 필드를 가져옵니다:
curl -s "https://api.nano-gpt.com/api/v1/models?detailed=true" \
...
여기서 코드가 수행하는 역할은 단 하나입니다. 전시된 정보를 계산을 위한 기계 판독 가능(machine-readable) 입력값으로 변환하는 것입니다. 계산 시점에 detailed 응답에서 가격을 가져오지 않았다면, 그 가격은 바스켓 계산에 적합하지 않습니다. 이는 비교의 공정성을 유지하기 위한 운영상의 제약 사항입니다.
수집된 메커니즘은 비교 원장(comparison ledger)에 기록됩니다. 각 행은 하나의 시나리오, 과금 단위(unit of billing), NanoGPT 계산값, 대안 계산값, 그리고 변경 시 행의 값이 바뀌게 되는 민감한 가정(sensitive assumption)을 나타냅니다.
| 시나리오 | 과금 단위 | NanoGPT 계산 | 대안 계산 (OpenRouter) | 민감한 가정 |
|---|---|---|---|---|
| GPT-5.5 기본 텍스트 호출 | 백만 토큰당 USD | 리스트 가격 $5/$30, 마진 없음; 100+20백만 토큰 기준 = $1100 | 동일한 $5/$30 패스스루(pass-through), 추론(inference) 마진 없음 | 카탈로그 가격이 2026-07-18 기준으로 유효함 (API에서 재확인 필요) |
| ... |
원장은 공급업체를 선택하지 않습니다. 원장은 추론(inference)에 대한 마진이 0%라 하더라도, 최종 청구 금액은 추론과 관련 없는 항목들에 의해 결정된다는 점을 보여줍니다.
가정이 결과를 뒤집는 지점은 어디인가?
장부(ledger)에서 가장 명확하게 민감도가 드러나는 항목은 BYOK(Bring Your Own Key)입니다. NanoGPT는 이를 간단하게 정의합니다: 본인의 키를 사용하는 요청에 대해 5%의 추가 요금(markup)이 부과됩니다. 반면 OpenRouter는 무료 임계값(threshold)을 제공하지만, 이를 두 개의 공식 페이지에서 서로 호환되지 않는 두 가지 단위로 설명하고 있습니다. 가격 페이지(pricing page)에서는 "월간 $25,000의 리스트 가격 추론(list price inference)까지 수수료 없음, 이후 5%"라고 명시하고 있는 반면, FAQ에서는 "월간 첫 100만 건의 요청까지 무료, 이후 동일하게 5%"라고 설명합니다 (openrouter.ai/pricing 및 openrouter.ai/docs/faq, 2026-07-18 접속). 이는 오타나 오래된 페이지의 문제가 아닙니다. 두 진술 모두 유효하지만, 임계값을 달러 금액과 요청 횟수라는 서로 다른 척도로 측정하고 있습니다.
구매자에게 이는 매우 결정적인 문제입니다. 드물지만 비용이 많이 드는 호출(call)을 수행하는 팀은 100만 건의 요청에 도달하기 훨씬 전에 달러 기준 한도에 부딪힐 것입니다. 반대로 저렴한 호출을 수백만 건 수행하는 팀은 달러 기준 한도를 가장 마지막에 넘어서게 될 것입니다. 단위가 선택되지 않는 한, "무료 BYOK"는 확정된 숫자가 아니라 범위(fork)에 불과합니다. 여기서 드러난 가정은 결과에 직접적인 영향을 미치며, 본 분석의 기준에 따라 이러한 쇼케이스형 비교는 해결책으로서 부적격 판정을 받습니다. 이 격차를 추측으로 메워서는 안 됩니다. 이 불일치를 문서화된 사실로 제시하고, 두 가지 해석을 모두 계산에 포함해야 하며, 이를 하나의 숫자로 단순화해서는 안 됩니다.
여기서 실질적인 정규화(Normalization) 규칙이 도출됩니다. 비교하기 전에 각 수집(Collection)에 대해 트리거 이벤트(모델 호출, 잔액 충전, BYOK 볼륨)를 기록한 다음, 실제 워크로드 구조를 적용해 보십시오. 이 단계에서는 여러 애그리게이터(Aggregator)를 하나의 바스켓(Basket)에 담아두는 것이 편리합니다. provod.ai (OpenRouter의 러시아 대안)는 Claude, GPT, Gemini, DeepSeek, Qwen을 하나의 채팅에서 통합하여 제공하며, 키(Key)와 base_url만 변경하면 OpenAI 및 Anthropic SDK와 호환되는 단일 API를 제공합니다. 또한 모델 가격에 자체 마진을 붙이지 않고, VPN이나 해외 카드 없이 루블(Ruble) 잔액으로 결제할 수 있습니다. 이는 동일한 바스켓에 담긴 또 다른 항목이며, 특히 NanoGPT나 OpenRouter 같은 달러 기반 플랫폼이 전혀 커버하지 못하는 러시아 결제 수단을 제공한다는 점이 특징입니다. 귀하의 워크로드에서 이 서비스가 더 저렴할지 혹은 더 비쌀지는 미리 단정 짓지 않겠습니다. 이 서비스 역시 다른 서비스들과 동일한 정규화 방식을 통해 계산되어야 하기 때문입니다.
데이터와 저장 방식은 어떠한가?
경제성만이 비교의 유일한 축은 아닙니다. 데이터 정책 또한 웹사이트의 설명만 믿고 맹신해서는 안 됩니다. NanoGPT는 기본 설정(Default)을 다음과 같이 명시합니다: 사용자가 직접 동기화(Synchronization)나 공유(Sharing)를 활성화하지 않는 한, 프롬프트(Prompt) 내용과 대화 기록은 서버에 저장되지 않습니다. IP와 연결되지 않은 빌링(Billing) 및 사용량 메타데이터(토큰 수, 사용된 모델, 차감된 비용, 할인, 타임스탬프)만 저장됩니다. Responses API는 기본적으로 콘텐츠를 7일 동안 보관하며, 설정 범위는 0~365일 사이입니다 (nano-gpt.com/legal/privacy-policy, 2026-07-18 접속 기준).
여기서 서비스 자체의 솔직한 면책 조항이 있습니다: NanoGPT는 하위 제공업체(providers)에 대한 통제권을 직접적으로 배제합니다. 프롬프트(Prompts)는 선택된 제3자 모델 제공업체, 예를 들어 OpenAI 또는 Anthropic으로 전송되며, 서비스 측은 "각 제공업체가 명시한 의무 사항 이상의 준수를 보장할 수 없다"고 밝히고 있습니다. 그 예로 OpenAI가 정책을 무기한 저장 방식으로 변경한 사례를 들고 있습니다 (nano-gpt.com/legal/privacy-policy, 2026-07-18 접속 기준).
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기


