[reinvent 2025] 코드 완성부터 에이전트까지: 개발의 진화

Summary

AI 기반 코딩 에이전트는 생성형 AI의 가장 유망한 응용 분야 중 하나입니다. 본 발표에서는 인라인 코드 완성 도구였던 소박한 시작부터 정교한 자율 코딩 에이전트로 진화하는 과정을 경험적 증거와 함께 설명합니다. 참석자들은 AI 기반 개발 도구의 현재 상태와 빠르게 발전하는 이 분야의 미래 방향에 대한 포괄적인 이해와 통찰력을 얻을 수 있습니다.

리인벤트 2025 테크 블로그의 더 많은 글이 보고 싶다면?

AWS re:Invent 2025 Tech Blog written by MegazoneCloud

Overview

  • Title: Code completion to agents: The evolution of development (DVT405)
  • Date: 2025년 12월 3일 (수)
  • Venue: MGM Grand | Level 3 | Chairman’s 360
  • Speaker:
  • Laurent Callot, Principal Applied Scientist, AWS
  • Giovanni Zappella, Principal Applied Scientist, AWS
  • Industry: Software and Internet

들어가며

이번 칼럼에서는 “코드 완성부터 에이전트까지: 개발의 진화(Code completion to agents: The evolution of development)” 세션을 듣고,  AI 기반 개발 도구의 최신 기술 트렌드 및 업데이트된 정보를 공유하고자 합니다. 이 세션은 생성형 AI의 가장 유망한 응용 분야 중 하나인 AI 기반 코딩 에이전트의 발자취를 상세히 다루었습니다. 이번 세션에서 주목할 내용은 다음과 같습니다. 첫째, 코드 완성(Code completion)에서 자율 에이전트로의 아키텍처 진화 과정. 둘째, 에이전트의 성능을 정확히 측정하기 위한 평가 벤치마크 및 지표의 중요성. 셋째, 실제 개발 환경에서 에이전트를 성공적으로 구축하고 활용하기 위한 세 가지 핵심 교훈입니다.

코드 완성(Code Completion)에서 자율 에이전트(Autonomous Agents)로의 진화

AI 기반 개발 도구는 매우 소박하게 시작했습니다. 초기에는 세미콜론(semicolon)의 위치를 기억해야 했으며, 기본적인 자동 완성(auto completion) 기능에 머물렀습니다. 이후 10년이 지나면서 변수명이나 메소드명을 완성할 수 있는 강력한 IDE(통합 개발 환경)가 등장했습니다. 이러한 도구들은 코드를 작성하는 동안 제안을 보여주며 타이핑 활동의 속도를 높이는 역할을 했습니다.

하지만 최근 몇 년 사이에 상황이 급변했습니다. 이제 자율적인 코딩 에이전트가 등장하여 자연어로 주어진 문제에 대해 파일 시스템과 자율적으로 상호 작용하고, 변경해야 할 파일을 식별하며, 이러한 변경 사항을 실제로 적용할 수 있습니다.

이러한 에이전트 경험은 크게 두 가지로 나뉩니다:

  1. 동기적 경험(Synchronous experience): 에이전트가 상호 작용하는 동반자로서, 개발자가 태스크를 완료할 때 속도를 높이는 데 도움을 줍니다. 이는 개발자가 코드를 작성하고 작업을 수행하는 순차적인 활동을 가속화합니다.
  2. 비동기적 경험(Asynchronous experience): 개발자가 특정 태스크를 에이전트에게 위임하고 에이전트가 목표를 달성하기 위해 자율적으로 작업하도록 하는 경험입니다. 이 경우, 인간 개발자는 작업을 위임하고 병렬화할 수 있어 매우 다른 종류의 개발 경험을 제공합니다.

아키텍처의 도약: RAG에서 Supervisor Agent까지

에이전트 아키텍처는 지난 2년간 급격하게 진화했습니다. 초기에는 LLM을 기반으로 했지만, 실제 코드 생성 시 패치 생성 문제나 테스트 통과 실패 등의 문제에 직면했습니다.

1. RAG(Retrieval-Augmented Generation) 시스템의 한계: 초기 시스템은 검색기(retriever)가 일부 코드를 검색하고 파일을 전달하는 방식인 RAG에 의존했습니다. 하지만 이 검색기는 관련된 파일을 올바르게 식별하는 데 어려움을 겪어, 실제 수정해야 할 파일의 절반 정도만 찾아내는 낮은 재현율(Recall)을 보였습니다.

2. 고정 워크플로우를 넘어선 반응형 에이전트(Text Agent): 초기에는 비효율적이지만 당시 가장 효과적이었던 고정된(fixed) 워크플로우를 사용했습니다. 그러나 소프트웨어 개발자가 항상 동일한 워크플로우를 따르지 않는다는 점에서 이 방식은 유연하지 못했습니다. 이후 아키텍처는 에이전트가 코드베이스 및 파일 시스템과 상호 작용할 수 있는 환경과 도구를 생성하는 데 중점을 두었습니다. 모델이 다음 행동을 선택하는 반복 루프(loop)를 기반으로 하는 이 새로운 구조(Reactive Agent)는 SWE-bench 벤치마크에서 상당한 성능 향상을 가져왔습니다. 특히, 인간이 해결 가능한 작업의 하위 집합에 대해서는 성능이 25%에서 38%로 크게 향상되었습니다.

3. 코드 실행(Code Execution) 능력의 도입: 모델이 코드를 마음속으로 실행하고 그 함의를 생각하는 것처럼, 에이전트에게 피드백을 주고 스스로를 교정할 수 있도록 코드 실행(Code Execution) 기능을 통합하는 것이 다음 단계였습니다. 이는 안전한 보호 환경에서 텍스트를 실행하기 위한 인프라 구축을 필요로 하는 중요한 과제였습니다. 이 기능을 통해 에이전트는 여러 솔루션을 생성하고 가장 유망한 것을 선택하여 성능을 더욱 높일 수 있게 되었습니다 (단일 솔루션 38%에서 앙상블 사용 시 51% 이상으로 향상)

4. 복잡한 목표를 위한 Supervisor Agent: 마지막으로, 대규모 작업을 해결하고 유연성을 높이기 위해 Supervisor Agent와 Sub-agents로 구성된 시스템이 등장했습니다. Supervisor Agent는 사용자의 요청을 수신하고, 최종 목표 달성에 필요한 하위 목표와 지침을 생성하여 Sub-agent에게 제출합니다. 예를 들어, “고객이 상품을 구매할 수 있는 웹사이트 생성” 요청을 받으면, Supervisor Agent가 인증 추가, 로그인 경로 생성 등 구체적인 단계별 지침을 생성하여 Sub-agent가 실행하도록 합니다. 이는 모델이 고정된 구조가 아닌 작업 구조를 확장할 수 있는 유연성을 제공했습니다.

에이전트 개발자가 배운 세 가지 핵심 교훈

지난 2년간의 에이전트 개발 과정을 통해 세 가지 핵심 교훈이 도출되었습니다:

  1. 특정 사용 사례에 맞게 최적화해야 합니다. 반복적이거나 잘 정의된 작업을 수행할 경우, 예측 가능하고 빠르며 LLM의 성능을 활용하는 단순한 워크플로우를 사용해야 합니다. 반면, 매우 어려운 작업을 자율적으로 해결해야 하는 경우에는 유연한 디자인을 갖추어야 하며, 에이전트가 도구(tool) 사용을 제어하고 작업을 검증하며 피드백 신호를 얻을 수 있도록 설계해야 합니다.
  2. 고객 경험을 반영하는 측정 지표를 생성해야 합니다. SWE-bench는 유용했지만, 실제 고객 요청에 비해 문제가 훨씬 간단했습니다. 벤치마크의 문제는 보통 하나의 파일을 수정했지만, 고객 요청은 3개, 5개, 심지어 10개의 파일을 수정해야 하는 경우가 많았습니다. 또한 벤치마크는 문제 설명이 매우 길고 명확했지만, 실제 사용자는 100자 미만의 모호하고 불특정한 요청으로 시작하는 경우가 많았습니다. 따라서 개발자들은 SWE-bench보다 더 어렵고, 다국어 지원이 되며, 더 다양한 유형의 작업(버그 수정 외에 신규 기능, 리팩토링)을 포함하는 새로운 벤치마크를 만들어 고객 경험을 더 잘 반영하도록 노력했습니다.
  3. 변화에 대비하고 신뢰할 수 있는 서비스를 구축해야 합니다. 에이전트는 비결정적(non-deterministic)이어서, 동일한 작업을 두 번 제출해도 다른 답변을 얻을 수 있습니다. 이는 신뢰할 수 있는 서비스를 구축하기 위해 매우 많은 수의 테스트를 수행해야 함을 의미합니다. 또한 에이전트의 궤적(trajectory, 단계별 행동 순서)은 복잡하고 관리하기 어렵기 때문에(수백 개의 테스트), 뛰어난 관찰 가능성(observability)을 확보해야 합니다. 이러한 이유로 개발팀은 LangChain SDK 및 Amazon network agent와 같은 도구를 사용하여 에이전트를 구축했습니다. 마지막으로, AI 분야는 정적이지 않기 때문에, 샌드박스 환경 도입이나 새로운 기반 모델의 출시 등 플랫폼 변경에 유연하게 적응할 수 있어야 합니다.

결론

AI 기반 개발 에이전트는 코드 완성을 돕는 단순한 도구에서 복잡한 문제를 스스로 해결하는 자율 시스템으로 진화했습니다. 이러한 진화는 고정된 워크플로우에서 반응형 루프, 그리고 최종적으로 감독 에이전트(Supervisor Agent)를 활용한 복합 에이전트 아키텍처로의 전환을 통해 가능했습니다.

제가 이 세션을 통해 얻을 수 있었던 가장 중요한 인사이트는 에이전트 성능의 본질은 모델 자체의 능력뿐만 아니라, 아키텍처의 유연성과 정확한 평가 지표를 통해 결정된다는 점입니다. 앞으로 에이전트 개발은 더 작고 빠르며 저렴한 모델을 활용하여 온디바이스에서 낮은 지연 시간으로 실행되는 방식으로 발전할 것으로 예상됩니다. 이는 개발 환경을 근본적으로 변화시킬 것입니다.

마치 자동차의 내비게이션 시스템이 단순히 경로를 보여주는 것을 넘어, 실시간 교통 상황을 분석하고 운전자의 습관에 맞춰 주행을 조율하는 자율 주행 시스템으로 진화하는 것과 같습니다. AI 코딩 에이전트 역시 단순한 타이핑 도우미를 넘어, 개발자의 의도를 이해하고 복잡한 프로젝트를 자율적으로 관리하는 협력적 존재로 변모하고 있습니다.

글 │메가존클라우드, CTU, CoE Team, 김보근 매니저

게시물 주소가 복사되었습니다.