[Electron] 010. Electron과 Node.js 통합하기, 파일 시스템 접근, API 호출 등의 예시

1. Electron 소개

Electron은 GitHub에서 개발한 오픈소스 프레임워크로, 웹 기술(HTML, CSS, JavaScript)을 사용하여 데스크톱 애플리케이션을 만들 수 있게 해줍니다. Electron은 Chromium과 Node.js를 결합하여 웹 애플리케이션을 데스크톱으로 변환하는 데 필요한 모든 기능을 제공합니다. 이로 인해 개발자는 웹 애플리케이션에서 사용되던 경험을 그대로 데스크톱 애플리케이션으로 이어갈 수 있습니다.

2. Node.js란 무엇인가?

Node.js는 이벤트 기반의 비동기 I/O 모델을 사용하는 JavaScript 런타임 환경입니다. 이는 서버사이드 애플리케이션 개발에 적합하며, 효율적이고 확장 가능한 네트워크 애플리케이션을 만드는 데 사용됩니다. Node.js는 다양한 npm 패키지를 통해 손쉽게 기능을 확장할 수 있는 장점이 있습니다.

3. Electron과 Node.js 통합의 필요성

Electron 애플리케이션에서 Node.js를 사용하는 이유는 다음과 같습니다:

  • 파일 시스템 접근: Node.js의 fs 모듈을 사용하여 사용자의 파일 시스템에 접근할 수 있습니다.
  • API 호출: Node.js의 네트워킹 기능을 이용하여 외부 API를 호출하고 데이터를 처리할 수 있습니다.
  • 모듈화: 다양한 npm 모듈을 활용하여 애플리케이션의 기능을 쉽게 확장할 수 있습니다.

4. Electron 프로젝트 설정하기

Electron 프로젝트를 설정하는 과정은 다음과 같습니다:

  1. Node.js 설치: https://nodejs.org/ 에서 Node.js를 다운로드하고 설치하세요.
  2. 새 폴더 생성: 터미널을 열고 프로젝트를 생성할 새 폴더를 만듭니다.
  3. npm 초기화: npm init -y 명령어를 실행하여 package.json 파일을 생성합니다.
  4. Electron 설치: npm install electron --save-dev 명령어로 Electron을 설치합니다.

이제 기본적인 Electron 프로젝트가 준비되었습니다. 다음으로, main.js 파일을 생성하고 기본 코드를 작성합니다.

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

function createWindow () {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            nodeIntegration: true
        }
    });

    win.loadFile('index.html');
}

app.whenReady().then(createWindow);
                
            

5. 파일 시스템 접근하기

Node.js의 fs 모듈을 사용하여 파일 시스템에 접근하는 방법에 대해 살펴보겠습니다. 다음 예시는 파일을 읽고 쓰는 방법을 보여줍니다.

                
const fs = require('fs');

// 파일쓰기
fs.writeFile('example.txt', 'Hello, world!', (err) => {
    if (err) throw err;
    console.log('파일이 저장되었습니다.');
});

// 파일읽기
fs.readFile('example.txt', 'utf-8', (err, data) => {
    if (err) throw err;
    console.log('파일 내용:', data);
});
                
            

위의 코드는 ‘example.txt’라는 파일을 생성하고 ‘Hello, world!’라는 내용을 작성합니다. 이후, 해당 파일을 읽고 내용을 콘솔에 출력합니다.

6. API 호출하기

Node.js의 http 모듈 또는 axios와 같은 외부 라이브러리를 사용하여 API를 호출할 수 있습니다. 아래 예시는 axios를 사용하여 외부 API에서 데이터를 가져오는 방법을 보여줍니다.

                
const axios = require('axios');

// API 호출
axios.get('https://jsonplaceholder.typicode.com/posts')
    .then(response => {
        console.log('데이터:', response.data);
    })
    .catch(error => {
        console.error('에러발생:', error);
    });
                
            

위 코드는 JSONPlaceholder라는 무료 API를 호출하여 게시물 목록을 가져오는 예시입니다. 호출이 성공하면 데이터가 콘솔에 출력됩니다.

7. 사용자 인터페이스(UI)와의 통합

사용자가 버튼을 클릭하면 파일을 읽거나 API를 호출하는 등의 작업을 수행하는 UI를 만들어 보겠습니다. 다음은 index.html의 예시 코드입니다.

                




    
    
    Electron과 Node.js 통합


    

Electron과 Node.js 통합 예제





이 HTML 파일에서는 두 개의 버튼이 있으며, 각각 파일을 읽거나 API를 호출하는 이벤트를 트리거합니다. 다음으로 main.js에서 IPC를 설정하여 메인 프로세스와 렌더러 프로세스 간의 통신을 구현해야 합니다.

8. IPC(Inter-Process Communication) 설정하기

Electron 내의 IPC를 사용하면 메인 프로세스와 렌더러 프로세스 간의 통신이 가능합니다. 아래 코드는 파일 읽기 및 API 호출을 위한 IPC를 설정하는 예시입니다.

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

// 파일읽기
ipcMain.handle('read-file', async () => {
    return new Promise((resolve, reject) => {
        fs.readFile('example.txt', 'utf-8', (err, data) => {
            if (err) return reject(err);
            resolve(data);
        });
    });
});

// API 호출
ipcMain.handle('call-api', async () => {
    try {
        const response = await axios.get('https://jsonplaceholder.typicode.com/posts');
        return response.data;
    } catch (error) {
        throw error;
    }
});

// BrowserWindow 설정
function createWindow() {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false
        }
    });

    win.loadFile('index.html');
}

app.whenReady().then(createWindow);
                
            

메인 프로세스에서 IPC를 설정하여 파일을 읽고 API를 호출하는 기능을 구현했습니다. 이제 사용자가 HTML 페이지에서 버튼을 클릭하면 메인 프로세스의 코드를 통해 결과를 가져올 수 있습니다.

9. 결론 및 권장사항

Electron과 Node.js의 통합은 웹 기술을 사용하여 강력하고 기능적인 데스크톱 애플리케이션을 만드는 강력한 방법입니다. 파일 시스템 접근과 API 호출을 통해 다양한 기능을 구현할 수 있으며, Node.js 모듈을 활용하여 애플리케이션의 기능을 확장할 수 있습니다.

개발하는 동안 보안과 사용성을 항상 염두에 두어야 합니다. 특히, 사용자 파일 시스템에 접근하는 경우에는 적절한 권한을 요청하고 사용자 동의를 받는 것이 중요합니다. 또한, 외부 API와의 통신에서는 신뢰할 수 있는 Https 프로토콜을 사용하여 데이터 전송의 안전성을 확보해야 합니다.

Electron을 사용하여 애플리케이션을 배포할 때는, 적절한 빌드 툴을 사용하여 다양한 운영 체제에 맞는 패키지를 생성하는 방법도 고려해야 합니다.

© 2023 Electron 개발자들