코딩 에이전트에 관련된 몇가지 잡설
서론
대충 요새 대중적으로 사용되는 코딩 LLM use case는 다음과 같이 정리할 수 있을 것 같다.
- 현재 코드 변경사항을 읽고 앞으로 입력할 내용을 추측하는 write-ahead 모델
- 내가보기엔 Cursor / windsurf 이후로 더이상 눈에 띄는 발전은 어렵지 않나 싶다.
- zero-base에서 프롬프트 몇줄만으로 원하는 앱/웹사이트 뚝딱 만들어주기
- 내가보기엔 모델 홍보용으론 그럴듯하지만 장기적인 수요는 없다고 본다.
- 평문으로 주어진 Task를 해결하는 에이전트 모델
- 주어진 Task에 맞춰 적절한 Tool을 사용해서 원하는 작업을 수행하는 능력이 중요해진다.
필자가 최근 에이전트를 쓰다가 느낀 점들을 정리해본다.
아이디어 - Self 툴 생성 LLM 코딩 에이전트
한줄요약: 이미 주어진 툴들을 잘 쓰는 것도 중요하지만 필요한 툴들을 그때그때 만들어서 쓰면 더 효과적이지 않을까?
이를테면 코드 리팩토링의 경우 LLM이 코드를 이해하는 것보다 코드를 파싱해서 AST를 생성하고, 해당 AST에 동작하는 리팩토링 룰을 만드는 게 더 효과적일 수 있는데, 그러한 툴을 적절히 만들어가면서 과제를 수행하는 에이전트를 만들 수도 있겠다.
현재는 ‘어떤 툴을 만들어라’에 해당하는 프롬프트를 먼저 주고, ‘이 툴을 이렇게 써서 이 작업을 수행해라’의 두 단계로 작업을 수행하고 있는데, 곧바로 ‘작업을 수행해라’라고 명령해서 LLM이 직접 코드를 변경하는 것보단 훨씬 안정적으로 동작한다 - 직접 변경하는 경우 종종 LLM이 실수했을 때 밝혀내기가 쉽지 않은데, 툴을 통해 간접적으로 접근하는 경우 사소한 실수는 쉽게 걸러지기 마련이다. 또한 ‘이 툴을 검증하라’ 등의 추가적인 작업도 쉽다.
생각대로 잘 된다면 같은 모델을 쓰면서도 더 성능좋은 에이전트가 될 수 있을것 같다만… 이정도 프로젝트는 한달 정도 집중적으로 개발을 해 봐야 될지 안될지 알 수 있을 것 같아서 차마 시도해볼 엄두가 나질 않는다.
아이디어 - 코딩 에이전트 결투장
한줄요약: 하나의 프롬프트를 여러 에이전트에게 주고, 결과물을 비교하는 프로젝트
준비물 - Copy-on-Write가 지원되는 파일시스템(btrfs)
프로젝트 환경의 사본을 여러개 만든 다음, 여러 에이전트에게 동일한 프롬프트를 주고 작업을 진행하게 해서 그 결과물을 비교한다.
- COW가 되는 파일시스템이라면 프로젝트 환경의 사본을 거의 공짜로 만들 수 있다.
- 조금 자동화를 하면 사본을 만들고, 프롬프트를 실행한 다음, 결과물을 commit해서 원본 프로젝트의 branch로 생성하는 게 가능하다. 비교가 쉽다는 말이지.
조금 더 나아가면 이런 것들을 데이터셋으로 만들어서 벤치마크도 만들고 모델 개선에도 활용할 수 있겠다는 생각이다. 잘 하면 이걸로도 뭔가 사업이 가능하지 않을까?
예제 결투, 그리고 그 결과는?
오늘의 결투 prompt:
By reading the code in legacy/audio/..., you can see there are external
variables on each modules. As the external variables can be duplicated across
the modules within the package, I'd like to introduce a single dedicated module
struct having only the external variables. Introduce such module, and add it to
constructor variable to each existing modules. See GAME_data_init.go, and
initAudio() in audio_imports.go for how those modules are initialized.
오늘의 결투사들:
- cursor-agent with GPT-5
- claude-code with Sonnet 4
- gemini-cli with Gemini pro 2.5
오늘의 결과물:
- 1등: Claude-code
- 2등: Cursor-agent
- 오늘의 동네북: Gemini-cli
잼민이는 go test
가 왜 안되는거야!!!! 절규를 한참 하더니 변경을 포기하고
죽어버렸다. GPT-5는 내가 원하는 external variable을 모두 리팩토링하는데
실패했다. Claude는 상대적으로 납득가능한 결과물을 줬지만 클린 컴파일은 안되더라.
결론
위에 언급된 아이디어에 관심있는 분께서는 블루스카이로 연락주세요.