시니어 백엔드 개발자의 바이브코딩 경험 공유
출처: Yun Sang Bae님 페이스북
바이브 코딩 이용해서 나름 빡세게 애플리케이션 만들어본 경험을 회고 합니다.
제가 가지고 있는 경험 및 기술셋
* 저는 25년차 개발자 주로 백앤드, DevOps, Cloud
* Fronend는 프로토타이핑 수준으로 하는 정도. Vue.js 는 잠깐 다뤄본 정도라서, 현대적인 프레임워크에 대한 지식은 없다고 보면 되겠습니다.
이번에 시도 한 것들
* 사용한 AI 어시스턴트: Gemini CLI + Gemini-2.5-pro
* MCP는 context7, server-sequential-thinking 사용
* 애플리케이션: LLM Application Backend, Frontend
* Backend: Fastapi, ADK, MCP 기타 등등
* Frontend: Vue.js 3, Piana, 기타 등등
* 100% 바이브로 진행: 예를 들어 "간단한 if-else 오류 같은 직접 수정하는게 빠른 작업도" 것도 LLM에게 맡겼습니다. "00 줄 이러이러한 에러인데, 이렇게 수정해줘"
회고
주니어 개발자가 일을 잘하게 하려면 어떤 환경을 제공해야 할지를 생각하고 이를 실천하면 된다.
* 애플리케이션 설계 / 개발 원칙을 이해하고 이를 설계하고, 지시 할 수 있어야 한다. 이것을 할 수 있는 개발자라면 "창의적이지는 않지만 적어도 시키는 대로 코드를 뚝딱 뚝딱 만들어내는 능력있는 주니어 2-3명"과 함께 일하는 느낌을 받을 수 있다.
* 프레임워크 설계가 중요. LLM을 주니어 개발자라고 생각하자. 이들이 효과적으로 코드를 만들어내게 하려면 어떻게 해야 할까 ? 목표가 선명한 기능단위로 쪼개진 환경에서 개발할 수 있도록 해야 한다. 미들웨어, 로깅, 글로벌/로컬 예외처리, 요청/응답, 외부 API 연결, 데이터베이스 연결 등을 신경쓰지 않고 오로지 비즈니스 로직 개발에 신경쓰도록 해야 한다. Unit Test를 적용해서, 무엇에 집중해야 하는지를 명과히 해서(바운더리를 설정) 실패하지 않는 코드를 만들도록 한다.
* 관심사항 분리가 가능한 구조를 만들어서 LLM이 단순하게 생각하게 한다.
* 어느 정도 틀을 잡았다면, 컨테이너 기반으로 테스트/개발/빌드/배포 환경을 만든다.
* context를 오가면서 작업하지 않는다. 목표한 한 가지 기능을 완료하면, Unit Test 하고 마무리. 작게 Commit 한다. 크게 commit 하면 오류가 누적되어서 크게 폭발할 확률이 높다.
* 매 commit 할 때마다 구조개선해야 할 부분이 있는지 점검한다. LLM이 문제를 복잡하게 풀고 있지 않은지, LLM이 단순하게 생각하면서도 문제를 해결 할 수 있도록 구조를 개선 할 수 있지 않을지를 검토한다.
* 기능개발과 구조개선을 나누어서 한다. 구조개선하면서 기능 개발하지 않고 기능 개발하면서 구조개선 하지 않는다.
* 간단하게 풀 수 있는 문제는 때로는 우회해서 간단하게 푼다. 이 경우 "기술부채"가 생기는 것을 우려 할 수 있는데, 실제 개발환경이 그런 것처럼 "나도 똑똑해지고, LLM도 똑똑해 지면서 나중에는 쉽게 풀릴 수 있다"라고 생각해야 한다. 관리 할 수 있는 수준이면 된다.
* dev, stg, prd 의 테스트 환경을 완전히 분리 할 수 있도록 한다. 일부 하드코딩이 들어가도 "관리 가능한 수준이라면" 그냥 진행 한다.
* 문제를 해결하는 단순한 방법이 있을 것이라고 가정을 한다. LLM이 뺑뺑이 돌고 있다면 거의 분명히 단순한 문제를 복잡하게 풀려고 노력하는 중이다.
* 문제를 푸는 두 가지 이상의 방법이 있다.
주의 사항
* 회고를 보면 알겠지만 결국 "소프트웨어 엔지니어링에 충실" 하면 됩니다. 엔지니어링의 특성상 "현장 환경의 성숙도"가 중요한데, 시킨일은 빠르게 잘하는 주니어 개발자 데리고 일해야 하는 현장이라고 가정하고 엔지니어링 수준을 정리해 나가야 합니다.
* LLM이 하는 이야기를 이해 할 수 있어야 합니다. 블링 블링한 기술셋이 아닌 관리 가능한 기술셋을 사용해야 하고, LLM과 함께 공부해야 합니다.
바이브코딩에 대한 다양한 이야기가 있던데
* 설계와 지시, 리뷰를 할 수 있는 개발자의 경우 사람과 하는 것보다 LLM과 일하는게 훨씬 더 효율적이게 될 겁니다.
* 주니어 개발자의 경우 기존과 다른 방식으로 일하도록 강요 받게 될 것으로 예상 됩니다. 주니어 개발자라는 용어가 사라지고 LLM을 주니어로 잘 활용 할 수 있는 개발자라는 흐름이 되지 않을까요.
앞으로
* 저는 앞으로 바이브 코딩을 계속 할 겁니다.(사실 이게 바이브 코딩이라고 해야 할지 모호하긴 하지만)