Seongwon Lim

[node.js] 라우팅(Routing)의 필요성 본문

Node.js

[node.js] 라우팅(Routing)의 필요성

limsw 2022. 5. 9. 21:15
반응형

What is Routing?

네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정이다.

 

라우팅의 의미를 조금 쉽게 설명해보자면 예를 들어 https://www.youtube.com 주소가 있다고 가정해보면 유튜브 홈페이지 하위에는 구독, 탐색, 보관함 등과 같이 다양한 하위 페이지가 존재한다. 예를 들어,

 

 

이렇게 최상위 디렉토리 밑에 여러가지 하위 디렉토리가 있을 수 있으며 하위 주소로 연결을 가능하게 해주는 과정을 라우팅(Routing)이라고 표현한다.

라우팅의 필요성

우선 node.js express 환경을 구축하기 위해 index.js 파일을 만들었다.

// index.js
const express = require('express');
const app = express();

app.get('', (req, res, next) => {
    res.send("메인 페이지")
});

app.get('/login', (req, res, next) => {
    res.send("로그인 페이지")
});

app.get('/signup', (req, res, next) => {
    res.send("회원가입 페이지")
});

app.listen(3000, () => {console.log("server started");});

위와 같이 라우팅 경로를 메인 파일 하나에 모두 정의했다.

그러나 실제 서비스를 구현할 때에는 프로젝트 규모가 커지기 마련이다.
index.js 한 개의 파일에 모든 app.get(..) 메서드가 정의된 것이며 위와 같이 메인 파일에 라우팅 경로를 모두 정의하면 한 파일에 코드가 몰리게 되어 유지보수가 어렵고 가독성 또한 떨어진다.

 

그렇기에 express로 서버를 개발할 때에는 기능 단위로 파일을 나누어 라우팅을 하는 과정이 필요하다.

필자는 라우팅을 효율적으로 하기 위해서 routes라는 디렉토리를 만들었고 그 안에 login.js signup.js를 만들었다.

routes/login.js

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

router.get('', (req, res, next) => {
    res.send("라우팅을 이용하여 login 페이지에 접속");
});

module.exports = router;

routes/signup.js

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

router.get('', (req, res, next) => {
    res.send("라우팅을 이용하여 signup 페이지에 접속");
});

module.exports = router;

이와 같이 라우터를 구성하면 메인 파일인 index.js를 다음과 같이 수정할 수 있다.

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

const login = require('./routes/login');
const signup = require('./routes/signup');

app.get('', (req, res, next) => {
    res.send("메인 페이지")
});

// use() 메서드를 이용하여 미들 웨어를 추가했다.
app.use('/login', login);
app.use('/signup', signup);

app.listen(3000, () => {console.log("server started");});

미들 웨어로 라우팅을 정의함으로써 index.js 파일의 크기를 줄였다.
node index.js명령어를 이용하여 라우팅을 해본 결과는 다음과 같다.

localhost:3000/login 접속 화면

localhost:3000/signup 접속 화면

라우팅 파일을 별도로 정의하여 라우팅을 한 결과이다. 이렇게 기능별로 파일을 나누어 라우팅을 정의해야 코드 유지보수 및 프로젝트의 전체적인 효율성을 향상시킬 수 있다.

예를 들어 signup 경로에서 회원 가입 이후의 하위 페이지를 설정하고 싶으면 다음과 같이 코드를 수정할 수 있다.

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

router.get('', (req, res, next) => {
    res.send("라우팅을 이용하여 signup 페이지에 접속");
});

router.get('/done', (req, res, next) => {
    res.send("회원가입이 완료된 이후 페이지로 이동");
});

module.exports = router;

이렇게 코드를 수정하면 localhost:3000/signup/done 경로로 이동했을 때 다음과 같은 결과를 얻을 수 있다.

하지만 index.js 파일은 코드의 추가나 수정 없이 미들웨어만 유지하고 있다.

따라서 express 개발 환경에서 프로젝트를 수행할 때에는 기능별로 라우팅 하는 것을 습관화 하는 것이 중요하다.

Comments