AI가 앱을 만들어줬다, 그리고 수십 번 틀렸다
林政賢 ·
먼저 결과부터 말하자면.
나는 《PurpsyNightX》라는 파티 게임 앱을 만들어 App Store에 출시했다. 친구들이 모여서 각자 스마트폰으로 같은 방에 접속한 뒤, 돌아가며 카드를 뽑고, 질문에 답하고, 서로 점수를 매기는 게임이다.
앱 안에는 1,400여 개의 질문 카드, 39장의 한정판 엔딩 카드, 22개의 화면이 있고, 최대 10명까지 동시 접속이 가능하다. 이 정도 규모라면 예전에는 소규모 팀이 필요한 수준이었다.
코딩 작업은 거의 전부 AI가 했다.
말은 그럴듯하게 들린다. 하지만 여기서 끝냈다면 이 글은 거짓말이다.
수십 번 틀렸다
최근 한 라운드에서만 실제로 벌어졌던, 그리고 누군가 지적해야만 고쳐졌던 일들이다:
스스로는 정중앙 정렬을 마쳤다고 생각했지만, 실제로는 애니메이션이 정렬을 덮어버렸다.
한 줄이 화면 절반을 덮어버렸다.
문제 하나를 풀면 곧바로 다른 문제가 튀어나왔다.
두 번을 고치고서야 제대로 고쳐졌다.
게다가 이건 바로 전날 자기가 추가한 효과 때문에 생긴 문제였다.
결국 문제를 보지도 못한 채 답을 고르는 상황이 됐다.
한 번만 있었던 일이 아니다.
글자 수 제한 문제라고 판단해 수정했지만 여전히 안 됐다 — 진짜 원인은 완전히 다른 데 있었다.
이건 그저 내가 기억하는 것들일 뿐이다. 프로젝트 전체를 통틀어 보면, 수십 번은 그냥 넘어가지 않았다.
그리고 그때마다, 누군가 직접 스마트폰을 들고 실제로 써본 뒤 "여기 이상해"라고 말해야만, 비로소 원인을 찾아보게 됐다.
"이상해"라고 말하는 사람은 무엇을 하고 있는가
지난주에 실제로 있었던 일 하나를 이야기하겠다. 이 사건이 상황을 가장 명확하게 보여주기 때문이다.
한 플레이어가 이렇게 말했다: "방 안에서 뭘 해도 다 느려요, 버튼을 눌러도 반응이 없어요."
이 말을 그대로 AI에게 던졌다. AI는 네트워크를 측정해보더니, 데이터가 정말로 지구를 한 바퀴 크게 돌아서 왕복에 0.5초가 걸린다는 걸 발견했다. 그래서 우회 경로를 줄이는 최적화를 했다. 논리적으로 들렸고, 측정 결과도 사실이었다.
그런 다음 내가 직접 스마트폰으로 플레이해봤다.
나: 여전히 느린데.
딱 이 한마디였다. 그런데 이 한마디가 방향 전체를 뒤엎었다 — 이 말이 다음 문장을 끌어냈기 때문이다:
네트워크가 느리다고 해서 버튼을 눌러도 반응이 없는 건 아니다.
여기서 잠깐 멈춰서 생각해보자. 이 문장에는 기술적인 내용이 전혀 없다.
이건 그저 하나로 뒤섞여 있던 두 가지 일을 나눈 것뿐이다: "눌렀는데 결과가 나오기까지 좀 기다려야 한다"와 "눌렀는데 화면이 아예 안 움직인다" — 이 둘은 서로 다른 종류의 불편함이다. 첫 번째 수정은 전자를 고친 것이었지만, 플레이어가 말한 건 후자였다.
측정 대상을 바꿔보니, 진짜 원인이 드러났다:
아무도 조작하지 않고 화면이 그대로 멈춰 있던 10초 동안, 프로그램은 몰래 화면 전체를 78번이나 다시 그리고 있었다. 즉 아무 일도 없는데도 초당 8번씩 화면을 다시 그리고 있었던 셈이다 — 스마트폰이 당신 조작에 반응할 여유가 없는 게 당연했다.
원인은 어떤 코드 조각이 매초마다 "채팅 말풍선이 사라져야 하는가"를 검사하고 있었는데, 화면에 말풍선이 있든 없든 상관없이 계속 검사하고 있었다는 것이었다. 말풍선은 등장하는 그 6초 동안만 필요한데, 나머지 시간은 전부 헛수고였던 셈이다.
고친 뒤, 같은 10초 동안의 수치는 0회가 됐다. 쉴 때는 진짜로 쉬게 된 것이다.
이 일에는 이름이 있다, '디버깅'이라고 한다
아마 당신은 이게 나와는 먼 이야기라고 생각할 것이다.
하지만 위 대목을 다시 읽어보라 — 내가 한 일은 딱 세 가지뿐이다: 실제로 써본 것, 예상과 다르다는 걸 알아챈 것, 서로 다른 두 종류의 '불편함'을 나눠서 말한 것.
그중 어느 하나도 코딩 실력이 필요하지 않았다.
당신에게 이 능력이 없는 게 아니다. 그저 아무도 이 능력에 이름을 붙여준 적이 없었을 뿐이다.
아래 세 가지 중 적어도 하나는 당신 이야기일 것이다
결제할 때 같은 정보를 세 번 입력해야 하거나, 구독 취소가 다섯 단계 메뉴 속에 숨어 있거나, 실수로 누르게 되는 버튼이 늘 같은 자리에 있거나 — 당신은 단순히 짜증만 나는 게 아니라 정확히 어디가 짜증 나는지 말할 수 있다. 그게 바로 사용자 경험 판단력이고, 가장 가르치기 어려운 종류의 능력이다.
그래서 한 번 더 물어봤더니 실제로는 그게 아니었다는 걸 발견한 경험. '첫 번째로 그럴듯한 답을 그냥 받아들이지 않는' 그 직관이야말로 이 글에서 가장 핵심적인 능력이다 — AI가 처음 내놓는 설명은 언제나 그럴듯하게 들리기 마련이다.
"고장 났어요"는 쓸모가 없다; "여기를 눌렀더니 저게 튀어나왔는데, 저는 이전 화면으로 돌아갈 거라고 생각했어요"는 쓸모가 있다. 이건 느낌을 사실로 번역하는 능력이다. 엔지니어는 이를 '재현 단계'라 부르고, 당신은 아마 그냥 '말을 명확하게 하는 것'이라 부를 것이다.
왜 AI에게 특히 이 능력이 필요한가
왜냐하면 AI는 당신의 제품을 직접 쓰지 않기 때문이다.
AI는 코드 한 줄 한 줄을 다 이해하지만, '쓰기 불편하다'는 그 느낌은 없다. 지하철에서 한 손으로 조작해본 적도 없고, 친구가 재촉할 때 허둥지둥해본 적도 없으며, 주변이 시끄러워서 글자가 잘 안 보이는 경험도 없다.
AI는 또한 지치지도, 조급해지지도, 다섯 번 고쳤다고 포기하고 싶어지지도 않는다 — 이건 AI의 가장 강력한 장점이지만, 뒤집어 보면 곧 이런 뜻이기도 하다: AI는 미간을 찌푸리는 법도 모른다.
더 골치 아픈 문제도 있다: 당신이 "왜 이렇게 했어?"라고 물으면, AI는 거의 항상 매우 전문적으로 들리는 설명을 내놓는다, 설령 진짜 이유가 그저 "바로 전 단계에서 마침 그렇게 짜여 있었기 때문"일지라도. AI가 당신을 속이는 게 아니다 — 정말로 잘 됐다고 믿고 있는 것이다. 마치 당신이 문서를 다 수정하고 저장 버튼을 눌렀는데, 사실은 다른 창을 열어놓고 있었던 것처럼.
그래서 AI에게는 멈춰서서 "잠깐, 이거 아닌데"라고 말해줄 사람이 필요하다. 그리고 그 사람에게 필요한 건 코딩 실력이 아니라, 시간을 들여 진짜로 써보려는 의지와 그걸 말로 표현할 용기다.
그렇다면 지금 가장 값진 것은 무엇인가
지난 몇 주간의 경험으로 보면, 답은 두 종류의 사람이다.
하나는 디버깅할 줄 아는 사람이다. 코드를 고칠 줄 안다는 뜻이 아니라, "여기 뭔가 이상한데"를 알아채고 정확히 어디가 이상한지 말할 수 있다는 뜻이다. 이 능력은 오직 한 가지 방법으로만 길러진다: 자기가 만든 것을 진짜로 써보고, 그것이 싫어질 정도까지 써보는 것.
다른 하나는 논리를 세밀하게 생각하는 사람이다. 수학을 잘한다는 뜻이 아니라, 뒤섞여 있는 것들을 분리해낼 수 있다는 뜻이다 — 느린 것과 반응 없는 것은 다르고, 로그인이 안 된 것과 로그인에 실패한 것은 다르며, 사용자가 사용할 줄 모르는 것과 사용하기 싫어하는 것은 다르다.
이 두 가지 능력이 AI와 만날 때 비로소 '한 사람이 한 팀 몫의 일을 해내는' 결과가 나온다. 이 능력들이 없으면, AI는 매우 효율적으로 하지 않아도 될 일을 완수해버릴 것이고, 그 과정에서 아주 설득력 있는 이유들을 잔뜩 만들어낼 것이다.
AI는 '실행'을 값싸게 만들었다. 그래서 '판단'이 비싸졌다.
만약 당신이 늘 "나는 기술을 몰라서 아무것도 할 수 없다"고 생각해왔다면 — 내 제안은 이렇다. 우선 당신이 매일 쓰면서 가장 짜증 났던 그 앱부터 시작해보라. 어디가 왜 짜증 났는지 구체적으로 세 문장으로 써보라.
분명 쓸 수 있을 것이다.
그게 바로 시작점이다.
기술편
실제로 어떻게 만들었는지 궁금하다면?
엔지니어를 위한 완전판 글이 따로 있다. 이 글에서 일부러 생략한 부분들을 담았다:
- 전체 아키텍처와 도구 선택, 그리고 그 이유
- 아무도 미리 알려주지 않는 네 가지 Cloudflare 함정, 각각의 원인과 해결법 포함
- "지연은 고쳤는데 깜빡임이 생긴" 그 함정을 실제로 어떻게 해결했는지(코드 포함)
- 본문에 등장한 모든 수치의 측정 방법
새 글
AI 램프 두 개, 어느 쪽을 문지를까?
Claude Fable 5.1과 GPT-6 Astra가 이틀 사이에 같은 가격으로 나왔다. 점수 비교가 아니라 질문 하나 — vibe coding을 시작하려면 누구에게 돈을 내야 하나.
저자:林政賢(감독 · Gen AI 크리에이터 겸 엔지니어 · 탕이 스튜디오 창업자)