본문으로 바로가기

파일의 IT 블로그

  1. Home
  2. 프로그래밍/Talk
  3. 일렉트론으로 만든 프로그램은 메모리 비용을 얼마나 차지할까?

일렉트론으로 만든 프로그램은 메모리 비용을 얼마나 차지할까?

· 댓글개 · KRFile

최근에 프로그램을 하나 만들었습니다. 바로 디시 글 초고속 검색기. 일렉트론 + 타입스크립트 + Vue로 만들어서 디자인도 깔끔하고 디시글 검색 속도도 극적으로 개선해서 꽤나 마음에 드는 성과입니다. 이에 관해 글을 많이 올렸으니 아마 아실 분들은 아실꺼라고 생각합니다.

 

그럼에도.. 이 프로그램을 돌리면서 가장 문제되는 점은 미친듯한 램 사용률입니다.  Promise.all() 로 빡센 네트워크 I/O 비동기 작업을 돌리는 순간 저렇게 램 사용률이 끝도 없이 올라갑니다 ㅎ;

 

사실 이건 일렉트론의 문제라기보단 정확히는 Node.js 런타임의 문제 같습니다. 일렉트론으로 만든 앱 여러가지를 써봤는데 (VSCode, Discord, 지금은 망한 Twitch PC Client 등등) 일렉트론으로 만든 앱은 기본 크로미움 엔진이 돌아감에 따라 200~300MB를 차지하고, 여기 안에서 또 자바스크립트로 빡센 작업을 돌리면 Node.js 런타임이 메모리를 미친듯이 빨아먹으면서 램을 먹는 괴물이 됩니다.

 

특히 일렉트론으로 만들지 않아도 Promise.all로 Node.js에서 빡센 네트워크 비동기 작업을 돌리면 메모리를 정말 엄청나게 빨아먹더라구요. 근데 일렉트론으로까지 포장해버리니깐 Node.js 런타임 메모리 비용 + 일렉트론 메모리 비용 + 뷰 렌더링 비용까지 엄청난 컴퓨팅 비용이 소모되는 것이죠..

 

일렉트론에선 기본적으로 힙 영역 메모리 제한이 걸려있으며, 사용하는 메모리가 2~3GB를 넘어서는 순간 프로그램이 튕기도록 설정되어 있습니다. 그래서 제 디시 글 검색기로 아주 빡센 검색 작업을 돌리면 (글 1000만개 이상에서 모두 검색) 일렉트론의 메모리 제한 때문에 검색중에 프로그램이 그냥 튕겨버리는 문제가 있습니다.

 

사실 이 메모리 문제를 해결하는 뚜렷한 방법은 생각하지 못했습니다. 그냥 일렉트론 메모리 제한을 풀어버려야 된다는 방법정도..? 이러면 게임 마냥 혼자서 순간적으로 메모리를 10GB 이상 먹는 불상사까지 일어날 수 있으나 어쨌던 검색만 끝나면 Promise.all의 대규모 비동기 작업은 끝나니 GC에 의해 메모리가 정리되고,

 

다음과 같이 메모리가 여타 다른 일렉트론 앱과 비슷하게 정상화 되는 모습을 볼 수 있습니다.

사실 오늘은 이런 글을 쓰려고 한게 아니구요. 오늘은 일렉트론으로 만든 앱들이 한화 (돈) 로 얼마나 메모리 비용을 차지하는지 아주 대충 계산해보려고 합니다.  이유는 그냥 갑자기 호기심이 생겨서 그렇습니다.

 

일렉트론의 최악 단점이 컴퓨터 자원을 너무 많이 소모하는 것이라서요. 옛날 C나 C++ 로 프로그램을 짜던 시절엔 상상도 못할 정도로 자원을 차지하는 프레임워크 입니다. 컴퓨터 H.W 성능이 날이 갈수록 향상중임을 그대로 보여주고 있는 프레임워크죠.

 

어쨌던.. 재미삼아 일렉트론이 컴퓨터 자원을 돈으로 얼마나 먹고 있는지 계산해보도록 하겠습니다.

 

일렉트론의 메모리 비용 계산

일렉트론으로 잘 만들어진 Discord, VSCode 와 같은 프로덕션 프로그램을 기준으로 메모리 사용률은 IDLE 상태 기준에서 250~350MB가 됩니다. 아무 일을 안하고 있어도 기본 300MB 정도는 차지한다고 칩시다.

 

그리고 빡센 작업을 돌리면 1GB~2GB 정도까지 상승합니다. 물론 제가 만든 프로그램의 경우엔 아주 빡세게 돌리면 일렉트론의 램 제한 상한선을 뚫어버리고 프로그램이 터져버립니다.

 

정리해보자면 IDLE시는 일렉트론으로 만든 앱들은 평균적으로 RAM 300MB, 빡센 작업을 돌리면 RAM을 무한정 사용함을 알 수 있습니다. (근데 이건 다른 프로그램도 마찬가지죠. 빡세게만 돌리면 어떤 프로그램이던 컴퓨터의 전체 램을 차지하도록 실행시킬 수 있습니다.)


IDLE 시에 기본적으로 차지하는 일렉트론 앱의 메모리 사용률을 기본 비용이라고 정의하고,

빡센 작업을 돌리는 것은 일렉트론의 기본 램 제한률은 3GB 정도로 잡아,

일렉트론 앱이 램을 3GB 사용하는 것을 최대 비용이라고 정의해보겠습니다.

 

또한 가상메모리는 계산 범주에 넣지 않고 실제 리얼 DRAM 값으로만 계산을 하도록 하겠습니다.

 

사진 출처 - 다나와

현재 램 값이 많이 싸졌습니다. 램이 MB당 얼마인지 먼저 계산해보겠습니다. 다나와에선 이렇게 친절하게 1GB당 얼마인지 계산을 해서 보여줍니다. 현재 많이 팔리는 삼성전자 시금치 램, 8GB를 기준으로 기가당 2473원 입니다. 대충 어림잡아 1GB를 2500원으로 계산할 수 있습니다.

 

1GB는 1024MB니깐 1024MB 당 2500원 입니다.

이에 따라 1MB는 2500  / 1024  = 2.4원이네요.

 

기본 비용 계산

IDLE시 일렉트론이 기본적으로 차지하는 메모리 사용률은 약 300MB 입니다.

위에서 1MB를 2.4원이라고 계산했으므로 300MB는 2.4 * 300 = 720원 이네요.

기본적으로 일렉트론 앱 하나당 그냥 돌리면 720원 정도라고 생각하면 되겠군요.

 

최대 비용 계산

일렉트론 앱이 램을 3GB만큼 땡겨쓰고 있을때 계산입니다.

1GB당 2500원으로 계산하여 3GB는 7500원이 되겠네요.

일렉트론으로 좀 빡센 작업을 돌리면 7500원까지 값이 오른다고 생각해볼 수 있겠습니다.

 

오늘의 결론

- 램 값이 비싸도 솔직히 일렉트론 앱이 많이 비싼건 사실이다

- 게임 제외 대부분 메모리를 차지하는건 크롬과, 일렉트론으로 만든 프로그램들임.

 

배그가 유행하던 옛날에는 DDR4 8GB가 8~9만원 하던 시절도 있었습니다. 그러나 이제는 8GB 램이 2만원입니다.. 아마 세월이 지나면 지날수록 메모리 가격은 더 싸지겠죠

 

DDR5가 제대로 상용화되면 모르겠다만 저도 32GB 램을 쓰고 있는 입장에선 일반적으로 컴퓨터를 사용하면 램이 상당히 남아 돕니다. 일렉트론 앱 안에서 빡센 작업만 돌리지 않는다면 그래도 어느정도 돌려볼만은 하지 않나 싶네요..

 

언어의 흥망성쇠는 대부분 제단빨인데 자바스크립트 (Node.js) 의 경우 마이크로소프트에서 적극적으로 미는 타입스크립트가 있고 또 구글에서는 우수한 자바스크립트 실행기인 크롬과 V8 엔진이 있죠. V8 엔진만 잘 따와서 빚어낸게 Node.js 구요. 

 

애초에 자바스크립트 자체가 구글이랑 마이크로소프트에서 적극적으로 밀어주는 형태다보니 크롬 엔진은 말 할 것도 없고.. 일렉트론의 전망 자체는 밝다고 볼 수 있겠습니다. 근데 메모리 사용률좀 어떻게 해줬으면 좋겠네요 크로미움은 C나 C++로 만들었다고 하는데 그래도 이렇게 메모리를 많이 쓴다고..? ㅠ

SNS 공유하기
💬 댓글 개
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.