내일배움캠프 Node.js 트랙 17일차
1. ZEP에서 이루어진 Node.js 입문 스터디
지난 시간을 복기해보자. Node.js의 정의와 express.js가 가진 이점, 그리고 패키지의 사용법에 대해 알아보았다. yarn이라는 패키지 매니저를 통해 실제로 express.js를 통해 서버를 연결해보았고, 미들웨어의 역할에 대해 간단하게 살펴보기도 했다. 그 내용을 짧게 요약해 보자면, 미들웨어는 서버-클라이언트의 요청과 응답의 흐름에서 중간에 개입하는 메서드들을 통칭하는 개념이다.(단, app.listen()과 같은 서버 시작 함수는 일반적으로 미들웨어로 분류되지 않는다.)
Q1. app.METHOD() 와 router.METHOD를 사용하는 것의 차이점은 뭘까?
여기서 한 발 더 나아가서 고민을 해 보자. router…는 대체 뭘까? 라우팅의 정의야 이미 정리한 바 있지만, 본질적으로 route가 수행하는 역할에 대해 의문을 가지게 된다. 왜냐하면 router.METHOD가 하는 역할(라우팅)은 app.METHOD 또한 동일하게 수행할 수 있기 때문이다.
그렇다면 router.METHOD 또한 미들웨어의 일종이란 건데, app.METHOD 에서도 경로를 지정할 수 있는데 왜 굳이 라우터 객체를 따로 생성해서 경로를 지정해 주었던 걸까? 그야 당연히 모듈화라는 이유가 있을 테지만, 이 주제에 대해 보다 자세하게 알아보고 싶었다.
둘의 차이점이 무엇인지 더 자세한 내용을 살펴보자.
1. app.METHOD 사용
- app.METHOD는 Express 애플리케이션 인스턴스인 app 객체에서 직접 라우트를 정의할 때 사용된다.
- 소규모 프로젝트나 단순한 API를 구축할 때 사용된다. 앱 전체에서 라우트를 직접 정의할 수 있다.
- 예시:
import express from 'express';
const app = express();
app.get('/home', (req, res) => {
res.send('Hello, Home!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
2. router.METHOD 사용
- router.METHOD는 express.Router()객체를 사용해 별도의 라우터 모듈을 정의할 때 사용된다.
- 큰 프로젝트에서 코드 구조를 모듈화하고 라우트를 체계적으로 관리할 수 있도록 도와준다. 각 기능별로 라우트 파일을 분리하여 유지 보수성과 가독성을 높이는 데 사용된다.
- 예시:
import express from 'express';
const router = express.Router();
// 라우터에 라우트 정의
router.get('/profile', (req, res) => {
res.send('User profile');
});
export default router;
// 메인 파일에서 라우터 사용
import express from 'express';
import userRoutes from './routes/userRoutes.js'; // 경로는 예시
const app = express();
app.use('/users', userRoutes); // '/users/profile'로 접근 가능
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
차이점
- 코드 구조와 모듈화:
- app.METHOD 는 메인 파일에서 바로 라우트를 정의하므로 코드가 커질수록 복잡해질 수 있다.
- router.METHOD 은 라우트 모듈을 나누어 정리할 수 있어 대규모 프로젝트에 적합하다.
- 유지 보수성:
- app.METHOD 를 사용하면 모든 라우트가 한 파일에 집중되어 관리가 어려워질 수 있다.
- router.METHOD 는 기능별로 파일을 분리해 관리할 수 있어 유지 보수와 확장성이 더 좋다.
- 경로 설정:
- router.METHOD 를 사용하면 app.METHOD 를 통해 공통 경로를 설정할 수 있다.
- 예를 들어,
app.use('/users', userRoutes)와 같이 하면router.get('/profile')은/users/profile로 접근할 수 있다.
언제 어떤 것을 사용해야 할까?
- 소규모 프로젝트에서는 app.METHOD만으로 충분하다.
- 중규모 이상의 프로젝트에서는
express.Router()를 이용해 라우트를 모듈화하는 것이 더 효율적이다.
참고자료
[Express.js 공식 문서](Express - Node.js web application framework)
'JS > TIL(Today I Learned)' 카테고리의 다른 글
| 2024-11-21 (1) | 2024.11.21 |
|---|---|
| 2024-11-20 (2) | 2024.11.20 |
| 2024-11-18 (3) | 2024.11.18 |
| 2024-11-15 (2) | 2024.11.15 |
| 2024-11-14 (1) | 2024.11.14 |
댓글