기술 학습

express.Router() 란?

hawon6691 2026. 1. 29. 13:52
728x90

express.Router()라우팅을 모듈화하기 위한 미니 애플리케이션이야. Spring Boot의 @RestController를 여러 파일로 분리하는 것과 비슷한 개념이지.

왜 사용할까?

1. 코드 구조화

  • 관련된 라우트들을 하나의 파일로 묶을 수 있어
  • 프로젝트가 커져도 관리하기 쉬워져

2. 모듈화

  • 각 기능별로 라우터를 분리
  • 재사용 가능한 구조

3. 미들웨어 적용

  • 특정 라우터에만 미들웨어를 적용할 수 있어

사용하지 않을 때 vs 사용할 때

사용하지 않으면 (app.js에 모든 라우트)

const express = require('express');
const app = express();

app.get('/api/todos', (req, res) => { /* ... */ });
app.post('/api/todos', (req, res) => { /* ... */ });
app.get('/api/users', (req, res) => { /* ... */ });
app.post('/api/users', (req, res) => { /* ... */ });
// 100개가 넘으면...?

Router 사용 (파일 분리)

// routes/todos.js
const express = require('express');
const router = express.Router();

// /api/todos 기준으로 경로 설정
router.get('/', (req, res) => {
    // GET /api/todos
    res.json({ todos: [] });
});

router.post('/', (req, res) => {
    // POST /api/todos
    res.json({ message: 'created' });
});

router.get('/:id', (req, res) => {
    // GET /api/todos/:id
    res.json({ id: req.params.id });
});

module.exports = router;
// routes/users.js
const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
    res.json({ users: [] });
});

module.exports = router;
// app.js (메인 파일)
const express = require('express');
const app = express();

const todoRoutes = require('./routes/todos');
const userRoutes = require('./routes/users');

// 라우터 등록
app.use('/api/todos', todoRoutes);
app.use('/api/users', userRoutes);

app.listen(3000);

Spring Boot와 비교하면

// Spring Boot
@RestController
@RequestMapping("/api/todos")
public class TodoController {
    @GetMapping
    public List<Todo> getTodos() { }

    @PostMapping
    public Todo createTodo() { }
}

이게 Express에서는:

// Express Router
const router = express.Router();
router.get('/', getTodos);
router.post('/', createTodo);
app.use('/api/todos', router);

실전 구조 예시

project/
├── app.js
└── routes/
    ├── todos.js      // Todo 관련 라우트
    ├── users.js      // User 관련 라우트
    └── auth.js       // 인증 관련 라우트

Spring Boot에서 Controller를 기능별로 나누듯이, Express에서도 Router로 기능별로 라우트를 나누는 거야. 네가 To-Do List 백엔드를 Express로 만든다면 이런 식으로 구조화하면 깔끔하게 관리할 수 있어.

728x90

'기술 학습' 카테고리의 다른 글

Passport란?  (0) 2026.02.04
엔드포인트란?  (0) 2026.02.02
MVC란?  (0) 2026.01.29
Express To-Do List 프로젝트 코드 리뷰  (0) 2026.01.29
XSS(Cross-Site Scripting) 취약점이란  (0) 2026.01.29