Express.js는 Node.js 기반의 웹 프레임워크로, 라우팅을 통해 클라이언트 요청을 핸들링하는 기능을 제공합니다. 큰 규모의 애플리케이션을 개발할 때, 모든 라우트 핸들러를 한 파일에 작성하는 것은 코드의 가독성과 유지보수에 어려움을 초래할 수 있습니다. 이런 경우에는 라우터를 분리해서 관리하는 것이 좋습니다.
라우터 분리 방법
Express.js에서 라우터를 분리하는 가장 일반적인 방법은 미들웨어로서 express.Router()
를 사용하는 것입니다. 이를 이용하면 라우터를 모듈로 분리할 수 있고, 애플리케이션의 다양한 부분에서 재사용할 수 있습니다.
아래는 예시 코드입니다.
// routes/auth.js
const express = require('express');
const router = express.Router();
// 라우트 정의
router.get('/login', (req, res) => {
// 로그인 페이지 렌더링
});
router.post('/login', (req, res) => {
// 로그인 처리 로직
});
module.exports = router;
라우터 모듈을 따로 분리한 뒤, 이를 다른 파일에서 사용할 수 있습니다. 이를 위해서는 다음과 같이 app.js
또는 라우터를 사용하는 파일에서 require
를 통해 해당 모듈을 가져와야 합니다.
// app.js
const express = require('express');
const app = express();
const authRouter = require('./routes/auth');
app.use('/auth', authRouter);
위의 예시에서는 /auth
경로에 대한 요청을 authRouter
에서 처리하도록 설정되었습니다. /auth/login
경로에 대한 GET 요청은 authRouter
의 GET /login
핸들러에서 처리하고, POST 요청은 authRouter
의 POST /login
핸들러에서 처리합니다.
활용 예시
라우터를 분리하면 더욱 모듈화된 방식으로 코드를 구성할 수 있습니다. 예를 들어, 회원 관리, 상품 관리, 주문 관리 등과 같은 기능을 가진 서브 라우터를 별도 파일로 분리하여 사용할 수 있습니다. 이는 코드의 구성을 단순화하고, 여러 모듈간의 충돌을 방지하는 데 도움을 줍니다.
// routes/users.js
const express = require('express');
const router = express.Router();
// 회원 관리 라우트 정의
router.get('/', (req, res) => {
// 회원 목록 조회
});
router.post('/', (req, res) => {
// 회원 등록
});
module.exports = router;
// app.js
const express = require('express');
const app = express();
const userRouter = require('./routes/users');
app.use('/users', userRouter);
위의 코드에서는 /users
경로에 대한 요청을 userRouter
에서 처리하도록 설정되었습니다. /users
경로에 대한 GET 요청은 userRouter
의 GET /
핸들러에서 처리하고, POST 요청은 userRouter
의 POST /
핸들러에서 처리합니다.
결론
Express.js에서 라우터를 분리하는 것은 코드의 가독성과 유지보수성을 높이는 데 도움이 됩니다. express.Router()
를 활용하여 라우터를 모듈화하면 코드의 구성을 단순화하고, 다른 모듈과의 충돌을 방지할 수 있습니다. 큰 규모의 애플리케이션 개발 시에는 라우터를 적절하게 분리하여 사용하면 효율적인 개발이 가능해집니다.