Anthropic or OpenRouter API

by 송 재희

2만 8천 원이 가르쳐준 것

에이전트를 만들다 보면 이런 선택에 마주친다. 최고의 추론 모델이 필요한데, Claude Opus를 쓸까? 그럼 API는 어디로 연결하지? Anthropic에 직접 가입해서 쓸까, 아니면 OpenRouter 하나로 통합해서 쓸까?

나는 후자를 택했다. OpenRouter가 깔끔하니까. 하나의 API 키로 Kimi도, Opus도, Gemini도 다 돌리는 게 편했으니까.


그런데 2주치 활동 로그를 내려받아 보니까 웃음이 났다.


936개 요청 중 91개가 Opus였는데, 이 91개가 전체 비용의 64.6%를 차지했다. 나머지 845개 요청은 대부분 Kimi K2.5였고, 이것들을 합쳐도 Opus의 3분의 1 가격이었다.


91번의 호출에 2만 8천 원. 한 번 평균 3천 원. 가장 비싼 한 번은 7천 원이 나갔다. 연구 에이전트가 한 시간에 15번 루프를 돌면 5천 원이 훌씬 넘는다. 눈 깜짝할 사이에.


그래서 생긴 질문. OpenRouter 말고 Anthropic API를 직접 쓰면 싸질까?


답은 생각보다 복잡하다.


두 길은 같은 게 아니다

비교하기 전에 먼저 짚고 넘어가자. Anthropic API와 OpenRouter는 단순히 "같은 파이프의 다른 입구"가 아니다.


Anthropic 직접 API는 anthropic.com에 가입해서 받는 키다.


api.anthropic.com으로 직접 호출한다. Anthropic이 직접 과금한다. 프롬프트 캐싱, 확장 사고, 컴퓨터 사용, 배치 처리 같은 신기능을 가장 먼저 쓸 수 있다.


OpenRouter는 openrouter.ai에서 받는 하나의 통합 키다.

openrouter.ai/api/v1/chat/completions로 호출하고, 모델 슬러그만 바꾸면 된다. OpenRouter가 Bedrock이나 GCP, Azure 같은 파트너 중 하나로 요청을 라우팅하고, 통합된 형식으로 과금한다. 폴백 라우팅과 모델 다양성이 장점이다.


image.png


가격은 생각보다 똑같다

놀라운 점이다. Claude Opus의 경우, OpenRouter의 마진은 사실상 0에 가깝다. OpenRouter가 Bedrock으로 라우팅하면 Bedrock 가격을 내고, 이 가격은 Anthropic이 정한 것이다. Anthropic 직접으로 가도 같은 가격이다.


차이는 "유효 가격"에서 생긴다. 즉, 어떤 제공자로 가느냐, 그리고 캐시를 얼마나 쓰느냐.


나의 91개 Opus 요청은 전부 Amazon Bedrock으로 갔다. 1K 토큰당 $0.0037. 생성 시간은 평균 5.8초. 제공자가 하나뿐이었다. 경쟁 시장이 아니라 단일 제공자의 단일 가격이었다.

핵심 인사이트: OpenRouter가 지역에서 Opus에 대해 Bedrock만 제공한다면, "최저가를 찾아준다"는 OpenRouter의 장점은 발휘되지 않는다. 그냥 홉 하나를 더 거칠 뿐이다.


시뮬레이션: 얼마나 나올까?

네 가지 시나리오로 직접 계산해 보자. Anthropic 공시 가격을 기준으로 했다. (입력 $15/백만, 출력 $75/백만, 캐시 $1.875/백만) OpenRouter Bedrock의 실효 가격은 이와 거의 동일하다.

image.png


Opus 모델 자체의 가격은 API 게이트웨이가 아니라 아키텍처에서 결정된다. 91번의 캐시 없는 에이전트 루프에 10만 토큰씩을내면, Anthropic이든 OpenRouter든 비슷한 가격이 나온다. 절약은 API를 바꾸는 게 아니라, 캐시 마커를 넣고 컨텍스트를 줄이고, Sonnet으로 다운그레이드하는 데서 나온다.


숨겨진 비용: 프롬프트 캐싱

여기가 내 데이터가 아픈 부분이다. 91개 Opus 요청의 평균 캐시 적중률은 39%였다. 61%의 프롬프트 토큰이 매번 전액 과금되었다. 연속적인 에이전트 루프에서 거의 똑같은 컨텍스트를 보냈는데도 말이다.


4월 8일 밤 11시부터 11시 35분까지, 딥 리서처 에이전트가 Opus를 15번 호출했다. 프롬프트는 87K에서 100K 토큰. 캐시 적중률? 0%. 매번 전액을 냈다.


Anthropic 직접 API를 썼으면 캐싱이 더 잘 됐을까? 아마 아니다. 캐시 적중률은 API 호출 구조에 달려 있다. Anthropic의 프롬프트 캐싱은 메시지 블록에 cache_control 마커를 명시적으로 넣어야 작동한다.


OpenRouter로 안 보냈다면 Anthropic 직접으로도 안 보냈을 것이다.

실제 해결책: 시스템 프롬프트와 고정 컨텍스트에 캐시 마커를 추가한다.
JSON
{"type": "text", "text": "긴 시스템 프롬프트...", "cache_control": {"type": "ephemeral"}

OpenRouter를 통하든 Anthropic을 직접 쓰든, 제공자(Bedrock)가 캐싱을 처리한다. 과금 차이는 0이지만, 안 해서 놓친 절약은 내 데이터만으로도 1만 원 이상이다.


솔직한 장단점 표

Anthropic 직접 API

image.png


OpenRouter

image.png

언제 뭘 써야 할까

Anthropic 직접을 선택해야 할 때:

Claude 하나에 모든 것을 건 싱글 모델 시스템을 운영한다.

배치 처리, 컴퓨터 사용, 확장 사고가 필요하다.

엔터프라이즈 가격 협상이나 전담 지원이 필요하다.

하나의 네트워크 홉이 중요한 제품을 만든다.


OpenRouter를 선택해야 할 때:

다중 모델 시스템을 운영한다. (싼 일은 Kimi, 어려운 일은 Opus, 비전은 Gemini)

직접 재시도 로직을 짜기 싫고 자동 폴백을 원한다.

상용 모델의 제공자 차익으로 비용을 최적화하고 싶다.

통합 과금과 하나의 통합 포인트가 더 중요하다.


교훈

2만 8천 원이 가르쳐준 것은 이렇다.


API 게이트웨이가 Opus를 비싸게 만드는 게 아니다. 아키텍처가 그렇게 만든다.


Anthropic이든 OpenRouter든, 캐시 없는 에이전트 루프 91번에 10만 토큰씩을내면 비슷한 가격이 나온다. 절약은 API를 바꾸는 데 있지 않다. 캐시 마커를 추가하고, 컨텍스트를 줄이고, 프론티어 추론이 필요 없는 작업은 Sonnet으로 내리는 데 있다.


OpenRouter의 통합 워크플로우가 마음에 든다면 그대로 써라. 다만 Opus가 magically 싸지지는 않는다는 걸 알아두자. 가격은 가격이다. 낭비는 사용 방식에 있다.




매거진의 이전글LLM Wiki + Graphify를 직접 만들다