· 약 10분 읽기

로컬 모델 + 클라우드 모델로 사흘 만에 웹게임 만들기 - 부캉이 러시 제작기 (feat. DGX Spark 계열 장비 입문)


부캉이 러시

오랜만의 포스팅이다. 한동안 생업이 너무 바빠서 블로그를 거의 못 들여다봤다.

그 사이 부산에서 재밌는 일이 하나 생겼다. 9월 18일, 부산 북항 친수공원 수로에 몸길이 3.5m짜리 상어가 나타났다. 먹이를 쫓아 들어왔다가 출구를 못 찾은 것으로 추정되는데, 무섭기는커녕 ‘부캉이’라는 이름까지 얻으며 전국구 셀럽이 됐다. 추석 연휴 첫날에는 하루 약 10만 명이 북항을 찾았다고 한다.

그래서 만들어 봤다. 부캉이가 되어 북항 수로를 헤엄치는 원버튼 웹게임.


🎮 먼저 한 판 해보기

👉 부캉이 러시 플레이하기 (bukkangi-rush.pages.dev)

부캉이 러시 플레이 화면

  • 설치 없음. 폰이든 PC든 브라우저에서 바로 된다.
  • 조작은 두 개뿐: 탭하면 점프(수중에서는 상승), 꾹 누르면 잠수
  • 부표, 해경 보트, 차단망, 바닥 그물, 수로 끝 벽을 피해서 최대한 멀리 가면 된다.
  • 방어 5마리를 먹으면 돌진 무적 모드, 지느러미 타임에 점프하면 환호 +10
  • 죽으면 “해경: 죄송합니다 부캉이씨”, “출구를 또 못 찾음 ㄹㅇ” 같은 사망 대사가 나온다 ㅋㅋ
  • 기록 카드를 이미지로 뽑아서 공유할 수 있다.

기록 카드 예시

최고기록 찍으면 로컬 LLM 오픈톡방에 인증해 주시길 🙏


이번 작업의 진짜 목적: 로컬 모델로 어디까지 되나

게임은 핑계고, 사실 궁금했던 건 이거였다.

요즘 로컬 모델로 기획부터 개발, 테스트까지 실제 결과물을 만들 수 있을까? 안 되는 부분은 어디고, 거기서만 클라우드 모델을 쓰면 어떨까?

결론부터 말하면 생각보다 훨씬 많은 걸 로컬로 할 수 있었다. 그리고 멀티미디어 쪽은 아직 클라우드가 압도적이었다.

전체 작업은 이렇게 나눠서 진행했다.

단계담당도구
자료 조사, 게임 아이디어 10종, 기획서(GDD)로컬qwen3.8 플래시 넥스트 + Hermes 에이전트
웹게임 프로토타입 + 자동 테스트로컬〃 (Playwright 테스트 26개)
난이도 조정 + 밸런스 시뮬레이션로컬〃 (자동 플레이 봇 20판)
도트 그래픽 1차 시도로컬〃 (결과가 아쉬워서 롤백)
도트 그래픽 완성클라우드클라우드 코딩 에이전트
배경음악 생성로컬ACE-Step 1.5 (맥미니 M4에서 생성)
음악 삽입, 버그 수정, 배포, 공유 카드, 방문 통계, 홍보 영상클라우드Claude Code

1. 로컬 모델 파트: 기획 → 개발 → 테스트까지

기획과 기본 개발은 qwen3.8 플래시 넥스트를 Hermes 에이전트에 붙여서 진행했다. 재밌는 건 이걸 대부분 텔레그램 대화로 했다는 점이다. 폰으로 “이거 해줘” 하고 던져 두면 에이전트가 알아서 검색하고, 파일 쓰고, 테스트 돌리고, 결과를 보내준다.

자료 조사 → 아이디어 10개 → 기획서

“부산에 상어 나타났다는데 관련 내용 전부 수집하고, 이걸로 게임 아이디어 여러 개 내봐”라고 했더니 뉴스를 쭉 모아 정리한 뒤 아이디어를 10개 뽑아 왔다.

  • 방치형 감성 시뮬 “부캉이표류기”
  • 상어는 아군이고 밀려오는 인파가 적인 역발상 타워디펜스 “북항 방어전”
  • 15분 주기 지느러미 타이밍에 셔터를 누르는 “직관 챌린지”
  • 보조배터리 +815% 특수를 노리는 편의점 경영 “죠스바 스토리”
  • …그리고 러너 게임 “부캉이 러시”

사건의 밈(보조배터리 매출 급증, 출산설, “여수에도 상어 풀어라”)을 게임 문법으로 번역하는 감각이 꽤 좋았다.

남녀노소 누구나 할 수 있는 원버튼 게임을 원한다고 하니, 러시를 다듬은 **기획서(GDD)**를 썼다. 핵심 아이디어는 이거였다.

버튼은 하나. 수면 근처에서 탭하면 점프, 수중에서 탭하면 상승. 같은 입력이 상황에 맞는 동작이 되니까 플레이어는 방향을 고를 필요가 없다.

속도를 30% 늦추는 배려 모드, 3초 안에 시작(튜토리얼 팝업 금지), 죽어도 웃긴 연출로 끝나서 좌절감이 없는 구조까지 기획서에 담겨 있었다.

프로토타입 + 자동 테스트 26개

기획서를 바탕으로 HTML 파일 하나짜리 캔버스 게임을 만들고, Playwright로 자동 테스트 26개까지 직접 짜서 돌렸다. 테스트하다가 버그도 스스로 찾아 고쳤다.

  • 상어 객체에 x 좌표가 없어서 충돌 판정이 절대 안 터지던 버그 (sh.x = NaN)
  • 물보라 함수 누락

로컬 모델이 “테스트를 돌려보니 장애물이 상어를 통과하는데 안 죽네?” 하고 원인을 추적하는 걸 보면서 꽤 놀랐다.

밸런스 조정을 데이터로

직접 해보니 초반부터 너무 어려웠다. “그물이 너무 커서 피하기 힘들다, 처음엔 쉽게 하다가 점점 어렵게”라고 했더니:

  • 거리별로 장애물 종류를 하나씩 풀어주는 난이도 게이팅을 넣었다 (0~150m는 부표와 바닥 그물만, 150m부터 해경 보트, 250m부터 차단망, 600m부터 수로 끝 벽).
  • 자동 플레이 봇으로 20판을 돌려 난이도 곡선을 데이터로 검증했다: 150m 생존율 100% → 400m 50% → 800m 15%
  • 그 과정에서 해경 보트는 점프로도 잠수로도 절대 못 피하는 구조였다는 설계 버그까지 찾아냈다.

여기까지가 로컬 모델 몫이다. 기획, 구현, 테스트, 밸런싱이라는 개발의 핵심 루프를 로컬 모델이 혼자 돌렸다.

그런데 도트 그래픽에서 막혔다

“상용 게임처럼 도트 그래픽으로 바꾸려면?”이라고 물었더니, 다른 사람들이 AI로 도트를 어떻게 만드는지 조사한 뒤 코드로 직접 도트를 찍는 방식을 제안했고 실제로 적용까지 했다. 게임 로직은 그대로 두고 그래픽만 교체해서 테스트 26개도 모두 통과했다.

하지만 결과물이 내 기대만큼 정교하지 않았다. 그래서 백업만 해 두고 원래 버전으로 되돌렸다.


2. 클라우드 모델 파트: 멀티미디어는 확실히 차원이 달랐다

그래픽 비교: 로컬 프로토타입, 로컬 도트 시도, 클라우드 도트 완성판

도트 그래픽은 클라우드 모델에 맡겼다. 흥미로운 건 클라우드 모델도 이미지 생성 AI를 쓰지 않고 똑같이 “코드로” 그렸다는 점이다. 도구는 같았는데 결과가 완전히 달랐다.

  • 공통 팔레트 약 40색 + 베이어 디더링
  • 상어는 7가지 각도 × 6개 꼬리 프레임을 절차적으로 그려서 미리 구워 둠
  • 하늘, 산과 대교, 도시와 크레인, 산책로, 수중, 해저까지 6겹 패럴랙스 배경
  • 도트 폰트(Galmuri) UI, TV 뉴스 자막 스타일 티커
  • 그러면서 게임 로직은 한 줄도 안 바꿈

3단계 비교 이미지를 보면 차이가 확 느껴진다. 같은 “코드로 도트 찍기”인데 공간 감각, 색 감각, 디테일의 밀도에서 격차가 크다.

이후 마무리 작업도 클라우드 코딩 에이전트(Claude Code)로 했다.

  • 돌진 모드 버그 수정: 먹이를 먹고 돌진하면 조작이 안 되다가, 돌진이 끝나자마자 해경 보트에 박는 억울한 죽음이 많았다. 원인은 돌진 중 상어를 수면으로 강제로 끌어올리던 코드였다. 이걸 없애서 돌진 중에도 조작할 수 있게 하고, 돌진이 끝난 뒤 1초 무적을 추가했다.
  • Cloudflare Pages 무료 배포: HTML 파일 하나(약 600KB)라 서버비는 0원이다. 방문자가 몰려도 과금되지 않는다.
  • 기록 카드 이미지 공유, 게임 소개 팝업, 링크 미리보기 이미지
  • 구글 애널리틱스 연결: 게임 시작, 사망 원인, 거리, 공유 같은 행동 이벤트까지
  • 홍보용 쇼츠 영상: 실제 게임을 자동조종으로 플레이하면서 녹화하고, 자막과 음악을 입혀 세로 영상으로 뽑아 줬다.

테스트는 최종적으로 100개가 넘게 쌓였고, 수정할 때마다 전부 다시 돌렸다.

홍보 영상은 유튜브 쇼츠에 올렸는데, **처음 3시간 만에 조회수 925회, 평균 조회율 73.7%**가 나왔다. 개인 채널 첫 쇼츠치고는 나쁘지 않다.


3. 배경음악은 로컬로 만들었다 (맥미니 M4 24GB)

멀티미디어가 전부 클라우드였던 건 아니다. 배경음악은 로컬 음악 생성 모델 ACE-Step 1.5로 만들었다. 설치와 곡 선별, 반복 구간 편집은 클라우드 에이전트가 해줬지만, 음악 생성 자체는 맥미니에서 돌렸다.

  • 모델: ACE-Step 1.5 turbo (2B) + 5Hz LM 1.7B
  • 장비: 맥미니 M4 24GB, 모델 파일(약 9.4GB)은 외장하드에 보관
  • 속도: 64초짜리 곡 6개를 약 2분에 생성 (LM을 끈 모드 기준)

처음 곡은 경쾌했지만 메인 멜로디가 약했다. 그래서 곡 구조를 먼저 설계하는 LM(1.7B)을 켜고 “흥얼거릴 수 있는 뚜렷한 리드 멜로디”를 요구했더니 확실히 달라졌다. 곡을 사람이 다 들어볼 수 없으니 멜로디 선명도를 수치로 비교해서 골랐다.

지표1차 곡최종 곡
주선율이 뚜렷하게 들리는 시간35%79%
리드 멜로디 존재감0.040.11 (약 3배)

그리고 박자에 맞춰 20마디를 잘라 끊김 없이 반복되게 만들었다. 음악은 이미 로컬로도 충분히 쓸 만한 수준이라는 게 이번에 얻은 수확이다.

팁: ACE-Step을 맥에서 LM 모드로 CLI 실행하면 “Press Enter” 입력을 기다리며 멈춘다. yes "" | uv run python cli.py -c 설정.toml처럼 입력을 흘려 주면 된다.


4. 그리고 장비를 바꿨다: 맥미니 M4 24GB → MSI DGX Spark 계열

지금까지 모든 로컬 AI 작업은 맥미니 M4 24GB 한 대로 해왔다. 가성비 좋고 조용하고 전기도 적게 먹는, 정말 좋은 입문 장비다.

그런데 이번처럼 에이전트로 제대로 된 작업을 하다 보면 24GB가 금방 빡빡해진다.

  • 쓸 만한 코딩 모델을 올리면 컨텍스트를 넉넉히 잡기 어렵다.
  • 모델을 돌리는 동안 음악 모델이나 이미지 모델을 같이 띄우기 부담스럽다.
  • 에이전트를 여러 개 동시에 돌리는 건 사실상 꿈이다.

그래서 최근 MSI의 DGX Spark 계열 장비를 들였다. NVIDIA GB10(Grace Blackwell) 기반에 128GB 통합 메모리를 품은 작은 AI 워크스테이션이다.

내가 이 장비에 기대하는 건 한 모델을 조금 더 빠르게 돌리는 게 아니라 동시성이다.

  • 큰 모델을 상주시켜 두고 컨텍스트를 넉넉하게
  • 메인 에이전트가 서브에이전트와 병렬 워커를 여러 개 띄워서, 누구는 코드를 짜고 누구는 테스트를 돌리고 누구는 자료를 조사하는 구조
  • 그 옆에서 음악이나 이미지 생성 모델을 같이 돌리기

이번 부캉이 작업만 봐도 병렬로 돌릴 수 있는 일이 많았다. 테스트 스위트 여러 개, 밸런스 시뮬레이션 봇 수십 판, 음악 후보곡 여러 배치, 화면 크기별 레이아웃 검사까지. 맥미니에서는 하나씩 순서대로 했던 일들을 이제 동시에 돌릴 수 있다.

무엇보다 이제 떠오르는 프로젝트를 로컬에서 부담 없이 바로바로 시작할 수 있게 됐다는 게 가장 설렌다.


정리: 로컬과 클라우드, 이렇게 나눠 쓰면 된다

이번 작업으로 얻은 결론은 이렇다.

로컬 모델로 충분했던 것

  • 자료 조사, 아이디어 발상, 기획서
  • 게임 로직 구현, 자동 테스트 작성, 버그 추적
  • 데이터 기반 밸런스 조정
  • 배경음악 생성 (전용 로컬 모델)

아직 클라우드가 압도적이었던 것

  • 도트 그래픽처럼 시각적 완성도가 필요한 작업
  • 홍보 영상처럼 녹화, 자막, 음악을 엮는 멀티미디어 제작
  • 배포, 분석 연동 같은 여러 도구를 오가는 마무리 작업

솔직히 그래픽 비교 이미지를 보면 인정할 수밖에 없다. 멀티미디어를 다루는 능력은 아직 클라우드 모델이 한 수가 아니라 몇 수 위다. 다만 얼마 전까지만 해도 로컬 모델로 “테스트까지 통과하는 게임”을 만든다는 건 쉽지 않은 일이었다. 기획, 코딩, 테스트라는 개발의 핵심 루프가 이제 로컬로 돌아간다는 것만으로도 큰 변화다.

로컬 모델도 곧 그래픽과 영상 쪽을 따라잡으리라 기대한다. 그날이 오면 DGX Spark 한 대 안에서 기획부터 홍보 영상까지 전부 끝나는 날이 올 것이다. 그때까지는 로컬로 할 수 있는 건 로컬로, 안 되는 부분만 클라우드로 섞어 쓰는 게 가장 실용적인 방법이라고 본다.


🦈 부캉이 러시 해보기

👉 bukkangi-rush.pages.dev

  • 무료, 설치 없음, 광고 없음
  • 폰과 PC 모두 지원 (PC는 스페이스바)
  • 실제 사건을 모티브로 한 비공식 팬 게임이며, 관계 기관과는 무관하다.

실제 부캉이도 무사히 바다로 돌아가길 바란다. 혹시 보러 가신다면 난간은 넘지 말고, 부캉이를 자극하지 말아 주세요.

로컬 LLM으로 이런 저런 걸 만들어 보는 이야기는 로컬 LLM 사용자 모임 오픈톡방에서도 나누고 있다. 스파크로 돌려볼 만한 재밌는 프로젝트 아이디어가 있다면 언제든 환영이다.