TECH

fl!p fl!p 개발기 1부: 바이브 코딩

AUG 07, 20256분

![flipflip](/posts/35/assets/flipflip-og.png) _flip flip logo_ 밤에 잠이 오지 않아 침대에 누워 천장만 바라보던 나는 결국 핸드폰을 집어들었다. 인스타그램을 무심코 스크롤하던 중, 한 게임 영상이 눈에 들어왔다. 특별할 것 없어 보이는 영상이었지만, 묘하게 매력적이었다. 직접 조작하지 않는데도 빠져드는 그런 느낌. 마치 빗방울이 창문을 타고 흘러내리는 모습을 멍하니 바라보는 것처럼, 편안하면서도 중독적인 무언가가 있었다. 그런데 그 영상을 흘려보낸 후 다시 찾으려 했지만 찾을 수 없었다. 인스타그램의 무한 스크롤 속에서 그 영상은 영원히 사라져버린 듯했다. 그때 문득 생각했다. "그 느낌을 더 개선해서 내가 직접 만들어보면 어떨까?" 핵심 아이디어는 의외로 간단했다. 컴퓨터와 동시에 공을 사용해 격자를 깨면서 땅따먹기를 하는 것. 단순한 벽돌깨기가 아니라 서로 영역을 차지하는 경쟁 게임으로 만들어보자는 생각이었다. 그 영상에서는 기존 벽돌깨기 게임을 완전히 다른 방향으로 접근하고 있었다. 좌우로 진행되는 게임이었는데, 핸드폰에서 하기에는 위아래가 길어서 상하 방향이 더 자연스러울 것 같았다. 게임의 기본 구조는 이랬다. 플레이어와 AI가 각각 위아래에서 시작해서, 공을 사용해 격자 형태의 영역을 점령해나간다. 누가 더 많은 땅을 차지하느냐의 게임. 간단하지만 전략적이고, 무엇보다 보는 것만으로도 재미있을 것 같았다. 이번 프로젝트에서는 완전히 새로운 시도를 해보기로 했다. 평소에도 LLM을 활용해서 코딩하고 있었지만, 보통은 보조적인 역할이었다. 이번에는 온전히 LLM에 의지해서 개발해보자는 생각이 들었다. 그래서 바이브 코딩을 시도해보기로 했다. 먼저 AI와 함께 원하는 게임의 요구사항을 작성했다. 처음에는 컨셉을 대략 설명하고 가벼운 프로토타입을 만들어달라고 했다. "위아래로 움직이는 공 두 개가 서로 영역을 차지하는 게임" 을 만들어 달라고 했다. 그렇게 시작한 게임에 조금씩 요구사항을 추가하기 시작했다. "공끼리 부딪히면 튕겨나가게 해줘", "점수 표시도 넣어줘", "공을 클릭하면 빨라지게 해줘" 같은 식으로 하나씩 기능을 덧붙여나갔다. 마치 레고 블록을 하나씩 쌓아가는 기분이었다. 바이브 코딩은 매력적이었다. 전통적인 개발 방식처럼 완벽한 설계서를 먼저 작성하고 치밀하게 계획을 세우는 것이 아니라, 감각적으로 필요한 기능들을 하나씩 추가해가면서 게임이 자연스럽게 진화해나가는 과정이 새로웠다. 그런데 점점 이상해지기 시작했다. 요구사항을 너무 산발적으로 추가하다 보니 게임이 꼬여버렸다. 공이 이상한 곳에서 멈춘다거나, 점수가 제대로 계산되지 않는다거나 하는 버그들이 속출했다. 아무리 바이브 코딩이라고 해도 최소한의 정리는 필요했다. 그래서 지금까지 내가 요청한 모든 요구사항들을 정리해달라고 했다. 그리고 그것을 바탕으로 주니어 기획자와 개발자를 위한 문서를 만들어달라고 했다. 문서가 나오니 훨씬 명확해졌다. 게임의 전체 구조가 한눈에 들어왔고, 어떤 부분이 빠져있는지도 보였다. 문서를 조금 다듬은 다음, 아예 처음부터 다시 시작하기로 했다. 새로운 대화를 열고, 그 문서를 주면서 "이거 그대로 만들어줘"라고 했다. 그러자 갑자기 괜찮은 게임이 나왔다. 역시 정리의 힘이었다. AI도 중간중간 정리가 필요한 녀석이었다. (알잘딱깔센 했으면 좋을 텐데) 하지만 새로 만든 게임도 완벽하지는 않았다. 계속 테스트하면서 이상한 버그들을 발견했다. 특히 충돌 관련 버그가 심했다. 공이 벽에 부딪혀도 제대로 튕기지 않거나, 가끔 벽을 뚫고 지나가기도 했다. 처음에는 너무 가볍게 접근했기에 실제 물리를 바탕으로 해달라고 요청했다. 그래도 여전히 문제가 있었다. 결국 충돌과 튕김에 대해 아주 세세하게 정의하기 시작했다. "공이 수직 벽에 부딪히면 x축 속도만 반전", "공이 수평 벽에 부딪히면 y축 속도만 반전", "충돌 각도 계산과 이동을 분리해서 처리" 같은 식으로 계속 지시를 했다. 이런 과정을 거치면서 속도 관련 버그도 해결되었다. 게임이 훨씬 부드럽고 자연스럽게 움직이기 시작했다. 무엇보다 공의 움직임이 예측 가능하면서도 자연스러워져서, 처음에 원했던 "멍하니 바라보기 좋은" 감각에 한층 더 가까워졌다. 아무리 바이브라고 해도 중간중간 정리는 필요했다. 요구사항이 꼬이기 시작하면 과감하게 멈추고 정리하는 게 나았다. 작은 것부터 시작하는 것도 중요했다. 처음부터 완벽한 게임을 만들려고 하지 말고, 간단한 프로토타입부터 시작해서 점점 기능을 추가해나가는 방식이 효과적이었다. 완벽한 설계서부터 시작하는 게 아니라 일단 만들어보고, 문제가 생기면 고치고, 또 개선하고. 이런 식으로 계속 반복하면서 게임이 점점 나아졌다. 물론 중간에 완전히 꼬여서 처음부터 다시 시작한 적도 있었지만, 그것조차도 과정의 일부였다. 그런데 이런 과정을 겪으면서 문득 든 생각이 있었다. 처음에는 가볍게 작게 시작하면서 조금씩 점진적으로 개선해나가고, 삐걱거리면서도 지속적으로 계속해서 개선해나가는 것. 그게 린 스타트업이고 앞으로 제품을 만들어가는 방법이 아닐까. <link-preview url="https://flipflip.cc/" title="flipflip" target="_blank" image="/posts/35/assets/flipflip-og.png"> </link-preview>

© 2025 w0nder