Node.js 개요

박병주·2024년 2월 6일
0

Node.js

목록 보기
1/2

<<백견불여일타 Node.js로 서버 만들기 학습일지>>

1. Node.js

Node.js는 Spring, Django와 같은 프레임 워크가 아니다.

Node.js는 javascript 런타임이다. 즉 javascript의 실행 환경이며, Node.js를 이용해서 브라우저의 도움 없이 javascript를 실행 할 수 있다.

2. Node.js의 동작 방식

논블로킹 / 비동기

처음 논블로킹과 비동기라는 표현을 보며, 같은 의미가 아닌가라는 생각을 했다. 그래서 GPT선생의 도움을 받아 정리해 보았다.

"논블로킹"과 "비동기"는 비슷한 개념이지만 약간의 차이가 있습니다.

논블로킹 (Non-blocking):
논블로킹은 주로 I/O 작업을 설명할 때 사용됩니다.
논블로킹은 어떤 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있는 것을 의미합니다. 다시 말해, 한 작업이 완료될 때까지 시스템이 멈추지 않습니다.
논블로킹은 작업의 완료 여부와 관계없이 다음 작업을 계속 진행할 수 있는 것을 강조합니다.

비동기 (Asynchronous):
비동기는 특정 작업이 완료될 때까지 대기하지 않고 다른 작업을 수행할 수 
있는 프로그래밍 패턴 또는 스타일을 의미합니다.
비동기적인 작업은 보통 논블로킹 작업과 관련이 있지만, 
비동기적인 작업이 모두 논블로킹이 아닐 수도 있습니다. 
예를 들어, 비동기 작업이 완료될 때까지 기다리는 경우도 있을 수 있습니다.

Node.js는 주로 논블로킹 I/O 모델을 기반으로 작동하며, 
이는 비동기 작업을 수행하는 데에도 적용됩니다. 

따라서 Node.js는 보통 논블로킹과 비동기라는 용어를 함께 사용합니다. 
그러나 논블로킹과 비동기가 항상 같은 것은 아니며, 
특정 맥락에서는 약간의 차이가 있을 수 있습니다.

참으로 모호한 답변을 내놓았다. 지금은 관점의 차이 정도로만 이해하고 넘어간다.

3. 싱글 스레드와 이벤트 루프

Node.js 는 싱글 스레드 방식을 사용한다고 한다. 하지만 앞서 책에서 말한 내용은 빠르게 일처리를 한다고 했다. 어떻게 하나의 스레드를 가지고 빠른 일처리를 할 수 있을까?

  1. Node.js에는 이벤트 루프라는 일종의 감시자가 있다. 이벤트 루프는 어떤 이벤트가 있는지 계속 감시하며 이벤트가 감지되면, 그 작업을 위한 스레드를 생성한다.
  2. 이벤트 루프는 처리할 작업을 작업 스레드에게 맡겨버리고 다른 이벤트가 없나 다시 감시하기 시작한다.
  3. 작업 스레드는 작업을 마치면 이벤트 루프에게 콜백 함수를 실행하고 싶다고 응답을 보낸다.
  4. 응답을 받은 이벤트 루프는 콜백 함수의 결과를 클라이언트에 전송하여 우리가 볼 수 있는 결과로 바꾸어 준다.

4. 비동기적 특징

사용자가 비동기적인 처리를 일일이 할 필요가 없다. V8, libuv 등의 라이브러리를 자동으로 바인딩하여 실행해 주기 때문에 정확하게 이해가 되지 않아도 코딩하는 데 큰 문제가 없다.

profile
응애

0개의 댓글