MySQL과 데이터베이스 연동
1. MySQL 설치 및 설정
- MySQL 설치
- 간단한 데이터베이스 생성
CREATE DATABASE company_website;
USE company_website;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL
);
2. MySQL 연동
- MySQL 패키지 설치 MySQL과 Node.js를 연동하기 위해 mysql2 설치
npm install mysql2
- 데이터베이스 연결 설정
src/config/db.ts
파일을 생성하고 MySQL 연결 설정
import mysql from 'mysql2/promise';
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'your_password',
database: 'company_website',
});
export default pool;
3. 데이터베이스와 CRUD 연동
- 데이터베이스 작업 함수 작성
src/models/userModel.ts
파일 생성 후 데이터베이스 작업 함수 작성
import pool from '../config/db';
// 모든 사용자 가져오기
export const getAllUsers = async () => {
const [rows] = await pool.query('SELECT * FROM users');
return rows;
};
// 새 사용자 추가
export const addUser = async (name: string, email: string) => {
const [result] = await pool.query(
'INSERT INTO users (name, email) VALUES (?, ?)',
[name, email]
);
return result;
};
- API 라우트 수정
src/routes/api.ts
파일 수정 후 데이터베이스와 연동
import { Router, Request, Response } from 'express';
import { getAllUsers, addUser } from '../models/userModel';
const router = Router();
// GET: 모든 사용자 가져오기
router.get('/users', async (req: Request, res: Response) => {
const users = await getAllUsers();
res.json(users);
});
// POST: 새 사용자 추가
router.post('/users', async (req: Request, res: Response) => {
const { name, email } = req.body;
const result = await addUser(name, email);
res.status(201).json({ id: result.insertId, name, email });
});
export default router;
4. JSON 데이터를 데이터베이스로 옮기기
- 기존 데이터를 데이터베이스로 삽입
src/scripts/migrateData.ts
파일 생성 후 JSON 데이터를 데이터베이스로 옮김
import { readData } from '../utils/fileHandler';
import { addUser } from '../models/userModel';
const migrateData = async () => {
const data = await readData();
for (const user of data) {
await addUser(user.name, user.email);
}
console.log('Data migration completed!');
};
migrateData().catch((err) => console.error(err));
- 마이그레이션 실행 아래 명령어로 마이그레이션 스크립트 실행
npx ts-node src/scripts/migrateData.ts
5. 동적 페이지 수정
- 템플릿에서 데이터베이스와 연동
src/routes/pages.ts
파일에서 데이터를 데이터베이스에서 가져오도록 수정
import { Router, Request, Response } from 'express';
import { getAllUsers } from '../models/userModel';
const router = Router();
// 홈 페이지
router.get('/', async (req: Request, res: Response) => {
const users = await getAllUsers();
res.render('index', { users });
});
export default router;
http://localhost:3000/
로 사용자 목록이 렌더링 되는지 확인