[Node.js] Node.js 의 개념

Zero·2023년 3월 12일

Node

목록 보기
1/11

Node.js 란 ?

Node.js는 JavaScript 엔진으로 빌드 된 JavaScript 런타임이다. 즉, 노드를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있으며, 서버를 실행하는 데 제일 많이 사용된다

  • Node.js는 JavaScript를 서버에서도 사용할 수 있도록 만든 프로그램이다
  • Node.js는 V8이라는 Js엔진 위에서 동작하는 Js 런타임 (환경) 이다
  • Node.js는 서버사이트 스크립트 언어가 아니다. 프로그램이다.
  • Node.js는 웹 서버와 같이 확장성 있는 네트워크 프로그램을 제작하기 위해 만들어졌다.

단순히 웹에서 실행 가능한 게임을 만드려면 Js만으로도 가능하지만 조금 더 진화된 프로그램으로 실시간 온라인 채팅, 실시간 온라인 게임 등 실시간 기능을 넣거나, 로그인 기능을 넣어 유저를 관리하고 점수를 관리하는 DB기능을 Node.js를 통해 만들 수 있다.



Node.js를 사용하는 이유

Js 언어는 특정 프로그램 안에서 동작하는 프로그램이기 때문에 웹 브라우저 프로그램 안에서만 동작을 한다. 즉, 웹 브라우저(chrome, safari ...) 가 없으면 사용할 수 없는 프로그램이다. 이것이 곧 Node.js를 사용하는 이유라고 할 수 있는데 Node.js를 설치하게 되면 터미널 프로그램(cmd, terminal)에서 Node.js를 입력하여 브라우저 없이 바로 실행할 수 있다.

  • 하지만 Js에서 분리된 언어이기 때문에 문법은 같다
  • Node.js를 이용하여 서버를 만들 수 있다 !
  • 이전까지 Server-Client 웹 사이트를 만들 때 웹에서 표시되는 부분은 Js를 사용하여 만들어야만 했으며, 서버는 Reby,Java등 다른 언어를 써서 만들어야 했는데 마침내 한 가지 언어로 전체 웹 페이지를 만들 수 있게 된 것이다.


JavaScript의 런타임

런타임이란 특정 언어로 만든 프로그램을 실행할 수 있는 환경을 뜻한다

노드는 Js프로그램을 컴퓨터에서 실행할 수 있게 하는 자바스크립트 실행기이다.



Event Loop (이벤트 루프)

이벤트 루프는 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백함수를 호출 할지를 이벤트 루프가 판단한다. 노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 부른다.



논 블로킹 I/O

  • 이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리 가능
  • 작업에는 두 가지의 종류가 있고 동시 실행 / 동시 실행 불가 작업이 있다
  • 파일 시스템 접근, 네트워크를 통한 요청 작업은 입력 / 출력의 일종이다
  • 이러한 작업을 할 때 노드는 비동기 방식으로 블로킹을 만들지 않게 끔(논 블로킹) 처리한다
  • 함수 호출 시 당장 실행하는 것이 아닌 어느 곳에 쌓아 놓고 동시에 요청 처리후 요청이 완료된 순서대로 처리한다는 말


싱글 스레드

이벤트 기반, 논 블로킹 모델과 더불어 노드를 설명하는 키워드 중 하나로 Js 코드는 동시에 실행될 수 없는데 그 이유는 노드가 싱글 스레드 기반이기 때문이다.

  • 프로세스 : 운영체제에서 할당하는 작업의 단위, 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스이고, 프로세스 간 메모리 자원을 공유하지 않음
  • 스레드 : 스레드는 프로세스 내에서 실행되는 흐름의 단위, 프로세스는 스레드 여러 개 생성해 여러 작업을 동시에 처리할 수 있고 스레드들은 부모 프로세스의 자원을 공유한다

Node.js는 싱글 스레드, 논 블로킹 모델로 싱글 스레드가 혼자서 일을 처리하지만 들어오는 요청 순서가 아닌 논 블로킹 방식으로 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행한다



정리 📌

노든느 기본적으로 싱글 스레드, 논 블로킹 모델을 채용하므로 I/O 요청이 많이 발생하면 노드를 서버로 사용하는 것이 좋다

그러나 CPU 부하가 큰 작업에는 적합하지 않다. 우리가 작성하는 코드는 모두 스레드 하나에서 처리되기 때문에 CPU 연산을 많이 요구하면 스레드 하나가 혼자서 감당하기 어렵다.

즉, 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는데 노드는 적합하다 (실시간 채팅 , 주식 차트 등)

장점

  • 멀티 스레드 방식에 비해 적은 컴퓨터 자원 사용
  • I/O 작업이 많은 서버로 적합
  • 웹 서버가 내장되어 있어 별도의 웹 서버가 필요 없음
  • JSON 형식과 쉽게 호환된다.

0개의 댓글