중앙 교환기를 세워라 — 당근이 AI 난립을 하나의 플랫폼으로 정돈한 전략

10 min read
당근GenAILLM GatewayPrompt StudioAI 플랫폼
중앙 교환기를 세워라 — 당근이 AI 난립을 하나의 플랫폼으로 정돈한 전략

팀 A는 OpenAI API 키를 발급받고, 팀 B는 Anthropic 계정을 만들고, 팀 C는 Google 모델을 쓴다. 계정과 키가 사방에 흩어지고, 누가 얼마나 쓰는지 파악이 안 되고, 프롬프트는 각 팀의 코드 저장소 어딘가에 묻혀 있다. 조직에서 AI를 도입할 때 가장 먼저 마주치는 풍경이다. 각 부서가 독립적으로 전화 회선을 개통해서 쓰는 상황 — 당근은 이 혼란을 중앙 교환기 하나로 정리했다.

당근의 GenAI 플랫폼은 LLM Router, Prompt Studio, KarrotChat이라는 세 축으로 구성된다. "어떤 모델을 쓸지", "프롬프트를 어떻게 관리할지", "만든 AI를 어떻게 쓸지" — 각각의 질문에 대한 구조적 답이다.


LLM Router — AI 호출의 단일 관문

모든 AI API 호출을 하나의 관문으로 통과시키는 것. 이것이 LLM Router의 전부다. 각 팀이 OpenAI, Anthropic, Google의 API를 직접 호출하는 대신, Router를 경유한다.

llm-router-flow.txt
[제품 팀 A] ──┐
[제품 팀 B] ──┼── LLM Router ──┬── OpenAI
[제품 팀 C] ──┘                ├── Anthropic
                               └── Google

회사의 내선 전화 교환기와 동일한 구조다. 외부 통신사(LLM 제공사)가 바뀌어도 내선 번호(API 인터페이스)는 유지된다. 제품 팀은 어떤 모델 제공사를 쓰는지 신경 쓸 필요 없이 Router에 요청만 보내면 된다.

문제Router 없이Router 있을 때
계정 관리팀마다 별도 계정/키중앙 집중 관리
비용 추적파악 불가팀/기능별 사용량 모니터링
모델 전환각 팀이 코드 수정Router 설정만 변경
장애 대응각자 해결Router에서 폴백 처리

[💡 잠깐! 이 용어는?] LLM Gateway(Router): 여러 LLM 제공사의 API를 통합 인터페이스 뒤에 추상화하는 프록시 서버. 라우팅, 인증, 사용량 추적, 폴백 등을 중앙에서 관리한다.


Prompt Studio — 프롬프트에 버전 관리를 입히다

Prompt Studio는 AI 기능과 Agent를 만드는 작업대다. 프롬프트를 코드 저장소에 묻어두지 않고, 독립적인 생명주기로 관리하는 것이 핵심 가치다.

하나의 프로젝트 안에서 여러 버전을 동시에 관리할 수 있다. 프롬프트나 모델을 바꿀 때 각 변경 사항을 나란히 비교하며 전환이 가능하다. 배포도 UI에서 클릭 한 번이면 끝난다.

prompt-studio-versions.yml
project: "상품 설명 생성"
versions:
  - v1:
      model: "gpt-4o"
      prompt: "상품명과 카테고리를 기반으로..."
      status: "archived"
  - v2:
      model: "claude-3.5-sonnet"
      prompt: "중고거래 맥락에서 상품명과..."
      status: "production"
  - v3:
      model: "claude-3.5-sonnet"
      prompt: "구매자 관점에서 궁금해할 정보를..."
      status: "staging"

프롬프트 변경이 코드 배포 사이클에 묶이지 않는다는 건, PM이나 기획자도 직접 프롬프트를 실험할 수 있다는 뜻이다. 엔지니어의 도움 없이도 누구나 AI 기능을 지속적으로 개선할 수 있는 구조가 만들어진 것이다.

Agent 실행 과정은 Trace로 기록된다. 문제가 생겼을 때 단계별로 확인하며 디버깅할 수 있다. 택배 송장 번호로 배송 경로를 추적하듯, AI 응답의 생성 과정을 처음부터 끝까지 투명하게 들여다볼 수 있다.

[💡 잠깐! 이 용어는?] Trace(트레이스): AI Agent의 실행 과정을 단계별로 기록한 로그. 어떤 프롬프트가 전달되었고, 어떤 도구가 호출되었고, 최종 응답이 어떻게 생성되었는지를 시간 순서대로 추적할 수 있다.


KarrotChat — 만든 Agent가 일하는 현장

KarrotChat은 Prompt Studio에서 만든 Agent를 실제로 사용하는 채팅 인터페이스다. 사내용 ChatGPT라고 보면 된다. 다양한 Agent를 탐색하고 바로 대화를 시작할 수 있다.

플랫폼역할주요 사용자
LLM Router모든 AI API 호출의 관문엔지니어 (인프라 수준)
Prompt StudioAI 기능/Agent를 만들고 관리엔지니어 + PM + 기획자
KarrotChat만들어진 Agent를 사용모든 구성원

세 플랫폼이 형성하는 흐름이 깔끔하다. LLM Router가 인프라에서 모델 접근을 통합하고, Prompt Studio가 그 위에서 AI 기능을 조립하고, KarrotChat이 최종 사용자에게 전달한다. 인프라 → 개발 → 사용이라는 계층이 명확하게 분리되어 있다.


GenAI Labs — 실험과 평가가 순환하는 곳

AI 기능의 품질을 높이려면 실험과 평가의 반복이 필수다. GenAI Labs는 프롬프트 작성 → 테스트 실행 → 성능 평가 → 결과 분석까지 전 과정을 하나의 워크플로우로 묶는다.

genai-labs-loop.txt
[프롬프트 버전 작성]

[테스트 데이터셋 실행]

[자동 평가 (LLM-as-Judge)]

[결과 비교 대시보드]

[승인 → Production 배포]  or  [수정 → 재실험]

여기서 LLM-as-Judge 방식을 활용한다. LLM이 다른 LLM의 출력을 평가하는 구조인데, 수백 개 테스트 케이스에 대한 품질 평가를 사람이 일일이 수행하지 않아도 된다.

[💡 잠깐! 이 용어는?] LLM-as-Judge: LLM 출력의 품질을 평가할 때 사람 대신 다른 LLM을 평가자로 활용하는 방법. 대규모 평가를 자동화할 수 있지만, 평가 기준을 정밀하게 정의하는 것이 전제 조건이다.


직군의 벽을 허문 진짜 변화

당근 GenAI 플랫폼이 만든 가장 큰 변화는 기술이 아니라 조직 문화다. AI 실험이 더 이상 엔지니어만의 영역이 아니게 되었다.

기존GenAI 플랫폼 도입 후
PM이 AI 기능 요청 → 엔지니어가 구현PM이 직접 Prompt Studio에서 프로토타입
프롬프트 변경 = 코드 배포프롬프트 변경 = UI에서 버전 전환
모델 변경 = API 코드 수정모델 변경 = LLM Router 설정 변경
AI 실험 결과 = 엔지니어가 수동 확인AI 실험 결과 = GenAI Labs 대시보드

비개발자 구성원들도 AI Show & Tell 해커톤에 참여해 직접 AI 도구를 만들어보는 문화가 정착됐다. 직군이라는 경계 없이 각자의 문제를 정의하고, 스스로 해결책을 실험하며, 실제 변화를 만들어내고 있다.


마무리

당근의 GenAI 플랫폼은 "AI를 잘 쓰는 몇 명의 엔지니어"가 아니라 **"모든 구성원이 AI를 활용할 수 있는 구조"**를 세우는 데 초점을 맞추고 있다. LLM Router로 인프라를 정리하고, Prompt Studio로 개발을 민주화하고, KarrotChat으로 사용을 일상화하는 3단계 전략이다. AI 기능 도입을 고려하는 조직이라면, 개별 기능을 하나씩 붙이기 전에 이런 플랫폼 레이어를 먼저 고민할 필요가 있다.

관심 있을 만한 포스트

세 번의 리모델링 — 당근페이가 아키텍처를 갈아엎은 진짜 이유

당근페이 백엔드가 Layered에서 Hexagonal을 거쳐 Clean Architecture + Monorepo로 진화한 과정과 각 단계의 트레이드오프를 다룬다.

Clean Architecture당근

Action-Reducer-State의 귀환 — 프론트엔드 패턴이 서버를 점령한 이유

프론트엔드에서 익숙한 Redux의 Action-Reducer-State 패턴을 서버 사이드에 적용한 당근마켓의 이벤트 소싱 라이브러리 Ventyd를 분석한다.

이벤트 소싱Redux

AI 코딩의 맹점 — Artifacts 없이 에이전트는 기억을 잃는다

PRD, ADR, TDD가 AI 코딩 워크플로우에서 왜 선택이 아닌 필수인지, 실전 구조와 함께 살펴본다.

AI 코딩Artifacts

Next-Translate 3.0 — Turbopack과 App Router를 위한 i18n 재건

1년간 공백 후 돌아온 Next-Translate 3.0이 Turbopack 지원, 비동기 params, App Router 안정화를 한 번에 처리하는 방법.

Next.jsi18n

V8 WasmGC 투기적 최적화 — 가상 메서드를 인라인으로 만드는 법

V8이 WasmGC의 가상 메서드 디스패치에 투기적 인라이닝을 도입해 Dart와 Java 앱에서 최대 8% 성능을 끌어낸 방법.

V8WebAssembly

Vinext — Vite 위에서 Next.js를 1주일 만에 다시 만든 이야기

Cloudflare가 AI와 함께 단 일주일, $1,100의 API 비용으로 Next.js 호환 프레임워크를 Vite 위에 구축한 과정.

VinextNext.js

Tsonic — TypeScript를 네이티브 바이너리로 컴파일하는 실험

TypeScript → C# → NativeAOT 파이프라인으로 네이티브 실행 파일을 만드는 Tsonic. 어떻게 동작하고, 어떤 한계가 있는지 살펴봤다.

TypeScriptNativeAOT

VS Code 팀의 AI 에이전트 병렬화 — 월간 릴리스를 주간으로 만든 워크플로우

VS Code 팀이 월간 릴리스에서 주간 릴리스로 전환한 비결. 에이전트 세션 병렬화, 자동화 파이프라인, 품질 게이트 설계 전반을 공개했다.

VS CodeAI