아키텍처
프로젝트 전체에서 사용되는 패키지, 어떻게 마이그레이션 할까?
두줄요약
프로젝트 전반의 패키지 마이그레이션 사례를 다뤘습니다. Next는 대체 구현으로 전환했고, Recoil은 AST 기반 스크립트로 Jotai로 옮겼습니다.
문제 상황
- 프로젝트 규모 증가로 기반 기술이 더 이상 최선이 아니게 된 상태
- 공통 패키지 수정 시 22개 서비스 전체 재빌드가 필요해 빌드 시간과 메모리 이슈가 발생
- 지원 종료와 불안정성이 커진 상태관리 패키지로 인한 마이그레이션 필요성 대두
원인 분석
frontend-common공통 코드 변경이 전체 최신화와 동시 빌드를 유발하는 구조- Next 12의 Module Federation + SSG 조합이 빌드 속도와 메모리 사용량을 악화
- Recoil 사용 범위가 넓고 React lifecycle 외부 접근 제약이 있어 점진적 전환이 어려운 구조
해결 방법
- Next 의존성을
next-polyfill로 대체해 인터페이스를 유지한 채 webpack 기반으로 전환 - Recoil은 Jotai로 옮기기 위해 ts-morph로 AST를 분석하고 호출부를 기계적으로 치환
- 대응되지 않는 API는 직접 구현하고, 전체 파일에 대해 ESLint와 타입 에러를 점검