Seongwon Lim

[node.js] Koa framework 개념 정리 및 사용하기 본문

Node.js

[node.js] Koa framework 개념 정리 및 사용하기

limsw 2022. 5. 9. 20:29
반응형

서론

이번 포스팅 글에서는 노드의 새로운 프레임워크인 Koa framework에 대해서 이야기해보고자 한다. Koa 프레임워크를 이용하여 서버를 세팅 후 실행하는 예제와 Express와 비교했을 때 라우팅 방법이 어떻게 다른지 살펴보고 라우팅을 하는 방법까지 살펴볼 것이다.

What is Koa?

Node.js의 웹 프레임워크인 Express 개발팀에서 2016년도에 개발한 새로운 웹프레임워크이다.

 

Express와 비교했을 때 설계된 뼈대가 적지만 탄탄하며 Express보다 모듈화되어있어 원하는 대로 Middle Customizing 하는 데에 유리하다. 또한, 비교적 최근 만들어졌기 때문에 ES6 문법 기반으로 작성되어 async/await 로 발생하는 오류를 try/catch 없이 잡아낼 수 있다.

 

또한 Callback 지옥에서 벗어날 수 있다는 특징이 있다.

Koa framework 세팅하기

Node.js를 통해서 코아를 사용하기 위해서는 코아 모듈을 설치해야 한다.

npm install koa --save 명령어를 이용하면 코아 모듈을 설치할 수 있으며 의존성 패키지에 자동적으로 추가된다.

다음으로는 index.js 파일을 생성하여 코아 서버를 구성해보도록 하자.

const Koa = require('koa');
const app = new Koa();

app.use((ctx, next) => {
    ctx.body = "My first koa project";
});

app.listen(3000, () => {
    console.log("server started at port 3000");
});

Express와 거의 동일하지만 다른 점을 살펴보면 미들웨어 인자로 들어오는 파라미터의 종류이다. Express의 경우 req, res, next 순서로 들어오는 반면 Koa는 ctx, next 2개가 들어오는 것을 볼 수 있다.

 

  • ctx 는 koa context의 약자로 노드의 request 및 response 오브젝트를 단일 오브젝트로 캡슐화 하여 웹 애플리케이션 및 API 작성에 유용한 많은 메소드를 제공하는 역할을 한다.

Koa framework에서 요청, 응답 처리하는 방법?

Express의 경우에는 클라이언트로부터 온 요청을 받을 때 req.body , req.params 등을 사용했다면 Koa에서는 ctx.request 메서드를 사용하여 처리한다.

 

응답의 경우에도 ctx.response 메서드를 사용하여 결과를 반환하는 특징을 가지고 있다. 다음 포스팅 글에서 조금 더 자세하게 살펴보고자 한다.

 

이제 node index.js 명령어로 서버를 실행시킨 뒤 localhost:3000 주소로 접속하면 아래와 같은 결과를 얻을 수 있다.

Koa Routing

코아에서는 라우팅 기능이 내장되어 있지 않으므로 별도의 모듈을 설치해야 한다.
npm install koa-router —-save 명령어를 이용하여 모듈을 설치한다. 라우팅 사용법은 다음과 같다.

const Router = require('koa-router');
const router = new Router();

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

라우터 사용을 위해 router 인스턴스를 만들고 미들웨어에 다음과 같이 2개의 미들웨어를 추가한다.

만들어진 인스턴스를 이용해서 라우팅을 하는 방법은 다음과 같다.

router.get('', (ctx, next) => {
    ctx.body = 'GET method'; // 또는 ctx.response.body = "GET method";
});

GET 메서드를 추가했다. 이제 다시 파일을 저장하고 node index.js 명령어로 서버를 수행 후 localhost:3000 경로로 접속하면 화면에 GET method 문자열이 나타나는 것을 확인할 수 있다.

 

문자열 뿐만 아니라 ctx.response.body 에는 Buffer, Stream, Object(Array), Null(undefined) 등의 타입이 올 수 있으며 ctx.response.status 를 통해 응답 상태를 반환할 수도 있다. 예를 들어

router.get('', (ctx, next) => {
    ctx.response.status = 200;
    ctx.response.body = {
        message: "GET 메서드 응답 결과입니다.",
        success: true,
    }
});

코드를 이와 같이 변경한 뒤 포스트맨을 이용하여 GET 요청을 보내보면?

정의한 응답 코드 값과 JSON 데이터가 의도한 대로 응답으로 오는 것을 확인할 수 있다.

다음 포스팅 글에서는 Koa에서 API를 구현할 때 발생하는 에러에 대해서 살펴볼 예정이다.


출처

Comments