노드는 V8엔진으로 만들어진 자바스크립트 런타임
Node.js란 자바스크립트를 기계가 알아먹을 수 있게 기계어로 컴파일 해주는 엔진으로 빌드된 자바스크립트가 구동중인 환경
이벤트 기반 및 논블록킹 I/O 모델
유저의 클릭이나 네트워크에 리소스를 요청하는 이벤트가 논블록킹으로 이루어지는 Input/Output 모델
🧐 동기(Synchronous)와 비동기(Asynchronous)
동기와 비동기는 클라이언트가 서버로 요청할 때 데이터를 받는 방식을 말한다.
- 동기 : 동시에 일어난다는 의미로, 요청이 발생하면 그 요청이 끝날 때까지 다음 작업은 대기상태
- 비동기 : 동시에 일어나지 않으며, 특정 작업을 수행할 때 작업의 결과를 기다리지 않고 다음 작업을 수행
🧐 블록킹(Blocking)과 논블록킹(Non-Blocking)
블록킹과 논블록킹을 동기, 비동기와 같다고 생각하지만, 보는 관점이 다르다.
블록킹과 논블록킹 : 호출되는 함수가 바로 리턴을 하느냐 마느냐(직접 제어가 가능한가 못한가)
동기와 비동기 : 호출되는 함수의 작업 완료 여부를 누가 신경 쓰느냐
- 블록킹(Blocking) : 직접 제어할 수 없는 대상의 작업이 끝날 때 까지 제어권을 넘겨주지 않음
(호출된 함수가 자신의 작업이 모두 마칠 때 까지 호출한 함수에게 제어권을 넘겨주지 않고 대기)- 논블록킹(Non-Blocking) : 대상의 작업처리 여부와 상관없음
(호출된 함수가 바로 리턴해서 호출한 함수에게 제어권을 넘겨주어 호출한 함수가 작업을 할 수 있게 해줌)