소프트웨어 개발의 변화와 에이전트의 등장
로버트 브레넌은 오픈소스 개발 도구를 10년 넘게 만들어온 경험을 바탕으로, 코딩 에이전트와 이를 효과적으로 사용하는 방법에 대해 이야기합니다. 그는 자신과 팀이 만든 오픈소스 소프트웨어 개발 에이전트인 OpenHands(이전 이름: OpenDevon)를 소개하며, 소프트웨어 개발 환경이 빠르게 변화하고 있음을 강조합니다.
"2025년의 소프트웨어 개발은 변화하고 있습니다. 우리의 일은 2년 전과도 다르고, 앞으로 2년 후에도 또 달라질 것입니다."
그는 앞으로 코딩 자체는 점점 사라질 것이라고 말합니다. 하지만 소프트웨어 엔지니어링이 사라지는 것은 아니며, 오히려 문제를 비판적으로 사고하고, 사용자와 비즈니스의 요구를 이해하는 능력이 더 중요해질 것이라고 강조합니다.
"우리는 키보드를 두드리는 데 돈을 받는 게 아니라, 앞에 놓인 문제를 비판적으로 생각하는 데 돈을 받는 겁니다."
AI가 반복적인 코드 작성과 실행에는 강하지만, 큰 그림을 그리고 사용자와 공감하며 비즈니스 목표를 고려하는 일은 여전히 인간의 몫임을 분명히 합니다.
코딩 에이전트란 무엇인가?
요즘 "에이전트"라는 단어가 자주 쓰이지만, 본질은 실제 세계에서 행동을 취하는 능력(agency)에 있습니다. 소프트웨어 엔지니어의 주요 도구인 코드 에디터, 터미널, 웹 브라우저가 바로 에이전트에게도 주어지는 핵심 도구입니다.
"이것들이 바로 소프트웨어 엔지니어의 핵심 도구이고, 에이전트에게도 이 도구들을 제공해 전체 개발 루프를 수행하게 합니다."
코딩 에이전트는 기존의 코드 자동완성(예: GitHub Copilot)에서 출발해, 점점 더 비동기적이고 자율적인 작업을 수행할 수 있게 진화했습니다. 이제는 한두 문장으로 원하는 작업을 설명하면, 에이전트가 5~15분 동안 스스로 작업을 수행하고 결과를 가져오는 시대가 되었습니다.
"여러 에이전트를 동시에 보내놓고, 그동안 동료와 소통하거나 잠깐 딴짓을 할 수도 있습니다. 완전히 다른, 하지만 훨씬 강력한 작업 방식이죠."
에이전트의 작동 원리와 내부 구조
에이전트의 핵심은 대형 언어 모델(LLM)과 외부 세계의 상호작용을 반복하는 루프입니다.
- LLM이 다음 행동을 결정합니다. (예: 파일 읽기, 코드 수정, 명령 실행, 웹페이지 탐색 등)
- 실제 행동을 수행하고, 그 결과(출력)를 얻습니다.
- 결과를 다시 LLM에 입력해 다음 행동을 결정합니다.
이 과정을 반복하며 목표에 점점 가까워집니다.
에이전트가 사용하는 주요 도구들
-
코드 에디터
단순히 파일 전체를 바꾸는 것이 아니라, find & replace나 diff 기반 에디터를 사용해 필요한 부분만 효율적으로 수정합니다."수천 줄짜리 파일에서 한 줄만 바꿔야 할 때, 전체를 출력하는 건 비효율적이죠."
-
터미널
명령어 실행 결과를 받아오지만, 장시간 실행되는 명령이나 병렬 실행 등 다양한 상황을 처리해야 하므로 생각보다 복잡합니다. -
웹 브라우저
단순히 HTML을 넘기는 대신, 접근성 트리나 마크다운 변환 등으로 LLM이 필요한 정보만 받도록 최적화합니다."최근에는 페이지 스크린샷에 노드를 라벨링해 클릭할 대상을 지정하는 방식도 시도하고 있습니다. 이 분야는 정말 빠르게 발전 중이에요."
-
샌드박싱
에이전트가 위험한 행동을 하지 않도록 Docker 컨테이너에서 격리 실행합니다."에이전트가 내 홈 디렉토리에 'rm -rf'를 실행할 일은 없도록 해야죠!"
또한, 외부 API 접근 권한(예: GitHub 토큰, AWS 계정 등)은 꼭 최소 권한 원칙을 지켜야 한다고 강조합니다.
에이전트 활용의 베스트 프랙티스
1. 작은 일부터 시작하기
- 빠르게 끝낼 수 있고, 완료 기준이 명확한 작업이 가장 좋습니다.
- 예를 들어, 테스트 통과, 린트 오류 수정, 머지 충돌 해결 등 반복적이고 지루한 작업을 에이전트에게 맡기면 효과적입니다.
"개발자로서 하기 싫은 자잘한 일들, AI가 정말 잘 해냅니다."
- 경험이 쌓이면 점점 더 큰 작업도 맡길 수 있습니다.
- 실제로 로버트는 "이제 내 코드의 90%는 에이전트를 통해 작성된다"고 말합니다.
2. 명확하게 지시하기
- 원하는 결과뿐 아니라, 어떻게 작업하길 원하는지도 구체적으로 알려줘야 합니다.
- 예를 들어, 사용할 프레임워크, 테스트 주도 개발 방식, 수정할 파일명/함수명 등을 명시하면 더 빠르고 정확한 결과를 얻을 수 있습니다.
"정확히 어떤 파일을 수정하라고 알려주면, 에이전트가 코드베이스를 탐색하는 데 드는 시간과 비용을 크게 줄일 수 있습니다."
3. 코드는 싸다!
- AI 시대에는 코드를 쉽게 버리고, 실험하고, 프로토타입을 만들 수 있습니다.
- 실패한 결과는 과감히 버리고, 새롭게 시작하는 습관을 들이는 것이 중요합니다.
"산책하다가 아이디어가 떠오르면, 목소리로 OpenHands에 지시하고, 출근하면 PR이 기다리고 있어요. 절반은 버리고, 절반은 머지합니다."
4. 코드 리뷰는 필수!
- AI가 작성한 코드를 무조건 머지하면 안 됩니다.
- 코드 리뷰 없이 자동으로 머지하면, 중복 코드, 기술 부채가 쌓이고, 코드베이스가 금방 엉망이 될 수 있습니다.
"코드 리뷰 없이 AI가 만든 코드를 바로 머지하면, 금방 감당할 수 없는 상황이 됩니다."
- 반드시 사람이 직접 코드 리뷰를 하고, 실제로 코드를 실행해 문제를 확인해야 합니다.
"신뢰하되, 반드시 검증하세요. 결국 인간이 반드시 한 번은 확인해야 합니다."
- OpenHands의 경험상, PR의 소유자가 명확하지 않으면 책임질 사람이 없어져 문제가 생긴다고 합니다.
"이제는 PR을 연 사람이 직접 머지 책임을 집니다. 문제가 생기면 누구에게 물어야 할지 확실하죠."
에이전트의 대표적인 활용 사례
에이전트는 범용적이지만, 특히 다음과 같은 작업에 강점을 보입니다.
-
머지 충돌 해결
"OpenHands, 이 PR의 머지 충돌을 해결해줘."
반복적이고 명확한 작업이라 에이전트가 거의 99% 정확하게 처리합니다. -
PR 피드백 반영
"OpenHands, 저 사람이 말한 대로 고쳐줘."
이미 누군가가 수정 요청을 명확히 남겼을 때, 에이전트가 그대로 반영합니다. -
작은 버그 수정
"OpenHands, 방금 얘기한 이 부분 고쳐줘."
Slack 등에서 바로 지시해 IDE를 켜지 않고도 빠르게 수정할 수 있습니다. -
인프라 변경
Terraform 등 복잡한 문법이 필요한 작업도 에이전트가 문서 검색과 적용을 잘 해냅니다. -
데이터베이스 마이그레이션
인덱스, 외래키 등 베스트 프랙티스를 잘 지키며 마이그레이션 코드를 작성합니다. -
테스트 실패 수정 및 커버리지 확장
"여기 테스트 커버리지가 낮은데, 커버리지 좀 늘려줘."
안전하게 테스트를 추가하거나, 깨진 테스트를 고치는 데 유용합니다. -
앱을 처음부터 만들기
내부용 앱 등에서는 빠르게 프로토타입을 만들고, 필요에 따라 코드 리뷰 없이도 활용할 수 있습니다.
마무리 및 커뮤니티 초대
로버트는 마지막으로 OpenHands 커뮤니티에 참여해 함께 발전시켜 나가자고 초대합니다.
"GitHub, Slack, Discord에서 우리와 함께 만들어가요!"
핵심 키워드 요약
- 코딩 에이전트: 반복적이고 명확한 작업에 강함, 점점 더 자율적이고 비동기적으로 진화
- 대형 언어 모델(LLM): 에이전트의 두뇌 역할, 외부 세계와 반복적으로 상호작용
- 핵심 도구: 코드 에디터, 터미널, 웹 브라우저, 샌드박싱
- 베스트 프랙티스: 작은 일부터, 명확한 지시, 코드 리뷰 필수, 코드는 쉽게 버릴 수 있음
- 대표 활용 사례: 머지 충돌, PR 피드백, 버그 수정, 인프라 변경, DB 마이그레이션, 테스트, 앱 개발
이렇게 AI 기반 소프트웨어 개발 에이전트의 현재와 미래, 그리고 실제로 어떻게 활용하면 좋은지에 대한 실질적인 조언과 경험을 친절하게 풀어낸 강연이었습니다! 🚀