일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- linux
- mysql
- React
- Android
- S3
- HTML
- Crawling
- css
- Express
- Network
- ubuntu
- DATABASE
- postman
- macos
- python
- mongoose
- wireshark
- Util
- TypeScript
- node.js
- sequelize
- Kotlin
- OOAD
- docker
- typeorm
- OS
- algorithm
- Scheduling
- AWS
- MongoDB
- Today
- Total
Seongwon Lim
[node.js] 라우팅(Routing)의 필요성 본문
What is Routing?
네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정이다.
라우팅의 의미를 조금 쉽게 설명해보자면 예를 들어 https://www.youtube.com 주소가 있다고 가정해보면 유튜브 홈페이지 하위에는 구독, 탐색, 보관함 등과 같이 다양한 하위 페이지가 존재한다. 예를 들어,
- http://www.youtube.com/feed/explore는 유튜브의 탐색 경로이며
- http://www.youtube.com/feed/subscriptions는 유튜브의 구독 경로
- http://www.youtube.com/feed/library는 유튜브의 보관함 경로이다.
이렇게 최상위 디렉토리 밑에 여러가지 하위 디렉토리가 있을 수 있으며 하위 주소로 연결을 가능하게 해주는 과정을 라우팅(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 개발 환경에서 프로젝트를 수행할 때에는 기능별로 라우팅 하는 것을 습관화 하는 것이 중요하다.
'Node.js' 카테고리의 다른 글
[node.js] AWS S3에 이미지 업로드 기능 구현하기 (0) | 2022.05.10 |
---|---|
[node.js] AWS S3에 텍스트 파일 업로드 및 다운로드 기능 구현하기 (0) | 2022.05.10 |
[node.js] 보안을 위한 dotenv 설치 및 사용 방법 (0) | 2022.05.09 |
[node.js] Koa-bodyparser 설치 및 사용 방법 (0) | 2022.05.09 |
[node.js] Koa framework 개념 정리 및 사용하기 (0) | 2022.05.09 |