노드 핵심 개념 이해하기

sykim·2020년 2월 26일
0

노드

노드는 크롬 v8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다. 즉, 노드는 자바스크립트를 컴퓨터에서 실행할 수 있게 만들어주는 자바스크립트 실행기이다.

*런타임 : 프로그램 언어가 구동되는 환경

이벤트기반
논블로킹 I/O 모델
싱글스레드
노드는 이 세 단어 때문에 노드는 가볍고 효율적이라고 한다. 각 단어의 뜻을 알아보자.

이벤트 기반

이벤트가 발생하면 이벤트 리스너에 등록해둔 콜백함수를 호출하고, 발생한 이벤트를 다 처리하면 다음 이벤트가 발생할때까지 대기하는 일련의 과정을 이벤트기반이라고 한다.

여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지는 이벤트 루프가 판단한다.

(중요) 노드는 자바스크립트 코드에서 맨 위부터 한 줄씩 실행

즉, 노드가 함수 호출을 받아 함수들을 호출 스택에 쌓고
맨 위에 있는 코드부터 실행을 시킨다.

이벤트 루프 : 이벤트가 발생할때 호출할 콜백 함수들을 관리하고, 그 콜백 함수의 실행 순서를 결정. 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 부른다.
테스트 큐 : 이벤트 발생 후 호출되어야할 콜백 함수들이 기다리는 공간.
백그라운드 : 타이머와 같은 이벤트 리스너들이 기다리는 공간.

예시로 설명을 해보자. 2초 뒤에 알럿창을 띄우는 코드는 어떻게 동작할까?
1. 우선 호출 스택에 setTimeout 함수가 들어온다.
2. 타이머 함수이므로 백그라운드로 넘어간다.
3. 2초 후 백그라운드에서 테스크 큐로 들어간다
4. 호출 스택 실행이 끝났기 때문에 이벤트 루프가 테스크 큐의 콜백 함수를 호출 스택으로 올린다.
5. setTimeout 함수가 호출 스택에서 실행되고 호출스택에서 비워진다.

논블로킹 I/O(INPUT / OUTPUT)

작업이 완료될 때까지 멈추지 않고 다음 작업을 수행하는 것을 의미한다.
동기, 비동기 방식에서 비동기 방식과 유사하다고 이해하면 되겠다.

위 예시를 덧붙여 설명해보자.
console.log('시작')
2초 뒤에 실행되는 setTimeout 함수
console.log('다음 작업')

이 경우 블로킹 방식이라면 콘솔창에 시작 -> 2초 함수 실행 후 -> 다음 작업 순서로 진행되지만 논블로킹 방식이라면 콘솔창에 시작 -> 다음 작업 -> 2초 함수 실행 으로 진행된다.

즉, 오래 걸리는 작업을 기다려주지 않고 다음 호출 스택이 먼저 실행되기 때문에 블로킹 방식보다 더 짧은 시간에 작업을 처리할 수 있다.

싱글 스레드

컴퓨터가 작업을 처리할 수 있는 일손.
노드는 싱글 스레드이기 때문에 주어진 작업을 혼자 처리해야 한다.
혼자서 많은 요청을 처리해야 하기 때문에 요청이 들어온 순서대로 요청 완료 후 다음 요청을 실행시키지 않고,
조금 더 효율적으로 아까 말한 논블로킹 방식을 이용해 우선 요청을 전부 받고 완료된 순서대로 실행시킨다.
멀티 스레드를 사용하면 보다 많은 일손이 생기는 것이므로 더 빠르고 효율적인 작업이 가능하지만 컴퓨터 자원이 그만큼 많이 발생된다.

정리

노드의 장점

  • 멀티스레드 방식에 비해 컴퓨터 자원을 적게 사용한다
  • i/o 작업이 많은 서버에 적합하다
  • 웹 서버가 내장되어 있어 사용이 쉽가
  • 자바스크립트로 사용한다
  • json 형식과 호환이 쉽다

노드의 단점

  • 싱글스레드라서 cpu 코어를 하나만 사용한다
  • cpu 작업이 많은 서버로는 부적합하다
  • 스레드가 하나라서 멈추지 않도록 관리해야 한다
profile
블로그 이전했습니다

0개의 댓글