반응형
Node.js + Express + MariaDB 조합으로 간단한 회원 등록/조회 API 서버를 만들어보았다.
이번 글에서는:
- Node.js가 무엇인지
- Express의 역할
- MariaDB 연결 방법
- 실제 회원 등록 API 구현
까지 정리해보겠다.
1️⃣ Node.js란 무엇인가?
Node.js는 서버에서 JavaScript를 실행할 수 있게 해주는 런타임 환경이다.
브라우저에서만 실행되던 JavaScript를
이제 서버에서도 실행할 수 있게 만든 것이 Node.js다.
✔ 특징
- Chrome V8 엔진 기반
- 비동기 이벤트 기반 구조
- API 서버 제작에 적합
- 프론트엔드와 동일한 JS 사용 가능
2️⃣ Express란 무엇인가?
Express는 Node.js 위에서 동작하는 웹 프레임워크이다.
Node만으로도 서버를 만들 수 있지만 코드가 복잡하다.
Express를 사용하면 HTTP 서버를 훨씬 간단하게 만들 수 있다.
예:
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("Hello World");
});
app.listen(3000);
const app = express();
app.get("/", (req, res) => {
res.send("Hello World");
});
app.listen(3000);
이렇게 간단하게 웹서버가 실행된다.
3️⃣ MariaDB란?
MariaDB는 MySQL 기반의 오픈소스 관계형 데이터베이스이다.
우리는 회원 정보를 저장하기 위해 MariaDB를 사용했다.
4️⃣ 프로젝트 구성
📁 폴더 구조
maria-demo/
│
├── server.js
├── db.js
├── .env
├── package.json
│
├── server.js
├── db.js
├── .env
├── package.json
5️⃣ 필수 패키지 설치
npm init -y
npm install express mysql2 dotenv
npm install express mysql2 dotenv
설치된 패키지 설명:
- express → 웹서버 프레임워크
- mysql2 → MariaDB 연결 드라이버
- dotenv → 환경변수(.env) 로딩
6️⃣ 환경 변수 설정 (.env)
DB_USER=root
DB_PASSWORD=****
DB_HOST=localhost
DB_PORT=3306
DB_NAME=test
DB_PASSWORD=****
DB_HOST=localhost
DB_PORT=3306
DB_NAME=test
비밀번호는 코드에 직접 쓰지 않고 .env에 보관한다.
7️⃣ DB 연결 코드 (db.js)
require("dotenv").config();
const mysql = require("mysql2/promise");
const pool = mysql.createPool({
host: process.env.DB_HOST,
port: Number(process.env.DB_PORT || 3306),
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
waitForConnections: true,
connectionLimit: 10
});
module.exports = pool;
const mysql = require("mysql2/promise");
const pool = mysql.createPool({
host: process.env.DB_HOST,
port: Number(process.env.DB_PORT || 3306),
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
waitForConnections: true,
connectionLimit: 10
});
module.exports = pool;
8️⃣ 회원 테이블 생성
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(120) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(120) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
utf8mb4 설정은 한글 저장을 위해 필수다.
9️⃣ 서버 코드 작성 (server.js)
const express = require("express");
const pool = require("./db");
const app = express();
app.use(express.json());
app.post("/users", async (req, res) => {
const { name, email } = req.body;
try {
const [result] = await pool.query(
"INSERT INTO users (name, email) VALUES (?, ?)",
[name, email]
);
res.status(201).json({
ok: true,
user: { id: result.insertId, name, email }
});
} catch (err) {
if (err.code === "ER_DUP_ENTRY") {
return res.status(400).json({
ok: false,
error: "이미 존재하는 이메일입니다."
});
}
res.status(500).json({ ok: false });
}
});
app.get("/users", async (req, res) => {
const [rows] = await pool.query("SELECT * FROM users");
res.json({ ok: true, users: rows });
});
app.listen(3000, () => {
console.log("Server running on http://localhost:3000");
});
const pool = require("./db");
const app = express();
app.use(express.json());
app.post("/users", async (req, res) => {
const { name, email } = req.body;
try {
const [result] = await pool.query(
"INSERT INTO users (name, email) VALUES (?, ?)",
[name, email]
);
res.status(201).json({
ok: true,
user: { id: result.insertId, name, email }
});
} catch (err) {
if (err.code === "ER_DUP_ENTRY") {
return res.status(400).json({
ok: false,
error: "이미 존재하는 이메일입니다."
});
}
res.status(500).json({ ok: false });
}
});
app.get("/users", async (req, res) => {
const [rows] = await pool.query("SELECT * FROM users");
res.json({ ok: true, users: rows });
});
app.listen(3000, () => {
console.log("Server running on http://localhost:3000");
});
🔟 서버 실행
node server.js
브라우저에서:
http://localhost:3000/users
접속하면 JSON 데이터가 출력된다.
1️⃣1️⃣ PowerShell 한글 깨짐 해결
Windows PowerShell에서 한글이 깨질 수 있다.
해결 방법:
chcp 65001
$OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
그리고 JSON 전송 시 반드시:
$body = @{ name="이순신"; email="lee@test.com" } | ConvertTo-Json
🎯 정리
이번 프로젝트를 통해:
- Node.js 서버 구조 이해
- Express 라우팅
- MariaDB 연결
- 환경변수 보안 처리
- REST API 설계
- 한글 인코딩 문제 해결
까지 경험해볼 수 있었다.
반응형
'업무효율화★' 카테고리의 다른 글
| [Claude]터미널에서 떠나는 코딩 여행, Claude Code /btw 명령어 200% 활용하기 (0) | 2026.03.12 |
|---|---|
| [Claude]구글 시트를 넘어 클로드 바이브로: 2주 만에 구축한 임직원용 PMS 개발기(전체 레이아웃만) (2) | 2026.03.10 |
| [Claude]윈도우에서 Claude Code 설치부터 실행까지 (0) | 2026.02.27 |
| 폴더 안 파일명 txt 일괄 추출 (0) | 2025.11.06 |
| ”대량 PPT → PDF 변환”을 한 번에(일괄) 처리 (0) | 2025.10.29 |