BE/Node

[Node] Node.js란 ?

mandelina 2022. 6. 7. 21:05
자바스크립트로 서버를 구현한다고 ?!

 

 

 

 

Node.js ? 

 

-  확장성 있는 네트워크 애플리케이션 개발에 사용되는 sw플래폼

 

-  JavaScript 런타임 환경

   (Node.js가 나오기 전까진 JS를 실행하는 환경(런타임)은 브라우저 뿐이였다!)

 

Node.js는 브라우저 외부에서 구글 크롬의 핵심인 V8 자바스크립트 엔진을 구동한다. 

 

-  특히 서버 사이드 개발에 많이 사용된다.

 

 

서버 사이드 ? 

-  네트워크의 한 방식인 클라이언트-서버 구조의 서버 쪽에서 행해지는 처리

-  사용자 유효성, DB관련 등의 일을 수행한다.  

대표적인 언어로 Java , PHP , Rudy , Python , Node.js 등이 있다.

 

V8 ?

- 웹 브라우저를 만드는 데 기반을 제공하는 오픈소스 자바스크립트 엔진

- 구글 크롬 브라우저안드로이드 브라우저에 탑재

 

JavaScript Engine?

-  자바스크립트 코드를 실행하는 프로그램 또는 인터프리터 

여러 목적으로 사용하지만 대체적으로 웹 브라우저에서 사용된다.

대표적인 예시는  Google V8 엔진이 있다.

 

JavaScript Runtime?

-
프로그래밍 언어가 구동되는 환경

-
자바스크립트 엔진, Web API , 콜백 큐 , 이벤트 루프, 렌더 큐로 구성된다.

 

 

 

 

 

Node.js의 특징

 

- Non - Blocking I/O  :  비동기 input/output 

 

- Single Thread  :  하나의 프로세스에 오직 하나의 스레드로만 실행

 

- 이벤트 기반 :  이벤트를 통해 수행할 작업을 등록해두고 , I/O 작업이 종료되면 이벤트를 감지하여 등록된 작업 실행

 

 

 

▷  Node.js 는 이벤트기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적이다.  

 

Q. 왜  효율적이라는 걸까 ?

반대개념을 살펴보자.

논블로킹 I/O의 반대개념인 블로킹 I/O는 하나의 프로세스가 어떤 자원을 사용하고자 할때 그 자원을 다른 프로세스가 점유하고 있다면 사용을 마칠 때 까지 기다리는것이다. (기다리는 상태를 Blocked되었다고 한다.)

싱글스레드의 반대개념인 멀티스레드는 스레드 여러개가 동시에 실행되어 요청을 처리한다는 개념이다.
따라서 성능은 좋지만 많은 자원을 필요하게 되고 결국 CPU역시 하나의 자원이기 때문에 여러스레드들이 CPU를 점유하면 기다릴수 밖에 없는 문제가 발생한다.

 

 

하지만 싱글스레드의 경우 오류가 발생하면 처리해줄애가 없으므로 문제가 발생될 수 있다는 단점이 있다.

 

 

 

Node가 어울리는 서비스?

 

-  간단한 로직으로 구성된 서비스

 

-  빠른 응답시간이 요구되는 서비스

 

-  빠른 개발이 요구되는 서비스

 

-  비동기 방식 (스트리밍 등)