AI가 다시 써준다면 스택을 갈아타도 될까 — 12일 동안 세 번 갈아탄 기록
12일 동안 백엔드를 Spring Boot에서 Go로, 모바일을 세 번 갈아타며 전환 비용이 정말 0인지 확인한 기록
하려던 것
프로젝트를 만든 지 나흘 됐는데 스택이 마음에 안 들었다. 백엔드는 Spring Boot로 시작했는데 컨테이너가 무겁고, 맥미니에서 여러 서비스를 동시에 띄우려니 메모리가 빠듯했다. 모바일은 Capacitor로 웹뷰를 감쌌는데 네이티브 느낌이 안 났다.
평소 같으면 참고 갔을 거다. 재작성이 며칠짜리 일이니까. 그런데 이번엔 다르게 생각했다.
“프론트 재작성은 네가 할 거잖아. 왜 1인 개발이 부담이라는 거지?”
AI가 코드를 다시 써준다면 스택 선택은 되돌릴 수 있는 결정이 된다. 그러면 처음부터 완벽하게 고를 이유가 없다. 이 가설을 12일 동안 실험했다.
어떻게 시켰나
백엔드 — 두 프로젝트를 같은 날 갈아탔다. 4/16에 공시 요약 서비스와 의정활동 트래커 둘 다 “Spring Boot → Go” 커밋이 찍혔다. 한쪽에서 전환 패턴이 잡히니 다른 쪽은 거의 복사 수준으로 따라갔다. 두 번째가 압도적으로 빨랐다는 게 이 실험에서 제일 분명한 소득이다.
모바일 — 세 번 갈아탔다. 4/15에 Capacitor에서 React Native로 넘어갔고, 4/24~26에 React Native에서 Flutter로 다시 넘어갔다. 12일 만에 세 번째 스택이다.
UI도 마찬가지였다. 의정활동 트래커의 지도 화면은 하루에만 십수 번 갈아엎었다. 실제 지리 → 카토그램 → 격자. 각각이 몇 시간짜리 작업이었으면 첫 번째에서 멈췄을 거다.
어디서 막혔나
전환 비용이 0은 아니었다.
코드를 다시 쓰는 건 확실히 빨랐다. 문제는 코드가 아닌 것들이었다. 빌드 설정, CI, 배포 파이프라인, 라이브러리 생태계 차이, 그리고 내가 그 스택을 모른다는 사실. Flutter로 넘어가니 위젯 트리를 읽는 법부터 다시 익혀야 했다. AI가 코드를 써줘도 리뷰는 내가 한다. 모르는 언어로 된 코드는 리뷰가 리뷰가 아니라 승인이 된다.
그리고 세 번째 전환은 두 번째만큼 명확한 이유가 없었다. React Native로 옮긴 건 Capacitor의 웹뷰 한계라는 분명한 이유가 있었는데, Flutter로 옮긴 건 “이게 더 나을 것 같아서”에 가까웠다. 재작성이 싸지니까 결정이 헐거워졌다.
어떻게 풀었나
지금 정리한 기준은 이렇다.
갈아타도 되는 경우 — 전환 이유를 한 문장으로 쓸 수 있고, 그 문장이 “지금 스택이 X를 못 한다”는 형태일 때. 백엔드 Go 전환이 여기 해당한다(메모리, 배포 단순성).
갈아타면 안 되는 경우 — 이유가 “더 나을 것 같아서”일 때. 세 번째 모바일 전환이 여기다.
그리고 같은 전환을 여러 프로젝트에 할 거면 몰아서 하는 게 훨씬 싸다. 백엔드 두 개를 같은 날 옮긴 게 우연히 잘한 짓이었다. 패턴이 살아 있을 때 두 번째를 하면 절반 값이다.
이 시기에 Codex를 붙여서 PR 리뷰를 자동으로 받게 한 것도 같은 맥락이다. 내가 모르는 스택의 코드를 승인만 하고 있는 상태를 조금이라도 줄여보려는 거였다.
배운 점
- AI가 재작성해주면 스택 결정은 되돌릴 수 있게 된다. 이건 사실이다. 다만 되돌릴 수 있다는 게 “공짜”라는 뜻은 아니다.
- 비용은 코드가 아니라 그 주변에 있다. 빌드·CI·배포·생태계, 그리고 내 학습 시간.
- 모르는 언어로 된 코드는 리뷰가 승인이 된다. 전환할수록 내가 코드를 검증하는 능력이 떨어진다. 이게 진짜 비용이다.
- 전환 이유를 한 문장으로 못 쓰면 하지 마라. “더 나을 것 같아서”는 이유가 아니다.
- 같은 전환은 몰아서 해라. 두 번째는 확실히 싸다.