지난 1년간 테마 및 플러그인 빌드 시스템의 현대화가 성공적으로 완료됨에 따라, 이제 Discourse 코어에서도 유사한 업그레이드를 진행할 준비가 되었습니다.
이 변경 사항은 코어 빌드 시스템의 전면 개편이지만, 완전한 하위 호환성을 유지하도록 설계되었습니다. Discourse의 프로덕션 환경에서는 어떤 변화도 느끼지 못할 것입니다. 사전 컴파일된 에셋 시스템이 계속 유지되어, 서버에서 코어 에셋을 직접 빌드할 필요가 없도록 할 것입니다.
기술
ember-cli/webpack에서 JavaScript를 위한 Rust 기반 번들러인 rolldown으로 전환하고 있습니다. Rolldown은 최신 버전의 Vite의 핵심 구성 요소이므로, Ember 생태계의 방향성과 일치하며 신뢰할 수 있는 선택입니다.
Discourse의 모든 JavaScript는 이제 네이티브 ES 모듈로 빌드되며, 이를 통해 런타임 성능이 향상되고 향후 다양한 최적화가 가능해집니다.
빌드 성능
개발 환경에서 빌드 속도가 이전보다 약 80% 빨라질 것입니다. 제 머신[1]에서는 개발 부팅 시간이 약 30초에서 약 5초로 단축되었습니다. Babel과 같은 구식 기술에 의존하는 빌드 부분이 여전히 남아 있어, 향후 성능이 더 개선될 것으로 기대합니다.
개발자 경험
이번 전환의 일환으로, 개발 시 Discourse 앞에 프록시를 사용하는 방식을 중단하기로 결정했습니다. 이제 개발은 Rails 서버를 직접 대상으로 하여 수행해야 합니다.
bin/ember-cli -u는 bin/dev로 대체되었습니다. 이 명령어는 :3000 포트에서 Rails를 시작하고 백그라운드에서 rolldown 빌드를 실행합니다. 두 프로세스의 로그 출력은 적절한 접두사와 함께 표시됩니다. 브라우저에서 :3000을 방문해야 합니다. :4200 포트에서는 더 이상 아무것도 서빙되지 않습니다.
이전을 돕기 위해, bin/ember-cli는 이제 하위 호환성 shim으로 동작합니다. 도움말 정보를 출력하고, :4200 포트에서 :3000으로 이전하는 방법을 안내하는 경량 서버를 시작합니다.
Rails와 JS 빌드를 별도의 명령어로 실행하기를 선호하는 경우에도 여전히 가능합니다. Rails 부팅 명령어는 변경되지 않았으며, rolldown 번들러는 bin/dev --only ember를 사용하여 감시(watch) 모드로 실행할 수 있습니다.
오래된 빌드 경고
디스크에 저장된 현재 빌드가 rolldown 개발용 번들러로 생성되었고, 해당 번들러 프로세스가 더 이상 실행되지 않는 경우, 에셋이 최신 상태가 아님을 알리기 위해 Rails가 오류를 발생시킵니다. 이는 개발 모드와 시스템 스펙에 적용됩니다.
CI에서 사용하는 것과 같이 원샷 빌드 명령어(pnpm build)를 사용하는 경우 이 오류는 발생하지 않습니다.
감사의 말씀!
이 작업은 Ember/Embroider 팀과 The Ember Initiative의 도움으로 가능했습니다. 특히 이 프로젝트에서 함께 작업해 주신 @real_ate님께 특별한 감사를 드립니다! ![]()
M3 Pro 칩이 탑재된 MacBook Pro ↩︎