DevLog

엔지니어링 블로그를 한 곳에서 탐색하고, 최근 발행 흐름을 빠르게 파악할 수 있는 서비스 입니다.

Quick Links

  • Latest Feed
  • Engineering Directory

Support

  • 소개
  • 개인정보처리방침

Contribute

  • 원하는 블로그 추가 (준비 중)
  • Feedback

© 2026 DevLog Inc. All rights reserved.

본 사이트는 공개 RSS 피드를 통해 콘텐츠를 수집하며, 모든 콘텐츠의 저작권은 원저작자에게 있습니다.

Back to Feed
Read Original

Contents

Continue Reading

  • More from 컬리
  • Related reads#Nx
#DevOps

Nx에서 Bun 더 잘 사용하기: Nx 18 -> 21 마이그레이션

Nx에서 Bun 더 잘 사용하기: Nx 18 -> 21 마이그레이션
01

Summary

빌드 시간 60% 광속 단축! Nx와 Bun의 모노레포 마이그레이션 생존기

공식 지원의 함정을 넘어 Nx 21과 Bun 1.2로 완성하는 강력한 개발 워크플로우

Nx 모노레포 환경에서 pnpm을 떠나 Bun으로 안착하기까지의 험난한 여정과 해결책을 담았습니다. 공식 문서상의 지원 버전과 실제 안정화 버전 사이의 간극을 어떻게 메웠는지, 그리고 바이너리 락파일의 한계를 어떻게 극복했는지에 대한 실전 노하우를 공유합니다.

  • 01Nx의 패키지 매니저 감지 우선순위 분석을 통한 인식 오류 해결
  • 02Bun 1.2의 텍스트 기반 락파일(bun.lock) 전환을 통한 DX 개선
  • 03Webpack 빌드 시 발생하는 External Node 메타데이터 파싱 이슈 조치
  • 04CI 파이프라인 14% 및 빌드 시간 60% 단축이라는 압도적 성능 지표 달성
  • 05오픈소스 코드 분석을 통한 근본적인 문제 원인 파악 및 해결 전략

+RECOMMENDATION

Nx를 사용하면서 느린 빌드 속도에 고통받고 있거나, Bun 도입 후 락파일 관리 및 CI 연동 이슈를 겪고 있는 엔지니어들에게 이 마이그레이션 가이드를 강력히 추천합니다.

The Problem

Nx 18 버전이 Bun을 공식 지원하지 않아 패키지 매니저를 Yarn으로 오인식하거나, 바이너리 형태인 bun.lockb 파일의 파싱 실패로 인해 Webpack 빌드 과정에서 메타데이터 오류가 발생하는 문제가 있었습니다. 또한 바이너리 락파일 특성상 코드 리뷰 시 변경 사항 확인이 불가능하고 외부 도구와의 호환성이 떨어지는 한계가 존재했습니다.

The Solution

Nx를 21.4+ 버전으로, Bun을 1.2.x 버전으로 업그레이드하여 공식적인 Bun 지원과 텍스트 기반 락파일(bun.lock) 파싱 기능을 확보했습니다. 마이그레이션 과정에서 기존의 yarn.lock 파일을 임시 제거하여 패키지 매니저 감지 로직을 우회하고, 단계적인 버전 상승을 통해 Storybook 9 등 최신 도구와의 호환성 요구사항을 충족했습니다.

The Result

로컬 환경에서 의존성 설치 및 빌드 시간이 기존 대비 약 60% 단축되었으며, CI 파이프라인 수행 시간 14% 감소와 산출물 크기 15% 절감 효과를 얻었습니다. 텍스트 형식의 락파일 도입으로 PR에서 의존성 변경 내역을 확인할 수 있게 되었고, Dependabot 등 자동화 도구의 정상적인 활용이 가능해졌습니다.

Trade-off

Nx 19.5에서 Bun 공식 지원이 시작되었음에도 불구하고, 실제 프로덕션 수준의 안정성을 확보하기 위해서는 21.4+ 버전까지 추가적인 업그레이드 공수가 필요했습니다. 또한 호환성을 위해 유지하던 yarn.lock을 제거하고 단계별 마이그레이션을 거쳐야 하는 등 전환 과정에서의 기술적 복잡도가 수반되었습니다.

03

Key Concepts

Concept · 01

Nx Project Graph

워크스페이스 내 프로젝트 간의 관계와 외부 의존성을 시각화하고 관리하는 Nx의 핵심 메커니즘입니다.

  • External Node 메타데이터를 통해 외부 패키지 버전 정보를 관리함
  • generatePackageJson 옵션 사용 시 빌드 산출물의 의존성 구성에 활용됨
Concept · 02

bun.lock (Text Lockfile)

Bun 1.2부터 도입된 JSONC 형식의 텍스트 기반 락파일로, 기존 바이너리 형식인 bun.lockb를 대체합니다.

  • Git PR에서 의존성 변경 사항의 Diff 확인 가능
  • Nx, Dependabot 등 서드파티 도구와의 파싱 호환성 대폭 개선
Concept · 03

External Node

Nx 프로젝트 그래프에서 프로젝트 내부에 존재하지 않는 외부 npm 패키지들을 나타내는 논리적 노드입니다.

  • 빌드 시 필요한 패키지 버전과 의존 관계 데이터를 보유함
  • 구버전 Bun 락파일 사용 시 해당 노드의 데이터 누락으로 인한 빌드 오류 발생 원인이 됨
Continue reading · same source

컬리More from 컬리

View all posts from 컬리
  • AI에게 도메인을 가르치다 두 번 갈아엎은 이야기 — LLM Wiki + RAG 혼합기

    RAGLLMSQLite
    1개월 전
  • 현관문에도 얼굴이 있다: 배송 완료 사진 기반 On-device 오배송 탐지 시스템

    ONNXContrastive LearningDocumentDB
    2개월 전
  • 클로드 코드로 개발 팀장의 하루를 재설계한 이야기

    Claude CodeMCPWorkflow Automation
    2개월 전
  • AI 토큰 사용량 전사 1위 개발자가 148,000번의 대화에서 배운 것

    LLM AgentsOrchestrationPrompt Engineering
    3개월 전
  • AI 에이전트 15개를 동시에 굴리는 법 — AI 병렬 오케스트레이션 실전 운용기

    AI AgentsOrchestrationObsidian
    3개월 전

Related reads#Nx

Explore #Nx
컬리·ONNX

현관문에도 얼굴이 있다: 배송 완료 사진 기반 On-device 오배송 탐지 시스템

#Nx2개월 전
라인·Multimodal LLM

대규모 서비스 환경에서의 이미지 콘텐츠 모더레이션(feat. 멀티모달 LLM)

#Nx3개월 전

Source

컬리
컬리
Engineering Blog

Published · January 30, 2026

Topics

NxBunMonorepoMigrationPackage ManagerCI/CDWebpackJavaScript Runtime