Skip to main content

용어 사전

이 페이지는 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가 별도의 프로세스에서 실행된다는 점에서 차이가 있다. 웹 페이지와 동일한 권한을 가지지 않으며, 앱과 임베드된 콘텐츠 간의 모든 상호작용은 비동기적으로 처리된다. 이를 통해 앱이 임베드된 콘텐츠로부터 안전하게 보호된다.