본문 바로가기
Web/Node.js

Node.js 에 대해서

by supdev 2017. 6. 23.

아래 사이트들을 참조하여 작성하였습니다.

https://opentutorials.org/course/2136/11850

http://asfirstalways.tistory.com/43


Web의 역사


1990년 Tim Berners-Lee에 의해 Web이 탄생한다.


1994년 Marc Andressen가 Netscape라는 웹 브라우저를 탄생시킨다.

netscape는 세계 최초 상업적으로도 성공한 대중적 웹브라우저로 평가받고 있으며

이를 계기로 웹과 인터넷은 폭발적인 동반성장을 하게 된다.


1995년 netscape 직원이었던 Brendan Eich에 의해 Javascript가 등장한다.

여태까지의 Web이 문서 출판의 정적인 체계였다면 Javascript의 등장으로 동적인 체계를 갖게 되었다.

사용자와 상호작용이 가능하게 됨을 뜻한다.


WEB이라는 울타리 안에 있었던 Javascript는

쉽게 사용할 수 있게 개발되었기 때문에 전문적인 개발자 입장에서 부족하다라는 평가가 많았다.


하지만 이후 사건으로 Javascript는 재조명받게 된다.

2004년 Google에서 Gmail, Gmap 서비스를 순수 Web기술(HTML, CSS, Javascript)만을 통해 웹애플리케이션으로 개발한다.

Pure Web으로 웹 애플리케이션을 개발했을때의 이점인 어느곳에서나 Web browser만 있으면 실행될 수 있다는 점에 개발자들의 생각은 달라지게 된다.


2008년 Google이 Chrome의 성능 향상을 위해 Javascript Engine인 V8를 개발하여 오픈함으로써 많은 개발자들의 눈길을 끌었고

Javascript가 탈 Web화 되는 현상이 가속화되어 Web이 아닌 다른 분야에서까지 사용되게 된다.


2009년 Ryan Dahl에 의해 V8엔진을 사용하며 event-driven 개발 방식과 non-blocking IO 처리 방식을 적용시킨

Javascript 기반 서버사이드 언어 Node.js 프로젝트가 시작된다.



Javascript라는 단어에는 두가지 의미가 혼재되어 있다.


언어(language)적인 측면에서의 Javascript - 문법 등

런타임(Run-time)적인 측면에서의 Javascript - 실행되는 환경인 Web browser와 Server-side


예를들어 알람으로 사용되는 alert('Hello world') 구문을 두고 봤을 때

language적 측면에서 alert이라는 function(함수)으로써 문법적으로는 Javascript 문법이지만

Run-time적 측면에서 Web browser에서만 사용할 수 있는 코드이다.


Node.js와 같은 역할을 하는 Server-side 언어들 Ruby, Python, Java, PHP 등



Nodejs의 장점


1. V8 엔진

원래 좋은 성능을 자랑하지만 구글이 망하기 전까지는 지속적으로 개선될 것이므로 추후 지속적인 성능 개선을 기대할 수 있다.


2. event-driven

사용자가 이벤트를 발생시켰을 때만 작동하는 방식으로 자원 낭비를 막을 수 있다.

대부분의 웹 서버는 항상 이벤트 발생을 대기하며 자원(대기시간 및 메모리)을 소모한다.


3. non-blocking I/O

기존 Blocking I/O방식은 Read/Write 이벤트가 발생하면 이벤트가 끝날때까지 해당 모듈을 점유하여 다른 작업을 할 수 없으며 메모리 버퍼를 차지하므로 메모리 또한 소비한다.

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


Blocking 방식의 비효율성을 극복하고자 만들어진 I/O 방식이다.

I/O 작업이 진행되는 동안 유저 프로세스의 작업을 중단시키지 않으며 Read/Write 이벤트가 시작되자마자 모듈을 변환시켜 다른 작업을 할 수 있도록 준비상태를 만들어 동기식보다 속도가 빠르고 메모리 낭비가 덜하다.


이와 같은 특징들을 적합한 상황에 적용시킨 경우 굉장히 빠르고 향상된 퍼포먼스 발휘 가능


4. Single Thread

장점이라기보단 특징

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

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


클라이언트측 뿐 아니라 서버측에서도 동일한 언어인 Javascript를 사용하는 것은 큰 메리트이다.