Skip to main content

Ecosystem 2023 Recap

· 10 min read

2023년 Electron 개발자 생태계의 개선과 변화를 돌아보며


지난 몇 달 동안, 우리는 Electron 앱의 개발자 경험을 한층 더 강화하기 위해 Electron 생태계 전반에 걸쳐 다양한 변화를 준비해 왔다. Electron HQ에서 직접 전해드리는 최신 업데이트를 간략히 소개한다.

Electron Forge 7 그리고 그 이후

Electron Forge 7 — Electron 애플리케이션을 패키징하고 배포하기 위한 올인원 도구의 최신 메이저 버전 — 이 출시되었다.

Forge 6가 v5에서 완전히 재작성된 것과 달리, v7은 범위가 더 작지만 여전히 몇 가지 주요 변경 사항이 포함되어 있다. 앞으로는 주요 변경이 필요할 때마다 Forge의 메이저 버전을 계속 출시할 계획이다.

더 자세한 내용은 GitHub의 전체 Forge v7.0.0 변경 로그를 참고한다.

주요 변경 사항

  • macOS notarization을 위해 notarytool로 전환: 2023-11-01부터 Apple은 기존의 altool을 더 이상 지원하지 않으며, 이번 릴리스에서는 Electron Forge에서 완전히 제거했다.

  • 최소 Node.js 버전을 v16.4.0으로 상향: 이번 릴리스부터는 Node.js 버전 16.4.0 이상이 필수 요구 사항이다.

  • electron-prebuiltelectron-prebuilt-compile 지원 중단: electron-prebuiltElectron의 npm 모듈 초기 이름이었지만, v1.3.1부터 electron으로 대체되었다. electron-prebuilt-compile은 향상된 개발자 경험(DX) 기능을 제공하는 대안이었으나, 프로젝트로 더 이상 유지되지 않았다.

주요 내용

  • Google Cloud Storage publisher: 정적 자동 업데이트를 더 잘 지원하기 위해, Electron Forge가 이제 Google Cloud Storage에 직접 게시할 수 있게 되었다!
  • ESM forge.config.js 지원: Electron Forge가 이제 ESM forge.config.js 파일을 지원한다. (추가로, Electron 28에서 ESM 진입점 지원을 기대해도 좋다.)
  • Makers의 병렬 실행: Electron Forge 6에서 Makers는 ✨레거시✨ 이유로 순차적으로 실행되었다. 이후 Make 단계의 병렬화를 테스트한 결과 부작용 없이 성공했기 때문에, 같은 플랫폼에서 여러 타겟을 빌드할 때 속도가 빨라질 것이다!
감사합니다!

🙇 GCS Publisher와 Forge 구성에서의 ESM 지원을 위해 기여해 주신 **mahnunchik**에게 큰 감사를 드립니다!

더 나은 정적 저장소 기반 자동 업데이트

Squirrel.Windows와 Squirrel.Mac은 Electron의 내장 autoUpdater 모듈을 지원하는 플랫폼별 업데이트 기술이다. 두 프로젝트는 두 가지 방법으로 자동 업데이트를 제공한다:

  • Squirrel과 호환되는 업데이트 서버
  • 정적 저장소 프로바이더(예: AWS, Google Cloud Platform, Microsoft Azure 등)에 호스팅된 매니페스트 URL

업데이트 서버 방식은 전통적으로 Electron 앱에 권장되는 접근 방식이었으며, 업데이트 로직을 추가로 커스터마이징할 수 있다. 하지만 이 방식은 주요 단점이 있다. 클로즈드 소스 앱인 경우 자체 서버 인스턴스를 유지해야 한다.

반면, 정적 저장소 방식은 항상 가능했지만 Electron 내에서 문서화되지 않았고, Electron 도구 패키지 전반에서 지원이 미흡했다.

@MarshallOfSound의 훌륭한 작업 덕분에 서버리스 자동 앱 업데이트가 크게 간소화되었다:

  • Electron Forge의 Zip 및 Squirrel.Windows 메이커를 이제 autoUpdater와 호환되는 업데이트 매니페스트를 출력하도록 구성할 수 있다.
  • update-electron-app의 새로운 메이저 버전(v2.0.0)은 이제 생성된 매니페스트를 update.electronjs.org 서버의 대안으로 읽을 수 있다.

메이커와 퍼블리셔가 클라우드 파일 저장소에 업데이트 매니페스트를 업로드하도록 구성되면, 몇 줄의 설정만으로 자동 업데이트를 활성화할 수 있다:

const { updateElectronApp, UpdateSourceType } = require('update-electron-app');

updateElectronApp({
updateSource: {
type: UpdateSourceType.StaticStorage,
baseUrl: `https://my-manifest.url/${process.platform}/${process.arch}`,
},
});
추가 자료

📦 더 알고 싶다면? 자세한 가이드는 Forge의 자동 업데이트 문서를 참고하자.

@electron/ 확장 생태계

Electron이 처음 시작되었을 때, 커뮤니티는 Electron 앱을 개발하고, 패키징하며, 배포하는 과정을 개선하기 위해 다양한 패키지를 출시했다. 시간이 지나면서 이러한 패키지 중 상당수가 Electron의 GitHub 조직으로 통합되었고, 핵심 팀이 유지보수를 담당하게 되었다.

2022년부터는 이러한 퍼스트파티 도구들을 npm의 @electron/ 네임스페이스 아래로 통합하기 시작했다. 이 변경으로 인해 electron-foo로 불리던 패키지들은 이제 npm에서 @electron/foo로, electron/electron-foo로 명명되던 저장소들은 GitHub에서 electron/foo로 변경되었다. 이러한 변화는 퍼스트파티 프로젝트와 사용자 프로젝트를 명확히 구분하는 데 도움을 준다. 여기에는 다음과 같이 널리 사용되는 패키지들이 포함된다:

  • @electron/asar
  • @electron/fuses
  • @electron/get
  • @electron/notarize
  • @electron/osx-sign
  • @electron/packager
  • @electron/rebuild
  • @electron/remote
  • @electron/symbolicate-mac
  • @electron/universal

앞으로 출시될 모든 퍼스트파티 패키지도 @electron/ 네임스페이스 아래에 포함될 예정이다. 이 규칙에는 두 가지 예외가 있다:

  • Electron 코어는 계속해서 electron 패키지로 출시된다.
  • Electron Forge는 모든 모노레포 패키지를 @electron-forge/ 네임스페이스 아래에 출시한다.
스타 요청

⭐ 이 과정에서 실수로 electron/packager 저장소를 비공개로 전환했는데, 이로 인해 GitHub 스타 카운트가 초기화되는 부작용이 발생했다(초기화 전에는 9000개 이상이었다). Packager를 활발히 사용 중이라면 ⭐ 스타 ⭐를 눌러주시면 감사하겠다!

@electron/windows-sign 소개

2023년 6월 1일부터 업계 표준이 변경되어 Windows 코드 서명 인증서의 키를 FIPS 호환 하드웨어에 저장해야 한다. 이로 인해 CI 환경에서 빌드와 서명을 진행하는 앱들은 코드 서명 과정이 훨씬 복잡해졌다. 기존의 많은 Electron 도구들은 인증서 파일과 비밀번호를 설정 파라미터로 받아 하드코딩된 로직을 통해 서명을 시도했기 때문이다.

이 문제는 Electron 개발자들에게 공통적인 어려움으로 여겨졌다. 그래서 우리는 macOS에서 @electron/osx-sign가 하는 것처럼 Windows 코드 서명을 독립적인 단계로 분리하는 더 나은 해결책을 개발했다.

현재 이 패키지는 Electron Forge 툴체인에 완전히 통합될 예정이지만, 지금은 독립적으로 사용할 수 있다. npm install --save-dev @electron/windows-sign 명령어를 통해 설치할 수 있으며, 프로그래밍 방식이나 CLI를 통해 활용할 수 있다.

레포지토리의 이슈 트래커에서 여러분의 피드백을 기다린다!

다음은 무엇을 준비할까?

다음 달부터 연말 조용한 기간에 들어간다. 이 기간 동안 2024년에 더 나은 Electron 개발 환경을 만들기 위한 방법을 고민할 예정이다.

개선하고 싶은 부분이나 추가했으면 하는 기능이 있다면 알려주기 바란다!