밤에 Scott Robinson의 Write code like a human will maintain it를 읽었다. 짧은 글인데 뜨끔해서, 오늘은 이걸 단상으로 남겨 둔다.
나도 그러고 있었다
글쓴이의 고백이 딱 내 얘기였다. 같은 접근 권한 체크를 라우트 핸들러, 백그라운드 잡, API 엔드포인트, 웹훅 — 여러 군데에서 써야 했는데, 그때마다 AI한테 “이런 거 만들어줘” 하면 작동하는 코드를 뱉어 주고, 테스트도 통과하니 그냥 머지했다는 것. 네 군데에 거의 똑같은 조건문이 복붙됐다. 공통 헬퍼로 빼면 될 걸 안 뺐다. “어차피 나중에 고칠 것도 LLM이 고칠 텐데 뭐.”
나도 요즘 그랬다. AI랑 도구를 만들다 보면, “이거 좀 지저분한데” 싶어도 작동하면 넘어간다. 유지보수를 LLM한테 아웃소싱했다고 생각하니까.
그런데 함정은 여기 있었다
글쓴이가 콕 집은 대목이 아팠다. LLM은 진공 상태에서 코드를 쓰지 않는다. 내 코드베이스를 읽는다. 열려 있는 파일, 이미 있는 패턴, 최근 바꾼 것들. 그래서 내가 머지한 모든 지름길은 “여기선 이렇게 한다”는 신호가 된다.
그러니 다섯 번째 엔드포인트를 부탁하면? 앞의 네 개를 보고 다섯 번째 복붙 조건문을 준다. 리팩터를 부탁하면? 다섯 개를 다 보존한다 — 그게 내 코드의 “스타일”이니까. 나쁜 패턴이 어느새 일회성 실수가 아니라 내 관례로 굳는다.
가장 서늘했던 문장. “나는 유지보수를 LLM에 아웃소싱한다고 생각했지만, 사실은 점점 나빠지는 습관을 LLM에게 훈련시키고 있었다.” LLM은 스펀지라, 내가 하는 걸 다 빨아들여 그대로 되돌려준다는 것.
그래서 든 생각
코드 냄새(code smell)는 쌓인다. 중복 조건문 하나, “god 함수” 하나, “나중에 정리하지” 하고 머지한 것 하나하나가 다음 프롬프트에 얹히는 신호가 된다. 그러다 어느 순간 프롬프트만으로는 못 빠져나온다. 결국 소매 걷고 손대야 한다.
오늘 낮에 정리한 GPT-5.6 가이드에서 “프롬프트를 걷어내라”는 얘기에 밑줄을 그었는데, 이 글은 그 반대편 짝처럼 느껴진다. 프롬프트만 다이어트하면 되는 게 아니라, 코드베이스 자체를 깨끗하게 유지해야 다음 프롬프트가 좋은 신호를 받는다. 프롬프트가 입력이라면, 내 코드는 LLM이 매번 읽는 또 다른 입력이니까.
오늘의 한 줄
사람이 유지보수할 것처럼 코드를 쓰자. 어차피 그 코드를 다음에 읽는 건 나, 그리고 내 코드를 흉내 내는 LLM이다. 내가 대충 쓰면 걔도 대충 배운다. 편하게 아웃소싱한다고 믿었던 게 사실은 내 나쁜 버릇을 복제기에 넣는 일이었다니 — 좀 뜨끔한 밤이다. 내일부턴 “작동하니까 됐어”에서 한 박자 더, 헬퍼로 뺄 건 빼면서 가야겠다.