본문 바로가기
프로그래밍/Node JS

Node.JS란? 무엇일까??

by HP_Factory 2021. 1. 19.

Node.JS란?

Node.JS는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. Node.JS는 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적입니다. Node.JS의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다.
(Node.JS 공식 사이트에서 내린 Node.JS의 정의)

*런타임 : 프로그래밍  언어가 구동되는 환경이라고 생각하시면 이해하시기 편합니다.

 

 

Node.JS 특징

  • 이벤트 기반으로 개발이 가능합니다.
  • Non-Blocking I/O를 지원하기 때문에 비동기식 프로그래밍이 가능합니다.
  • I/O 부하가 심한 대규모 서비스를 개발하기 적합합니다.
  • 자바스크립트의 표준 라이브러리 프로젝트CommonJS의 스펙을 따르고 있습니다.

 

사실 노드에서 처음 등장한 것과 같이 느껴지는 비동기 프로그래밍 모델은 최근 등장한 새로운 개념은 아닙니다. 실제로 다른 프로그래밍 언어에서 비슷한 환경을 찾아볼 수 있는데, 대표적으로 Python의 Twisted, Perl의 Perl Object Environment, C언어의 libevent, Ruby의 EventMachine 등이 있습니다.

 

 

 

Node.JS 탄생 배경

노드가 개발된 배경과 목적은 다수의 연결을 효율적으로 관리하고 비용을 최소화할 수 있는 네트워크 소프트웨어를 개발하는 편리한 방법을 제공하기 위함이었습니다. 

 

최초에는 CGI라고 해서 펄 등의 스크립트로 개발했었습니다. 이후에는 ASP, JSP, PHP 등의 웹 개발을 위한 전용 스크립트 언어들이 득세하였습니다. 특히 PHP의 경우 오픈 소스로서 그 개발의 용이함 때문에 많은 웹 애플리케이션과 웹 서비스들이 PHP로 구현되기도 했었습니다. 노드는 이러한 시대 이후에 등장한 것으로써 자바스크립트를 서버에서 사용하고자 하는 노력이 반영된 결과입니다.

 

가장 널리 쓰이는 JSP나 PHP와 같은 언어로 웹 애플리케이션을 개발한다고 한다면 이 웹 애플리케이션은 일반적으로 아파치와 같은 웹 서버에서 동작하게 될 것입니다.

 

이때 어떤 클라이언트가 웹 서버에 연결을 요청하게 된다면, 일정한 메모리 공간을 사용하여 새로운 쓰레드를 생성합니다. 이런 형태로 웹 애플리케이션을 개발하여 서비스를 제공하는 경우에는 더 많은 사용자를 지원하기 위해 사업자는 더 많은 서버를 추가할 수 밖에 없었습니다. 이는 단순히 서버 구매 비용뿐만 아니라 이를 운영하는 비용이나 운영에 따라 발생하는 트래픽 비용, 인건비 여러 비용을 더하는 문제를 발생시킵니다. 게다가 여러 대의 서버를 사용하더라도 사용자 입장에서는 마치 하나의 서버에 접속하는 것과 같은 효과를 주어야 하기 때문에 모든 서버는 같은 데이터를 동기화해야 한다는 문제를 발생시키기도 합니다.

 

바로 노드가, 이런 현실적인 문제를 해결하기 위해 등장했습니다.

 

노드는 서버에서 클라이언트로부터의 요청, 즉 연결을 처리하는 방법을 새로운 컨셉으로 변경하여 이 문제를 해결합니다. 기존에는 각 연결에 대해 새로운 쓰레드를 생성하고 그에 따라 메모리를 할당하여 사용자 요청을 처리했다면, 노드에서는 각 연결이 하나의 이벤트로서 노드 엔진에서 처리됩니다. 

 

요약

예전에는 자바스크립트 런타임이 브라우저 밖에 존재하질 않았습니다. 그래서 그러한 한계를 극복하고 Node.JS가 나왔습니다.

 

 

 

Node.JS 실행환경

#Node.JS는 REPL(Read, Eval, Print, Loop)을 통해서 런타임을 제공합니다.

  1. Read : 유저의 입력 값을 받아서 메모리에 저장합니다.
  2. Eval : 입력 값을 평가, 실행 합니다.
  3. Print : Eval로 인해 반환된 값을 출력합니다.
  4. Loop : 1~3을 반복합니다.

이러한 REPL은 Babel REPL과 같이 웹에서 제공해주기도 하고, Node.JS에서 제공하는 REPL은 윈도우의 CMD, 맥의 터미널 등등에서 제공을 해주고 있습니다.

 

맥에서의 Node
CMD에서의 Node

 

 

#따로 자바스크립트 파일을 Node.JS에서 제공하는 자바스크립트 런타임을 통해 실행이 가능합니다.

 

위와 같이 REPL에서 개발을 하면 간단한 테스트 정도면 몰라도 어플리케이션을 개발하는데 적합하지 않습니다. 따라서 REPL 보다는 따로 스크립트 파일을 만들어서 그 스크립트 파일을 node.js V8이 해석 후 실행하는 형태로 작업을 많이 하게 됩니다.

아래 'a.js' 라는 자바스크립트 파일을 Node.JS에서 돌리는 것은 위에 REPL에서 실행한 것과 동일한 결과를 보여줍니다.

자바스크립트 파일 -> node.js

 

 

결론

Node.JS를 할 줄 안다고 하면 Node.js로 서버를 구성할 줄 안다라고 인식되는 것은 어느 정도 이해할 수 있습니다.
하지만 Node.JS 그 자체를 백엔드 자체만의 기술, 웹 서버 자체만으로 받아들이고 프론트 엔드 개발자들은 Node.JS를 쓸 줄 모른다는 그런 잘못된 지식으로 남들에게 더 이상 인식되지 않는 환경이 조성되길 바랍니다.

 

"Node.js는 백엔드, 웹 서버가 아니라 자바스크립트 실행 환경에 불과합니다."

댓글