[Node.js] Node.js 특징

민수·2022년 12월 6일
0
post-thumbnail

Node.js 특징

  • 싱글 스레드
  • 논 블로킹 I/O
  • 이벤트 기반

싱글 스레드

싱글 스레드란 스레드가 하나라는 의미입니다.
Node.js는 내부적으로 스레드가 여러 개 이지만 우리가 직접 제어할 수 있는 스레드는 하나뿐이기 때문에 싱글 스레드라 불립니다.
스레드를 이해하기 위해서는 프로세스 부터 알아야 합니다.

프로세스


프로세스는 크롬 브라우저 VS Code와 같이 실행중인 프로그램을 의미합니다.
프로그램은 코드들이 모여있는 디렉토리라 볼 수 있고 프로세스는 그 코드들이 실행되어 메모리에 올라가 동작중인 것이라 볼 수 있습니다.
참고로 프로세스 간에는 데이터 공유가 되지않아 네트워크를 이용해 데이터를 공유합니다.

스레드

프로세스 내에서 실행되는 흐름의 단위 입니다.
스레드는 한 프로세스 내부에 적어도 한 개 이상 존재하게 됩니다.
프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있습니다.
스레드들은 부모 프로세스의 데이터를 공유합니다. (같은 주소의 메모리에 접근이 가능하기 때문)

Node.js는 싱글 스레드라 요청이 많이 들어와도 한 번에 하나씩 요청을 처리합니다.

논 블로킹 I/O

Node.js는 싱글 스레드로 동작하지만 I/O 작업이 발생한 경우 libuv 라이브러리를 이용해 I/O 작업을 논 블로킹 방식으로 처리합니다.

블로킹

블로킹이란 이전 작업이 끝날때까지 다음 작업을 막는 걸 의미합니다.

싱글 스레드 블로킹 모델


싱글 스레드 블로킹 모델은 점원이 한 명뿐인 카페라고 생각 할 수 있습니다.
이 점원은 주문을 받고 바로 커피를 만들어 다른 주문을 받지 않습니다.
그래서 손님들은 앞 손님의 커피가 나올때까지 기다렸다 주문을 해야 합니다.
이것이 싱글 스레드 블로킹 모델입니다.

싱글 스레드 논 블로킹 모델


싱글 스레드 논 블로킹 모델은 점원은 한 명뿐이지만 키오스크가 있는 카페라고 생각 할 수 있습니다.
이 점원은 주문은 키오스크에게 맡기고 커피 만드는 일에만 집중을 합니다.
그래서 손님들은 앞 손님의 커피를 기다릴 필요 없이 자신의 커피만 기다리면 됩니다.
아메리카노 같은 간단한 커피는 주문 순서와 상관이 없이 먼저 나올 수 있습니다.
이것이 싱글 스레드 논 블로킹 모델입니다.

이 방식은 Node.js가 채택하고 있는 방식입니다.
Input/Output 작업은 libuv 라이브러리에 맡기고 나머지 작업은 V8 엔진을 이용해 순차적으로 작업을 실행하게 됩니다.

이벤트 기반

이벤트 기반이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 것을 말합니다.
Node.js는 이벤트가 발생하면 이벤트 리스너에 등록해둔 콜백 함수를 호출하게 되고 발생한 이벤트를 다 처리하게 되면 다음 이벤트가 발생할 때까지 대기합니다.

이벤트 루프

이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할을 담당합니다.
노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 부릅니다.

참고

Node.js 이벤트 루프(Event Loop) 샅샅이 분석하기
Node.js 교과서 - 길벗
블로킹과 논블로킹 살펴보기 - nodejs.org

0개의 댓글