NodeJS 개념

강은비·2021년 10월 14일
0

JS

목록 보기
1/19
post-custom-banner

⚡️ Node.js란?

Chrome V8 JavaScript 엔진으로 빌드된 자바스크립트 런타임(환경)

  • 웹 브라우저 밖에서도 자바스크립트를 실행할 수 있는 환경
  • 즉, JavaScript 를 웹 브라우저에서 독립시킨 것으로 Node.js를 설치하게 되면 터미널에서 Node.js를 입력하여 브라우저 없이 다양한 자바스크립트 애플리케이션을 바로 실행할 수 있다.
  • Non-blocking I/O 싱글 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있는 것이 특징이다.
  • 그외에도 Apache HTTP Server 또는 IIS와 같은 소프트웨어 없이 웹 서버의 역할을 할 수 있도록 하는 내장 라이브러리를 포함하고 있다.
  • 그래서 자바스크립트로 서버를 개발하는 것도 Node.js를 이용하면 가능하다.



❗️ 이벤트 기반

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

✨ 이벤트 루프

  • 이벤트 루프(event loop)는 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백함수를 호출할지를 판단한다.
  • 노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복
  • 이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있다.


❗️ 논 블로킹 I/O

  • 작업에는 두 가지 종류가 있는데 동시에 실행될 수 있는 작업과 동시에 실행될 수 없는 작업이다.
    • 특히 파일 시스템 접근, 네트워크를 통한 요청 작업은 입력(Input)/출력(Output)의 일종이며,이러한 작업을 할 때 노드는 논 블로킹 방식으로 처리한다.
  • 논블로킹이란 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것을 의미한다.
  • 반대로 블로킹은 이전 작업이 끝나야만 다음 작업을 수행한다.

✨ 싱글 스레드

  • 자바스크립트 코드는 동시에 실행될 수 없는데 그 이유는 싱글 스레드 프로그래밍 언어이기 때문이다.
    • 프로세스 : 운영체제에서 할당하는 작업의 단위이다. 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스이다. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다
    • 스레드 : 스레드는 프로세스 내에서 실행되는 흐름의 단위이다. 프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.
  • Node.js는 싱글스레드, 논 블로킹 모델로 싱글 스레드가 혼자서 일을 처리하지만 들어오는 요청 순서가 아닌 논 블로킹 방식으로 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행한다.
  • 즉, 동시에 많은 요청들을 비동기로 수행함으로써 싱글 스레드일지라도 논 블로킹이 가능하다.

참고

post-custom-banner

0개의 댓글