프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 내일배움단
  • 국비지원
  • 투포인터알고리즘
  • 알고리즘
  • 내일배움카드
  • nomadcoders
  • vanilaJS
  • 코드스테이츠
  • Til
  • JavaScript
  • 비트마스크
  • 자바스크립트비트마스크
  • nomadcoder
  • MySQL
  • 자바스크립트알고리즘
  • 코딩프로젝트
  • 스파르타코딩클럽
  • 자바스크립트
  • 2023 인프콘 후기
  • 모던자바스크립트딥다이브

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

TIL

[TIL] 2024-0109 electron IPC 모듈로 통신하기

2024. 1. 9. 20:30

Facts

- Next.js 로 웹서버에서 띄워주던 UI 를 Electron 내의 renderer 로 옮기는 통합 작업 진행

 

Findings

- Electron 에서 로컬 경로의 이미지를 로드하려면, custom protocol 을 설정해주어야 한다.

그 이유는 일렉트론이 chronium 과 node를 기반으로 하는데 이 두 환경 사이의 상호작용에서 보안 이슈가 발생할 가능성이 있기 때문에 그렇다고 한다. (어떻게 동작하길래 보안 이슈가 발생할 수 있는거지..?)

 

- electron 에서는 main 프로세스와 UI를 띄워주는(브라우저 같은..) renderer 프로세스를 갖는다. 이 두 프로세스 간 통신을 위해서는 IPC 모듈을 사용해야 하는데, 렌더러 프로세스에서 사용할 수 있는 IpcRenderer 와, 메인 프로세스의 IpcMain이 존재한다. 처음에 그냥 아무 렌더러 쪽 코드에서 IpcRender 를 호출했더니, fs 모듈을 읽어올 수 없다는 에러가 발생했다. 그래서 찾아보니, preload 스크립트 파일을 사용해 renderer 실행 전 명령어를 window 에 등록해주고 이를 활용해야 한다. 이 때 preload 에서 contextBridge 를 사용하면 된다.

// preload.ts
const registerIPC = () => {
  contextBridge.exposeInMainWorld('serial', {
    register: () => {
      ipcRenderer.send('register', '레지스터 해보겠다옹~');
    },
  });
};

// main.ts 
// 아래 함수를 윈도우가 로드되기 이전 시점에 호출해서 등록...
function registerMainIPC(port: SerialPort) {
  ipcMain.on('register', () => {
    port.write(Buffer.from(LALALOOP_DISH_CMD.motorDown), function (error) {
      if (error) {
        console.error(`Error on serial`, error.message);
      }
      `레지스터다옹~.`;
    });

    port.flush();
  });
}

// renderer 내에서...
onRegister = async () => {
window.serial.onRegister();
};

 

- 카메라(디바이스)는 어떻게 연동해야 하는가...? 그건 내일 다시 알아보자...

 

Feedback

- 회사에서는 감정이 드러나지 않게 잘 조절합시다... 이미 잘 하고 있다고 생각하지만...

저작자표시 (새창열림)

'TIL' 카테고리의 다른 글

[TIL] 2024-0123 : this 바인딩  (0) 2024.01.24
[TIL] 2024-0110  (1) 2024.01.11
[TIL] 2023-1227 Nest.js 공부하는 중  (4) 2023.12.27
[TIL] 2023-1208 노션 API 활용하기... 근데 그냥 삽질 푸념...  (0) 2023.12.08
[TIL] 2023-1207  (0) 2023.12.07
    'TIL' 카테고리의 다른 글
    • [TIL] 2024-0123 : this 바인딩
    • [TIL] 2024-0110
    • [TIL] 2023-1227 Nest.js 공부하는 중
    • [TIL] 2023-1208 노션 API 활용하기... 근데 그냥 삽질 푸념...
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바