발표에서 확인된 핵심 사실

테스트만 통과하면 즉시 병합 버튼을 누르는 개발 환경은 코드 생산 속도를 비약적으로 높였다. 하지만 빠른 속도에 매몰되어 정작 AI가 어떤 패턴을 학습하고 복제하는지는 간과한다. LLM(대규모 언어 모델)이 좋은 패턴을 생성하게 하려면 사람이 직접 유지보수할 것처럼 코드를 작성해야 한다. AI는 기존 코드베이스의 패턴을 흡수해 되돌려주는 특성이 있다. 따라서 사람이 유지보수한다는 관점으로 코드를 관리하고 좋은 상태의 패턴을 유지해야만 AI가 내놓는 결과물의 품질이 무너지지 않는다.

유지보수 책임을 AI에 전적으로 전가하려는 태도는 코드 품질 저하를 방치하는 결과로 이어진다. 나중에 수정할 때도 LLM이 알아서 해결해 줄 것이라는 착각은 코드 내의 중복이나 코드 냄새(코드의 잠재적 문제점)를 그대로 두게 만든다. 이러한 방치는 결국 모델이 나쁜 습관을 표준 패턴으로 학습하게 하며, 결과적으로 점점 더 나빠지는 코드를 반복해서 생성하는 상황을 초래한다. AI를 믿고 방치한 결과가 다시 AI의 낮은 품질로 되돌아오는 악순환이 형성된다.

AI가 생성한 코드를 검토할 때 단순한 동작 여부만 확인하는 방식은 코드베이스의 장기적인 건강을 해친다. 개발자는 AI의 제안이 현재 코드베이스의 패턴을 오염시키지 않는지를 최우선 판단 기준으로 삼아야 한다. 사람이 유지보수 가능한 수준의 엄격한 기준을 적용해 좋은 상태의 패턴을 유지할 때, LLM은 비로소 생산적인 도구로 기능한다. 코드의 품질을 LLM에 맡기지 않고 사람이 통제하는 것이 AI 코딩의 핵심이다.

현재 코드베이스의 정보를 참고하여 코드를 작성한다

테스트만 통과하면 일단 병합 버튼을 누르는 개발자의 일상은 편리하지만 위험하다. LLM은 진공 상태에서 코드를 짜지 않는다. 현재 열려 있는 파일과 이미 존재하는 코드 패턴, 그리고 최근에 변경된 사항들을 모두 읽어 다음 코드를 생성한다. 구체적으로는 현재 에디터에 열려 있는 탭의 내용과 최근 커밋 내역 등을 참고해 코드의 일관성을 맞춘다. 모델은 사용자가 작성한 기존의 맥락을 학습해 가장 확률적으로 높은 다음 토큰을 제안하며, 이 과정에서 현재 코드베이스의 스타일을 그대로 흡수한다.

저장소 안에 복사된 패턴이 많을수록 모델은 새로운 설계 대신 복제를 선택한다. 예를 들어 비슷한 조건문이 네 번 반복된 코드가 있다면, LLM은 이를 표준 패턴으로 인식해 다섯 번째 복사본을 만드는 신호로 받아들인다. 책임이 너무 많은 거대한 함수인 갓 함수(God function)를 방치하면 모델은 이를 정답으로 학습해 계속해서 비대한 코드를 생성한다. 잘못된 관습이 코드베이스에 쌓일수록 AI는 이를 정교하게 복제하는 도구로 변한다.

AI가 생성한 코드를 검토할 때 동작 여부만 확인하는 습관은 코드베이스를 오염시킨다. 모델이 기존의 잘못된 패턴을 복제한 것은 아닌지, 설계 원칙을 무너뜨리는 복사본을 만들지는 않았는지 판단해야 한다. 단순히 테스트 케이스를 통과했는지가 아니라, 이 코드가 전체 코드베이스의 패턴을 오염시키지 않는지를 검증하는 기준이 필요하다. 기능 구현을 넘어 패턴의 무결성을 검증하는 작업이 코드 리뷰의 핵심이 된다.

확인해야 할 핵심 지점

AI가 짜준 코드를 그대로 가져다 쓰는 것은 당장 비용이 들지 않는 것처럼 보이지만, 사실은 미래의 기술 부채를 미리 끌어 쓰는 행위다. 테스트만 통과하면 병합 버튼을 누르는 개발자의 습관은 코드베이스에 중복 조건문이나 임시 구현체를 남긴다. LLM(거대언어모델)은 진공 상태에서 코드를 생성하지 않고 현재 프로젝트의 기존 패턴과 최근 변경 사항을 학습해 다음 코드를 제안한다. 병합된 나쁜 관행은 모델에게 일종의 학습 신호가 되어 프로젝트 규칙으로 인식된다. 결국 모델은 기존의 잘못된 패턴을 표준으로 삼아 다섯 번째, 여섯 번째 복사본을 자동으로 생성하며 오염을 확산시킨다.

중복 조건문이나 지나치게 많은 책임을 가진 거대한 God 함수(하나의 함수가 너무 많은 기능을 수행하는 구조)가 쌓이면 상황은 더 악화된다. 나중에 정리하겠다며 병합한 임시 코드들이 누적되어 코드 냄새(코드의 잠재적 결함을 암시하는 징후)가 심해진다. 이렇게 누적된 나쁜 패턴은 다음 프롬프트 결과에도 부정적인 영향을 주어 생성 품질을 지속적으로 떨어뜨린다. 결국 프롬프트만으로는 해결이 불가능한 지점에 도달하며 사람이 직접 모든 코드를 뜯어고쳐야 하는 수동 수정 단계로 돌아가게 된다.

AI 생성 코드를 검토하는 기준은 이제 단순한 동작 여부를 넘어 코드베이스의 패턴을 오염시키지 않는지로 옮겨가야 한다. 모델이 제안한 코드가 기존의 잘못된 관행을 복제하고 있지는 않은지, 혹은 새로운 나쁜 패턴을 추가하고 있지는 않은지 면밀히 확인해야 한다. 코드베이스의 일관성을 해치지 않는지 판단하는 것이 병합 버튼을 누르기 전의 최종 결정 기준이 된다.

테스트 통과만으로 병합 버튼을 누르는 개발자의 일상은 LLM이 코드베이스의 나쁜 패턴까지 학습하는 경로가 된다. 모델은 진공 상태에서 코드를 짜지 않으며, 방치된 중복 조건문이나 거대한 함수를 표준 패턴으로 인식해 무분별한 복제본을 생성한다.

이제 코드 리뷰의 기준은 단순한 동작 여부에서 패턴의 오염 여부로 옮겨간다. AI가 생성한 코드를 승인하는 행위는 곧 그 패턴을 코드베이스의 표준으로 정의하는 선언이다.