글 작성자: 택시 운전사
반응형

  • 비교 기준
    • 인기(GitHub 스타 수, npm 다운로드 수)
    • 설치
    • 기초 Hello World 앱
    • 장점
    • 단점
    • 성능
    • 보안
    • 커뮤니티 참여

Express

Express는 최소한의 유연한 웹과 모바일 애플리케이션을 위한 탄탄한 특징들을 제공하는 Node.js 웹 애플리케이션 프레임워크로 서버와 라우트를 다루는 걸 도와주는 미들웨어처럼 작동합니다.

설치

express를 설치하기 위해서 Node.js가 설치되어있어야 합니다. 만약 express를 특정 위치에 설치하고자한다면

$ npm install express --save

잠깐 설치하고 dependencies 목록에 추가하기를 원하지 않는다면

$ npm install express --no-save

Hello World

아래는 3000번 포트를 사용하여 "Hello World"로 응답하는 express 앱을 만드는 가장 간단한 예시입니다.

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

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

다른 url로 간다면 서버는 404 Not Found로 응답할 것입니다.

장점

  • Node.js 웹 미들웨어의 표준입니다.
  • 간단하고, 최소화되어있으며, 유연하고 스케일에 자유롭습니다.
  • 빠른 앱 개발
  • 전반적인 커스터마이징 가능
  • 낮은 러닝 커브
  • 서드 파티 서비스나 미들웨어와의 쉬운 통합
  • 브라우저에 주로 집중되어있으며, 템플릿이나 렌더링 기능을 거의 즉시 사용할 수 있습니다.

단점

Express.js가 매우 편리하고 사용하기 쉬운 프레임워크이지만, 개발 과정중 적잖은 단점이 영향을 줄 것입니다.

  • 코드를 유지할 때 문제가 발생하지 않으려면 구조가 매우 명확해야할 필요가 있습니다.
  • 코드 사이즈가 증가할 수록, 리팩토링이 매우 어렵습니다.
  • 모든 엔드 포인트를 생성해야하기 때문에, 많은 노가다가 필요하다.

성능

Express는 익숙한 Node.js의 특징을 숨기지 않고 기초적인 웹 애플리케이션 기능의 얆은 레이어를 제공합니다.

보안

Node.js의 취약성이 곧 Express의 취약점이 됨, 따라서 Node.js의 취약성을 예의주시하고 있어야하고, Node.js 최신 안정 버전으로 지속적으로 업데이트 해야 합니다.

Koa

  • Express를 만든 팀이 2016년도에 만듦
  • 내장 미들웨어가 번들되어있지 않는 등 기본으로 설계된 뼈대가 적지만 탄탄함(경량화)
  • 미들웨어를 붙이는 등 커스터마이징이 자유로움
  • 태생이 ES6 기반이기 때문에 async/await을 지원해서 try-catch 에러 처리가 필요없음
  • 콜백 지옥 탈출 가능 (개발자 경험)

보안

보안을 위한 다양한 미들웨어나 헤더가 준비되어있음

성능

  • Express(38510 req/sec) < Koa(50933 req/sec)

코드 비교

Setup

  • Express

    const express = require('express'); 
    const app = express(); 
    const PORT = process.env.PORT || 3000; 
    const server = app.listen(PORT, () => { 
      console.log(`Express is listening to <http://localhost>:${PORT}`); 
    });
  • Koa

    const koa = require('koa'); 
    const app = koa(); 
    const PORT = process.env.PORT || 3000; 
    const server = app.listen(PORT, () => { 
      console.log(`Koa is listening to <http://localhost>:${PORT}`); 
    });

Middleware

반응형