[Electron] 006. Electron의 주요 구성 요소, 웹 기술을 활용한 UI 개발 (HTML, CSS, JavaScript)

Electron은 현대 웹 기술을 활용하여 데스크탑 어플리케이션을 개발할 수 있는 오픈 소스 프레임워크입니다. 기본적으로 HTML, CSS, JavaScript를 사용하여 크로스 플랫폼 애플리케이션을 만들 수 있도록 설계되었습니다. 본 글에서는 Electron의 주요 구성 요소와 웹 기술을 통해 UI를 개발하는 방법을 자세히 설명하겠습니다.

1. Electron의 주요 구성 요소

Electron은 몇 가지 핵심 구성 요소로 이루어져 있습니다. 각 구성 요소는 애플리케이션의 성능과 기능을 결정짓는 중요한 역할을 합니다.

1.1 Main Process

Main Process는 Electron 애플리케이션의 메인 스레드로, 모든 웹 페이지를 관리하며 Node.js API에 접근할 수 있습니다. 이 프로세스는 브라우저와 유사한 웹 페이지를 실행하는 Renderer Process를 생성하고, 애플리케이션의 생명 주기와 관련된 이벤트를 처리합니다.

const { app, BrowserWindow } = require('electron');

let mainWindow;

app.on('ready', () => {
    mainWindow = new BrowserWindow({
        width: 800,
        height: 600
    });
    mainWindow.loadFile('index.html');
});

1.2 Renderer Process

Renderer Process는 사용자가 볼 수 있는 UI를 담당하는 프로세스입니다. HTML, CSS, JavaScript를 사용하여 시각적으로 보여줘야 할 모든 요소를 처리합니다. 각 Renderer Process는 완전히 독립적으로 실행되며, Node.js API를 사용할 수 있지만, 보안상의 이유로 설정이 필요합니다.

1.3 IPC (Inter-Process Communication)

Main Process와 Renderer Process 간의 통신은 반드시 IPC를 통해 이루어져야 합니다. Electron은 ipcMainipcRenderer 모듈을 제공하여 두 프로세스 간에 메시지를 주고받을 수 있는 기능을 지원합니다.

const { ipcMain } = require('electron');

ipcMain.on('message-from-renderer', (event, arg) => {
    console.log(arg); // Renderer에서 보낸 메시지
});

2. 웹 기술을 활용한 UI 개발

Electron 애플리케이션의 UI는 전통적인 웹 개발 기술을 활용하여 만듭니다. HTML은 구조를 정의하고, CSS는 스타일을 적용하며, JavaScript는 인터렉션을 처리하는 모든 작업을 수행합니다. 아래에서 각각의 기술을 사용한 UI 개발 예제를 알아보겠습니다.

2.1 HTML로 UI 구성하기

HTML은 웹 페이지의 기본 구조를 정의합니다. Electron에서는 index.html 파일을 통해 UI를 설정할 수 있습니다.

예제: 기본 HTML 구조

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>나의 Electron 앱</title>
</head>
<body>
    <h1>안녕하세요, Electron!</h1>
    <button id="myButton">클릭하세요!</button>
</body>
</html>

2.2 CSS로 스타일 적용하기

CSS를 통해 UI의 시각적 요소를 강화할 수 있습니다. 아래와 같이 기본 스타일을 추가할 수 있습니다.

예제: 기본 CSS 스타일

body {
    font-family: Arial, sans-serif;
    background-color: #f0f0f0;
}

h1 {
    color: #333;
}

button {
    padding: 10px 15px;
    background-color: #4CAF50;
    color: white;
    border: none;
    border-radius: 5px;
    cursor: pointer;
}

button:hover {
    background-color: #45a049;
}

2.3 JavaScript로 동적 기능 추가하기

JavaScript를 사용하여 UI의 상호작용을 처리합니다. 예를 들어, 버튼 클릭 시 메시지를 출력하는 기능을 추가할 수 있습니다.

예제: 자바스크립트 이벤트 처리

document.getElementById('myButton').addEventListener('click', () => {
    alert('버튼이 클릭되었습니다!');
});

3. 예제 애플리케이션 만들기

이제까지 설명한 내용을 바탕으로 간단한 Electron 애플리케이션을 만들어 보겠습니다. 이 애플리케이션은 버튼 클릭 시 메인 프로세스에 메시지를 보내고, 그에 대한 응답을 받는 간단한 구조로 할 것입니다.

3.1 프로젝트 구조

아래와 같은 디렉토리 구조로 구성합니다:

디렉토리 구조

my-electron-app/
    ├── package.json
    ├── index.html
    ├── style.css
    └── main.js

3.2 package.json 설정

프로젝트의 메타데이터 및 종속성을 관리하기 위해 package.json 파일을 아래와 같이 작성합니다.

예제: package.json

{
    "name": "my-electron-app",
    "version": "1.0.0",
    "main": "main.js",
    "scripts": {
        "start": "electron ."
    },
    "dependencies": {
        "electron": "^latest"
    }
}

3.3 index.html 파일 작성

이제 HTML 파일을 아래와 같이 작성합니다.

예제: index.html

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>나의 Electron 앱</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <h1>안녕하세요, Electron!</h1>
    <button id="myButton">클릭하세요!</button>

    <script src="renderer.js"></script>
</body>
</html>

3.4 main.js 작성

Main Process를 제어하기 위한 main.js 파일을 작성합니다.

예제: main.js

const { app, BrowserWindow, ipcMain } = require('electron');

let mainWindow;

app.on('ready', () => {
    mainWindow = new BrowserWindow({
        width: 800,
        height: 600
    });
    mainWindow.loadFile('index.html');
});

ipcMain.on('message-from-renderer', (event, arg) => {
    console.log(arg);
    event.reply('reply-from-main', '주신 메시지: ' + arg);
});

3.5 renderer.js 작성

Renderer Process에서 사용할 JavaScript 파일을 작성합니다.

예제: renderer.js

const { ipcRenderer } = require('electron');

document.getElementById('myButton').addEventListener('click', () => {
    ipcRenderer.send('message-from-renderer', '안녕하세요, 메인 프로세스!');
});

ipcRenderer.on('reply-from-main', (event, arg) => {
    alert(arg);
});

4. 결론

Electron을 사용하면 웹 개발에 익숙한 개발자들이 손쉽게 데스크탑 애플리케이션을 개발할 수 있습니다. HTML, CSS, JavaScript를 활용해 시각적이고 기능적인 UI를 구성할 수 있으며, Main Process와 Renderer Process를 통해 효율적으로 애플리케이션의 로직을 관리할 수 있습니다. 본 글에서 소개한 내용을 바탕으로 여러분의 아이디어를 실현하는 데 도움이 되기를 바랍니다.

5. 참고 자료