NodeJS란?

정승렬·2023년 2월 28일
0

기술면접

목록 보기
10/38

노드 공식 사이트에서는 노드를 다음과 같이 설명하고 있다.

Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.

즉, 노드를 통해 다양한 자바스크립트 애플리케이션을 실핼할 수 있으며, 서버를 실행하는 데 제일 많이 사용된다.

Node.js 사용이유

  • JavaScript는 독립적인 언어가 아닌 스크립트 언어이기 때문에 웹 브라우저가 없으면 사용할 수 없는 프로그램이다.
  • JavaScript를 웹 브라우저에서 독립시켜 터미널 프로그램에서 브라우저에서 바로 실행할 수 있다.
  • JavaScript에서 분리된 언어이기 때문에 문법이 같아 클라이언트와 서버 모두에서 한 가지 언어로 전체 웹 페이지를 만들 수 있다.

📌 이벤트 기반

  • 노드는 V8과 더불어 libuv라는 라이브러리를 사용한다
  • libuv 라이브러리는 노드의 특성인 이벤트기반, 논 블로킹 I/O 모델을 구현하고 있다.
  • 이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두고, 이를 이벤트 리스너에 콜백함수를 등록한다
  • 이후 이벤트가 발생하면 리스너에 등록해둔 콜백함수를 호출하며, 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기한다

📌 이벤트 루프

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

📌 논 블로킹 I/O

  • 함수 호출 시 당장 실해는 것이 아니라(동기->블로킹) 일단 어느 곳에 쌓아 놓고 동시에 요청을 처리하고(비동기->논 블로킹) 요청이 완료된 순서대로 처리(스택 이용) 한다.

📌 싱글 스레드
자바스크립트 코드는 동시에 실행될 수 없는데 그 이유는 노드가 싱글 스레드 기반이기 때문

  • 프로세스 : 운영체제에서 할당하는 작업의 단위, 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스이다. 프로세스간에는 메모리 등의 자원을 공유하지 않는다.

  • 스레드 : 스레드는 프로세스 내에서 실행되는 흐름의 단위, 프로세스는 스레드를 여러 개 생성 해 여러 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.

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

📌 결론
노드는 기본적으로 싱글 스레드, 논 블로킹 모델을 채용하므로 I/O 요청이 많이 발생하면 노드를 서버로 사용하는 것이 좋다. 하지만 노드는 CPU 부하가 큰 작업에는 적합하지 않다.

노드의 장점
1. 멀티 스레드 방식에 비해 적은 컴퓨터 자원을 사용한다.
2. I/O 작업이 많은 서버로 적합하다.
3. 웹 서버가 내장되어 있어 별도의 웹서버를 설치할 필요가 없다.
4. 자바스크립트를 사용하기 때문에 JSON 형식과 쉽게 호환된다.

0개의 댓글