# Node.js Express 완벽 가이드
## 학습 목표
Node.js와 Express로 백엔드 API를 구축합니다.
## 1. Node.js란?
Chrome V8 엔진 기반 JavaScript 런타임입니다.
- 비동기 이벤트 기반
- NPM 생태계
- 프론트엔드와 언어 통일
- 빠른 개발 속도
## 2. 프로젝트 시작
mkdir myapp && cd myapp
npm init -y
npm install express
## 3. 기본 서버
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("Hello World");
});
app.listen(3000, () => {
console.log("Server running on port 3000");
});
## 4. 라우팅
GET:
app.get("/users", (req, res) => {
res.json([{id: 1, name: "Kim"}]);
});
POST:
app.post("/users", (req, res) => {
const user = req.body;
res.status(201).json(user);
});
PUT:
app.put("/users/:id", (req, res) => {
const { id } = req.params;
res.json({id, ...req.body});
});
DELETE:
app.delete("/users/:id", (req, res) => {
res.status(204).send();
});
## 5. 파라미터
URL 파라미터:
app.get("/users/:id", (req, res) => {
const id = req.params.id;
});
쿼리스트링:
app.get("/search", (req, res) => {
const { q, page } = req.query;
});
Body:
app.use(express.json());
app.post("/users", (req, res) => {
const { name, email } = req.body;
});
## 6. 미들웨어
내장 미들웨어:
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(express.static("public"));
커스텀 미들웨어:
const logger = (req, res, next) => {
console.log(req.method, req.path);
next();
};
app.use(logger);
에러 핸들링:
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: "Something broke" });
});
## 7. Router 분리
routes/users.js:
const router = require("express").Router();
router.get("/", getUsers);
router.post("/", createUser);
router.get("/:id", getUser);
router.put("/:id", updateUser);
router.delete("/:id", deleteUser);
module.exports = router;
app.js:
const userRoutes = require("./routes/users");
app.use("/api/users", userRoutes);
## 8. 환경변수
npm install dotenv
.env:
PORT=3000
DB_HOST=localhost
JWT_SECRET=mysecret
app.js:
require("dotenv").config();
const port = process.env.PORT || 3000;
## 9. MySQL 연동
npm install mysql2
const mysql = require("mysql2/promise");
const pool = mysql.createPool({
host: "localhost",
user: "root",
password: "password",
database: "mydb"
});
app.get("/users", async (req, res) => {
const [rows] = await pool.query("SELECT * FROM users");
res.json(rows);
});
## 10. MongoDB 연동
npm install mongoose
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/mydb");
const User = mongoose.model("User", {
name: String,
email: String
});
app.get("/users", async (req, res) => {
const users = await User.find();
res.json(users);
});
## 11. JWT 인증
npm install jsonwebtoken bcrypt
const jwt = require("jsonwebtoken");
const bcrypt = require("bcrypt");
로그인:
app.post("/login", async (req, res) => {
const user = await User.findOne({email: req.body.email});
if (user && await bcrypt.compare(req.body.password, user.password)) {
const token = jwt.sign({id: user._id}, process.env.JWT_SECRET);
res.json({token});
} else {
res.status(401).json({error: "Invalid credentials"});
}
});
인증 미들웨어:
const auth = (req, res, next) => {
const token = req.headers.authorization?.split(" ")[1];
if (token) {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = decoded;
next();
} else {
res.status(401).json({error: "Unauthorized"});
}
};
## 12. 프로젝트 구조
src/
controllers/
routes/
models/
middleware/
config/
app.js
server.js
## 추천 학습 순서
1. Express 기본 라우팅
2. 미들웨어 이해
3. 데이터베이스 연동
4. 인증 구현
5. 프로젝트 구조화