본문 바로가기
AI

Gemini CLI로 경험한 바이브 코딩 후기

by Tedi__ 2025. 12. 3.

바이브 코딩은 2025년 2월 안드레이 카파시(Andrej Karpathy)가 소개하며 화제가 된 개념입니다.
이는 개발자 코드를 한 줄 한 줄 직접 작성하는 것이 아니라 AI에게 자연어로 의도(Vibe)를 전달하고 결과물을 관리하는 '매니저'로서 코딩하는 방식을 말합니다.

저는 최근 회사에서 새로운 도메인과 낯선 기술 스택을 도입해야 하는 프로젝트들을 연달아 맡게 되었습니다


 - 마케팅 자동 운영 에이전트 개발
 - 데이터 증분 분석(Incremental Analysis) 모델 구현
 - 로컬 LLM 파인 튜닝 모델 코드 작성 

예전 같았으면 맨땅에서 시작해야 하는 막막함에 기술 리서치와 학습으로만 많은 시간을 보냈을 것 같은데, 이번에는 Gemini CLI를 적극적으로 활용해 빠르게 요구사항을 정리하고 POC(개념 증명) 코드를 작성하며 속도를 낼 수 있었습니다.

오늘은 제가 직접 경험한 바이브 코딩 워크플로우와, 그 과정에서 체감한 SDD(Spec-Driven Development, 스펙 주도 개발)의 효과, 그리고 현업에서 느낀 바이브 코딩의 현실적인 한계를 공유하려 합니다.

1.  바이브 코딩을 위한 무기 : Gemini CLI 란?

https://github.com/google-gemini/gemini-cli

gemini cli

 

Gemini CLI는 터미널 환경에서 구글의 Gemini 모델과 직접 소통할 수 있게 해주는 도구입니다. 마치 GitHub Copilot CLI나 Cursor처럼 터미널을 벗어나지 않고도 '바이브 코딩'을 가능하게 해줍니다.

간단한 설치 후 터미널에서 gemini 명령어만 입력하면 CLI 대화 화면으로 전환됩니다. 웹 버전처럼 자연어로 대화할 수 있는 것은 물론, @ 구분자를 통해 로컬 파일을 읽어 컨텍스트에 포함하거나 코드를 직접 수정 및 저장할 수도 있습니다. 덕분에 개발자는 터미널 환경을 유지하며 AI와 호흡을 맞추는 몰입감 있는 코딩이 가능합니다.

 

2.  AI 시대의 필수 역량, SDD (Spec-Driven Development)

SDD(스펙 주도 개발)는 개발 전에 요구사항 명세(Spec)를 명확히 하고 이를 바탕으로 개발을 진행하는 방법론입니다. 바이브 코딩을 잘하기 위해서는 AI(LLM)에게 모호한 지시보다는 명확한 스펙을 주어야 합니다. 따라서 바이브 코딩 환경에서 SDD는 선택이 아닌 필수적인 방법론이 됩니다.

저는 Gemini CLI 콘솔에서 단순히 명령어를 입력하는 것이 아니라, "컨텍스트를 쌓아나가는 대화"를 통해 다음과 같은 흐름으로 개발을 진행합니다.

2-1. 메타 프롬프팅(Meta-Prompting)으로 AI가 잘 이해할 수 있는 명세서 작성하기

메타 프롬프팅이란 AI가 더 나은 결과를 낼 수 있도록, AI에게 최적의 프롬프트를 작성하거나 개선하게 만드는 프롬프트 기법입니다.

예를 들어, "데이터 증분 분석 모델" 개발 프로젝트를 진행할 때였습니다. 저는 데이터 엔지니어지만 모델링 전문 지식은 부족했기에, 클라이언트의 요구사항을 바탕으로 Gemini에게 다음과 같이 질문을 시작했습니다.

🧑🏻‍💻 User:  "iOS 캠페인을 운영할 때 개인정보보호 제약으로 캠페인별 성과를 분석하기 어려운 상황이야. 일단 거시적으로 광고 매체(채널)별로 광고비 대비 매출의 증분성과 모델을 개발하고 싶은데 어떻게 개발하면 좋을지 계획을 세워봐."

🤖 Gemini:  (MMM 모델링 기술적 요구사항 및 시계열 분석 방법론 초안 제시...)

🧑🏻‍💻 User: "MMM 방식의 매체별 증분성 분석이 좋은 방법인 것 같아. 내가 가진 데이터는 A(일별 광고비), B(노출 수), C(전환 매출) 스키마를 따르고 있어. 이를 바탕으로 파이썬 라이브러리 PyMC3를 활용하는 쪽으로 스펙을 구체화해 줘."


이 사이클을 반복하여 AI가 내 의도(증분 분석)를 완벽히 이해하고 코드를 잘 작성 할 수 있는 최적의 명세서 프롬프트를 설계합니다.



2-2. 확정된 스펙(Context) 위에서 POC 코드 생성하기

앞선 대화를 통해 얻은 프롬프트(명세서)와 대화 맥락을 통해 POC 코드를 생성합니다.

🧑🏻‍💻 User: {앞서 정리한 스펙}, 이 스펙을 기준으로 증분분석 POC(Proof of Cocept) 코드를 작성해줘

🤖 Gemini : (실행 가능한 코드 생성 완료)



2-3. 반복과 검증

생성된 코드를 실행하여 문제가 있다면, 에러로그를 AI에게 피드백을 주고 코드를 수정합니다.

🧑🏻‍💻 User: 실행을 해보니까 데이터 전처리부분에서 메모리 에러가 났어, 이 문제를 어떻게 해결할지 분석 후 코드를 재작성 해줘

이처럼 Gemini CLI 안에서 스펙 정의 -> 코드 생성 -> 피드백 사이클을 빠르게 돌리며 결과물의 뼈대를 완성해 나갑니다.

3.  바이브 코딩의 현실적인 한계와 주의점

저를 포함한 많은 개발자에게 이제 LLM 없는 코딩은 상상하기 어려울 정도로 AI는 필수가 되었습니다. 하지만 AI가 코드를 짜준다고 해서 개발자가 손을 놓고 있어도 되는 것은 아닙니다. 오히려 AI가 생성한 코드를 '빠르게 해석하고 검토'할 수 있는 능력이 더욱 중요해졌습니다.

제가 느낀 바이브 코딩의 한계점은 명확합니다.


3.1. 프로젝트 규모
프로젝트 초기 단계나 작은 스크립트를 개발할 때, AI는 놀라울 정도로 훌륭한 코드를 생성해 줍니다. 하지만 프로젝트 규모가 커지고 복잡도가 증가할수록 AI의 효율은 급격하게 떨어집니다. 수만 라인의 코드가 얽혀 있는 프로젝트에서는 LLM의 컨텍스트 윈도우(Context Window) 한계 때문에 전체 구조를 파악하기 어렵고, 엉뚱한 코드를 수정하여 기존 로직을 망가뜨릴 위험이 있습니다.

3.2 유지보수의 어려움

AI가 작성한 코드를 개발자가 100% 이해하지 못한 채 배포했다면, 문제가 발생했을 때 치명적입니다. AI에게 물어봐도 틀린 답을 반복하는 '디버깅의 늪'에 빠질 수 있기 때문입니다. 차라리 사람이 직접 짰다면 금방 해결했을 문제에 더 많은 시간을 쏟게 될 수도 있습니다.

4.  마치며

Gemini CLI 를 포함한 다양한 LLM 도구를 통한 바이브코딩은 프로젝트 초기단계에서 빠른 속도로 개발 할 수 있도록 도와줍니다.
모호한 스펙을 구체화하고, 빠르게 POC를 띄워 실현 가능성을 검증하는 데 탁월합니다.

하지만 최종 제품의 품질과 유지보수성을 책임지는 건 여전히 개발자이며, 내 의도를 빠르게 초안으로 만들어주는 똑똑한 조수로 활용하였을 때, 바이브 코딩의 진가가 발휘되지 않을까 생각됩니다.