Node.js/Node.js Doc

[Node.js - Express] Application-Level과 Route-Level에 차이점은?

장일규 2022. 5. 12. 12:25

이전에 Application-Level에 있는 Router로직을 Routes폴더에 Router에 역할마다 분리하는 작업을 했습니다.

라우터 로직을 왜 분리해야하는 것일까? 동작 레벨에 Application-Level과 Route-Level으로 나누게 되면 성능적으로 차이가 있나? 궁금직이 생겼습니다.

무슨차이일까?

결론적으로 말하면,

모듈화를 위한 디자인적인 설계입니다.

Application-Level에 있는 router들에 공통적인 관심사를 분리하여 역할을 덜어주는 겁니다.

Application분기와 Router분기로 분리하고 역할을 URL을 분리하여 제어가 가능합니다.

 

하나에 웹사이트를 만드는데 회원상품에 대한 기능을 만든다고 해봅시다.

 

다음과 같은 요구사항이 있고, API를 설계하였습니다.

User(회원)

  • 새로운 유저를 만들 수 있어야 한다. POST
  • 기존의 유저 정보를 변경할 수 있어야 한다. PATCH
  • 유저를 삭제할 수 있어야 한다. DELETE
  • 유저 정보를 읽을 수 있어야 한다. GET

Product(상품)

  • 회원은 새로운 상품을 만들 수 있어야한다. POST
  • 회원은 등록한 상품 정보를 변경할 수 있어야 한다. PATCH
  • 회원은 등록한 상품을 삭제 할 수 있어야 한다. DELETE
  • 회원들은 등록한 상품에 정보를 읽을 수 있어야 한다. GET

Application-Level Middleware

Application-Level이란 express()함수로 생성 한 app 인스턴스에  app.use()HTTP 메소드인 요청(GET, PUT, POST) app.METHOD() 함수를 사용해 Middleware를 app isntance에 바인딩하는 미드웨어입니다.

 

미들웨어를 Application-Level에서 설정한 경로(URL)로 이동하여 핸들러를 실행한다.

 

app.js

 

express모듈을 가져온 후 express함수를 호출한 값을 받는 app인스턴스에 경로(URL)을 바인딩 시킨 결과는 다음과 같다.

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

// PORT
const port = 3000;

// 식탁
app.get('/table', (req,res) => {

});

// 침대
app.get('/bed', (req,res) => {

});

// 욕실
app.get('/bathroom', (req,res) =>{

});

// 화장대
app.get('/dressingTable', (req,res)=> {

});

// 변기
app.get('/toilet', (req,res) => {

})

app.listen(port, () => {
    console.log(`server ${port}`);
});

위에 코드는 짧지만, 원룸 집에 물건이 많아질 수록 Router에 대한 로직도 추가되고, Third-party Middleware에 대한 로직도 많아질 것 이다.

Router-Level Middleware

Router-Level은 express.Router()로 만든 Router 인스턴스에 미들웨어가 바인딩 되는 것 입니다.

router.use()나 router.METHOD()함수로 바인딩 할 수 있습니다.