바이브코딩105 - 프롬프트 말고, 환경이다.

알아서 ‘흥’ 하게 만들어라

by the게으름

알아서 ‘흥’ 하게 만드는 시스템을 만들어보자


전편에서 이렇게 끝냈다.


AI랑 일을 하다보면, 얘가 내 일을 도와주는 건지.


내가 쟤 따라다니면서 똥 치워주고, 딴데가는거 말리고, 코막히면 코 풀어주는 건지 모를때가 있다.


이게 내가 업무를 하는건지 보육을 하는건지 말이다.



사람이 매번 “흥 해!”를 외치지 않아도 알아서 흥! 하는 시스템


이제 그걸 해보자.


솔직히 말해서,


언제까지 AI 따라다니면서


이 문서 보라고 말해주고


여기서 시작하라고 찍어주고


끝나면 여기다 쓰라고 알려줄 건가



왜?



구독료는 내가 내는데.






이걸 사람이 계속 하면 어떻게 되냐


AI를 쓰는 게 아니다.


유치원 담임이 된다.



아침마다 코 닦아주고,


밥 먹이면서 흘리지 말라고 하고,


뒤돌아서면 또 엉뚱한 데다 써놓고.



이건 자동화가 아니다.


보육이다.



근데 중요한 건 이거다.


AI가 말을 안 듣는 게 아니다.


AI는 굉장히 성실하다.



문제는 딱 하나다.


일할 환경이 매번 바뀐다.






그래서 이제 접근을 바꿔야 한다


우리는 계속 말을 고쳐왔다.


프롬프트를 더 자세히 쓰고


조건을 더 붙이고


예시를 더 달고



근데 이상하지 않나.


말은 점점 길어지는데


결과는 왜 계속 흔들릴까.



이유는 간단하다.


말은 휘발된다.


환경은 남는다.



그래서 요즘은


프롬프트 엔지니어링보다


컨텍스트 엔지니어링 얘기가 나온다.



말 이쁘게 아무리 잘해봐야,


일 잘할 상황 하나 만들어주는 것만 못하다.






그 환경의 핵심이 뭐냐


SSOT다. (Single Source of Truth)


이 프로젝트에서 사실로 취급되는 유일한 것

이게 정해지면 무슨 일이 벌어지냐면,


뭘 봐야 하는지 헷갈리지 않고


뭘 고쳐야 하는지도 갈리고


뭘 버려도 되는지도 바로 나온다


그래서 대부분의 일이 정리된다.






근데 다들 여기서 망한다


SSOT를 “정해놓는 것”까지는 한다.


문제는 그 다음이다.



안 본다

까먹는다

다른 데다 또 만든다



이건 의지 문제가 아니다.


구조 문제다.



읽게 만드는 구조가 없으면


아무리 중요한 문서여도 안 본다.


사람도 그렇다.



매년, 일년에 다이어리 딱 한권만 처음부터 끝까지 쓰시는 분?


난 본적이 없다.






그래서 질문은 이거다


이게 어디에 있어야 하느냐


어떻게 해야 계속 거길 보게 하느냐


기억하라고 시키지 않아도


습관처럼 돌아오게 하려면 어떻게 해야 하느냐



답은 하나다.


처음부터 그 자리에서만 살게 만들면 된다.






기술이 아니다 구조다.


그래서 첫 단추가 이거다.


러스트 스캐폴딩.



이게 뭐냐고?


대단한 거 아니다.


프로젝트 시작할 때


폴더 구조 먼저 박고


문서 자리 먼저 만들고


규칙을 코드보다 먼저 깔아버리는 것



중요한 건 그냥 스캐폴딩이 아니다.


러스트 스캐폴딩이다.



빈 폴더에서 시작하면


AI는 매번 고민한다.


“어디다 써야 하지?”


구조가 박혀 있으면


고민할 필요가 없다.


이미 자리가 있다.






왜 하필 러스트냐


JS/TS 스캐폴딩은 보통 이렇다.


폴더는 편의


구조는 관습


나중에 정리 가능



그래서 AI가 제일 좋아한다.


아무 데나 추가해도


일단 돌아가니까.



러스트는 다르다.


폴더 = 공개 경계


구조 = 계약


잘못된 설계 = 아예 못 하게 막힘


한 줄로 말하면 이거다.



TS는 규율이고,Rust는 헌법이다.



1. 정확히는 "폴더가 있으니 채우려는 습성"과 "틀리면 뒤통수 맞는 환경"의 콜라보다.


두 가지가 동시에 작동한다.


AI는 '빈칸 채우기' 중독자다


AI의 본질은 다음 단어 예측이다. 네가 멍석을 깔아주면, 거기서 춤을 춘다.



폴더가 없을 때:


"어? 정리할 데가 없네? 에라 모르겠다 app.ts에 다 때려박자." -> 스파게티 코드 탄생



폴더가 있을 때 (/docs, /types, /core):


"어? 문서함이 있네? 타입 넣는 곳이 따로 있네?" -> AI는 문맥(Context)에 있는 구조를 따라하려는 관성이 있다. 빈 서랍이 보이면 거기에 양말을 넣으려고 시도한다. 그게 확률적으로 높으니까.



2. 근데 '러스트'라서 통하는 진짜 이유 (전기 울타리)


JS/TS는 폴더를 만들어줘도, AI가 귀찮으면 무시하고 딴 데다 쓴다. 그래도 코드는 돌아가니까. 근데 러스트는 다르다.


러스트에서 파일/폴더 구조는 곧 모듈 트리다. AI가 대충 아무 데나 러스트 코드를 짰다?

컴파일러가 바로 멱살 잡는다.


"야, 너 mod.rs에 등록 안 했잖아."

"야, 이거 프라이빗 모듈인데 왜 밖에서 불러?"


러스트 언어에서는 AI가 헛짓거리를 하면 빨간 줄(에러)이 뜬다.


그럼 AI는 학습된 데이터고 뭐고 일단 에러를 고쳐야 하니까, 강제로 구조를 따르게 된다.



정리하면


폴더를 짜놓는 행위는 "여기다 싸"라고 변기를 갖다 놓는 거고,


러스트를 쓰는 건 "딴 데다 싸면 엉덩이를 걷어차" 주는 장치다.



이 둘이 합쳐져야 비로소 AI가 "아, 시키는 대로 해야겠다"라고 얌전해지는 거다.


그게 우리가 노리는 자동화된 규율이다.



어기면 잔소리 듣는 게 아니라


바로 얻어터진다.


그래서 AI가 함부로 못 건드린다.






그래서 인간은 뭘 더 하면 되냐


다했다.

솔직히 이 정도면 충분하다.


"야 러스트 스캐폴딩 해.

문서 종류 필요한 거 다 폴더 만들어.

니가 안 까먹고 알아서 문서 넣게 잘 좀 해봐.

깃헙 레포 하나 만들어놨거든, 그거랑 연동해."


이렇게 말하면 된다.




프롬프트는 매번 다시 써야 하고 환경은 한 번 만들면 계속 먹힌다.


아무리 프롬프트 이쁘게 잘 써봐야,


일 잘할 상황을 강제해주는 것만 못하다.


그래서 결론은 이거다.



인간은 디테일을 말할 필요가 없다.


대신 환경만 만들어주면 된다.


환경이 잘 되어 있으면, ssot을 읽고, spec을 읽고 dev_log를 기록한다.






TL;DR

AI는 빈칸을 보면 채우려는 습성이 있다. 폴더를 먼저 깔아두면, 그 구조를 따라가려는 관성이 생긴다.

하지만 폴더만으로는 부족하다. 틀려도 돌아가면 AI는 결국 편한 길로 샌다.

Rust 스캐폴딩은 폴더를 규칙으로 만들고, 컴파일러로 전기 울타리를 친다.

그래서 폴더(채우기 본능) + 러스트(틀리면 바로 터짐)가 동시에 작동할 때만, AI가 구조를 어기지 않는다.

결론: 프롬프트를 잘 쓰는 것보다, 일 잘할 환경을 강제하는 게 훨씬 세다




keyword
금요일 연재
이전 24화바이브코딩104 - 구현은 공짜다