Express.js의 Middleware와 REST API

박정훈·2022년 2월 22일
0

Backend

목록 보기
3/6

Middleware

HTTP 요청과 응답 사이에서 단계별 동작을 수행 해 주는 함수이다.
Express.js 미들웨어는 HTTP 요청이 들어온 순간부터 시작이 된다.
HTTP 요청과 응답 객체를 처리하거나, 다음 미들웨어를 실행할 수 있다.
HTTP 응답이 마무리 될 때까지 미들웨어 동작 사이클이 실행된다.

출처: 엘리스 AI 트랙

사용

req, res, next를 가진 함수를 작성하면 => middleware로 동작하게 된다.
req는 HTTP 요청을 처리하는 객체
res는 HTTP 응답을 처리하는 객체
next는 다음 미들웨어를 실행하는 함수

const logger = (req, res, next) => {
  console.log(`Request ${req.path}`);
  next();
}

Route Handler도 미들웨어의 한 종류로써, 라우팅 함수에 적용된 미들웨어다. 일반적인 미들웨어와는 다르게 path parameter를 사용 할 수 있다.

적용되는 위치에 따라서 어플리케이션 미들웨어, 라우터 미들웨어, 오류처리 미들웨어로 분류가 된다.

특정 경로의 라우팅에만 미들웨어를 적용할 수 있다.

router.use(auth); // 3번
router.get('/', (req, res, next) => {
  res.send('Hello Router);
}); // 4번
  
app.use((req, res, next) => {
  do something...
  next();
}); // 1번
  
app.use('/admin', router); // 2번

use나 http method 함수에 여러개의 미들웨어를 동시에 적용할 수도 있다.

app.use(middleware1, middleware2, ...);

오류처리 미들웨어

일반적으로 가장 마지막에 위치하는 미들웨어다. 다른 미들웨어와는 달리 err, req, res, next 네가지 인자를 가진다. 앞선 미들웨어에서 next함수에 인자가 전달되면 실행된다. next함수에 인자가 전달되면 중간 미들웨어를 건너뛰게 된다.

함수형 미들웨어

하나의 미들웨어에서 작동 모드를 선택하면서 사용하고 싶을 때 유용하다.
ex) API 별로 사용자의 권한을 다르게 제한하고 싶은 경우

REST API

REST 아키텍처를 준수한 웹 API를 RESTful API 라고도 한다.

REST

Representational State Transfer
웹에서 자료를 전송하기 위한 표현 방법에 대한 아키텍쳐
REST를 정확하게 구현하기 위해선 많은 제한조건이 있지만,
기본적인 REST 가이드를 따르면 조금 더 좋은 구조의 API를 구성할 수 있다.

API

Application Programming Interface
서비스나 프로그램 간에 미리 정해진 기능을 실행 할 수 있도록 하는 규약이다.
운영체제 API, 프로그램언어 API, 웹 API 등이 있다.

기본 가이드

REST API는 API의 동작을 HTTP method + 명사형 URL로 표현한다.
REST API URL의 자원은 복수형으로 표현된다.
하나의 자원에 대한 접근은 복수형 + 아이디를 통해 특정 자원에 접근한다.
REST API는 URL을 통해 자원을 계층적으로 표현한다.

웹 API는 기본적으로 데이터를 문자열로 전송한다.

MVC 패턴

웹 서비스의 가장 대표적인 프로젝트 구성 패턴으로 프로젝트의 기능들을 어떻게 분리할지에 대한 하나의 구성 방법이다.
Model - View - Controller 를 구분하여 프로젝트 구조를 구성하는 것이다.

Model

Model은 데이터에 접근하는 기능 또는 데이터 그 자체를 의미한다.
데이터의 읽기, 쓰기는 Model을 통해서만 이루어지도록 구성해야 한다.

View

View는 데이터를 표현하는 기능을 의미함
주로 Controller에 의해 데이터를 전달받는다.
전달받은 데이터를 화면에 표시해주는 기능을 담당한다.

Controller

Controller는 Model을 통해 데이터에 접근하여, 처리 결과를 View로 전달하는 기능을 의미한다.
웹 서비스에서 주로 라우팅 함수가 해당 기능을 수행한다.

profile
그냥 개인적으로 공부한 글들에 불과

0개의 댓글