본문 바로가기

Node.js, 미들웨어 & 라우터 핸들러 본문

개발/node.js

Node.js, 미들웨어 & 라우터 핸들러

자전하는명왕성 2023. 4. 13. 19:49

이번 포스팅에서는 node.js 미들웨어와 라우터를 핸들링하는 방법에 대해 다룬다.

 

미들웨어

먼저 미들웨어란, 클라이언트와 서버 중간에서 다리 역할을 하는 컴포넌트를 의미한다.

정확히는 소프트웨어에서 다른 소프트웨어와 함께 동작하도록 설계된 컴포넌트라고 할 수 있으며, 다음과 같은 역할을 한다.

  • 서버와 클라이언트 사이의 통신
  • 데이터베이스와의 상호작용
  • 웹 어플리케이션 라우팅
  • 보안 로깅

 

node.js에서의 미들웨어는 app.use 메서드를 통해 등록 & 동작한다.

app.use(cors({ origin: "*" }));
app.use(helmet());
app.use(express.json());
app.use(express.urlencoded({ extended: true, limit: "700mb" }));

 

사용하는 기능들을 추상화하고 분리시키는데 큰 역할을 하며, 재사용성이 높다.

추가적으로 app.use() 메서드는 미들웨어나 라우터로만 사용하는 것이 바람직하다. (코드 가독성, 유지 보수성, 모듈화, 재사용성 향상)

 

라우터

라우터는 클라이언트의 요청 URL에 따라 적절한 핸들러 함수를 호출하는 역할을 한다.

http 메서드와 URL 경로를 기반으로 요청을 처리하며, 라우터를 분리하여 관리할 경우 코드들을 간결하고 가독성있게 작성할 수 있다.

 

분리하는 방식에 대해서는 Nest.js 에서 사용하는 방식과 크게 다르지 않다.

// users
import { Router } from "express";

// Router
class UserController {
  router; // 라우터 설정
  path = "/users"; // 패스 설정
  
  constructor(){
    this.router = Router();
    this.init();
  }
  // 중략
}

const userController = new UserController();
export default userController;

 

 

 

폴더 내에 다음 예시와 같은 라우터가 여러 개 존재한다고 했을 때, 이를 한번에 관리하기 위해 분리할 필요가 있다.

 

// controllers
import UserController from "./users";

// 배열로 등록하여 router(컨트롤러들) 다룸
export default [
  UserController,
  ex1Controller,
  ex2Controller,
  ex3Controller,
//  ...
];

// index.js
import controllers from "./controllers"; // controllers 를 가져옴

// 배열로 구성되어 있는 라우터들을 실행
controllers.forEach((controller) => {
  app.use(controller.path, controller.router); 
});

따라서 이를 위해, controllers 폴더를 생성한 뒤, 다음과 같은 파일을 만들고 import한 라우터들을 배열로 하여 내보내는 작업을 거친다.

이후 index.js에서는 받아온 배열로 구성된 라우터들을, forEach를 통해 작동시키게 되면 정상적으로 API가 동작하는 모습을 볼 수 있다.

 

'개발 > node.js' 카테고리의 다른 글

node.js - jwtAuth 미들웨어 구현  (0) 2023.05.01
Node.js - PM2  (0) 2023.04.20
node.js & graphQL  (0) 2023.04.11
ORM / Sequelize & typeORM  (0) 2023.01.29
NestJS - 기초 구조 / graphQL  (0) 2023.01.25
Comments