
βλ°±μλ κ°λ°, μ΄λμλΆν° μμν΄μΌ νμ§?β
μ²μ μ νλ λΆλ€μκ² Node.jsλ νλ₯ν μ νμ
λλ€. μλ°μ€ν¬λ¦½νΈ νλλ‘ νλ‘ νΈμλμ λ°±μλλ₯Ό λͺ¨λ λ€λ£° μ μκ³ , κ°λ³κ³ λΉ λ₯Έ μλ²λ₯Ό μ½κ² λ§λ€ μ μκΈ° λλ¬Έμ
λλ€.
μ΄λ² νν 리μΌμμλ ν μΌ(To-do) κ΄λ¦¬ APIλ₯Ό μ§μ λ§λ€μ΄λ³΄λ©° REST APIμ κΈ°μ΄λ₯Ό μ΅νλ΄ μλ€.
λ¨Όμ νλ‘μ νΈ ν΄λλ₯Ό λ§λ€κ³ Node.js νκ²½μ μ€μ ν©λλ€.
mkdir node-api-tutorial
cd node-api-tutorial
npm init -y
npm install express
index.js νμΌμ λ§λ€κ³ κ°λ¨ν μλ²λ₯Ό λμλ΄ λλ€.
const express = require("express");
const app = express();
const PORT = 3000;
app.use(express.json());
app.get("/", (req, res) => {
res.send("Hello Node.js API!");
});
app.listen(PORT, () => {
console.log(`π Server running at http://localhost:${PORT}`);
});
μ΄μ 본격μ μΌλ‘ API μλν¬μΈνΈλ₯Ό μμ±ν΄λ΄ μλ€.
let todos = [];
// λͺ©λ‘ μ‘°ν
app.get("/todos", (req, res) => {
res.json(todos);
});
// μΆκ°
app.post("/todos", (req, res) => {
const { task } = req.body;
const newTodo = { id: Date.now(), task, done: false };
todos.push(newTodo);
res.status(201).json(newTodo);
});
// μλ£ μ²λ¦¬
app.patch("/todos/:id", (req, res) => {
const { id } = req.params;
const todo = todos.find((t) => t.id == id);
if (!todo) return res.status(404).json({ message: "Not found" });
todo.done = true;
res.json(todo);
});
// μμ
app.delete("/todos/:id", (req, res) => {
const { id } = req.params;
todos = todos.filter((t) => t.id != id);
res.json({ message: "Deleted" });
});
Postmanμ΄λ cURLμ μ¬μ©ν΄ μμ²μ λ³΄λΌ μ μμ΅λλ€.
μ΄λ κ² κ°λ¨ν To-do API μλ²λ₯Ό μμ±νμ΅λλ€.
μ€μ μλΉμ€μμ λ°μ΄ν°λ² μ΄μ€ μ°κ²°, μλ¬ μ²λ¦¬, μΈμ¦/μΈκ°(JWT) λ±μ μΆκ°νλ©΄ ν¨μ¬ μμ±λ μλ μλ²κ° λ©λλ€.