node.js 프레임워크 express or koa

김철준·2023년 3월 11일
0

node.js

목록 보기
3/6

express or koa 둘 중 뭐가 더 좋을까?

node.js에서 백엔드 프로그래밍을 하여 서버를 구축할 때 편리한 기능을 사용하기 위해 프레임워크를 사용합니다.

그 중에 본인은 express와 koa를 둘 다 사용해보고 사용 경험을 적어보려합니다.

결론적으로는 저는 express의 사용 경험이 더 좋았습니다.

  1. 미들웨어 처리 방식
    미들웨어 처리 방식 관점에서의 차이입니다.
  • koa : 미들웨어의 콜백함수들이 프로미스를 반환하기 때문에 async/await문법을 사용하여 처리 가능합니다.
    사실상 개인적으로 koa를 사용하는 가장 큰 이유라고 생각합니다.
const Koa = require('koa');
const app = new Koa();

app.use(async (ctx, next) => {
  try {
    const result = await doSomethingAsync();
    ctx.body = result;
  } catch (err) {
    ctx.throw(500, err);
  }
  await next();
});

app.listen(3000);
  • express : 기본적으로 미들웨어의 콜백함수들이 프로미스를 반환하지 않습니다. 따라서 미들웨어 함수들을 async/await 문법과 사용하기 위해서는 콜백 함수를 promise 변환해주는 함수를 구현하여 사용해야한다.
function myMiddleware(req, res, next) {
  return new Promise((resolve, reject) => {
    // 비동기 작업 수행
    doSomethingAsync()
      .then(result => {
        res.send(result);
        resolve();
      })
      .catch(err => {
        reject(err);
      });
  });
}

...
...
app.get('/', async (req, res, next) => {
  try {
    await myMiddleware(req, res, next);
  } catch (err) {
    next(err);
  }
});
  1. Context Object
  • express: request, response 객체를 개별적으로 다룹니다.
app.get('/', async (req, res, next) => {
  try {
    await myMiddleware(req, res, next);
  } catch (err) {
    next(err);
  }
});
  • koa: Context 객체를 사용하여 request, response, 미들웨어, 데이터 등을 포함합니다.
const Koa = require('koa');
const app = new Koa();

app.use(async (ctx, next) => {
  try {
    const result = await doSomethingAsync();
    ctx.body = result;
  } catch (err) {
    ctx.throw(500, err);
  }
  await next();
});

app.listen(3000);
  1. Routing
  • express: 별도의 라우팅 라이브러리 없이 라우팅이 가능합니다.
const express = require('express');
const app = express();

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

app.post('/users', (req, res) => {
  // 새로운 사용자 추가
  res.send('User created!');
});

app.put('/users/:id', (req, res) => {
  const userId = req.params.id;
  // 사용자 정보 수정
  res.send(`User ${userId} updated!`);
});

app.delete('/users/:id', (req, res) => {
  const userId = req.params.id;
  // 사용자 정보 삭제
  res.send(`User ${userId} deleted!`);
});

app.listen(3000, () => {
  console.log('Server started on port 3000');
});
  • koa: 라우팅을 하기 위해서는 koa-router 라이브러리르 사용해야합니다.
const Koa = require('koa');
const Router = require('@koa/router');
const app = new Koa();
const router = new Router();

router.get('/', (ctx) => {
  ctx.body = 'Hello World!';
});

router.post('/users', (ctx) => {
  // 새로운 사용자 추가
  ctx.body = 'User created!';
});

router.put('/users/:id', (ctx) => {
  const userId = ctx.params.id;
  // 사용자 정보 수정
  ctx.body = `User ${userId} updated!`;
});

router.delete('/users/:id', (ctx) => {
  const userId = ctx.params.id;
  // 사용자 정보 삭제
  ctx.body = `User ${userId} deleted!`;
});

app.use(router.routes());
app.use(router.allowedMethods());

app.listen(3000, () => {
  console.log('Server started on port 3000');
});
  1. Middlewares
  • express: 생태계가 광범위하고, 큰 커뮤니티를 가지고 있어 다양한 미들웨어들이 존재
  • koa: Middlewares 자체가 코어부에 최소화 되어있고, 개발자가 직접 구현하는 경우가 많다.

정리

  • koa의 가장 큰 장점은 미들웨어의 콜백함수들에 대하여 따로 프로미스 반환함수를 구현하지 않고 async/await를 사용할 수 있기 때문에 편하다는 것입니다.

  • express 기본적으로 내장되어있는 미들웨어가 많습니다. 이에 반해 koa의 경우에는 라우터,템플릿 등과 같은 기능을 별도로 라이브러리를 설치하여 사용하거나 필요한 기능이 있다면 개발자가 별도로 구현하여 사용해야합니다.

  • 따라서 개인적으로는 개발시 koa보다는 express를 선호하게 되었습니다. express가 사용자가 더 많으며 관련 정보량이 더 많아 구글링하여 정보를 찾기가 더 쉽다는 장점이 있었고 koa는 라우팅이나 템플릿 등을 사용할 때 별도로 설치하고 필요에 따라 내가 직접 구현해야했지만 필요에 따른 기능이 express에서 대부분 구현되있어 가져다 쓰기만 되기 때문에 express가 더 좋았던 것 같습니다.

profile
FE DEVELOPER

0개의 댓글