Skip to main content

Electron 29.0.0

· 7 min read

Electron 29.0.0이 출시되었다! 이번 버전은 Chromium 122.0.6261.39, V8 12.2, 그리고 Node.js 20.9.0으로 업그레이드되었다.


Electron 팀은 Electron 29.0.0 출시를 기쁘게 발표한다. npm install electron@latest 명령어를 통해 npm으로 설치하거나 릴리스 웹사이트에서 다운로드할 수 있다. 이번 릴리스에 대한 자세한 내용은 계속 읽어보자.

피드백이 있다면 TwitterMastodon을 통해 공유하거나, Discord 커뮤니티에 참여해 보자. 버그와 기능 요청은 Electron의 이슈 트래커에 보고할 수 있다.

주요 변경 사항

하이라이트

  • 새로운 최상위 webUtils 모듈을 추가했다. 이 모듈은 렌더러 프로세스에서 Web API 객체와 상호작용하기 위한 유틸리티 계층을 제공한다. 이 모듈의 첫 번째 API는 webUtils.getPathForFile이다. 이전에 Electron의 File.path 확장은 웹 표준과 달랐지만, 이 새로운 API는 현재 웹 표준 동작에 더 부합한다.

스택 변경 사항

Electron 29은 Chromium을 120.0.6099.56에서 122.0.6261.39로, Node를 18.18.2에서 20.9.0로, V8을 12.0에서 12.2로 업그레이드한다.

새로운 기능

  • Web API 객체와 상호작용하기 위한 유틸리티 계층인 새로운 webUtils 모듈을 추가해 File.path 확장을 대체한다. #38776
  • 유틸리티 프로세스net 모듈을 추가한다. #40890
  • file:// 프로토콜이 Chromium과 동일한 더 안전하고 제한적인 동작을 선택하도록 하는 새로운 Electron FusegrantFileProtocolExtraPrivileges를 추가한다. #40372
  • 커스텀 스킴에서 V8 코드 캐시를 허용하는 옵션을 protocol.registerSchemesAsPrivileged에 추가한다. #40544
  • macOS 13.0 이상에서 app.{set|get}LoginItemSettings(settings)가 Apple의 새로운 권장 프레임워크를 사용하도록 마이그레이션한다. #37244

주요 변경 사항

동작 변경: ipcRenderercontextBridge를 통해 전달할 수 없음

contextBridge를 통해 ipcRenderer 모듈 전체를 객체로 전달하려고 하면, 이제 브리지의 수신 측에서 빈 객체를 받게 된다. 이 변경은 보안상의 위험을 제거하거나 완화하기 위해 도입되었다. ipcRenderer나 그 메서드를 직접 브리지에 노출시키면 안 된다. 대신 다음과 같이 안전한 래퍼를 제공해야 한다:

contextBridge.exposeInMainWorld('app', {
onEvent: (cb) => ipcRenderer.on('foo', (e, ...args) => cb(args)),
});

app 객체의 renderer-process-crashed 이벤트가 제거되었다. 이제 새로운 render-process-gone 이벤트를 사용해야 한다.

// 제거됨
app.on('renderer-process-crashed', (event, webContents, killed) => {
/* ... */
});

// 대체 코드
app.on('render-process-gone', (event, webContents, details) => {
/* ... */
});

제거됨: WebContents<webview>crashed 이벤트

WebContents<webview>crashed 이벤트가 제거되었다. 대신 새로운 render-process-gone 이벤트를 사용한다.

// 제거됨
win.webContents.on('crashed', (event, killed) => {
/* ... */
});
webview.addEventListener('crashed', (event) => {
/* ... */
});

// 대체 코드
win.webContents.on('render-process-gone', (event, details) => {
/* ... */
});
webview.addEventListener('render-process-gone', (event) => {
/* ... */
});

제거됨: appgpu-process-crashed 이벤트

appgpu-process-crashed 이벤트가 제거되었다. 이제 새로운 child-process-gone 이벤트를 사용해야 한다.

// 제거됨
app.on('gpu-process-crashed', (event, killed) => {
/* ... */
});

// 대체 코드
app.on('child-process-gone', (event, details) => {
/* ... */
});

26.x.y 버전 지원 종료

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

E29 (2024년 2월)E30 (2024년 4월)E31 (2024년 6월)
29.x.y30.x.y31.x.y
28.x.y29.x.y30.x.y
27.x.y28.x.y29.x.y

다음 단계

Electron이 최근 커뮤니티 RFC(Request for Comments) 프로세스를 도입한 것을 알고 있는가? 프레임워크에 새로운 기능을 추가하고 싶다면, RFC는 유지 관리자와 설계에 대해 논의를 시작할 수 있는 유용한 도구다. 또한 Pull Requests에서 논의 중인 예정된 변경 사항을 확인할 수도 있다. 더 자세한 내용은 Introducing electron/rfcs 블로그 포스트를 참고하거나 electron/rfcs 저장소의 README를 직접 확인해 보자.

단기적으로, Electron 팀은 Chromium, Node, V8 등 Electron을 구성하는 주요 컴포넌트의 개발을 따라가는 데 계속 집중할 예정이다.

Electron의 공개 타임라인은 여기서 확인할 수 있다.

향후 예정된 변경 사항에 대한 더 많은 정보는 Planned Breaking Changes 페이지에서 찾아볼 수 있다.