Express Router란?
Express Router는 모듈식 마운팅 가능한 라우트 핸들러를 생성할 수 있게 해주는 미니 Express 애플리케이션이다. Router 인스턴스는 완전한 미들웨어와 라우팅 시스템이라고 볼 수 있다. 이를 "앱 안의 앱"이라고 생각하면 이해하기 쉽다.
기본 사용법
Router를 사용하려면 먼저 Express 모듈에서 Router를 가져와야 한다:
JavaScript
const express = require('express');
const router = express.Router();
이렇게 생성한 router 객체에 경로를 정의할 수 있다:
JavaScript
router.get('/', (req, res) => {
res.send('홈 페이지입니다');
});
router.get('/about', (req, res) => {
res.send('소개 페이지입니다');
});
그리고 이 라우터를 메인 앱에 연결한다:
JavaScript
const app = express();
app.use('/', router);
라우터 모듈화하기
프로젝트가 커질수록 모든 라우트를 하나의 파일에 정의하는 것은 유지보수를 어렵게 만든다. Express Router의 진정한 강점은 라우트를 모듈화할 수 있다는 점이다.
예를 들어 사용자 관련 라우트를 별도의 파일로 분리할 수 있다:
JavaScript
// routes/users.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.send('사용자 목록');
});
router.get('/:id', (req, res) => {
res.send(`사용자 ID: ${req.params.id}`);
});
module.exports = router;
그리고 메인 app.js 파일에서 이를 불러와 사용한다:
JavaScript
// app.js
const express = require('express');
const usersRouter = require('./routes/users');
const app = express();
// '/users' 경로에 라우터를 마운트
app.use('/users', usersRouter);
이렇게 하면 /users와 /users/:id 경로에 접근할 수 있다.
미들웨어 활용하기
Router에서도 미들웨어를 사용할 수 있다. 이는 특정 라우트 그룹에만 미들웨어를 적용하고 싶을 때 유용하다.
JavaScript
// 이 라우터에만 적용되는 미들웨어
router.use((req, res, next) => {
console.log('Time:', Date.now());
next();
});
// 특정 경로에만 적용되는 미들웨어
router.use('/user/:id', (req, res, next) => {
console.log('사용자 ID:', req.params.id);
next();
});
라우트 매개변수 처리
Express Router는 URL의 매개변수를 쉽게 처리할 수 있게 해준다:
JavaScript
router.get('/posts/:postId/comments/:commentId', (req, res) => {
console.log(`포스트 ID: ${req.params.postId}`);
console.log(`댓글 ID: ${req.params.commentId}`);
res.send('특정 포스트의 특정 댓글');
});
실제 프로젝트 구조 예시
실제 프로젝트에서는 보통 다음과 같은 구조로 라우터를 구성한다:
Code
project/
├── app.js
└── routes/
├── index.js
├── users.js
├── posts.js
└── comments.js
이렇게 구조화하면 코드의 가독성과 유지보수성이 크게 향상된다.
'STUDY > [ JavaScript ]' 카테고리의 다른 글
| JS JSX (0) | 2025.09.28 |
|---|---|
| forEach for of for in nullish ?? 병합연산자 (0) | 2025.09.26 |
| 캐시 추가하기 (0) | 2025.09.23 |
| 리팩토링 / HTTP ERROR CODE / DELETE PUT (0) | 2025.09.22 |
| 이차원배열 Array.from() arr.fill() (1) | 2025.09.22 |