Backend/Node.js

Node.js - Express.js와 REST API (1)

yxemsy 2022. 2. 20. 21:03

1) Middleware

미들웨어는 Express.js 동작의 핵심으로,
HTTP 요청과 응답사이에서 단계별 동작을 수행해주는 함수다.

Middleware 동작 원리. 출처: 엘리스 AI트랙


2) 미들웨어의 작성과 사용

const middle = (req, res, next) => { 
   ...
    next();
 }
 
const middle2 = (req, res, next) => { 
   ...
    next()
        
 }
 	next();
}

위의 코드처럼 req, res, next를 인자로 갖는 함수를 작성하면 미들웨어가 된다.

next() 함수를 통해 다음 미들웨어를 호출하는 것이다.

next() 함수가 호출되지 않으면 미들웨어 사이클이 멈추기 때문에 주의해야한다.

 

 

- 어플리케이션 미들웨어

app.use((req, res, next) => {  
    ...
    next()	// 첫 번째로 실행
})

app.use(middle1);	// 두 번째로 실행

app.get('/', (req, res, next) => {
	res.send('...')	// 세 번째로 실행
})

위 코드와 같이 app.use나 get은 HTTP요청이 들어온 순간부터 적용된 순서대로 동작한다.

 

 

- 라우터 미들웨어

router.use(mid);

router.get('/', (req, res, next) => {
     res.send('...');
 });
 
app.use((req, res, next) => {
	...
    next();
});

app.use('/admin', mid)
다음 순서대로 동작한다.
app.use((req, res, next)... -> app.use('/admin, mid) -> router.use -> router.get

라우터 미들웨어는 특정 경로의 라우팅에만 미들웨어를 적용하기 위한 방법이다.

 

 

- 오류처리 미들웨어

err, req, res, next 네 가지 인자를 가지며, next 함수에 인자가 전달되면 실행된다.

 

app.use((req, res, next) =>{ 
    if(!isAdmin(req)) {
    next(newError('Not Authorized'));
    return;}
    next();
});

app.get('/', (req, res, next) => { 
	res.send('Hello');
});

app.use((err, req, res, next) => {
	res.send('Error');
});

처음 app.use의 next 인자에 오류를 넘겨주었으므로 app.get 미들웨어는 패스하고 마지막 오류처리 미들웨어가 실행된다.

 

 

- 함수형 미들웨어

const auth = (memberType) => {
    return(req, res, next) => { 
    	if(!checkMember(req, memberType)) {
        	next(newError(`member not ${memberType}`))
            return
          }
            next()
      }
 }

app.use('/admin', auth('admin'), adminRouter)
app.use('/users', auth('member'), userRouter)

// 코드 출처: 엘리스AI트랙

위 코드의 auth 함수는 미들웨어 함수를 반환하는 함수이다. auth함수 실행 시 미들웨어의 동작이 결정되는 방식으로 작성됐다. 

auth()안의 memberType인자로 'admin' 과 'member'가 들어오는데 그 인자값으로 분기를 실행한다.

 


3) REST API

REST 아키텍처를 준수하는 웹 API라고 한다.

REST는 REpresentational State Transfer의 약자로, 웹에서 자료를 전송하기 위한 표현방법에 대한 아키텍처이다.
 
API는 Application Programming Interface의 약자로, 서비스나 프로그램 간에 미리 정해진 기능을 실행할 수 있도록 하는 규약이다.  

 


4) JSON

JavaScript Object Notation의 약자로, 자바스크립트에서 객체를 표현하는 표현식이다.
데이터 표현 방식이 간단하고 쉬워서 데이터 전송식으로 주로 사용됨.

다른 포스팅에서도 다뤘지만 JSON은 { key: value }로 표현한다. 파이썬의 딕셔너리와 같다고 보아도 무방하다.

 


5) Express.js로 REST API 구현하기

그 전에 앞서 , MVC 패턴을 알고가자.

 

*MVC 패턴

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

 

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

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

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

(Node.js는 기본적으로 JSON을 처리하는 방법을 가지고 있어서 View는 생략될 수도 있다.)

 

 

다음 포스팅에서 계속...

 

'Backend > Node.js' 카테고리의 다른 글

Node.js - Express.js와 MongoDB로 웹서비스 만들기  (0) 2022.02.26
Node.js - Express.js와 REST API (2)  (0) 2022.02.20
Node.js - 웹과 Express.js  (0) 2022.02.20
Node.js - NPM과 모듈  (0) 2022.02.18
Node.js 이해  (0) 2022.02.18