AI 개발

AI Coding Agent가 소프트웨어 개발을 바꾼다: Claude Code와 GPT Agent는 JSON으로 어떻게 도구를 호출하고 코드를 실행하는가

약 15분

2026년의 소프트웨어 개발은 「사람이 IDE에서 자동완성을 두드리는」 모습과 점점 닮지 않는다.Claude Code는 터미널에서 저장소를 읽고, 파일을 고치고, 테스트를 돌린다. GPT Agent / Codex는 세션에서 샌드박스를 열고, 패치를 쓰고, 결과를 돌려준다.제품 껍질은 다르다. 뼈대는 같다: 모델은 JSON만 채우고, 실행하는 것은 호스트.이 글은 그 호출 사슬을 열고, 매일의 개발이 어떻게 다시 쓰이는지를 적는다.

읽기 전 한눈에

개념 한 줄 어디에 떨어지나
Coding Agent 저장소를 읽고, 파일을 고치고, 명령을 돌리는 런타임 Agent loop
Claude Code 터미널의 로컬 Coding Agent tool_use JSON
GPT Agent 세션 / 샌드박스의 코딩과 컴퓨터 사용 tool_calls / code
JSON 이름, 인자, 결과의 계약 Schema / payload

분담을 먼저 기억한다: 모델이 객체를 채우고, 호스트가 실행하고, 루프가 패치와 테스트를 이어 가게 한다. 상표를 바꿔도 이 JSON 호출 사슬은 그대로다.

Coding Agent는 「코드를 쓰는 채팅창」이 아니다

자동완성 모델은 다음 한 줄을 채운다. 채팅 모델은 함수를 설명한다. Coding Agent는 세 번째 것이다: 모델을 루프에 넣는 런타임——저장소 상태를 관찰하고, 다음 수를 제안하고, 외부 도구를 부르고, 결과를 소화한 뒤, 계속할지, 멈출지, 사람에게 넘길지를 정한다.

2026년에 납품할 수 있는 Coding Agent는 대개 세 점 세트다:

  • 모델: 텍스트나 구조화 객체만 낸다. 디스크에는 손대지 않는다.
  • 도구 목록: 읽기, 고치기, 실행, 검색. 때로는 브라우저나 MCP.
  • 호스트: JSON을 파싱하고, 문을 걸고, 실제로 실행하고, 결과를 다음 턴에 다시 쓴다.

아직 Agent, Tool Calling, Function Calling을 한 단어로 접고 있다면, 먼저 AI Agent 완전 가이드를 읽는다. 이 글이 다루는 것은 한 가지 제품 형태뿐이다: 실제 저장소를 상대로 일하는 Coding Agent.

바뀐 것은 편집기가 아니라 루프다

십 년 동안 IDE 자동완성은 타이핑을 짧게 했다. 이 년 동안 채팅창은 결함을 가깝게 했다. Coding Agent가 바꾸는 것은 세 번째다: 첫 실행 가능한 패치를 누가 쓰는가.

전형적인 하루는 더 이상 「사람이 다 쓰고, CI가 검사한다」가 아니다. 더 흔한 것은:

  1. 사람이 의도를 쓴다: 이 실패 테스트를 고친다, 이 API에 필드를 더한다.
  2. Agent가 루프를 돈다: 저장소를 읽고, 심볼을 찾고, 파일을 고치고, 테스트를 돌리고, 궤적을 도구 호출로 남긴다.
  3. 사람이 diff와 궤적을 본다: 모든 키를 처음부터 치지 않는다. 타입, 테스트, 권한은 남는다.

「AI가 일을 대신한다」는 이야기가 아니다. 초고가 루프에서 나오게 된 것이다. 사람이 모양과 부작용의 문에 선다. 도구와 워크플로를 Schema로 모으는 이야기는 JSON Schema와 AI Agent 워크플로.

루프가 하는 일은 하나다: JSON을 채우고, JSON을 읽는다

제품 페이지는 「자율적으로 코드를 쓴다」고 적는다. 공학에서는 한 턴이 대개 네 홉이다:

  1. 관찰: 워크스페이스, 테스트 출력, 직전 도구 결과가 컨텍스트에 들어온다.
  2. 제안: 모델은 도구 이름과 인자 객체를 낸다. 스스로 open() 하지 않는다.
  3. 실행: 호스트가 검증하고, 명령을 돌리거나 파일을 고친다. 부작용은 여기서 일어난다.
  4. 다시 쓰기: stdout, 패치, 종료 코드가 다음 보이는 객체가 된다.

네 홉에서 문을 하나 빼면, JSON은 명령이다. 넷이 갖춰져야 재생 가능한 개발 세션이 된다. 왜 AI에 JSON Schema가 필요한가는 이미 썼다: Schema는 구경이며, 프롬프트의 「JSON을 반환해」가 아니다.

Claude Code: 터미널의 도구 면

Claude Code는 Anthropic의 로컬 Coding Agent다. 터미널에서 현재 저장소를 상대로 말한다. 모델 쪽은 Messages API 콘텐츠 블록이다. 공학적으로 매일 보는 것은 한 줄기의 tool_use다.

기본 도구 면은 좁다. 좁아서 심사할 수 있다:

  • Read / Glob / Grep: 먼저 보고, 그다음 고친다.
  • Edit / Write: 정확한 치환이나 파일 전체 쓰기로 저장소를 바꾼다.
  • Bash: 테스트를 돌리고, 의존성을 넣고, 스크립트를 실행한다.
  • MCP: 외부 시스템을 같은 JSON 도구 표에 넣는다. 세부 사항은 MCP Tool Schema vs Function Calling.

모델이 보내는 것은 「이 파일을 고쳐 달라」는 산문이 아니다. 검증할 수 있는 객체다:

{
  "type": "tool_use",
  "id": "call_read_1",
  "name": "Read",
  "input": {
    "path": "src/billing/refund.py"
  }
}

호스트가 일을 마치면 돌려주는 것도 객체다. stdout은 길어도 된다. 입구는 여전히 tool_result이지, 채팅 거품이 아니다:

{
  "type": "tool_result",
  "tool_use_id": "call_bash_4",
  "content": {
    "stdout": "12 passed, 1 failed",
    "exit_code": 1
  }
}

auto-mode와 확인 문이 「이 홉이 사람을 기다릴지」를 정한다. 문을 끄면 루프는 Bash를 스스로 끝낸다——개발이 빨라진 이유이고, 사고 반경이 커진 이유이기도 하다. 보안 면은 Claude 사건과 도구 JSON와 AI Agent 보안과 JSON 검증.

GPT Agent: 세션, 샌드박스, Function Calling

OpenAI 쪽은 이름이 더 많다: ChatGPT Agent, Codex, Responses API, GPT-6 Astra. 껍질은 다르다. 호출 모양은 여전히 Function Calling이다. tools[]로 선언하고, tool_calls로 제안하고, arguments에 문자열화한 객체를 넣는다.

코딩 관련 호출은 이렇게 보인다:

{
  "tool_calls": [{
    "id": "call_7f2a",
    "type": "function",
    "function": {
      "name": "run_code",
      "arguments": "{\"language\":\"python\",\"code\":\"from pathlib import Path\\nprint(Path('src').exists())\"}"
    }
  }]
}

Claude와의 차이는 「코드를 쓸 수 있는가」가 아니다. 도구 면을 어떻게 조립하는가다:

  • 코드 인터프리터 / 샌드박스: 여러 단계 계산을 한 번의 run_code나 python으로 접어 왕복을 줄인다.
  • 컴퓨터 사용: 브라우저와 데스크톱 조작은 다른 구조화 동작이다.
  • Codex / CLI: 저장소급 Coding Agent에 더 가깝다. 표는 다시 읽기, 고치기, 실행이 된다.

GPT-6 Astra 가이드는 같은 규율을 이미 적었다: 「도구를 고르고 → 부르고 → 객체를 돌려주는」 일을 더 안정적으로 끝낸다. 개발자에게 이는 패치와 테스트 출력이 JSON 궤적에서 재구성되어야 한다는 뜻이다. 「이미 고쳤다」는 한 문장으로는 부족하다.

코드는 실제로 어디서 도나? 모델 안이 아니다

가장 틀리기 쉬운 한 문장이다. 대형 모델은 Python을 실행하지 않고, 프로세스도 spawn하지 않는다. 내는 것은:

  • 도구 이름: Bash, Read, python, apply_patch.
  • 인자 객체: command, path, old_string, code.
  • 가끔은 패치 본문: 먼저 필드로 나타나고, 호스트가 디스크에 내린다.

실제로 코드를 돌리는 것은 호스트다: 로컬 프로세스, 컨테이너, 또는 클라우드 샌드박스. 파일시스템과 네트워크 권한은 호스트 정책이지, 모델 가중치가 아니다. 조인 도구 Schema는 이렇게 생긴다:

{
  "name": "Bash",
  "description": "Run a shell command in the workspace",
  "inputSchema": {
    "type": "object",
    "properties": {
      "command": { "type": "string" },
      "timeout_ms": { "type": "integer", "maximum": 120000 }
    },
    "required": ["command"],
    "additionalProperties": false
  }
}

additionalProperties: false는 까다로움이 아니다. 넓은 object는 모델이 대상 호스트나 추가 스크립트를 더 넣게 한다. 비밀, Cookie, 내부 베이스는 호스트에 남긴다. 인자 객체에 넣지 않는다.

Claude Code와 GPT Agent: 사는 껍질이 같지 않다

누가 더 똑똑한가가 아니다. 루프를 어디에 걸 것인가다:

차원 Claude Code GPT Agent / Codex
입구 로컬 터미널, 저장소를 상대로 세션, 샌드박스, 또는 CLI
호출 모양 tool_use / tool_result tools[] / tool_calls
기본 도구 Read, Edit, Bash, Grep, MCP 함수, 코드 인터프리터, 컴퓨터 사용
실행 세계 당신 기계, 또는 거는 샌드박스 벤더 샌드박스, 또는 로컬 Codex
무엇을 유지하나 권한 문, MCP, 세션 궤적 도구 Schema, Responses 궤적

상표를 바꿔도 루프는 같다. 안정시켜야 할 것은 도구 계약과 실행 세계이지, 누군가의 채팅 껍질이 아니다. DeepSeek는 호스트를 교체 가능한 인프라로 만들었다. DeepSeek Harness와 Coding Agent 인프라를 본다.

개발자가 볼 것은 궤적이지, 거품이 아니다

Agent가 코드를 쓴 뒤, 심사 대상은 동료 PR과 같아야 한다: diff, 테스트, 권한. 늘어난 한 층은 도구 궤적이다.

  • tool_use / tool_calls를 포맷하고, 이름과 인자가 생각한 그 홉인지 본다.
  • JSONPath 추출로 name, command, path를 뽑는다. 산문을 눈으로 훑지 않는다.
  • 지난주 통과한 궤적과 JSON Diff한다. 루프가 떠내려갔다면, 모델을 탓하기 전에 도구 표와 인자 모양을 본다.
  • 실패한 테스트의 stdout은 궤적에 넣는다. 「고쳤다」만으로는 기록이 아니다.
  • 운영 비밀, 고객 덤프, 내부 URL을 공개 포맷터에 붙이지 않는다. JSONSort는 브라우저 로컬에서 돌고 업로드하지 않는다. 이런 객체를 보기에 맞다.

궤적을 다시 만들 수 있어야 세션을 복기할 수 있다. 그것이 Coding Agent를 팀 흐름에 넣는 전제이지, 장식이 아니다.

흔한 오해

  • Coding Agent를 더 똑똑한 자동완성으로 본다. 자동완성은 한 줄을 고친다. Agent는 루프를 고친다.
  • 모델이 스스로 코드를 실행했다고 믿는다. 실행권은 호스트에 있다.
  • 도구 JSON은 안 보고 마지막 파일 diff만 본다. 명령은 이미 돌았을 수 있다.
  • Bash에 백지 수표를 준다. cwd, 타임아웃, 네트워크 문이 없으면 루프는 운영 사고다.
  • prompt로 Schema를 대신한다. 구경은 검증할 수 있어야 한다.
  • 세션을 채팅 거품으로 저장한다. tool_result가 없으면 재생 가능한 개발 기록이 없다.

FAQ

팀에는 Claude Code와 GPT Agent 중 무엇이 맞나?

실행 세계를 본다. 저장소가 당신 기계에 있고 MCP와 로컬 테스트가 필요하면 Claude Code나 Codex CLI가 가깝다. 세션 안 샌드박스 계산이나 컴퓨터 사용이면 GPT Agent / Responses. 먼저 도구 Schema를 잠그고, 그다음 껍질을 고른다.

모델이 내가 동의하지 않은 명령을 몰래 돌릴 수 있나?

모델은 제안만 할 수 있다. 돌릴지는 호스트의 확인 문, allowlist, 네트워크 격리에 달렸다. auto-mode는 어떤 종류의 JSON을 미리 승인한 것이다.

일반 Function Calling과 무엇이 다른가?

모양은 같고 반경이 다르다. 고객 지원 조회는 대개 읽기 전용이다. Coding Agent의 도구는 디스크를 바꾸고 프로세스를 돌린다. 그래서 Schema, 타임아웃, 감사가 더 촘촘해야 한다.

왜 더 나은 prompt가 아니라 JSON을 강조하나?

부작용은 객체를 파싱한 뒤에 일어난다. prompt는 모델이 무엇을 채울지에 영향을 준다. Schema와 호스트가 무엇을 실행해도 되는지를 정한다. 디버깅에서는 형용사보다 객체가 더 값지다.

Agent가 운영에 바로 push하게 해도 되나?

안 된다. 분기를 내고, 테스트를 돌리고, 궤적을 남기게 한다. 병합과 배포는 사람의 전략 문으로 남긴다. 루프는 초안을 쓰고, 문이 내보낸다.

결론

AI Coding Agent가 소프트웨어 개발을 바꾸는 방식은 편집기가 다음 줄을 더 잘 맞히는 것이 아니다. 「저장소를 읽는다 → 도구 JSON을 채운다 → 호스트가 실행한다 → 결과를 다시 쓴다」를 기본 루프로 만드는 것이다. Claude Code와 GPT Agent는 두 가지 껍질일 뿐이다.

오늘부터, 어느 모델이 코드를 더 잘 쓰는지 덜 논쟁한다. 먼저 도구 Schema, 실행 세계, 세션 궤적을 저장소에 넣는다. 모델은 바뀐다. 이 JSON 호출 사슬을 먼저 안정시켜야 한다.

더 읽을거리

업데이트 기록: 최초 게시