Koa.js

Introduction

제가 개발을 하기로 마음먹고 처음으로 프로젝트를 진행한 곳은 SOPT라는 대외활동 동아리입니다. 당시에는 express라는 노드 기반 프레임웍을 사용해서 배웠고, 이후에도 Node.js기반의 백엔드 서버 개발을 진행함에 있어서 다른 프레임웍들은 제 개발에서 배제되었습니다. 다행히도 최근에 회사에서 Koa.js기반의 백엔드를 추가개발 할 일이 생겨서 학습하게 되었습니다.

Koa.js의 간단한 설명을 보면 다음과 같습니다. (Koa.js 홈페이지 중 스크린샷)

네, express팀에서 만들었고 훨씬 경량화되었고 더 강화된 기능들을 제공한다는 건데요, koa를 시작함에 있어서 express의 구조와 유사한 부분이 많아서 뭐지...? 싶었는데 이런 이유가 있더군요.

Installation

At CMD

npm install koa

or

npm i koa

Setting

import Koa from 'koa';
import KoaRouter from 'koa-router';
import KoaBody from 'koa-body';
import KoaCors from 'koa-cors';
import KoaStatic from 'koa-static';
import KoaRange from 'koa-range';
import KoaLogger from 'koa-logger';

koa에 관련된 대부분의 모듈들을 가져온 코드입니다.

koa

koa.js를 사용 가능하도록 하는 통합 모듈.

koa-router

express의 Router를 koa식으로 구현한 모듈.

koa-body

express의 body-parser를 생각하시면 될 것 같습니다.
request의 body에 데이터를 전달할 때 body에 담아주는 역할을 합니다.

koa-cors

cors를 허용해주도록 설정하는 모듈입니다. 제 기억으로 express상에서는 따로 cors라는 모듈이 있어서 적용하는 것으로 기억했는데, koa에서는 아예 자체 모듈이 있네요.

koa-static

image등의 static한 resource들을 사용하게 해주는 모듈입니다.

koa-range

request의 파라미터에 담을 수 있는 값은 길이제한이 있는거 아시죠? 길이제한을 늘려주는 모듈입니다.

koa-logger

서버 로깅을 도와주는 모듈입니다.

Usage

/src/index.js

import Koa from 'koa';
import KoaRouter from 'koa-router';
import KoaBody from 'koa-body';
import KoaCors from 'koa-cors';
import KoaStatic from 'koa-static';
import KoaRange from 'koa-range';
import KoaLogger from 'koa-logger';

import api from './api/index.js';
import environment from '../utils/envoriment.js';

console.log(`Current enviromnet is ${process.env.NODE_ENV}`)

environment();

const app = new Koa();
const router = new KoaRouter();

const PORT_NUMBER = process.env.SERVER__PORT;
const HOST_ADDRESS = process.env.SERVER__HOST;

router.use('/api', api.routes());

app.use(KoaRange);
app.use(KoaLogger());
app.use(KoaCors());
app.use(KoaBody({ multipart: true }));
app.use(KoaStatic('public'));
app.use(router.routes()).use(router.allowedMethods());

app.listen(PORT_NUMBER, HOST_ADDRESS, () => {
    console.log(`::: Server start :::\nTest server is listening to port ${PORT_NUMBER}\n`);
});

/src/api/index.js

import KoaRouter from 'koa-router';

import v1 from './v1/index.js';

const api = new KoaRouter();

api.use('/v1', v1.routes());
api.get('/check', (ctx, next) => {
  ctx.status = 200;
  ctx.body = {
    message: 'Success',
    data: undefined,
  };

  return;
});

export default api;

코드를 실제로 적용한다면, 위와 같이 사용하시면 됩니다. express-generator로 생성된 express 프로젝트를 사용하셨거나, 혹은 express만을 사용하여 프레임웍을 구축하셨던 분들이라면 매우 익숙한 구조일 것이라고 생각됩니다.

다만 기존에 (req, res, next) 를 콜백함수 형식으로 받았던 express와 달리, ctx라는 통합 변수 하나와 next로 받아 작업을 이어가게 되는점이 차이점입니다.

혹시나 처음이여서 해당 코드를 복사하여 사용하시려는 분들은 그대로 하시면 에러가 발생할 것입니다. 제 포스팅 중 이후에 출간할 '환경변수'부분을 참고해 주시면 잘 사용하실 수 있을 것 같습니다.

해당 방식을 사용한 코드들은 제 Github에 방문에 주시면 찾아볼 수 있으며, 댓글로도 질문하셔도 괜찮습니다.

Typescript, ES6와 Class 기반의 koa.js 프로젝트

https://github.com/HASA-06/structure-server

좋은 웹페이지 즐겨찾기