본문 바로가기

언어/Node.js

[ Node.js ] SQLite 연동하기

반응형

 

 

Node.js에서 SQLite3를 연동하여 사용하려면, SQLite3 데이터베이스를 다룰 수 있는 Node.js 모듈을 설치하고, 이를 사용하여 데이터베이스를 연결하고, 쿼리를 실행하는 방법을 알아야 합니다. SQLite3는 파일 기반의 경량 SQL 데이터베이스 엔진으로, Node.js 환경에서 간편하게 사용할 수 있습니다. 아래는 Node.js에서 SQLite3를 연동하고 사용하는 방법을 단계별로 설명한 가이드입니다.

1. 프로젝트 설정 및 SQLite3 설치

먼저, Node.js 프로젝트를 설정하고 sqlite3 모듈을 설치합니다.

  1. 프로젝트 디렉토리 생성 및 초기화
mkdir my-sqlite-project
cd my-sqlite-project
npm init -y

이 명령어는 my-sqlite-project라는 디렉토리를 생성하고, 해당 디렉토리에서 기본 package.json 파일을 생성합니다.

  1. SQLite3 모듈 설치
npm install sqlite3

이 명령어는 sqlite3 모듈을 설치하여, SQLite3 데이터베이스와 상호작용할 수 있도록 합니다.

2. SQLite3 데이터베이스 연결

이제, Node.js 코드에서 SQLite3 데이터베이스에 연결하는 방법을 알아보겠습니다.

데이터베이스 연결 코드 작성

프로젝트 루트 디렉토리에 app.js 파일을 생성하고, 다음과 같이 코드를 작성합니다:

const sqlite3 = require('sqlite3').verbose();

// SQLite 데이터베이스 파일 생성 또는 연결
let db = new sqlite3.Database('./my-database.db', (err) => {
    if (err) {
        console.error('Failed to connect to the database:', err.message);
        return;
    }
    console.log('Connected to the SQLite database.');
});

위 코드에서 sqlite3.Database 생성자는 데이터베이스 파일에 연결합니다. 파일이 존재하지 않으면 새로 생성합니다.

3. 데이터베이스 작업 수행

이제 데이터베이스에 테이블을 생성하고, 데이터를 삽입하고, 조회하는 작업을 수행해보겠습니다.

  1. 테이블 생성
// 테이블 생성
db.run(`CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT NOT NULL UNIQUE
)`, (err) => {
    if (err) {
        console.error('Failed to create table:', err.message);
        return;
    }
    console.log('Table created successfully.');
});

위 코드는 users라는 테이블을 생성합니다. 테이블에는 id, name, email이라는 세 개의 필드가 있으며, id는 자동 증가하는 기본 키로 설정됩니다.

  1. 데이터 삽입
// 데이터 삽입
db.run(`INSERT INTO users (name, email) VALUES (?, ?)`, ['John Doe', 'john@example.com'], function(err) {
    if (err) {
        console.error('Failed to insert data:', err.message);
        return;
    }
    console.log(`A row has been inserted with rowid ${this.lastID}`);
});

이 코드는 users 테이블에 새 사용자 데이터를 삽입합니다. ?는 삽입할 값의 자리 표시자로, 두 번째 인수 배열로 실제 값을 전달합니다.

  1. 데이터 조회
// 데이터 조회
db.all(`SELECT * FROM users`, [], (err, rows) => {
    if (err) {
        console.error('Failed to retrieve data:', err.message);
        return;
    }
    rows.forEach((row) => {
        console.log(row);
    });
});

이 코드는 users 테이블에서 모든 행을 조회하고, 결과를 출력합니다. db.all 메서드는 쿼리 결과의 모든 행을 배열로 반환합니다.

4. 데이터베이스 연결 종료

모든 작업이 끝난 후에는 데이터베이스 연결을 종료해야 합니다.

// 데이터베이스 연결 종료
db.close((err) => {
    if (err) {
        console.error('Failed to close the database connection:', err.message);
        return;
    }
    console.log('Closed the database connection.');
});

이 코드는 데이터베이스 연결을 안전하게 종료합니다.

5. 전체 코드 예제

전체적인 흐름을 이해하기 위해 위의 모든 단계를 포함한 전체 코드를 하나의 파일로 작성해 보겠습니다.

const sqlite3 = require('sqlite3').verbose();

// SQLite 데이터베이스 파일 생성 또는 연결
let db = new sqlite3.Database('./my-database.db', (err) => {
    if (err) {
        console.error('Failed to connect to the database:', err.message);
        return;
    }
    console.log('Connected to the SQLite database.');
});

// 테이블 생성
db.run(`CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT NOT NULL UNIQUE
)`, (err) => {
    if (err) {
        console.error('Failed to create table:', err.message);
        return;
    }
    console.log('Table created successfully.');

    // 데이터 삽입
    db.run(`INSERT INTO users (name, email) VALUES (?, ?)`, ['John Doe', 'john@example.com'], function(err) {
        if (err) {
            console.error('Failed to insert data:', err.message);
            return;
        }
        console.log(`A row has been inserted with rowid ${this.lastID}`);

        // 데이터 조회
        db.all(`SELECT * FROM users`, [], (err, rows) => {
            if (err) {
                console.error('Failed to retrieve data:', err.message);
                return;
            }
            rows.forEach((row) => {
                console.log(row);
            });

            // 데이터베이스 연결 종료
            db.close((err) => {
                if (err) {
                    console.error('Failed to close the database connection:', err.message);
                    return;
                }
                console.log('Closed the database connection.');
            });
        });
    });
});

이 코드는 다음과 같은 순서로 실행됩니다:

  1. SQLite3 데이터베이스에 연결합니다.
  2. users 테이블을 생성합니다.
  3. 새 사용자 데이터를 삽입합니다.
  4. 테이블에서 모든 데이터를 조회합니다.
  5. 데이터베이스 연결을 종료합니다.

6. 추가 팁

  • 비동기 처리: SQLite3 모듈은 기본적으로 콜백 기반이므로, Promise 또는 async/await 패턴을 사용하여 비동기 처리를 관리하는 것이 좋습니다. 이를 위해 sqlite3 모듈을 sqlite 패키지로 감싸는 것을 고려할 수 있습니다.
  • 트랜잭션 관리: 중요한 데이터 작업은 트랜잭션으로 감싸서 일관성을 유지해야 합니다.
  • 데이터베이스 백업: SQLite3는 파일 기반 데이터베이스이므로 정기적인 백업을 통해 데이터를 보호하는 것이 중요합니다.

이 가이드를 따라 Node.js에서 SQLite3를 연동하고 사용할 수 있습니다. SQLite3는 간단하면서도 강력한 데이터베이스이므로, 많은 로컬 및 소규모 애플리케이션에 적합합니다.

반응형