노드란? 장점은? 어디에 사용되나요?

크롬 자바스크립트 엔진(V8)에 기반해 만들어진 서버사이드 플랫폼입니다.
이벤트기반, 논 블로킹(비동기) I/O 모델을 사용하고 있습니다.
그렇기 때문에, 동시에 여러가지의 일을 처리할 수 있습니다.
그렇다면 같은 데이터스트럭쳐에 동시에 접근하게될경우 문제가 생길 수 있지 않을까요?
-> Single-Thread를 사용함으로 문제를 방지합니다.

장점은 웹앱에서 주요 응답 시간은 대체로 데이터 쿼리들을 처리하는 데에 있지만, 노드를 사용하게 된다면 모든 쿼리를 한번에 실행할 수 있기 때문에 가장 느린 쿼리때문에 소모되는 응답시간을 감소시킬 수 있습니다.
또한, V8엔진의 사용으로 뛰어난 속도도 갖고있습니다.

사용예시)
입출력이 잦은, 스트리밍, 실시간 데이터, JSON API 기반, SPA

Single-Thread

Node js 의 비동기처리는 이벤트 방식으로 풀어냅니다. 클라이언트의 요청을 비동기로 처리하기 위해서 이벤트가 발생하며 서부 내부의 메시지 형태로 전달됩니다.
서버 내부에서는 이 메시지를 Event Loop가 처리합니다. Event Loop가 처리하는 동안 제어권은 다음 요청으로 넘어가고 처리가 완료되면 Callback을 호출하여 처리완료를 호출측에 알려줍니다.

Event Loop는 요청을 처리하기 위하여 내부적으로 약간의 Thread와 프로세스를 사용합니다.
비동기처리 또는 내부처리를 위한 목적으로만 사용되므로 요청처리 자체를 위해서 사용되지는 않습니다.

이벤트를 처리하는 Event Loop는 Single-Thread 로 이루어져 있습니다.
즉, 요청처리는 하나의 Thread 안에서 처리된다는 의미입니다.
그래서 이벤트 호출 측에는 비동기로 처리되지만 처리작업 자체가 오래 걸린다면 전체 서버 처리에 영향을 줍니다.

비동기적 처리

비동기 프로그래밍에서는 비동기 API를 사용하여 이벤트를 발생시키고 완료여부를 알 수 있도록 Callback을 정의합니다.
비동기 프로그램에서 순차처리는 중첩된 Callback을 이용하여 순차적으로 진행되게끔 합니다.
여기서 Callback이 과도하게 반복되는것을 'Callback Hell'이라고 말합니다.
해결방안으로는 Promise 객체의 사용, async/await 패턴의 사용이 있습니다.


Reference