에러와 모니터링, 그리고. 콜백 지옥!
그렇다면, Node.js 기반으로 프로그래밍을 하는 경우에 어떤 방법으로 오류나 에러를 트래킹 할까요? 보통의 Node.js개발자들은 다음과 같은 기반으로 에러를 모니터링합니다. 특히, Sentry는 많이들 사용합니다.
이런 에러 모니터링에도 필요한 필수 3가지 기준은 있습니다. 해당 조건은 꼭, Node.js에만 국한되는 것은 아닙니다. 대부분의 개발환경에도 비슷합니다.
조건 1. 에러 트래킹은 쉬워야 한다. Easy
조건 2. 에러 트래킹은 무료여야 한다. Free
조건 3. 에러 트래킹의 통합이 쉬워야 한다. Integration
물론, '유료'서비스를 고려하기 전에 당연하게 '무료'들만 사용하더라도, 충분하게 어느 정도의 규모에서는 의미 있게 사용할 수 있습니다. 보통 에러 트래킹이 복잡해지거나 기업기반의 서비스가 아니라면요. 특히, 혼자 개발하는 경우라는 몇 가지 환경만 구축하는 것으로도 대부분의 '오류'는 방어할 수 있습니다.
Node.js개발자들이 가장 많이 사용하는 서비스는 Sentry입니다.
설치하는 형태의 Self-hosted Sentry를 사용하는 방법도 있지만, 개인 프로젝트이거나 무료 프로젝트의 경우에는 Sentry.io를 사용해도 좋습니다. ( https://sentry.io )
필요한 프로젝트를 만들고, raven-node로 진행하면 됩니다.
그 이외에도 Travis CI를 사용하면 테스트 통과 후에 자동 배포되는 환경을 구성할 수 있습니다.
하지만, Node.js의 특성상 오류를 트래킹 하는 수준으로는 간단한 형태의 알고리즘을 추적하는 것이 가능한 정도입니다.
문제는 혼자서 수행하던 프로젝트의 규모가 사용자가 증가하고, 복잡한 알고리즘을 구현해야 할 이유가 발생되고, DB와 MongoDB를 혼용하기 시작하며, 다른 REST API를 호출하게 되면서 문제는 점점 복잡해집니다.
대부분 이런 시기는 '모바일 앱'의 경우 다운로드 숫자가 10만 단위를 넘게 되면서 발생하기 시작하며, 개발팀이 구성되고, 여러 명의 개발자들이 동시 개발을 하게 되며, 사용자 요구사항들을 반영하면서 Node.js의 프로젝트가 복잡해지기 시작하게 되면, 단순한 에러 트래킹으로는 이런 문제를 모두 해결할 수 없습니다.
보다, 본격적인 업무형태나 게임을 구성하기 위해서는 '모니터링 시스템'을 갖추어야 합니다.
특히, Node.js에서 DB를 호출하고 비동기식이거나 다른 REST API를 호출한다거나, 대기하는 구성들이 발생하게 되는 데 이런 상황에서는 웹 트랜잭션을 커버하기 위해서 다른 고민을 필수적으로 해야 합니다.
특히, 문제는 Node.js로 개발해본 개발자들은 다 아는 callback hell에 빠졌을 때입니다. 이 문제는 '오류 트래킹'정도로는 해결이 안 됩니다.
물론, Async 모듈을 이용한다던가 다른 방법들을 고민할 수 있습니다만. 혼자 개발하는 것이 아니라면, 이 문제는 빠져나올 수 없는 수렁에 가까운 상황을 발생시키게 됩니다.
보다 본격적인 Node.js의 개발에 빠져드는 이 콜백 지옥에 대해서 좀 더 알아보겠습니다.