본문 바로가기
개발공부/NodeJS

Express 웹서버 구축 - route, body-parser, compression, cookie-session, express-session, session-file-store, cors, morgan, multer, response-time, connect-timeout

by bzerome240 2023. 5. 28.

Express.js

Nodejs 에서 API 서버를 구축하는 데 가장 많이 사용되는 대표적인 프레임워크

미들웨어 모듈: 요청과 응답의 중간에서 목적에 맞는 특정 기능을 하는 함수

 

 

 

같이 사용하는 모듈

  • route
  • body-parser
  • compression
  • cookie-session / express-session
  • session-file-store
  • cors
  • morgan
  • multer
  • response-time
  • connect-timeout

 


 

package.json 생성

npm init

 

Express 설치

node_modules라는 폴더가 자동으로 생성된다.

npm i express

 

nodejs 실행

node app.js

 


 

라우팅

특정 엔드 포인트에 대한 클라이언트 요청에 응답하는 방법을 결정하는 것

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

app.listen(3000, () => {
  console.log('server start')
})

app.get('/customer', function(req, res) {
  res.send('get 응답')
}

 

응답 메소드

  • res.download() : 파일 다운로드
  • res.end() : 응답 프로세스 종료
  • res.json() : JSON 응답 전송
  • res.jsonp() : JSONP 지원을 통해 JSON 응답 전송
  • res.redirect() : 요청의 경로를 재지정
  • res.render() : 뷰 템플릿을 렌더링
  • res.send() : 다양한 유형의 응답 전송
  • res.sendFile() : 파일을 octet 스트림으로 전송
  • res.sendStatus() : 응답 상태 코드를 설정한 후 해당 코드를 응답 Body에 담아서 전송

 

하나의 라우트에서 next 오브젝트를 사용해서 2개 이상의 콜백 함수를 실행할 수 있다.

app.get('/customer', function(req, res, next) {
  console.log('callback 1')
  next()
}, function(req, res, next) {
  res.send('callback 2')
}

 

app.route()

모듈식 라우트를 작성하면 중복성이 감소하여 코드를 효율적으로 관리할 수 있다.

app.route('/customer')
  .get(function(req, res) {
    res.send('고객정보 조회')
  })
  .post(function(req, res) {
    res.send('고객정보 추가')
  })
  .put(function(req, res) {
    res.send('고객정보 수정')
  })
  .delete(function(req, res) {
    res.send('고객정보 삭제')
  })
}

 

express.Router

여러개의 파일로 분리해서 각각의 용도에 맞게 구현

const express = require('express')
const cutsomerRoute = require('./routes/customer')
const productRoute = require('./routes/product')
const app = express()

app.use(express.json({
  limit: '50mb'
}))

app.listen(3000, () => {
  console.log('server start')
})

app.use('/customer', cutsomerRoute)
app.use('/product', productRoute)

 


 

에러 처리하기

app.use(function (err, req, res, next) {
  res.status(500).json({statusCode: res.statusCode, errMsg: err.msg})
})

 


 

express.static 정적 파일 제공하기

app.use(express.static('public')) // public 폴더 내의 모든 정적 파일을 URL로 제공할 수 있다

 


 

body-parser

요청 본문 구문을 해석해서 req.body 속성으로 사용하게해주는 미들웨어

npm i body-parser

 

express 4.16 이상부터는 내장돼있어서 호출이 필요없다.

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

// app.use(bodyParser.urlencoded({extended: false })
app.use(express.urlencoded({ extended: false })

app.use(express.json())

 

 


 

compression

압축을 위한 미들웨어

응답 데이터가 큰 경우 사용 ex) 이미지, 지도 데이터

npm i compression

 


 

cookie-session

쿠키 내 클라이언트의 세션 데이터를 저장하는 쿠키 기반 세션 관리 미들웨어

브라우저 최대 쿠키 크기 내에서만 저장 가능하다 (서버측 데이터베이스 리소스는 필요하지 않다)

npm i cookie-session

 

express-session

서버에 저장하는 세션 관리 미들웨어

물리적 DB 혹은 파일로 저장하면 더 안전하고 많은 데이터를 저장 가능

npm i express-session

 

session-file-store

세션 정보를 파일로 저장해서 관리 가능하다.

npm i session-file-store

 


 

CORS

도메인 또는 포트가 다른 서버의 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제

npm i cors

orgin : URL 구조의 프로토콜, 호스트, 포트를 합친 것

Cross-Origin이란 서로다른 Origin 중 하나라도 다르면 다른 출처로 인식하고 CORS 설정을 하지 않으면 접근할 수 없도록 하는것

 


 

morgan

HTTP 요청에 대한 로그를 관리하는 미들웨어

npm i morgan

 


 

multer

multi-part/form-data 데이터를 처리하기 위한 미들웨어

파일을 쉽게 업로드하게 해준다.

npm i multer

 


 

response-time

클라이언트 요청에 대한 응답 시간을 관리하는 미들웨어

npm i response-time

 

클라이언트로부터 요청 올 때마다 응답하는데 걸린 시간을 콘솔 창에 출력하기

const express = require('express')
const responseTime = require('response-time')
const app = express()

app.use(responseTime((req, res, time) => {
  console.log(`${req} ${time}`)
}))

app.get('/', function(req, res) {
  res.send('hello')
})

app.listen(8000)

 


 

connect-timeout

클라이언트의 요청에 대해 지정된 시간 동안 응답을 못하는 경우 타임아웃 처리하는 미들웨어

라우터별로 타임아웃을 지정하는 것을 추천한다.

 

728x90
반응형

댓글