문제가 생기면, 우리는 프롬프트를 고친다
바이브코딩을 하다 문제가 생기면, 우리는 가장 먼저 프롬프트를 고친다.
"내가 무엇을 빠뜨렸지?"
"AI가 어디를 잘못 이해했지?"
"어떤 조건을 더 붙이면 되지?"
이렇게 생각하며 어긋난 부분을 다시 설명한다. 대개는 이 방식으로 문제가 풀린다. 막혔던 기능이 돌아가고, 화면은 원하는 모습에 가까워진다. 그래서 우리는 자연스럽게 결론을 내린다.
"역시 프롬프트를 더 잘 써야 하는구나."
물론 틀린 말은 아니다. 모호한 요청은 모호한 결과를 만든다. 짧고 대충 쓴 프롬프트보다, 기준과 예시가 들어간 프롬프트가 더 나은 결과를 만든다.
하지만 진짜 문제는 따로 있다.
그렇게 고친 프롬프트를 다음에도 또 고쳐야 한다는 것이다.
처음에는 이 반복이 잘 보이지 않는다. 기능 하나를 만들고, 어긋난 부분을 고치고, 다시 이어가면 된다. 그런데 프로젝트가 커질수록 같은 씨름이 반복된다. 새 기능을 만들 때마다 지난번에 말한 기준을 다시 설명하고, 새 화면을 붙일 때마다 기존 화면이 흔들리지 않았는지 다시 확인한다.
예를 들어보자. 내 사업의 현황을 한눈에 보는 대시보드를 바이브코딩으로 만든다고 하자. 이번 주 판매가 얼마나 나왔는지, 문의는 얼마나 들어왔는지, 콘텐츠 반응은 어떤지를 한 화면에 모아 보는 프로젝트다.
처음에는 "이번 주 판매를 보여주는 화면을 만들어줘"라고 말하면 충분했다. 그다음에는 상품별 판매 비중을 붙이고, 지난 7일 매출 추이를 그래프로 바꾸고, 환불 주문을 따로 표시하게 했다.
여기까지는 순조롭다. 문제는 그다음부터다.
문의 현황 화면을 새로 만들었더니, 멀쩡하던 판매 화면이 환불을 다시 포함해서 계산하고 있다. 콘텐츠 반응 화면을 손봤더니, 이번에는 단순 조회수 증가를 구매 가능성처럼 해석한다. 분명 지난번에 "조회수는 관심 신호일 뿐 매출은 아니다"라고 정해두었는데도 말이다.
그래서 이번에는 프롬프트를 더 자세히 쓴다.
"환불된 주문은 매출에서 빼줘."
"지금까지 만든 화면의 기준은 그대로 유지해줘."
이렇게 조건을 매번 다시 붙이면 어긋남이 멈출 것 같다. 실제로 그 순간에는 좋아진다. 부탁한 화면은 기준에 맞게 나오고, 숫자도 맞아 보인다. AI가 내 방향을 제대로 알아들은 것처럼 느껴진다.
그런데 다음 기능을 붙이면 또 다른 곳이 어긋난다.
이번에는 문의 화면은 멀쩡한데, 판매 숫자가 지난번과 달라져 있다. 판매를 고치고 나면, 이번에는 콘텐츠 화면이 어긋난다. 하나를 맞추면 다른 하나가 흔들리는 식이다.
문제는 결과가 완전히 틀리지 않는다는 데 있다. 대체로 그럴듯하다. 그래서 한눈에 잡히지 않는다. 화면마다 숫자를 다시 열어보고, 지난번에 만든 화면과 나란히 놓고, AI가 어떤 기준으로 계산했는지 따라가야 한다.
기능 하나를 붙였을 뿐인데, 새로 만드는 시간보다 이미 만든 것을 다시 검수하는 시간이 더 오래 걸린다.
이쯤 되면 자연스럽게 이런 생각이 든다.
"이렇게 하는 게 바이브코딩인가?"
처음 기대한 모습은 이런 것이 아니었다. 말 한마디로 무엇이든 만들어지던 도취감은 사라지고, 이제는 AI가 만든 결과를 한 줄씩 다시 들여다보고 있다.
그래서 많은 사람은 다시 같은 결론으로 돌아간다.
"내가 아직 프롬프트를 잘 못 써서 그런가 보다."
하지만 기능을 하나 붙일 때마다 매번 다른 곳이 흔들린다면, 문제는 프롬프트 문장력만이 아니다.
프롬프트가 길어지는 이유
우리는 ChatGPT, Claude, Gemini와 대화하며 AI를 써왔다. 그래서 AI에게 일을 시키는 방식도 자연스럽게 대화로 배웠다.
무언가를 요청하고 결과를 받는다. 마음에 들지 않으면 다시 설명하는데, 조금 더 구체적으로 말하고, 예시를 붙이고, 금지사항을 적는 식이다.
이 방식은 짧은 작업에서는 아주 잘 통한다. 요약을 부탁하거나, 아이디어를 정리하거나, 문장을 다듬는 일이라면 프롬프트만으로도 충분하다. 한 번의 대화 안에서 시작하고 끝나는 일이기 때문이다.
하지만 같은 프로젝트를 계속 키워갈 때는 다르다.
"판매 화면을 만들어줘"라는 한 줄 뒤에는 사실 많은 기준이 숨어 있다. 매출에 환불된 주문을 포함할지, 테스트 결제는 제외할지 같은 것을 하나하나 정해야 한다.
문의 화면도, 콘텐츠 반응 화면도 마찬가지다. 화면마다 무엇을 무엇으로 볼지 정해야 할 기준이 그 한 줄 아래 깔려 있다.
처음에는 이런 기준을 대화로 하나씩 알려준다. "환불은 매출에서 빼줘", "조회수를 구매 가능성으로 해석하지 마" 같은 말들이다. AI도 그 순간에는 잘 따른다.
그런데 숨어 있는 것은 기준만이 아니다. 어떤 자료를 먼저 볼지 정하는 절차도, 숫자가 맞는지 확인하는 검증도 전부 말로 붙여야 한다.
그래서 프롬프트는 점점 길어진다.
처음에는 요청문이었다.
이번 주 판매 화면을 만들어줘.
조금 지나면 조건문이 된다.
이번 주 판매 화면을 만들어줘.
단, 환불 주문은 매출에서 제외하고,
테스트 결제도 빼고,
세트 상품은 개별 상품으로 풀어서 계산해줘.
더 지나면 작은 운영 매뉴얼이 된다.
이번 주 판매 화면을 만들어줘.
먼저 공식 판매 CSV를 확인하고,
매출은 환불을 뺀 순매출로 계산하고,
지난번 대시보드의 계산 방식은 그대로 유지하고,
숫자가 맞는지 요약 카드와 그래프를 대조해줘.
불확실한 기준은 임의로 정하지 말고 먼저 물어봐.
이렇게 쓰면 확실히 결과는 좋아진다.
하지만 여기서 한 가지를 알아차려야 한다.
기준도, 절차도, 검증도 전부 대화 안에만 있다.
여기서 이런 생각이 들 수 있다. "그럼 그냥 더 꼼꼼하게 적으면 되는 것 아닌가?"
어느 정도까지는 맞다. 프롬프트를 자세히 쓰면 당장의 결과는 좋아진다. 하지만 반복되는 프로젝트에서는 한계가 있다. 문제는 프롬프트를 얼마나 잘 쓰느냐가 아니라, 그 기준이 대화 안에만 있다는 데 있다.
이 한계를 이해하려면, 우리가 AI를 어떤 존재로 오해하고 있는지부터 봐야 한다.
AI에 대한 가장 큰 오해
우리는 무의식적으로 AI를 어제 같이 일한 동료처럼 대한다.
지난번에 한 번 설명했으니 이번에도 알아들을 거라고 기대한다. 한 번 정해준 기준이니 다음에도 그대로 지킬 거라고 믿는다. "아까 말했잖아", "지난번처럼 해줘", "이 프로젝트에서는 원래 그렇게 하기로 했잖아"라고 생각한다.
그런데 AI는 그런 동료가 아니다.
프롤로그에서 이미 보았다. AI에 가까운 모습은 실력은 뛰어난데, 매일 아침 처음 출근하는 직원이다. 이 장에서 볼 것은 그다음이다. 왜 매일이 첫 출근인지, 그 구조를 알면 해결 방향이 보인다.
이 직원은 빠르다. 이해력도 좋다. 시키면 금방 만든다. 그런데 한 가지 치명적인 특징이 있다. 어제 일을 기억하지 못한다.
어제 당신이 무엇을 부탁했는지, 어떤 기준으로 계산하기로 했는지, 어떤 실수를 다시 하지 않기로 했는지 모른다. 매일이 첫 출근이다.
이런 직원과 일하려면 방법은 하나뿐이다. 그날 필요한 모든 것을 그날 아침에 다시 알려줘야 한다.
지금 우리가 프롬프트로 하는 일이 바로 그것이다. 새 기능을 부탁할 때마다 기준과 절차와 검증을 말로 설명한다. 직원은 그날 들은 것만 가지고 일한다. 말해주지 않은 것은 그에게 존재하지 않는다.
당신이 말해준 것은 직원 앞 책상에 메모처럼 올라간다. 그런데 이 책상에는 정해진 크기가 있다. 직원이 한 번에 펼쳐놓고 볼 수 있는 분량에는 한계가 있다. 이 책상을 컨텍스트 윈도우라고 부른다. 이름은 어렵지만 뜻은 단순하다.
컨텍스트 윈도우 = AI가 지금 이 작업에서 동시에 펼쳐볼 수 있는 자료의 크기
대화가 길어지면 책상이 점점 찬다. 처음에 올려둔 메모 위로 새 요청과 새 자료가 쌓인다. 책상이 꽉 차면 가장 먼저 올려둔 메모부터 가장자리로 밀려난다. 결국 책상 밖으로 떨어진다.
그래서 긴 대화의 후반부에서 AI가 앞에서 정한 기준을 슬그머니 어기는 일이 생긴다. 그 기준이 적힌 메모가 이미 책상에서 밀려났기 때문이다.
지금까지 나눈 하나의 대화, 열려 있는 창 하나가 이 직원의 하루다. 이 하나의 대화를 세션이라고 부른다.
세션 = AI와 나누는 하나의 대화 (창 하나)
하루가 끝나 세션을 닫고 새 창을 열면 이 일은 더 분명해진다. 그것은 책상을 통째로 치우는 것과 같아서, 어제의 메모는 한 장도 남아 있지 않다. 사람에게는 "어제 말했잖아"지만, AI에게는 "오늘 처음 듣는 말"이다.
여기에 한 가지가 더 겹친다.
책상 위에 같은 메모가 놓여 있어도, AI가 그것을 매번 똑같이 처리하지는 않는다. 어떤 때는 매출 기준을 더 잘 챙기고, 어떤 때는 화면 구성 요청을 더 우선한다. 어떤 때는 빠진 부분을 물어보고, 어떤 때는 문맥상 그럴듯한 방향으로 채운다.
그래서 같은 요청을 해도 결과가 매번 조금씩 달라진다.
사람이라면 "지난번이랑 똑같이 해줘"로 어느 정도 맞출 수 있다. 하지만 매일 처음 출근하는 직원에게는 돌아볼 지난번이 없다.
여기서 또 다른 오해가 생긴다.
"AI가 아직 덜 똑똑해서 그런가?"
"모델이 더 좋아지면 해결되겠지."
"내가 더 단호하게 시키면 다음부터는 기억하겠지."
그렇지 않다.
이것은 단순히 성능이 부족해서 생기는 문제가 아니다. AI가 일하는 방식 자체에서 생기는 문제다. 더 똑똑한 모델이 나와도 새 세션은 여전히 빈손으로 시작한다. 아무리 강하게 말해도, 그 말은 세션이 끝나면 책상과 함께 치워진다.
이 사실을 받아들이는 순간, 해결 방향도 달라진다.
AI를 위한 환경
매일 처음 출근하는 직원에게도 안정적으로 일을 시키는 방법이 있다.
그날그날 책상 위에 메모를 올려주는 대신, 작업장 게시판에 기준을 붙여두는 것이다. 직원이 새로 출근해도 같은 규칙을 볼 수 있게 만드는 것이다. 대표로 말하면, 같은 설명을 매일 반복하는 대신 매뉴얼을 하나 만들어 붙이는 일이다.
대화창은 책상이다. 세션이 끝나면 치워진다. 반면 프로젝트 안에 남긴 기준은 그 게시판에 가깝다. 직원이 새로 출근해도 다시 볼 수 있다.
예를 들어 프로젝트 안에 이런 기준이 남아 있다고 해보자.
매출은 결제 완료 금액에서 환불을 뺀 순매출로 본다.
테스트 결제는 모든 매출 계산에서 제외한다.
광고 제휴 제안과 스팸은 문의 수에 포함하지 않는다.
조회수는 관심 신호일 뿐, 구매 가능성으로 바로 해석하지 않는다.
이 문장들이 대화창이 아니라 프로젝트 안에 남아 있으면, AI는 새 세션에서도 다시 볼 수 있다. 어떤 자료를 공식으로 삼을지 남아 있으면 아무 자료나 믿고 계산하지 않는다. 이 프로젝트에서 먼저 확인해야 할 기준이 남아 있으면, 처음 출근한 직원에게도 출발점이 생긴다.
이것이 프롬프트를 잘 쓰는 일과 환경을 만드는 일의 차이다.
프롬프트를 잘 쓰는 것 = 오늘 책상 위에 좋은 메모를 올리는 일
환경을 만드는 것 = 내일 출근할 직원도 같은 메모를 보게 만드는 일
앞의 것은 한 번의 결과를 좋게 만든다. 뒤의 것은 반복되는 결과를 안정시킨다.
그래서 반복 작업에 정말 필요한 것은 더 긴 프롬프트가 아니다. 대화 안에만 있던 기준과 절차, 검증 가운데 무엇을 프로젝트에 남길지 가려내는 일이다.
물론 프롬프트가 필요 없다는 뜻은 아니다. 프롬프트는 매번 새로 하는 요청이고, 환경은 그 요청이 올라설 바닥이다.
바닥이 없으면 요청은 매번 흔들린다.
여기까지 왔으면 한 가지는 분명해졌을 것이다.
무언가 어긋날 때 우리가 본능적으로 손대는 곳은 프롬프트다. 하지만 프롬프트를 아무리 다듬어도 같은 문제가 반복된다면, 더 멋진 문장을 찾기 전에 봐야 할 것이 있다.
내가 지금 프롬프트에 무엇을 욱여넣고 있는가.
대화 안에만 있던 기준은 세션이 끝나면 사라진다. 그래서 매번 다시 말하고, 다시 시키고, 다시 확인하게 된다. 그 기준을 대화가 아니라 AI가 다음에도 펼쳐볼 수 있는 곳에 남겨두면 이 반복이 멈춘다.
그렇다면 그 기준은 어디에 남겨야 할까.
매일 처음 출근하는 직원에게 필요한 것은 더 긴 설명이 아니라, 기준이 정리된 작업장이다. 그 작업장을 만드는 가장 기본적인 도구가 폴더와 파일이다.
비개발자에게 폴더와 파일은 개발자의 형식처럼 보일 수 있다. 하지만 AI에게는 다르다. 폴더와 파일은 단순한 정리 도구가 아니다. AI에게 "여기는 기준, 여기는 자료, 여기는 작업, 여기는 검증"을 알려주는 구조다.
프롬프트에 모든 것을 다시 설명하던 방식에서 벗어나려면, 먼저 이 구조부터 만들어야 한다. 이것이 하네스의 첫 번째 버튼, 구조다.
이 장에서 기억할 것
프롬프트는 필요하다. 하지만 프롬프트만으로는 반복되는 프로젝트를 안정시킬 수 없다. 프롬프트는 오늘 책상에 올리는 메모이고, 환경은 내일 다시 출근한 AI도 보는 게시판이다.
그러니 이제 질문을 바꿔야 한다.
"프롬프트를 어떻게 더 잘 쓰지?"가 아니라, "이 기준을 어디에 남겨야 다음에도 다시 쓸 수 있지?"
이 질문이 AI 사용자를 AI 네이티브로 옮겨놓는 첫 번째 전환이다.
다음 장에서는 그 첫 번째 버튼을 누른다. AI가 헤매지 않도록 프로젝트의 뼈대부터 세운다.