켄트 벡이 제시한 '증강 코딩'은 AI를 단순 코드 생성기가 아닌, 개발자의 지시와 원칙 아래 움직이는 주니어 페어 프로그래머로 활용하는 방식이다. 이는 명확한 컨텍스트와 피드백을 통해 AI의 결과물을 통제하고, 개발자는 문제 해결의 본질에 더 집중하게 만든다. 현업에서는 보일러플레이트 제거, 리팩토링 제안, 테스트 코드 작성 등 구체적인 역할을 부여함으로써 AI와의 협업 효율을 극대화할 수 있다.
솔직히 그동안 Cursor나 Claude Code 같은 AI 도구를 쓰면서도 막연함을 느낄 때가 많았다. 코드를 빠르게 완성해주는 건 고맙지만, 어딘가 모르게 내가 조종하는 게 아니라 끌려다니는 기분이랄까. 그냥 '감(Vibe)'에 의존해 질문을 던지고 그럴싸한 답변을 얻어 쓰는 방식, 켄트 벡의 표현을 빌리자면 'Vibe Coding'에 머물러 있었던 셈이다.
이런 고민 와중에 켄트 벡이 제시한 '증강 코딩(Augmented Coding)'이라는 개념과 AWS에서 이를 'Kiro'라는 내부 도구에 적용한 사례를 접하고 머리를 한 대 맞은 듯한 느낌을 받았다. 이건 단순히 AI를 비서처럼 부리는 걸 넘어, 제대로 된 '협업'의 판을 짜는 방법에 대한 이야기였다.
증강 코딩, AI를 주니어 개발자로 만들기
켄트 벡은 AI와의 상호작용을 Prompt(지시) → Response(응답) → React(반응) → Adjust(조정) 의 사이클로 정의한다. 여기서 핵심은 세 번째, 바로 우리의 '반응'이다. AI가 내놓은 결과물을 맹목적으로 복사-붙여넣기 하는 게 아니라, 시니어 개발자가 주니어의 코드를 리뷰하듯 비판적으로 검토하고 피드백하며 개선 방향을 다시 지시하는 것이다.
결국 AI를 '척척박사 코드 생성기'가 아니라, 약간의 실수는 있지만 잠재력 넘치는 '주니어 페어 프로그래머'로 대하는 관점의 전환이 필요하다. 우리는 AI에게 명확한 업무 지시와 함께 우리 팀의 코드 컨벤션, 설계 원칙 같은 '컨텍스트'를 꾸준히 제공하는 '시니어'의 역할을 수행해야 한다.
현업에서 증강 코딩 실천하기
그렇다면 이 '주니어 AI'에게 어떤 일을 시켜야 가장 효율적일까? AWS 블로그에서 Kiro의 역할을 세 가지로 나눈 것을 참고해 현업에 적용할 만한 구체적인 실행 방안을 정리해봤다.
1. 조수 (Assistant)
가장 기본적이면서도 효과적인 역할이다. 귀찮고 반복적인, 하지만 꼭 필요한 작업들을 AI에게 위임하는 것이다.
- 보일러플레이트 생성: "Node.js와 Express로 기본적인 CRUD API 서버 구조를 만들어줘.", "Recoil 상태를 사용하는 React 컴포넌트 템플릿 좀 짜줘." 와 같이 반복되는 초기 설정 코드를 맡기면 시간을 크게 절약할 수 있다.
- 단순 변환 작업: "이 JSON 데이터를 기반으로 TypeScript 인터페이스를 생성해줘." 같은 일은 AI가 인간보다 훨씬 빠르고 정확하다.
- 테스트 코드 초안: "이 함수의 정상 케이스와 에러 케이스에 대한 Jest 테스트 코드 초안을 작성해줘." 완벽하진 않더라도, 테스트의 기본 구조를 잡는 데 드는 수고를 덜어준다.
2. 파트너 (Partner)
여기서부터는 좀 더 협업다운 모습이 드러난다. 정답이 정해지지 않은 문제에 대해 함께 고민하는 동료로 활용하는 것이다.
- 리팩토링 아이디어 탐색: 복잡하게 얽힌 함수를 던져주고 "이 코드를 더 읽기 쉽게 리팩토링하는 3가지 방법을 제안해줘." 라고 요청할 수 있다. 제안된 방법들을 보며 새로운 관점의 힌트를 얻을 수 있다.
- 다양한 해결책 모색: "API 요청 실패 시 재시도 로직을 구현하고 싶은데, Exponential Backoff를 적용하는 방법 외에 다른 대안은 뭐가 있을까?" 처럼 특정 문제에 대한 여러 아키텍처나 패턴을 물어보며 최적의 답을 찾아 나가는 과정이다.
- 기술 학습: 새로운 라이브러리나 프레임워크를 배울 때, 공식 문서를 함께 보며 "이 API를 사용하는 간단한 예제를 만들어줘" 라고 요청하며 빠르게 개념을 익히는 페어 프로그래머로 쓸 수 있다.
3. 비평가 (Critique)
AI는 지치지 않고, 감정도 없다. 그래서 때로는 냉정한 코드 리뷰어로서 훌륭한 역할을 수행할 수 있다.
- 엣지 케이스 발견: 내가 작성한 코드를 보여주며 "이 로직에서 놓치고 있는 엣지 케이스가 있을까?" 라고 물으면, 사람이 미처 생각하지 못한 부분을 짚어주기도 한다.
- 가독성 및 컨벤션 검토: "우리 팀은 변수명에 카멜 케이스를 사용해. 이 코드에서 컨벤션에 맞지 않는 부분이 있는지 검토해줘." 와 같이 코드의 일관성을 유지하는 데 도움을 받을 수 있다.
- 보안 관점 리뷰: "이 API 핸들러에서 발생할 수 있는 보안 취약점이 있는지 알려줘." 라고 질문하며 기본적인 보안 검토를 맡길 수도 있다.
개발자의 역할은 어디로 가는가
증강 코딩의 개념을 접하고 나니, AI의 발전이 개발자를 대체하는 것이 아니라 개발자의 역할을 한 단계 위로 끌어올리고 있다는 생각이 든다. 이제 우리의 핵심 역량은 단순히 코드를 빨리 짜는 '타이피스트'가 아니라, 문제를 정확히 정의하고, AI라는 도구를 활용해 최적의 해결책을 '설계'하며, 그 결과물을 비판적으로 '검증'하는 능력이 되어가고 있다.
AI라는 똑똑한 주니어를 옆에 두고 시니어 개발자로서 방향을 제시하고 함께 성장하는 것. 어쩌면 코딩이 다시 즐거워지는 방법은 바로 여기에 있는지도 모르겠다.