
솔직히 고백하자면, 저 역시 최근 Cursor나 Claude 같은 AI 도구를 끼고 삽니다. 10년 전, 이클립스(Eclipse) 단축키를 피아노 연주하듯 두드리던 시절을 생각하면 격세지감을 느낍니다. 하지만 요즘 주니어 개발자들의 코드를 리뷰하다 보면, 등골이 서늘해지는 순간이 한두 번이 아닙니다. 코드는 깔끔한데, 정작 작성자가 그 코드가 '왜' 그렇게 동작하는지 설명하지 못할 때가 많기 때문입니다.
저는 개발자 생활 내내 "코드는 자산이 아니라 부채(Liability)"라고 믿어왔습니다. 한 줄의 코드는 잠재적인 버그이자, 미래의 누군가가 유지보수해야 할 짐입니다. 그런데 AI는 이 '부채'를 빛의 속도로 생산해냅니다.
오늘은 제가 AI를 맹신하다가 겪었던 아찔한 실패담과, 그 과정에서 깨달은 '장인 코드(Artisanal Code)'의 진짜 의미에 대해 이야기해보려 합니다.

편리함이라는 이름의 독사과
사건은 간단한 리팩토링에서 시작되었습니다. 레거시 시스템의 비효율적인 상속 구조를 개선하는 작업이었죠. 평소라면 며칠 걸렸을 일을, 저는 Claude Code를 이용해 단 몇 시간 만에 '우아하게' 처리했습니다. AI가 생성한 코드는 완벽해 보였습니다. 테스트 케이스도 통과했고, 가독성도 좋았습니다. 저는 자신만만하게 운영 서버에 배포했습니다.
문제는 그날 새벽에 터졌습니다. 특정 VIP 고객의 결제 프로세스가 멈춰버린 겁니다.
원인을 파헤쳐 보니, AI가 정리한 깔끔한 로직 뒤에 숨어 있던 '비즈니스 맥락(Context)'이 문제였습니다. 10년 전, 누군가가 급하게 하드코딩해 둔 예외 처리가 상속 구조 깊숙한 곳에 박혀 있었는데, AI는 이 '지저분한 코드'를 논리적이지 않다는 이유로(혹은 인지하지 못해서) 제거해버린 것이었습니다.
새벽 3시, 식은땀을 흘리며 로그를 뒤지던 저는 뼈저리게 느꼈습니다. AI는 코드의 문법은 알지만, 그 코드가 지탱하고 있는 비즈니스의 역사와 맥락은 모른다는 사실을요.
인스턴트 커피와 핸드드립의 차이
최근 읽은 써니 암랏-나스(Sunny Amrat-Nath)의 글에서 '장인 코드'라는 표현을 보고 무릎을 탁 쳤습니다. 그는 AI가 생성한 코드를 '인스턴트 커피'에 비유합니다. 뜨거운 물만 부으면 그럴듯한 맛이 나지만, 원두의 출처도 로스팅 과정도 알 수 없는, 그저 카페인을 섭취하기 위한 검은 물일 뿐이라는 거죠.
반면 우리가 지향해야 할 코드는 '싱글 오리진 핸드드립 커피'여야 합니다. 커밋 히스토리 하나하나에 개발자의 고민이 담겨 있고, 왜 이 변수를 썼는지, 왜 이 라이브러리를 선택했는지 설명할 수 있어야 합니다.
많은 분이 "AI가 짜준 코드도 잘 돌아가면 그만 아닌가요?"라고 묻습니다. 아닙니다. 잘 돌아가는 것은 기본입니다. 진짜 문제는 장애가 발생했을 때입니다. 당신이 짠 코드가 아니라면, 당신은 그 코드를 고칠 수 없습니다. 머릿속에 그 코드에 대한 '정신적 모델(Mental Model)'이 없기 때문입니다.
내가 설명할 수 없고, 방어할 수 없고, 수정할 수 없는 코드는 내 코드가 아닙니다. 그저 남이(혹은 기계가) 버리고 간 쓰레기일 수도 있습니다.

AI를 똑똑하게 부리는 법
그렇다고 AI를 쓰지 말라는 꼰대 같은 소리를 하려는 건 아닙니다. 저도 여전히 씁니다. 다만 철칙이 생겼습니다.
"내가 이미 작성할 줄 아는 코드만 AI에게 시킨다."
보일러플레이트(Boilerplate) 코드나, 이미 로직을 완벽히 이해하고 있는 함수의 골격을 잡는 데는 AI만 한 게 없습니다. 하지만 복잡한 비즈니스 로직이나 아키텍처 설계를 통째로 AI에게 맡기는 '에이전트(Agentic) 코딩'은 경계합니다. 그것은 마치 시험 시간에 옆 친구 답안지를 베끼는 것과 같습니다. 점수는 잘 나올지 몰라도, 실력은 늘지 않습니다.
과거 SI 시절, 고객사가 요구하는 '노코드(No-code) 툴' 도입을 결사반대했던 기억이 납니다. "코딩 없이 개발하게 해주세요"라는 달콤한 말은 결국 "엔지니어 없이 시스템을 돌리겠다"는 환상에 불과했습니다. 그때나 지금이나 본질은 같습니다. 도구가 아무리 좋아져도, 시스템의 복잡성을 통제하고 책임지는 것은 결국 사람이어야 합니다.
마치며
후배 개발자분들에게 묻고 싶습니다. 당신의 코드는 당신의 손을 거쳐 탄생한 '작품'입니까, 아니면 AI가 뱉어낸 '결과물'입니까?
AI가 작성한 코드를 마치 술 취한 인턴이 작성한 코드처럼 의심하고 검증하십시오. 그 과정을 거쳐야만 비로소 그 코드는 당신의 자산이 됩니다. 그렇지 않다면, 언젠가 그 코드는 이자까지 쳐서 당신의 주말을 앗아갈 부채로 돌아올 것입니다.
편리함에 취해 기술 부채를 쌓고 있지는 않은지, 오늘 한 번쯤 되돌아보시길 바랍니다.


