
오늘은 youtube-demo 프로젝트 안에 있는
user-demo.js , channel-demo.js 를 합치기 위해 라우터(router) 에 대해 학습하였다.
또한 중간중간에 if/else 구문 을 더 고도화 시키면서 예외처리를 강화해봤다.
우선 라우터(Router) 는 클라이언트의 요청 URL에 따라 적절한 핸들러를 실행하는 역할을 한다.
기존 코드 경우에는 user-demo.js 와 channel-demo.js 가 각각 다르게 실행시켜야해서 프로젝트를 만드는 취지에 어긋났다.
하지만 Express 에서는 express.Router() 를 사용해 기능별로 모듈화 할 수 있다.
라우터 를 사용했을 때 내가 느낀 이점들이다.
기존 user-demo.js
const express = require("express");
const app = express();
app.listen(1234);
app.use(express.json())
...
// 회원가입
app.post('/join', (req, res) => {
if( req.body == {} ){
res.status(400).json({
message : "요청 값이 잘못되었습니다."
});
}else{
console.log(req.body)
db.set(id++, req.body)
res.status(201).json({
message : `${db.get(id-1).name} 님의 유튜브 활동을 응원합니다.`
});
}
})
바뀐 users.js
const express = require("express");
const router = express.Router();
router.use(express.json())
...
// 회원가입
router.post('/join', (req, res) => {
if( req.body == {} ){
res.status(400).json({
message : "요청 값이 잘못되었습니다."
});
}else{
let {userId} = req.body;
db.set(userId, req.body)
res.status(201).json({
message : `${db.get(userId).name} 님의 유튜브 활동을 응원합니다.`
});
}
})
module.exports = router;
기존 코드에서는 app 객체를 사용해 엔드포인트(/join 등)를 직접 등록했다.
이걸 개선하기 위해 Express의 Router 객체를 활용하여 라우터를 모듈화 했다.
app.post('/join', 콜백) -> router.post('/join', 콜백)app 을 직접 사용하지 않고, router 를 만들어 엔드포인트를 관리했다.
const express = require("express");
const router = express.Router();
이렇게 router 를 생성하고, 기존 user-demo.js 코드를 router 에 맞게 수정을 하였다.
마찬가지로 router 를 사용하기 위해 기존 app.~ 를 전부 router.~ 로 바꿔야한다.
기존 코드에서는 app.use(express.json()) 지만
라우터 파일에서도 JSON 파싱이 필요하므로
router.use(express.json()) 를 추가하였다.
router.use(express.json());
이렇게 하면 해당 라우터 내부에서 req.body를 JSON으로 처리할 수 있다.
다른 기능들의 엔드포인트들도 위 방식으로 바꾼 다음
새로이 만들 app.js 에서 이 user-demo.js 를 읽어와야한다.
module.exports = router
이렇게 하면 모듈화된 라우터 파일 로 변경이 되서
새로 만들 app.js 에서도 불러올 수 있는 것이다.
app.js
const express = require('express');
const app = express();
app.listen(1234);
// user-demo 소환
const userRouter = require('./routes/users');
// channel-demo 소환
const channelRouter = require('./routes/channels')
app.use("/", userRouter);
app.use("/channels", channelRouter);
쉽게 보면 이 app.js 가 프로젝트의 대장 파일이다.
외부 모듈을 불러오듯이 require(....) 로 불러오고
app.use(... , route) 를 작성하면 끝이다.
- express.Router()를 활용하여 라우트 분리
- app.use()를 사용하여 미들웨어 등록
- HTTP 요청(GET, POST, PUT, DELETE) 처리
- 폴더 구조를 정리하면 유지보수성 증가
이렇게 간략하게 정리할 수 있겠다...


정상적으로 req.body 를 통해 userId 값도 불러와지고
회원가입도 작동한다!
이렇게 백엔드 기초에 대해 공부를 해봤는데
백엔드의 세상을 알 수 있어서 좋은 경험이였다.
개념 자체는 아직 조금 어려운 감이 있지만
더 공부를 하고 더 내 프로젝트에 적용시키고 싶은
욕심이 생겼다.
router 를 활용해서 여러 기능들을 합치는 과정이
아름답다 라고 생각했다.