Claude Code vs Codex 2차: 여러 파일짜리 실무형 과제 3개를 3번씩 시켜 봤습니다
1차 실측에서는 작은 단일 파일 과제라 두 도구 모두 만점이었습니다. 이번에는 실제 서비스 코드에 가까운 작은 쇼핑몰 프로젝트(가격 계산·재고·주문·저장소, 6개 파일)를 만들고, 고객 신고처럼 증상만 알려 주는 버그, 명세서로 주어지는 기능, 동시에 주문할 때만 터지는 버그를 냈습니다.
실행일 2026-10-04
한눈에 보기
- 정답률: 이번에도 두 도구 모두 9번 실행 전부에서 숨긴 테스트를 모두 통과했습니다. 동시성 과제는 무작위 지연이 있어 실행마다 세 번씩 채점했는데, 한 번도 실패하지 않았습니다.
- 속도: 과제별 중앙값 기준 Codex(GPT-6.1 Sol)가 Claude Code(Claude Opus 5)보다 약 1.3~1.9배 빨랐습니다. 차이는 과제마다 24~42초였습니다.
- 토큰: 과제별 중앙값 기준 Claude Code의 입력 토큰(캐시 재사용 포함)은 Codex의 약 4~6배, 출력 토큰은 약 2.5~3.7배였습니다.
- 작업 습관: Codex는 버그 과제(T4)와 동시성 과제(T6)에서 6번 모두 회귀 테스트 파일을 새로 추가했고, 한 번은 README와 저장소 코드(store.js)까지 바꿨습니다. Claude Code는 9번 모두 테스트를 추가하지 않고 소스 파일만 고쳤습니다.
- 설계 선택: 동시성 과제에서 두 도구 모두 6번 전부 '주문 처리를 한 줄로 세우는' 전역 잠금으로 풀었습니다. 결과는 정확하지만, 서로 다른 상품의 주문도 차례를 기다리게 됩니다.
결과
시간은 3회의 중앙값, 괄호 안은 가장 빠른~가장 느린 값입니다.
| 과제 | 도구 | 통과(3회 모두) | 걸린 시간 | 입력 토큰 | 출력 토큰 | 바꾼 줄(+/−) | |
|---|---|---|---|---|---|---|---|
| T4 여러 파일 버그 수정 · Claude Code | T4 여러 파일 버그 수정 | Claude Code | 3/3 | 60.6s (59.7–75.2) | 564,618 | 4,495 | +6 / −5 |
| T4 여러 파일 버그 수정 · Codex CLI | Codex CLI | 3/3 | 36.3s (31.9–44.2) | 94,160 | 1,363 | +4 / −4 | |
| T5 명세 기반 기능 추가 · Claude Code | T5 명세 기반 기능 추가 | Claude Code | 3/3 | 90.1s (89.8–110.6) | 592,485 | 7,366 | +42 / −2 |
| T5 명세 기반 기능 추가 · Codex CLI | Codex CLI | 3/3 | 47.8s (47–49.3) | 95,745 | 2,002 | +41 / −2 | |
| T6 동시성 버그 + API 전환 · Claude Code | T6 동시성 버그 + API 전환 | Claude Code | 3/3 | 111.9s (104.4–147.4) | 660,107 | 9,554 | +87 / −16 |
| T6 동시성 버그 + API 전환 · Codex CLI | Codex CLI | 3/3 | 85s (79–93.1) | 162,193 | 3,818 | +49 / −18 |
입력 토큰에는 앞 단계 대화를 다시 읽는 캐시 재사용분이 대부분 포함됩니다. 두 CLI가 토큰을 세는 방식이 같지 않으므로 대략적인 규모 비교로만 보세요.
Claude Code가 보고한 'API 정가 환산 비용'은 이번 과제당 약 0.78~1.25달러였습니다. 구독 계정은 이 금액을 따로 내지 않고 요금제 사용 한도에서 차감됩니다. Codex는 같은 값을 보고하지 않아 비교하지 않았습니다.
과제 3개
T4 여러 파일 버그 수정
고객 신고 4건(엔화에 소수점이 붙음, 정확히 10개 사면 대량 할인이 안 됨, 15% 쿠폰에서 1센트 차이, 쿠폰 때문에 합계가 음수)만 ISSUES.md로 주고, 올바른 규칙은 README에서 찾게 했습니다. 원인은 money.js와 cart.js 두 파일에 흩어져 있습니다.
T5 명세 기반 기능 추가
README의 명세대로 부분 환불(refundOrder)을 구현하는 과제입니다. 반품으로 대량 할인 조건이 깨지면 환불액이 줄어드는 규칙, 쿠폰 재계산, 재고 복구, 여러 번 나눠 환불, 초과 환불 거부, 실패 시 아무것도 바뀌지 않아야 하는 조건을 숨긴 테스트로 확인합니다.
T6 동시성 버그 + API 전환
마지막 재고를 여러 사람이 동시에 사면 모두 성공해 재고가 음수가 되는 버그를 고치고, 기존 콜백 방식 호출을 유지하면서 await로도 쓸 수 있게 바꾸는 과제입니다. 숨긴 테스트는 20명 동시 주문, 여러 상품 주문의 교착 상태, 전부 아니면 전무, 오류 전달 방식을 확인합니다.
모든 실행에 쓴 지시문
아래 문장에서 'Task:' 뒤의 한 문장만 과제마다 바뀝니다. 1차 실측과 달리 'README.md와 다른 문서'를 읽으라고 했습니다.
This folder is a small Node.js project (ES modules, no dependencies). Read the code, README.md and any other docs, and the tests. Task: {task} Do not modify existing test files. When you are done, make sure `node --test` passes.- T4 여러 파일 버그 수정 —
Fix the bugs reported in ISSUES.md. README.md describes the correct pricing rules. - T5 명세 기반 기능 추가 —
Implement refundOrder in src/orders.js according to the Refunds section of README.md. - T6 동시성 버그 + API 전환 —
Fix the problems described in the Orders section of README.md (overselling, and supporting both the Promise and the callback style).
어떻게 쟀나
- 실행일 2026-10-04 (한국 시간 밤), Apple M1 Pro · macOS 26.6 · Node.js 22. 1차 실측과 같은 컴퓨터·같은 버전·같은 설정입니다.
- Claude Code 2.1.250 — 기본 모델 Claude Opus 5 (짧은 보조 작업에 Claude Haiku 4.5가 함께 호출됨). Codex CLI 0.159.2 — 모델 GPT-6.1 Sol, 추론 강도 medium.
- 두 도구 모두 운영자 개인 구독 계정으로 비대화형 모드(claude -p, codex exec)로 실행했고, 파일 수정과 node 실행은 자동 허용했습니다. 추가 비용 없이 기존 구독 안에서 실행했습니다.
- 과제마다 실행 순서를 바꿨습니다(1회차 Claude Code 먼저, 2회차 Codex 먼저, 3회차 Claude Code 먼저). 실행하는 동안 같은 컴퓨터에서 빌드 같은 무거운 작업은 하지 않았습니다.
채점 방법
- 과제마다 에이전트가 볼 수 있는 테스트 3개와, 채점할 때만 넣는 숨긴 테스트(9~12개)를 두었습니다. 숨긴 테스트는 운영자가 쓴 정답 코드로 먼저 검증했고, 동시성 과제의 정답 코드는 10번 반복 실행해 결과가 매번 같은지 확인했습니다.
- 채점 전에 test 폴더를 원본으로 되돌렸습니다. 에이전트가 새로 추가한 테스트 파일은 채점에 쓰지 않았습니다.
- 동시성 버그는 가끔만 드러날 수 있어, 모든 결과를 시간대를 바꿔 세 번씩 채점하고 가장 낮은 점수를 기록했습니다.
두 도구가 쓴 코드는 어떻게 달랐나
- T4: 두 도구 모두 money.js(엔화 소수 자릿수, 반올림)와 cart.js(10개 기준, 쿠폰 상한)의 버그 4개를 모두 찾았습니다. 바꾼 소스 줄은 Claude Code 5~9줄, Codex 4~5줄로 비슷했습니다. Codex는 세 번 모두 신고 내용을 재현하는 회귀 테스트 파일을 따로 만들었습니다.
- T5: 두 도구 모두 '남은 상품 가격을 처음 규칙으로 다시 계산해 빼는' 명세대로 구현했고, 추가한 소스 줄도 40~47줄로 비슷했습니다.
- T6: 두 도구 모두 6번 전부 주문 처리 전체를 하나의 대기열(전역 잠금)로 직렬화했습니다. Codex는 2·3회차에서 같은 저장소를 쓰는 여러 주문 서비스가 대기열을 공유하도록 저장소 단위로 잠금을 묶었고, 1회차에서는 저장소에 transaction 기능을 새로 넣고 README에 설명을 추가했습니다. Claude Code는 orders.js 한 파일 안에서만 고쳤습니다. 상품별로 잠금을 나누는 방식은 어느 쪽도 쓰지 않았습니다.
이 실측의 한계
- 프로젝트는 약 200줄, 6개 파일의 작은 코드입니다. 1차보다 실무에 가깝지만 실제 서비스 저장소보다 훨씬 작습니다.
- 두 도구 모두 만점이라 정확도 차이를 보여 주지 못했습니다. 더 큰 저장소나 요구사항이 모호한 과제에서는 결과가 달라질 수 있습니다.
- 걸린 시간은 서버 상태·네트워크에 따라 달라집니다. 같은 밤에 번갈아 실행해 영향을 줄였을 뿐 없애지는 못했습니다.
- Codex는 추론 강도 medium, Claude Code는 기본 설정입니다. 구독 사용 한도가 얼마나 줄었는지는 재지 않았습니다.
그래서 무엇을 쓸까
아래는 이 실측 결과에 근거한 운영자 의견입니다.
- 이번 규모의 실무형 과제에서도 결과물의 정확도 차이는 나타나지 않았습니다. 이미 내고 있는 구독에 포함된 도구를 먼저 쓰는 것이 합리적입니다.
- 빨리 돌려 보고 싶다면 이번에도 Codex가 1.3~1.9배 빨랐습니다.
- 변경 범위를 좁게 유지하고 싶다면 Claude Code가 유리했습니다(소스 파일만 수정). Codex는 회귀 테스트를 스스로 추가해 주지만, 요청하지 않은 README·저장소 코드까지 바꾼 경우가 있어 검토가 필요합니다.
- 동시성·성능처럼 설계 판단이 필요한 문제는 두 도구 모두 가장 단순한 정답을 골랐습니다. 처리량 같은 조건이 중요하면 지시문에 명시하세요.
18회 실행 기록 전부
| 과제 | 도구 | 회차 | 초 | 통과한 테스트 | 입력 토큰 | 출력 토큰 | 바꾼 줄(+/−) | |
|---|---|---|---|---|---|---|---|---|
| T4 · Claude Code · 회차 1 | T4 | Claude Code | 1 | 59.7 | 15/15 | 567,694 | 4,495 | +9 / −5 |
| T4 · Claude Code · 회차 2 | T4 | Claude Code | 2 | 75.2 | 15/15 | 496,174 | 4,638 | +5 / −5 |
| T4 · Claude Code · 회차 3 | T4 | Claude Code | 3 | 60.6 | 15/15 | 564,618 | 4,458 | +6 / −5 |
| T4 · Codex CLI · 회차 1 | T4 | Codex CLI | 1 | 44.2 | 15/15 | 95,606 | 1,850 | +5 / −5 |
| T4 · Codex CLI · 회차 2 | T4 | Codex CLI | 2 | 36.3 | 15/15 | 94,160 | 1,363 | +4 / −4 |
| T4 · Codex CLI · 회차 3 | T4 | Codex CLI | 3 | 31.9 | 15/15 | 89,421 | 1,168 | +4 / −4 |
| T5 · Claude Code · 회차 1 | T5 | Claude Code | 1 | 89.8 | 12/12 | 654,717 | 7,366 | +42 / −2 |
| T5 · Claude Code · 회차 2 | T5 | Claude Code | 2 | 90.1 | 12/12 | 585,062 | 7,327 | +47 / −2 |
| T5 · Claude Code · 회차 3 | T5 | Claude Code | 3 | 110.6 | 12/12 | 592,485 | 9,232 | +40 / −2 |
| T5 · Codex CLI · 회차 1 | T5 | Codex CLI | 1 | 49.3 | 12/12 | 95,745 | 2,054 | +40 / −2 |
| T5 · Codex CLI · 회차 2 | T5 | Codex CLI | 2 | 47 | 12/12 | 95,683 | 1,989 | +41 / −2 |
| T5 · Codex CLI · 회차 3 | T5 | Codex CLI | 3 | 47.8 | 12/12 | 116,203 | 2,002 | +43 / −2 |
| T6 · Claude Code · 회차 1 | T6 | Claude Code | 1 | 147.4 | 12/12 | 1,100,259 | 10,403 | +105 / −16 |
| T6 · Claude Code · 회차 2 | T6 | Claude Code | 2 | 111.9 | 12/12 | 660,107 | 9,554 | +87 / −16 |
| T6 · Claude Code · 회차 3 | T6 | Claude Code | 3 | 104.4 | 12/12 | 646,651 | 8,335 | +63 / −16 |
| T6 · Codex CLI · 회차 1 | T6 | Codex CLI | 1 | 85 | 12/12 | 173,381 | 3,818 | +64 / −25 |
| T6 · Codex CLI · 회차 2 | T6 | Codex CLI | 2 | 93.1 | 12/12 | 162,193 | 4,385 | +49 / −18 |
| T6 · Codex CLI · 회차 3 | T6 | Codex CLI | 3 | 79 | 12/12 | 157,801 | 3,694 | +44 / −17 |
과제·채점 파일 내려받기
과제 원본(쇼핑몰 코드), 숨긴 테스트, 정답 코드, 실행 스크립트, 18회 결과 요약(JSON), 실행별 diff를 묶었습니다.
coding-agents-round2-2026-10.zip 내려받기