반응형

일렉트론의 거대한 용량(뭐만 하면 100mb는 기본으로 먹는;;)이 제일 불만이다. 그렇다고 타우리를 써보기엔 러스트를 할 줄 모른다. ㅠㅠ 그러다가 두 달 전쯤에 디노 데스크탑이라는 (대충 deno에 내장된 일렉트론) 기능이 추가되었다는 소식을 들었는데 한 달 전쯤에 deno 공부도 해볼 겸 디노 데스크탑으로 뭘 만들어볼까 생각하다가 내가 맨 처음으로 만든 일렉트론 프로그램인 SOOP 스코프를 한번 이식해 봤다.

Deno Desktop은 Deno 프로젝트를 데스크톱 앱으로 만들어주는 기능이다. nodejs와는 다르게 deno는 typescript를 네이티브로 지원하고, 크로미움을 통째로 내장하는 대신에 시스템 웹뷰를 사용해서 바이너리 용량이 작다고 한다.(설정을 바꿔서 일렉트론처럼 크로미움을 내장시킬 수 있다. 대신 이러면 용량은 일렉트론이랑 도긴개긴이다.) 특이한 기능으로 Vite, Next.js, Astro 등의 프레임워크를 자동 감지해서 추가 코드 하나 없이 명령어 하나로 바로 데스크톱 앱으로 실행할 수 있다. 하지만 이러면 후술할 바인딩을 사용할 수 없는데 그럼 대체 무슨 의미가.. pwa처럼 쓰는 건가?

프론트엔드와 백엔드가 서로 통신(바인딩)할 때 일렉트론은 ipc를 사용하지만, 디노 데스크톱은 인프로세스 채널을 사용한다고 한다. 사용해 본 입장에서는 딱히 무슨 차이인지 모르겠다. 뭐. 코드양이 더 적긴 한데..

오히려 디노 특유의 권한 시스템이 적응하기가 어려웠다. 무조건 다 막혀있고 필요한 권한을 일일이 열어줘야 한다. 라이브러리를 쓰는데 뭐 열어줘야 할지 모르니;; 이건 코덱스 도움으로 해결함.

일렉트론은 로컬 웹페이지를 띄우는 게 기본이고 따로 API가 필요하면 따로 라이브러리를 활용해서 웹서버를 띄워야 하지만, 디노 데스크톱은 웹서버로 페이지를 띄우는 게 디폴트라 API가 필요하면 여기에 붙이면 된다. 다만 디노 데스크탑에서 띄우는 웹서버는 외부 접근이 막혀있다. 사실 이 문제 때문에 다른 일렉트론 앱들은 못 옮기고 soop-scope만 옮겨 본것.. SOOP 채팅 수집기SOOP 투표 도우미는 오버레이 기능 때문에 웹서버의 외부 접근이 필수다. 근데 디노 데스크탑에서는 웹서버의 외부 접근이 막혀있고 허용하는 방법도 없다고 한다.

근데 막상 deno desktop으로 이식하고 빌드해 봤더니

일렉트론 앱 - 단일 exe - 99.3MB
디노 데스크탑 앱 - exe 하나, dll 하나 - 89.6MB

로 그렇게 극적인 차이가 없다. 겨우 10mb 차이.. 물론 일렉트론의 단일 exe는 압축이 한번 들어간 상태고 비압축 상태의 용량은 408MB에 달한다. 디노 데스크탑은 그냥 저 두 파일을 zip으로 압축하면 33.4MB가 된다.

용량 때문에 이식한 건데 매우 실망스러운 결과였다.

게다가 내가 한 달 전에 이식했을 때는 윈도우 웹뷰 백엔드에 버그가 있었는지 빌드하고 실행이 안 됐었다.(백엔드를 크로미움으로 바꾸면 실행 잘됨) 이번에 오랜만에 확인해 보니까 deno가 버전업 됐길래 다시 테스트해 보고, 해결이 됐길래 이 글을 쓰는 거다.

리포지토리는 이전과 똑같다. 일렉트론 버전의 예전 코드는 electron 브랜치를 만들어 두었으니, 거기를 보면 된다.

https://github.com/joyfuI/soop-scope

 

GitHub - joyfuI/soop-scope: SOOP 시청자 역스코프 프로그램

SOOP 시청자 역스코프 프로그램. Contribute to joyfuI/soop-scope development by creating an account on GitHub.

github.com

다운로드: https://github.com/joyfuI/soop-scope/releases/download/deno/soop-scope.zip

deno desktop은 왜 아이콘을 넣어도 적용되지 않는가...

반응형

+ Recent posts