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. 설치
- 필수 패키지 설치:
sudo apt install software-properties-common dirmngr apt-transport-https ca-certificates curl -y
- MariaDB 저장소 설정 스크립트 다운로드 및 실행:
curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version="mariadb-11.8"
- 패키지 목록 업데이트:
sudo apt update
- MariaDB 서버 설치:
sudo apt install mariadb-server -y
- MariaDB 서비스 상태 확인:
sudo systemctl status mariadb
- 보안 설정 스크립트 실행:
sudo mariadb-secure-installation
- MariaDB 접속:
sudo mysql
B. 루트 비밀번호 설정 및 외부 접속 허용
기본적으로 MariaDB의 루트 사용자는 auth_socket
플러그인을 통해 인증되므로, 비밀번호 없이 로컬에서만 접속이 가능합니다. 외부에서 루트 사용자로 접속하려면 인증 방식을 변경해야 합니다.
- MariaDB 접속:
sudo mysql
- 인증 방식 변경 및 비밀번호 설정:
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 사용
- MariaDB Connector/Node.js 설치:
npm install mariadb
- 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;
- 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 |