Node.js
는 웹서버가 아니다. 간단하게 말하자면,
비동기(Asynchronous)
이벤트-기반(event-driven)
JavaScript 런타임 환경
이다.
프로그램의 다른 기능 또는 함수들이 서로 방해(Blocking)하지 않고 동시에
처리되는 것을 말한다.
예를 들어 '나'라는 객체가 고양이 밥과 물을 채워준다고 할 때,
물을 주기위해 밥을 채울 때 까지 기다리지 않아도 된다는 의미이다.
node.js
환경에서 이벤트는 하나의 요청과 같다.
여기서의 요청은 HTTP Request
와 같다고 볼 수 있다.
즉, node 입장에서 이벤트는 Front-end(클라이언트)에서 받는 요청이다.
node가 비동기적으로 이벤트를 처리한다는 것은 앞선 클라이언트의 요청이
끝나기 전에 다음 클라이언트의 요청을 받을 수 있다는 의미이다.
클라이언트(user)가 앱에 접속할 때, 권한에 따라 인증을 받아야 한다.
인증을 할 때에 데이터 베이스에 저장되어 있는 유저의 정보를 조회 해야하고,
이 클라이언트(user)가 올린 게시물을 조회해야 한다고 가정 했을 때,
이 유저의 정보, 게시글에 담긴 사진, 댓글 정보 등 여러개의 게시물을 조회해야 한다.
이것을 Heavy Load
라고 한다. node는 이렇게 컴퓨터의 자원이 많이 들고
시간이 오래 걸리는 일을 Internal C++ Thread Pool
에서 처리한다.
따라서 node의 Single-Thread
는 여러 요청을 한 시점에 처리할 수 있는 것이다.
JavaScript 런타임 환경
JavaScript로 짜여진 소스코드를 CPU가 이해할 수 있는bytecode
로
변환시키고 프로그램의 메모리를 관리하는 시스템이다.
이런 환경을 가능하게 해주는 것이 Chrome V8 엔진이다.
이 Chrome V8 엔진은 google의 Chrome Web Browser에서 작동하는 엔진으로,
이 엔진이 브라우저 없이 작동할 수 있도록 만든 환경이 node
이다.