끄적끄적

Node.js? 노드 js란 무엇인지 알아보자 본문

Back-end/Node.js

Node.js? 노드 js란 무엇인지 알아보자

mashko 2019. 6. 5. 01:30
반응형

 

javascript의 Node.js에 대해 알아보도록 합시다.
포스팅을 하며 가벼운 API를 만들기 위해 자주 사용할 것 같아서 미리 node.js에 대해 알아보고 가도록 하죠.

최초 버전은 2009년 리눅스 기반으로 출시되었고, Inangural JSConf EU conference에서 Ryan Dahl의 발표[6] 직후 국제적인 관심을 끌기 시작했다. 패키지 매니저인 npm은 2011년에 처음 소개되었다.
2011년 6월 마이크로소프트는 Joyent와 파트너십을 맺고같은 해 7월 윈도용 최초 버전을 출시했다.(위키백과)

Node.js란?
Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다.
작성 언어로 자바스크립트를 활용하며 Non-blocking I/O단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.(위키백과)
Non-blocking I/O? Node서버는 비동기 방식으로 요청처리를 합니다.
많은 분들이 아실꺼에요. 즉, 다른 일을 처리하면서 멈추지 않고 다음 요청을 받아 처리한다는 의미입니다.
이걸 먼저 알고 가실께요. 브라우저는 단일 쓰레드에서 이벤트 드리븐 방식으로 동작합니다.
스레드가 하나라는 말인데, 동시에 하나의 작업만을 처리할 수 있다라는 말이에요.
그런데 Node.js기반의 웹서버에서 여러 개의 HTTP 요청을 처리하기도 하죠? 이런 동시성 작업을 지원하는 것이 이벤트 루프입니다.
자세히 설명하자면 요청에 대한 이벤트가 발생되고, 그 요청이 서버에 메세지 형태로 전달해 그걸 서버에서 이벤트 루프가 처리하는 형태로 서버에 이벤트 루프가 처리하는 동안 제어권은 다음 요청에 넘어가고 완료되면 콜백을 호출하여 처리완료를 알려주는 형태에요.
이벤트 루프는 요청을 처리하기 위하여 내부적으로 약간의 스레드와 프로세스를 사용합니다.

여기서 그럼 스레드 자체가 멀티인게 좋은거 아니야? 라고 할 수 있어요. 꼭 그런것만은 아니라 합니다.
멀티 쓰레드에 대해 자세히 알아보죠.
멀티 쓰레드 기반의 서버는 요청마다 쓰레드를 발생시키고 그 요청을 병렬로 처리하도록 하는 방식입니다.
즉, 요청자가 많으면 많을수록 그만큼의 쓰레드가 발생한다는 의미에요.
그 쓰레드가 발생한만큼 서버의 메모리 자원도 많이 소모시킨다는 말씀..
멀티쓰레드는 이런 문제가 있어 때문에 서버를 업그레이드 하거나 로드밸런싱으로 서버를 분산처리 하는 것입니다.
그리고 멀티쓰레드 방식은 각 쓰레드간 독립적인 시점에서 동작해서 공유자원에 동기화를 통해 접근하는데, 동기방식의 처리는 하나의 요청이 처리되는 동안 다른 요청이 처리되지 못합니다.(Blocking I/O)

*따라서 Node 서버는 멀티쓰레드 방식의 서버에 비하여 쓰레드 수와 오버헤드가 훨씬 적습니다.*

물론 장점만 있는 것은 아닙니다.
기본적으로 가장 큰 단점이죠. 싱글스레드이기 때문에, 하나의 작업 자체가 시간이 많이 걸리면, 전체 시스템의 성능이 아주 급격하게 떨어지게 될꺼고, 하나의 스레드를 사용하는 프로그램은 여러 개의 CPU를 사용하지 못합니다.
(Redis나 cluster모듈을 사용하면 이 문제는 완화 될 수 있다고 합니다.)
그리고 비동기 이벤트 방식 프로그램에서 오는 콜백지옥이 생기죠.(Promise 패턴을 사용하면 콜백지옥에서 해결 할 수 있다.)

아래의 주소를 통해 다운로드 안해보신 분은 다운로드 해보시기 바랍니다.
Node.js 다운로드

반응형
Comments