본문 바로가기
javascript & Node.js

Node js 란?

by V_L 2020. 5. 12.

Node는 Chrome V8 Javascript 엔진으로 빌드 된 Javascript Runtime 이다.

 * runtime 이란 ?  - 프로그램이 구동되는 환경을 말한다. 자바면 자바, 자바스크립트면 자바스크립트, 노드면 노드

 

 

1. 탄생배경 

 

 예전에는 자바스크립트 런타임이 브라우저 밖에 존재하지 않았다.

 하지만 그런 한계를 극복하고 Node.js 가 나왔다.

 

 좀 더 자세한 스토리를 적어보자면...

  

 1990년 Tim Berners lee 가 WEB을 창시했다.

 

 이때의 웹은 정적인 체계의 웹이었다.

 Marc Andreessen 에 의해 Netscape 라는 대중적 웹브라우저가 등장하게 되었고, 

 Brendan Eich 가 JavaScript 를 만들어 웹에 동적인 체계를 탑재하게 되었다.

 즉, 사용자와 상호작용이 가능해졌다는 이야기다.

 

 WEB 이라는 울타리 안에 갇혀있던 Javascript 였다.

 천대받던 Javascript가 재조명 받게되는 계기가 있었다.

 2004 년 Gmail 의 등장이다.

 순수한 웹기술 ( HTML, JavaScript 등) 을 통해서 만들었음에도 불구하고 뛰어난 성능을 보인것.

 이어서 GMap 도 순수 웹기술로 구축되었고 이 또한 개발자들에게 신선한 충격을 주었다.

 이후로 자바스크립트의 성장세는 계속되는데,

 2008 년 구글이 Chrome의 성능 향상을 위해 JavaScript Engine을 개발하였다.

 그것이 V8이고 이것을 오픈소스로 공개하여 수많은 개발자들을 이끌었다.

 그리고 2009 년 Ryan Dal 이 자바스크립트 언어로 구현된 서버사이드 언어 Node.js 를 내보인다.

 

 

 

2. Node 의 특징 및 장점

 

 1. V8 Engine 이다. (갓 구글)

 - 구글이 망하지 않는 한 이 엔진은 끊임없이 개선되고 발전할 것이고,

지금도 충분한 성능을 보이고 있지만 추후 더 훌륭한 퍼포먼스를 보일것으로 예상된다.

 

 2. Event - driven 방식

 - 사용자가 이벤트를 발생시켰을 때, 즉 입력장치로 데이터를 전송했을 때에만 작동하는 방식이다.

 발생한 이벤트에 대해서만 웹서버가 '연결'을 해주기 떄문에 자원을 최소화 할 수 있다.

 ( 대부분의 웹 서버는 사용자가 이벤트를 발생하기까지를 기다리면서 자원[대기시간 , 메모리] 을 계속 소비하게 된다.

 

 3. non - blocking 패러다임 (비동기방식)

 - non blocking I/O (Input/Output - 전처리/후처리) 을 이해하기 위해 우선 Blocking I/O 방식을 설명해야한다.

 

Blocking I/O 방식 ( 동기식 I/O ) 는 Read/Write 이벤트가 발생하면 이벤트가 끝날때까지 해당 모듈을 점유하게 된다. 

 즉 다른일을 못하게 된다. 

 또한 메모리 버퍼에 데이터를 차지하게 되므로 메모리도 소비하게 된다.

 요청한 I/O 가 완료될 때 까지 해당 Thread를 '대기모드' 로 전환시켰다가 요청한 I/O 완료 후 유저코드를 실행시킨다.

 

 이런 Blocking 방식의 비효율성을 극복하고자 만들어진 것이 Non-Blocking 방식이다.

 

I/O 작업을 진행하는 동안 유저 프로세스의 작업을 중단시키지 않는다.

 non-Blocking I/O ( 비동기식 I/O) 의 경우 Read/Write 이벤트가 시작하자마자 모듈을 변환시켜 다른 작업을 하도록 준비상태가 된다. 

 그래서 속도가 동기식보다 빠르고 메모리도 덜 차지하게 된다.

 

 적합한 경우에는 굉장히 빠른 퍼포먼스를 보이고 적재적소에 이 방식을 사용하면 퍼포먼스가 크게 향상할 수 있다.

 

 4. Single Thread

 - 양날의 검이다. 장점이라기보단 특징에 가깝다.

 적은 양의 자원으로 일을 처리하는 것이 가능하다.

 하지만 어느 한곳에 예외상황 및 에러가 발생한다면 애플리케이션 전체에 영향이 가게된다.

 

 5. 클라이언트와 서버에서의 언어가 동일하다. (협업하기에 좋다)

 

출처 : https://perfectacle.github.io/2017/06/18/what-is-node-js/

출처 : https://asfirstalways.tistory.com/43

'javascript & Node.js' 카테고리의 다른 글

브라우저 의 렌더링 과정  (0) 2020.10.29
when use Node.js ?  (0) 2020.09.15
WebPack  (0) 2020.06.04
Typescript  (0) 2020.05.12