[Node.js] 00. 시작하기

겨리·2021년 4월 7일
0

node.js

목록 보기
1/2

Node.js란

  • 크롬 v8 javaScript 엔진으로 빌드된 javaScript runtime.
  • 이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적
  • 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 함

cf) runtime : 특정언어로 만든 프로그램들을 실행할 수 잇는 환경. 노드는 자바스크립트 프로그램을 컴퓨터에서실행할 수 있게 해줌.
cf) runtime environmnet : 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태

런타임은 자바스크립트를 웹브라우저 바깥에서 동작할 수 있게 해주는 프로그램이라고 생각해도 무방하다.
원래 자바스크립트는 웹브라우저 안에서 돌아가는 언어였으나 노드의 등장으로 웹브라우저 바깥에서도 동작할 수 있게 되었다.


Node.js의 특징

  1. 자바스크립트 라는 언어를 사용하여 컴퓨터를 직접적으로 제어(웹 브라우저와 서버 둘다 하나의 언어로 제어 가능)

  2. 싱글스레드(자바스크립트의 특징)

  3. 이벤트 기반, Non blocking I/O Model 사용 -> 가볍고 효율적임.
    cf) Non blocking : 이전 작업이 완료될 때까지 멈추지않고 다음 작업을 수행함을 뜻함.

  4. v8이라는 엔진을 탑재

  5. 이벤트 루프라는 방식을 통해 서버 쪽에서도 비동기 프로그래밍을 할 수 있다는 장점이 있음.


이벤트 기반(event-driven)

: 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식.
이벤트가 발생하면 이벤트 리스너에 등록해둔 콜백함수를 호출. 발생한 이벤트가 없거나 발생했던 이벤트를 다 처리하면 노드는 다음 이벤트가 발생할 때까지 대기한다.

이벤트 루프

  • 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지를 이벤트 루프가 판단한다.
  • 이벤트 발생 시 호출한 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행순서를 결정하는 역할을 담당. 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복한다.

태스크 큐

  • 이벤트 발생 후 호출되어야 할 콜백함수들이 기다리는 공간. 콜백들이 이벤트 루프가 정한 순서대로 줄을 서 있으므로 콜백 큐라고도 부름

백그라운드

  • 타이머나 I/O 작업 콜백 또는 이벤트 리스너들이 대기하는 곳

※ 이벤트 루프는 호출 스택이 비어있을 때만 태스크 큐에 있는 함수를 호출 스택으로 가져온다.


Non blocking I/O

Non blocking

  • 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 그 함수가 다시 태스크 큐를 거쳐 호출 스택으로 올라오기를 기다리는 방식.

I/O

  • 입력과 출력을 의미. 파일 시스템 접근(파일 읽기, 쓰기, 폴더만들기 등)이나 네트워크 요청 같은 작업이 I/O의 일종이다. 이러한 작업을 할 때 노드는 논블로킹 방식으로 동작한다.

String Thread

cf) 자바스크립트와 노드에서 논블로킹이 중요한 이유는 싱글스레드이기 때문이다. 한 번에 한 가지 일 밖에 처리하지 못하므로 어떠한 작업에서 블로킹이 발생하면 다음 일을 처리할 수 없다.

[프로세스]
운영체제에서 할당하는 작업의 단위. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.
[스레드]
프로세스 내에서 실행되는 흐름의 단위. 하나의 프로세스는 여러개의 스레드를 가질 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다(== 같은 메모리에 접근할 수 있다.)
-> 스레드는 작업을 처리하는 일손으로 생각하면 됨.

  • 노드는 스레드를 늘리는 대신 프로세스 자체를 복사하여 여러 작업을 동시에 처리하는 멀티 프로세싱 방식을 사용하여 single thread의 단점을 극복함.
profile
개발하는 겨리

0개의 댓글