블로그로 돌아가기
에세이읽기 시간 9분

Sungbin Kim

2024년 9월, 고등학생 때 클로드 웹으로 바카라 웹게임을 하나 만들었습니다. 지금도 Golden Casino라는 이름으로 만들고 있는 프로젝트의 첫 버전이에요. 올해 8월에 이걸 처음부터 다시 짰는데, 두 버전을 나란히 놓고 보니 2년 동안 제가 AI랑 코딩하는 방식이 얼마나 바뀌었는지 한눈에 보이더라고요.

"바이브코딩"이라는 말은 2025년 2월에 안드레이 카파시가 처음 썼어요. 저는 그 말이 나오기 전부터 클로드 웹에 코드를 붙여넣으면서 이렇게 만들고 있었죠. 그때랑 지금이 뭐가 다른지, 같은 프로젝트 두 버전으로 비교해봤습니다.

2년 전 Golden Casino 바카라 화면(위)과 지금 화면(아래). 위는 평면 카드와 버튼뿐이고, 아래는 3D 테이블에 구슬판과 통계 패널이 붙어 있다.

첫마디는 "이해해봐"였습니다

클로드 기록을 거슬러 올라가 보니 첫 대화가 남아 있었어요. 파이썬 FastAPI 서버 파일 하나랑 HTML 한 장을 붙여넣고, 제가 친 말은 "이해해봐" 한마디였습니다.

2024년 9월 13일 클로드 대화. paste.txt와 paste-2.txt 두 파일을 붙여넣고 "이해해봐"라고 보냈다. 클로드가 FastAPI 백엔드와 HTML/JavaScript 프런트엔드로 된 바카라 웹 애플리케이션이라고 설명하고 있다.

그 대화의 마지막 질문은 "근데 데이터 베이스는 어떤거 쓰는게 좋아?"였어요. 클로드는 처음엔 SQLite, 규모가 커지면 PostgreSQL을 권했습니다. 저는 그때 MongoDB를 골랐습니다.

코딩을 제대로 배운 적이 없었으니 구조라는 걸 몰랐어요. 클로드가 준 코드를 받아서 한 파일에 계속 붙였습니다. 그렇게 Node·Express·MongoDB로 옮겨 만든 첫 버전은 서버가 server.js 한 파일에 3,767줄, 사용자 화면 스크립트가 user.js 한 파일에 4,109줄입니다.

제가 AI의 메모리였죠

그때 제일 힘들었던 건 컨텍스트였어요. 몇 번 주고받으면 대화창이 차서 새 채팅을 열어야 했고, 새 채팅에서는 파일을 다시 통째로 붙여넣고 어디까지 고쳤는지 처음부터 설명했습니다. 뭘 바꿨고 뭐가 남았는지는 제 머릿속에만 있었고요.

기록으로 세어보니 이렇습니다.

  • 바카라 관련 대화 15개에서 제가 보낸 메시지는 41번, 대화 하나에 평균 2.7번이었습니다. 뭐 하나 바꿀 때마다 새 채팅을 연 거죠.
  • 그 15개 대화에 붙여넣은 코드가 약 20만 7천 자였습니다.
  • 2024년 10월 12일에는 하루에 대화를 7개 열었습니다. 모바일 화면, 다크 테마, 관리자 화면, 오류 수정 같은 것들이었어요.
  • 답이 길면 중간에 끊겨서 "이어서"를 쳤습니다. 다크 테마로 바꿔 달라고 한 대화는 답이 중간에 멈췄고, 다시 "나는 테일윈드 css 를 쓰고있어"라고 알려줘야 했어요.

라이브러리 버전도 문제였습니다. 받은 코드를 돌리면 useNewUrlParser is a deprecated option ... has no effect since Node.js Driver version 4.0.0 같은 경고가 떴고, 저는 그 경고를 또 붙여넣고 이게 뭐냐고 물었어요. 최신 버전은 제가 직접 찾아보고, 그 내용을 다시 대화에 넣어줘야 했습니다.

그래도 돌아가긴 했어요. 바카라 판이 돌고, 채팅이 되고, 순위표랑 관리자 화면도 있었습니다.

결과물은 이만큼 달라졌습니다

같은 바카라 화면부터 보면 맨 위 사진 그대로입니다. 2년 전엔 평면 카드가 깔리고 승패가 글자로 떴어요. 지금은 3D 테이블 위에서 카드가 슈에서 나와 깔리고, 구슬판이나 빅로드 같은 기록판과 통계가 양옆에 붙어 있습니다.

게임 하나만 비교해도 이 정도인데, 사이트 전체로 놓고 보면 차이가 더 큽니다.

2024년지금
게임바카라 하나21종
사람끼리 하는 게임없음섯다·홀덤·맞고·바둑이·7포커, 빈 자리엔 AI 봇
화면HTML·JavaScript, 평면 카드React, 딜러 게임 테이블은 three.js 3D
폰한 화면을 폰에 맞게 손본 정도게임마다 폰 세로·가로 배치를 따로
처음 온 사람가입하고 관리자 승인까지 받아야 입장가입 없이 바로 체험
데이터베이스MongoDBPostgreSQL
테스트없음테스트 파일 140개

코드 모양도 완전히 달라졌습니다.

2024년
golden_casino_backend/
  server.js     3,767줄
golden_casino_frontend/
  user.js       4,109줄
  admin.js      2,778줄
지금
apps/api             서버 (Express, Socket.IO)
apps/web             화면 (React, three.js)
packages/contracts   서버와 화면이 같이 쓰는 타입
packages/game-core   게임 규칙

테스트 파일 140개, 제일 큰 파일 2,226줄

올해 8월 24일에 다시 시작해서 두 달 동안 커밋이 330개 쌓였습니다.

채팅창을 안 열게 됐어요

2024년 12월에 Cursor를 쓰기 시작했고, 2025년 4월쯤부터 Claude Code, 올해 4월부터는 Codex를 씁니다. 클로드 웹 대화 수를 달별로 보면 그 변화가 그대로 보여요.

달클로드 웹 대화 수
2024년 7월89
2024년 8월175
2024년 9월209
2024년 10월53
2024년 11월124
2024년 12월119
2025년 1월65
2025년 2월부터 1년 동안7

에이전트는 제가 붙여넣지 않아도 코드를 직접 읽습니다. 고친 다음에 테스트도 돌리고요. 그러니까 처음으로 리팩터링이 됐어요. 2년 전엔 한 파일에 다 들어 있어서 어디를 건드리면 뭐가 깨질지 몰랐거든요.

9월에는 바카라·블랙잭 테이블을 2D 캔버스에서 three.js 3D로 통째로 갈아엎었는데, 2년 전 구조였으면 엄두도 못 냈을 것 같아요. 10월 10일에는 에이전트 6~8개를 한꺼번에 돌려서 새 게임 다섯 개를 동시에 만들었고요. 세션이 끝날 때마다 다음에 또 밟을 함정을 메모 파일로 남기게 했더니 그 메모가 60개 넘게 쌓였습니다. 지금 작업 방식은 내가 바이브 코딩하는 방법에 따로 적어뒀어요.

늘어난 건 코딩 실력이 아니었어요

이렇게 써놓으면 2년 동안 코딩을 엄청 잘하게 된 것처럼 보이는데, 솔직히 코딩 실력은 별로 안 늘었습니다.

늘어난 건 뭘 만들 때 "이건 이런 기술로 이렇게 만들면 되겠다"가 먼저 보이는 감각이에요.

2년 전 첫 대화의 마지막 질문이 딱 그 반대 상태였죠. 데이터베이스를 뭘 써야 하는지 몰라서 물었고, 받은 답 중에 하나를 골랐습니다. 화면을 어떻게 나눌지도, 서버를 어떻게 쪼갤지도 몰랐으니 받은 코드를 그대로 이어 붙일 수밖에 없었고요.

지금 에이전트한테 하는 말은 이런 식입니다. 실제로 쳤던 말 그대로예요.

에볼루션처럼 베팅 존은 DOM, 테이블 안쪽만 three.js

3D 테이블을 처음 만들 때 한 말이에요. 카드가 깔리는 테이블만 3D로 그리고, 베팅 칸이랑 버튼은 평범한 웹 화면으로 두자는 거죠. 에볼루션 같은 라이브 카지노 화면이 그렇게 나뉘어 있거든요.

자동으로 채우지 말고 수동으로 채울 수 있게

섯다·홀덤에 AI 봇을 넣을 때 한 말입니다. 봇이 빈 자리를 알아서 채우는 대신, 앉은 사람이 원할 때 불러 앉히는 방식이에요. 봇이 상대 패를 엿보는 건 아예 빼기로 했고요. 봇도 사람이 보는 화면 정보만 받습니다.

봇 선택이 너무 빠르다, 시간도 중요하니 고도화

봇이 0.9~2.6초 만에 바로바로 쳤거든요. 그렇다고 고민 시간을 패 세기로 정하면 시간만 보고 봇 패를 읽을 수 있어서, 베팅 크기 같은 공개된 정보로만 정하게 했습니다.

비로그인 대상 데모 게임 체험, 로그인 바로 강제하지 말고

2년 전엔 가입하고 관리자 승인까지 받아야 들어올 수 있었어요. 지금은 첫 화면에서 테이블을 누르면 가입 없이 바로 들어가집니다.

코드는 에이전트가 씁니다. 대신 뭘 어떤 구조로 만들지, 어디까지 만들지는 제가 정해요. 2년 전엔 그걸 몰라서 "이해해봐"라고 맡겼다면, 지금은 그걸 정하는 게 제 일이 됐어요.

안 바뀐 것도 있습니다

에이전트가 "다 됐습니다"라고 하는 건 아직도 그대로 못 믿어요.

화면 겹침을 검사하는 도구가 "문제 없음"이라고 했는데, 스크린샷을 직접 열어 보니 섯다 카드 66장이 전부 빈칸이었던 적이 있습니다. 카드 그림 주소가 틀려서 그림이 안 떴는데, 칸 크기는 그대로라 검사를 통과했던 거예요. AI 봇을 만들 때도 단위 테스트 28개가 다 통과했는데, 실제 방에 봇을 붙여서 돌리니까 버그가 4개 나왔고요.

2년 전에는 제가 직접 돌려보는 게 확인의 전부였어요. 지금은 확인하는 방법부터 만들게 하고, 그 결과도 제 눈으로 한 번 더 봅니다. 확인하는 사람이 저라는 건 그대로죠.

2년 전 그 대화방은 아직 남아 있습니다. "근데 데이터 베이스는 어떤거 쓰는게 좋아?"에서 멈춘 채로요. 지금 Golden Casino는 PostgreSQL로 돌아갑니다.