TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 23 READS

나쁜 코드는 칡덩굴이다: 한번 뿌리내리면 왜 걷어내기 힘든지

나쁜 코드는 칡덩굴이다: 한번 뿌리내리면 왜 걷어내기 힘든지
SOURCE IMAGE · HACKER NEWS
나쁜 코드는 칡덩굴이다: 한번 뿌리내리면 왜 걷어내기 힘든지

ML 엔지니어이자 오랫동안 개발 문화에 대한 글을 써온 비키 보이키스가 「나쁜 코드는 칡덩굴이다(Bad Code Is Kudzu)」라는 에세이를 올렸어요. 미국 남부에 가면 나무고 집이고 전봇대고 할 것 없이 초록 덩굴로 뒤덮인 풍경을 볼 수 있는데, 그게 바로 칡(kudzu)이에요. 우리한테 칡은 칡즙 재료 정도로 익숙하지만, 미국에서는 '남부를 먹어치운 덩굴'이라고 불리는 악명 높은 외래종이거든요. 보이키스는 이 칡의 역사가 우리가 매일 마주하는 나쁜 코드와 놀랍도록 닮았다고 말해요. AI 코딩 도구가 하루에 수천 줄씩 코드를 찍어내는 지금, 이 비유가 왜 더 무겁게 다가오는지 같이 풀어볼게요.

칡은 어떻게 남부를 먹어치웠냐면

칡은 1876년 필라델피아 만국박람회 때 일본관 장식용으로 미국에 처음 들어왔어요. 잎이 예쁘고 빨리 자라서 정원용으로 인기를 끌었죠. 그런데 1930년대 대공황 시기에 미국 토양보전국이 흙 유실을 막는 데 좋다며 농가에 심으라고 권장하고, 심으면 돈까지 줬어요. 좋은 의도였죠. 문제는 칡이 남부의 덥고 습한 기후에서 하루에 30cm씩 자란다는 거였어요. 천적도 없고, 서리도 잘 안 오니까 멈출 게 없었던 거예요. 1950년대에는 정부가 권장 목록에서 뺐고, 1970년대에는 아예 잡초로 지정했지만, 이미 수백만 에이커가 덮인 뒤였어요. 칡은 뿌리가 깊어서 잎을 아무리 잘라도 다시 올라오고, 완전히 없애려면 몇 년에 걸쳐 뿌리째 파내야 해요.

이걸 코드에 대입하면

이 이야기를 코드베이스에 겹쳐보면 소름 돋을 정도로 맞아떨어져요. 나쁜 코드도 처음엔 좋은 의도로 들어와요. '일단 급하니까 이렇게 하고 나중에 고치자'는 임시 코드, 스택오버플로에서 급하게 복사한 스니펫, 마감 앞두고 예외를 try-catch로 통째로 삼켜버린 함수. 그 순간엔 다 이유가 있었죠.

그런데 코드는 복사로 번식해요. 새로 합류한 개발자는 옆에 있는 코드를 보고 배우거든요. 나쁜 패턴이 하나 있으면 '아, 여기선 이렇게 하는구나' 하고 똑같이 써요. 리뷰어도 '기존 코드랑 일관성 있네' 하고 통과시키고요. 이렇게 한 파일에 있던 패턴이 모듈이 되고, 모듈이 관례가 되고, 관례가 아키텍처가 돼요. 칡이 나무를 타고 올라가서 햇빛을 가리듯, 나쁜 코드는 좋은 코드가 자랄 자리를 먼저 차지해요.

여기서 AI가 등장해요. 코딩 에이전트는 기본적으로 지금 있는 코드베이스를 컨텍스트로 읽고 그 스타일을 따라 써요. 이게 뭐냐면, 여러분의 저장소에 나쁜 패턴이 있으면 에이전트는 그걸 '이 프로젝트의 규칙'으로 배워서 더 빠르게, 더 많이 복제한다는 뜻이에요. 사람이 하루에 복사할 수 있는 양에는 한계가 있었지만, 에이전트는 그 한계가 없어요. 토양보전국이 칡 심으라고 돈 준 것처럼, 우리는 지금 에이전트에게 '빨리 많이 써'라고 보상을 주고 있는 셈이죠. 코드를 만드는 비용은 거의 0에 가까워졌는데, 이해하고 걷어내는 비용은 그대로예요. 이 비대칭이 칡 비유가 정확히 짚는 지점이에요.

업계 맥락에서 보면

사실 이 문제의식은 새롭지 않아요. 워드 커닝햄의 '기술 부채', 깨진 유리창 이론, '용암류(lava flow)' 안티패턴까지, 소프트웨어 업계는 오래전부터 나쁜 코드가 퍼지는 현상을 여러 이름으로 불러왔어요. 달라진 건 속도예요. GitClear가 수억 줄의 코드 변경을 분석한 보고서에 따르면 AI 어시스턴트가 보편화된 이후 복사-붙여넣기 코드 비율은 늘고, 리팩터링을 뜻하는 '이동된 코드' 비율은 줄었어요. 스택오버플로 개발자 설문에서도 AI 도구를 쓰는 비율은 계속 오르는데 그 결과물을 신뢰한다는 비율은 오히려 떨어졌고요. 다만 반대편 시각도 있어요. 칡을 퍼뜨리는 것도 에이전트지만, 뿌리째 뽑는 대규모 리팩터링을 지치지 않고 해낼 수 있는 것도 에이전트라는 거예요. 도구 자체보다 어떤 방향으로 쓰느냐가 문제라는 거죠.

한국 개발자에게 주는 시사점

당장 해볼 수 있는 것들이 있어요. 첫째, 좋은 패턴을 '가장 복사하기 쉬운 것'으로 만드세요. 에이전트든 신입이든 결국 눈에 보이는 걸 따라 하니까, CLAUDE.md나 AGENTS.md 같은 프로젝트 지침 파일에 이 저장소의 규칙과 좋은 예시 파일을 명시해 두는 게 효과가 커요. 둘째, 제초제를 자동화하세요. 린터, 포매터, 중복 코드 검출기를 CI에 걸어두면 칡이 싹틀 때 바로 잡을 수 있어요. 셋째, AI가 생성한 코드는 '기존 코드와 일관성 있다'는 이유만으로 통과시키지 마세요. 그 기존 코드가 칡일 수 있거든요. 넷째, 걷어낼 때는 잎이 아니라 뿌리를 노리세요. 중복된 함수 하나를 고치는 것보다, 그 중복이 생기게 만든 구조를 바꾸는 게 훨씬 오래가요.

마무리

한 줄로 정리하면, 나쁜 코드는 심는 건 쉽고 뽑는 건 어려운데, AI는 심는 속도만 폭발적으로 높였다는 거예요. 여러분 저장소에는 지금 어떤 칡이 자라고 있나요? 그리고 에이전트에게 '이건 따라 하지 마'라고 어떻게 알려주고 계세요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://vickiboykis.com/2026/09/01/bad-code-is-kudzu/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...