Http 모듈과 Express 모듈의 차이점

한서연·2022년 3월 14일
1
post-thumbnail

오늘은 node.js를 공부하다가 http 모듈로 server를 생성하는 것과 express로 server를 생성하는 것의 차이점에 대해 궁금증이 생겨 정리하게되었다. 각 차이점에 대해 한 번 알아보자.


Http 모듈

http모듈은 웹 서버와 관련된 모든 기능들을 담은 모듈이다.

http모듈은 node.js에서 가장 기본적이고 중요한 웹 모듈이라고 할 수 있다. 웹서버와 클라이언트 생성 등 관련된 모든 기능을 담당하는 모듈이다.


Http 모듈에서 사용되는 객체

http모듈에서는 3가지의 객체를 주로 사용하는데 그것은 바로 server객체, request객체, response객체이다.

  • server 객체
    웹 서버를 생성할 때 사용하는 객체로, http모듈에서 가장 중요한 객체라고 말할 수 있다. createServer() 메서드를 사용하면 server객체를 생성할 수 있다.

  • request 객체
    클라이언트가 서버에게 전달하려는 정보나 메세지를 담는 객체이다.
    응답 메시지를 작성할 때 request이벤트 리스너의 첫 번째 매개변수로 전달된다.

  • response 객체
    서버에서 클라이언트로 응답 메세지를 전송시켜주는 객체이다.
    응답 메시지를 작성할 때 request이벤트 리스너의 두 번째 매개변수로 전달된다.


Http 모듈을 사용한 코드작성

아래는node.js에서 http모듈을 사용한 코드로, 번호에 따라 부가 설명을 달아보았다.

const http = require('http') // 1번

const server = http.createServer((req, res) => { // 2번
  console.log('request received')

  res.setHeader('Content-Type', 'application/json') // 3번
  res.end(JSON.stringify({ message: "Welcome to seoyeon's server!" }))// 4번
});

server.listen(8000, () => {
  console.log('server is running on PORT 8000')
  • 1번
    : node.js 내장 http 모듈을 가져와서 아래에서 사용할 수 있도록 변수에 담는 코드이다

  • 2번
    : http.createServer 는 라는 메소드는 인자로 또 다른 함수를 받는다 (콜백함수). 인자로 받은 함수의 첫번째 인자는 http request 의 정보가 담겨있는 객체, 두번째 인자는 http response 객체이다

  • 3번
    : 요청에 따른 응답의 header 를 application/json 형태로 준비한다.

  • 4번
    : res.end 함수를 통해서 요청에 대한 응답을 마무리 한다. 이 함수의 인자로 넘겨주는 값이 클라이언트가 받는 응답이 된다.

  • 5번
    : server 는 앞서 생성한 서버를 의미하고 이 서버 객체의 listen 함수는 인자로 포트 번호와 콜백함수를 받는다. 포트번호로 서버를 연다는 의미가된다.



💡 그런데 잠깐 여기서 의문이 하나 생긴다.
이렇게 http 모듈로 충분히 서버를 만들고 요청과 응답을 받을 수 있는데 굳이 Express 모듈 프레임워크를 써야하는것일까?

우리의 어플리케이션은 상단에 만든 규모보다 점점 더 규모가 커질것이다. 유저 회원가입, 로그인 처리, 프론트엔드 측에서 요구하는 정보 응답으로 보내주는 등의 작업을 해야한다.

이렇게 해당 자원에 대해 다른 함수(로직)을 실행하도록 하는 것을 라우팅 이라고 하는데, 이것은 직접 request 객체에서 url과 method 에 따라서 조건문으로 분기해서 다른 로직(SignUp, Login, sendPosts)을 처리해야한다.

어플리케이션의 규모가 커질수록 서버를 실행하는 함수 안에서 수많은 조건문과 로직을 모듈화 하는데 많은 자원을 들이게 되고, 이런 불편함을 해소하기 위해서 탄생한 프레임워크가 Express로 라우팅과 로직의 모듈화를 위해 사용된다.



Express 모듈

node.js에서 가장 많이 쓰이고 널리 알려진 웹 서버 프레임워크이다.

Express 모듈은 웹 또는 모바일 어플리케이션을 위해 다양한 기능들을 제공하는 node.js 웹 어플리케이션 프레임워크이다. 현재 nodejs의 표준 웹서버 프레임워크로 불려질 만큼 많은 곳에서 사용하고 있다.

Express 모듈은 프레임워크이기 때문에 웹 어플리케이션을 만들기 위한 각종 라이브러리와 미들웨어 등이 내장되어있어 개발자들이 개발하기에 편리하다는 특성을 지니고 있다. 또한 이것을 사용하는 많은 개발자들에게 Express에서 정한 규칙을 권하여 코드작성의 통일성을 향상시킬 수 있다.


Express 모듈을 사용한 코드작성

const http = require('http')
const express = require('express')

const app = express()
app.use(express.json())

app.get('/', (req, res) => {
  res.json({ message: '/ endpoint' })
})

app.post('/signup', (req, res) => {res.json('signup success')})
app.post('/login', (req, res) => {res.json('login success')})

const server = http.createServer(app)

server.listen(8000, () => {
  console.log('server is listening on PORT 8000')
})

만약 이것을 http모듈을 통해 작성했다면 조건문으로 라우팅 처리를 했을것이다. 이렇게 Express 모듈을 사용하면 간편하게 라우팅 처리를 하고, 각각의 요청을 처리하는 함수를 분리시켜 더욱 더 직관적인 코드작성을 할 수 있게 된다.

0개의 댓글