Backend/Node.js
Route
AIHYEONJI
2025. 4. 27. 12:30
1. Route
: 웹 애플리케이션에서 클라이언트가 요청한 URL 경로와 HTTP 메서드(GET, POST 등)에 따라 서버가 어떤 동작을 수행할지를 정의하는 규칙입니다. 즉, 사용자가 /login, /about 같은 특정 경로로 요청을 보냈을 때, 그 요청을 처리할 코드를 지정해주는 역할이다.
웹 애플리케이션에서 클라이언트가 요청한 URL 경로와 HTTP 메서드(GET, POST 등)에 따라 서버가 어떤 동작을 수행할지를 정의하는 규칙이다. 즉, 사용자가 /login, /about 같은 특정 경로로 요청을 보냈을 때, 그 요청을 처리할 코드를 지정해주는 역할을 한다.
1.1 route method
import express from "express";
const app = express();
app
.route("/posts")
.get((req, res) => {
res.status(200).send("/posts GET 호출");
})
.post((req, res) => {
res.status(201).send("/post POST 호출");
})
.put((req, res) => {
res.status(201).send("/post PUT 호출");
})
.delete((req, res) => {
res.status(204).send("/post DELETE 호출");
});
app.listen(3001, () => {
console.log("서버 실행 중");
});
1.2 route 활용
* routing.js
import express from "express";
import userRouter from "./routes/user.mjs";
import userPost from "./routes/post.mjs";
const app = express();
app.use(express.json());
app.use("/users", userRouter);
app.use("/post", userPost);
app.listen(3001, () => {
console.log("서버 실행 중");
});
* route/user.js
import express from "express";
const router = express.Router();
router.use((req, res, next) => {
console.log("user에 존재하는 미들웨어");
next();
});
// /users/
router.get("/", (req, res) => {
res.status(200).send("GET: /users 회원정보보기");
});
router.post("/", (req, res) => {
res.status(201).send("POST /users 회원가입");
});
router.put("/:id", (req, res) => {
res.status(201).send("PUT /users:id 정보수정");
});
router.delete("/:id", (req, res) => {
res.status(201).send("DELETE /users:id 회원탈퇴");
});
export default router;
* route/ post.js
import express from "express";
const router = express.Router();
router.use((req, res, next) => {
console.log("post에 존재하는 미들웨어");
next();
});
// /users/
router.get("/", (req, res) => {
res.status(200).send("GET: /post 글보기");
});
router.post("/", (req, res) => {
res.status(201).send("POST /post 글 작성하기");
});
router.put("/:id", (req, res) => {
res.status(201).send("PUT /post:id 글 수정하기");
});
router.delete("/:id", (req, res) => {
res.status(201).send("DELETE /post:id 글 삭제하기");
});
export default router;
2. Swagger
: 스웨거는 RESTfulAPI 를 문서화하고 시각적으로 테스트할 수 있도록 도와주는 오픈소스 도구 모음이다. 작성한 API 문서를 웹 브라우저에서 Swageer UI를 통해 쉽게 확인하고 직접 테스트 할 수 있다.
* swagger.js
const swaggerJSDoc = require('swagger-jsdoc');
const options = {
definition: {
openapi: '3.0.0',
info: {
title: '게시판 API',
version: '1.0.0',
description: '게시글 관련 REST API 문서입니다.',
},
servers: [
{
url: 'http://localhost:3001',
},
],
},
apis: ['./routes/*.js'], // 주석으로부터 API 문서 생성
};
const swaggerSpec = swaggerJSDoc(options);
module.exports = swaggerSpec;
* route / posts.js
const express = require('express');
const router = express.Router();
/**
* @swagger
* /posts:
* get:
* summary: 모든 게시글 조회
* responses:
* 200:
* description: 게시글 목록 성공 응답
* post:
* summary: 새 게시글 생성
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* title:
* type: string
* content:
* type: string
* responses:
* 201:
* description: 생성 성공
*/
router.get('/', (req, res) => {
res.send('모든 게시글 조회');
});
router.post('/', (req, res) => {
res.status(201).send('게시글이 생성되었습니다');
});
module.exports = router;
app.js
const express = require('express');
const app = express();
const port = 3001;
const swaggerUi = require('swagger-ui-express');
const swaggerSpec = require('./swagger');
const postRoutes = require('./routes/posts');
app.use(express.json());
// Swagger UI 라우트 등록
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
// 실제 API 라우트
app.use('/posts', postRoutes);
app.listen(port, () => {
console.log(`서버 실행 중: http://localhost:${port}`);
console.log(`Swagger 문서 보기: http://localhost:${port}/api-docs`);
});