3 분 소요

hits

AI에게 코딩을 시켜본 경험이 있는가? 시키는 대로 했을 뿐인데, 왜 항상 만족스러운 결과가 나오지 않을까? 마치 학생이 질문의 요지를 파악하지 못하고 엉뚱한 답을 늘어놓는 상황과 놀랍도록 닮았다.

LLM 코드 실수를 줄이는 4가지 교육 원칙

AI의 코딩, 우리 학생들의 학습 과정과 닮았다

최근 AI 분야의 저명한 개발자 안드레이 카르파티의 통찰이 담긴 흥미로운 글을 읽었다. 그는 대규모 언어 모델(LLM)이 코드를 생성할 때 흔히 저지르는 실수들을 지적한다. 이를 요약하면 세 가지 문제로 요약된다. 첫째, AI는 스스로 잘못된 가정을 하고 이를 확인하지 않은 채 코드를 만들어낸다. 혼란스러워도 명확히 묻지 않고, 불일치를 드러내거나 절충안을 제시하지도 않는다. 둘째, 코드를 불필요하게 복잡하게 만든다. 추상화를 남용하고, 쓸모없는 코드를 정리하지 않으며, 100줄이면 될 것을 1,000줄로 늘린다. 셋째, 주어진 과제와 상관없는 기존 코드의 주석이나 구조를 마음대로 수정하거나 삭제하는 경우가 생긴다. 마치 학생이 본질을 놓친 채 과도하게 장황한 보고서를 쓰고, 불필요한 부분까지 손대어 오히려 완성도를 떨어뜨리는 모습과 흡사하다. 이러한 문제를 해결하고자 그는 LLM의 코드 생성 능력을 향상하는 네 가지 원칙을 제시한다.

코딩 전 사고: 생각하고 묻는다

첫 번째 원칙은 “코딩 전 사고(Think Before Coding)”이다. LLM은 종종 모호한 지시를 받으면 스스로 한 가지 해석을 택하고 그 방향으로만 진행한다. 이 원칙은 AI에게 가정을 명시적으로 밝히고, 불확실한 경우 추측 대신 질문하게 한다. 만약 여러 해석이 가능하다면, AI는 그 해석들을 제시하고 사용자에게 선택을 요구한다. 더 간단한 방법이 있다면 주저 없이 반대 의견을 내고, 혼란스러울 때는 무엇이 불분명한지 정확히 말하고 명확화를 요청한다. 우리 교육 현장에서도 학생들에게 문제 해결 전 자신의 가정을 밝히고, 궁금한 점을 질문하며, 더 나은 해결책을 탐색하게 하는 과정과 다르지 않다. 이는 메타인지를 훈련하는 핵심이다.

간결함의 미덕: 단순함이 최고이다

두 번째 원칙은 “단순함이 최고(Simplicity First)”이다. LLM은 과잉 엔지니어링 경향이 강하다. 요청받지 않은 기능, 한 번만 쓸 코드에 대한 추상화, 필요 없는 유연성이나 설정 가능성, 불가능한 시나리오에 대한 오류 처리 등을 과도하게 추가한다. 200줄이면 될 코드를 50줄로 줄일 수 있다면 반드시 그렇게 다시 작성해야 한다. 카르파티는 “선임 엔지니어가 이 코드를 보고 과하다고 할까?”라고 질문한다. 교육 활동을 기획할 때도 우리는 이러한 질문을 던질 필요가 있다. ‘이 수업이 정말 복잡할까?’, ‘가장 핵심적인 학습 목표에만 집중했는가?’, ‘더 단순하고 명료한 방법은 없을까?’라는 질문을 던져 과도한 활동이나 자료를 덜어내는 과정과 일맥상통한다.

외과 의사처럼 정교하게: 꼭 필요한 곳만 건드린다

세 번째 원칙은 “외과 의사처럼 신중하게(Surgical Changes)”이다. 기존 코드를 수정할 때, LLM은 주어진 과제와 무관한 주변 코드, 주석, 형식까지 ‘개선’하려는 경향이 있다. 이 원칙은 오직 요청된 부분만 수정하고, 깨지지 않은 부분을 리팩토링하지 않으며, 기존 스타일을 따른다. 만약 관련 없는 죽은 코드를 발견했다면 삭제하지 않고 언급만 한다. 또한, 자신의 변경 사항으로 인해 쓸모없어진 부분(임포트, 변수, 함수 등)만 제거하고, 원래부터 존재하던 죽은 코드는 건드리지 않는다. 학생들의 보고서나 과제를 첨삭할 때, 요구한 수정 사항 외에 개인적인 취향으로 문장 표현이나 형식까지 바꾸지 않는 교사의 태도와 비슷하다. ‘내 오염만 치운다’는 이 원칙은 책임감을 강조한다.

목표 기반 실행: 성공 기준을 명확히 제시한다

네 번째 원칙은 “목표 기반 실행(Goal-Driven Execution)”이다. 단순히 “검증 기능을 추가해”라고 명령하는 대신, “유효하지 않은 입력에 대한 테스트를 작성하고, 이 테스트를 통과하게 해”와 같이 검증 가능한 성공 기준을 제시한다. “버그를 고쳐” 대신 “버그를 재현하는 테스트를 작성하고, 이 테스트를 통과하게 해”라고 구체적인 목표를 준다. 여러 단계의 작업인 경우, 각 단계와 그 검증 방법을 간략하게 계획으로 제시한다. (안드레이 카르파티LLM이 특정 목표를 달성하기 위해 반복하는 데 탁월한 능력을 지닌다고 말한다.) 막연한 지시 대신 명확한 목표를 주면, LLM은 스스로 해결책을 찾고 반복적으로 개선한다. 이는 교사가 학생에게 “열심히 해라” 대신 “이번 주말까지 수학 문제집 50쪽을 풀고, 오답 노트를 작성한 후 70점 이상을 받도록 노력해라”와 같이 구체적인 목표와 검증 방법을 제시하는 교육 방식과 같다. 학생은 이 목표를 달성하기 위해 스스로 학습 전략을 세우고, 끊임없이 수정하며 나아간다.

AI와의 협업, 교사의 메타인지 훈련

이 네 가지 원칙이 잘 적용되면 LLM이 생성한 코드의 불필요한 변경 사항이 줄어든다. 코드는 처음부터 간결하게 만들어지고, 실수를 저지르기 전에 명확한 질문을 던진다. 결국 깔끔하고 최소한의 변경이 담긴 결과물을 얻는다. 이 원칙들은 결국 교사가 AI를 더욱 효과적으로 활용하기 위한 메타인지 훈련이 된다. AI의 한계를 이해하고, 어떻게 상호작용해야 가장 효율적인 결과물을 얻을 수 있는지 탐색하는 과정이기 때문이다. AI에게 ‘무엇을 할지’만 알려주는 것이 아니라 ‘어떻게 성공할지’의 기준을 제시할 때, AI는 진정한 협력자가 된다.

동물행동학·각인 이론의 시선으로 보면

조작적 조건화는 유기체가 특정 행동을 했을 때 주어지는 강화나 처벌에 따라 그 행동의 빈도가 달라지는 현상을 설명한다. LLM에게 명확한 성공 기준을 제시하고 반복 학습시키는 과정은 동물에게 원하는 행동을 유도하고 강화하는 조련 과정과 매우 유사하다. 불필요한 행동(과도한 코딩, 엉뚱한 수정)에는 보상이 주어지지 않고, 원하는 행동(간결하고 목표 지향적인 코드)에만 ‘성공’이라는 강화가 따르는 것이다. 이는 LLM이 단순히 명령을 따르는 기계가 아니라, 주어진 피드백에 따라 스스로의 행동 패턴을 수정하고 ‘학습’한다는 점을 분명히 한다.

출처

  • https://github.com/forrestchang/andrej-karpathy-skills