<<백견불여일타 Node.js로 서버 만들기 학습일지>>
Node.js는 javascript 런타임이다. 즉 javascript의 실행 환경이며, Node.js를 이용해서 브라우저의 도움 없이 javascript를 실행 할 수 있다.
처음 논블로킹과 비동기라는 표현을 보며, 같은 의미가 아닌가라는 생각을 했다. 그래서 GPT선생의 도움을 받아 정리해 보았다.
"논블로킹"과 "비동기"는 비슷한 개념이지만 약간의 차이가 있습니다.
논블로킹 (Non-blocking):
논블로킹은 주로 I/O 작업을 설명할 때 사용됩니다.
논블로킹은 어떤 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있는 것을 의미합니다. 다시 말해, 한 작업이 완료될 때까지 시스템이 멈추지 않습니다.
논블로킹은 작업의 완료 여부와 관계없이 다음 작업을 계속 진행할 수 있는 것을 강조합니다.
비동기 (Asynchronous):
비동기는 특정 작업이 완료될 때까지 대기하지 않고 다른 작업을 수행할 수
있는 프로그래밍 패턴 또는 스타일을 의미합니다.
비동기적인 작업은 보통 논블로킹 작업과 관련이 있지만,
비동기적인 작업이 모두 논블로킹이 아닐 수도 있습니다.
예를 들어, 비동기 작업이 완료될 때까지 기다리는 경우도 있을 수 있습니다.
Node.js는 주로 논블로킹 I/O 모델을 기반으로 작동하며,
이는 비동기 작업을 수행하는 데에도 적용됩니다.
따라서 Node.js는 보통 논블로킹과 비동기라는 용어를 함께 사용합니다.
그러나 논블로킹과 비동기가 항상 같은 것은 아니며,
특정 맥락에서는 약간의 차이가 있을 수 있습니다.
참으로 모호한 답변을 내놓았다. 지금은 관점의 차이 정도로만 이해하고 넘어간다.
Node.js 는 싱글 스레드 방식을 사용한다고 한다. 하지만 앞서 책에서 말한 내용은 빠르게 일처리를 한다고 했다. 어떻게 하나의 스레드를 가지고 빠른 일처리를 할 수 있을까?
- Node.js에는 이벤트 루프라는 일종의 감시자가 있다. 이벤트 루프는 어떤 이벤트가 있는지 계속 감시하며 이벤트가 감지되면, 그 작업을 위한 스레드를 생성한다.
- 이벤트 루프는 처리할 작업을 작업 스레드에게 맡겨버리고 다른 이벤트가 없나 다시 감시하기 시작한다.
- 작업 스레드는 작업을 마치면 이벤트 루프에게 콜백 함수를 실행하고 싶다고 응답을 보낸다.
- 응답을 받은 이벤트 루프는 콜백 함수의 결과를 클라이언트에 전송하여 우리가 볼 수 있는 결과로 바꾸어 준다.
사용자가 비동기적인 처리를 일일이 할 필요가 없다. V8, libuv 등의 라이브러리를 자동으로 바인딩하여 실행해 주기 때문에 정확하게 이해가 되지 않아도 코딩하는 데 큰 문제가 없다.