# LLM에게 "더 나은 코드 작성"을 반복 요청하면 더 좋은 코드를 작성할까?

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

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18562](https://news.hada.io/topic?id=18562)
- GeekNews Markdown: [https://news.hada.io/topic/18562.md](https://news.hada.io/topic/18562.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-01-04T09:40:01+09:00
- Updated: 2025-01-04T09:40:01+09:00
- Original source: [minimaxir.com](https://minimaxir.com/2025/01/write-better-code/)
- Points: 8
- Comments: 1

## Summary

LLM에게 "더 나은 코드 작성"을 반복 요청하면 코드가 단계적으로 개선될 수 있으며, 프롬프트 엔지니어링을 통해 명확한 지침을 제공하면 더욱 발전된 결과를 얻을 수 있습니다. 실험 결과, 단순 반복 요청만으로도 코드의 성능이 향상되었으나, 구체적인 최적화 지침을 포함한 프롬프트를 사용하면 성능이 더욱 크게 개선되었습니다. 그러나 자동화된 최적화 아이디어는 버그 검증이 필요하며, 실제 시스템에서는 도메인별 제약과 검증이 필요합니다.

## Topic Body

- 코드 작성 시 LLM에 “더 나은 코드 작성”을 반복적으로 요청하면 실제로 코드가 개선되는지 실험한 내용임  
- 원본 사례는 ChatGPT의 DALL-E 이미지 생성 기능에서 “더 ~스럽게 만들어 달라”는 밈에서 영감을 얻음  
  
### 단순 반복 프롬프트 실험  
- Claude 3.5 Sonnet에 Python 코딩 프롬프트를 제공하여 간단하지만 최적화할 수 있는 문제를 해결하도록 요청함.  
- **기본 구현**  
  - 1에서 100,000 사이 무작위 정수 백만 개 중, 자릿수 합이 30인 수의 최솟값과 최댓값 차이를 구하는 문제  
  - 단순 구현 시 657ms 걸렸음 (파이썬 `str` 변환 방식 사용)  
- **Iteration #1**  
  - Claude에게 "더 나은 코드 작성"을 요청하여 코드를 개선하도록 함  
  - Claude는 코드를 Python 클래스 형태로 리팩토링하고 객체 지향적으로 만들고, 모든 숫자에 대한 digit sum을 미리 계산해둠  
  - 2.7배 빨라짐  
- **Iteration #2**  
  - Claude는 멀티스레딩과 벡터화된 numpy 연산을 사용하여 코드를 더욱 최적화함  
  - 5.1배 빨라짐  
- **Iteration #3**  
  - 코드가 오히려 복잡해지고 문자열 변환 방식 회귀  
  - 4.1배 빨라짐  
- **Iteration #4**  
  - numba Python 라이브러리를 사용하여 JIT 컴파일러를 호출하고, Python의 asyncio를 사용하여 병렬화를 구현  
  - 100배까지 속도 향상  
  - “코드가 우주적으로 변한다”는 표현 대신 오버엔지니어링된 “엔터프라이즈급” 코드가 됨  
  
### 프롬프트 엔지니어링 적용  
- LLM의 출력을 최적화하기 위해 프롬프트 엔지니어링이 필요함  
- Claude 3.5 Sonnet은 강력한 프롬프트 준수 능력을 가지고 있어, 명확한 지침을 제공하면 더 나은 결과를 얻을 수 있음  
- 단순히 “더 나은 코드 작성” 대신 세밀한 지침을 포함한 시스템 프롬프트 사용  
- **초기 프롬프트**  
  - “최적화된 코드” 정의를 세부적으로 제시 (알고리즘, 병렬화, 불필요 코드 최소화 등)  
  - 첫 구현에서 Numba로 digit sum 최적화 → 59배 빨라짐  
- **Iteration #1**  
  - Claude가 병렬화를 추가했으나, 이상한 비트 시프트 연산(16진수용) 도입해 버그 발생  
  - 성능 9.1배로 오히려 떨어짐  
- **Iteration #2**  
  - Claude는 SIMD 연산을 사용하여 성능을 개선하려 했으나, 여전히 잘못된 비트 시프트 연산을 사용함.  
  - 초기 구현보다 65배 빠르게 실행됨  
- **Iteration #3**    
  - Claude는 해시 테이블을 사용하여 성능을 최적화함  
  - 초기 구현보다 100배 빠르게 실행됨  
- **Iteration #3**    
  - Claude는 잘못된 비트 시프트 연산을 수정하여 성능을 약간 저하시킴.  
  - 초기 구현보다 95배 빠르게 실행됨  
  
### 결론  
- “더 나은 코드”라는 모호한 프롬프트만으로도 단계적 개선이 가능함  
- 프롬프트 엔지니어링으로 원하는 방향(숫자 연산, JIT, 병렬화 등)을 명확히 제시하면 더 빠르게 발전된 코드가 나옴  
- 자동화된 최적화 아이디어는 새 도구(numba 등)를 발견하는 계기가 되지만, 여전히 엔지니어가 버그 검증 및 선택적으로 사용해야 함  
- 실제 현업 시스템에서 LLM이 제안한 모든 코드를 그대로 쓰기에는 도메인별 제약과 검증 필요성이 큼  
- 본 실험은 파이썬 코드 기준이나, Rust 등 다른 언어와 연동하는 방식(PyO3 등)에서도 LLM 최적화 아이디어가 적용될 여지가 큼

## Comments



### Comment 32971

- Author: neo
- Created: 2025-01-04T09:40:02+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42584400) 
- 코드 최적화에서 숫자가 최소값보다 작거나 최대값보다 큰지를 먼저 테스트하는 것이 효과적임. 이는 디지털 합계를 계산하기 전에 수행하여 속도를 5.5배 향상시킬 수 있음. Numba를 사용하지 않고도 numpy로 이 작업을 수행할 수 있음

- GPT와 같은 LLM은 처음에 중간 수준의 결과를 제공하는 경우가 많음. 특정 위협을 통해 더 나은 결과를 얻을 수 있다고 주장함

- LLM은 상황별 시뮬레이션 엔진으로, 텍스트 예측을 통해 현실 세계의 모델을 시뮬레이션함. 정확한 텍스트 예측을 위해서는 현실 세계의 정확한 모델이 필요함

- LLM은 초보자 코드 작성에 치우치는 경향이 있으며, 패키지를 명시하고 간단한 코드를 요청하는 것이 효과적임

- Android/Kotlin에서 ChatGPT는 비효율적이며, 유효하지 않거나 사용 중단된 메서드를 자주 호출함

- 코딩 세션을 시작할 때 "코드 작성" 대신 "개방형 계획"으로 시작하는 것이 중요함. LLM의 가정에 대해 명확히 하고, 코드 작성 전에 계획을 수정하는 것이 필요함

- PostgreSQL을 Debian에서 완전히 제거하고 재설치하는 방법에 대해 설명함. 데이터 디렉토리를 보존하여 기존 데이터베이스를 유지함

- 코드 최적화는 조기에 수행하면 안 좋을 수 있으며, 필요할 때만 최적화하는 것이 좋음

- "더 나은 코드 작성"을 반복적으로 요청하는 것이 성능을 저하시킬 수 있음. 이는 해결책을 작동하지 않게 만들 수 있음

- LiveCode에서의 계산이 Python보다 빠르며, 반복문을 사용하여 합계를 계산하는 방법을 설명함
