Front-Language

[Electron] ipcRenderer? 왜 중앙화해야 하지?

200scs 2025. 3. 17. 21:26

Electron의 ipcRenderer와 중앙화 전략

ipcRenderer란?

처음 ipcRenderer를 접했을 때 이런 생각이 들었다.

💡 renderer는 뭔가 렌더링 해주는 것 같다.. 근데 IPC는 뭐지?

**IPC(Inter-Process Communication)**는 프로세스 간 통신을 말한다. 즉, 서로 다른 프로세스 간에 데이터를 교환하고 통신하는 메커니즘이다. 운영체제에서 프로세스들은 보안과 안정성을 위해 서로 격리되어 있기 때문에, IPC는 프로세스 간 경계를 넘어 안전하게 통신할 수 있게 해준다.

💡 프로세스 간 통신… 근데 renderer..?? 뭔가 내가 아는 renderer의 의미가 아닌가?

ipcRenderer는 ElectronJS 앱에서 사용되는 IPC 모듈이다. Renderer 프로세스(웹 페이지)에서 Main 프로세스(Node.js)로 통신할 수 있게 해주는 인터페이스다.

💡 Renderer 프로세스??

Renderer 프로세스는 Electron 애플리케이션에서 웹 페이지를 표시하고 실행하는 프로세스다. Chromium 브라우저 엔진을 기반으로 하며, HTML, CSS, JavaScript로 작성된 UI를 렌더링하고 실행하는 역할을 담당한다. 각 웹 페이지나 웹뷰는 별도의 Renderer 프로세스에서 실행되어 메인 프로세스와 격리된다.

웹 페이지의 JavaScript에서 Node.js의 기능이나 시스템 리소스에 접근할 때 ipcRenderer가 사용된다.

리소스 접근 예시

  • 시리얼 포트 통신
  • 파일 시스템 접근
  • 하드웨어 제어
  • 등…

ipcRenderer 중앙화

💡 ipcRenderer를 사용하다보니 이것도 한 곳에서 관리하는 게 좋지 않을까? 각 사용처에서 import해서 사용하지 않고 중앙화하는 게 좋아보이는데, 이렇게 하는 건지 맞는지 의문이 생겼다.

GPT도 돌려보고 블로그도 찾아 본 결과, ipcRenderer를 중앙화하는 것의 이점을 다음과 같이 6가지로 정리해봤다.

1. 의존성 관리 간소화

애플리케이션 전체에서 IPC 호출 방식이 일관되어 의존성 관리가 편리해진다.
예시: 여러 컴포넌트에서 각각 electron을 import하는 대신, ipcService.js만 import하면 된다.

2. 테스트 용이성

중앙화된 IPC 모듈은 테스트 시 쉽게 모킹할 수 있어 단위 테스트가 간편해진다.
예시: 실제 IPC 호출 없이 jest.mock('./ipcService')로 모든 IPC 통신을 모킹할 수 있다.

3. 코드 재사용 및 중복 방지

공통 IPC 로직을 한 곳에서 관리하여 코드 중복을 줄인다.
예시: 파일 저장 기능이 필요한 여러 컴포넌트에서 동일한 saveFile 함수를 재사용할 수 있다.

4. 추상화 계층 제공

Low-level IPC 호출을 도메인 중심의 함수로 감싸 코드 가독성을 높이고 비즈니스 로직에 집중할 수 있다.
예시: ipcRenderer.send('file:save', data) 대신 fileService.saveUserDocument(data)와 같이 의미 있는 함수명을 사용한다.

5. 버전 호환성 관리

Electron 버전이 업데이트될 때 API 변경사항을 한 곳에서만 처리하면 된다.
예시: Electron v10에서 v11로 업그레이드 시 deprecated된 API는 중앙 모듈에서만 변경하면 된다.

6. 보안 강화

중앙화된 서비스에서 IPC 통신의 입력 검증과 보안 검사를 일관되게 적용할 수 있다.
예시: 모든 파일 시스템 접근 요청에 대해 경로 검증이나 사용자 권한 확인을 중앙에서 처리한다.

결론

Electron 애플리케이션에서 ipcRenderer를 중앙화하여 관리하는 것은 코드 유지보수성, 테스트 용이성, 보안 관리 등 여러 측면에서 이점을 제공한다. 특히 애플리케이션의 규모가 커질수록 이런 중앙화 전략은 더욱 중요해진다. 개발 초기 단계부터 ipcRenderer를 중앙화된 서비스로 구성하는 게 좋은 접근 방식이라고 생각한다.