All Articles

Express?

Express는 웹 서버와 API를 만들기 위한 강력하면서도 유연한 Javascript framework 이다. Javascript를 잘 쓰는 프론트앤드 개발자라고 해서 Node.js 를 잘 다룰줄 알아야하는 것은 아니지만, 요즘에는 독립적으로 프론트앤드 서버를 띄우는 경우가 많으니, 간단하게라도 사용할줄 알면 좋다.

서버 띄우기

Express는 Node 모듈이라서 import를 해줘야 사용할 수 있다. 서버를 띄우기 위해서는 express 함수가 호출되어야 한다.

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

Node에서 모듈을 import하기 위해서는 require 키워드를 사용하면 된다. 참고로 express함수가 호출되면 Express의 instance인 애플리케이션 객체를 생성한다. 이 애플리케이션(app변수)으로 서버를 시작하고, 설정하고, 응답을 받아 여러 일들을 처리할 수 있다.

port를 지정해서 서버를 띄워보자. 서버가 제대로 실행되고, 응답받을 준비가 되면 2번째 인자인 콜백함수가 호출된다.

const PORT = 4001;
app.listen(PORT, () => {
  console.log(`Server is listening on port ${PORT}`);
});

app.use()와 응답/요청 메서드

app객체의 가장 기본 method는 use이다. 일단 가장 간단한 형태를 보자.

app.use((req, res) => {
  res.send('hello world');
})

app.use() 는 서버에 요청이 들어올떄마다 콜백함수를 실행한다. 만약 첫 번째 인자에 특정 path를 지정해주면, 해당 path로 요청할때만 콜백을 실행한다.

콜백의 첫번째 인자인 요청 객체(req)에는 아래와 같은 메서드가 있다.

method 설명
header() 요청 헤더의 속성을 지정하거나 추출
accepts() 요청 헤더의 Accept 속성확인
param() 요청 매개변수 추출
is() 요청 헤더의 Content-Type 속성확인
app.use((req, res) => {

  //header 속성 보기
  const agent = req.header('User-Agent');
  console.log(agent);

  //매개변수 추출
  const name = req.param('name');
  console.log(name);

  res.send('hello world');
})

콜백의 두번째 인자인 응답 객체(res)에는 아래와 같은 메서드가 있다.

method 설명
send() 매개변수 타입에 따라 적절한 형태로 응답
json() json 형태로 응답
redirect() 웹 페이지 경로를 강제로 이동

미들웨어

use() 메서드는 여러 번 사용할 수 있고, use에 인자로 넘기는 함수를 미들웨어라고 한다.

app.use((req, res, next) => {
  console.log('first');
  next();
})
app.use((req, res, next) => {
  console.log('second');
  next();
})
app.use((req, res, next) => {
  console.log('third');
  res.send('end')
})

위의 코드를 실행해보면 first, second, third 가 콘솔에 찍히고 end라는 응답을 보낸다. 이렇게 요청의 응답을 보내기 전까지 중간에 여러 일들을 실행시킬 수 있다. 미들웨어를 추가하려면 use의 매개변수에 넣으면 된다. 위의 코드에서는 콜백함수가 곧 미들웨어라고 할 수 있다.

미들웨어 종류는 진짜 많고, 많은 개발자들이 개발해서 배포하고 있지만 그 중에 몇 가지만 보자.

middleware 설명
logger 웹 요청이 들어왔을 때 로그 출력
bodyParser POST 요청 매개변수 추출
cookieParser 요청 쿠키를 추출
router 페이지 라우트를 수행
static 측정 폴더를 서버의 루트 폴더에 올림

reference

  • codecademy
  • Express 공식문서
  • 모던웹을 위한 Node.js 프로그래밍