# 코드에서 발생하는 환각은 LLM 오류 중 가장 덜 위험한 형태임

> Clean Markdown view of GeekNews topic #19547. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19547](https://news.hada.io/topic?id=19547)
- GeekNews Markdown: [https://news.hada.io/topic/19547.md](https://news.hada.io/topic/19547.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-03-04T08:39:39+09:00
- Updated: 2025-03-04T08:39:39+09:00
- Original source: [simonwillison.net](https://simonwillison.net/2025/Mar/2/hallucinations-in-code/)
- Points: 10
- Comments: 1

## Summary

많은 개발자들이 LLM을 코드 작성에 사용하면서 환각을 경험하지만, 코드에서의 환각은 실행 즉시 오류를 발생시켜 쉽게 발견할 수 있어 가장 덜 위험한 유형으로 간주됩니다. LLM이 생성한 코드는 자동 오류 수정 기능을 통해 쉽게 수정 가능하며, 코드의 정확성을 보장하기 위해서는 직접 실행하고 검증하는 과정이 필수적입니다. 환각을 줄이기 위해서는 다른 모델 사용, 맥락 활용, 안정적인 기술 선택 등이 필요하며, LLM이 작성한 코드 리뷰는 개발자의 실력을 향상시킬 수 있는 좋은 기회가 됩니다.

## Topic Body

- 많은 개발자들이 LLM을 코드 작성에 사용하려다 **환각(Hallucination)을 경험하고 신뢰를 잃음**  
  - LLM이 존재하지 않는 메서드나 라이브러리를 창작하는 것은 흔한 일  
  - 하지만 코드에서의 환각은 **가장 덜 위험한 유형의 환각**임  
- 가장 위험한 것은 LLM이 오류를 만들어내지만 컴파일러나 인터프리터에서 즉시 감지되지 않는 경우  
  - 환각된 메서드는 실행 즉시 오류를 발생시키므로 쉽게 발견할 수 있음   
  - 오류 메시지를 LLM에 다시 입력하면 자동으로 수정할 수도 있음  
- 일반적인 텍스트 환각과 달리, 코드는 **실행을 통해 사실 확인이 가능**함  
- **자동 오류 수정 기능이 있는 LLM**  
  - [ChatGPT Code Interpreter](https://simonwillison.net/tags/code-interpreter/), [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview) 등의 도구는 LLM이 작성한 코드를 실행하고 오류를 감지하여 스스로 수정함  
  - LLM이 작성한 코드를 실행도 안 하고 평가하는 것은 비효율적임  
- 일부 개발자들은 LLM이 환각된 메서드를 생성했다는 이유로 기술 자체를 배척하려 함  
  - 하지만 효과적으로 사용하려면 학습과 실험이 필수적임  
  - 필자는 2년 넘게 AI 기반 코드 작성에 대해 연구하고 있으며, 여전히 새로운 기술을 배우고 있음  
- **코드의 수동 테스트는 필수임**  
  - 코드가 정상적으로 실행된다고 해서 기대한 대로 동작한다는 보장은 없음  
  - 코드 리뷰나 자동화된 테스트만으로 코드의 정확성을 완전히 검증할 수 없음  
  - 직접 실행하고 검증하는 과정이 필수적임  
  - LLM이 생성한 코드는 가독성이 뛰어나기 때문에 방심할 가능성이 있음  
  - 사람의 코드도 마찬가지로, 직접 실행해보기 전까지는 신뢰해서는 안 됨  
- **환각을 줄이는 방법**  
  - **다른 모델 사용**: 특정 플랫폼에 대한 학습 데이터가 더 풍부한 모델을 선택  
    - 예: Claude 3.7 Sonnet (thinking mode 활성화), OpenAI o3-mini-high, GPT-4o (Python Code Interpreter 포함)  
  - **맥락(context) 활용**: 특정 라이브러리를 LLM이 모르더라도 예제 코드를 제공하면 패턴을 학습 가능  
    - 최근 Claude의 [GitHub 통합 기능](https://support.anthropic.com/en/articles/10167454-using-the-github-integration) 사용 시 효과적이었음  
  - **안정적인 기술 선택**: 오래된 라이브러리를 선택하면 LLM이 더 잘 다룰 가능성이 높음  
    - [Boring Technology](https://boringtechnology.club/) 철학 활용  
- **코드 리뷰의 중요성**  
  - "LLM이 작성한 코드를 전부 리뷰해야 한다면 직접 작성하는 게 빠르다"는 주장에 반박함  
  - 이는 코드 리뷰 능력 부족을 드러내는 발언일 수도 있음  
  - LLM이 생성한 코드 리뷰는 실력을 향상시킬 좋은 기회가 될 수 있음  
- **보너스: Claude 3.7 Sonnet의 피드백**  
  - 필자는 블로그 초안을 Claude 3.7 Sonnet의 "extended thinking mode"에 검토 요청함  
  - "이 글의 논리가 설득력 있는지, 개선할 점이 있는지, 빠진 내용이 있는지 검토해 달라"고 요청함  
  - Claude는 초안의 어조를 부드럽게 만드는 데 도움을 줌  
  - [Claude 피드백 대화 링크](https://claude.ai/share/685cd6d9-f18a-47ef-ae42-e9815df821f1)

## Comments



### Comment 35387

- Author: neo
- Created: 2025-03-04T08:39:39+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43233903) 
- 작성자가 이전 글에서는 동의했지만 이번 글에는 동의하지 않음
  - "LLM이 작성한 모든 코드를 검토해야 한다면, 내가 직접 작성하는 것이 더 빠르다"는 의견에 반대함
  - 다른 사람의 코드를 읽고 이해하며 검토하는 능력에 대한 투자가 부족하다는 주장에 동의하지 않음
  - 검토는 작성자의 전문성과 신뢰도에 따라 다르며, 익명의 기여를 검토하는 것은 다름
  - 코드의 의도와 접근 방식을 추론하고 비교하는 것이 중요하며, LLM의 경우 그 범위가 제한적임
  - 동기 부여는 중요하며, 모든 개발자가 코드 검토를 좋아하는 것은 아님
  - LLM의 코드는 사회적 측면이 없으며, 다른 사람이 변경 사항을 검토해야 함

- LLM이 생성한 코드가 잘 작동하더라도, 작성자가 아니면 버그나 논리적 결함을 찾기 어려움
  - 코딩을 잘 설계된 계획을 구현하는 것이 아니라 조각을 맞추는 것으로 본다면, 알고리즘이 추측으로 조각을 맞추는 것에 대한 우려가 있음
  - LLM은 인간이 감수할 수 있는 위험을 감수하지 않으며, 특정 맥락에서의 코드 블록의 의미를 이해하지 못할 수 있음

- LLM 생성 코드는 깔끔하지만, QA와 정리 작업에 더 많은 시간을 소비하게 됨
  - 코드가 잘 작동하고 오류가 없다고 해서 올바른 일을 하고 있다는 것을 의미하지 않음
  - 코드를 실행하고 테스트하는 것만으로는 코드의 정확성을 증명할 수 없으며, 논리적으로 추론해야 함

- The Primeagen과 Casey Muratori가 최신 LLM 코드 생성기의 출력을 검토함
  - LLM의 훈련 데이터에 잘 대표된 작업을 제공하여 개발이 쉬워야 함
  - 실제로는 반복적인 개발이 쓸모없는 코드로 수렴하며, LLM이 점점 더 진전을 이루지 못함

- Simon이 간과한 또 다른 오류 범주는 모델이 기능을 잊어버리는 환각임
  - 코드가 컴파일되는 긍정적인 측면보다 핵심 기능을 잊어버리는 부정적인 측면이 더 어려움
  - 코드가 대화/컨텍스트 창 외부에 있을 것으로 예상되는 코드에 따라 기능이 약간 변할 수 있음

- 환각된 메서드는 작은 장애물이며, 사람들이 이를 불평할 때 시스템을 효과적으로 사용하는 방법을 배우는 데 최소한의 시간을 보냈다고 가정함
  - 이는 매우 잘못된 가정이며, 사람들이 환각을 보고 "가장 쉬운 것도 일관되게 맞추지 못한다면 더 어려운 것을 신뢰할 수 없다"고 생각함

- 환각 자체가 LLM이 제기하는 가장 큰 위험은 아님
  - 더 큰 위험은 챗봇이 인간을 해치도록 설득할 수 있다는 것임
  - 이는 이미 발생한 사례가 있으며, 더 위험한 것이 무엇인지에 대한 아이디어는 공유하고 싶지 않음

- 컴파일 오류의 제한된 맥락 내에서만 덜 위험함
  - 프로그래머가 실제 솔루션을 찾는 노력을 피하기 위해 전체 라이브러리를 발명했다면 더 화가 날 것임
  - 환각을 단순한 속도 저하로 간주한다면 LLM이 실제로 해야 할 일을 과소평가하는 것임

- LLM에서 좋은 결과를 얻기 위해 많은 노력이 필요함
  - 이는 과대 광고를 꿰뚫는 것임
  - LLM이 무엇에 유용한지, 신뢰할 수 없는 결과를 얻기 위해 수년간 학습해야 한다면 무엇을 기대할 수 있는지에 대한 의문이 있음

- 의료 센터에서 환자의 '주요' 클리닉을 찾는 코드 작성 경험
  - 임상 예약만을 고려하여 가장 최근의 예약을 찾아야 했음
  - 임상 예약이 없으면 모든 종류의 가장 최근 예약을 찾아야 했음
  - 데이터를 정렬하여 코드를 작성했으나, ChatGPT가 문서화하는 과정에서 정렬을 반대로 이해함
  - 이는 "코드가 실행되지 않음"보다 훨씬 나쁜 실수임
