[아티클 01] 메모 앱 만들며 프롬프트 작성 기술 익히기
[챕터 02] 에이전틱 AI와 바이브 코딩에서는 에이전틱 AI가 어떻게 스스로 목표를 세우고 행동하며, 개발자의 의도를 자연스럽게 구현하는지를 살펴봅니다. 이 과정에서 등장하는 바이브 코딩은 코드를 하나하나 지시하는 방식이 아니라, ‘무엇을 만들고 싶은가’라는 흐름과 감각을 AI와 공유하는 새로운 개발 방식입니다. 에이전틱 AI가 왜 바이브 코딩의 핵심 파트너인지, 그리고 이 조합이 개발 경험을 어떻게 바꾸는지 알아보겠습니다.
에이전틱 AI란 무엇인가?
이 책의 독자라면 개발 경험이 없더라도 한 번 정도는 챗GPT와 같은 생성형 AIGenerative AI를 사용했을 겁니다. 사실 [챕터 01] 기존 AI 코딩 도구의 제약사항에서 다룬 깃허브 코파일럿과 같은 AI 어시스턴트도 생성형 AI의 한 형태라고 할 수 있죠. 생성형 AI는 학습한 데이터를 바탕으로 텍스트, 이미지, 코드 등 새로운 콘텐츠를 생성하는 AI를 의미합니다. 챗GPT가 사용자의 프롬프트에 대한 답변을 내놓고, 코파일럿이 기존 코드를 참고해 새로운 코드를 만들어내는 것처럼 말이죠. 하지만 이 모든 결과물은 제한된 출력을 얻기 위해 입력에 대한 반응일 뿐, 자율적으로 사고하고 행동하는 것은 아닙니다. 에이전틱 AI 역시 생성형 AI를 사용하지만 다음과 같은 특징을 가지고 있습니다.
자율성
에이전틱 AI의 가장 큰 특징은 자율성입니다. 이는 인간의 지속적인 개입이나 제어가 없더라도 스스로 작업을 시작하고 진행하며 완료할 수 있는 능력을 의미합니다. 마치 로봇 청소기와 같이 우리가 잠든 사이에도 스스로 집안을 청소하는 것처럼, 사람이 다른 업무를 보는 동안 맡겨진 목표를 완수하기 위해 독립적으로 작업을 수행합니다. 여기서 중요한 점은 단순한 자동화를 넘어선다는 겁니다. 로봇 청소기는 정해진 경로와 규칙에 따라 움직이지만, 층을 옮겨 다니거나 몸체가 뒤집히는 등의 돌발 상황에서 스스로 문제를 해결할 수는 없습니다. 예를 들어 여러분이 n8n, Make과 같은 자동화 도구를 사용해 매일 자동으로 블로그 포스팅을 한다고 가정하겠습니다. 이 도구들을 이용하면 포스팅 작업을 자동화할 수는 있지만, 이는 사전에 정의해 둔 작업들을 순서대로 수행하는 것에 그칠 뿐입니다.
반면 에이전틱 AI는 예상치 못한 문제에 직면했을 때 스스로 대안을 찾고 실행 경로를 수정하는 판단 능력까지 갖추고 있습니다. 이런 높은 수준의 자율성은 개발자가 AI를 단순한 코드 생성 도구가 아닌 신뢰할 수 있는 동료로 여기게 되는 중요한 기반이 됩니다. 에이전틱 AI 덕분에 개발자는 규모가 제법 큰 일도 AI에게 통째로 위임할 수 있게 되었습니다.
목표 지향 계획
개발자가 “로그인 기능을 만들어줘”라는 추상적인 목표를 제시하면, 에이전틱 AI는 이를 곧바로 코드로 옮기지 않습니다. 먼저 목표를 달성하기 위한 구체적인 실행 계획을 단계별로 수립합니다. 예를 들어 다음과 같은 단계를 거칩니다.
사용자 인터페이스(UI) 설계
데이터베이스 스키마 구성
API 엔드포인트 개발
프런트엔드-백엔드 연동
테스트 코드 작성
에이전틱 AI는 위에서 보듯 최종 목표를 달성하기 위해 여러 개의 하위 작업으로 분해하고 최적의 실행 순서를 결정합니다. 마치 건축가가 빌딩을 짓기 위해 청사진을 그리듯, 전체적인 구조를 먼저 구상하고 세부 작업을 진행하는 것과 같습니다. 만약 이렇게 구체적인 계획 수립 없이 작업이 진행된다면 어떨까요? 개발자가 개입해야 할 때 맥락 없이 특정 코드 단락 단위의 문제 해결을 다시 요청해야 하는 번거로움이 발생합니다. 하지만 에이전틱 AI는 사람과 동일하게 세부 작업을 인식하고 있기 때문에 개발자는 AI에게 특정 세부 작업 단위에 대한 문제 해결을 요청하기가 훨씬 수월해집니다.
▶ 에이전틱 AI 이전의 생성형 AI 사용 과정
▶ 계획과 검증, 피드백을 끊임없이 수행하는 에이전트 AI
도구 사용
계획을 세웠다면 이제 실행에 옮겨야 합니다. 에이전틱 AI는 마치 숙련된 개발자처럼 다양한 도구를 자유자재로 사용해 계획을 실행합니다. 단순히 코드만 작성하는 것을 넘어, 터미널 명령어를 실행해 필요한 라이브러리를 설치하고, 파일을 생성하거나 수정하며, API를 호출해 외부 데이터를 사용하는 등 목표 달성에 필요한 모든 도구를 자율적으로 선택하고 활용합니다. 또한 웹 검색을 통해 최신 정보를 찾아 학습하고 문제 해결에 적용하기도 합니다. 만약 사용자의 컴퓨터에서 직접 에이전트를 실행한다면 하드웨어에 저장된 정보를 활용해 사용자에게만 특화된 결과물을 만들어줄 수도 있습니다.
자기 반성 및 수정
요리사가 요리 중간에 맛을 보며 레시피를 수정하듯이 에이전틱 AI 또한 작업 수행 과정에서 스스로를 돌아보고 계획을 수정하는 능력을 갖추고 있습니다. 코드를 실행했을 때 오류가 발생하면 오류 메시지를 분석해 원인을 파악하고 스스로 코드를 수정해 문제를 해결합니다. 또한 초기에 세웠던 계획이 성공하지 못하거나 유효하지 못하다고 판단되면 더 나은 대안을 찾아 계획을 변경하는 유연성을 보여줍니다. 이런 자기 반성 능력 덕분에 에이전틱 AI는 예상치 못한 문제에 능동적으로 대처하며 목표를 완수할 수 있습니다.
개발자와 AI 에이전트의 새로운 소통 방식, 바이브 코딩
바이브 코딩Vibe coding)은 오픈AIOpenAI의 창업 멤버이자 저명한 컴퓨터 과학자 안드레이 카파시Andrej Karpathy가 처음 소개한 용어입니다. 이는 개발자가 창의성의 영역에 머무르면서 반복적인 코딩 작업을 자동화할 수 있도록 돕는 AI 도구의 중요성을 강조하는 개념입니다. 바이브 코딩의 핵심은 개발자가 프로그래밍 언어 대신 사람들끼리 일상적인 대화에서 쓰는 자연어를 사용해 자신의 의도와 최종 결과물인 분위기(Vibe)를 표현하면, AI가 그 생각을 실현 가능한 코드로 변환한다는 점입니다. 예를 들어 “버튼 색은 #ff5733, 폰트 크기는 16px로…”와 같이 구체적으로 요청하는 것이 아닌, “사용자의 눈에 확실히 띌 수 있는 경고 버튼을 만들어줘”라고 했을 때, AI 에이전트가 디자인의 전체 맥락을 이해하고 창의적인 붉은색 버튼을 결과물로 내놓는 식입니다. 이런 접근 방식은 먼저 코드를 만들고 세부적인 사항은 나중에 다듬는 사고방식을 따릅니다. 이는 빠른 프로토타이핑과 반복적인 개발, 그리고 지속적인 피드백이라는 애자일Agile 개발 원칙과 맞닿아 있습니다. 덕분에 개발자는 완벽한 구조를 처음부터 설계해야 하는 부담에서 벗어나, 먼저 빠르게 구현해보고 점진적으로 개선해나갈 수 있습니다. 따라서 소규모 기업이나 1인 창업가가 최소 기능 제품MVP, Minimum viable Product을 만들어내는 데 굉장히 적합합니다.
‘어떻게’가 아닌 ‘왜’와 ‘무엇을’에 집중하는 바이브 코딩
기존의 AI 어시스턴트나 프롬프트 엔지니어링은 무엇What을 구현하는지보다 방법인 어떻게How 구현하는지에 더욱 집중했습니다. 다음 프롬프트를 살펴보면 어떤 의미인지 단번에 알 수 있을 겁니다.
[나] : Header 컴포넌트를 만들어줘. 그리고 도구로는 Shadcn UI 패키지를 사용하고 헤더는 `nav` 태그를 사용해. 3개의 메뉴 링크가 있어야 해. 메뉴 이름은 Home, About, Contract로 하고 스타일은 Tailwind CSS를 사용해줘.
이처럼 우리는 AI가 수행해야 할 작업을 매우 상세하고 구체적인 절차로 알려줘야 했습니다. 이는 마치 컴퓨터에게 명령어를 입력하는 방식과 닮았습니다. 하지만 바이브 코딩은 무엇을 원하고 왜Why 그것이 필요한지에 더욱 집중했죠.
[나] : 우리 웹사이트에 어울리는 세련된 헤더를 만들어줘. 이를 통해 사용자들이 가장 필수적인 정보를 편하게 얻어갈 수 있게 해줬으면 좋겠어. 시각 장애인을 위한 웹 접근성에도 신경을 써줬으면 좋겠어.
차이점이 느껴지나요? 두 번째 프롬프트에서는 구체적인 구현 방식을 전혀 언급하지 않았습니다. 대신 우리가 원하는 결과물인 ‘세련된 헤더와 웹 접근성’ 그리고 그 이유인 ‘필수적인 정보를 편하게 접근, 시각 장애인 배려’를 전달했습니다. 그러면 에이전틱 AI는 이 바이브를 추론하여 최적의 방법을 자율적으로 스스로 찾아냅니다. 로고는 어디에 배치할지, 어떤 폰트와 색상을 사용해야 사용자에게 편리함을 줄 수 있는지, 메뉴는 어떤 순서로 나열할지 스스로 계획하고 실행하는 것이죠.
명령에서 대화로, 협력하는 관계로의 변화
이런 변화는 개발자와 AI의 관계를 상하 관계에서 하나의 목표를 달성하기 위해 서로 돕는 협력 관계로 바꿉니다. 빠른 프로토타이핑과 구체적인 코드 작성은 에이전틱 AI에게 위임하고, 개발자는 전체적인 프로젝트의 요구사항과 아키텍처를 구성하는 데 집중하죠. 더 이상 하나의 프로그램을 만들기 위해 수많은 명령어를 기억할 필요가 없습니다. 사람과 대화하듯 편안하게 아이디어를 던지고 AI가 만든 것을 가지고 피드백을 주고받으며 점진적으로 결과물을 완성할 수 있게 되었습니다. 이런 개발 방식은 소프트웨어 공학의 발전 과정 중 하나의 중요한 전환점이 되었습니다.
에이전틱 AI가 바이브 코딩을 실현하는 방법
여기까지 읽은 여러분은 이쯤에서 한 가지 궁금점이 생길 겁니다. 에이전틱 AI의 능력도 놀랍고 바이브 코딩이라는 소통 방식도 흥미롭지만, 그렇다면 이 둘이 어떻게 연결되는 것인가일 겁니다. 예를 들어 개발자가 “세련된 헤더를 만들어줘”와 같이 추상적인 바이브를 전달했을 때, 에이전틱 AI가 이를 구체적인 코드로 구현해내는 원리는 무엇일까요? 단순히 시키는 일을 처리하는 단계를 넘어, 에이전틱 AI는 ‘세련된 UI 구현’이라는 추상적인 목표를 이루기 위해 스스로 계획을 세우고 실행합니다.
이 모든 과정이 마법처럼 보일 수도 있지만, 앞서 살펴본 자율성, 목표 지향 계획, 도구 사용, 자기 반성 등 에이전틱 AI의 핵심 특징이 기술적으로 뒷받침하기에 가능한 겁니다. 개발자가 바이브를 전달했을 때 AI 에이전트 내부에서는 다음과 같은 과정이 순차적으로 일어납니다. 다음은 커서Cursor의 에이전트 모드를 사용해 바이브 코딩을 수행해본 예시입니다. 이어지는 4단계 설명은 단순히 커서 에이전트에만 국한되는 것이 아니라, 이 책에서 다룰 코덱스 코딩 AI 에이전트에도 동일하게 적용됩니다.
▶ 참고로 커서는 회원 가입 후 일부 기능을 무료로 사용할 수 있습니다.
1단계 : 바이브 인식 및 목표 구체화
우선 AI 에이전트는 개발자가 전달한 추상적인 바이브를 해석하여 명확하고 구체적인 최종 목표로 변환합니다. 만약 “신뢰감을 주는 세련된 헤더”라는 바이브를 받으면 에이전트는 이를 깨끗한 레이아웃, 전문적인 느낌의 폰트, 차분한 색상 팔레트 사용, 직관적인 메뉴 구조 등과 같이 디자인 원칙과 개발 목표로 재정의합니다. 이렇게 AI 에이전트가 LLM과 사용 가능한 정보를 활용해 논리적인 단계를 거쳐 문제를 해결하거나 결정을 내리는 것을 추론Reasoning이라고 합니다. 다음은 코덱스 에이전트가 프롬프트를 실행하고 추론하는 과정입니다.
[나] : 신뢰감을 주는 세련된 헤더를 만들어줘
[AI] :
2단계 : 실행 계획 수립
구체적인 목표가 설정되면, 에이전트는 이 목표를 달성하기 위한 작업 계획을 꼼꼼하게 설계합니다. 즉, 전체 작업을 다음과 같은 작은 단위의 하위 작업으로 나눕니다.
src/components/Header.tsx 파일 생성
기본적인 리액트 컴포넌트 구조 작성
프로젝트 내에서 사용할 만한 로고 이미지 탐색
주요 메뉴 항목(예: Home, About, Products)을 담은 내비게이션 UI 생성
로그인 컴포넌트 추가
1단계에서 정한 ‘신뢰감 있는’ 디자인 원칙에 따라 테일윈드 CSS 스타일을 적용
다음은 AI 에이전트인 커서와 코덱스가 문제를 해결하기 위해 계획을 수립하는 과정을 보여줍니다.
3단계 : 도구 선택 및 실행
이제 계획을 행동으로 옮깁니다. 에이전트는 계획의 각 단계를 수행하기 위해 필요한 도구를 자율적으로 선택하고 사용합니다. 터미널을 열어 touch 명령어로 파일을 생성하고, 파일 시스템을 탐색해 로고를 찾습니다. 또한 코드 에디터를 사용해 Header.tsx 파일에 코드를 작성하고 수정하며 적절한 테일윈드 CSS 유틸리티 클래스를 선택해 적용하기도 합니다.
4단계 : 피드백 및 수정
어느 정도 결과물이 만들어지면 에이전트는 개발자에게 피드백을 요청합니다. 이때 개발자가 수정을 요청하면 다시 1단계부터 시작하여 계획을 수정하고 코드를 변경합니다. 이 과정을 반복하면서 결과물의 완성도는 점점 높아집니다.
우리는 보통 인터넷 쇼핑이나 검색을 할 때 웹사이트나 모바일 애플리케이션을 통해 컴퓨터와 소통합니다. 이는 서비스 제공자가 소비자가 원하는 정보를 쉽게 얻을 수 있도록 인터페이스UI를 제공하기 때문입니다. 하지만 바이브 코딩을 하는 여러분은 더 이상 소비자가 아닌 생산자 입장에서 생각해야 합니다. 따라서 생산자가 컴퓨터와 소통하는 방식에 익숙해질 필요가 있습니다. 개발자는 주로 조금은 덜 친절해보일 수 있는 터미널이라는 도구를 사용해 컴퓨터와 소통합니다.
이 책에서는 에이전틱 AI와 AI 에이전트를 엄격하게 구분하지 않습니다. 인터넷상에는 이 둘을 구분하여 설명하는 글도 있지만, 본 책에서 다루는 코덱스는 소프트웨어 엔지니어링을 위한 AI 에이전트임과 동시에 앞서 설명한 에이전틱 AI의 특징처럼 자율적으로 계획하고 능동적으로 작업을 수행하기 때문입니다. 물론 에이전트에도 다양한 종류가 있으며, 단순 반복 에이전트의 경우 이 책에서 다루는 코덱스 에이전트와 달리 에이전틱 AI의 자율형 워크플로를 사용하지 않습니다.
바이브 코딩의 작업 공간, 터미널
앞서 에이전트가 사용자의 의도를 파악하고 계획을 세워 코드를 작성하는 과정을 살펴보았습니다. 그런데 여기서 한 가지 자연스러운 의문이 생깁니다. 왜 하필 바이브 코딩의 주 무대는 친숙한 웹 채팅창이 아닌, 다소 투박해 보이는 검은 화면의 터미널이어야 할까요? 그 이유는 터미널이 단순한 대화 창구를 넘어, 실제 개발 작업이 이루어지는 생생한 현장이기 때문입니다. 챗GPT와 같은 웹 브라우저 기반의 채팅창이 AI와 정보만 교환하는 고립된 섬이라면, 터미널은 AI 에이전트가 프로젝트 깊숙이 들어와 직접 도구를 들고 작업을 수행할 수 있는 최적의 실제 작업장입니다.
요리사가 주방의 모든 도구와 재료에 자유롭게 접근해야 하는 것처럼, AI 에이전트는 개발 프로젝트에서 주방 역할을 하는 터미널을 사용할 수 있어야 합니다. 웹 채팅창에서 AI에게 무언가를 물어보려면, 현재 작업 중인 코드나 파일 구조에 대한 정보를 일일이 복사해서 붙여넣어야 합니다. AI는 사용자가 제공한 정보 외에는 프로젝트에 대해 아무것도 알지 못하는 외부인일 뿐이죠. 하지만 터미널은 프로젝트의 루트 디렉터리에서 시작합니다. 터미널 안에서 활동하는 AI 에이전트는 ls 명령어로 파일 목록을 보고, cat으로 파일 내용을 읽으며, git status로 버전 관리 상태를 확인하는 등 프로젝트의 모든 맥락을 직접 파악할 수 있습니다. 개발자가 번거롭게 설명할 필요 없이, AI가 알아서 프로젝트를 분석하는 내부인이 됩니다.
▶ 마우스 커서와 아이콘처럼 컴퓨터의 다양한 기능을 알기 쉽게 그래픽으로 표현한 방식을 GUI(Graphical User Interface)라고 합니다.
흔히 쓰는 웹사이트 기반의 채팅 AI 같은 경우 GUI 환경에서 코드를 텍스트로 생성해줄 뿐입니다. 개발자는 그 코드를 복사해서 IDE에 붙여 넣고, 다시 터미널을 열어 실행하는 과정을 직접 거쳐야 합니다. 반면 터미널의 AI 에이전트는 코드 생성을 넘어, 관련된 모든 명령을 직접 실행할 수 있습니다. npm install로 필요한 라이브러리를 설치하고, npm test로 테스트를 실행하며, npm run dev로 개발 서버를 구동하는 등 개발 워크플로에 필요한 모든 작업을 자율적으로 수행합니다. 이는 AI가 더 이상 조언만 하는 컨설턴트가 아니라, 실제로 손과 발을 움직여 일을 처리하는 진정한 페어 프로그래머가 되었음을 의미합니다. 이 책에서 배워볼 코덱스는 바로 이 터미널을 활발하게 이용하여 개발자와 소통하는 AI 에이전트입니다.
▶ 터미널을 사용해서 텍스트 기반의 소통으로 시스템에 명령어를 입력하거나 프롬프트를 전달하는 방식을 CLI(Command Line Interface)라고 합니다.
