노드의 정의 및 특성

JinWooHyun·2020년 12월 9일
1

노드의 정의

Node.js 는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임

서버의 역할도 수행할 수 있는 자바스크립트 런타임
노드로 자바스크립트로 작성된 서버를 실행할 수 있음.
서버 실행을 위해 필요한 http/https/http2 모듈을 제공
노드는 V8과 libuv를 내부적으로 포함

  • Runtime : 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상 머신
  • V8 엔진 : 오픈 소스 자바스크립트 엔진 -> 기존 속도 문제 개선
  • libuv : 노드의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현한 라이브러리

이벤트 기반

이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식

논블로킹 I/O

오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행

논 블로킹 방식 하에서 일부 코드는 백그라운드에서 병렬로 실행됨
일부 코드: I/O 작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등
나머지 코드는 블로킹 방식으로 실행됨
I/O 작업이 많을 때 노드 활용성이 극대화

프로세스 vs 스레드

프로세스: 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유X

스레드: 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유

노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현

노드는 주로 멀티 스레드 대신 멀티 프로세스 활용
노드는 14버전부터 멀티 스레드 사용 가능

싱글 스레드

주어진 일을 하나 밖에 처리하지 못함
블로킹이 발생하는 경우 나머지 작업은 모두 대기해야 함 -> 비효율 발생
대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능
요청을 먼저 받고, 완료될 때 응답함
I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아짐

멀티 스레드

싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈춤
프로그래밍 난이도 쉽고, CPU, 메모리 자원 적게 사용
멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복
단, 새로운 스레드 생성이나 놀고 있는 스레드 처리에 비용 발생
스레드 수만큼 자원을 많이 사용함

profile
Unicorn Developer

0개의 댓글