JavaScript, Promise 사용을 허하라

July 03, 2015 | 1 Minute Read

우리 회사에서는 Promise를 사용하기 위해 Q 라이브러리를 사용하고 있고, 유닛 테스트를 위해서는 nodeunit을 사용하고 있다.1

특히 Q는 백엔드에서는 모든 라이브러리를 Q로 랩핑해서 사용하는 것을 기본으로하여 Promise 사용을 강제하고 있다. Promise의 장점은 여러가지가 있는데, 내가 생각하는 가장 중요한 장점은 다음의 두 가지라고 생각한다.

callback 로직을 절차형 로직으로 이해하기 쉽게 코드를 만들 수 있다. 예외처리/에러 핸들링을 쉽게 해 준다. 그 중 Promise를 강제로 사용하록 한 가장 큰 이유는 2번의 예외처리 핸들링이다. Express.js와 다양한 Node의 필수 패키지들을 만든 TJ가 Node 진영을 떠나면서 썼던 글(Node.js를 떠나며)에도 나왔듯이, Node는 예외처리/에러 핸들링이 쉽지 않아 Node서버를 자주 죽게만드는 1등 공신이라 할 수 있다.

그런데, Promise를 사용하면 그런 예외처리의 상당수를 쉽게 제어할 수 있다. 그래서 대부분의 로직이 DB/캐시등에 집중되어 있는 웹서비스 개발의 경우, Promise로 콜백 로직을 모두 감싸면 알 수 없는 예외로 서버가 죽는 경우를 상당부분 막을 수 있고, 로직이 눈에 명확히 드러나므로 디버깅 역시 조금 더 수월하게 할 수 있게 된다.

다음의 예제를 보면, Promise 안에서 예외가 발생한 경우의 처리와 테스트(사용) 로직이 얼마나 깔끔해지는지를 어느정도는 느낄 수 있지 않을까 한다.

테스트 프로젝트 : https://github.com/golbin/q-nodeunit-sample

사람마다 개발하는 방식이 달라서 이것이 반드시 맞는 방법이라 할 수는 없겠지만, 어느정도 사용해 본 결과 Promise는 이제 선택이 아니라 필수로 사용해야 하는 것이 아닐까한다. 신규 프로젝트나 또는 가능하다면 앞으로는 Promise를 강제로 사용하는 것을 추천하고 싶다.

nodeunit을 사용하는 이유는 가장 간단하게 사용할 수 있기 때문이고, Q는 가장 많이 사용되기 때문. ↩