15강. Express + MySQL CRUD 게시판 만들기
이번 강의에서는 Express와 MySQL을 이용하여 CRUD(Create, Read, Update, Delete) 게시판 API를 만들어 봅니다.
목표: 게시글을 등록하고, 조회하고, 수정하고, 삭제하는 기능을 직접 구현할 수 있습니다.
1. CRUD란?
CRUD는 데이터베이스에서 가장 기본이 되는 4가지 기능입니다.
기능 의미 SQL
Create 데이터 생성 INSERT
Read 데이터 조회 SELECT
Update 데이터 수정 UPDATE
Delete 데이터 삭제 DELETE
2. 게시판 프로젝트 구조
board-project
│
├── app.js
├── package.json
│
├── config
│ db.js
│
├── routes
│ board.js
│
├── controllers
│ boardController.js
│
├── models
│ boardModel.js
│
├── public
│
└── views
3. 게시판 테이블 만들기
CREATE TABLE board(
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200),
content TEXT,
writer VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
생성 결과
board
│
├── id
├── title
├── content
├── writer
└── created_at
4. 데이터베이스 연결
config/db.js
const mysql = require("mysql2");
const db = mysql.createConnection({
host:"localhost",
user:"root",
password:"1234",
database:"node_db"
});
module.exports = db;
5. Express 설정
app.js
const express = require("express");
const app = express();
app.use(express.json());
app.listen(3000,()=>{
console.log("Server Running");
});
6. 게시글 등록(Create)
app.post("/board",(req,res)=>{
const{
title,
content,
writer
}=req.body;
const sql=
"INSERT INTO board(title,content,writer) VALUES(?,?,?)";
db.query(
sql,
[title,content,writer],
(err,result)=>{
if(err){
return res.status(500).send(err);
}
res.send("등록 완료");
}
);
});
요청(JSON)
{
"title":"첫 글",
"content":"Node.js 게시판",
"writer":"커사맨"
}
7. 게시글 목록(Read)
app.get("/board",(req,res)=>{
const sql=
"SELECT * FROM board ORDER BY id DESC";
db.query(sql,(err,result)=>{
if(err){
return res.status(500).send(err);
}
res.json(result);
});
});
결과
[
{
"id":1,
"title":"첫 글",
"content":"Node.js 게시판",
"writer":"커사맨"
}
]
8. 게시글 상세보기
app.get("/board/:id",(req,res)=>{
const sql=
"SELECT * FROM board WHERE id=?";
db.query(
sql,
[req.params.id],
(err,result)=>{
if(err){
return res.status(500).send(err);
}
res.json(result);
}
);
});
접속
http://localhost:3000/board/1
9. 게시글 수정(Update)
app.put("/board/:id",(req,res)=>{
const{
title,
content
}=req.body;
const sql=
"UPDATE board SET title=?, content=? WHERE id=?";
db.query(
sql,
[
title,
content,
req.params.id
],
(err,result)=>{
if(err){
return res.status(500).send(err);
}
res.send("수정 완료");
}
);
});
10. 게시글 삭제(Delete)
app.delete("/board/:id",(req,res)=>{
const sql=
"DELETE FROM board WHERE id=?";
db.query(
sql,
[req.params.id],
(err,result)=>{
if(err){
return res.status(500).send(err);
}
res.send("삭제 완료");
}
);
});
11. REST API 구조
Method URL 기능
GET /board 게시글 목록
GET /board/:id 게시글 상세
POST /board 게시글 등록
PUT /board/:id 게시글 수정
DELETE /board/:id 게시글 삭제
12. Postman 테스트
게시글 등록
POST /board
{
"title":"Node.js",
"content":"Express",
"writer":"홍길동"
}
게시글 조회
GET /board
게시글 수정
PUT /board/1
{
"title":"수정 완료",
"content":"내용 수정"
}
게시글 삭제
DELETE /board/1
13. 에러 처리
if(err){
console.log(err);
return res.status(500).send("DB Error");
}
실무에서는 에러를 그대로 사용자에게 보여주지 않고 적절한 메시지를 반환합니다.
14. SQL 실행 순서
브라우저
↓
Express
↓
SQL 실행
↓
MySQL
↓
결과 반환
↓
JSON 출력
15. 실습 1
게시글 등록 API 만들기
POST
/board
16. 실습 2
게시글 목록 출력
GET
/board
17. 실습 3
게시글 수정
PUT
/board/1
18. 실습 4
게시글 삭제
DELETE
/board/1
19. 실무 프로젝트 구조
project
│
├── app.js
│
├── config
│
├── routes
│
├── controllers
│
├── models
│
├── middleware
│
├── public
│
└── views
실무에서는 app.js에 직접 SQL을 작성하기보다 라우터 → 컨트롤러 → 모델 구조로 역할을 분리하는 경우가 많습니다.
20. 이번 강의 핵심 정리
기능 Method SQL
게시글 등록 POST INSERT
게시글 목록 GET SELECT
게시글 상세 GET SELECT
게시글 수정 PUT UPDATE
게시글 삭제 DELETE DELETE
Express 메서드
함수 설명
app.get() 조회
app.post() 등록
app.put() 수정
app.delete() 삭제
db.query() SQL 실행
실무 팁
실무에서는 SQL을 문자열로 직접 작성하기도 하지만, 프로젝트 규모가 커지면 ORM(객체 관계 매핑) 도구를 사용하는 경우도 많습니다. 다만 SQL을 직접 이해하는 것이 기본이며, CRUD를 직접 구현할 수 있어야 ORM도 쉽게 익힐 수 있습니다.
실습 미션
다음 기능을 모두 구현해 보세요.
✅ 게시글 등록
✅ 게시글 목록
✅ 게시글 상세보기
✅ 게시글 수정
✅ 게시글 삭제
✅ 최신 글부터 정렬(ORDER BY id DESC)
이번 강의에서는 Express와 MySQL을 이용하여 CRUD(Create, Read, Update, Delete) 게시판 API를 만들어 봅니다.
목표: 게시글을 등록하고, 조회하고, 수정하고, 삭제하는 기능을 직접 구현할 수 있습니다.
1. CRUD란?
CRUD는 데이터베이스에서 가장 기본이 되는 4가지 기능입니다.
기능 의미 SQL
Create 데이터 생성 INSERT
Read 데이터 조회 SELECT
Update 데이터 수정 UPDATE
Delete 데이터 삭제 DELETE
2. 게시판 프로젝트 구조
board-project
│
├── app.js
├── package.json
│
├── config
│ db.js
│
├── routes
│ board.js
│
├── controllers
│ boardController.js
│
├── models
│ boardModel.js
│
├── public
│
└── views
3. 게시판 테이블 만들기
CREATE TABLE board(
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200),
content TEXT,
writer VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
생성 결과
board
│
├── id
├── title
├── content
├── writer
└── created_at
4. 데이터베이스 연결
config/db.js
const mysql = require("mysql2");
const db = mysql.createConnection({
host:"localhost",
user:"root",
password:"1234",
database:"node_db"
});
module.exports = db;
5. Express 설정
app.js
const express = require("express");
const app = express();
app.use(express.json());
app.listen(3000,()=>{
console.log("Server Running");
});
6. 게시글 등록(Create)
app.post("/board",(req,res)=>{
const{
title,
content,
writer
}=req.body;
const sql=
"INSERT INTO board(title,content,writer) VALUES(?,?,?)";
db.query(
sql,
[title,content,writer],
(err,result)=>{
if(err){
return res.status(500).send(err);
}
res.send("등록 완료");
}
);
});
요청(JSON)
{
"title":"첫 글",
"content":"Node.js 게시판",
"writer":"커사맨"
}
7. 게시글 목록(Read)
app.get("/board",(req,res)=>{
const sql=
"SELECT * FROM board ORDER BY id DESC";
db.query(sql,(err,result)=>{
if(err){
return res.status(500).send(err);
}
res.json(result);
});
});
결과
[
{
"id":1,
"title":"첫 글",
"content":"Node.js 게시판",
"writer":"커사맨"
}
]
8. 게시글 상세보기
app.get("/board/:id",(req,res)=>{
const sql=
"SELECT * FROM board WHERE id=?";
db.query(
sql,
[req.params.id],
(err,result)=>{
if(err){
return res.status(500).send(err);
}
res.json(result);
}
);
});
접속
http://localhost:3000/board/1
9. 게시글 수정(Update)
app.put("/board/:id",(req,res)=>{
const{
title,
content
}=req.body;
const sql=
"UPDATE board SET title=?, content=? WHERE id=?";
db.query(
sql,
[
title,
content,
req.params.id
],
(err,result)=>{
if(err){
return res.status(500).send(err);
}
res.send("수정 완료");
}
);
});
10. 게시글 삭제(Delete)
app.delete("/board/:id",(req,res)=>{
const sql=
"DELETE FROM board WHERE id=?";
db.query(
sql,
[req.params.id],
(err,result)=>{
if(err){
return res.status(500).send(err);
}
res.send("삭제 완료");
}
);
});
11. REST API 구조
Method URL 기능
GET /board 게시글 목록
GET /board/:id 게시글 상세
POST /board 게시글 등록
PUT /board/:id 게시글 수정
DELETE /board/:id 게시글 삭제
12. Postman 테스트
게시글 등록
POST /board
{
"title":"Node.js",
"content":"Express",
"writer":"홍길동"
}
게시글 조회
GET /board
게시글 수정
PUT /board/1
{
"title":"수정 완료",
"content":"내용 수정"
}
게시글 삭제
DELETE /board/1
13. 에러 처리
if(err){
console.log(err);
return res.status(500).send("DB Error");
}
실무에서는 에러를 그대로 사용자에게 보여주지 않고 적절한 메시지를 반환합니다.
14. SQL 실행 순서
브라우저
↓
Express
↓
SQL 실행
↓
MySQL
↓
결과 반환
↓
JSON 출력
15. 실습 1
게시글 등록 API 만들기
POST
/board
16. 실습 2
게시글 목록 출력
GET
/board
17. 실습 3
게시글 수정
PUT
/board/1
18. 실습 4
게시글 삭제
DELETE
/board/1
19. 실무 프로젝트 구조
project
│
├── app.js
│
├── config
│
├── routes
│
├── controllers
│
├── models
│
├── middleware
│
├── public
│
└── views
실무에서는 app.js에 직접 SQL을 작성하기보다 라우터 → 컨트롤러 → 모델 구조로 역할을 분리하는 경우가 많습니다.
20. 이번 강의 핵심 정리
기능 Method SQL
게시글 등록 POST INSERT
게시글 목록 GET SELECT
게시글 상세 GET SELECT
게시글 수정 PUT UPDATE
게시글 삭제 DELETE DELETE
Express 메서드
함수 설명
app.get() 조회
app.post() 등록
app.put() 수정
app.delete() 삭제
db.query() SQL 실행
실무 팁
실무에서는 SQL을 문자열로 직접 작성하기도 하지만, 프로젝트 규모가 커지면 ORM(객체 관계 매핑) 도구를 사용하는 경우도 많습니다. 다만 SQL을 직접 이해하는 것이 기본이며, CRUD를 직접 구현할 수 있어야 ORM도 쉽게 익힐 수 있습니다.
실습 미션
다음 기능을 모두 구현해 보세요.
✅ 게시글 등록
✅ 게시글 목록
✅ 게시글 상세보기
✅ 게시글 수정
✅ 게시글 삭제
✅ 최신 글부터 정렬(ORDER BY id DESC)
#15강. Express + MySQL CRUD 게시판 만들기