마감이 가까운 프로젝트를 처음부터 다시 만들지 않고 Nuxt 3로 옮긴 경험
마감이 가까워 재작성 대신 이관을 택했고, 이때 정한 순서를 다른 서비스에서도 다시 사용했습니다.
빌드 45~55 → 15~20초, SSR 콜드 스타트 800~1000 → 300~500ms
문제
신규 구축 프로젝트를 Nuxt 2로 개발하던 중 고객 요구가 바뀌어 Nuxt 3로 올려야 했습니다. 마감은 다가오는데 이미 작성한 코드가 많아 처음부터 다시 만드는 방법은 일정상 선택하기 어려웠습니다.
판단과 트레이드오프
먼저 Nuxt 2와 3에서 실제로 달라지는 부분부터 정리했습니다. 디렉터리 규칙, 설정 파일 문법, Composition API와 TypeScript 지원 방식처럼 손대야 할 범위를 먼저 알아야 순서를 정할 수 있다고 생각했습니다.
기존 프로젝트 위에서 하나씩 고치는 대신 Nuxt 3 + TypeScript 새 프로젝트를 만들고 코드를 옮기기로 했습니다. 의존성을 그대로 복사했을 때 호환 문제로 빌드가 깨져, npm-check-updates로 호환 가능한 범위 안에서 먼저 정리했습니다.
레이아웃과 그 하위부터 옮겨 화면이 뜨는 상태를 먼저 만들었습니다. 그 다음 Vuex는 Pinia로, $axios는 useFetch로 바꾸는 작업을 스토어와 모듈 단위로 이어갔습니다.
결과
빌드는 45~55초에서 15~20초로, gzip 번들은 320~380KB에서 180~220KB로 줄었고 SSR 콜드 스타트는 800~1000ms에서 300~500ms가 됐습니다. 이때 정한 이관 순서는 이후 MAU 57만 마켓플레이스를 Nuxt 3로 옮길 때도 그대로 사용했습니다.


