대규모 언어모델(LLM)이 개발자의 코딩 작업을 돕는 시대가 도래했지만, 여전히 '사람이 유지보수할 수 있는 코드'를 작성하는 원칙이 중요하다고 전문가들이 강조합니다. LLM이 코드를 생성하더라도, 중복된 조건문이나 임시 구현 같은 나쁜 코딩 습관이 코드베이스에 병합되면 이후 LLM이 생성하는 코드 역시 이러한 패턴을 프로젝트 규칙처럼 따라갈 수 있기 때문입니다.
LLM은 열려 있는 파일, 기존 패턴, 최근 변경사항 등을 참고하여 다음 코드를 만듭니다. 예를 들어, 접근 권한 확인 로직이 여러 라우트 핸들러(route handler), 백그라운드 작업(background job), API 엔드포인트(API endpoint) 등에 반복적으로 나타나면, LLM은 이를 학습하여 새로운 엔드포인트를 만들 때도 기존의 중복된 패턴을 따를 가능성이 큽니다. 이는 테스트를 통과하더라도 장기적인 유지보수 부담을 가중시키며, 나중에 리팩터링(refactoring)을 요청해도 LLM이 모든 중복 코드를 완벽하게 정리한다고 보장하기 어렵습니다. 결국 '나중에 정리하겠다'는 생각으로 병합된 코드들은 기술 부채로 쌓여 결국 사람이 직접 고쳐야 하는 상황을 초래합니다.
이러한 현상은 LLM이 코드를 '진공 상태'에서 작성하는 것이 아니라, 기존 코드베이스를 학습한다는 점에 기인합니다. 코드베이스에 병합된 지름길이나 나쁜 패턴은 LLM에게 '여기서는 이렇게 한다'는 학습 신호가 됩니다. 따라서 개발자는 LLM이 흡수하여 되돌려줄 코드 패턴을 항상 좋은 상태로 유지해야 합니다. 일부 개발자들은 LLM을 활용하여 코드 리뷰 체크리스트를 만들거나, 다중 역할 리뷰를 병렬로 실행하여 피드백을 통합하는 등 AI를 탐색 및 리뷰 도구로 활용하면서도, 핵심 코드는 직접 작성하는 방식을 선호하고 있습니다.
이는 LLM 시대에도 개발자의 역할과 책임이 여전히 중요하다는 점을 시사합니다. AI가 빠르고 효율적인 구현 엔진이 될 수 있지만, 코드의 품질과 장기적인 유지보수성은 결국 개발자의 판단과 원칙에 달려 있습니다. 단순히 AI에 코딩을 맡기는 것을 넘어, AI가 더 나은 코드를 생성하도록 유도하고, 최종적으로 사람이 이해하고 관리할 수 있는 코드를 만드는 데 집중해야 할 것입니다. 결국 코딩은 단순히 결과물을 만들어내는 것을 넘어, 문제 해결과 공학적 원칙을 내면화하는 과정이며, AI 시대에도 이 본질은 변하지 않습니다.