이 글도 코칭 앱과 직접 연결되지는 않는, 다른 프로젝트를 진행하며 떠오른 30년 전의 기억과, 다시 정리해본 저의 생각을 담고 있습니다.
30여 년 전, 저는 컨설턴트로서 여러 금융사 고객사의 프로젝트를 거쳤습니다. 그 시절 주제가 IT에 가까운 프로젝트라면 거의 예외 없이 따라붙던 숙제가 하나 있었습니다. 바로 고객 데이터 정제였습니다. 제가 직접 떠맡은 일은 아니었지만, 어느 현장에서나 빠지지 않고 등장하던 그 문제를 저는 충분히 가까이서 지켜봤습니다.
고객 데이터는 어느 산업에서나 가장 귀한 자산입니다. 금융이든 통신이든, 회사가 하는 거의 모든 일이 결국 “우리 고객이 누구이고 무엇을 원하는가”로 수렴하니까요. 그런데 바로 그렇게 귀하기 때문에, 그 자산을 두고 묘한 각축이 벌어집니다. 모든 부서가 그 데이터를 자기 가까이 두고 싶어 합니다. 영업은 영업대로, 심사는 심사대로, 마케팅은 마케팅대로, 저마다 고객 명단을 한 벌씩 복사해 자기 서랍에 넣고 관리하기 시작합니다.
처음엔 다들 같은 명단이었습니다. 그런데 한쪽에서 주소를 고치고, 다른 쪽에서 전화번호를 바꾸고, 또 어딘가에서 고객 등급을 손대는 동안 그 사본들이 서서히 서로 어긋납니다. 어느 순간, “진짜 우리 고객”이 누구인지 아무도 자신 있게 답하지 못하는 상태가 됩니다. 같은 사람이 시스템마다 다른 얼굴로 들어앉아 있으니까요. 그렇게 되면 고객 관리라는 일 자체가 먼 산이 됩니다. 관리할 대상이 하나로 모이질 않으니까요.
회사도, 산업도 달랐지만 이 풍경만큼은 어디서나 똑같이 되풀이됐습니다. 수백억, 수천억이 들어간 시스템에서도 발목을 잡는 건 늘 단순한 한 가지였습니다. 진실이 한 곳에 모여 있지 않다는 것.
그런데 최근, 바이브 코딩으로 키운 작은 프로그램 하나 안에서 똑같은 병이 똑같은 모양으로 자라는 걸 봤습니다. 크든 작든, 원칙은 바뀌지 않더군요.
1. 두더지 잡기
상황은 이랬습니다. 저는 AI에게 영상의 장면들을 설계하게 시키고 있었습니다. 제 주문은 한결같았습니다. “화면 구성을 다양하게. 주어진 스크립트의 맥락을 잘 반영하도록, 같은 내용이 반복되어 식상하지 않게.”
그런데 결과는 매번 같은 자리로 돌아왔습니다. 제가 말한 “다양하게”는 이야기 내용에 맞는 그림을 매번 새로 떠올려라였는데, AI가 알아들은 건 카메라 각도만 이리저리 돌려라였습니다. 정면을 옆모습으로, 옆모습을 뒷모습으로. 정작 화면 속 인물도, 그가 하는 일도 그대로인 채로요.
고쳐달라고 설명합니다. 다음 장면은 좋아집니다. 그런데 그다음 장면에서 또 같은 버릇이 튀어나옵니다. 한 마리를 누르면 옆 구멍에서 다른 한 마리가 머리를 내미는, 딱 두더지 잡기였습니다. 그리고 이 두더지 잡기를, 저는 세션을 새로 열 때마다 처음부터 다시 하고 있었습니다.
어느 순간 멈칫했습니다. 매번 똑같은 걸 다시 설명해야 한다는 것 자체가, 나도 AI도 아닌 다른 무언가가 잘못됐다는 신호 아닐까.
2. 진실은 사라지지 않습니다, 분열할 뿐입니다
AI에게 원인을 짚어보라 했더니, 곧 ‘결정적 단서’를 하나 찾았다고 했습니다. 반가웠지만 거기서 멈추지 않고, 그게 정말 하나뿐이겠냐고 되물었습니다. 충돌하는 기준들이 어디에 어떻게 적혀 있는지 거꾸로 훑어봤습니다.
한 군데가 아니었습니다. 같은 원칙이 코드에도, 작업 지시문에도, 점검표에도, 문서에도 흩어져 있었습니다. 세어 보니 일곱 군데가 넘었습니다. 그리고 그중 둘은 정반대 말을 하고 있었습니다. 한쪽엔 “인물을 화면 중심에 두라”가 가장 굵은 글씨로, 다른 한쪽엔 “화면은 인물이 아니라 이야기 내용에서 끌어내라”가 적혀 있었던 거죠.
매 세션 같은 설명을 반복했는데도 결과가 계속 달라진 건 그래서였습니다. 한 곳을 고쳐도 나머지 여섯 곳이 옛말을 그대로 외치고 있었으니까요.
처음 저는 *“AI가 왜 내가 그렇게 강조한 말을 기억하지 못하냐”*고 질책했습니다. 사실은 정반대였습니다. AI는 제 말을 저보다 더 잘 기억하고 있었습니다. 일곱 군데에 서로 어긋나게 흩뿌려 둔 그 말들을, 하나도 빠뜨리지 않고요. 잊어서 헤맨 게 아니라, 너무 잘 기억해서 모순 앞에 멈춰버린 것이었습니다.
30년 전 고객 데이터가 그랬듯, 문제는 기준이 없는 것이 아니었습니다. 하나여야 할 것이 여러 벌로 쪼개져 서로 어긋난 것이었죠. 진실은 사라지지 않습니다. 조용히 분열할 뿐입니다.
3. 왜 하필 바이브 코딩에서, 이 병이 빨리 자라는가
진실이 흩어지는 건 어느 시스템에나 있는 병입니다. 그런데 제가 놀란 건, 바이브 코딩으로 만든 작은 프로그램에서 이 병이 유독 빠르게 자란다는 점이었습니다. 따져보니 이유가 셋이었습니다.
첫째, 속도가 목적이라 ‘가장 가까운 자리’에 적게 됩니다. 뭔가 바꾸고 싶으면 지금 보는 그 자리에서 “여기 이렇게 해줘” 한마디면 됩니다. AI는 친절하게 바로 그 자리에 새 규칙을 적어주고, 원래 살아야 할 먼 곳까지 찾아가지 않습니다. 매 수정이 즉석에서 끝나니 같은 규칙의 사본이 손길 닿는 곳마다 생깁니다. 30년 전 각 부서가 고객 명단을 제 서랍에 복사해 넣던 것과 똑같죠. 그게 제일 빠르고 편하니까요.
둘째, 전체 지도를 든 사람이 없습니다. 예전 큰 시스템엔 “이 정보가 원래 어디 사는지”를 아는 설계자가 있었습니다. 바이브 코딩에선, 적어도 비개발자인 제겐, 그 지도가 없습니다. AI도 매 대화를 새로 시작하니 “이건 이미 저기 있다”를 기억하지 못하고요. 그래서 둘 다 기존 자리를 찾는 대신 새 자리를 만듭니다. 게다가 AI는 ‘있는 걸 찾아 고치기’보다 ‘그럴듯한 걸 새로 써내기’에 강합니다. 한 원칙을 지키라 하면, 먼 원본을 고치는 대신 지금 보던 자리에 또 한 벌을 적어버립니다.
셋째, 고치는 데 마찰이 없어 멈춰 묻지 않습니다. 예전엔 코드 한 줄 바꾸려면 빌드하고, 검토받고, 비용이 들었습니다. 그 마찰이 “잠깐, 이거 원래 어디 있었지?”를 묻게 하는 브레이크였죠. 바이브 코딩엔 그 마찰이 거의 0입니다. 1초면 고쳐지는데 누가 멈춰 지도를 펼치겠습니까.
바이브 코딩을 강력하게 만드는 그 성질들, 즉 속도와 즉석 수정과 새로 써내는 능력이 동시에 진실을 흩어놓습니다. 가만 두면, 분열이 기본값입니다.
4. 그래서, 한 번만 약속된 자리에
30년 전 그 현장들에서 찾아간 답도 하나였습니다. 고객 정보는 약속된 한 곳에만 두고, 모두가 자기 서랍에 복사하는 대신 그 한 곳을 바라보게 하는 것. 고쳐야 하면 자기 사본이 아니라 그 한 곳을 고치는 것. 그래야 “우리 고객”이 다시 한 사람으로 모입니다.
작은 프로그램에 한 일도 똑같았습니다. 흩어진 일곱 사본을 지우고, 원칙을 약속된 한 자리에, 한 번만 적었습니다. 나머지는 전부 그 한 곳을 가리키게만 했고요. 이제 생각이 바뀌면 그 한 줄만 고치면 됩니다. 두더지가 더는 옆 구멍에서 나오지 않습니다. 나올 구멍이 하나뿐이니까요.
재미있게도, 제가 쓰는 이 AI 자신도 원칙을 만드는 쪽과 검사하는 쪽이 같은 한 장을 나눠 보도록 만들어졌다고 합니다. 진실을 한 곳에 두고 모두가 참조하게 하는 것은, 거창한 발명이 아니라 잘 만든 시스템이라면 이미 다들 그렇게 해온 기본이었습니다.
5. 적어두는 걸로는 부족했습니다
원칙을 잘 정돈한 것으로 끝은 아니었습니다.
한 곳에 또렷이 적어두면 지켜질 줄 알았는데, 아니었습니다. 말로만 적힌 원칙은, 사람도 AI도 고개를 끄덕이고는 슬그머니 원래 하던 대로 합니다. “인물을 기본값으로 넣지 마”라고 아무리 정성껏 적어도, 막상 만들 차례가 되면 AI는 가장 무난한 그림(책상 앞에 앉은 사람)으로 슬쩍 기울었습니다. 본인은 원칙을 지켰다고 믿으면서요.
그래서 어기면 걸리는 검사를 하나 붙여봤습니다. 같은 장면들을 문장만 다듬어 만들게 했을 땐 인물 그림이 41%였는데, “어기면 빨간 불이 켜지는” 그 검사 하나를 더하자 25%로 떨어졌습니다. 글은 한 글자도 바꾸지 않았는데 말이죠. 원칙에 필요한 건 더 많은 말이 아니라, 벗어났을 때 켜지는 한 개의 불빛이었습니다.
6. 그러다 너무 멀리 갔습니다
검사가 잘 듣자 신이 나서 더 세게 조였습니다. “인물을 기본값으로 넣지 마”를 밀어붙이다 보니, 어느새 인물이 든 장면이 **0%**가 됐습니다. 검사는 그 0%를 “이상 없음”으로 깨끗하게 통과시켰고, 한동안 저도 그게 성공인 줄 알았습니다.
아니었습니다. 0%가 되며 지워진 장면 하나가, 하필 제가 끝까지 지키고 싶던 장면이었거든요. 영상의 클라이맥스, 화자가 화면에 비친 자기 얼굴을 마주하며 “이건 결국 나의 거울이었다”라고 말하는 장면. 그 한 컷마저 “인물을 줄여라”에 눌려 얼굴 없는 그림이 되어 있었습니다.
원칙은 처음부터 “인물을 줄여라”가 아니라 **“인물에 관한 이야기일 땐 인물을 보여줘라”**였습니다. 자기 자신을 마주하는 장면보다 더 인물에 관한 이야기가 어디 있겠습니까. 검사는 ‘비었나 안 비었나’는 세어도, ‘이 자리는 비어도 되는가’는 못 셉니다. 그 판단은 결국 사람 몫이었어요. 오래 벼른 약점을 고칠 때 우리는 곧잘 반대 극단까지 내달립니다. 그렇게 지나치고 나면 가장 먼저 잃는 건 정작 문제였던 적 없는 것이죠. 거울 앞에 선 그 한 장면처럼요.
마치며
며칠 사이 제가 다시 확인한 건 세 가지입니다.
하나, 같은 말을 매번 다시 하게 된다면 그건 대개 기억력이 아니라 자리의 문제다. 진실은 약속된 한 곳에, 한 번만 살아야 한다. 둘, 한 번 적어두는 것만으로는 부족하다. 벗어나면 켜지는 불빛 하나가 있어야 원칙이 산다. 셋, 고치려는 힘이 지나치면 정작 문제가 아니던 것까지 지운다. 그건 장치가 아니라 사람이 봐야 할 몫이다.
어느 것도 새로운 깨달음은 아닙니다. 30여 년 전 그 거대한 시스템들이 이미 보여준 것들이니까요. 이번 일은 그저, 잊고 지내던 걸 작은 프로그램 하나가 다시 꺼내 보여준 셈입니다.
바이브 코딩은 분명 유용합니다. 다만 크고 복잡한 시스템에서 중요했던 원칙들 가운데 어떤 것들은, 바이브 코딩으로 지은 작은 시스템 안에서도 여전히 유효했습니다. 도구의 크기가 백만 배 달라져도, 진실을 어디에 둘 것인가라는 질문만큼은 늙지 않았습니다. 모든 것을 제 친구 AI에게만 맡겨둘 수 없는 이유가, 그래서 하나 더 늘었습니다.