electron 의 rebuid 라는 커맨드는, 현재 설치된 Electron 버전에 대해 네이티브 Node.js 모듈을 재 구축하기 위해 사용한다.
일전에 사내 프로젝트에서 electron 과 serialport 라이브러리를 사용할 때, 이 rebuild 커맨드에 대해 알지 못해 상당히 해멨던 적이 있는데... 간단하게나마 정리해 보고자 한다.
왜 reubild 와 같은 작업이 필요하냐? rebuild - 그러니까 재컴파일 과정이 없으면 일렉트론 앱과 네이티브 Node.js 모듈, 그러니까 파일 시스템, 운영체제 등 저수준 기능에 접근하는 모듈간에 문제가 발생할 수 있다. 왜냐면, 일렉트론의 Node.js 는 표준 Node.js 환경과 다른 버전을 사용하기 때문이다... 알다시피 일렉트론은 크로미움 + Node.js 의 결합이기 때문에 표준 V8과 다른 버전의 노드를 내부적으로 사용하고 있다. 따라서 표준 노드 버전에 맞도록 컴파일된 모듈은 rebuild 를 거쳐 Electron 용으로 재 컴파일을 해야할 필요가 있다. 관련 문서는 이쪽으로...
설명에 따르면, Electron 은 표준 Node.js 환경과 다른 ABI (Application Binary Interface) 를 사용한다고 하는데... ABI 란... 응용 프로그램과 운영체제 사이 혹은 다른 프로그램 모듈 간의 인터페이스를 의미한다. 그러니까 ABI는 소프트웨어간 혹은 소프트웨어와 운영 체제 간 어떻게 통신을 할 것인지, 함수의 호출 방법이나 데이터 구조/해석 방법등을 정의한 저수준 인터페이스이다.
따라서 프로젝트 개발 의존성에 새 모듈을 추가할 때 혹은 프로젝트를 처음 셋팅한 이후 electron-rebuild 명령어를 추가 실행해 주는 것이 맞고, 이를 사용하기 위해선 @electron/rebuild 를 의존성에 추가해 커맨드를 실행하면 된다.
electron-forge vs electron-builder
현재 사내 프로젝트에선 환경에 맞게 빌드를 할 때마다 rebuild 커맨드를 실행해야 한다는 사실을 몰라서... 빌드 툴 선정시 serial port 가 정상 동작 되었던 electron-forge 를 택했다. electron forge 에서만 정상 동작했던 이유가, 개발모드 그리고 배포판 빌드를 할 때 rebuild 커맨드를 자동으로 실행했기 때문이고... 이 문제가 아니었다면 여러 상황을 고려했을 때 자료가 상대적으로 많은 electron-builder 를 사용했어도 됬겠다는 생각이 든다.
위 자료는 forge, builder 그리고 packager 세 가지 메인(?) 빌드 툴의 다운로드 횟수를 비교한 것인데, 최근엔 forge 도 많이 사용하고 있는 것으로 나타나긴 한다. 참고로 electron-forge 는 electron 이 메인테이너이고, electron-builder 는 electron-userland 라는 커뮤니티 기반으로 유지보수가 이루어 지고 있다. 또 일렉트론 공식 문서를 보면 빌드와 배포 설명에 대해 forge를 기반으로 하고 있기도 함...
electron-forge 를 선택하고 s3 기반 auto update 를 하기 위해 많은 삽질을 했었는데... 예전에 자료 조사 했던 것에 따르면 electron-builder 관련 업데이트 자료도 많고 잘 되어 있어서... 상황에 맞는 툴을 선택해 사용하면 될 것 같다.
'Stacks' 카테고리의 다른 글
[Node.js] Node의 require module 은 어떻게 동작하는가? (0) | 2024.02.04 |
---|---|
[Node.js] Streams 에 대해서 알아봐요. (0) | 2024.01.28 |
[Electron.js] 일렉트론에 대해서 알아보자! (0) | 2024.01.21 |
[Node.js] Node란 무엇이냐..이벤트 루프란..? (1) | 2024.01.14 |