[JS] Node.js란?

[JS] Node.js란?


자바스크립트로 서버를 개발 할 수 있다고..???

Node.js

  • 자바스크립트를 서버에서도 사용할 수 있도록 설계가 되어 있는 서버사이드 스크립트 언어로 서버 개발을 위해서 만들어짐
  • 아파치(Apache)와 다르게 사용자에게 전송할 데이터를 생성함
  • Node.js를 이해하려면 먼저 javascript를 배워야 한다.
    • 그 이유는 node.js는 javascript 기반으로 개조하여 만들어졌기 때문이다.

javascript
  • javascript는 C/C++, JAVA와 같은 프로그래밍 언어입니다.
  • 하지만 이름에서 알 수 있듯이 javascript는 독립적인 언어가 아니라 스크립트 언어입니다.
    • 스크립트 언어는 특정한 프로그램 안에서 동작하는 프로그램이기 때문에 웹 브라우저 프로그램 안에서만 작동을 하게 됩니다. 즉 웹 브라우저(크롬, 파이어폭스, 사파리, 익스플로러 등등)가 없으면 사용할 수 없는 프로그램입니다.
여기서 Node.js 가 나오는 이유가 됩니다. 즉 javascript를 웹 브라우저에서 독립시킨 것으로 Node.js를 설치하게 되면 터미널프로그램(윈도우의 cmd, 맥의 terminal 등)에서 node를 입력하여 브라우져 없이 바로 실행할 수 있습니다. 하지만 javascript에서 분리된 언어이기 때문에 문범은 같습니다. 이렇게 .node.js를 이용하여 웹브라우져와 무관한 프로그램을 만들 수 있게 되었고, 중요한 것은 node.js를 이용하여 서버를 만들 수 있다는 것입니다. 중요한 이유는 이전까지 server-clint 웹사이트를 만들 때 웹에서 표시되는 부분은 javascript를 사용하여 만들어야만 했으며, 서버는 ruby, java 등 다른 언어를 써서 만들어야 했는데, 마침내 한가지 언어로 전체 웹페이지를 만들 수 있게 된 것입니다.

Node.js의 장점


  • 클라이언트와 서버에서의 언어가 동일
  • javascript를 웹 브라우저에서 독립시킨 것으로, Node.js를 설치하게 되면 터미널 프로그램(cmd, termianl)에서 node를 입력하여 브라우져 없이 바로 실행할 수 있습니다. 
    • 하지만 javascript에서 분리된 언어이기 때문에 문법은 같습니다.
  • 이렇게 node.js를 이용하여 웹 브라우져와 무관한 프로그램을 만들 수 있게 되었고, 중요한 것은 node.js를 이용하여 서버를 만들 수 있다는 것입니다.
  • 중요한 이유는 이전까진 server-client 웹사이트를 만들 때 웹에서 표시되는 부분은 javascript를 사용하여 만들어야만 했으며, 서버는 ruby,java 등 다른 언어를 써서 만들어야 했는데, 마침내 한가지 언어로 전체 웹 페이지를 만들 수 있게 된 것입니다.
  • V8 engine
    • V8이라는 자바스크립트 엔진 위에서 동작하는 이벤트 처리 I/O 프레임워크
    • 자바스크립트 처리 속도가 기존에 웹 브라우저에 포함된 엔진보다 월등히 빠름
    • 구글이 망하지 않는 한 이 엔진은 끊임없이 개선되고 발전 될것
  • Event - driven 방식
    • 사용자가 이벤트를 발생시켰을 때,
    • 즉, 입력장치로 데이터를 전송했을 때에만 작동하는 방식
    • 대부분의 웹 서버는 사용자가 이벤트를 발생하기까지 기다리면서 자원(대기시간, 메모리)을 계속 소비함
  • Non-Blocking 패러다임
  • Single Thread
    • 멀티 스레드 방식은 복잡한 도익화 문제가 골칫거리 였다.
      • 동기화 모델이나 락에 대해 학습해야 하고 쓰기가 상당히 어려워 생산성 저하로 이어졌다.
    • 적은 양의 자원으로 처리하는것이 가능.
    • 그러나, 만일 어느 한곳에 예외상황이 발생한다면 애플리케이션 전체에 영향

Node.js의 내부 구조

  • 시간이 오래 걸리는 작업은 worker thread로 보내버리고 main thread는 코드를 계속 실행함
    • worker thread에서 작업이 끝나면 다시 main thread로 보냄


출처

댓글

이 블로그의 인기 게시물

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[운영체제] 파일의 구조(순차 파일, 직접 파일, 색인 순차 파일)

[운영체제] MLQ & MFQ