본문으로 건너뛰기

Supabase Evals — 실제 백엔드 에이전트 벤치마크

중급

코딩 에이전트 리더보드는 대부분 테스트 스위트에 대한 풀 리퀘스트 diff를 측정합니다 — SWE-Bench와 그 유사 벤치마크들이 그렇습니다. 유용하긴 하지만, 이것은 Supabase 사용자가 실제로 하는 일이 아닙니다: 스키마를 만들고, 깨진 RLS 정책을 고치고, 실패한 Edge Function을 디버깅하고, 인증을 연결하는 일 말이죠. 2026년 8월 1일, Supabase는 코딩 에이전트를 이런 실제 작업에 대해 채점하는 벤치마크를 오픈소스로 공개했습니다. 실제 MCP 서버와 실제 CLI가 포함된 실제 컨테이너화된 Supabase 스택을 상대로 실행됩니다. Apache-2.0 라이선스이고, 노트북에서 로컬로 실행되며, 초기 점수만으로도 서로 다른 에이전트가 문서를 어떻게 활용하는지에 대해 놀라운 사실을 이미 말해줍니다. 이 페이지는 그것에 대한 실용적인 현장 안내서입니다.

What you'll learn
  • Supabase Evals가 SWE-Bench 스타일 벤치마크와 무엇이 다른지 이해하기
  • 에이전트 간 발견을 정직하게 읽기 — Opus 5, Sonnet 5, Kimi K3, GPT-5 라인업이 실제로 어디서 갈리는지
  • 같은 모델에서 스킬을 로드했을 때의 효과 확인하기 (전/후 비교)
  • 1시간 이내에 자신의 에이전트와 모델로 벤치마크를 직접 실행하기

Supabase Evals가 실제로 무엇인지

Supabase Evals는 github.com/supabase/evals에 있는 Apache-2.0 리포지토리 하나에 벤치마크, 평가 하네스, 공개 리더보드가 결합되어 있습니다. 이것이 존재하는 이유는 SWE-Bench 스타일 테스트가 백엔드 작업에 대해 잘못된 질문에 답하기 때문입니다 — "이 에이전트가 Python 테스트 스위트에 대해 등록된 GitHub 이슈를 닫을 수 있는가"를 측정하지만, 대부분의 실제 Supabase 작업은 실행 중인 시스템에 대한 운영 작업에 더 가깝습니다: RLS 정책이 유효한 요청을 거부하기 시작했다든가, 프로덕션에서 Edge Function이 500을 반환한다든가, 마이그레이션이 적용되지 않았다든가.

이전과 구별되는 세 가지 특징:

  • 목(mock)이 아닌 실제 스택. 모든 시나리오는 호스트 Docker 소켓을 마운트하는 새로운 Docker 샌드박스를 부팅하므로, supabase start가 로컬 스택을 형제 컨테이너로 실행합니다. 에이전트는 Management-API 호환 표면(@supabase/lite) 실제 MCP 서버, 그리고 실제 Supabase CLI와 통신합니다. 어떤 것도 스텁 처리되지 않습니다.
  • 결정론적 검사 우선, 필요한 곳에만 LLM-as-judge. 채점기는 결과 데이터베이스를 쿼리하거나, 배포된 Edge Function을 호출하거나, 생성된 파일에 대해 리포지토리 루트 vitest를 실행할 수 있습니다. LLM 판정은 자유 형식 답변("에이전트의 설명이 실제 근본 원인과 일치했는가?")에 대한 예비 장치이지, 주요 채점 방법이 아닙니다.
  • 재시도 1회, 그 후 확정. 최고 N개 중 선택은 없습니다. 이것만으로도 대부분의 에이전트 PR 벤치마크보다 숫자가 덜 우호적으로 나옵니다.

시나리오 그리드

2026년 8월 릴리스는 evals/<id>/ 아래에 38개의 eval 시나리오를 포함합니다. 결과를 의미 있게 슬라이스할 수 있도록 세 개의 축으로 조직됩니다:

  • 9개의 제품 — database, auth, storage, edge functions, realtime, cron, queues, vectors, data-api
  • 9개의 주제 — RLS, security, migrations, SQL, SDK, observability, self-hosting, tests, declarative-schema
  • 4개의 단계build(새로 만들기), deploy(배포하기), investigate(무엇이 잘못되었는지 파악하기), resolve(고치기)

각 eval은 PROMPT.md(에이전트가 보는 작업, 프론트매터 메타데이터 포함), EVAL.ts 채점기, 그리고 선택적으로 remote/(시드된 호스팅 프로젝트 상태 — SQL, 로그, 이미 배포된 함수)와 local/(에이전트의 샌드박스 워크스페이스로 복사되는 시작 파일)를 담은 디렉토리입니다. 시나리오는 합성 프롬프트가 아니라 실제 지원 티켓과 GitHub 이슈에서 나옵니다.

eval별로 선택되는 두 개의 런타임

모든 eval은 두 개의 모드 중 하나로 실행되며, 시나리오의 형태에 따라 자동으로 결정됩니다:

  • Tools 모드. 샌드박스 없음. 에이전트는 MCP/도구 표면(Management API, SQL, storage 등)을 받고, 답변은 결과 프로젝트 상태를 검사하여 채점됩니다. 플랫폼 내부에서 완전히 실행되는 eval에 사용됩니다(local/ 디렉토리 없음, interface: cli 없음).
  • Local-stack 모드. 실제 Supabase CLI가 설치된 새로운 Docker 샌드박스. 에이전트는 bash 도구와 파일 도구를 받으며, 형제 컨테이너로 생성되는 실제 로컬 스택에 대해 supabase init/start/db/test를 실행할 수 있습니다. 에이전트가 멈춘 후, 하네스는 docker cp로 워크스페이스를 밖으로 복사하고 호스트에서 vite/vitest를 실행해 채점합니다. local/ 워크스페이스가 존재하거나 interface: cli가 선언되었을 때 사용됩니다.

교묘한 부분: 호스트의 툴체인이 샌드박스가 생성한 것을 채점합니다. 채점기는 샌드박스 이미지 안에 있을 필요가 없습니다.

에이전트 간 발견 (2026년 8월)

초기 리더보드 실행은 Claude Opus 5, Claude Sonnet 5, Kimi K3, GPT-5.4/5.6 라인업 전반에 걸쳐 자사 에이전트(Claude Code, Codex, Claude API 실행기 실험)와 모델 중립적인 OpenCode를 겨루게 합니다. 아래 숫자는 초기 게시물이 가장 뚜렷한 결과를 보고한 build 단계에 대한 것입니다.

에이전트 + 모델Build (스킬 없음)Build (스킬 있음)
Claude Code + Opus 5100%100%
OpenCode + Kimi K3100%100%
Claude Code + Sonnet 578%100%
Codex + GPT-5.6 (Sol)89%100%
Codex + GPT-5.4 mini78%89%

두 가지가 두드러집니다:

  • Opus 5와 Kimi K3는 도움 없이도 build에서 최고 점수를 냅니다. OpenCode를 통해 실행되는 Kimi K3가 Claude Code를 통해 실행되는 Opus 5와 대등한 것은 백엔드 형태의 작업에서 오픈-웨이트 모델이 따라잡고 있다는 실제 신호입니다 — 일반적인 SOTA 주장이 아니라 특정하고 재현 가능한 것입니다.
  • 스킬은 소규모/중간 모델에서 큰 승수입니다. Supabase 스킬을 로드하면 Sonnet 5의 build 점수가 78%에서 100%로 올라가고, Postgres-best-practices 스킬의 적중률이 전체 스위트에서 ~10%에서 60%로 올라갑니다. Sonnet 5(또는 어떤 중간 모델이든)를 실행하고 있다면, 관련 스킬을 로드하지 않는 것은 20점 이상을 바닥에 남기는 것입니다.

아무도 예상치 못한 발견: 모델은 문서를 매우 다르게 사용합니다

릴리스에서 가장 흥미로운 단일 숫자는 점수가 아니라 행동입니다:

Codex / GPT-5.6은 시나리오당 대략 8개의 문서 페이지를 읽습니다. Claude Code는 약 2개를 읽으며 — 스킬이 로드되어 있어도 시나리오의 40% 미만에서 문서를 참조합니다.

두 에이전트는 같은 작업, 같은 MCP 도구, 같은 스킬을 보고 있었습니다. Codex는 반사적으로 행동하기 전에 문서를 가져옵니다. Claude Code는 더 자주 기억에서 시도하고 벽에 부딪혔을 때만 문서를 읽습니다. 어느 쪽도 "옳지" 않습니다 — Claude Code를 통한 Opus 5는 여전히 build에서 100%를 기록했습니다. 하지만 이것은 매우 다른 운영 방식이며, 두 에이전트가 다르게 느껴진다는 많은 일화적 보고를 설명해줍니다.

★ Insight ─────────────────────────────────────

  • 벤치마크 리포트는 보통 에이전트를 하나의 숫자로 축소합니다. Supabase Evals가 특이하게 가치 있는 이유는 에이전트의 행동을 계측한다는 것 — 얼마나 자주 문서를 읽는지, 어떤 스킬을 로드했는지, 몇 개의 도구를 호출했는지 — 그리고 그 행동이 점수가 아니라 이야기인 경우가 많다는 점입니다.
  • 여기서의 격차는 모델 격차가 아니라 하네스 정책 격차입니다. 다른 하네스에서 같은 기본 모델은 아마 다르게 행동할 것입니다. 하네스가 모델만큼 중요한 이유는 코딩 에이전트 CLI 비교를 참조하세요.
  • 결정론적 채점기와 재시도 1회(최고 N개 중 선택 없음)의 결합이 여기서의 숫자를 에이전트 간에 비교 가능하게 만드는 것입니다. 대부분의 공개 에이전트 리더보드는 재시도나 자기 일관성을 조용히 허용하는데, 이는 느리거나 약한 모델에 유리하게 작용합니다. ─────────────────────────────────────────────────

모든 에이전트에서 반복되는 세 가지 실수

모델과 관계없이 테스트된 모든 에이전트는 같은 세 가지 패턴에서 걸려 넘어졌습니다:

  • 선언적 스키마 대신 마이그레이션을 손으로 작성하기. 선언적 스키마 워크플로우는 더 새롭습니다. 훈련 데이터는 구식 create table 마이그레이션이 많아서, 프로젝트가 선언적으로 설정되어 있어도 에이전트는 기본값으로 그것을 선택합니다.
  • @supabase/server 대신 인증을 수동으로 검증하기. 에이전트는 정확히 이를 위해 존재하는 새로운 서버 측 헬퍼를 사용하지 않고, 쿠키 파싱과 세션 검사를 손으로 연결합니다.
  • 일관성 없는 문서 참조. 위와 같이 — 같은 에이전트가 한 시나리오에서는 문서를 찾아보고 다음 시나리오에서는 기억에서 시도하는데, 어느 쪽을 선택하는지에 대한 명확한 규칙이 없습니다.

이런 종류의 실패는 합성 벤치마크의 pass@1에서는 나타나지 않는데, 채점할 "틀렸지만 작동하는" 답이 없기 때문입니다 — 코드는 컴파일되고 단지 구식 패턴을 사용할 뿐입니다. 실제 컨테이너 eval은 이것들을 잡아내는데, 채점기가 생성된 프로젝트를 검사하고 "선언적 스키마를 사용했는가, 예/아니오"를 확인할 수 있기 때문입니다.

로컬에서 실행하기

Docker, pnpm, 그리고 채점하려는 제공자의 API 키가 필요합니다. 포트 54321–54329가 비어 있어야 합니다(먼저 로컬 supabase start 스택을 중지하세요). 전체는 노트북에서 실행되며, 작은 실행은 몇 분이면 끝납니다.

Guided walkthrough1 of 5
  1. 스킬은 서브모듈에 있습니다 — 일반 클론으로는 Supabase 에이전트 스킬이 누락됩니다. 처음에는 --recurse-submodules를 사용하세요.

서브모듈과 함께 리포지토리 클론

git clone --recurse-submodules https://github.com/supabase/evals.git
cd evals
pnpm install
cp .env.example .env

단일 eval을 단일 실험에 대해 실행

pnpm eval -- \
--eval resolve-dataapi-001-empty-results \
--experiment claude-code-sonnet-5

Head-to-head: 같은 모델, 스킬 켜기 vs 끄기

pnpm eval -- \
--experiment claude-code-sonnet-5 \
--experiment claude-code-sonnet-5-no-skills \
--suite benchmark

배포된 모든 실험에 대한 전체 벤치마크 스윕

pnpm eval -- \
--suite benchmark \
--experiment-suite benchmark,no-skills

pnpm export-results
pnpm web

실험의 해부 (자신만의 것을 추가할 수 있도록)

experiments/<name>.ts 아래의 실험 파일은 에이전트, 런타임, 모델을 하나의 비교 가능한 구성으로 연결하는 곳입니다. 그 분리는 의도적입니다: "Sonnet 5와 스킬 없는 Claude Code"는 "Sonnet 5와 스킬이 로드된 Claude Code"와 다른 실험이며, 둘 다 "Kimi K3와 OpenCode"와 다릅니다. 세 축 중 두 개를 고정하고 세 번째를 다양화할 수 있습니다.

리포지토리에 배포된 -no-skills 변형(예: claude-code-sonnet-5-no-skills.ts vs. claude-code-sonnet-5.ts)이 "스킬이 우리를 78%에서 100%로 끌어올렸다"는 주장을 감(感)이 아니라 측정 가능하게 만드는 것입니다.

커스텀 에이전트를 실행하고 있다면 — 자체 제작 루프, 내부 포크, 실험적 하네스 — 패턴은 이렇습니다: 에이전트를 선언하는 실험 파일을 작성하고, 샌드박스 eval도 원하면 localStack: localStackRuntime()을 옵트-인하고, benchmark 스위트에 대해 실행하세요. 여러분의 숫자는 다른 사람들의 것과 같은 표에 나타납니다.

게으르게 로드되는 스킬

두 런타임 모두 스킬에 대해 **점진적 공개(progressive disclosure)**를 사용합니다: 각 스킬의 이름과 설명만 항상 시스템 프롬프트에 자리 잡고 있고, 에이전트는 필요할 때 전체 지침을 가져옵니다. 그것이 "스킬 켜기"가 턴당 몇 개의 추가 토큰만 들면서도 점수를 20점 이상 올릴 수 있는 이유입니다 — 에이전트는 스킬이 관련 있다고 결정할 때만 스킬 본문에 대가를 지불합니다.

두 런타임은 본문을 가져오는 방식에서 다릅니다:

  • Local-stack(샌드박스) 모드. 스킬은 Vercel의 skills CLI(샌드박스 이미지에 내장, 로컬 skills/ 디렉토리에서 소싱 — 네트워크 사용 안 함)를 사용하여 .claude/skills/ 아래로 샌드박스에 설치됩니다. 작업이 일치하면 에이전트는 .claude/skills/<name>/SKILL.md와 그것이 참조하는 모든 파일을 파일 도구로 읽습니다.
  • Tools 모드. 파일시스템이 없으므로, load_skill 도구가 에이전트가 이름으로 호출할 때 스킬의 전체 지침을 반환합니다.

이것이 사용하는 새로 등장하는 에이전트 간 스킬 표준에 대한 맥락은 SKILL.md 오픈 표준을 참조하세요.

AILmanac 지도에서의 위치

  • 벤치마크 자체 → 이 페이지. Supabase Evals가 무엇을 측정하는지, 어떻게, 그리고 무엇을 발견했는지.
  • 에이전트 평가하기 — 자신의 스택에서 어떤 코딩 에이전트든 측정하기 위한 일반 플레이북.
  • 코딩 에이전트 CLI 비교 — 이야기의 하네스 부분(어떤 벤치마크와도 독립적인 프로그램으로서의 Claude Code vs. Codex vs. OpenCode).
  • 코딩용 Claude vs GPT vs Gemini모델 부분.

★ Insight ─────────────────────────────────────

  • 이런 벤치마크는 절대적이 아니라 방향적으로 가장 유용합니다. "Sonnet 5는 Supabase 스킬을 로드하면 22점을 얻었다"는 자신의 프로젝트로 전이됩니다. "Sonnet 5는 build에서 100%를 기록한다"는 반드시 그렇지 않습니다.
  • 리더보드를 읽은 후의 올바른 질문은 "어떤 에이전트가 이겼는가"가 아니라 **"이 벤치마크가 내 작업과 유사한 무엇을 테스트하는가"**입니다 — 그리고 그런 다음에는 그 슬라이스에 대한 하위 점수만 중요합니다. ─────────────────────────────────────────────────

빠른 자가 점검

Check yourself

0/5
  1. 무엇이 Supabase Evals를 SWE-Bench 스타일 벤치마크와 구조적으로 다르게 만드나요?
  2. 2026년 8월 릴리스는 Codex/GPT-5.6과 Claude Code가 같은 시나리오에서 하나의 *행동*에서 뚜렷하게 다르다고 보고합니다. 어떤 것인가요?
  3. Supabase 스킬을 로드하면 Sonnet 5의 `build` 점수가 78%에서 100%로 올라갑니다. 이것은 무엇을 가장 강하게 시사하나요?
  4. 같은 모델에 대해 '스킬 켜기' vs '스킬 끄기'를 공정하게 비교하고 싶습니다. Supabase Evals에서 올바른 기본 요소는 무엇인가요?
  5. 테스트된 모든 에이전트에서 보고된 세 가지 일관된 실패 중 *아닌* 것은 무엇인가요?

플래시카드

Enter 또는 스페이스 키를 눌러 카드를 뒤집습니다. 좌우 화살표 키로 카드를 이동할 수 있습니다.용어가 표시되었습니다.
1 / 7

출처 및 추가 자료