[Express] Router

이호정·2022년 10월 13일
0

Express

목록 보기
2/2

네이버 블로그에서 이전, 원글 작성일시 : 2021.10.03.20:56

생활코딩님의 WEB3 : Express 강의를 듣고 정리하는 포스팅이다.

오늘은 Router를 이용한 route 분리에 대해 얘기해보자.

처음 express를 공부하고, 실습해볼 때 들었던 궁금증이 있었다.
"app.get, app.post,, 알겠는데 route가 엄청 많아지면 어떡하나?? 파일하나에 정리가 가능한가?"
이 궁금증에 대한 해답을 이제야 배우게 되었다.

express.Router를 사용하면 해결!

공식 홈페이지의 가이드에서 express.Router는 다음과 같이 설명하고 있다.

A Router instance is a complete middleware and routing system; for this reason, it is often referred to as a “mini-app”.

완전한 미들웨어이자 라우팅 시스템.

어떻게 사용하는지 살펴보는게 빠를 것이다.

main.js 파일안에 아래와 같이 라우팅를 정의해놓았다고 하자.

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

app.get('/', (req, res) => {
    res.send("index");
});

app.get('/user/create', (req, res) => {
    res.send("get user/create");
});

app.post('/user/create', (req, res) => {
    res.send("post user/create");
});

app.get('/user/:userNo', (req, res) => {
    res.send("get user/userNo");
});

지금은 라우팅이 몇개 없지만 만약 라우팅이 다양하고 많아진다면??

규모가 커질수록 main.js 안에 모든 라우팅이 들어가고, 복잡하게 작성되어 유지보수가 힘들어질 것이다.

이럴때 Router를 유용하게 사용할 수 있다.

그럼 한번 Router를 이용하여 분리해보자.

먼저 파일을 관리할 수 있도록 적당히 routes라는 폴더를 하나 만들어 안에 각각의 라우팅을 위한 파일을 만든다.

project
	ㄴroutes
		ㄴindex.js
		ㄴuser.js
	ㄴmain.js

index.js

const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
    res.send("index");
});

module.exports = router;

user.js

const express = require('express');
const router = express.Router();

app.get('/create', (req, res) => {
    res.send("get user/create");
});

app.post('/create', (req, res) => {
    res.send("post user/create");
});

app.get('/:userNo', (req, res) => {
    res.send("get user/userNo");
});

module.exports = router;

main.js

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

var indexRouter = require('./routes/index');
var userRouter = require('./routes/user');

app.use('/', indexRouter);
app.use('/user', userRouter);

사실 코드만 봐도 직관적으로 이해할 수 있다.
큰 라우팅 단위로 분리해서 각각을 main.js에서 미들웨어로 등록해주면 끝.

눈에 띄는 점은 user.js 안에서는 모든 라우팅마다 '/user'를 안써줘도 된다는 것이다.
main.js에서 '/user'로 등록하기 때문이다.


어리고 잘 모를땐(지금도 아는거 하나 없지만) 기능만 우선시 했었다.
효율보다도 어떻게든 구현을 하는게 먼저였고, 성능(?)에 영향을 미치지 않는 작업들은 필요없다고 생각했었다.

하지만 요즘 공부하면서, 어떻게 개발하느냐 또한 아주 중요한 문제임을 충분히 느끼고 있다.

한 파일에 모든 라우팅을 담아놔도 기능적으로는 문제없이 동작한다.
다만 이 일을 여럿이서 하게 되거나, 기능을 추가/삭제/수정 등 유지보수할 때,
한 파일에 몰아서 개발해놨던 누군가를 원망하게 될 것이다.

그러니 처음부터 효율적으로 개발을 해놓도록 하자.

0개의 댓글