Kimi K3 vs Opus 5 게임 만들기 10분 $0.70 vs 43분 $14.90

이 블로그 첫 글에서 이렇게 썼습니다.

“중국 쪽에서는 Kimi K3랑 GLM 5.2까지 나왔죠. K3도 곧 공개될 예정입니다. 오픈웨이트라는 건 모델 파일을 그냥 다운받을 수 있다는 뜻입니다. 즉, 이론상으로는 집에서 공짜로 돌릴 수 있다는 얘기죠. 집에 데이터센터가 있다면요.”

지금까지 이 블로그는 젬마4 12B, gpt-oss 20B, Qwen3.6 35B-A3B까지 RTX 3060 12GB에 올려봤습니다.
그런데 K3는 2.8조 파라미터입니다. 3060으로는 죽어도 안 됩니다.

그럼 kimi K3를 API로 부르면 얼마나 할까요?
그리고 클로드 오퍼스 5(Opus 5)랑 비교하면 무엇이 더 나은 모델일까요? Kimi K3 vs Opus 5

결론부터 말하면 비용이 21배 차이 났습니다. 과연 결과물의 완성도는 어땠을까요 ?
두 결과물 다 이 글에서 직접 플레이해보실 수 있으니, 먼저 플레이 해보고 판단해보세요.

실험 설계 Kimi K3 vs Opus 5

두 모델에게 토씨 하나 안 틀린 같은 프롬프트를 줬습니다.

2D 횡스크롤 액션 RPG 게임을 만들어라.

- game.html 파일 하나. 외부 라이브러리, 이미지, 사운드 파일 사용 금지.
- Canvas로 직접 그린다.
- PC와 모바일 양쪽에서 플레이 가능해야 한다.
- iframe에 넣어도 정상 동작해야 한다.
- UI는 한국어. 기존 상용 게임의 이름과 디자인은 쓰지 않는다.

일부러 짧게 썼습니다.
요구사항을 길게 나열하면 “지시를 잘 따랐나”를 재게 되는데
저는 시키지 않은 걸 알아서 챙기는가가 궁금했거든요.

조건

Opus 5 클로드 코드 v2.1.224, 추론 강도 xhigh

Kimi K3 오픈코드 1.18.15 + Together AI, 추론 강도 high

빈 폴더에서 시작

프롬프트 단 한 번, 후속 지시 없음. “이거 고쳐줘”도, “이것도 넣어줘”도 안 했습니다

클로드 코드 v2.1.224 시작 화면과 Opus 5 1M 컨텍스트 표시

추론 강도는 /effort 명령으로 xhigh로 맞췄습니다. 그 상태에서 프롬프트 7줄을 그대로 붙여넣었습니다.

클로드 코드에 2D 횡스크롤 RPG 프롬프트 입력, Opus 5 effort는 xhigh 설정
프롬프트 입력. effort는 xhigh

다음은 오픈코드입니다.
모델 목록에서 Together AI 항목의 Kimi K3를 골랐습니다.
아래쪽에 K2.6도 보이는데, 이번엔 최신인 K3로 갑니다.

오픈코드 모델 선택 화면에서 Together AI의 Kimi K3 선택
오픈코드는 Kimi K3

여기서 추론 강도를 정합니다.

Kimi K3 추론 강도 선택 화면, high 위에 max가 남아 있다


Default / low / high / max 네 단계 중 high를 골랐습니다.
위에 max가 하나 더 남아 있죠. 클로드 코드도 xhigh 위에 max와 ultrathink가 더 있습니다.
등급 이름과 단계 수가 달라 완전한 등가는 아니지만, “최대치는 쓰지 않는다”는 같은 기준을 양쪽에 적용했습니다.

그리고 똑같은 프롬프트를 입력했습니다. 파일명만 game2.html로 다르고 나머지는 한 글자도 안 바꿨습니다.

오픈코드 Kimi K3에 Opus 5와 동일한 프롬프트 7줄 입력

그리고 하나 미리 밝힙니다.
이건 순수한 모델 비교(Kimi K3 vs Opus 5)가 아닙니다.
클로드 코드와 오픈코드는 시스템 프롬프트도 툴 구성도 다릅니다.
정확히는 “클로드 코드+Opus 5” 대 “오픈코드+K3” 조합 비교입니다.

Kimi K3 vs Opus 5, 10분 23초 vs 43분 24초

왼쪽이 Opus 5, 오른쪽이 K3입니다. 이 한 장이 이 실험을 요약합니다.

Kimi K3 vs Opus 5 동시 진행 화면, 왼쪽 Opus 5는 32분째 작업 중이고 오른쪽 Kimi K3는 이미 완료

왼쪽 하단을 보면 Opus는 32분 32초 경과, 165.7k 토큰, $6.78인데 아직도 돌고 있습니다.

Kimi K3가 10분 23초 만에 2D 액션 RPG 별빛 검사를 완성한 화면

「별빛 검사」라는 제목을 붙였네요.
조작법, RPG 요소, 스테이지 구성, 기술 요건 충족 여부까지 정리해서 보고합니다.
하단에 Build · Kimi K3 · 10m 23s.

Opus 5가 45분 53초 만에 잿빛 균열을 완성하고 비용 14.76달러를 표시한 화면
Opus 5 완성 45m 53s

화면에 찍힌 45분 53초는 벽시계 기준이고, 나중에 /cost로 확인한 실제 API 처리 시간은 43분 24초였습니다.

재밌는 건 비용 곡선입니다.
32분 시점에 $6.78이던 게 최종 $14.90이 됐습니다.
마지막 11분에 두 배가 됐죠.

직접 해보세요

둘 다 프롬프트 한 번으로 나온 결과물입니다.
중간에 “여기 고쳐줘” 같은 후속 지시는 한 번도 안 했습니다. 위에 적은 7줄이 제가 입력한 전부예요.

어느 쪽이 어느 모델인지는 아직 안 알려드립니다. 둘 다 만져보고 판단해보세요.

A안

조작
이동 ← → / 점프 Space(2단) / 공격 J 또는 Z / 대시 Shift / 스킬 1~4 / 물약 Q E / 메뉴 Esc
※ A안은 클릭이 가끔 씹힙니다. 이유는 아래에서 설명합니다. 스킬은 1번만 처음부터 열려 있습니다.
게임 화면을 한 번 클릭한 뒤 조작하세요. (모바일은 터치 버튼)

PC에서 키보드로 조작하려면 아래 “전체화면으로 플레이”를 눌러 새 창에서 열어주세요.
아래는 미리보기 화면입니다. 모바일에서는 터치 버튼으로 여기서 바로 조작됩니다.
※ 게임 화면 위에서는 마우스 휠 스크롤이 게임에 먹힙니다. 화면 바깥쪽에서 스크롤해주세요.

▶ A안 전체화면으로 플레이

B안

조작
이동 ← → / 점프 Space(2단) / 공격 Z / 스킬 X / 포션 C / 일시정지 P
게임 화면을 한 번 클릭한 뒤 조작하세요. (모바일은 터치 버튼)

PC에서 키보드로 조작하려면 아래 “전체화면으로 플레이”를 눌러 새 창에서 열어주세요.
아래는 미리보기 화면입니다. 모바일에서는 터치 버튼으로 여기서 바로 조작됩니다.

▶ B안 전체화면으로 플레이

어느 쪽이 더 재밌었나요? 댓글로 남겨주세요. 정답은 바로 아래에 있습니다.

정답 공개, Kimi K3 vs Opus 5

A = Opus 5 「잿빛 균열」
B = Kimi K3 「별빛 검사」

잿빛 균열 (Opus 5)별빛 검사 (K3)
스테이지5막, 시드 기반 절차 생성1개 고정 맵 (4,500px)
적 / 보스7종 / 5종 (각 3페이즈)3종 / 1종
장비3부위 × 5등급 + 접두어 11종없음
능력치힘·민첩·체력·정신 자유 분배자동 상승
스킬4종 × 5레벨 강화화염구 1종
저장localStorage없음
파일3,376줄 / 143KB1,175줄 / 40KB
Opus 5가 만든 잿빛 균열 PC 플레이 화면, 1막 속삭이는 숲
Opus 5 「잿빛 균열」 1막 속삭이는 숲


망토가 달린 기사가 검을 휘두르고, 뒤로는 산과 나무가 각각 다른 속도로 흘러갑니다.
화면 하단의 원 네 개가 스킬 슬롯인데 1번만 켜져 있습니다. 나머지는 레벨 3, 6, 10에서 열립니다.

Kimi K3가 만든 별빛 검사 PC 플레이 화면, 슬라임에게 데미지 12
K3 「별빛 검사」 PC


이쪽은 훨씬 단순합니다.
대신 화면에 정보가 다 나와 있습니다.
좌측 상단에 HP·MP·레벨·공격력, 우측 상단에 골드와 포션 개수. 그리고 바닥에 세워진 나무 표지판 두 개가 보입니다.

Kimi K3 vs Opus 5, 비용 21배, 그런데 출력은 8배

Opus 5Kimi K3
비용$14.90$0.70
API 시간43분 24초10분 23초
요청 수—8
신선 입력 토큰238194.9K
캐시 읽기14.8M—
출력 토큰211.0K25.8K
생성 속도—143.73 tok/s
첫 토큰까지—25.9초
코드 변경+3,570 / −66줄—

먼저 정직하게 밝힙니다.
$14.90은 클로드 Max 구독으로 쓴 것의 API 환산액입니다.
실제로 카드에서 빠져나간 돈은 0원이에요. $0.70은 Together AI 실제 청구액이고요.
성격이 다른 숫자를 나란히 놓은 겁니다.
그래도 “같은 일을 시켰을 때 토큰이 얼마나 드는가”라는 질문에는 답이 됩니다.

Kimi K3 vs Opus 5, 입력 238토큰, 캐시 읽기 1,480만 토큰

이게 21배의 정체입니다.

제가 실제로 타이핑한 건 7줄짜리 프롬프트, 238토큰이 전부입니다.
그런데 캐시 읽기가 1,480만 토큰입니다.

에이전트가 파일을 한 번 고칠 때마다 그 시점의 파일 내용이 통째로 다시 입력으로 들어갑니다.
Opus는 Update(game.html)을 스무 번 넘게 했고, 3,000줄짜리 파일을 그때마다 다시 읽었습니다.
K3는 요청 8번으로 끝냈고요.

Kimi K3 vs Opus 5, 출력 8배인데 파일은 2.9배

출력 토큰은 211.0K 대 25.8K로 8.2배인데, 최종 파일 줄 수는 2.9배밖에 차이 안 납니다.
출력 토큰에는 세 가지가 섞여 있습니다.

  • 사고 답을 내기 전에 속으로 생각하는 과정
  • 중간 코드 썼다가 다음 수정에서 덮어써진 것
  • 최종 코드 파일에 남은 것

비용은 셋 다에 나가는데, 파일에 남는 건 마지막 하나뿐입니다.

K3는 첫 응답 전에 44.1초, 두 번째에 54.7초를 생각했습니다.
그 생각은 화면에 Thought: 44.1s라고 뜨고 사라집니다. 파일에는 한 글자도 안 남죠.

Opus는 여기에 하나가 더 붙습니다. Update(game.html)을 스무 번 넘게 했거든요.
매번 새로 생각하고, 매번 코드를 써냈고, 그중 대부분이 다음 수정에서 덮어써졌습니다.
고치는 과정 자체가 돈이 된 겁니다.

그렇다고 낭비였다는 건 아닙니다. 그 덮어쓴 코드들이 아래에서 다룰 버그 4개를 잡아낸 값이니까요.

오픈코드는 토큰을 기록하지 못했습니다

opencode stats로 해당 세션을 뽑아봤더니 모델 이름(togetherai/moonshotai/Kimi-K3)과 도구 호출 횟수는 남았는데 입력·출력 토큰이 전부 0이었습니다.
Together AI 대시보드를 직접 봐야 숫자가 나왔습니다.

반면 클로드 코드는 /cost 한 줄로 입력 238, 출력 211.0K, 캐시 읽기 14.8M, 코드 변경 줄 수까지 세션 단위로 다 뱉었습니다. 비용을 추적해야 하는 입장이라면 꽤 큰 차이입니다.

스스로 테스트하는 AI

둘 다 시키지 않았는데 자기 코드를 검증했습니다. 그런데 깊이가 달랐습니다.

K3 문법 검사

node --check로 문법을 검사했는데 PowerShell 인코딩 문제로 한글이 깨져 실패했습니다.
그러자 스스로 [System.IO.File]::ReadAllText에 UTF-8을 명시해 재시도했고 통과했습니다.
그다음 버그 3개(모바일 일시정지 해제 불가, 박쥐 초기 위치, 보스 이동 범위)를 직접 찾아 고쳤습니다.

도구 호출은 총 8회였습니다. write 1회, edit 4회, bash 3회.

Opus 5 헤드리스 봇 플레이

이쪽은 차원이 다릅니다.
_smoke.js라는 가짜 DOM 테스터를 직접 만들어 봇이 게임을 자동으로 플레이하게 했습니다.
그리고 이런 걸 찾아냈습니다.

  1. 가시 구덩이가 탈출 불가능한 함정 깊이 150px인데 점프 높이는 102px. 봇이 x≈3142에서 영구히 갇혔습니다
  2. 2단 점프가 아예 작동 안 함 조건이 P.jumps<1로 잘못 들어가 있었습니다
  3. 비행 적을 때릴 수 없음 근접 판정 위로 떠 있었습니다
  4. 모바일 물약 버튼이 조이스틱에 먹힘

이후 1024×576 / 812×375 / 390×844 해상도에서 5막 완주, 엔딩, 회차 진행, 저장·불러오기 왕복까지 오류 0으로 통과시켰습니다. 32분에서 43분 사이, 비용이 두 배가 된 구간이 바로 이겁니다.

공격은 되는데 아무도 안 죽습니다

여기가 이 글에서 제일 하고 싶은 얘기입니다.

A안(Opus)을 열고 한참을 헤맸습니다.
공격은 됩니다. 칼도 휘두르고 데미지 숫자도 뜹니다.
그런데 몬스터가 안 죽습니다. 때리고 때리고 또 때려도 그대로 서 있어요.

더 이상한 건 제 캐릭터도 안 죽는다는 겁니다.
이상해서 확인해보니 최대 체력은 133인데 현재 체력은 -212였습니다.
그리고 처치 수는 0이었고요. 그런데도 게임 오버는 안 뜹니다.

거기에 공격이 가끔 안 먹힙니다. 분명 눌렀는데 아무 일도 안 일어나고, 다시 누르면 그때 나갑니다.

세 가지가 겹치니 “이거 완전히 고장났구나” 싶었습니다. 43분 동안 스스로 QA를 돌린 결과물인데도요.

클릭이 씹히는 이유는 찾았습니다

코드를 열어보니 원인이 명확했습니다.

rec.moved += Math.abs(p.x-rec.x) + Math.abs(p.y-rec.y);
...
else if(rec.moved < 16){ tap = {...} }

moved가 시작점에서 얼마나 벗어났는지가 아니라 움직인 총량의 누적입니다.
마우스를 누른 채 손이 미세하게 떨리기만 해도 16을 넘고, 그러면 그 클릭은 통째로 폐기됩니다.
고주사율 마우스일수록 심하고요.

결정적 증거는 코드에 시작 좌표 rec.sx, rec.sy를 저장해두고 어디서도 안 쓴다는 점입니다.
순 이동거리를 재려던 의도가 구현에서 누적으로 잘못 들어간 겁니다.
게다가 A안은 UI가 pointerup(뗄 때) 반응합니다. B안은 pointerdown(누를 때)이고요.

HP가 마이너스가 되고 죽지않는 문제

데미지 계산 자체는 정상이었습니다.
체력을 깎는 지점은 코드 전체에서 딱 한 곳이고, 거기서 0 이하로 내려가면 사망 처리를 하게 되어 있습니다.

가짜 DOM 위에서 자동 플레이를 돌려봤습니다.
몬스터는 정상적으로 죽었고(21마리 처치, 레벨 5), 체력 최솟값은 87.23, 음수는 한 번도 나오지 않았습니다.

그런데 직접 사람이 플레이하면 안 죽습니다.
자동 플레이와 사람의 플레이 사이에 뭔가가 있다는 뜻인데, 아직 정확한 조건은 못 잡았습니다.

43분 동안 스스로 QA를 돌려 로직 버그 4개를 잡아낸 결과물입니다.
그런데 사람이 플레이하면 마우스 클릭이 씹히고, 아무도 안 죽습니다.

K3는 조작법을 게임 안에 세워뒀습니다

비교하자면 B안(K3)은 플레이어가 지나가는 길에 한국어 표지판이 서 있습니다.
시키지도 않았는데요.

Kimi K3가 만든 별빛 검사 PC 플레이 화면, 슬라임에게 데미지 12
표지판을 보세요. “이동: ← → / 점프: Space (2단 가능)”, “공격: Z / 스킬: X / 포션: C”

A안은 조작법 전체가 일시정지 메뉴 → 설정 탭 안에 있습니다.
기능은 훨씬 많은데, 처음 만지는 사람은 그 사실을 알 방법이 없습니다.

모바일

여기서 결과가 갈립니다.

Kimi K3 별빛 검사 모바일 플레이, 고대 골렘 보스전과 터치 버튼 6개
K3 모바일 보스 고대 골렘. 터치 버튼 6개가 모두 보입니다

K3는 가로에서 화면을 꽉 채웁니다.
좌우 이동, 포션, 스킬, 공격, 점프까지 버튼 여섯 개가 반투명하게 얹혀 있고 보스 체력바도 하단에 제대로 나옵니다.

Opus 5 잿빛 균열 모바일 세로 화면, 하단 동적 조이스틱과 상단 HUD 겹침
Opus 5 모바일 세로. 상단 HUD를 보세요

Kimi K3 vs Opus 5, 구조 자체는 Opus가 낫습니다.
세로 모드 전용 레이아웃을 따로 구현했거든요.
게임 화면을 위쪽 띠로 배치하고 아래를 조작부 전용 영역으로 씁니다.
왼쪽 아무 데나 누르면 그 자리에 생기는 동적 조이스틱까지 있습니다.
K3는 캔버스를 통째로 축소하는 방식이라 버튼도 같이 작아집니다.

그런데 Opus는 세로에서 HUD가 깨집니다.
체력바, 스테이지 이름, 포션 칩, 골드가 서로 겹쳐 읽을 수 없습니다.
앞서 나온 -212도 이 세로 화면에서 나온 것이고, PC 가로에서는 이런 겹침이 전혀 없습니다.

이게 자가 QA의 두 번째 한계입니다.
Opus의 헤드리스 봇은 390×844 세로 해상도까지 테스트했다고 로그에 적혀 있습니다.
그런데 가짜 캔버스로는 글자가 실제로 어디에 그려지는지 알 수 없습니다.
텍스트가 겹치는지는 진짜 렌더링을 봐야 압니다.

K3 쪽 문제도 있습니다

공정하게 하나 짚겠습니다. B안(K3)은 물리 계산에 델타타임을 안 씁니다.

const GRAV = 0.62, MAXFALL = 16;
p.vy = Math.min(p.vy + GRAV, MAXFALL);
const speed = 3.4;

전부 프레임당 상수입니다.
타이머와 쿨다운에는 dt를 쓰는데 이동과 중력에만 안 썼습니다.
그래서 120Hz 화면에서는 캐릭터가 정확히 2배 빨라집니다.
A안은 고정 타임스텝(while(acc >= 1/60) update(1/60))이라 어떤 주사율에서도 동일합니다.

Kimi K3 vs Opus 5, 그래서 누가 더 나은 모델인가 ?

Kimi K3는 $0.70에 10분 만에 놀 수 있는 게임을 냈습니다.
Opus 5는 $14.90을 쓰고 43분 동안 스스로 QA를 돌려 인디게임 한 편을 냈습니다.

블로그에서 잠깐 만져보는 독자에게는 조작법이 표지판에 적혀 있는 kimi k3가 낫습니다.
반대로 5막을 완주하고 장비를 맞추며 오래 플레이할 생각이라면 opus5가 우세죠.
그리고 AI가 자기 코드를 아무리 열심히 테스트해도, 사람 손이 닿는 지점은 여전히 사람이 만져봐야 나옵니다.

개인적으로 누구의 승이냐 물으신다면 저는 Opus 5를 고르겠습니다.

21배 비싸고 4배 느립니다. 클릭도 씹히고요.
그런데 시키지도 않은 헤드리스 테스터를 직접 만들어 자기 코드를 돌려본 건 Opus뿐이었습니다.
결과물의 완성도보다 그 태도가 인상적이었어요.
5막짜리 게임에 장비와 스킬트리까지 넣은 것도, 결국 “이 정도는 있어야 RPG지”라는 판단을 스스로 한 겁니다.

원본 그대로 올립니다

제가 코드를 한 줄도 고치지 않았습니다.
위에서 지적한 클릭 씹힘 버그도, 세로 HUD 겹침도 그대로 들어 있습니다. 고쳐서 올리면 비교가 아니니까요.

내려받아서 더블클릭하면 브라우저에서 바로 실행됩니다.
설치도, 인터넷 연결도 필요 없습니다. HTML 파일 하나가 게임 전부거든요.

잿빛 균열 (Opus 5, 3,376줄 / 143KB)
별빛 검사 (Kimi K3, 1,175줄 / 40KB)

코드가 궁금하시면 메모장으로 열어보셔도 됩니다.
라이브러리도, 이미지도, 사운드 파일도 없이 전부 Canvas와 WebAudio로 그리고 만든 겁니다.

클릭이 씹히는 것도, 세로에서 HUD가 겹치는 것도 원인은 위에 적은 대로 찾았습니다.
안 죽는 문제만 아직 못 잡았습니다. 혹시 원인 짚이시는 분은 댓글로 알려주세요.

그리고 하나 더 해볼 생각입니다.

이 블로그에는 RTX 3060 12GB에 로컬 모델을 올리는 글도 많습니다.
그래서 같은 프롬프트 7줄을 3060 12gb에 올린 모델에도 그대로 넣어보려고 합니다.
품질 차이가 얼마나 날지 저도 궁금하네요.

글 읽어주셔서 감사합니다~

위로 스크롤