[DevCamp] 라우터(Router) 정리하기

동건·2025년 2월 21일
0

DevCamp

목록 보기
16/85

✅ 라우터(Router) 개념 정리

오늘은 youtube-demo 프로젝트 안에 있는
user-demo.js , channel-demo.js 를 합치기 위해 라우터(router) 에 대해 학습하였다.

또한 중간중간에 if/else 구문 을 더 고도화 시키면서 예외처리를 강화해봤다.


📌 라우터(Router)란?

우선 라우터(Router) 는 클라이언트의 요청 URL에 따라 적절한 핸들러를 실행하는 역할을 한다.

기존 코드 경우에는 user-demo.jschannel-demo.js 가 각각 다르게 실행시켜야해서 프로젝트를 만드는 취지에 어긋났다.

하지만 Express 에서는 express.Router() 를 사용해 기능별로 모듈화 할 수 있다.

라우터 를 사용했을 때 내가 느낀 이점들이다.

  1. 코드 분리
    • 기능 별로 파일을 나눠 관리를 할 수 있어 가독성에 유리하다.
  2. 재사용 유리
    • 여러 개의 엔드포인트에 대해 같은 로직을 적용할 수 있다.

📌 라우터를 통한 연결

기존 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 객체를 활용하여 라우터를 모듈화 했다.

1. express.Router() 를 사용하여 라우터 모듈화

  • app.post('/join', 콜백) -> router.post('/join', 콜백)

app 을 직접 사용하지 않고, router 를 만들어 엔드포인트를 관리했다.

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

이렇게 router 를 생성하고, 기존 user-demo.js 코드를 router 에 맞게 수정을 하였다.

2. 기존 app.use(express.json()) 수정

마찬가지로 router 를 사용하기 위해 기존 app.~ 를 전부 router.~ 로 바꿔야한다.

기존 코드에서는 app.use(express.json()) 지만
라우터 파일에서도 JSON 파싱이 필요하므로
router.use(express.json()) 를 추가하였다.

router.use(express.json());

이렇게 하면 해당 라우터 내부에서 req.body를 JSON으로 처리할 수 있다.

3. 모듈로 바꿔서 내보내기(exports)

다른 기능들의 엔드포인트들도 위 방식으로 바꾼 다음
새로이 만들 app.js 에서 이 user-demo.js 를 읽어와야한다.

module.exports = router

이렇게 하면 모듈화된 라우터 파일 로 변경이 되서
새로 만들 app.js 에서도 불러올 수 있는 것이다.


📌 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 구조 정리

  • express.Router()를 활용하여 라우트 분리
  • app.use()를 사용하여 미들웨어 등록
  • HTTP 요청(GET, POST, PUT, DELETE) 처리
  • 폴더 구조를 정리하면 유지보수성 증가

이렇게 간략하게 정리할 수 있겠다...


결과


정상적으로 req.body 를 통해 userId 값도 불러와지고
회원가입도 작동한다!

🔨 TIL

이렇게 백엔드 기초에 대해 공부를 해봤는데
백엔드의 세상을 알 수 있어서 좋은 경험이였다.

개념 자체는 아직 조금 어려운 감이 있지만
더 공부를 하고 더 내 프로젝트에 적용시키고 싶은
욕심이 생겼다.

router 를 활용해서 여러 기능들을 합치는 과정이
아름답다 라고 생각했다.

profile
배고픈 개발자

0개의 댓글