바이브덕

코드 한 줄 안 치고 바이브코딩으로 앱을 만들어 보니

코드는 한 줄도 직접 안 쳤어요.

나흘, 하루 두세 시간으로 실제 쓰는 가계부·자산 앱을 바이브코딩으로 만든 후기예요.

나랑 안 맞는 앱의 핵심 기능만 직접 만들어 쓰게 된 변화, AI가 어긋나던 순간과 제가 세운 관문까지 정리했어요.

코드는 한 줄도 제가 안 쳤어요

앱을 하나 만들었어요. 가계부에 자산 현황, 코인 시세까지 한 화면에서 보는 앱이에요. 제가 매일 쓰려고 만들었고, 지금도 아침마다 열어요. 그런데 이 앱, 코드는 제가 한 줄도 직접 치지 않았어요.

작업은 나흘 걸렸어요. 하루 두세 시간씩이었고, 그중 하루는 컴퓨터 앞에 앉지도 못했어요. 출퇴근 지하철에서 휴대폰으로 지시만 넣었거든요.

이렇게 말하면 “결국 AI가 다 했네”로 들리기 쉬워요. 그런데 제가 붙잡고 싶은 지점은 “됐다”가 아니에요. 코드를 안 쳤다고 손을 뗀 게 아니라, AI가 엉뚱한 길로 새지 않게 붙잡아 두는 데 나흘을 다 썼어요.

매일 여는 가계부에, 코인·자산까지

개인용 가계부 겸 자산 관리 앱이에요. 홈 화면은 월간 캘린더고, 날짜마다 수입과 지출을 찍어요. 상단엔 이번 달 수입·지출·합계가 한눈에 잡히고, 변동비 예산도 같은 자리에서 관리해요.

직접 만든 가계부 앱의 월간 거래 캘린더 화면, 날짜별 수입 지출 합계와 상단 월 요약
직접 만든 거래 캘린더예요. 날짜마다 수입·지출이 바로 합산돼요.

탭을 넘기면 인사이트 화면이에요. 이 앱에서 제일 공들인 곳인데, 위쪽 탭 하나로 성격이 다른 정보를 요약·자산·시장 셋으로 끊어 놨어요. 한 화면에 다 쏟아 넣으면 스크롤만 길어지거든요.

가계부 앱 인사이트 요약 탭, 순자산과 투자 평가손익 그리고 또래 지출 벤치마크
요약
인사이트 자산 탭, 코인과 예적금 합산 순자산과 계정 멤버별 보유 상세
자산
인사이트 시장 탭, 공포탐욕 지수와 코스피 코스닥 국내 증시 등락
시장

세 탭은 이렇게 나눠요.

  • 요약은 순자산·투자 손익·또래 대비 지출을 위에서 아래로 훑는 지표 화면이에요.
  • 자산은 코인·예적금을 합친 순자산과 그 비중을 봐요. 계정을 사람별로 나눠서, 지금은 저 혼자지만 나중에 가족과 합쳐 볼 길도 열어 뒀고요.
  • 시장은 공포·탐욕 지수나 국내 증시 같은 바깥 지표예요. 내 자산과 시황을 한자리에서 같이 보려고요.

팔려고 만든 앱은 아니에요. 남이 만든 가계부 앱을 쓰다 아쉬운 데가 쌓인 것도 있고, 솔직히 절반은 실험이었어요. 코드를 한 줄도 안 치고 어디까지, 얼마 만에 만들어지는지 직접 재보고 싶었어요. 나중에 결혼하면 우리 집 가계부 겸 자산 장부로 계속 쓸 생각이고요.

이 앱은 PWA로 만들었어요. PWA는 브라우저로 띄운 웹을 휴대폰 홈 화면에 설치해 앱처럼 쓰는 방식이에요. 앱스토어 심사도 설치 파일도 없이, 아이콘만 홈에 얹으면 주소창 없는 전체화면으로 떠요. 덕분에 매일 아침 폰에서 진짜 앱처럼 열어 쓰고요.

숫자로 요약하면 이래요.

0

직접 친 코드

4

혼자 만든 기간

40%

재작업한 커밋 비율

눈여겨볼 건 맨 오른쪽이에요. 커밋은 작업을 한 번 매듭지을 때마다 남기는 저장 기록인데, 이 앱을 만들며 남긴 커밋의 40%가 새 기능이 아니라 ‘고침’이었어요. 혼자 쓰는 단순한 앱인데도, 만드는 것보다 다시 손보는 데 그만큼 품이 들었다는 뜻이죠. 이게 바이브코딩의 실제 무게중심이에요.

AI에 넘기기 전에, 관문부터 세웠어요

핵심은 하나예요. 코드는 안 쳤지만, AI가 주는 걸 그대로 받지도 않았어요. 일을 넘기기 전에, 반드시 통과해야 할 검증 단계부터 뒀어요.

먼저 AI를 역할별로 쪼갰어요. 에이전트란 특정 역할만 맡게 정해둔 AI인데, 클로드 코드 안에 기획을 맡는 에이전트와 구현을 맡는 에이전트를 따로 뒀어요. 한 AI한테 다 맡기면 기획하다 말고 코드를 짜고, 코드 짜다 말고 명세를 바꿔요. 역할을 나누니 각자 제 일만 붙들어서 헛도는 게 확 줄었어요.

1
명세를 먼저 '확정'해요
기능 하나를 자연어로 설명하면 기획 AI가 명세 문서로 정리해요. 제가 읽고 손볼 데가 없을 때까지 다듬은 다음 확정하고, 그 뒤로는 도중에 말을 안 바꿔요.
2
구현 AI는 테스트부터 짜게 했어요
확정된 명세만 구현 AI한테 넘겨요. 통과 못 하는 테스트를 먼저 만들고, 그걸 통과시키는 코드를 나중에 짜게 했어요. 테스트가 명세를 대신 지켜 주는 셈이죠. 개발에선 이 순서를 TDD라고 불러요.
3
바뀐 코드는 리뷰 관문을 거쳐요
구현이 끝나면 변경분을 리뷰에 걸어요. 계정별 데이터가 새는 것 같은 정확성·보안 문제를 여기서 걸러요.
4
끝내기 전에 타입·테스트·빌드를 다 통과해요
변경을 '완료'라고 부르려면 몇 가지 검사를 한 번에 다 통과해야 하는 게이트를 하나 뒀어요. 값의 종류가 어긋나지 않았는지 보는 타입 검사, 테스트, 그리고 앱으로 묶어내는 빌드까지요. 하나라도 걸리면 완료로 못 넘어가요. 제 성실함이 아니라 절차가 강제하니까요.

이 규율은 제 의지가 아니라 도구에 심어 뒀어요. 프로젝트 초기 세팅은 미리 정의해 둔 자동 절차 하나로 끝냈고, 파일을 통째로 지우거나 비밀 키를 읽는 위험한 명령은 실행되기 전에 자동으로 막히게 해뒀어요. AI가 좋은 뜻으로 “정리했습니다” 하며 멀쩡한 파일을 날리는 사고를 원천 차단한 거죠. 그리고 변경을 마칠 때마다 타입·테스트·빌드를 다시 돌리는 완료 절차를 거쳐서, 제가 깜빡해도 절차가 대신 걸러 냈고요.

정리하면 이번에 얹은 셋업은 이래요. 오른쪽 이름이 낯설어도 겁먹을 건 없어요. 요지는 하나예요. 제가 깜빡하거나 대충 믿고 넘어가도 기계가 알아서 걸러 주게 심어 둔 안전장치들이죠. 전부 클로드 코드 안에 문서 몇 개로 정의해 뒀고요.

이번에 쓴 셋업
기획 · 명세 확정
기획 에이전트 · Claude Opus
구현 · 테스트 우선(TDD)
구현 에이전트 · Claude Sonnet
프로젝트 초기 세팅
스킬 한 번
위험 명령 차단
가드 훅
끝낼 때마다 검증
완료 게이트(로컬)
바이브코딩에서 개발자의 일은 타이핑이 아니라 관문 설계로 옮겨가요.

관문을 세워도 AI는 어긋났어요

안전장치를 이만큼 겹겹이 뒀는데도 매끄럽지만은 않았어요. 어긋나는 이유는 크게 둘이었어요.

하나는 제 쪽이었어요. AI가 어제 걸 스스로 기억하는 건 아니에요. 새로 켜면 백지에서 시작하거든요. 다만 어제 세션을 그대로 이어 열거나, 제가 확정해둔 명세를 다시 읽히면 어제 방향대로 움직여요. 그렇게 방향은 그대로인데, 정작 제 생각이 밤새 조금 바뀌어 있더라고요. 어제의 저와 오늘의 저가 원하는 게 미묘하게 다르니, AI는 시킨 대로 했는데 오늘 제 눈엔 어긋나 보이는 거예요.

다른 하나는 맥락이 쌓일수록 나타났어요. 대화가 길어지면 AI가 시키지도 않은 걸 슬그머니 얹어요. 제 판단을 대신 채워 넣는 거죠. 큰 그림을 오래 물고 있을수록 심해졌어요.

두 경우 모두 해법은 같았어요. 기능을 잘게 쪼개서 시키고, 매번 확인하는 거예요. 큰 덩어리를 통째로 맡기면 어긋난 채로 멀리 가 버려요. 작게 끊으면 AI가 붙들 맥락이 짧아지니 그 하나는 더 정확히 해내고, 저도 어긋난 순간 바로 잡아내요. 이건 막연하게 말고 쪼개서 시키는 프롬프트 이야기에서 따로 풀었는데, 실제 앱에서도 그대로 통했어요.

셋째 날은 좀 특별했어요. 종일 컴퓨터 앞에 못 앉았거든요. 그래서 디스코드에 클로드 코드를 붙여 두고, 지하철에서 휴대폰으로 지시를 던졌어요. “이 부분 이렇게 고쳐 줘” 한 줄 보내고, 다음 정거장에서 결과를 확인하는 식이었죠. 키보드 앞에 앉아야만 개발인 줄 알았는데, 그 감각이 꽤 깨졌어요.

그럼 AI는 뭘 잘하고, 어디서 제가 붙어야 했을까요. 코인 화면이 좋은 예예요. 등록·조회·수정·삭제가 대부분이라 뼈대는 순식간에 나왔어요. 반대로 실제 데이터에서만 터지는 예외는 제가 하나하나 붙어야 했고요.

나흘치를 갈라 보면 이래요.

AI에 맡긴 나흘, 실제 체감

AI가 빨리 해준 것

+거래 등록·조회·수정·삭제 같은 반복 기능
+버튼·카드·입력폼 같은 공통 UI
+테스트 코드 뼈대와 초기 세팅
+PWA 설치·빌드 설정 같은 잡일

내가 붙어야 했던 것

실제 데이터에서만 터지는 예외 처리
타입이 뒤엉켜 막힌 빌드 되살리기
계정끼리 데이터 안 새게 막는 보안
모바일에서 1픽셀씩 맞추는 손질

왼쪽은 시키면 빨랐어요. 오른쪽은 제가 하나하나 붙어야 했고요. 앞서 말한 커밋의 40%, 그 재작업이 대부분 이 오른쪽에서 나왔어요.

짚고 싶은 건, 그 재작업의 대부분이 기능 로직이 아니라 화면을 쓰기 편하게 다듬는 일이었다는 거예요. 버튼 위치와 글자 크기, 무엇보다 PC랑 모바일에서 서로 다르게 깨지던 정렬과 배치요. 기능은 한 번에 나와도, 두 화면에서 다 멀쩡해 보이게 맞추는 건 제가 눈으로 보며 계속 다시 시켜야 했어요. 하단 탭바 하나 자리를 잡는 데만 예닐곱 번을 다시 시켰을 정도예요.

로직 쪽 재작업은 오히려 적었어요. 타입이 꼬여 빌드가 멈춘 걸 한 번에 스물두 건 정리하거나, 계정끼리 데이터가 새지 않게 막는 문제를 리뷰 관문에서 걸러 낸 정도였죠. 만드는 건 빨랐지만, 실제로 굴러가게 다듬는 데 시간이 들었다는 얘기예요.

진짜 바뀐 건 ‘만들기’가 아니에요

이번에 제일 크게 남은 건 따로 있어요. 만드는 게 쉬워진 건 맞아요. 그런데 그게 핵심은 아니더라고요.

세상에 없는 앱은 이제 거의 없어요. 가계부 앱도, 자산 관리 앱도 이미 수백 개죠. 문제는 남이 만든 앱은 제 마음대로 못 고친다는 거예요. 커스텀은 만든 사람이 열어 둔 만큼만 되고, 나랑 안 맞는 부분은 그냥 참고 쓰는 수밖에 없었죠.

달라진 건 여기예요. 이제는 안 맞는 앱을 통째로 갈아탈 것 없이, 저한테 꼭 필요한 핵심 기능 하나만 직접 만들어 쓰면 돼요. 가계부 앱들이 코인이랑 예적금을 한 화면에서 안 보여주면, 그 화면만 제가 만드는 거예요. 며칠 저녁이면 되고, 지하철에서 휴대폰으로도요.

나랑 안 맞는 앱을 참고 쓰는 대신, 필요한 핵심 기능만 직접 만들어 쓰는 게 쉬워졌어요.

여기까지 오니 드는 생각이 있어요. 개발자의 일도, 일하는 형태도 꽤 바뀌겠구나 싶어요. 코드를 직접 치는 시간은 줄고, 무엇을 만들지 정하고 AI가 만든 걸 검증하는 쪽으로 무게가 옮겨가요. 저도 이번에 코드가 아니라 코드 공부 대신 하게 된 것들에 시간을 쏟은 셈이고요.

시작은 도구가 아니라 기획이에요

거창한 준비는 필요 없어요. 앞에서 말한 순서, 그러니까 문서로 확정하고 관문을 세우고 잘게 쪼개서 시키는 것만 지키면 돼요. 도구 선택은 그다음이에요.

스택은 서버를 직접 굴리지 않는 서버리스 방식으로 백엔드를 잡고, 프론트는 웹 앱으로 갔어요. 예전에 인프라를 고르던 기준이랑 같은 결이고요. 도구보다 중요한 건, AI가 순식간에 뽑아 준 코드를 그냥 믿고 넘어가지 않는 습관이더라고요.

한 가지 더요. 이 정도 앱은 화려한 기술이 아니라 기획과 설계에서 갈려요. 뭘 만들지, 어떤 순서로 검증할지만 또렷하게 잡으면 구현은 AI가 채워 줘요. 제가 개발자라 관문을 세우고 깨진 화면을 먼저 알아본 건 분명 유리했어요. 그래도 대단한 실력이 필요한 일은 아니에요. 조금만 붙들고 해보면, 생각보다 많은 게 실제로 손에 잡혀요.

레스덕의 정리

코드는 한 줄도 안 쳤지만, 판단과 규율은 전부 제 몫이었어요. 나흘 중 절반은 AI가 만든 걸 다시 시키고 확인하는 데 썼고, 그 절반이 만드는 것만큼 중요했어요.

정답이 아니라 제 나흘치 회고예요. 그래도 하나는 또렷해요. 무언가를 만드는 문턱은 낮아졌고, 개발자의 무게중심은 타이핑에서 관문 설계와 검증으로 옮겨가는 중이에요. 나랑 안 맞는 앱을 그냥 참지 않고 필요한 기능만 직접 만들어 쓰는 게 이만큼 쉬워진 시대라면, 일하는 방식도 따라 바뀔 수밖에 없다고 봐요.

여기 말고 다른 데서 막혔다면

증상만 고르면 지금 뭘 하면 되는지 짚어줘요.

참고 자료

읽으면서 떠오른 사람에게 공유해 주세요

레스덕이 엄지를 들고 있는 포즈

레스덕

· 운영자

현직 개발자가 AI·바이브코딩·개발자 커리어를 직접 겪고 판단한 개인 기록입니다. 공식 자료를 간략히 요약하고, 그 위에 저의 경험·판단을 덧붙입니다. 전문 자문이 아니므로, 중요한 결정 전에는 최신 원문과 전문가 상담을 함께 확인해 주세요.

최종 수정 2026.07.03 · 문의 lessduck2@gmail.com

관련 글 · 테크

검색어를 입력하면 글 본문에서 찾아드려요.

본문 + 제목 검색전체 검색 페이지 →