Node란 

크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다.

 

즉, 자바스크립트 실행기이다.

노드가 나오기 전에는 브라우저가 html 읽으면서 스크립트를 같이 읽는 방식으로 자바스크립트를 실행했다.

그러니까 html이 없었으면 스크립트를 못 읽었다.

브라우저가 스크립트를 읽은 것이긴 한데, 브라우저가 html에 종속되어 있었다.

 

노드가 나옴으로 인해서 자바스크립트는 html이나 브라우저의 종속성을 벗어난 것이다.


Node는 서버가 아닌가요?

노드 자체는 서버가 아니다.

노드가 서버의 역할을 수행할 수 있는 것이다.

자바스크립트 코드로 서버 수행하는 코드를 넣으면 노드가 그것을 실행해주는 것이다.

 

 

Javascript = 언어

Node = 런타임

자바스크립트 엔진 = V8


Node의 특성

 

1. 이벤트 기반

이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식

 

이벤트의 예 : 클릭, 네트워크 요청, 타이머 등

이벤트 리스너 : 이벤트를 등록하는 함수

콜백 함수 : 이벤트가 발생했을 때 실행될 함수

이벤트 기반

ex) 스크롤을 내리면 화면이 내려간다.


2. 논 블로킹

오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행.


3. 프로세스 vs 스레드

프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유 X

스레드 : 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유

 

노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현

노드는 주로 멀티 스레드 대신 멀티 프로세스 활용

 

브라우저 창 하나 : 프로세스

탭 하나 하나 : 스레드

라고 생각하면 된다.

 

노드를 실행할 때는 프로세스 안에 스레드가 여러개 뜬다.

그 중에서 하나의 스레드만 컨트롤할 수 있다.

그래서 노드가 싱글 스레드라고 표현하는 것이다.

노드는 원래 멀티 스레드이다.

 

노드는 14버전 부터는 멀티 스레드를 사용 가능하다.

 

그럼 멀티스레드 사용하면 뭐가 좋을까?

동시에 여러개를 할 수 있어서 좋다. 

그러나 멀티스레딩은 코딩이 너무 어렵다.

그래서 한가지만 빠르게 잘하자는 취지에서 만들었었다.


4. 싱글 스레드

싱글 스레드라 주어진 일을 하나 밖에 처리하지 못한다.

블로킹이 발생할 경우 나머지 작업은 모두 대기해야 한다 -> 비효율 발생

점원 세명이 있는데 두명은 놀고 점원 한명만 일 한다.

고객들도 대기해야 한다.

이것이 노드의 방식이다.

 

 

대신 논블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행이 가능하다.

대신 주문이 쏠리면 점원이 힘들 수 있고, 주방장도 힘들 수 있다.

 

멀티스레드 방식은 아쉬워서 노드에 추가해준 것이지 주력으로 노드에서 쓰지는 않는다.

실무에서 쓰일 일 거의 없다.

싱글스레드 하나를 어떻게 효율적으로 관리 하냐가 중요하다.

 

 


노드의 역할

 

1. 서버로서의 노드

서버 : 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램

클라이언트 : 서버에 요청을 보내는 주체(브라우저, 앱, 프로그램 등)

 

노드 != 서버

그러나 노드는 서버를 구성할 수 있게 하는 모듈을 제공한다.

 

 

 

'🚦 Server > Node.js' 카테고리의 다른 글

Node js 정리  (0) 2021.10.19
Node - 화살표 함수  (0) 2021.08.10
Node - const, let 는 var를 대체한다.  (0) 2021.08.10
Node - 호출 스택, 이벤트 루프  (0) 2021.08.10
URL  (0) 2021.08.06
복사했습니다!