1-2. Koa 기본 사용법

Hello Koa

먼저 서버를 여는 방법부터 알아보겠습니다. 다음 코드를 src 디렉토리를 생성하여 index.js 파일을 만든다음에 그 내부에 작성을 하세요.

src/index.js

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

app.use(ctx => {
    ctx.body = 'Hello Koa';
});

app.listen(4000, () => {
    console.log('heurm server is listening to port 4000');
});

서버를 작성했으니, 한번 실행을 해볼까요?

$ node src
heurm server is listening to port 4000

이제, 브라우저로 http://localhost:4000/ 에 들어가시면, Hello Koa 라는 텍스트가 보일 것 입니다.

미들웨어

Koa 어플리케이션은, 미들웨어의 배열로 구성되어있습니다. 우리가 위 코드에서 app.use 라는 함수를 사용했었지요? 이 코드는 미들웨어를 어플리케이션에 등록을 해줍니다.

app.use(ctx => {
    ctx.body = 'Hello Koa';
});

여기서 ctx => { ... } 코드가, 하나의 미들웨어 인 것이지요. koa 의 미들웨어함수에선, 두가지의 파라미터를 받습니다. 첫째는 위 코드에서도 나오는 ctx 이구요, 두번째는 next 입니다.

ctx 는, 웹 요청과, 응답에 대한 정보를 지니고있고, next 는 다음 미들웨어를 실행시키는 함수입니다. 만약에 미들웨어에서 next 호출하지 않게 된다면, 그 부분에서 요청처리를 완료시키고, 응답을 하게됩니다.

그리고, 미들웨어는, 등록하는 순서대로 실행을 하게 됩니다. 우선 다음과 같이 기록을 하는 미들웨어 두개를 기존 미들웨어 상단에 넣어보세요.

src/index.js

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

app.use(ctx => {
    console.log(1);
});


app.use(ctx => {
    console.log(2);
});


app.use(ctx => {
    ctx.body = 'Hello Koa';
});

app.listen(4000, () => {
    console.log('heurm server is listening to port 4000');
});

이제 브라우저에서 http://localhost:4000/ 에 들어가게 된다면, Not Found 가 뜨고, 터미널쪽에선 다음과 같이 기록이 될 것입니다.

 $ node src
heurm server is listening to port 4000
1

그 다음 미들웨어를 실행하지 않고, 첫번째 미들웨어에서 멈춰버렸죠?

이는, next() 를 호출하지 않았기 때문입니다. 함수의 파라미터 부분에 next 를 받아와서 호출을 해보세요.

app.use((ctx, next) => {
    console.log(1);
    next();
});


app.use((ctx, next) => {
    console.log(2);
    next();
});
$ node src
heurm server is listening to port 4000
1
2

이제, 우리가 예상했던대로 작동합니다.

next() 는 프로미스

next() 를 실행하면, 프로미스를 반환합니다. 따라서, 작업들이 끝나고 나서 할 작업들을 정해줄 수도 있습니다.

첫번째 미들웨어의 코드를 다음과 같이 수정하고, 다시 페이지를 열어보세요.

app.use((ctx, next) => {
    console.log(1);
    const started = new Date();
    next().then(() => {
        console.log(new Date() - started + 'ms');
    });
});
$ node src
heurm server is listening to port 4000
1
2
1ms

코드를, Express 처럼 콜백 위주로만 한다면, 이런걸 하기는 굉장히 번거롭습니다. 하지만 Koa 에서는 매우 편하죠.

async/await 사용하기

Koa 에선 별도의 작업없이 async/await 를 바로 사용 할 수 있습니다. 방금 작성했던 미들웨어를, async/await 을 통하여 재작성해보겠습니다.

app.use(async (ctx, next) => {
    console.log(1);
    const started = new Date();
    await next();
    console.log(new Date() - started + 'ms');
});

이 코드는 아까랑 동일하게 작동 할 것입니다. 이렇게 미들웨어에서 next() 를 기다리는것 말고도, 서버측에서 async/await 는 자주 사용되는데요. 이는 데이터베이스에 요청을 할 때 매우 유용하게 사용됩니다. 이 문법이 있으니, 콜백이 여러개 겹칠일이 없겠죠.

results matching ""

    No results matching ""