피드로 돌아가기
컬리 기술블로그DevOps
원문 읽기
Nx에서 Bun 더 잘 사용하기: Nx 18 -> 21 마이그레이션
핀테크그룹이 Nx 18에서 21.4+로, Bun 1.0.33에서 1.2.x로 마이그레이션하여 CI 파이프라인 14% 단축 및 Lock file 텍스트 형식 전환으로 도구 호환성 확보
AI 요약
Context
Nx 18 + Bun 1.0.33 조합은 공식 미지원 상태였으나 빌드 시간 60% 단축 효과로 도입했습니다. 이후 Nx가 Bun을 공식 지원하는 버전(19.5+)이 출시되었고, webpack 빌드 시 bun.lockb 파싱 실패 문제와 패키지 매니저 감지 오류가 발생했습니다.
Technical Solution
- Nx 버전 업그레이드: 18.3.3 → 21.4+로 단계적 마이그레이션 수행 (19.5+부터 Bun 공식 지원, 21.4+부터 bun.lock 파싱 개선)
- Lock file 형식 전환: bun.lockb(바이너리) → bun.lock(텍스트 JSONC 형식)으로 변경하여 Nx, Dependabot 등 외부 도구의 파싱 가능성 확보
- yarn.lock 파일 제거: 마이그레이션 과정에서 호환성 대비용 yarn.lock 제거로 Nx의 패키지 매니저 감지 우선순위 문제 해결
- Bun 업그레이드: 1.0.33 → 1.2.x로 업그레이드하여 bun.lockb 파싱 문제 근본 해결
- 의존성 관리 단일화: 기존 bun.lockb + yarn.lock 이중 관리에서 bun.lock 단일 파일 구조로 변경
Impact
- CI 파이프라인: 13분 30초 → 11분 40초 (14% 단축)
- Artifact 크기: 330MB → 280MB (15% 감소)
- 의존성 설치 + 빌드 시간: 1분 46초 → 42초 (약 60% 단축, Nx 18 기준 측정)
- bun.lock 텍스트 형식 전환 후 내부 최적화로 약 30% 성능 개선 달성
Key Takeaway
공식 미지원 도구 조합 도입 시 오픈소스 코드와 이슈 트래커를 직접 확인하면 근본 원인을 빠르게 파악할 수 있습니다. 또한 메이저 버전 업그레이드는 안정화 시점이 확인되면 주기적으로 진행하여 여러 이슈가 동시에 발생하는 것을 예방할 수 있습니다.
실천 포인트
Nx와 Bun을 함께 사용하는 모노레포 환경에서는 Nx 21.4+ 이상과 Bun 1.2.x 이상의 조합을 사용해야 bun.lock 파싱 개선과 External Node 메타데이터 해석이 정상 동작하며, lock file을 텍스트 형식으로 유지하면 PR 리뷰 가능성 및 Dependabot 호환성을 동시에 확보할 수 있습니다.