LLM 코드 직접 타이핑으로 인지 부채 막기
AI 코딩 어시스턴트가 생성한 코드를 그대로 복붙하지 않고 직접 한 줄씩 타이핑하여 코드를 완전히 이해하는 개발 방식을 소개합니다. 이는 코드베이스에 대한 개발자의 이해도를 높이고, 향후 감당하기 힘든 '인지 부채(Cognitive debt)'가 쌓이는 것을 방지하는 실용적 접근법입니다.
4월에 했던 말과 모순되긴 하지만, 저는 여전히 개인 프로젝트에 코딩 어시스턴트를 사용하고 있습니다. AI를 이용해 기능 전체를 한 번에 완성시키는 것은 저를 불만족스럽게 만들고 혼란스럽게 하지만, 프로젝트의 지루한 부분을 빠르게 건너뛸 때 사용하는 것은 꽤 만족스럽습니다. 하지만 코딩 어시스턴트가 제 프로젝트 안에서 마음대로 돌아다니도록 허용하면, 저는 막대한 양의 '인지 부채(cognitive debt)'를 떠안게 됩니다.
제 웹사이트에 태깅 기능을 추가하기 위해 장고(Django) 문서를 뒤적이는 아이디어가 싫을 수는 있지만, 그것이 어떻게 작동하는지 근본적으로 이해하고는 싶습니다. 문제가 지루하다는 것이 제가 그 해결책에 대한 이해를 기계에 완전히 떠넘기고 싶다는 것을 의미하지는 않습니다. 물론 저는 LLM이 생성하는 코드의 한 줄 한 줄을 모두 검토할 수도 있습니다. 이 저주받은 2026년에는 대부분의 개발자들이 그렇게 하길 기대받고 있습니다. 로봇은 PR을 올리고, 인간은 그것을 검토합니다. 참으로 '멋진 신세계'입니다.
하지만 저는 AI가 생성한 PR을 검토하는 것을 즐기지 않습니다. 지나치게 방어적이고, 주석은 형편없으며, 미묘하게 잘못된 수백 줄의 코드를 골똘히 살펴보는 것은 결코 재미있는 일이 아닙니다. 고용주를 위해 마지못해 그렇게 할 수는 있겠지만(동시에 그 고용주가 최대한 빨리 전 직장이 되도록 조치하겠지만), 제 개인 프로젝트에서는 절대 그러지 않을 것입니다. 개인 프로젝트는 무엇보다도 즐거워야 합니다. 개인 프로젝트를 하는 기쁨은 결과물이 아니라 그 과정에서 오는 것입니다.
그럼 대체 어떻게 해야 할까요? 제 작업과 인지에 대한 통제권을 저grade 기계(AI)에 넘기지 않으면서, 지루한 작업을 LLM에 어떻게 맡길 수 있을까요? 저는 비효율적이고 어쩌면 약간 우스꽝스러운 해결책을 하나 생각해냈습니다. 바로 코딩 어시스턴트에게 채팅창에서 코드를 생성하라고 한 다음, 모든 수정사항을 직접 수동으로 적용하는 것입니다. 제 개인 프로젝트의 모든 에이전트 설정 파일에는 이러한 지침이 들어있습니다.
이런 식으로 LLM을 사용하면 LLM을 전혀 사용하지 않을 때보다는 빠르게 작업할 수 있지만, 기계가 대신 생각하게 두는 사람들보다는 여전히 느립니다. 10배 빠르기보다는 아마 2배 정도만 빠를 것입니다. 하지만 제가 속도에서 손해보는 만큼, 코드에 대한 더 깊은 이해력을 얻습니다.
제가 LLM이 생성한 코드의 한 줄 한 줄을 직접 에디터에 타이핑함에 따라, 그 코드가 어떻게 작동하고 기존 코드베이스에 어떻게 맞아떨어지는지에 대한 멘탈 모델을 구축하게 됩니다. 특정 API나 알고리즘을 이해하지 못하면 멈춰서 찾아보거나 LLM에게 설명을 요청할 수도 있습니다. 코드를 직접 타이핑하는 것은 저를 강제로 늦추게 만드는데, 이는 LLM이 만들어냈을 수 있는 환각(잘못된 정보)이나 나쁜 설계 선택을 감지할 가능성을 높여줍니다. 또한 코드를 입력하면서 지속적으로 정리하고, 재구성 및 리팩토링하고, 주석을 추가하며 전반적으로 제 입맛에 맞게 코드를 다듬을 수 있습니다.
가장 중요한 것은, 이 워크플로우를 통해 제 코드베이스의 공간적 지도(Spatial map)를 구축할 수 있다는 점입니다. 저는 코드베이스의 어디에 어떤 기능이 있는지 정확히 알고 있습니다. 변경이 필요할 때 정확히 어느 부분을 수정해야 하는지 알게 됩니다. 이는 프로젝트 내에서 더 빠르게 작업할 수 있게 도울 뿐만 아니라, 향후 LLM에게 더 나은 프롬프트와 지시를 내리기 쉽게 만들어줍니다.
제가 10대였을 때 코딩을 배우기 시작하면서, 경험 많은 프로그래머들은 프로젝트에 코드를 절대 복사해서 붙여넣지 말라고 자주 조언하곤 했습니다. 책으로 공부할 때는 모든 예제를 컴퓨터에 직접 옮겨 적고 실행할 수 있는지 확인하라고 했습니다. 블로그 게시물이나 포럼 답변으로 배울 때는 그것을 직접 타이핑하고 자신의 코드베이스에 맞게 수정하여 완전히 이해하라고 조언받았습니다.
LLM이 생성한 코드를 코드베이스에 수동으로 타이핑하는 것은 그때와 정확히 같은 학습 과정처럼 느껴집니다. LLM을 다루는 가장 효율적인 방법은 아닐지 몰라도, 저는 생산성보다 이해도를 더 가치 있게 여깁니다. 저는 몇 달 동안 이 방식을 사용해왔고, 저에게 아주 잘 맞았습니다. 제가 할 수 있는 한 오래 이 워크플로우를 계속 사용할 계획입니다.
저는 소프트웨어 산업 전체가 우리가 매우 빠른 시일 내에 갚아야 할 막대한 양의 인지 부채를 떠안고 있다고 두려워합니다. 우리의 디지털 인프라가 어떻게 구축되어 있는지 대부분 더 이상 이해하지 못하게 되는 시점이 곧 올 것입니다. 제가 개인적으로 전체 산업의 흐름을 바꿀 수는 없겠지만, 적어도 내가 작성하는 코드는 완전히 이해하고 있다는 것 정도는 확실히 할 수 있습니다.