KO

EN

Agentic Coding 항해술

최근 코딩의 패러다임이 AI와 함께 빠르게 변하고 있습니다. 'Vibe Coding'이라는 말도 들려오지만, 솔직히 저는 그 방식에 대해선 잘 모르겠습니다. 코드가 단지 느낌이나 분위기에 맞춰 생성되는 방식은, 제가 소중하게 생각하는 코딩 경험의 본질을 해치는 것 같아 긍정적으로 다가오지 않았네요.

하지만 Agentic Coding은 조금 다릅니다. 이는 단순히 코드 생성을 요청하는 것을 넘어, 특정 작업을 AI 에이전트에게 위임하는 형태입니다. 저와 함께하는 페어 프로그래머와 가깝죠. 이 방식을 통해 저는 더 빠르고 많은 코드를 작성하면서도, 저의 코딩 감각이나 프로젝트에 대한 주도권을 잃지 않을 수 있었습니다. Agentic Coding은 제가 생각하는 이상적인 협업 모델에 더 가깝습니다.

오늘은 Agentic Coding을 하며 제가 더 잘 사용하기 위해 했던 작업들과 경험을 공유하려고 합니다.

Agentic Coding

Agentic Coding이라고 해서 기존 AI 기반 IDE에서의 코드 작성과 크게 다르지 않습니다. 다만 AI Agent에게 어느정도 주도권을 주고 특정 코드의 작성을 지시하는게 아닌 과제 단위로 지시하여 해결하는 형태입니다. 이 과정에서의 핵심은 반복적으로 코드의 생성,수정 그리고 검증과 테스트를 통해 과제를 해결합니다.

Agentic Coding Workflow

Keys to Effective Agentic Coding

지난 몇몇 프로젝트를 AI 에이전트와 함께 진행하며, 더 효율적으로 협업하기 위해 몇 가지 중요한 점이 있다는 것을 깨달았습니다. 그냥 사용해도 간단한 작업은 잘 처리할 수 있지만, 충분한 환경 구성이 들어간 경우 결과는 큰 차이를 보였습니다. 제가 느꼈던 여러가지 포인트를 정리해봅니다.

Know Your Project

가장 중요한 것은 개발자, 즉 사용자가 프로젝트의 선장이 되어야 한다는 점입니다. AI는 유능한 선원이지만, 최종적인 방향을 결정하고 전체적인 그림을 그리는 것은 선장의 몫입니다. 프로젝트의 아키텍처, 목표, 제약 사항 등을 명확히 이해하고 있어야만 AI에게 정확한 지시를 내리고, 그 결과물을 올바르게 평가하고 통합할 수 있습니다.

Parallel-Friendly Code Structure

AI 에이전트는 사람과 다릅니다. 여러 에이전트를 동시에 사용하거나 하나의 에이전트가 여러 작업을 병렬로 처리하는 상황을 고려하면, 코드가 논리적으로 명확하게 분리되어 있을수록 유리합니다. 이는 기존 프로그래밍에서 강조하던 특정 개념과 일부 충돌할 수 있지만, AI와의 협업에서는 오히려 작업 단위가 명확히 나뉘어 있는 것이 효율적이었습니다. 개인적으로는 pkg나 lib 단위로 기능이 잘게 쪼개진 구조에서 작업 지시가 매우 수월했습니다.

The Importance of Tooling

AI는 실수를 합니다. 하지만 잘 갖춰진 툴링은 AI의 실수를 크게 줄여주고, 실수가 발생하더라도 빠르게 바로잡을 수 있도록 돕니다. Linter, Formatter, Tester 등은 이제 선택이 아닌 필수입니다.

AI's Test 작성한 코드가 문제가 없는지 체크합니다

특히 TDD(Test-Driven Development)의 중요성을 다시 한번 느꼈습니다. 테스트 코드가 꼼꼼하게 작성된 프로젝트에서는 AI가 잘못된 코드를 생성하더라도, CI/CD 파이프라인의 테스트 단계에서 문제를 발견하고 스스로 수정하거나 개선하는 경우가 많았습니다. 이는 매우 인상적인 경험이었습니다.

다만 재미있는 점은 AI 또한 테스트를 통과하기 위해 여러 꼼수를 사용합니다. 잘 보다보면 일부러 테스트 케이스를 지우거나 쉽게 통과하기 위한 방법들을 사용하는데, 이는 코드 리뷰 단계에서 체크되어야 합니다.

Language Choice & Clear Errors

종종 제게 "AI와 함께 코딩한다면 어떤 언어가 좋을까요?" 와 같은 질문을 하셨던 분들이 있었습니다. 언어 자체는 크게 중요하지 않을 수 있습니다. 하지만 개인적인 경험으로는, 상세하고 친절한 에러 메시지를 출력하는 언어가 AI와의 협업에 유리하다고 생각합니다. 컴파일러나 인터프리터가 "어디가, 왜" 잘못되었는지를 명확히 알려주면, AI가 문제를 해결할 확률도 높아집니다. 그런 의미에서 저는 Rust를 선택했고, 꽤 만족스러운 결과를 얻고 있습니다.

Docs for AI (AI-README)

우리는 보통 프로젝트에 README.md 파일을 작성합니다. 저는 이와 별개로 AI 에이전트가 읽어야 할 AI.md와 같은 문서를 별도로 작성합니다. 이 문서에는 프로젝트의 전체적인 구조, 각 모듈의 역할, 참조해야 할 핵심 파일 목록, 그리고 코딩 시 반드시 지켜야 할 규칙 등을 명시합니다. 이 문서의 유무는 AI가 프로젝트를 이해하고 작업을 수행하는 데 있어 정말 큰 차이를 만들어냈습니다.

Clear, Granular Tasks

추상적일수록, 작업 단위가 클수록 AI는 잘 해내지 못합니다. 물론 이는 사람에게도 해당되는 이야기일 겁니다. AI 에이전트를 적극적으로 사용하면서, 저 스스로가 작업을 이전보다 훨씬 잘게 나누고 명확하게 정의하고 있다는 사실을 발견했습니다. '로그인 기능 구현'과 같은 큰 단위의 작업보다는, '1. 사용자 모델 정의, 2. 데이터베이스 스키마 작성, 3. 비밀번호 해싱 로직 구현...'과 같이 구체적으로 지시할 때 결과가 훨씬 좋았습니다.

혹시나 큰 단위 작업을 지시하더라도 AI가 처리할 수 있도록 세부 계획은 전달해주는게 좋습니다. 이런면에선 아래 Workflow에서 이야기할 Jules의 장점이 돋보입니다.

Jules Jules에선 작업을 실행하기 전 Plan을 구성하고 사용자에게 먼저 검토 받습니다.

My Current Workflow

저는 보통 로컬에서는 Zed의 Agent Panel에서 작업을 지시하고, 탭을 닫아둔 채 다른 제 할 일을 합니다. 완료 시 macOS 내 알림을 이용하여 알려주기 때문에 편리합니다. 그리고 클라우드 환경에서는 Google의 Jules를 자주 사용합니다. Jules는 제 위치나 상황과 별개로 지시할 수 있어서 꾸준히 작업을 돌릴 수 있는 좋은 경험을 주었습니다. 특히 밖에서 핸드폰으로 지시하는 경우도 상당히 많습니다.

Zed and Jules

그리고 터미널 환경에서 사용하는 Codex나 Claude Code 같은 도구들에도 관심이 많습니다. 하지만 가장 기대하고 있는 것은 GitHub Copilot Coding Agent (예전에 Padawan으로 소개됬던 그 Agent)입니다. 저는 대부분의 Task를 GitHub Issue로 관리하는데, 이 Agent는 이슈를 기반으로 작업을 이해하고 수행할 것으로 기대되기 때문입니다. 작업을 정리하고 지시하는 과정이 훨씬 간결해질 것 같습니다. 현재 GitHub Pro Plus 플랜을 사용하면 일부 기능을 써볼 수 있지만, 저는 GitHub로부터 Pro 플랜을 무료로 지원받고 있어 플랜 변경이 조금 애매하네요. 우선은 지금 환경에 맞춰서 사용하고 천천히 고민해볼 예정입니다.

Final Thoughts

물론 오늘 이야기한 내용들이 모두에게 적용되는 정답은 아닐 겁니다. 그저 AI와 함께 코딩하는 한 개발자의 개인적인 경험과 견해로 참고해주시면 좋겠습니다.

AI로 인한 변화는 거스를 수 없는 시대의 흐름이 맞다고 생각합니다. 시대가 바뀐다고 해서 겁먹을 필요는 없습니다. 그저 자연스럽게 파도에 몸을 맡기고 흐름을 타면 됩니다. 분명한 것은, 개발의 방식에 많은 변화가 찾아왔고 우리 스스로도 어느 정도는 변화해야 한다는 사실입니다.

하지만 언제나 그랬듯이 기본은 중요합니다. AI는 아는 만큼 쓸 수 있는 도구이자 동반자입니다. 이 새로운 동료를 더 잘 활용하기 위해서는, 우리 자신을 계속 단련하고 성장시켜야 합니다. 결국 AI 시대의 개발 경쟁력은, AI를 얼마나 잘 다루는지, 그리고 그 기반이 되는 자신의 기본기가 얼마나 탄탄한지에 따라 결정될 것이라 생각합니다.