용어 사전
이 페이지는 Electron 개발에서 자주 사용되는 용어를 정의한다.
ASAR
ASAR는 Atom Shell Archive Format의 약자이다. asar 아카이브는 파일들을 하나의 파일로 합치는 간단한 tar
형식과 유사한 포맷이다. Electron은 전체 파일을 풀지 않고도 ASAR 파일에서 임의의 파일을 읽을 수 있다.
ASAR 형식은 주로 Windows에서 대량의 작은 파일을 읽을 때 성능을 개선하기 위해 만들어졌다. 예를 들어, node_modules
에서 앱의 JavaScript 의존성 트리를 로드할 때 유용하다.
코드 서명은 앱 개발자가 코드에 디지털 서명을 추가해 패키징 이후에 변조되지 않았음을 보장하는 과정이다. 윈도우와 macOS 모두 각자의 코드 서명 방식을 구현하고 있다. 데스크톱 앱 개발자라면 일반 사용자에게 앱을 배포할 계획이 있다면 반드시 코드에 서명해야 한다.
더 자세한 정보는 코드 서명 튜토리얼을 참고한다.
컨텍스트 격리
컨텍스트 격리는 Electron의 보안 기능 중 하나로, preload 스크립트가 렌더러 프로세스의 웹 콘텐츠에 Electron 또는 Node.js의 권한 있는 API를 누출하지 못하도록 방지한다. 컨텍스트 격리가 활성화되면, preload 스크립트에서 API를 노출할 수 있는 유일한 방법은 contextBridge
API를 통하는 것이다.
더 자세한 내용은 컨텍스트 격리 튜토리얼을 참고한다.
참고: preload 스크립트, 렌더러 프로세스
CRT
C 런타임 라이브러리(CRT)는 C++ 표준 라이브러리의 일부로, ISO C99 표준 라이브러리를 포함한다. Visual C++ 라이브러리는 CRT를 구현하며, 네이티브 코드 개발, 혼합 네이티브 및 관리 코드, 그리고 .NET 개발을 위한 순수 관리 코드를 모두 지원한다.
DMG
Apple 디스크 이미지는 macOS에서 사용하는 패키징 포맷이다. DMG 파일은 주로 애플리케이션 "설치 프로그램"을 배포하는 데 활용된다.
IME(Input Method Editor)는 사용자가 키보드에 없는 문자와 기호를 입력할 수 있게 해주는 프로그램이다. 예를 들어, 라틴 키보드를 사용하는 사람이 중국어, 일본어, 한국어, 인도어 문자를 입력할 수 있도록 도와준다.
IDL(Interface Description Language)
인터페이스 기술 언어(IDL)는 함수 시그니처와 데이터 타입을 정의하는 형식이다. 이 형식은 Java, C++, JavaScript 등 다양한 프로그래밍 언어에서 인터페이스를 생성하는 데 사용된다. IDL은 특정 언어에 종속되지 않으면서도 여러 언어 간의 상호 운용성을 보장하는 데 중요한 역할을 한다.
IPC
IPC는 프로세스 간 통신(Inter-Process Communication)을 의미한다. Electron은 IPC를 사용해 메인 프로세스와 렌더러 프로세스 간에 직렬화된 JSON 메시지를 주고받는다.
메인 프로세스
메인 프로세스는 일반적으로 main.js
라는 파일로, 모든 Electron 앱의 시작점이다. 앱의 시작부터 종료까지 전체 생명주기를 관리한다. 또한 메뉴, 메뉴 바, 독(Dock), 트레이(Tray)와 같은 네이티브 엘리먼트를 제어한다. 메인 프로세스는 앱 내에서 각각의 새로운 렌더러 프로세스를 생성하는 역할도 담당한다. Node.js의 전체 API가 내장되어 있다.
모든 앱의 메인 프로세스 파일은 package.json
파일의 main
속성에 지정된다. 이 설정을 통해 electron .
명령어가 시작 시 실행할 파일을 알 수 있다.
Chromium에서는 이 프로세스를 "브라우저 프로세스"라고 부르지만, Electron에서는 렌더러 프로세스와 혼동을 피하기 위해 이름을 변경했다.
참고: process, renderer process
MAS
MAS는 Apple의 Mac App Store를 의미하는 약어다. 앱을 MAS에 제출하는 방법에 대한 자세한 내용은 Mac App Store Submission Guide를 참고한다.
Mojo
Mojo는 프로세스 내부 또는 프로세스 간 통신을 위한 IPC 시스템이다. 이 시스템은 크롬이 메모리 압력 등에 따라 작업을 별도의 프로세스로 분할할지 여부를 결정하는 데 중요한 역할을 한다.
자세한 내용은 다음 링크를 참고한다: https://chromium.googlesource.com/chromium/src/+/main/mojo/README.md
관련 항목: IPC
MSI
윈도우에서 MSI 패키지는 Windows Installer(또는 Microsoft Installer) 서비스를 통해 애플리케이션을 설치하고 설정하는 데 사용된다.
자세한 정보는 Microsoft의 문서에서 확인할 수 있다.
네이티브 모듈
네이티브 모듈(Node.js에서는 애드온이라고도 함)은 C 또는 C++로 작성된 모듈로, Node.js나 Electron에서 require() 함수를 사용해 로드할 수 있다. 일반적인 Node.js 모듈처럼 사용할 수 있다. 주로 Node.js에서 실행되는 JavaScript와 C/C++ 라이브러리 간의 인터페이스를 제공하는 데 사용된다.
Electron은 네이티브 Node 모듈을 지원하지만, Electron은 시스템에 설치된 Node 바이너리와 다른 V8 버전을 사용할 가능성이 높다. 따라서 네이티브 모듈을 빌드할 때 Electron의 헤더 위치를 수동으로 지정해야 한다.
더 자세한 정보는 네이티브 Node 모듈 튜토리얼을 참고한다.
노티리제이션
노티리제이션은 macOS 전용 프로세스로, 개발자가 코드 서명된 앱을 애플 서버로 전송해 자동화된 서비스를 통해 악성 컴포넌트가 있는지 검증받을 수 있다.
참조: 코드 서명
OSR(오프스크린 렌더링)은 무거운 페이지를 백그라운드에서 로드한 후 화면에 표시하는 데 사용할 수 있다. 이렇게 하면 페이지를 더 빠르게 표시할 수 있다. OSR은 페이지를 화면에 보여주지 않고도 렌더링할 수 있게 해준다.
더 자세한 내용은 오프스크린 렌더링 튜토리얼을 참고한다.
프리로드 스크립트
프리로드 스크립트는 웹 콘텐츠가 로드되기 전에 렌더러 프로세스에서 실행되는 코드를 포함한다. 이 스크립트는 렌더러 컨텍스트 내에서 실행되지만, Node.js API에 접근할 수 있는 더 많은 권한을 부여받는다.
프로세스
프로세스는 실행 중인 컴퓨터 프로그램의 인스턴스를 말한다. 메인 프로세스와 하나 이상의 렌더러 프로세스를 사용하는 Electron 앱은 실제로 여러 프로그램을 동시에 실행하는 것이다.
Node.js와 Electron에서는 실행 중인 각 프로세스가 process
객체를 가진다. 이 객체는 전역적으로 사용 가능하며, 현재 프로세스에 대한 정보를 제공하고 제어할 수 있다. 전역 객체이기 때문에 require()
를 사용하지 않고도 언제든지 접근할 수 있다.
렌더러 프로세스는 앱 내의 브라우저 윈도우를 말한다. 메인 프로세스와 달리 여러 개가 존재할 수 있으며, 각각 별도의 프로세스에서 실행된다. 또한 렌더러 프로세스는 숨겨질 수도 있다.
샌드박스
샌드박스는 Chromium에서 상속받은 보안 기능으로, 렌더러 프로세스의 권한을 제한된 범위 내로 제한한다.
자세한 내용은 Process Sandboxing 튜토리얼을 참고한다.
참고: process
Squirrel
Squirrel은 Electron 앱이 새 버전이 출시될 때 자동으로 업데이트할 수 있게 해주는 오픈소스 프레임워크다. Squirrel을 시작하는 방법에 대한 자세한 내용은 autoUpdater API를 참고한다.
이 용어는 유닉스 커뮤니티에서 시작됐다. 당시 "userland" 또는 "userspace"는 운영체제 커널 외부에서 실행되는 프로그램을 의미했다. 최근에는 Node와 npm 커뮤니티에서 널리 쓰이며, "Node 코어"에 포함된 기능과 npm 레지스트리에 게시된 더 큰 "사용자" 커뮤니티의 패키지를 구분하는 용도로 사용된다.
Node와 마찬가지로 Electron은 멀티플랫폼 데스크톱 애플리케이션 개발에 필요한 기본 요소를 제공하는 작은 API 집합에 초점을 맞춘다. 이러한 설계 철학은 Electron이 유연한 도구로 남을 수 있게 한다. 동시에 사용 방법에 대해 지나치게 규정하지 않는다. Userland는 사용자가 "코어"에서 제공하는 기능 위에 추가 기능을 제공하는 도구를 만들고 공유할 수 있게 한다.
유틸리티 프로세스
유틸리티 프로세스는 메인 프로세스의 하위 프로세스로, 메인 프로세스에서 실행할 수 없는 신뢰할 수 없는 서비스를 실행할 수 있게 한다. 크로미움은 이 프로세스를 네트워크 입출력(I/O), 오디오/비디오 처리, 디바이스 입력 등을 수행하는 데 사용한다. Electron에서는 UtilityProcess API를 사용해 이 프로세스를 생성할 수 있다.
참고: process, main process
V8
V8은 구글이 개발한 오픈소스 자바스크립트 엔진이다. C++로 작성되었으며, 구글 크롬에서 사용된다. V8은 독립적으로 실행할 수도 있고, C++ 애플리케이션에 내장할 수도 있다.
Electron은 크로미움의 일부로 V8을 빌드한 다음, Node를 빌드할 때 해당 V8을 가리킨다.
V8의 버전 번호는 항상 구글 크롬의 버전과 일치한다. 예를 들어, 크롬 59에는 V8 5.9가 포함되고, 크롬 58에는 V8 5.8이 포함되는 식이다.
webview
webview
태그는 Electron 앱에 '게스트' 콘텐츠(예: 외부 웹 페이지)를 임베드하는 데 사용된다. iframe
과 유사하지만, 각 webview
가 별도의 프로세스에서 실행된다는 점에서 차이가 있다. 웹 페이지와 동일한 권한을 가지지 않으며, 앱과 임베드된 콘텐츠 간의 모든 상호작용은 비동기적으로 처리된다. 이를 통해 앱이 임베드된 콘텐츠로부터 안전하게 보호된다.