Code Mode는 MCP를 대체하지 않는다 (실제로 하는 일은 이렇다)

발행: (2025년 12월 22일 오전 10:37 GMT+9)
12 min read
원문: Dev.to

Source: Dev.to

에이전트 워크플로우의 “다이얼업 시대”

언젠가 우리는 아이들에게 에이전트를 기다려야 했다고 말할 것이지만, 그들은 그 시대를 알지 못할 것입니다. 왜냐하면 그들의 시대의 에이전트는 너무 빨라서요. 저는 OpenAI의 MCP 스티어링 위원회 멤버 Nick Coopergoose의 제작자 Bradley Axen과 이 이야기를 농담으로 나눴습니다. 두 사람 모두 현재 우리의 “다이얼업 시대” 에이전트 워크플로우가 얼마나 투박하고 실험적인지 이해하고 웃었습니다.

모델 컨텍스트 프로토콜 (MCP)

MCP는 에이전트를 일상 앱에 연결하는 능력이라는 새로운 표준을 도입함으로써 큰 변화를 일으켰습니다. 하지만 경험이 완벽한 것은 아니며—우리는 아직 이러한 도구들의 강력함과 모델 자체의 기술적 제약 사이의 균형을 찾아가고 있습니다.

Quick note: In goose we call MCP servers extensions. I’ll use extensions from here on out. (※ 이 문장은 원문 그대로 유지했습니다)

Why People Write Off MCP

많은 사용자가 지연이나 불안정성을 경험하지만, 종종 “툴 팽창(tool bloat)” 함정에 빠졌다는 사실을 깨닫지 못합니다. 좋은 경험을 위해 지켜야 할 “하지 말아야 할” 조언이 많이 있습니다. 예를 들어, goose 팀과 파워 유저들이 따르는 모범 사례는 다음과 같습니다:

한 번에 너무 많은 확장 기능을 켜지 마세요.
그렇지 않으면 세션이 더 빨리 악화되고, 환각이 증가하며, 작업 실행 속도가 느려집니다.

The “Too Many Extensions” Problem

첫 번째 사용자는 흥분해서 여러 확장 기능을 한꺼번에 켜는 경우가 많습니다:

“이거 정말 멋지다. GitHub, Vercel, Slack, 내 데이터베이스에 접근하려면 꼭 필요해…”

실제로 일어나는 일은 에이전트의 컨텍스트 창이 수백 개 토큰에 달하는 툴 정의로 가득 차게 된다는 것입니다. 각 툴 호출은 모델이 이러한 정의들을 “활성 메모리”에 모두 유지하도록 강제하며, 그 결과는 다음과 같습니다:

  • 눈에 띄는 성능 저하
  • 환각 증가
  • 플랫폼이 아직 본격적인 사용에 적합하지 않다고 생각하게 만드는 오류

Dynamic Extensions – A First Attempt at Mitigation

goose 팀은 처음에 동적 확장을 추가하여 이를 해결했으며, 이는 에이전트가 명시적으로 필요로 할 때까지 대부분의 도구를 대기 상태로 유지합니다. 이는 효율성을 크게 향상시키는 단계였지만, 많은 일반 사용자들이 거의 발견하지 못하는 다소 숨겨진 기능으로 남아 있었습니다.

나는 사람들이 수많은 활성 확장 목록을 가지고 작업하는 모습을 많이 지켜보며, 그들이 사용하지도 않는 도구에 토큰을 낭비하고 있다는 것을 깨달을 때마다 움찔했습니다.

코드 모드 – 확장 기능 부피 해결

코드 모드는 도구 제한 아이디어를 한 단계 더 진행합니다. 처음에는 Cloudflare 블로그 게시물에서 에이전트가 JavaScript/TypeScript를 작성해 어떤 도구를 호출할지 결정하고, 그 로직을 한 번의 실행으로 실행하도록 제안한 것을 보고 알게 되었습니다.

작동 방식

  1. 세 가지 기본 도구만 제공:

    • search_modules
    • read_module
    • execute_code
  2. 에이전트는 필요할 때마다 발견하고, 이러한 동작을 하나의 실행으로 연결하는 맞춤 스크립트를 작성하는 방법을 학습합니다.

코드 모드 개념이 소셜 미디어에 퍼졌을 때, 많은 사람들이 이것이 MCP를 대체한다 주장했지만 그렇지 않습니다. 코드 모드는 여전히 내부에서 MCP를 사용합니다—에이전트가 발견하고 실행하는 도구들은 여전히 MCP 도구입니다.

비유:

  • HTTP는 통신을 가능하게 하는 기본 프로토콜입니다.
  • REST는 HTTP 위에 구축된 아키텍처 패턴입니다.

마찬가지로, MCP는 에이전트가 도구에 연결하는 방식을 표준화하는 프로토콜이고, 코드 모드는 에이전트가 그 도구들을 보다 효율적으로 상호작용하는 패턴입니다. goose 생태계에서는 코드 모드가 MCP 서버(확장)로 취급됩니다.

확장으로서의 코드 모드

goose는 코드 모드 자체를 코드 실행 확장이라는 확장으로 만들었습니다. 활성화되면 다음을 수행합니다:

  • 다른 확장을 모두 감싸고
  • 이를 JavaScript 모듈로 노출하며
  • LLM이 수십 개가 아닌 세 가지 도구만 보도록 합니다

예시 스크립트

import { shell, text_editor } from "developer";

const branch = shell({ command: "git branch --show-current" });
const commits = shell({ command: "git log -3 --oneline" });
const packageJson = text_editor({ path: "package.json", command: "view" });
const version = JSON.parse(packageJson).version;

text_editor({
  path: "LOG.md",
  command: "write",
  file_text: `# Log

Branch: ${branch}

Commits:
${commits}

Version: ${version}`
});

Source:

실험: 코드 모드 vs. 코드 비활성 모드

코드 모드가 실제로 어떻게 작동하는지 이해하기 위해, 코드 모드 있음없음을 비교하는 실험을 진행했습니다.

  • 모델: Claude Opus 4.5

  • 활성화된 확장 기능: 8가지 확장 기능

  • 프롬프트:

    “현재 git 브랜치, 최근 3개의 커밋, 그리고 package.json의 버전을 포함한 LOG.md 파일을 생성해 주세요”

코드 비활성 모드

  • 에이전트가 데이터를 수집하고 파일을 작성하기 위해 다섯 번의 별도 도구 호출을 수행했습니다.
  • 모든 8개의 확장 기능 정의가 완전히 로드된 상태였기 때문에, 작업이 **전체 컨텍스트 창의 16 %**를 차지했습니다.
  • 이는 표준 워크플로우의 확장성 문제를 보여줍니다: 도구가 많아질수록 시스템이 불안정해지고 오류가 발생하기 쉽습니다.

코드 활성 모드

  • 에이전트가 탐색 도구를 사용해 필요한 모듈을 찾고, 전체 워크플로우를 처리하는 단일 통합 JavaScript 스크립트를 작성했습니다.
  • **컨텍스트 창의 3 %**만 사용되었습니다.

결과: 코드 모드를 사용하면 너무 많은 도구로 인한 무게 때문에 모델 성능이 저하되거나 환상이 나타나기 전에 더 긴 세션을 유지할 수 있습니다.

주요 내용

  • Code Mode가 작업을 반드시 더 빠르게 실행하는 것은 아닙니다; 주요 장점은 컨텍스트‑윈도우 효율성입니다.
  • 모델이 활성 메모리에 유지해야 하는 도구 정의 수를 줄임으로써, Code Mode는 성능 저하를 지연시키고 환각을 감소시킵니다.
  • 이것은 MCP 위에 구축된 패턴이며, 대체가 아닙니다.

자신의 goose 세션에서 Code Mode를 자유롭게 실험해 보고, 단일 컨텍스트 윈도우에 얼마나 더 많이 넣을 수 있는지 확인해 보세요!

Code Mode Overview

“Code Mode helps us take a step forward in building agents that can scale to handle all your tools without falling apart.” – MCP team

Why Code Mode Can Feel Heavy

  • Extra round‑trips – LLM이 적절한 도구를 찾고, JavaScript를 생성한 뒤 실행해야 합니다.
  • Overhead vs. direct calls – 한두 개의 도구만 필요할 경우, 코드를 작성하고 실행하는 것이 단순히 도구를 호출하는 것보다 더 많은 작업이 될 수 있습니다.

When Code Mode Shines

  • Many extensions enabled – 방대한 툴박스를 조정할 수 있습니다.
  • Multi‑step orchestration – 여러 순차적인 작업이 필요한 복잡한 워크플로.
  • Long‑running sessions – 시간 경과에 따라 일관성을 유지합니다.

When It Doesn’t Make Sense

  • 1‑2 extensions만 사용합니다.
  • 작업이 single‑step입니다.
  • Speed matterscontext longevity보다 중요합니다.

Recent Improvements (Goose v1.17.0 – December 2025)

AreaWhat’s new
Better UX원시 JavaScript 대신 호출되는 도구를 표시합니다.
Better reliability타입 시그니처를 정제하여 LLM이 처음 시도부터 올바른 코드를 생성하도록 했습니다.
More capabilities서브‑에이전트가 Code Mode 내에서 동작할 수 있게 했습니다.

Looking Ahead

팀은 Code Mode를 지속적으로 개선하여 더 사용자‑친화적이고 강력하게 만들고 있습니다. 플랫폼이 진화함에 따라 에이전트는 점점 더 무한해져, 간단한 작업에 도구를 “제한”할 필요가 없어집니다.

Get Started

  1. Enable the “Code Execution” extension in Goose v1.17.0 or later.
  2. Join our Discord to share your experience and learn from the community.

Ready to try Code Mode? Give it a spin and see how it transforms your workflows!

Back to Blog

관련 글

더 보기 »