Skip to main content

Electron 14.0.0

· 12 min read

Electron 14.0.0이 출시되었습니다! 이번 버전은 Chromium 93과 V8 9.3으로 업그레이드되었으며, 여러 API 업데이트, 버그 수정, 그리고 전반적인 개선 사항이 포함되어 있습니다. 더 자세한 내용은 아래에서 확인해 보세요!


Electron 팀은 Electron 14.0.0 출시를 발표하게 되어 기쁩니다! npm install electron@latest 명령어를 통해 npm으로 설치하거나 릴리스 웹사이트에서 직접 다운로드할 수 있습니다. 이번 릴리스에 대한 자세한 내용을 계속 읽어보시고, 여러분의 피드백을 공유해 주세요!

주요 변경 사항

Electron 릴리스 주기 변경

2021년 9월 Electron 15부터, Electron은 8주마다 새로운 주요 안정 버전을 출시한다. 자세한 내용은 여기에서 확인할 수 있다. Electron 15는 2021년 9월 1일에 베타 버전이 출시되며, 안정 버전은 2021년 9월 21일에 공개된다. Electron의 공개 타임라인은 여기에서 확인할 수 있다. 또한, Electron은 2022년 5월까지 지원 버전을 최신 3개 버전에서 최신 4개 버전으로 확대한다. Electron의 버전 관리에 대한 더 자세한 정보는 버전 관리 문서를 참고한다.

스택 변경 사항

주요 기능

  • 기본값 변경: nativeWindowOpen이 이제 기본적으로 true로 설정된다. (문서 참고)
  • 자식 윈도우는 더 이상 부모 윈도우의 BrowserWindow 생성 옵션을 상속하지 않는다. #28550
  • 세션별 데이터를 위한 디스크 경로를 얻을 수 있는 새로운 session.storagePath API가 추가되었다. #28665
  • @electron/remote에서 사용하는 process.contextId가 추가되었다. #28007
  • Electron Fuse 뒤에 실험적인 쿠키 암호화 지원이 추가되었다. #29492

새로운 기능과 변경 사항의 전체 목록은 14.0.0 릴리스 노트를 참고한다.

주요 변경 사항

아래는 Electron 14에서 도입된 주요 변경 사항이다. 이 내용과 향후 변경 사항에 대한 자세한 정보는 Planned Breaking Changes 페이지에서 확인할 수 있다.

app.allowRendererProcessReuse 프로퍼티는 보안, 성능, 유지보수성을 위해 Chromium의 프로세스 모델과 더욱 긴밀하게 연동하기 위한 계획의 일환으로 제거되었다.

자세한 내용은 #18397을 참고한다.

제거됨: 브라우저 윈도우 어피니티

보안, 성능, 유지보수성을 위해 Chromium의 프로세스 모델과 더 밀접하게 통합하기 위한 계획의 일환으로, 새로운 BrowserWindow를 생성할 때 사용하던 affinity 옵션을 제거했다.

더 자세한 정보는 #18397을 참고한다.

API 변경 사항: window.open()

이제 frameName이라는 선택적 인자가 윈도우의 제목을 설정하지 않는다. 이 동작은 windowName 인자에 대한 네이티브 문서에서 설명된 사양을 따르도록 변경되었다.

만약 이 인자를 사용해 윈도우의 제목을 설정하고 있었다면, 대신 win.setTitle(title) 메서드를 사용할 수 있다.

worldSafeExecuteJavaScript가 대체 기능 없이 제거되었다. 이제 여러분의 코드가 이 속성이 활성화된 상태에서도 정상 작동하는지 확인해야 한다. 이 속성은 Electron 12부터 기본적으로 활성화되어 있었다.

이 변경 사항은 webFrame.executeJavaScript 또는 webFrame.executeJavaScriptInIsolatedWorld를 사용하는 경우에 영향을 미친다. 이제 이 메서드들이 반환하는 값이 Context Bridge API에서 지원되는지 확인해야 한다. 해당 메서드들은 동일한 값 전달 방식을 사용하기 때문이다.

변경된 기본값: nativeWindowOpentrue로 기본 설정됨

Electron 14 이전에는 window.open이 기본적으로 BrowserWindowProxy를 사용하도록 구현되어 있었다. 이로 인해 window.open('about:blank')과 같은 코드가 동기적으로 스크립트 가능한 자식 윈도우를 열지 못하는 등 여러 호환성 문제가 발생했다. 이제 nativeWindowOpen은 더 이상 실험적 기능이 아니며, 기본값으로 설정되었다.

자세한 내용은 Electron의 window.open 문서를 참고한다.

Electron 14 이전에는 window.open으로 열린 윈도우가 상위 윈도우의 transparentresizable 같은 BrowserWindow 생성자 옵션을 상속받았다. 하지만 Electron 14부터 이 동작이 제거되었으며, 새로운 윈도우는 더 이상 상위 윈도우의 BrowserWindow 생성자 옵션을 상속받지 않는다.

대신, setWindowOpenHandler를 사용해 새로운 윈도우의 옵션을 명시적으로 설정해야 한다:

webContents.setWindowOpenHandler((details) => {
return {
action: 'allow',
overrideBrowserWindowOptions: {
// ...
},
};
});

삭제: additionalFeatures

WebContentsnew-windowdid-create-window 이벤트에서 더 이상 사용되지 않는 additionalFeatures 속성이 제거되었다. new-window는 위치 기반 인자를 사용하기 때문에 해당 인자는 여전히 존재하지만, 항상 빈 배열 []로 표시된다. (참고: new-window 이벤트 자체는 이미 더 이상 사용되지 않으며 setWindowOpenHandler로 대체되었다.) 윈도우 기능에서 단순 키는 이제 옵션 객체에서 값이 true인 키로 표시된다.

// Electron 14에서 제거됨
// window.open('...', '', 'my-key')에 의해 트리거됨
webContents.on('did-create-window', (window, details) => {
if (details.additionalFeatures.includes('my-key')) {
// ...
}
});

// 대체 방법
webContents.on('did-create-window', (window, details) => {
if (details.options['my-key']) {
// ...
}
});

Electron 12에서 더 이상 사용되지 않던 remote 모듈은 이제 Electron에서 완전히 제거되었으며, 별도의 패키지인 @electron/remote로 분리되었다. @electron/remote 모듈은 메인 프로세스의 자바스크립트 객체를 렌더러 프로세스로 연결한다. 이를 통해 렌더러 프로세스에서도 마치 메인 프로세스 전용 객체에 접근하듯이 사용할 수 있다. 이 모듈은 remote 모듈을 직접 대체한다. 마이그레이션 가이드와 참고 자료는 모듈의 readme에서 확인할 수 있다.

API 변경 사항

  • 윈도우가 포커스 가능한지 확인하는 BrowserWindow.isFocusable() 메서드를 추가했다. #28642
  • WebFrameMain.visibilityState 인스턴스 프로퍼티를 추가했다. #28706
  • setWindowOpenHandler로 등록한 윈도우 열기 핸들러에 전달되는 details 객체에 disposition, referrer, postBody를 추가했다. #28518
  • @electron/remote에서 사용하는 process.contextId를 추가했다. #28007
  • Electron Fuse 뒤에 실험적인 쿠키 암호화 지원을 추가했다. #29492
  • webRequest 리스너 details 객체에서 누락된 resourceType 변환을 추가했다: font, ping, cspReport, media, webSocket. #30050
  • 세션별 데이터를 저장하는 디스크 경로를 가져오는 session.storagePath API를 추가했다. #28665
  • macOS에서 Windows Control Overlay를 지원하도록 추가했다. #29986
  • --log-file=.../path/to/file.log로 Chromium 로깅을 파일에 저장하는 기능을 추가했다. 또한, 첫 번째 JS 틱 동안 커맨드라인 스위치를 추가해 JavaScript에서 로깅을 활성화할 수 있게 되었다. #29963
  • node crypto에서 des-ede3 암호를 지원하도록 추가했다. #27897
  • 컨텍스트 브릿지 객체를 변경할 수 있는 ContextBridgeMutability 기능을 추가했다. #27348

제거/더 이상 사용되지 않는 변경 사항

다음 API는 제거되었거나 더 이상 사용되지 않는다:

  • remote 모듈은 Electron 12에서 더 이상 사용되지 않았으며, 이제 제거되었다. #25734
  • 자식 윈도우는 더 이상 부모 윈도우의 BrowserWindow 생성 옵션을 상속받지 않는다. #28550
  • new-windowdid-create-window WebContents 이벤트에서 더 이상 사용되지 않는 additionalFeatures 속성이 제거되었다. #28548
  • 더 이상 사용되지 않는 app.allowRendererProcessReuse 및 BrowserWindow affinity 옵션이 제거되었다. #26874
  • crashReporter.startsubmitURL 옵션은 uploadToServer가 false일 때 더 이상 필수 인자가 아니다. #28105

11.x.y 버전 지원 종료

Electron 11.x.y는 프로젝트의 지원 정책에 따라 지원이 종료되었다. 개발자와 애플리케이션은 더 새로운 버전의 Electron으로 업그레이드할 것을 권장한다.

다음 단계

앞으로 짧은 기간 동안, 팀은 Chromium, Node, V8과 같은 Electron을 구성하는 주요 컴포넌트의 개발 동향을 지속적으로 따라가며 업데이트하는 데 집중할 것이다. 릴리스 일정에 대한 약속은 조심스럽게 하겠지만, 대략 분기별로 이러한 컴포넌트의 새 버전과 함께 Electron의 주요 버전을 출시할 계획이다.

예정된 Electron 버전에서의 주요 변경 사항에 대한 정보는 Planned Breaking Changes 문서를 참고한다.

WebView2와 Electron

· 11 min read

지난 몇 주 동안, 새로운 WebView2와 Electron 간의 차이점에 대해 여러 질문을 받았다.

두 팀 모두 데스크톱에서 웹 기술을 최상의 상태로 만드는 것을 목표로 하고 있으며, 공통된 포괄적인 비교가 논의 중이다.

Electron과 WebView2는 빠르게 변화하고 지속적으로 발전하는 프로젝트다. 현재까지의 Electron과 WebView2 간의 유사점과 차이점을 간략히 정리해 보았다.

아키텍처 개요

Electron과 WebView2는 모두 웹 콘텐츠를 렌더링하기 위해 Chromium 소스를 기반으로 구축되었다. 엄밀히 말하면 WebView2는 Edge 소스를 기반으로 하지만, Edge는 Chromium 소스의 포크를 사용해 개발되었다. Electron은 Chrome과 어떤 DLL도 공유하지 않는다. WebView2 바이너리는 Edge(Edge 90 기준 Stable 채널)와 하드 링크되어 있어 디스크와 일부 작업 세트를 공유한다. 자세한 내용은 Evergreen 배포 모드를 참고하라.

Electron 앱은 항상 개발 시 사용한 정확한 버전의 Electron을 번들로 포함해 배포한다. WebView2는 배포 방식에 두 가지 옵션이 있다. 애플리케이션 개발에 사용한 정확한 WebView2 라이브러리를 번들로 포함할 수도 있고, 시스템에 이미 존재할 수 있는 공유 런타임 버전을 사용할 수도 있다. WebView2는 각 접근 방식에 대한 도구를 제공하며, 공유 런타임이 없는 경우를 대비해 부트스트랩 설치 프로그램도 포함한다. WebView2는 Windows 11부터 기본 제공된다.

프레임워크를 번들로 포함한 애플리케이션은 해당 프레임워크를 업데이트할 책임이 있으며, 보안 릴리즈도 포함된다. 공유 WebView2 런타임을 사용하는 앱의 경우, WebView2는 Chrome이나 Edge와 유사한 자체 업데이터를 제공하며, 이는 애플리케이션과 독립적으로 실행된다. 애플리케이션 코드나 다른 의존성을 업데이트하는 것은 여전히 개발자의 책임이며, 이는 Electron과 동일하다. Electron과 WebView2 모두 Windows Update에 의해 관리되지 않는다.

Electron과 WebView2는 모두 Chromium의 다중 프로세스 아키텍처를 상속받는다. 즉, 하나의 메인 프로세스가 하나 이상의 렌더러 프로세스와 통신한다. 이 프로세스들은 시스템에서 실행 중인 다른 애플리케이션과 완전히 분리되어 있다. 모든 Electron 애플리케이션은 별도의 프로세스 트리로 구성되며, 루트 브라우저 프로세스, 몇 가지 유틸리티 프로세스, 그리고 0개 이상의 렌더러 프로세스를 포함한다. 동일한 사용자 데이터 폴더를 사용하는 WebView2 앱(예: 앱 스위트)은 렌더러 프로세스가 아닌 프로세스를 공유한다. 다른 데이터 폴더를 사용하는 WebView2 앱은 프로세스를 공유하지 않는다.

  • ElectronJS 프로세스 모델:

    ElectronJS 프로세스 모델 다이어그램

  • WebView2 기반 애플리케이션 프로세스 모델:

    WebView2 프로세스 모델 다이어그램

WebView2의 프로세스 모델Electron의 프로세스 모델에 대해 더 알아보라.

Electron은 메뉴, 파일 시스템 접근, 알림 등 일반적인 데스크톱 애플리케이션 요구 사항을 위한 API를 제공한다. WebView2는 WinForms, WPF, WinUI, Win32와 같은 애플리케이션 프레임워크에 통합되도록 설계된 컴포넌트이다. WebView2는 JavaScript를 통해 웹 표준 외의 운영체제 API를 제공하지 않는다.

Electron은 Node.js와 통합되어 있다. Electron 애플리케이션은 렌더러 프로세스와 메인 프로세스에서 모든 Node.js API, 모듈, 또는 node-native-addon을 사용할 수 있다. WebView2 애플리케이션은 애플리케이션의 나머지 부분이 어떤 언어나 프레임워크로 작성되었는지 가정하지 않는다. JavaScript 코드는 운영체제 접근을 애플리케이션 호스트 프로세스를 통해 프록시해야 한다.

Electron은 Fugu 프로젝트에서 개발된 API를 포함해 웹 API와의 호환성을 유지하려고 노력한다. Electron의 Fugu API 호환성 스냅샷을 참고하라. WebView2는 Edge와의 API 차이점에 대한 유사한 목록을 유지한다.

Electron은 웹 콘텐츠에 대해 전체 접근부터 전체 샌드박스까지 구성 가능한 보안 모델을 제공한다. WebView2 콘텐츠는 항상 샌드박스로 처리된다. Electron은 보안 모델 선택에 대한 포괄적인 문서를 제공한다. WebView2도 보안 모범 사례를 제공한다.

Electron 소스는 GitHub에서 유지 관리되며 공개되어 있다. 애플리케이션은 Electron을 수정해 자신만의 _브랜드_를 구축할 수 있다. WebView2 소스는 GitHub에서 공개되지 않는다.

간단한 요약:

ElectronWebView2
빌드 의존성ChromiumEdge
GitHub에서 소스 공개YesNo
Edge/Chrome DLL 공유NoYes (as of Edge 90)
애플리케이션 간 공유 런타임NoOptional
애플리케이션 APIYesNo
Node.jsYesNo
샌드박스OptionalAlways
애플리케이션 프레임워크 필요NoYes
지원 플랫폼Mac, Win, LinuxWin (Mac/Linux planned)
앱 간 프로세스 공유NeverOptional
프레임워크 업데이트 관리 주체ApplicationWebView2

성능 논의

웹 콘텐츠를 렌더링할 때, Electron, WebView2, 그리고 다른 크로미움 기반 렌더러 간의 성능 차이는 크지 않을 것으로 예상한다. 성능 차이를 조사하고자 하는 사람들을 위해 Electron, C++ + WebView2, 그리고 C# + WebView2를 사용해 앱을 구축하는 스캐폴딩을 만들었다.

웹 콘텐츠 렌더링과는 별개로 몇 가지 차이점이 존재한다. Electron, WebView2, Edge 팀 등 다양한 관계자들이 PWA를 포함한 상세한 비교 작업에 관심을 표명했다.

프로세스 간 통신(IPC)

우리는 이 차이점을 즉시 강조하고 싶다. 이는 Electron 앱에서 종종 성능 고려 사항이 되기 때문이다.

Chromium에서 브라우저 프로세스는 샌드박스된 렌더러와 시스템의 나머지 부분 사이에서 IPC 브로커 역할을 한다. Electron은 샌드박스되지 않은 렌더 프로세스를 허용하지만, 많은 앱이 추가 보안을 위해 샌드박스를 활성화한다. WebView2는 항상 샌드박스가 활성화되어 있으므로, 대부분의 Electron과 WebView2 앱에서 IPC는 전체 성능에 영향을 미칠 수 있다.

Electron과 WebView2는 유사한 프로세스 모델을 가지고 있지만, 기본 IPC는 다르다. JavaScript와 C++ 또는 C# 간의 통신에는 마샬링이 필요하며, 이는 주로 JSON 문자열로 이루어진다. JSON 직렬화/역직렬화는 비용이 많이 드는 작업이며, IPC 병목 현상이 성능에 부정적인 영향을 미칠 수 있다. Edge 93부터 WV2는 네트워크 이벤트에 CBOR을 사용한다.

Electron은 MessagePorts API를 통해 두 프로세스 간 직접 IPC를 지원하며, 이는 구조화된 복제 알고리즘을 활용한다. 이를 활용하는 애플리케이션은 프로세스 간 객체를 전송할 때 JSON 직렬화 비용을 피할 수 있다.

요약

Electron과 WebView2는 여러 차이점이 있지만, 웹 콘텐츠를 렌더링하는 방식에서는 큰 차이를 기대하기 어렵다.
결국 앱의 아키텍처와 사용하는 JavaScript 라이브러리/프레임워크가 메모리와 성능에 더 큰 영향을 미친다. 왜냐하면 Chromium은 어디에서 실행되든 Chromium이기 때문이다.

이 글을 검토하고 WebView2 아키텍처에 대한 최신 정보를 제공해 준 WebView2 팀에게 특별히 감사드린다.
그들은 프로젝트에 대한 피드백을 언제든 환영한다.

New Electron Release Cadence

· 10 min read

2021년 9월부터 Electron은 8주마다 새로운 주요 안정 버전을 출시할 예정이다.


2019년에 Electron은 Chromium의 6주 릴리스 주기에 맞추기 위해 12주 릴리스 주기로 전환했다. 최근 Chrome과 Microsoft가 발표한 변경 사항으로 인해 Electron의 현재 릴리스 주기를 재고하게 되었다:

  1. Chromium은 2021년 9월 21일 Chrome 94부터 4주마다 새로운 마일스톤을 출시할 계획이다. 이 릴리스 주기는 8주마다 모든 보안 업데이트를 포함한 Extended Stable 옵션도 추가한다.

  2. Microsoft 스토어는 Chromium 기반 앱이 최대 2개 주요 버전 이내여야 한다는 규정을 시행한다. 예를 들어, Chromium의 최신 주요 버전이 85라면, Chromium 기반 브라우저는 최소 Chromium 버전 83 이상이어야 한다. 이 규칙은 Electron 앱에도 적용된다.

2021년 9월부터 Electron은 Chromium의 8주 Extended Stable 릴리스에 맞춰 8주마다 새로운 주요 안정 버전을 출시할 예정이다.

Chromium Extended Stable과 함께 출시될 첫 번째 버전은 2021년 9월 21일Electron 15이다.

릴리스 주기 변경이 다른 하위 애플리케이션에 영향을 미칠 수 있음을 알고, 개발자 커뮤니티에 가능한 한 빨리 알리고자 한다. 2021년 릴리스 일정에 대한 자세한 내용은 계속 읽어보자.

Electron 15: 임시 알파 버전

원래 Electron 15 릴리스는 Chromium의 Extended Stable 버전이 아닌 버전을 타겟으로 했다. Chromium의 Extended Stable 버전은 짝수 번호 버전을 기반으로 하기 때문이다. 이를 위해 원래 목표 릴리스 날짜를 변경해야 했다. 하지만 Electron 앱이 Microsoft Store에 등록되려면 최신 2개의 Chromium 메이저 버전을 사용해야 한다는 조건이 있어, 두 버전을 기다리는 것은 현실적으로 불가능했다.

이 두 가지 요구사항으로 인해 우리 팀은 타이밍 문제에 직면했다. Electron 15에 Chromium M94를 포함시키면 앱 개발자들이 Chromium의 첫 번째 Extended Stable 버전을 사용할 수 있다는 장점이 있다. 하지만 이 경우 베타에서 안정화까지의 주기가 단 3주로 줄어든다는 단점이 있었다.

이러한 전환을 돕기 위해 Electron 팀은 Electron 15 릴리스에 한해 임시 알파 빌드를 제공하기로 결정했다. 이 알파 빌드는 개발자들이 Electron 15 릴리스를 테스트하고 준비할 수 있는 더 많은 시간을 제공하며, 현재의 나이틀리 빌드보다 더 안정적인 버전이다.

알파 채널 빌드는 2021년 7월 20일Electron 15로 출시될 예정이다. 이후 2021년 9월 1일에 베타 릴리스로 전환되며, 안정화 릴리스는 2021년 9월 21일을 목표로 한다. 이후 Electron 릴리스에는 알파 버전이 제공되지 않을 예정이다.

2021년 출시 계획

2021년 출시 일정은 다음과 같다:

ElectronChromeAlpha 출시Beta 출시Stable 출시Stable 주기 (주)
E13M91-2021-03-052021-05-2512
E14M93-2021-05-262021-08-3114
E15M942021-07-202021-09-012021-09-219 (알파 포함)
E16M96-2021-09-222021-11-168
E17M98-2021-11-172022-02-0111

알파 채널을 추가함으로써 Electron 15 출시 전 개발 기간이 3주에서 9주로 확장된다. 이는 Windows 스토어 제출 요건을 충족하면서도 새로운 8주 주기에 더 가깝게 맞춘 것이다.

앱 개발자를 더 지원하기 위해, 2021년 말부터 2022년 5월까지 지원 버전 정책을 최신 3개 버전에서 최신 4개 버전으로 확장한다. 즉, 업그레이드 일정을 즉시 조정할 수 없더라도 이전 버전의 Electron이 여전히 보안 업데이트와 수정을 받을 수 있다.

주요 고려 사항

이번 릴리스 주기 변경을 예정일보다 훨씬 앞서 이 글을 공개하는 데는 이유가 있다. 더 빠른 릴리스 주기가 Electron 앱에 미칠 실제 영향을 잘 알고 있으며, 이미 주요 릴리스 주기가 빠르다고 느끼는 앱도 있을 수 있다.

아래에서 주요 우려 사항을 해결하려고 노력했다:

❓ 왜 이런 변경을 했을까요? 12주 릴리스 주기를 유지하지 않은 이유는 무엇인가요?

Electron에서 최신 버전의 Chromium을 제공하려면 Chromium의 일정을 따라야 한다. Chromium의 릴리스 주기에 대한 자세한 정보는 여기에서 확인할 수 있다.

또한, 현재의 12주 릴리스 주기는 Microsoft Store의 새로운 제출 요구사항과 맞지 않는다. 최신 안정 버전의 Electron을 사용하는 앱도 새로운 보안 요구사항에 따라 약 2주 동안 앱이 거부될 가능성이 있다.

각각의 새로운 Chromium 릴리스에는 새로운 기능, 버그 수정/보안 패치, 그리고 V8 개선 사항이 포함된다. 앱 개발자로서 이러한 변경 사항을 빠르게 접할 수 있도록, 우리는 안정 버전 릴리스 날짜를 Chromium 안정 버전 릴리스와 일치시키기로 했다. 이제 앱 개발자는 이전보다 더 빠르게 새로운 Chromium과 V8의 기능 및 수정 사항을 사용할 수 있다.

기존 12주 릴리스 주기는 이미 빠른 속도로 진행되고 있다. 팀은 업그레이드를 더 쉽게 만들기 위해 어떤 조치를 취하고 있는가?

더 잦은 릴리스의 장점 중 하나는 더 작은 규모의 릴리스가 가능하다는 점이다. Electron의 주요 버전 업그레이드가 어려울 수 있다는 점을 잘 알고 있다. 더 작은 규모의 릴리스는 주요 Chromium과 Node 변경 사항을 줄이고, 릴리스당 발생하는 호환성 문제도 줄이길 기대한다.

현재로서는 지속적인 알파 릴리스를 지원할 계획이 없다. 이번 알파 버전은 Electron 15에 한정된 것으로, 개발자들이 단축된 릴리스 기간 동안 더 쉽게 업그레이드할 수 있도록 돕기 위한 목적으로 제공된다.

❓ Electron이 지원 버전 수를 확장할까?

Electron 19가 출시되는 2022년 5월까지 지원 버전 정책을 최신 3개 버전에서 최신 4개 버전으로 확장할 예정이다. Electron 19 출시 이후에는 다시 최신 3개 주요 버전과 베타, 나이틀리 릴리스를 지원할 계획이다.

E13 (2021년 5월)E14 (2021년 8월)E15 (2021년 9월)E16 (2021년 11월)E17 (2022년 2월)E18 (2022년 3월)E19 (2022년 5월)
13.x.y14.x.y15.x.y16.x.y17.x.y18.x.y19.x.y
12.x.y13.x.y14.x.y15.x.y16.x.y17.x.y18.x.y
11.x.y12.x.y13.x.y14.x.y15.x.y16.x.y17.x.y
----12.x.y13.x.y14.x.y15.x.y--

궁금한 점이 있나요?

📨 질문이나 의견이 있다면 info@electronjs.org로 메일을 보내거나 Discord에 참여해 주세요. 이번 변경이 많은 앱과 개발자에게 영향을 미칠 것임을 잘 알고 있습니다. 여러분의 의견은 매우 중요합니다. 여러분의 소리를 듣고 싶습니다!

Electron 13.0.0

· 6 min read

Electron 13.0.0이 출시되었습니다! 이번 버전은 Chromium 91과 V8 9.1로 업그레이드되었으며, 여러 API 업데이트, 버그 수정, 그리고 전반적인 개선 사항이 포함되어 있습니다. 자세한 내용은 아래를 참고하세요!


Electron 팀은 Electron 13.0.0의 출시를 기쁘게 발표합니다. npm install electron@latest 명령어를 통해 npm으로 설치하거나 릴리스 웹사이트에서 다운로드할 수 있습니다. 이번 릴리스에 대한 자세한 내용을 계속 읽어보시고, 여러분의 피드백을 공유해 주세요!

주요 변경 사항

스택 변경 사항

주요 기능

  • 현재 렌더러 컨텍스트에서 contextIsolation이 활성화되었는지 여부를 나타내는 process.contextIsolated 속성을 추가했다. #28252
  • 세션별 데이터를 위한 디스크 경로를 가져오는 새로운 session.storagePath API를 추가했다. #28866
  • WebContentsnew-window 이벤트를 더 이상 사용하지 않는다. 이는 webContents.setWindowOpenHandler()로 대체되었다.
  • @electron/remote에서 사용하는 process.contextId를 추가했다. #28251

새로운 기능과 변경 사항의 전체 목록은 13.0.0 릴리스 노트를 참고한다.

주요 변경 사항

  • window.open()frameName 매개변수가 윈도우 제목으로 설정되지 않도록 변경됨. #27481
  • session.setPermissionCheckHandler(handler)의 첫 번째 매개변수인 webContentsnull을 허용하도록 변경됨. #19903

이러한 변경 사항과 향후 예정된 변경에 대한 자세한 내용은 Planned Breaking Changes 페이지에서 확인할 수 있다.

API 변경 사항

  • BrowserWindowroundedCorners 옵션 추가. #27572
  • 세션별 데이터를 저장하는 디스크 경로를 얻기 위한 새로운 session.storagePath API 추가. #28866
  • 컨텍스트 브리지를 통해 DOM 엘리먼트를 전달하는 기능 추가. #26776
  • 샌드박스된 렌더러에서 process.uptime() 지원 추가. #26684
  • context-menu 이벤트의 일부로 전달되는 파라미터에 누락된 필드 추가. #26788
  • Manifest V3 확장 서비스 워커 등록 지원 추가.
  • ServiceWorkers에 'registration-completed' 이벤트 추가. #27562

제거/사용 중단된 변경 사항

다음 API는 제거되었거나 이제 사용 중단되었다:

  • WebContentsnew-window 이벤트를 사용 중단했다. 이제 webContents.setWindowOpenHandler()로 대체한다.

  • 더 이상 사용되지 않는 shell.moveItemToTrash()를 제거했다. #26723

  • 다음은 더 이상 사용되지 않는 BrowserWindow 확장 API를 제거했다:

    • BrowserWindow.addExtension(path)
    • BrowserWindow.addDevToolsExtension(path)
    • BrowserWindow.removeExtension(name)
    • BrowserWindow.removeDevToolsExtension(name)
    • BrowserWindow.getExtensions()
    • BrowserWindow.getDevToolsExtensions()

    대신 session API를 사용한다:

    • ses.loadExtension(path)
    • ses.removeExtension(extension_id)
    • ses.getAllExtensions()
  • 다음 systemPreferences 메서드를 사용 중단했다:

    • systemPreferences.isDarkMode()
    • systemPreferences.isInvertedColorScheme()
    • systemPreferences.isHighContrastColorScheme()

    대신 다음 nativeTheme 속성을 사용한다:

    • nativeTheme.shouldUseDarkColors
    • nativeTheme.shouldUseInvertedColorScheme
    • nativeTheme.shouldUseHighContrastColors

Electron 10.x.y 지원 종료 안내

Electron 프로젝트의 지원 정책에 따라 Electron 10.x.y 버전의 지원이 종료되었다. 개발자와 애플리케이션은 더 새로운 버전의 Electron으로 업그레이드할 것을 권장한다.

다음 단계

단기적으로, 팀은 Chromium, Node, V8 등 Electron을 구성하는 주요 컴포넌트의 개발 속도를 따라잡는 데 계속 집중할 예정이다. 출시 일정에 대한 약속은 신중히 하겠지만, 대략 분기별로 이러한 컴포넌트의 새 버전과 함께 Electron의 주요 버전을 출시할 계획이다. Electron 14.0.0의 예정된 일정은 Electron 14.0 개발 주기의 주요 날짜를 보여준다. 또한, 버전 관리 문서에서 Electron의 버전 관리에 대한 더 자세한 정보를 확인할 수 있다.

예정된 Electron 버전에서의 주요 변경 사항에 대한 정보는 예정된 주요 변경 사항 문서를 참고하면 된다.

Electron 12.0.0

· 9 min read

Electron 12.0.0이 출시되었다! 이번 버전에서는 Chromium 89, V8 8.9, Node.js 14.16로 업그레이드되었다. 또한 remote 모듈에 변경 사항이 추가되었고, contextIsolation의 기본값이 새롭게 설정되었으며, 새로운 webFrameMain API가 도입되었다. 그리고 전반적인 개선이 이루어졌다. 자세한 내용은 아래를 참고하라!


Electron 팀은 Electron 12.0.0 출시를 기쁘게 알린다. npm install electron@latest 명령어를 통해 npm으로 설치하거나 릴리스 웹사이트에서 다운로드할 수 있다. 이번 릴리스에 대한 자세한 내용을 계속 읽어보고, 여러분의 피드백을 공유해 주기 바란다!

주요 변경 사항

스택 변경 사항

주요 기능

  • ContextBridge의 exposeInMainWorld 메서드가 이제 객체가 아닌 API도 노출할 수 있다. #26834
  • Node 12에서 Node 14로 업그레이드했다. #23249
  • 메인 프로세스에서 WebContents 인스턴스의 하위 프레임에 접근할 수 있는 새로운 webFrameMain API를 추가했다. #25464
  • contextIsolationworldSafeExecuteJavaScript의 기본값이 이제 true로 설정되었다. #27949 #27502

새로운 기능과 변경 사항의 전체 목록은 12.0.0 릴리스 노트를 참고한다.

주요 변경 사항

이러한 변경 사항과 향후 예정된 변경 사항에 대한 자세한 내용은 예정된 주요 변경 사항 페이지에서 확인할 수 있다.

API 변경 사항

  • webFrameMain API 추가: webFrameMain 모듈은 기존 WebContents 인스턴스에서 프레임을 조회하는 데 사용할 수 있다. 이는 기존 webFrame API의 메인 프로세스 버전에 해당한다. 이 새로운 API에 대한 자세한 정보는 여기문서에서 확인할 수 있다.
  • app API 변경 사항:
    • 'child-process-gone'app.getAppMetrics()에 지역화되지 않은 serviceName 추가. #25975
    • Apple Silicon에서 Rosetta로 실행 중인지 감지할 수 있는 app.runningUnderRosettaTranslation 속성 추가. #26444
    • render-process-gone 세부 정보에 exitCode 추가 (app & webContents). #27677
  • BrowserWindow API 변경 사항:
    • BrowserWindow.isTabletMode() API 추가. #25209
    • BrowserWindowresized (Windows/macOS) 및 moved (Windows) 이벤트 추가. #26216
    • 시스템 컨텍스트 메뉴를 방지하고 재정의할 수 있는 새로운 system-context-menu 이벤트 추가. #25795
    • BrowserView를 상위로 올릴 수 있는 win.setTopBrowserView() 추가. #27713
    • 문서의 최소 크기에 따라 뷰를 조정할 수 있는 webPreferences.preferredSizeMode 추가. #25874
  • contextBridge API 변경 사항:
    • ContextBridge의 exposeInMainWorld 메서드가 비객체 API도 노출할 수 있도록 허용. #26834
  • display API 변경 사항:
    • Display 객체에 displayFrequency 속성 추가하여 Windows에서 재생 빈도 정보를 가져올 수 있도록 함. #26472
  • extensions API 변경 사항:
    • 일부 chrome.management API 지원 추가. #25098
  • MenuItem API 변경 사항:
    • macOS 공유 메뉴 표시 지원 추가. #25629
  • net API 변경 사항:
    • net.request()에 새로운 credentials 옵션 추가. #25284
    • 인터넷 연결 여부를 감지하는 net.online 추가. #21004
  • powerMonitor API 변경 사항:
    • powerMonitor.onBatteryPower 추가. #26494
    • macOS에서 빠른 사용자 전환 이벤트를 powerMonitor에 추가. #25321
  • session API 변경 사항:
    • ses.loadExtension() API에 allowFileAccess 옵션 추가. #27702
    • session.setPermissionRequestHandlerdisplay-capture API 추가. #27696
    • session.setSSLConfigdisabledCipherSuites 옵션 추가. #25818
    • sessionextension-loaded, extension-unloaded, extension-ready 이벤트 추가. #25385
    • SSL을 구성할 수 있는 session.setSSLConfig() 추가. #25461
    • session.setProxy()에서 direct, auto_detect, system 모드를 명시적으로 지정할 수 있도록 지원 추가. #24937
    • Serial API 지원 추가. #25237
    • 맞춤법 검사기를 활성화/비활성화할 수 있는 API 추가. #26276
  • shell API 변경 사항:
    • 동기식 shell.moveItemToTrash()를 대체하는 비동기식 shell.trashItem() API 추가. #25114
  • webContents API 변경 사항:
    • 렌더러 크래시 디버깅을 돕기 위한 작은 콘솔 힌트 추가. #25317
    • webRequest 핸들러의 세부 정보 객체에 framewebContents 속성 추가. #27334
    • 렌더러 프로세스를 강제로 종료하여 멈춘 렌더러를 복구할 수 있는 webContents.forcefullyCrashRenderer() 추가. #25580
    • 렌더러에서 생성된 자식 윈도우를 위한 setWindowOpenHandler API 추가 및 new-window 이벤트 사용 중단. #24517
  • webFrame API 변경 사항:
    • 렌더러에 맞춤법 검사 API 추가. #25060

제거되거나 더 이상 사용되지 않는 변경 사항

다음 API는 제거되었거나 더 이상 사용되지 않는다:

  • remote 모듈을 더 이상 사용하지 않는다. 이 모듈은 @electron/remote로 대체되었다. #25293
  • 더 이상 사용되지 않는 crashReporter API를 제거했다. #26709
  • 패키징된 앱의 기본 '도움말' 메뉴에서 Electron 웹사이트로의 링크를 제거했다. #25831

9.x.y 버전 지원 종료

Electron 9.x.y는 프로젝트의 지원 정책에 따라 지원이 종료되었다. 개발자와 애플리케이션은 더 새로운 버전의 Electron으로 업그레이드할 것을 권장한다.

다음 단계

단기적으로, Electron 팀은 Chromium, Node, V8과 같은 주요 컴포넌트의 개발을 따라가기 위해 계속 노력할 것이다. 출시 일정에 대해 약속하지는 않지만, 대략 분기별로 이러한 컴포넌트의 새 버전과 함께 Electron의 주요 버전을 출시할 계획이다. Electron 13.0.0의 예정된 일정은 Electron 13.0 개발 주기의 주요 날짜를 보여준다. 또한, Electron의 버전 관리에 대한 더 자세한 정보는 버전 관리 문서를 참고하면 된다.

다가오는 Electron 버전에서 예정된 주요 변경 사항에 대한 정보는 예정된 주요 변경 사항 문서를 확인하면 된다.

Electron 11.0.0

· 6 min read

Electron 11.0.0이 출시되었습니다! 이번 버전은 Chromium 87, V8 8.7, 그리고 Node.js 12.18.3로 업그레이드되었으며, Apple 실리콘 지원과 다양한 개선 사항이 포함되었습니다. 자세한 내용은 아래를 참고하세요!


Electron 팀은 Electron 11.0.0 출시를 발표하게 되어 기쁩니다! npm install electron@latest 명령어를 통해 npm으로 설치하거나 릴리스 웹사이트에서 다운로드할 수 있습니다. 이번 릴리스에는 업그레이드, 버그 수정, 그리고 Apple M1 하드웨어에 대한 새로운 지원이 포함되어 있습니다.

이번 버전으로 무엇을 만들지 기대가 큽니다! 이번 릴리스에 대한 자세한 내용을 계속 읽어보시고, 여러분의 피드백을 공유해 주세요!

주요 변경 사항

스택 변경 사항

주요 기능

  • Apple M1 지원: 11월 10일, Apple은 새로운 M1 칩을 발표했으며, 이 칩은 곧 출시될 하드웨어에 탑재될 예정이다. Electron 11부터는 Intel Mac(x64)과 Apple의 M1 하드웨어(arm64)를 위한 별도의 Electron 버전을 제공한다. Electron 앱을 Apple M1 하드웨어에서 실행하는 방법에 대해 더 알아볼 수 있다. #24545
  • crashReport 파라미터에 V8 크래시 메시지와 위치 정보를 추가했다. #24771
  • context bridge를 통해 넓은 객체를 전송하는 성능을 개선했다. #24671

새로운 기능과 변경 사항의 전체 목록은 11.0.0 릴리스 노트에서 확인할 수 있다.

주요 변경 사항

  • 실험적 API 제거: BrowserView.{fromId, fromWebContents, getAllViews}BrowserViewid 프로퍼티가 삭제됨. #23578

이러한 변경 사항과 향후 예정된 변경에 대한 자세한 내용은 Planned Breaking Changes 페이지에서 확인할 수 있다.

API 변경 사항

  • 특정 프로토콜을 처리하는 앱에 대한 상세 정보를 반환하는 app.getApplicationInfoForProtocol() API를 추가했다. #24112
  • 파일 경로와 최대 썸네일 크기를 입력받아 파일의 미리보기 이미지를 반환하는 app.createThumbnailFromPath() API를 추가했다. #24802
  • 렌더러 프로세스를 강제로 종료하여 멈춘 렌더러를 복구하는 데 도움을 주는 webContents.forcefullyCrashRenderer()를 추가했다. #25756

8.x.y 버전 지원 종료

Electron 8.x.y 버전은 프로젝트의 지원 정책에 따라 지원이 종료되었다. 개발자와 애플리케이션은 더 새로운 버전의 Electron으로 업그레이드할 것을 권장한다.

앞으로의 계획

가까운 미래에 Electron 팀은 Chromium, Node, V8 등 주요 컴포넌트의 개발 동향을 꾸준히 따라가며 업데이트에 집중할 예정이다. 정확한 출시 일정을 약속하진 않지만, 대략 분기별로 새로운 버전의 컴포넌트와 함께 Electron의 주요 버전을 출시할 계획이다. Electron 12.0.0 개발 일정에서는 Electron 12.0 개발 주기의 주요 날짜를 확인할 수 있다. 또한, Electron의 버전 관리에 대한 더 자세한 정보는 버전 관리 문서를 참고한다.

다가오는 Electron 버전에서 예정된 주요 변경 사항에 대한 정보는 예정된 주요 변경 사항 문서에서 확인할 수 있다.

remote 모듈을 제거하기 위한 작업을 Electron 9에서 시작했다. 우리는 Electron 14에서 remote 모듈 자체를 제거할 계획이다.

이 제거 작업에 대한 전체 계획과 세부 사항은 이 이슈를 참고하고 따르길 바란다.

네이티브 Node 모듈을 Context Aware 또는 N-API로 요구하기 위한 마지막 단계 (Electron 12)

Electron 6부터 렌더러 프로세스에서 로드되는 네이티브 Node 모듈N-API 또는 Context Aware여야 한다는 요구사항을 준비해 왔다. 이 변경사항을 강제함으로써 보안이 강화되고, 성능이 향상되며, 유지보수 작업이 줄어든다. 이 계획의 마지막 단계는 Electron 12에서 렌더러 프로세스 재사용을 비활성화하는 기능을 제거하는 것이다.

자세한 내용과 제안된 일정을 확인하려면 이 이슈를 읽고 따라가면 된다.

Apple Silicon Support

· 6 min read

Apple Silicon 하드웨어가 올해 말 출시됨에 따라, 여러분의 Electron 앱을 새로운 하드웨어에서 실행하기 위한 방법은 어떻게 될까?


Electron 11.0.0-beta.1 릴리스와 함께, Electron 팀은 Apple이 올해 말 출시할 예정인 새로운 Apple Silicon 하드웨어에서 실행되는 Electron 빌드를 제공하기 시작했다. 최신 베타 버전은 npm install electron@beta 명령어로 설치하거나 릴리스 웹사이트에서 직접 다운로드할 수 있다.

어떻게 동작하나?

Electron 11부터는 인텔 맥과 애플 실리콘 맥을 위한 별도의 Electron 버전을 제공한다. 이 변경 전에는 이미 darwin-x64mas-x64 두 가지 아티팩트를 제공하고 있었는데, 후자는 Mac App Store 호환성을 위한 것이다. 이제 darwin-arm64mas-arm64라는 두 가지 새로운 아티팩트를 추가로 제공하며, 이는 앞서 언급한 아티팩트의 애플 실리콘 버전에 해당한다.

무엇을 해야 하나?

여러분은 앱을 두 가지 버전으로 배포해야 한다. 하나는 x64(Intel Mac)용이고, 다른 하나는 arm64(Apple Silicon)용이다. 다행히도 electron-packager, electron-rebuild, 그리고 electron-forge는 이미 arm64 아키텍처를 지원한다. 이 패키지들의 최신 버전을 사용한다면, 타겟 아키텍처를 arm64로 업데이트한 후 앱이 원활하게 동작할 것이다.

앞으로 arm64x64 앱을 하나의 유니버설 바이너리로 통합할 수 있는 패키지를 출시할 예정이지만, 이 바이너리는 매우 크기 때문에 사용자에게 배포하기에는 적합하지 않을 것이다.

업데이트: 이 패키지는 이제 @electron/universal에서 사용할 수 있다. 이를 통해 패키징된 x64와 arm64 앱을 하나의 바이너리로 통합할 수 있다.

잠재적인 문제점

네이티브 모듈

새로운 아키텍처를 타겟팅하면서 여러 종속성을 업데이트해야 할 수 있으며, 이로 인해 빌드 문제가 발생할 수 있다. 아래는 참고를 위해 필요한 최소 버전의 종속성 목록이다.

종속성버전 요구사항
Xcode>=12.2.0
node-gyp>=7.1.0
electron-rebuild>=1.12.0
electron-packager>=15.1.0

이러한 종속성 버전 요구사항으로 인해 특정 네이티브 모듈을 수정하거나 업데이트해야 할 수 있다. 특히 Xcode 업그레이드는 새로운 버전의 macOS SDK를 도입할 수 있으며, 이는 네이티브 모듈의 빌드 실패를 유발할 수 있다는 점에 주의해야 한다.

어떻게 테스트할 수 있나요?

현재 Apple Silicon 애플리케이션은 Apple Silicon 하드웨어에서만 실행된다. 이 글을 작성하는 시점에서는 상용 Apple Silicon 하드웨어가 출시되지 않았다. Developer Transition Kit이 있다면, 이를 통해 애플리케이션을 테스트할 수 있다. 그렇지 않다면, 상용 Apple Silicon 하드웨어가 출시될 때까지 기다려야 한다. 출시 후에야 애플리케이션이 정상적으로 작동하는지 확인할 수 있다.

Rosetta 2에 대해 알아보자

Rosetta 2는 Apple의 최신 기술로, 새로운 arm64 Apple Silicon 하드웨어에서 x64 Intel 애플리케이션을 실행할 수 있게 해준다. x64 Electron 앱이 Rosetta 2에서 실행될 수는 있지만, 몇 가지 중요한 사항을 주의해야 한다(그리고 왜 네이티브 arm64 바이너리를 제공해야 하는지에 대한 이유도 있다).

  • 앱의 성능이 크게 저하된다. Electron/V8은 JavaScript를 위해 JIT 컴파일을 사용하는데, Rosetta의 작동 방식 때문에 JIT가 두 번 실행된다(V8에서 한 번, Rosetta에서 한 번).
  • Apple Silicon의 새로운 기술 이점을 잃게 된다. 예를 들어, 증가된 메모리 페이지 크기를 활용할 수 없다.
  • 성능이 크게 저하된다는 점을 다시 한 번 강조한다.

커뮤니티 Discord 서버와 Hacktoberfest

· 5 min read

오픈소스의 달을 기념하며 커뮤니티와 함께하는 시간에 참여하세요.


Hacktoberfest와 Discord 배너

Electron 커뮤니티 Discord 출시

Electron의 Outreach Working Group이 공식 커뮤니티 Discord 서버 출시를 발표하게 되어 기쁘게 생각합니다!

새로운 Discord 서버를 만든 이유

초기에는 Atom 텍스트 에디터의 핵심 기술로 사용되던 Electron 프레임워크에 대한 커뮤니티 토론은 Atom의 Slack 워크스페이스 내 단일 채널에서 이루어졌다. 시간이 지나면서 두 프로젝트가 점차 분리되면서, Electron 프로젝트와 Atom 워크스페이스의 관련성은 줄어들었고, Slack 채널에서의 메인테이너 참여도 같은 방식으로 감소했다.

지금까지는 더 넓은 커뮤니티를 Atom Slack 워크스페이스로 리다이렉트하고 있었지만, 초대장을 받는 데 어려움을 겪었다는 많은 보고가 있었고, 핵심 메인테이너들 중 채널을 자주 방문하는 사람은 거의 없었다.

이제는 커뮤니티가 Electron에 관한 최신 소식을 얻을 수 있는 중앙 토론 허브 역할을 할 새로운 Discord 서버를 구축했다. 이 서버는 Electron과 관련된 모든 주제를 다루는 주요 커뮤니케이션 채널이 될 것이다.

함께 참여하세요!

지금까지 서버는 몇 명의 관리자들이 함께 설정하며 운영해 왔지만, 여러분과 소통할 수 있게 되어 정말 기쁩니다! 도움을 요청하거나, Electron의 최신 릴리즈 소식을 확인하거나, 다른 개발자들과 교류하는 등 다양한 목적으로 참여해 보세요. 서버에 접속할 수 있는 초대 링크를 준비했으니, 편하게 이용해 보세요!

Hacktoberfest 2020 참여

Electron은 대규모 오픈소스 프로젝트로, 오랜 기간 동안 지속해 온 프로젝트다. 코드 제출부터 버그 리포트, 문서 수정 등 다양한 형태의 커뮤니티 기여 없이는 이만큼 성공할 수 없었다. 그래서 우리는 Hacktoberfest에 참여하는 것이 중요하다고 믿는다. 이 행사를 통해 다양한 기술 수준의 개발자들이 더 넓은 커뮤니티로 프로젝트에 합류할 수 있기 때문이다.

기타 사항

올해는 여러분이 함께 작업할 대규모 프로젝트는 없지만, Electron 자바스크립트 생태계 전반에 걸쳐 기여할 수 있는 기회에 집중하고자 한다.

다양한 저장소에서 hacktoberfest 태그가 붙은 이슈를 찾아보길 바란다. 주요 저장소인 electron/electron, electron/electronjs.org 웹사이트, electron/fiddle, 그리고 electron-userland/electron-forge를 포함한다.

추가로, 좀 더 도전적인 과제를 원한다면 help wanted 태그가 붙은 이슈도 확인해보길 바란다.

막히셨나요? 우리와 함께 이야기해 보세요!

또한, 우리 디스코드 서버의 오픈이 올해 가장 큰 오픈소스 소프트웨어 축제와 맞춰진 것은 결코 우연이 아닙니다. Hacktoberfest PR에 대한 도움을 받고 싶다면 #hacktoberfest 채널을 확인해 보세요. 혹시 놓치셨다면, 다시 한번 초대 링크를 공유합니다!

Electron 10.0.0

· 9 min read

Electron 10.0.0이 출시되었다! 이번 버전은 Chromium 85, V8 8.5, Node.js 12.16으로 업그레이드되었으며, 여러 새로운 API 통합과 개선 사항이 추가되었다. 자세한 내용은 아래를 참고하자!


Electron 팀은 Electron 10.0.0 출시를 발표하게 되어 기쁘게 생각한다. npm install electron@latest 명령어를 통해 설치하거나 릴리스 웹사이트에서 다운로드할 수 있다. 이번 릴리스는 업그레이드, 수정 사항, 그리고 새로운 기능으로 가득 차 있다.

Electron 10 릴리스에서는 릴리스 노트에도 변화를 주었다. Electron 10에서 새로 추가된 내용과 이전 릴리스와의 차이점을 더 쉽게 확인할 수 있도록, Electron 10에 도입되었지만 이전 버전에도 백포팅된 변경 사항도 함께 포함했다. 이를 통해 앱 개발자들이 Electron을 업그레이드할 때 새로운 기능과 버그 수정 사항을 더 쉽게 찾을 수 있기를 바란다.

여러분이 이번 버전으로 무엇을 만들어낼지 기대가 된다! 이번 릴리스에 대한 자세한 내용을 계속 읽어보고, 피드백이 있다면 공유해 주길 바란다!

주요 변경 사항

스택 변경 사항

주요 기능

  • contents.getBackgroundThrottling() 메서드와 contents.backgroundThrottling 속성이 추가되었다. [#21036]
  • 메인 프로세스에서 desktopCapturer 모듈을 사용할 수 있게 되었다. #23548
  • 이제 ses.isPersistent() API를 호출해 주어진 session이 영구적인지 확인할 수 있다. #22622
  • 네트워크 IP 주소 변경과 ICE로 인해 RTC 호출이 연결되지 않던 문제를 해결했다. (Chromium 이슈 1113227). #24998

새로운 기능과 변경 사항의 전체 목록은 10.0.0 릴리스 노트에서 확인할 수 있다.

주요 변경 사항

  • enableRemoteModule의 기본값을 false로 변경했다. #22091
    • 이는 remote 모듈을 사용자 영역으로 옮기고 점차 폐기할 계획의 일환이다. 해당 결정의 배경과 폐기 일정에 대한 자세한 내용은 이 이슈를 참고하면 된다.
  • app.allowRendererProcessReuse의 기본값을 true로 변경했다. #22336 (Electron 9에서도 동일)
    • 이로 인해 렌더러 프로세스에서 컨텍스트를 인식하지 못하는 네이티브 모듈을 로드하지 못하게 된다. 해당 변경 사항의 배경과 폐기 일정에 대한 자세한 내용은 이 이슈를 참고하면 된다.
  • macOS에서 OS 로캘이 아랍어나 히브리어와 같은 RTL 언어로 설정된 경우 윈도우 버튼의 위치를 수정했다. 프레임리스 윈도우 앱은 스타일링 시 이 변경 사항을 고려해야 할 수 있다. #22016

이러한 변경 사항과 향후 예정된 변경 사항에 대한 자세한 내용은 Planned Breaking Changes 페이지에서 확인할 수 있다.

API 변경 사항

  • Session: 이제 ses.isPersistent() API를 호출하여 주어진 session이 지속적인지 확인할 수 있다. #22622
  • Contents: contents.getBackgroundThrottling() 메서드와 contents.backgroundThrottling 속성이 추가되었다. #21036

더 이상 사용되지 않는 API

다음 API는 이제 더 이상 사용되지 않거나 제거되었다:

  • netLog의 더 이상 사용되지 않는 currentlyLoggingPath 속성이 제거되었다. 또한 netLog.stopLogging은 더 이상 기록된 로그의 경로를 반환하지 않는다. #22732
  • crashReporter에서 압축되지 않은 크래시 업로드가 더 이상 사용되지 않는다. #23598

7.x.y 버전 지원 종료

Electron 7.x.y 버전은 프로젝트의 지원 정책에 따라 지원이 종료되었다. 개발자와 애플리케이션은 Electron의 최신 버전으로 업그레이드할 것을 권장한다.

다음 단계

단기적으로, 팀은 Chromium, Node, V8과 같은 Electron을 구성하는 주요 컴포넌트의 개발 속도를 따라잡는 데 계속 집중할 예정이다. 출시 일정에 대한 약속은 신중하게 다루지만, 대략 분기별로 이러한 컴포넌트의 새 버전과 함께 Electron의 새로운 주요 버전을 출시할 계획이다. 11.0.0 버전의 예정 일정은 Electron 11.0 개발 주기의 주요 날짜를 보여준다. 또한, Electron의 버전 관리에 대한 더 자세한 정보는 버전 관리 문서를 참고한다.

다가오는 Electron 버전에서 예정된 주요 변경 사항에 대한 정보는 예정된 주요 변경 사항 문서에서 확인할 수 있다.

remote 모듈 폐지 작업 계속 진행 중 (Electron 11)

우리는 Electron 9에서 remote 모듈 제거 작업을 시작했으며, 이제 remote 모듈을 완전히 없애기 위한 계획을 계속 진행하고 있다. Electron 11에서는 Electron 10에서와 마찬가지로 WeakRef 구현을 위한 리팩토링 작업을 이어갈 예정이다. 폐지에 대한 전체 계획과 세부 사항은 이 이슈를 참고하길 바란다.

네이티브 Node 모듈을 Context Aware 또는 N-API로 요구하기 위한 최종 단계 (Electron 12에서)

편집: 이 블로그 포스트는 원래 Electron 11에서 렌더러 프로세스 재사용을 비활성화할 것이라고 언급했습니다. 렌더러 프로세스 재사용 비활성화는 이제 Electron 12로 연기되었습니다.

Electron 6부터, 우리는 렌더러 프로세스에서 로드되는 네이티브 Node 모듈N-API 또는 Context Aware가 되도록 요구하는 기반을 마련해 왔습니다. 이 변경을 강제함으로써 더 강력한 보안, 더 빠른 성능, 그리고 유지보수 작업의 감소를 달성할 수 있습니다. 이 계획의 최종 단계는 Electron 12에서 렌더러 프로세스 재사용을 비활성화하는 기능을 제거하는 것입니다. 자세한 내용과 제안된 타임라인은 이 이슈를 참고하세요.

Electron becomes an OpenJS Foundation Impact Project

· 4 min read

Electron이 OpenJS Foundation의 Impact Project로 선정되었다. 이번 결정은 Electron이 현대 웹 기술의 발전에 기여한 공로를 인정받은 결과다. OpenJS Foundation은 JavaScript 생태계의 핵심 프로젝트를 지원하는 비영리 단체로, Electron의 성장과 지속 가능성을 더욱 공고히 할 것으로 기대된다.

Impact Project는 OpenJS Foundation의 핵심 프로젝트 중 하나로, JavaScript 생태계에 중요한 영향을 미치는 프로젝트를 선정한다. Electron은 이번에 Impact Project로 선정되며, OpenJS Foundation의 지원을 받아 더 많은 개발자 커뮤니티와 협력할 수 있는 기회를 얻게 되었다.

Electron은 웹 기술을 활용해 데스크톱 애플리케이션을 개발할 수 있는 프레임워크로, GitHub, Slack, Microsoft Teams 등 다양한 유명 애플리케이션에서 사용되고 있다. 이번 선정은 Electron의 기술적 우수성과 커뮤니티의 활발한 활동을 다시 한번 입증하는 사례다.

OpenJS Foundation은 Electron의 성장을 지원하고, 프로젝트의 지속 가능성을 높이기 위해 다양한 자원과 네트워크를 제공할 예정이다. 이를 통해 Electron은 더 많은 개발자와 기업에게 신뢰받는 기술로 자리 잡을 것으로 기대된다.

오늘 OpenJS World에서 Electron이 OpenJS Foundation의 인큐베이션 프로그램을 공식적으로 졸업하고, 이제 OpenJS Foundation의 Impact Project로 승격되었다고 발표했다.

Electron은 2019년 12월 몬트리올에서 열린 마지막 OpenJS Foundation 글로벌 컨퍼런스에서 인큐베이션에 참여했다. Impact Project로서 JavaScript 커뮤니티에서 더 큰 역할을 맡게 된 것을 기쁘게 생각하며, OpenJS Foundation과의 파트너십을 계속 이어갈 예정이다.

더 알아보기

OpenJS 재단의 설립 배경, 미션, 그리고 멤버에 대한 자세한 내용은 OpenJSF 웹사이트에서 확인할 수 있다. OpenJS 재단은 jQuery, Node.js, webpack 등 다양한 오픈소스 자바스크립트 프로젝트를 지원한다. GoDaddy, Google, IBM, Intel, Joyent, Microsoft 등 30개의 기업 및 엔드유저 멤버가 이 재단을 후원하고 있다.

Electron은 웹 기술을 사용해 크로스 플랫폼 데스크톱 애플리케이션을 구축하기 위한 오픈소스 프레임워크다. Electron을 만든 사람들과 그들이 어떻게 협력하는지 알고 싶다면 Governance 페이지를 살펴보자.

Electron을 직접 시작해보고 싶다면 공식 문서를 참고하면 된다.