Skip to main content

Google Season of Docs

· 4 min read

Electron은 Google의 Season of Docs 이니셔티브 두 번째 버전에 참여하게 된 것을 자랑스럽게 생각한다. 이 프로그램은 오픈소스 조직의 멘토와 기술 문서 작성자를 연결해 프로젝트 문서를 개선하는 데 초점을 맞춘다.

Season of Docs 로고

Season of Docs는 기술 문서 작성자와 오픈소스 커뮤니티 간의 협업을 촉진하여 양측에 이익을 주는 프로그램이다. 오픈소스 관리자는 기술 문서 작성자의 전문성을 활용해 문서의 구조와 내용을 개선하고, 기술 문서 작성자는 멘토의 지도 아래 오픈소스 커뮤니티에 참여하게 된다. 더 자세한 내용은 Google의 Season of Docs 웹사이트에서 확인할 수 있다.

이번 프로그램에 처음으로 참여하면서, 우리는 단 한 명의 기술 문서 작성자를 멘토링할 예정이다. 이 작성자는 Electron의 Ecosystem Working Group과 함께 작업하며 문서의 상당 부분을 재구성할 것이다. 전체 프로젝트의 타임라인은 여기에서 확인할 수 있다.

어떻게 참여할 수 있나요?

Electron과 함께 기술 문서 작가로 협업하고 싶은가요? 먼저 Google의 기술 문서 작성 가이드를 확인하고, 우리가 준비한 두 가지 프로젝트 아이디어 초안을 살펴보세요.

Season of Docs에서 Electron의 기술 문서 작가로 선발되려면, 6월 8일부터 7월 9일까지 진행되는 '기술 문서 작성자 지원 단계'에서 Google Season of Docs 웹사이트를 통해 지원해야 합니다.

지원서에는 제안서를 포함해야 합니다. 제안서는 3개월 동안 Electron 문서에서 달성하고자 하는 계획을 상세히 설명하는 문서입니다. 이 제안서는 우리가 제공한 프로젝트 아이디어 문서에 언급된 시작점을 기반으로 할 수도 있고, 완전히 새로운 아이디어를 제안할 수도 있습니다. 어디서부터 시작해야 할지 모르겠다면, 작년의 선정된 제안서 목록을 참고해 영감을 얻을 수 있습니다.

제안서 외에도, 지원자의 기술 문서 작성 경력을 확인할 예정입니다. 관련된 글쓰기 경험을 강조한 이력서와 함께, 기술 문서 샘플(기존 문서, 튜토리얼, 블로그 포스트 등)을 제출해 주세요.

프로젝트 제안에 대해 논의하고 싶다면, season-of-docs@electronjs.org로 이메일을 보내주세요. 그곳에서 대화를 이어갈 수 있습니다!

참고 자료

Electron 9.0.0

· 8 min read

Electron 9.0.0이 출시되었다! 이번 버전은 Chromium 83, V8 8.3, 그리고 Node.js 12.14로 업그레이드되었다. 또한 스펠체커 기능을 위한 여러 새로운 API 통합이 추가되었고, PDF 뷰어가 활성화되었으며, 그 외에도 다양한 개선 사항이 포함되었다.


Electron 팀은 Electron 9.0.0 출시를 발표하게 되어 기쁘게 생각한다. npm install electron@latest 명령어를 통해 npm으로 설치하거나 릴리스 웹사이트에서 다운로드할 수 있다. 이번 릴리스에는 업그레이드, 수정 사항, 그리고 새로운 기능들이 가득하다. 여러분이 이 기능들을 활용해 무엇을 만들어낼지 기대가 크다! 이번 릴리스에 대한 자세한 내용은 계속 읽어보고, 피드백이 있다면 언제든지 공유해주길 바란다!

주요 변경 사항

스택 변경 내용

주요 기능

  • 맞춤법 검사 기능이 여러 측면에서 개선되었다. 자세한 내용은 #22128#22368에서 확인할 수 있다.
  • Linux에서 윈도우 이벤트 핸들러의 효율성이 향상되었다. #23260.
  • PDF 뷰어 기능이 활성화되었다. #22131.

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

주요 변경 사항

  • enableRemoteModule: true 없이 remote를 사용할 때 더 이상 사용되지 않는다는 경고가 표시된다. #21546
    • 이는 remote 모듈을 더 이상 사용하지 않고 사용자 영역으로 이동시키기 위한 첫 번째 단계다. 이 변경의 이유와 제안된 일정에 대한 자세한 내용은 이 이슈에서 확인할 수 있다.
  • app.enableRendererProcessReuse가 기본적으로 true로 설정된다. #22336
    • 이는 렌더러 프로세스에서 로드되는 네이티브 Node 모듈이 N-API 또는 Context Aware여야 한다는 향후 요구 사항을 위한 작업의 일환이다. 자세한 정보와 제안된 일정은 이 이슈에서 확인할 수 있다.
  • IPC를 통해 JavaScript가 아닌 객체를 전송하면 이제 예외가 발생한다. #21560
    • 이 동작은 Electron 8.0에서 더 이상 사용되지 않았다. Electron 9.0에서는 이전 직렬화 알고리즘이 제거되었고, 이제 직렬화할 수 없는 객체를 전송하면 "객체를 복제할 수 없음" 오류가 발생한다.

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

API 변경 사항

  • shell API 변경:

    • shell.openItem API가 비동기 방식의 shell.openPath API로 대체되었다. 제안서
  • session API 변경:

    • session.listWordsFromSpellCheckerDictionary API가 추가되어 사전에 등록된 커스텀 단어 목록을 확인할 수 있다. #22128
    • session.removeWordFromSpellCheckerDictionary API가 추가되어 사전에서 커스텀 단어를 제거할 수 있다. #22368
    • session.serviceWorkerContext API가 추가되어 기본적인 서비스 워커 정보에 접근하고, 서비스 워커에서 발생한 콘솔 로그를 수신할 수 있다. #22313
  • app API 변경:

    • macOS에서 app.focus()에 새로운 force 매개변수가 추가되어 앱이 강제로 포커스를 가져올 수 있다. #23447
  • BrowserWindow API 변경:

    • BrowserWindow의 일부 getter/setter 쌍에 대한 프로퍼티 접근이 지원된다. #23208

더 이상 사용되지 않는 API

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

  • shell.openItem API는 더 이상 사용되지 않으며, 비동기 방식의 shell.openPath API로 대체되었다.
  • <webview>.getWebContents는 Electron 8.0에서 더 이상 사용되지 않았으며, 이제 완전히 제거되었다.
  • webFrame.setLayoutZoomLevelLimits는 Electron 8.0에서 더 이상 사용되지 않았으며, 이제 완전히 제거되었다.

6.x.y 버전 지원 종료

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

앞으로의 계획

가까운 미래에 Electron 팀은 Chromium, Node, V8 등 주요 구성 요소의 개발 속도를 따라잡는 데 계속 집중할 예정이다. 정확한 출시 일정을 약속하기는 어렵지만, 대략 분기별로 이러한 구성 요소의 새 버전과 함께 Electron의 주요 버전을 출시할 계획이다. Electron 10.0.0의 잠정 일정은 Electron 10.0 개발 주기의 주요 날짜를 보여준다. 또한 Electron의 버전 관리에 대한 자세한 정보는 버전 관리 문서를 참고한다.

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

contextIsolation의 기본값을 false에서 true로 변경한다(이 변경은 Electron 10부터 시작됨).

contextIsolation이 비활성화된 상태에서는, 렌더러 프로세스에서 실행되는 코드가 Electron의 내부나 앱의 프리로드 스크립트에 쉽게 접근할 수 있다. 이렇게 되면, Electron이 제한하고자 했던 권한 있는 작업을 수행할 가능성이 생긴다.

이 기본값을 변경함으로써 Electron 앱의 기본 보안이 향상된다. 이제 앱은 의도적으로 보안상 취약한 동작을 선택해야 한다. Electron은 Electron 10.0에서 현재의 기본값인 contextIsolation을 더 이상 사용하지 않을 예정이며, Electron 12.0부터는 새로운 기본값(true)으로 변경할 것이다.

contextIsolation에 대한 자세한 정보와 이를 쉽게 활성화하는 방법, 그리고 보안상의 이점에 대해서는 전용 Context Isolation 문서를 참고한다.

Upcoming Electron Releases

· 2 min read

Electron이 주요 릴리즈를 일시적으로 중단한다.

현재 상황

Electron의 주요 릴리즈 주기는 Chromium의 릴리즈 주기와 동기화되어 있다. 최근 Chromium 프로젝트는 작업 일정 조정으로 인해 릴리즈를 일시 중단하기로 결정했다. 이에 따라 Chromium의 릴리즈 주기가 변경되는 동안 Electron 역시 새로운 주요 버전 출시를 일시적으로 중단한다.

Electron 팀은 Chromium의 결정을 따르는 것이 최선의 선택이라고 판단했다. 따라서 이 기간 동안 Electron 팀은 버그 수정, 보안 강화, 성능 개선, 안정성 작업에 전념할 예정이다.

이 기간 동안 유지보수 담당자와 사용자 모두의 안녕을 최우선으로 고려하고 있다. 여러분의 피드백을 환영하며, 정상적인 릴리즈 주기로 복귀할 수 있기를 기대한다.

더 많은 업데이트는 Electron 트위터 계정을 통해 확인할 수 있다.

2020년 3월 30일 수정: Chromium이 M82 안정 버전 출시를 건너뛰고 M83 안정 버전 출시 일정을 조정한다는 공지에 따라, Electron 9 안정 버전은 Chromium M83을 기반으로 2020년 5월 19일에 출시될 예정이다.

Electron 8.0.0

· 10 min read

Electron 8.0.0이 출시되었다! 이번 버전에는 Chromium 80, V8 8.0, 그리고 Node.js 12.13.0으로의 업그레이드가 포함되어 있다. 또한 Chrome의 내장 맞춤법 검사기가 추가되었으며, 그 외에도 다양한 기능이 추가되었다!


Electron 팀은 Electron 8.0.0의 출시를 기쁘게 발표한다! npm install electron@latest 명령어를 통해 npm으로 설치하거나 릴리스 웹사이트에서 다운로드할 수 있다. 이번 릴리스에는 업그레이드, 수정 사항, 그리고 새로운 기능들이 가득하다. 여러분이 이를 활용해 무엇을 만들어낼지 기대가 크다! 이번 릴리스에 대한 자세한 내용은 계속 읽어보고, 의견이 있다면 공유해 주길 바란다!

주요 변경 사항

스택 변경 내역

주요 기능

  • Chrome의 내장 맞춤법 검사 기능을 구현했다. 자세한 내용은 #20692#21266에서 확인할 수 있다.
  • IPC 통신에서 이제 v8의 Structured Clone Algorithm을 사용한다. 이는 기존 로직보다 빠르고 기능이 풍부하며 예측 가능성이 높다. 또한 대용량 버퍼와 복잡한 객체 처리에서 2배의 성능 향상을 가져온다. 작은 메시지의 지연 시간은 크게 영향을 받지 않는다. 자세한 내용은 #20214에서 확인할 수 있다.

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

주요 변경 사항

  • 컨텍스트 인식 모듈에 대한 사용 중단 경고에 모듈 이름을 표시한다. #21952
    • 이는 향후 요구사항을 위한 작업의 연장선으로, 렌더러 프로세스에서 로드되는 네이티브 Node 모듈이 N-API 또는 컨텍스트 인식 모듈이어야 한다는 내용이다. 자세한 정보와 제안된 타임라인은 이 이슈에서 확인할 수 있다.
  • IPC를 통해 전송되는 값이 이제 구조화된 복제 알고리즘(Structured Clone Algorithm)으로 직렬화된다. #20214
  • 오프스크린 렌더링은 현재 이 기능을 담당할 유지보수자가 없어 비활성화되었다. 크로미움 업그레이드 중에 문제가 발생한 후 비활성화되었다. #20772

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

API 변경 사항

  • app API 변경 사항:

    • app.getApplicationNameForProtocol(url) 추가. #20399
    • Windows에서 app.showAboutPanel()app.setAboutPanelOptions(options) 지원 추가. #19420
  • BrowserWindow API 변경 사항:

    • hasShadow 옵션이 모든 플랫폼에서 사용 가능함을 문서에 명시. #20038
    • trafficLightPosition 옵션 추가로 트래픽 라이트 버튼의 커스텀 위치 설정 가능. #21781
    • accessibleTitle 옵션 추가로 접근 가능한 윈도우 제목 설정 가능. #19698
    • BrowserWindow.fromWebContents()가 이제 null을 반환할 수 있음. #19983
    • BrowserWindow.getMediaSourceId()BrowserWindow.moveAbove(mediaSourceId) 추가. #18926
    • macOS에서 will-move 이벤트 지원 추가. #19641
  • 이전에 문서화되지 않은 crashReporter.getCrashesDirectory()를 문서화. #20417

  • dialog API 변경 사항:

    • dialog.showOpenDialogdialog.showOpenDialogSyncdontAddToRecent 속성 추가로 Windows에서 최근 문서 목록에 추가되지 않도록 설정 가능. #19669
    • dialog.showSaveDialogdialog.showSaveDialogSync에 속성 커스터마이징 추가. #19672
  • Notification API 변경 사항:

    • Linux/Windows 사용자가 알림 타임아웃 타입을 설정할 수 있도록 timeoutType 옵션 추가. #20153
    • Linux 알림에 urgency 옵션 추가로 긴급도 설정 가능. #20152
  • session API 변경 사항:

    • session.setProxy(config)session.setCertificateVerifyProc(proc) 문서에 선택적 옵션을 명시. #19604
    • session.downloadURL(url) 추가로 BrowserWindow 없이 다운로드 트리거 가능. #19889
    • session.preconnect(options)preconnect 이벤트를 통해 HTTP 사전 연결 리소스 힌트 지원 추가. #18671
    • session.addWordToSpellCheckerDictionary 추가로 사전에 커스텀 단어 추가 가능. #21297
  • shell.moveItemToTrash(fullPath[, deleteOnFail])에 macOS에서 실패 시 동작을 지정할 수 있는 옵션 추가. #19700

  • systemPreferences API 변경 사항:

    • macOS에서 systemPreferences.getColor(color) 문서 업데이트. #20611
    • systemPreferences.getMediaAccessStatus()screen 미디어 타입 추가. #20764
  • nativeTheme.themeSource 추가로 앱이 Chromium 및 OS의 테마 선택을 재정의할 수 있음. #19960

  • TouchBar API 변경 사항:

    • TouchBarButtonTouchBarLabelaccessibilityLabel 속성 추가로 접근성 개선. #20454
    • TouchBar 관련 문서 업데이트. #19444
  • tray API 변경 사항:

    • tray.displayBalloon()iconType, largeIcon, noSound, respectQuietTime 옵션 추가. #19544
    • tray.removeBalloon() 추가로 이미 표시된 풍선 알림 제거 가능. #19547
    • tray.focus() 추가로 작업표시줄 알림 영역으로 포커스 이동 가능. #19548
  • webContents API 변경 사항:

    • contents.executeJavaScriptInIsolatedWorld(worldId, scripts[, userGesture]) 추가로 webContents API에서 executeJavaScriptInIsolatedWorld 노출. #21190
    • 숨겨진 webContents를 캡처할 수 있는 메서드 추가. #21679
    • webContents.print([options], [callback])에 페이지 헤더 및 푸터 커스터마이징 옵션 추가. #19688
    • webContents.getAllSharedWorkers()webContents.inspectSharedWorkerById(workerId)를 통해 특정 공유 워커 검사 가능. #20389
    • fitToPageEnabledscaleFactor 옵션을 WebContents.printToPDF()에 추가. #20436
  • webview.printToPDF 문서 업데이트로 반환 타입이 이제 Uint8Array임을 명시. #20505

더 이상 사용되지 않는 API

다음 API들은 이제 더 이상 사용되지 않는다:

  • BrowserWindow.setVisibleOnAllWorkspaces 내 비활성화된 visibleOnFullScreen 옵션은 다음 주요 릴리스 버전에서 제거될 예정이다. #21732
  • macOS에서 systemPreferences.getColor(color)alternate-selected-control-text는 더 이상 사용되지 않는다. #20611
  • Chromium이 해당 기능을 제거했기 때문에 webContents, webFrame, <webview> Tag에서의 setLayoutZoomLevelLimits는 더 이상 사용되지 않는다. #21296
  • app.allowRendererProcessReuse의 기본값 false는 이제 더 이상 사용되지 않는다. #21287
  • <webview>.getWebContents()는 remote 모듈에 의존하기 때문에 더 이상 사용되지 않는다. #20726

5.x.y 버전 지원 종료

Electron 5.x.y 버전은 프로젝트의 지원 정책에 따라 더 이상 지원되지 않는다. 개발자와 애플리케이션은 최신 버전의 Electron으로 업그레이드하는 것을 권장한다.

앱 피드백 프로그램

우리는 테스트를 위해 앱 피드백 프로그램을 계속 활용하고 있다. 이 프로그램에 참여하는 프로젝트는 자신의 앱에서 Electron 베타 버전을 테스트한다. 그 대가로 발견한 새로운 버그는 안정적인 릴리즈에서 우선적으로 처리된다. 프로그램에 참여하거나 자세히 알아보고 싶다면 프로그램에 관한 블로그 포스트를 확인해 보자.

다음 단계

단기적으로, 팀은 Chromium, Node, V8과 같은 Electron을 구성하는 주요 컴포넌트의 개발 속도를 따라잡는 데 계속 집중할 것이다. 릴리스 일정에 대해 약속하지 않도록 주의하지만, 대략 분기별로 새로운 버전의 컴포넌트와 함께 Electron의 새로운 메이저 버전을 출시할 계획이다. Electron 9.0.0 개발 일정은 Electron 9 개발 주기의 주요 날짜를 보여준다. 또한, 버전 관리 문서에서 Electron의 버전 관리에 대한 더 자세한 정보를 확인할 수 있다.

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

remote 모듈의 사용 중단 (Electron 9부터 시작)

보안상의 심각한 취약점으로 인해, Electron 9부터 remote 모듈의 사용을 중단할 계획이다. 이 결정의 배경과 중단 일정에 대한 자세한 내용은 이 이슈를 참고하면 된다.

Electron joins the OpenJS Foundation

· 6 min read

Electron이 OpenJS Foundation에 합류한다. 이번 합류는 Electron 생태계의 성장과 지속 가능성을 강화하는 중요한 이정표가 될 것이다. OpenJS Foundation은 JavaScript와 관련된 오픈소스 프로젝트를 지원하는 선도적인 조직으로, Node.js, jQuery, webpack 등 여러 주요 프로젝트를 후원하고 있다.

Electron은 크로스 플랫폼 데스크톱 애플리케이션 개발을 위한 프레임워크로, 웹 기술(HTML, CSS, JavaScript)을 사용해 데스크톱 앱을 만들 수 있게 해준다. 이 프레임워크는 Slack, Visual Studio Code, Discord 등 다양한 인기 애플리케이션에서 사용되고 있다.

OpenJS Foundation에 합류함으로써 Electron은 더 넓은 커뮤니티와 리소스에 접근할 수 있게 되었다. 이는 프로젝트의 장기적인 성공과 발전에 기여할 것이다. 또한, 이번 합류는 Electron 커뮤니티의 투명성과 협업을 더욱 강화할 것으로 기대된다.

이번 결정은 Electron 커뮤니티와 OpenJS Foundation 양측에 긍정적인 영향을 미칠 것이다. Electron은 더 많은 지원과 리소스를 확보할 수 있고, OpenJS Foundation은 또 하나의 중요한 프로젝트를 포트폴리오에 추가하게 되었다. 두 조직의 협력은 JavaScript 생태계의 성장과 혁신을 더욱 촉진할 것이다.

몬트리올에서 열린 Node+JS Interactive에서 OpenJS Foundation은 Electron을 재단의 인큐베이션 프로그램에 포함한다고 발표했다. OpenJS Foundation은 중립적인 조직으로서 프로젝트를 주최하고 유지하며, 커뮤니티 전체를 위한 활동을 공동으로 지원함으로써 JavaScript 생태계와 웹 기술의 건강한 성장을 돕는 데 전념하고 있다.

OpenJS Foundation은 jQuery, Node.js, webpack을 포함한 여러 오픈소스 JavaScript 프로젝트를 주최하고 있다. GoDaddy, Google, IBM, Intel, Joyent, Microsoft를 비롯한 30개의 기업 및 최종 사용자 회원이 이를 지원하고 있다. Electron은 웹 기술을 사용해 크로스 플랫폼 데스크톱 애플리케이션을 구축하기 위한 오픈소스 프레임워크다.

이번 결정은 Electron에게 큰 전환점이 될 것이다. 또한 이는 오픈소스 프로젝트로서의 성장을 위한 다음 단계로 볼 수 있다.

개발자에게 미치는 영향

Electron이 OpenJS Foundation에 합류한다고 해서 Electron의 제작, 출시, 사용 방식이 바뀌지는 않는다. 따라서 Electron으로 애플리케이션을 개발하는 개발자에게 직접적인 영향을 미치지 않는다. Electron은 2013년 GitHub에서 처음 만들어졌지만, 현재는 여러 조직과 개인이 유지 보수를 맡고 있다. 2019년에는 Electron의 거버넌스 구조를 명확히 하고, 전체 프로젝트에 영향을 미치는 결정을 내리는 방식을 공식화하는 데 많은 노력을 기울였다. 여러 조직과 개발자가 Electron에 투자하고 협력하는 것이 프로젝트를 더 강력하게 만든다고 믿는다.

단일 기업이 소유하던 Electron을 중립적인 재단으로 옮기고, 웹과 자바스크립트 생태계를 지원하는 데 초점을 맞추는 것은 오픈소스 프로젝트로서 성장하는 데 있어 자연스러운 다음 단계다.

더 알아보기

OpenJS 재단의 설립 배경, 미션, 그리고 구성원에 대해 더 알고 싶다면 OpenJSF 웹사이트를 방문해 보자. Electron이 OpenJSF 인큐베이션 프로그램에 참여한 것에 대한 자세한 정보와 관련 인용문은 공식 보도 자료를 확인하면 된다. Electron을 만든 사람들과 그들이 어떻게 협력하는지 알고 싶다면 Governance 페이지를 살펴보자.

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

Chromium WebAudio 취약점 패치 (CVE-2019-13720)

· 3 min read

Chrome에서 고위험 취약점이 발견되었으며, 이는 Electron을 포함한 모든 Chromium 기반 소프트웨어에 영향을 미친다.

이 취약점은 CVE-2019-13720로 할당되었다. 자세한 내용은 Chrome 블로그 포스트에서 확인할 수 있다.

현재 이 취약점이 실제로 악용되고 있다는 보고가 있으므로, 가능한 한 빨리 Electron을 업그레이드할 것을 강력히 권장한다.


범위

이 내용은 서드파티나 신뢰할 수 없는 자바스크립트를 실행할 수 있는 모든 Electron 애플리케이션에 영향을 미친다.

취약점 대응

영향을 받는 앱은 패치된 버전의 Electron으로 업그레이드해야 한다.

이 취약점에 대한 수정 사항이 포함된 Electron의 새로운 버전을 공개했다:

Electron 7.0.1은 공지 전에 이미 상위 버전에서 수정 사항을 자동으로 포함했다. Electron 8도 마찬가지로 영향을 받지 않는다. Electron 5에는 이 취약점이 존재하지 않아 해당 버전도 안전하다.

추가 정보

이 취약점은 Kaspersky Labs의 Anton Ivanov와 Alexey Kulaev가 발견했으며, Chrome 팀에 보고되었다. 관련 내용은 Chrome 블로그 포스트에서 확인할 수 있다.

Electron 앱의 보안을 유지하는 모범 사례에 대해 더 알고 싶다면 보안 튜토리얼을 참고한다.

Electron에서 취약점을 발견했다면 security@electronjs.org로 이메일을 보내면 된다.

Electron 7.0.0

· 6 min read

Electron 7.0.0이 출시되었습니다! 이번 버전은 Chromium 78, V8 7.8, Node.js 12.8.1로 업그레이드되었습니다. 또한 Arm 64용 윈도우 릴리스, 더 빠른 IPC 메서드, 새로운 nativeTheme API 등 다양한 기능이 추가되었습니다!


Electron 팀은 Electron 7.0.0 출시를 발표하게 되어 기쁩니다! npm install electron@latest 명령어를 통해 npm으로 설치하거나 릴리스 웹사이트에서 다운로드할 수 있습니다. 이번 릴리스에는 업그레이드, 수정 사항, 그리고 새로운 기능이 가득합니다. 여러분이 이 기능들을 활용해 무엇을 만들어낼지 기대가 큽니다! 이번 릴리스에 대한 자세한 내용은 계속 읽어보시고, 피드백이 있다면 언제든지 공유해 주세요!

주요 변경 사항

  • 스택 업그레이드:

    스택Electron 6 버전Electron 7 버전새로운 기능
    Chromium76.0.3809.14678.0.3905.177, 78
    V87.67.87.7, 7.8
    Node.js12.4.012.8.112.5, 12.6, 12.7, 12.8, 12.8.1
  • Windows on Arm (64비트) 릴리스 추가. #18591, #20112

  • 비동기 요청/응답 스타일의 IPC를 위한 ipcRenderer.invoke()ipcMain.handle() 추가. 이 기능은 remote 모듈보다 강력히 권장됨. 자세한 내용은 "Electron’s ‘remote’ module considered harmful" 블로그 포스트 참조. #18449

  • 운영체제의 테마와 색상 스킴 변경을 읽고 반응하는 nativeTheme API 추가. #19758, #20486

  • 새로운 TypeScript 정의 생성기로 전환. 결과적으로 더 정확한 정의가 생성됨. 따라서 TypeScript 빌드가 실패한다면 이 변경 사항이 원인일 가능성이 높음. #18103

더 많은 변경 사항은 7.0.0 릴리스 노트에서 확인할 수 있다.

주요 변경 사항

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

  • 더 이상 사용되지 않는 API 제거:
    • Promise를 사용하도록 업데이트된 함수의 콜백 기반 버전. #17907
    • Tray.setHighlightMode() (macOS). #18981
    • app.enableMixedSandbox() #17894
    • app.getApplicationMenu(),
    • app.setApplicationMenu(),
    • powerMonitor.querySystemIdleState(),
    • powerMonitor.querySystemIdleTime(),
    • webFrame.setIsolatedWorldContentSecurityPolicy(),
    • webFrame.setIsolatedWorldHumanReadableName(),
    • webFrame.setIsolatedWorldSecurityOrigin() #18159
  • Session.clearAuthCache()는 더 이상 캐시 항목을 필터링할 수 없다. #17970
  • macOS의 네이티브 인터페이스(메뉴, 대화상자 등)는 이제 사용자 기기의 다크 모드 설정에 자동으로 맞춰진다. #19226
  • electron 모듈이 @electron/get을 사용하도록 업데이트되었다. 이제 최소 지원 Node 버전은 Node 8이다. #18413
  • electron.asar 파일이 더 이상 존재하지 않는다. 이 파일의 존재에 의존하는 패키징 스크립트는 업데이트해야 한다. #18577

4.x.y 버전 지원 종료

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

앱 피드백 프로그램

Electron은 계속해서 앱 피드백 프로그램을 통해 테스트를 진행하고 있다. 이 프로그램에 참여하는 프로젝트들은 자신들의 앱에서 Electron 베타 버전을 테스트한다. 그 대가로 발견한 새로운 버그는 안정 버전 출시 시 우선적으로 처리된다. 프로그램에 참여하거나 더 자세히 알아보고 싶다면 프로그램에 대한 블로그 포스트를 확인해 보길 바란다.

다음 단계

단기적으로, Electron 팀은 Chromium, Node, V8과 같은 주요 구성 요소의 개발을 계속 따라가며 업데이트하는 데 주력할 예정이다. 릴리스 일정에 대한 약속은 자제하지만, 대략 분기별로 이러한 구성 요소의 새 버전과 함께 Electron의 새로운 주요 버전을 출시할 계획이다. Electron 8.0.0의 잠정 일정은 Electron 8 개발 주기의 주요 날짜를 보여준다. 또한, Electron 버전 관리 문서에서 버전 관리에 대한 더 자세한 정보를 확인할 수 있다.

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

Electron 6.0.0

· 8 min read

Electron 팀은 Electron 6.0.0 출시를 발표하게 되어 기쁩니다! npm install electron@latest 명령어를 통해 npm으로 설치하거나 릴리스 웹사이트에서 직접 다운로드할 수 있습니다. 이번 릴리스에는 다양한 업그레이드, 버그 수정, 그리고 새로운 기능이 포함되어 있습니다. 여러분이 이 기능들을 활용해 무엇을 만들어낼지 기대가 큽니다! 이번 릴리스에 대한 자세한 내용을 확인해 보세요. 여러분의 피드백도 언제나 환영합니다!

새로운 기능

오늘은 Electron 프로젝트에 있어서 특별한 날이다. 이번이 바로 Chrome 안정 버전동일한 날에 Electron의 안정 버전을 출시한 첫 번째 사례다! 🎉

Electron의 대부분 기능은 Chromium, Node.js, V8의 핵심 컴포넌트에 의해 제공된다. Electron은 사용자들에게 새로운 자바스크립트 기능, 성능 개선, 보안 패치를 제공하기 위해 이러한 프로젝트들과 최신 상태를 유지한다. Electron 6에서는 각 패키지의 메이저 버전이 업데이트되었다:

이번 릴리스에는 Electron API의 개선사항도 포함되어 있다. 릴리스 노트에서 더 자세한 목록을 확인할 수 있지만, 주요 내용은 다음과 같다:

프로미스화(Promisification)

Electron 6.0은 5.0에서 시작된 모던 자바스크립트 지원 개선 이니셔티브를 이어갑니다. 이번 업데이트에서는 Promise 지원을 더욱 강화했습니다.

다음 함수들은 이제 Promise를 반환하며, 기존의 콜백 기반 호출도 계속 지원합니다:

  • contentTracing.getCategories() #16583
  • contentTracing.getCategories() #16583
  • contentTracing.getTraceBufferUsage() #16600
  • contents.executeJavaScript() #17312
  • cookies.flushStore() #16464
  • cookies.get() #16464
  • cookies.remove() #16464
  • cookies.set() #16464
  • dialog.showCertificateTrustDialog() #17181
  • inAppPurchase.getProducts() #17355
  • inAppPurchase.purchaseProduct()#17355
  • netLog.stopLogging() #16862
  • session.clearAuthCache() #17259
  • session.clearCache() #17185
  • session.clearHostResolverCache() #17229
  • session.clearStorageData() #17249
  • session.getBlobData() #17303
  • session.getCacheSize() #17185
  • session.resolveProxy() #17222
  • session.setProxy() #17222
  • webContents.hasServiceWorker() #16535
  • webContents.printToPDF() #16795
  • webContents.savePage() #16742
  • webFrame.executeJavaScript() #17312
  • webFrame.executeJavaScriptInIsolatedWorld() #17312
  • webviewTag.executeJavaScript() #17312

다음 함수들은 이제 동기식과 Promise 기반 비동기식 두 가지 형태를 제공합니다:

  • dialog.showMessageBox()/dialog.showMessageBoxSync() #17298
  • dialog.showOpenDialog()/dialog.showOpenDialogSync() #16973
  • dialog.showSaveDialog()/dialog.showSaveDialogSync() #17054

다음 함수들은 이제 Promise를 반환합니다:

강화된 런타임을 활성화하기 위해 특별한 코드 서명 권한이 Helper에 부여되어야 한다. 강화된 런타임은 쓰기 가능한 실행 메모리나 다른 Team ID로 서명된 코드 로딩과 같은 기능을 제한한다.

이 권한을 필요한 프로세스 타입에만 적용하기 위해 Chromium은 Helper 앱의 세 가지 새로운 변형을 추가했다: 렌더러용 (Electron Helper (Renderer).app), GPU 프로세스용 (Electron Helper (GPU).app), 그리고 플러그인용 (Electron Helper (Plugin).app).

electron-osx-sign를 사용해 Electron 앱을 코드 서명하는 경우, 빌드 로직을 변경할 필요가 없다. 하지만 커스텀 스크립트로 코드 서명을 하는 경우, 이 세 가지 새로운 Helper 애플리케이션이 올바르게 서명되었는지 확인해야 한다.

이 새로운 Helper를 사용해 애플리케이션을 올바르게 패키징하려면 electron-packager@14.0.4 이상 버전을 사용해야 한다. electron-builder를 사용하는 경우, 이 이슈를 참고해 새로운 Helper에 대한 지원을 확인할 수 있다.

주요 변경 사항

  • 이번 릴리스는 렌더러 프로세스에서 로드되는 네이티브 Node 모듈이 N-API 또는 Context Aware여야 한다는 미래의 요구사항을 위한 기반을 마련한다. 이 변경의 목적은 더 빠른 성능, 강화된 보안, 그리고 유지보수 부담을 줄이기 위함이다. 자세한 내용과 제안된 타임라인은 이 이슈에서 확인할 수 있다. 이 변경사항은 Electron v11에서 완료될 예정이다.

  • net.IncomingMessage의 헤더가 Node.js 동작과 더 일치하도록 약간 변경되었다. 특히 set-cookie의 값과 중복 헤더 처리 방식이 조정되었다. #17517

  • shell.showItemInFolder()는 이제 void를 반환하며 비동기 호출로 변경되었다. #17121

  • 앱은 이제 app.getPath('log')를 사용하기 전에 새로운 함수 app.setAppLogPath()를 호출해 로그 경로를 명시적으로 설정해야 한다. #17841

3.x.y 버전 지원 종료

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

앱 피드백 프로그램

우리는 테스트를 위해 앱 피드백 프로그램을 계속 활용하고 있다. 이 프로그램에 참여하는 프로젝트는 자신들의 앱에서 Electron 베타 버전을 테스트하며, 그 대가로 발견한 새로운 버그는 안정 버전 출시 시 우선적으로 처리된다. 프로그램에 참여하거나 더 자세히 알고 싶다면, 프로그램에 관한 블로그 포스트를 확인해 보길 바란다.

다음 단계

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

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

New Electron Release Cadence

· 5 min read
⚡️ 업데이트 (2021-07-14): 더 빠르게 나아갑니다!

2021년 3분기에 Chrome 팀은 릴리스 주기를 단축하여 6주에서 4주로 변경했습니다. Electron도 이에 맞춰 릴리스 주기를 조정했습니다. 더 자세한 정보는 업데이트된 8주 릴리스 주기 블로그 포스트를 참고하세요!

🎉 Electron은 이제 매 12주마다 새로운 주요 안정 버전을 출시합니다! 🎉


⚡️ 이렇게 빠른 이유는?

간단히 말해, Chromium이 계속 업데이트되기 때문에 Electron도 속도를 늦출 수 없다.

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

🚀 왜 12주 주기인가?

크로미엄은 6주마다 새로운 기능, 버그 수정/보안 패치, V8 개선 사항을 포함한 새로운 버전을 출시한다. Electron 사용자들은 이러한 변화를 적시에 반영해 달라는 요구를 분명히 전달했다. 그래서 우리는 안정 버전 출시 주기를 크로미엄 안정 버전 출시 주기의 절반으로 맞췄다. 첫 번째로, Electron v6.0.0은 M76을 포함하며, 2019년 7월 30일에 안정 버전으로 출시될 예정이다. 이 날짜는 Chromium M76의 출시일과 동일하다.

🚧 이 변경 사항이 내 Electron 앱에 어떤 영향을 미칠까?

이제 더 빠르게 새로운 Chromium과 V8의 기능 및 수정 사항을 사용할 수 있다. 무엇보다 중요한 것은, 이러한 새로운 변경 사항이 언제 적용될지 미리 알 수 있기 때문에, 더 나은 정보를 바탕으로 계획을 세울 수 있다는 점이다.

Electron 팀은 최신 3개의 주요 버전을 계속 지원할 예정이다. 예를 들어, 2019년 7월 30일에 v6.0.0이 안정화되면, v6.x, v5.x, v4.x를 지원하고, v3.x는 지원 종료(EOL) 상태가 된다.

💬 앱 피드백 프로그램

Electron의 베타 버전 테스트와 안정화 작업을 지원하기 위해 앱 피드백 프로그램에 참여해 주세요. 이 프로그램에 참여하는 프로젝트는 자신의 앱에서 Electron 베타 버전을 테스트하게 됩니다. 그 대가로 발견한 새로운 버그는 안정 버전 출시 시 우선적으로 처리됩니다.

📝 Electron 릴리스 역사 요약

v3.0.0 이전의 안정 버전 릴리스 결정은 일정을 따르지 않았다. v3.0.0과 v4.0.0부터 프로젝트 내부에 일정을 추가했다. 올해 초, Electron v5.0.0을 위해 처음으로 안정 버전 릴리스 날짜를 공개하기로 결정했다. 안정 버전 릴리스 날짜를 공개하는 것은 전반적으로 긍정적인 반응을 얻었으며, 앞으로도 계속 이 방식을 유지할 예정이다.

이러한 업그레이드 관련 작업을 더 효율적으로 진행하기 위해 Governance 시스템 내에 UpgradesReleases 작업 그룹을 만들었다. 이를 통해 작업의 우선순위를 더 잘 정하고 위임할 수 있게 되었으며, 이는 각 릴리스마다 더 명확해질 것으로 기대한다.

다음은 새로운 릴리스 주기가 Chromium의 릴리스 주기와 어떻게 비교되는지를 보여주는 그래프다:

Electron과 Chromium 버전 비교 선 그래프

📨 궁금한 점이 있다면 info@electronjs.org로 메일을 보내주세요.

Electron 5.0.0

· 8 min read

Electron 팀은 Electron 5.0.0 출시를 발표하게 되어 기쁘게 생각한다. npm install electron@latest 명령어를 통해 설치하거나 릴리스 페이지에서 tarball을 다운로드할 수 있다. 이번 릴리스에는 다양한 업그레이드, 수정 사항, 그리고 새로운 기능이 포함되어 있다. 여러분이 이 기능들을 활용해 무엇을 만들어낼지 기대된다! 이번 릴리스에 대한 자세한 내용은 계속해서 읽어보고, 피드백을 공유해 주길 바란다!

새로운 기능

Electron의 대부분 기능은 Chromium, Node.js, V8의 핵심 컴포넌트를 통해 제공된다. Electron은 이러한 프로젝트와 동기화를 유지하며, 사용자에게 새로운 자바스크립트 기능, 성능 개선, 보안 패치를 제공한다. Electron 5에서는 각 패키지의 주요 버전이 업데이트되었다:

Electron 5는 Electron 전용 API에도 개선 사항을 포함한다. 주요 변경 사항은 아래와 같다. 전체 변경 내역은 Electron v5.0.0 릴리스 노트에서 확인할 수 있다.

Promise 기반 API 변환

Electron 5는 Promise 기반 API 변환 프로젝트를 계속 진행하며, 기존 콜백 기반 API를 Promise 기반으로 전환하고 있다. Electron 5에서 다음 API들이 Promise 기반으로 변환되었다:

  • app.getFileIcon
  • contentTracing.getCategories
  • contentTracing.startRecording
  • contentTracing.stopRecording
  • debugger.sendCommand
  • Cookies API
  • shell.openExternal
  • webContents.loadFile
  • webContents.loadURL
  • webContents.zoomLevel
  • webContents.zoomFactor
  • win.capturePage

macOS 시스템 컬러 접근

macOS 시스템 컬러에 접근하기 위해 systemPreferences에 추가되거나 변경된 함수는 다음과 같다:

  • systemPreferences.getAccentColor
  • systemPreferences.getColor
  • systemPreferences.getSystemColor

프로세스 메모리 정보

현재 프로세스의 메모리 사용량 통계를 얻기 위해 process.getProcessMemoryInfo 함수가 추가되었다.

원격 API에 추가된 필터링 기능

remote API의 보안을 강화하기 위해 새로운 원격 이벤트가 추가되었다. 이제 remote.getBuiltin, remote.getCurrentWindow, remote.getCurrentWebContents, 그리고 <webview>.getWebContents에 대해 필터링을 적용할 수 있다.

BrowserWindow에서 여러 개의 BrowserView 사용하기

이제 BrowserWindow는 동일한 윈도우 내에서 여러 개의 BrowserView를 관리할 수 있다.

주요 변경 사항

패키지된 앱의 기본 동작

이제 패키지된 앱은 기본 앱과 동일하게 동작한다. 앱에 메뉴가 없으면 기본 애플리케이션 메뉴가 자동으로 생성된다. 또한 앱이 window-all-closed 이벤트를 처리하지 않으면 이 이벤트가 자동으로 처리된다.

혼합 샌드박스

이제 혼합 샌드박스 모드가 기본적으로 활성화된다. sandbox: true로 실행된 렌더러는 이제 실제로 샌드박스화되며, 이전에는 혼합 샌드박스 모드도 활성화된 경우에만 샌드박스화되었다.

보안 개선 사항

보안을 강화하기 위해 nodeIntegrationwebviewTag의 기본값이 이제 false로 설정되었다.

스펠체커가 비동기로 변경됨

SpellCheck API는 비동기 결과를 제공하도록 변경되었다.

Deprecations

Electron 5.0.0에서 새롭게 deprecated된 API들이 있으며, 이들은 6.0.0 버전에서 제거될 예정이다:

ARM 및 ARM64용 Mksnapshot 바이너리

ARM 및 ARM64용 네이티브 mksnapshot 바이너리는 더 이상 사용되지 않으며 6.0.0 버전에서 완전히 제거될 예정이다. ARM 및 ARM64 아키텍처용 스냅샷은 x64 바이너리를 사용해 생성할 수 있다.

WebContents의 ServiceWorker API

제거를 대비해 WebContents의 ServiceWorker API를 더 이상 사용하지 않는다.

  • webContents.hasServiceWorker
  • webContents.unregisterServiceWorker

샌드박스된 webContents에서의 자동 모듈 사용

보안성을 강화하기 위해, 아래 나열된 모듈들은 직접 require를 통해 사용하는 방식이 더 이상 권장되지 않는다. 대신, 샌드박스된 webContents 내에서 remote.require를 통해 포함해야 한다:

  • electron.screen
  • child_process
  • fs
  • os
  • path

webFrame Is독립된 세계(Isolated World) API

이전에 사용되던 webFrame.setIsolatedWorldContentSecurityPolicy, webFrame.setIsolatedWorldHumanReadableName, webFrame.setIsolatedWorldSecurityOrigin API는 webFrame.setIsolatedWorldInfo로 통합되어 더 이상 사용되지 않는다.

혼합 샌드박스

enableMixedSandbox--enable-mixed-sandbox 커맨드라인 스위치는 호환성을 위해 여전히 존재하지만, 더 이상 사용되지 않으며 아무런 효과가 없다.

2.0.x 버전 지원 종료

지원 버전 정책에 따라 2.0.x 버전의 지원이 종료되었다.

앱 피드백 프로그램

우리는 테스트를 위해 앱 피드백 프로그램을 계속 활용하고 있다. 이 프로그램에 참여하는 프로젝트들은 자신들의 앱에서 Electron 베타 버전을 테스트하고, 그 대가로 발견한 새로운 버그는 안정화 버전 출시 시 우선적으로 처리된다. 프로그램에 참여하거나 더 알아보고 싶다면 프로그램에 관한 블로그 포스트를 확인해 보길 바란다.

다음 단계

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

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