express 대신 koa 사용해보기

1
post-thumbnail

node.js로 서버를 만들면 항상 express를 사용했는데,
지금 사용중인 velog를 만드신 velopert님의 코드를 보니 koa로 서버를 구성하셨길래, 참고하면서 koa로 서버를 만들어보았다.

먼저, 설치해야되는 라이브러리 리스트이다. (버전은 중요하지 않다.)

{
  "dependencies": {
      "@koa/router": "^9.4.0",
      "koa": "^2.13.0",
      "koa-bodyparser": "^4.3.0",
      "koa-logger": "^3.2.1",
      "kompression": "^1.0.2",
  },
  "devDependencies": {
      "@types/koa": "^2.11.4",
      "@types/koa-bodyparser": "^4.3.0",
      "@types/koa-logger": "^3.1.1",
      "@types/koa__router": "^8.0.2",
      "@types/kompression": "^1.0.0",
  }
}

router, logger, bodyparser가 따로 있는것을 확인할 수 있다.
express는 전부 자기가 포함하려 하는 느낌인데, koa는 반대로 전부 분리시켰다.
소개에 나온대로 express와는 반대로 필요한 기능만 사용자가 쓸 수 있도록 가볍게 만든 것 같다.

아래는 작성한 코드다.
로컬에서 개발할 땐 리액트가 서버에 붙을 수 있게 cors를 사용해서 해당 코드가 포함되어있다.

app.ts

import dotenv from 'dotenv';
import Koa from 'koa';
import bodyParser from "koa-bodyparser";
import logger from 'koa-logger';
import compress from 'kompression';
import cors from '@koa/cors';
import routes from './routes';

process.env = {
  NODE_ENV: 'development',
  PORT: 3001,
};

dotenv.config();

const app = new Koa();

app.use(bodyParser());
app.use(logger());
app.use(compress());
app.use(routes.routes()).use(routes.allowedMethods());
if (process.env.NODE_ENV === 'development') {
    app.use(cors());
}

const { PORT } = process.env;

app.listen(PORT, () => console.log('server is listening to port', PORT));

routes/index.ts

import Router from '@koa/router';

const routes = new Router();

routes.get('/', ctx => {
    ctx.body = 'hello world!';
});

export default routes;

express와 크게 달라보이진 않는데, router가 (req, res) 로 분리되지 않고 ctx로 합쳐졌다.
그러나, 이 부분도 비슷하게 쓸 수 있으니 큰 문제는 없었다.

profile
지상 최강의 개발자 쥬니니

0개의 댓글