Node.js Callback에 관한 고찰

Node.js로 개발한다 라고 말한다면, 누구나 난항을 겪게 된다. 한 번쯤은 들어봤을 것이다. Callback Hell에 관한 이야기이다.


asncFunction1(function(err, result) {
  asncFunction2(function(err, result) {
    asncFunction3(function(err, result) {
      asncFunction4(function(err, result) {
        asncFunction5(function(err, result) {
          // do something useful 
        })
      })
    })
  })
})


위 그림처럼 너무 많아져서 좌절하는 상황을 빈번하게 맞닥뜨리게 된다. 결국 키보드에 손을 놓고, 쉴 수밖에 없다.


무턱대고 라이브러리만 사용하다 보면, 순간 흐름을 놓치는 경우, 아무것도 할 수 없게 된다.
아래 주소는 2012년에 작성된 글인데, 설명이 잘 되어 있어서, 자주 보던 글이다.


주소 - http://book.mixu.net/node/ch7.html


흔히 사용하는 Series, Parallel에 관해 설명되어 있다. 한 번씩 따라 해본다면, 많은 도움이 될 것이다. 취향에 따라 Promise, Async 라이브러리로 나뉘는 것 같다. 두 가지 라이브러리를 다 사용해 보았지만, 결국 협업을 하거나, 인수인계를 하는 시점에서 어려움을 겪었다. 어떤 식으로 개발을 해야 쉽게 만들까.


입문자들은 Express.js Framework를 많이 경험한다. 책에 나오는 단골손님이기 때문이다.


function do(param, next) {

    // logic...

    next();
}


위와 같은 형태로 함수는 구성된다. 오히려 직관적이기 때문에 조금 응용해봤다.


function doA() {

    Model.getContent(param, function(err, data) {

        doB();
    });
}

function doB() {

    Model.getContent(param, function(err, data) {

        doC();
    });
}

function doC() {

    console.log('finish');
}

doA();


직접 필요한 함수를 호출해주는 방식이다. Callback 중첩도 되지 않으면서, 순차적으로 코드를 읽을 수 있다. 협업하면서 의견을 나누어 봤지만, 라이브러리를 사용해서 했을 때보단 진입장벽이 낮아진 것 같았다. 먼저 위와 같은 방법으로 경험하고, 필요한 때에만 라이브러리를 사용하면 개발이 한결 편해질 것 같다는 생각이 든다.



신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Designed by CMSFactory.NET