Express Refactoring

semin·2023년 6월 7일

section 2

목록 보기
5/6
post-thumbnail

Express는 Node.js를 기반으로한 웹 개발 프레임워크다.

Node.js의 기본 HTTP 모듈보다 간편하게 웹 서버를 만들 수 있도록 도와준다고 한다.

익스프레스 없이 작성한 코드를 리팩토링해 본다.

to Express

모듈 및 객체 생성

// 이전 코드
const http = require('http');
const PORT = 4999;
const ip = 'localhost';

const server = http.createServer((request, response) => {
  // ...
}).listen(PORT, ip, () => {
  console.log(`http server listen on ${ip}:${PORT}`);
});

// Express 변환 코드
const express = require('express');
const app = express();
const PORT = 4999;

app.listen(PORT, () => {
  console.log(`Express server listen on port ${PORT}`);
});
  • http 모듈 요청해 HTTP 서버 생성 → express 모듈 요청, Express App 객체를 생성
  • http.createServer 사용해 서버 생성 → app.listen 메소드 사용, Express App 실행 서버 시작

OPTIONS 요청 처리

// 이전 코드
const server = http.createServer((request, response) => {
  if (request.method === 'OPTIONS') {
    response.writeHead(200, defaultCorsHeader);
    response.end();
    return;
  }
  // ...
});

const defaultCorsHeader = {
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
  'Access-Control-Allow-Headers': 'Content-Type, Accept',
  'Access-Control-Max-Age': 10
};

// Express 변환 코드
const cors = require("cors");
app.use(cors()); // cors 적용

OPTIONS 요청 처리를 위해 조건문, response.writeHead 메소드

→ cors 하나만 불러오면 된다… 개인적으로 이거 좀 충격

라우팅 및 요청 처리

// 이전 코드 생략

// Express 변환 코드
app.post('/lower', (req, res) => {
  let body = [];
  req.on('data', (chunk) => {
    body.push(chunk);
  }).on('end', () => {
    body = Buffer.concat(body).toString().toLowerCase();
    res.set(defaultCorsHeader);
    res.end(body);
  });
});

app.post('/upper', (req, res) => {
  let body = [];
  req.on('data', (chunk) => {
    body.push(chunk);
  }).on('end', () => {
    body = Buffer.concat(body).toString().toUpperCase();
    res.set(defaultCorsHeader);
    res.end(body);
  });
});

app.use((req, res) => {
  res.sendStatus(404);
});

app.listen(PORT, () => {
  console.log(`Express server listen on port ${PORT}`);
});
  1. '/lower'와 '/upper' 경로에 대한 POST 요청 처리 - 요청 데이터를 대/소문자로 변환한 후 응답 전송
  2. 이외의 경로로 들어온 모든 요청에 대해 404로 응답 전송

장점?

당연하게도 두 코드는 같은 동작을 수행한다. (그것이 리팩토링이니까)

사실 이전 코드와 리팩토링한 코드의 분량 차이가 엄청난 정도는 아니다.

이것은 개미 융털 사이즈의 맛보기 스푼급 코드니 당연한 일.

프로젝트 규모가 커질수록 그 장점이 극대화된다.

간결하고 직관적인 문법

직관적이고 간결한 API를 제공한다.

따라서 개발자는 라우팅, 미들웨어, 요청 및 응답 처리 등을 더 쉽게 작성할 수 있게 됨.

더 적은 코드로 같은 작업을 수행할 수 있으며, 이해하기 쉽고 유지보수가 용이. (역시 AS가 제일 중요)

유연성과 확장성

Express는 강력한 미들웨어 지원을 통해 유연성과 확장성을 제공한다.

여기서 미들웨어는 요청과 응답 처리를 중간에 가로채고 수정할 수 있는 기능이다.

Express에서는 다양한 미들웨어로 애플리케이션에 필요한 기능을 쉽게 추가하거나 커스텀할 수 있다고 함.

두근두근~

넓은 커뮤니티와 생태계

많은 개발자들이 사용해서 커뮤니티와 생태계가 활발하다?

다양한 라이브러리, 플러그인, 패키지 등이 존재한다는 의미기도 하다.

또 아기 개발자들에게 가장 중요한… 문제 발생 시 참고할 고수님들과 리소스들이 풍부하다는 것. (압도적 감사)

웹 프레임워크 표준

오랜 역사와 사용자들의 신뢰를 바탕으로 웹 개발을 위한 ㅍ레임워크 중에서는…

사실상 표준 프레임워크로 여겨지는 것 같다.

많은 고수님들이 Express 기반 앱을 작성하고 있으시다.

이것은 뭐가? 기존 코드를 이해하고 유지보수하는 것이 상대적으로 쉽다~…

0개의 댓글