아미(아름다운미소)

NodeJS에 대해 본문

랭귀지/NodeJS

NodeJS에 대해

유키공 2018. 2. 21. 14:00

자바스크립트는 주로 웹 브라우져에서 실행되는 클라이언트 언어입니다. 웹 브라우져에는 자바스크립트 엔진이라는 것이 있는데 이 엔진이 자바스크립트 코드를 실행시키는 역할을 하는 것이죠. 이러한 자바스크립트 엔진에는 크롬에서 사용하는 V8, 사파리에서 사용하는 웹킷(Webkit), 파이어폭스에서 사용하는 스파이커몽키(SpikerMonky), 오페라에서 사용하는 카라칸 등이 있습니다. 이러한 엔진 중에 Node.js®는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. Node.js는 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적입니다. Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다.

V8

Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼입니다. 작성 언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있습니다.내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 합니다.


node.js 다운로드



다운로드 : https://nodejs.org/ko/


Node.js는 비동기 이벤트 주도 JavaScript 런타임으로써 Node는 확장성 있는 네트워크 애플리케이션을 만들 수 있도록 설계되었습니다. 


오늘날 OS 스레드가 일반적으로 사용하는 동시성 모델과는 대조적인데요. 스레드 기반의 네트워크는 상대적으로 비효율적이고 사용하기가 몹시 어려운데 비하여 Node.js는 잠금이 없으므로 Node의 사용자는 프로세스의 교착상태에 대해서 걱정할 필요가 없습니다. Node.js에서는 I/O를 직접 수행하는 함수는 거의 없으므로 프로세스는 결과 블로킹 걱정도 할필요 없습니다. 아무것도 블로킹 되지 않으므로 Node.js에서는 확장성 있는 시스템을 개발하는 게 아주 자연스럽습니다.


Node.js는 Ruby의 Event Machine이나 Python의 Twisted같은 시스템과 설계상 유사하고 영향을 받았습니다. Node.js는 좀 더 발전된 이벤트 모델을 선택해서 라이브러리가 아닌 런타임 생성자로 event loop를 제공합니다.


Node.js에서 HTTP는 일급 시민(first class citizen)이고 스트리밍과 저지연은 염두에 두고 설계되었습니다. 이는 Node가 웹 라이브러리나 프레임워크의 기반으로 아주 적합하다는 말이기도 합니다.


Node.js가 스레드를 사용하지 않도록 설계되지만 멀티 코어 환경의 장점을 얻지 못한다는 의미는 아닙니다. child_process.fork() API를 사용해서 자식 프로세스를 생성할 수도 있습니다. 같은 인터페이스로 만들어진 cluster을 사용하면 다수의 코어에 로드 밸런싱이 가능하도록 프로세스 간에 소켓을 공유할 수도 있습니다.


Node.js 의 특징


비동기 I/O 처리 / 이벤트 위주

빠른 속도

단일 쓰레드 / 뛰어난 확장성

노  버퍼링

라이센스: Node.js 는 MIT License가 적용되어있습니다.


다음과 같은 분야에 Node.js 가 사용된다면 뛰어난 효율성을 달성 할 수 있습니다.


입출력이 잦은 어플리케이션

데이터 스트리밍 어플리케이션

데이터를 실시간으로 다루는 어플리케이션

JSON API 기반 어플리케이션

싱글페이지 어플리케이션


Node.js 는 누가쓸까?

Node.js는 eBay, GoDaddy, Microsoft, Paypal, Yahoo! 등 많은곳에서 사용되고 있답니다.


Node.js 를 쓰지 말아야 할 곳은?

CPU 사용률이 높은 어플리케이션에선 Node.js 사용을 권장하지 않습니다.



Node.js는 주로 웹서버와 같은 네트웍 프로그램을 위해 고안된 환경이지만 최근에는 웹 개발 환경의 빌드 툴로도 많이 사용되고 있습니다. 리엑트에서 사용하는 웹팩(Webpack), 스트림 형식의 빌드툴 굴프(Gulp), 그리고 설정 방식의 빌트 툴인 그런트(Grunt)가 모두 노드 환경에서 개발된 도구입니다.

Node.js 환경으로 인해 그 동안 웹 브라우져에서만 사용하는 자바스크립트를 어디서나 사용할 수 있게 되었습니다.

가장 크게는 웹서버 같은 백엔드 사이드를 자바스크립트로 구현할 수 있습니다. 

데스크탑 어플리케이션도 자바스크립트로 구현할 수 있게되었습니다. 슬랙 등과 같은 어플리케이션은 일렉트론(Electron)이라는 프레임웍으로 개발되었는데 역시 노드 기반입니다.

모바일 어플리케이션도 자바스크립트로 개발할수 있는데 그 중 아이오닉(Ionic)이라는 하이브리드 앱이 그렇습니다.

이 모든것이 노드 기반으로 개발되고 실행되는 어플리케이션 입니다. 자바스크립트가 브라우져 밖으로 나오면서 무섭게 영역을 장악해가고 있는 것입니다.

'랭귀지 > NodeJS' 카테고리의 다른 글

Node.js mongodb 드라이버 비동기 / 대기 쿼리  (0) 2020.05.02
브라켓(Bracket) 멀티 탭 확장 모듈 설치  (0) 2020.03.31
node.js  (0) 2020.03.19
Chocolatey 설치  (0) 2020.01.08
라즈베리파이 Node.js 최신버전 설치  (2) 2018.05.15
Comments