본문 바로가기
코딩

NodeJS Express + MariaDB 개발 환경 구성

by foon100 2025. 6. 3.

코딩 화면

NodeJS 설치

Ubuntu 20.04에서 NodeJS 기본 설치 시 12.x 올드 버전이므로, 최신 버전 설치 위해 별도로 저장소 설정 스크립트를 다운로드한 후 패키지 목록을 업데이트하여 설치를 수행해야 합니다.

curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -

sudo apt install nodejs

sudo apt install build-essential

node --version // 설치된 NodeJS 버전 확인

MariaDB 설치

최신 기능이나 특정 버전의 MariaDB를 설치하려면 공식 저장소를 추가해야 합니다.

A. 설치

  1. 필수 패키지 설치:
sudo apt install software-properties-common dirmngr apt-transport-https ca-certificates curl -y
  1. MariaDB 저장소 설정 스크립트 다운로드 및 실행:
curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version="mariadb-11.8"
  1. 패키지 목록 업데이트:
sudo apt update
  1. MariaDB 서버 설치:
sudo apt install mariadb-server -y
  1. MariaDB 서비스 상태 확인:
sudo systemctl status mariadb
  1. 보안 설정 스크립트 실행:
sudo mariadb-secure-installation
  1. MariaDB 접속:
sudo mysql

B. 루트 비밀번호 설정 및 외부 접속 허용

기본적으로 MariaDB의 루트 사용자는 auth_socket 플러그인을 통해 인증되므로, 비밀번호 없이 로컬에서만 접속이 가능합니다. 외부에서 루트 사용자로 접속하려면 인증 방식을 변경해야 합니다.

  1. MariaDB 접속:
sudo mysql
  1. 인증 방식 변경 및 비밀번호 설정:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '새로운비밀번호'; FLUSH PRIVILEGES;

이제 루트 사용자로 외부에서 접속할 수 있습니다.

C. 설치 확인

설치된 MariaDB의 버전을 확인하려면 다음 명령을 사용하세요:

mariadb --version

MariaDB 셀 기본 명령

< testdb 데이터베이스 생성 >
CREATE DATABASE testdb;

< testdb 데이터베이스 사용 >
use testdb;

< users 테이블 생성 >
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE, age INT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );

< users 테이블에 데이터 추가 >
INSERT INTO users (name, email, age) VALUES ('홍길동', 'hong@example.com', 30); INSERT INTO users (name, email, age) VALUES ('김철수', 'kim@example.com', 25), ('이영희', 'lee@example.com', 28); 

< users 테이블에 데이터 수정 > 
UPDATE users SET age = 31 WHERE email = 'hong@example.com'; UPDATE users SET name = '홍길순', age = 32 WHERE id = 1;

< users 테이블에 데이터 삭제 >
DELETE FROM users WHERE id = 2;

< users 테이블의 모든 데이터 삭제 >
DELETE FROM users; 

< users 테이블의 구조는 유지하면서 모든 데이터를 삭제 (더 빠름)>
TRUNCATE TABLE users;

< 데이터 조회 (SELECT) >
SELECT * FROM users; SELECT name, email FROM users WHERE age > 25;

NodeJS에서 MariaDB 사용

  1. MariaDB Connector/Node.js 설치:
npm install mariadb
  1. MariaDB 연결 코드 (db.js)
const mariadb = require('mariadb');
const pool = mariadb.createPool({  
  host: 'localhost',  
  user: 'your\_username',  
  password: 'your\_password',  
  database: 'your\_database',
});

module.exports = pool;
  1. Express 서버 및 CRUD 라우터 설정 (users.js)
const express = require('express');  
const bodyParser = require('body-parser');  
const pool = require('./db');

const app = express();  
const PORT = 3000;

app.use(bodyParser.json());

// CREATE: 데이터 추가  
app.post('/users', async (req, res) => {  
  const { name, email, age } = req.body;  
  let conn;  
  try {  
    conn = await pool.getConnection();  
    const result = await conn.query(  
      'INSERT INTO users (name, email, age) VALUES (?, ?, ?)',  
      [name, email, age]  
    );  
    res.status(201).json({ id: result.insertId });  
  } catch (err) {  
    res.status(500).json({ error: err.message });  
  } finally {  
    if (conn) conn.release();  
  }  
});

// READ: 모든 사용자 조회  
app.get('/users', async (req, res) => {  
let conn;  
try {  
  conn = await pool.getConnection();  
  const rows = await conn.query('SELECT * FROM users');  
  res.json(rows);  
} catch (err) {  
  res.status(500).json({ error: err.message });  
} finally {  
  if (conn) conn.release();  
}  
});

// READ: 특정 사용자 조회  
app.get('/users/:id', async (req, res) => {  
  const { id } = req.params;  
  let conn;  
  try {  
    conn = await pool.getConnection();  
    const rows = await conn.query('SELECT * FROM users WHERE id = ?', [id]);  
    if (rows.length === 0) {  
      res.status(404).json({ error: 'User not found' });  
    } else {  
      res.json(rows[0]);
    }  
  } catch (err) {  
    res.status(500).json({ error: err.message });  
  } finally {  
    if (conn) conn.release();  
  }  
});

// UPDATE: 사용자 정보 수정  
app.put('/users/:id', async (req, res) => {  
  const { id } = req.params;  
  const { name, email, age } = req.body;  
  let conn;  
  try {  
    conn = await pool.getConnection();  
    const result = await conn.query(  
      'UPDATE users SET name = ?, email = ?, age = ? WHERE id = ?',  
      [name, email, age, id]  
    );  
    if (result.affectedRows === 0) {  
      res.status(404).json({ error: 'User not found or no changes made' });  
    } else {  
      res.json({ message: 'User updated successfully' });  
    }  
  } catch (err) {  
    res.status(500).json({ error: err.message });  
  } finally {  
    if (conn) conn.release();  
  }  
});

// DELETE: 사용자 삭제  
app.delete('/users/:id', async (req, res) => {  
  const { id } = req.params;  
  let conn;  
  try {  
    conn = await pool.getConnection();  
    const result = await conn.query('DELETE FROM users WHERE id = ?', [id]);  
    if (result.affectedRows === 0) {  
      res.status(404).json({ error: 'User not found' });  
    } else {  
      res.json({ message: 'User deleted successfully' });  
    }  
  } catch (err) {  
    res.status(500).json({ error: err.message });  
  } finally {  
    if (conn) conn.release();  
  }  
});

app.listen(PORT, () => {  
console.log(`Server is running on port ${PORT}`);  
});  

'코딩' 카테고리의 다른 글

NodeJS 설치 및 Express 프로젝트 생성 방법  (0) 2025.06.03
VS Code 원격 작업 설정  (0) 2025.06.03