가자미의 개발이야기

노드에 들어가기 앞서 알아보는 노드의 특징 본문

HTML & CSS & JS/Node.js

노드에 들어가기 앞서 알아보는 노드의 특징

가자미 2021. 3. 8. 10:13

이벤트 기반

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

이벤트 루프 : 호출된 콜백 함수의 실행 순서를 결정, 노드가 종료될 떄까지 이벤트 처리를 위한 작업을 반복

태스크 큐 : 콜백 함수들이 기다리는 공간.

백그라운드 : 타이머나 IO 작업 콜백 또는 이벤트 리스너들이 대기하는 곳

 

논블로킹 I/O

node.js는 오래걸리는 작업을 백그라운드에 두고 다음 코드가 먼저 실행시키고 그 함수가 태스크 큐를 거쳐 호출 스택으로 올라오게 하는 방식으로 작업을 효율적으로 운용할 수 있다. 이를 논블로킹 방식이라 한다.

 

블로킹 방식의 코드

function lonRunningTask(){
	//오래 걸리는 작업
    console.log('작업 끝');
}
console.log('시작');
longRunningTask();
console.log('다음 작업');

논블로킹 방식의 코드

function longRunningTask(){
	//오래 걸리는 작업
    console.log('작업 끝');
}
console.log('시작');
setTimeout(longRunningTask, 0);	//논블로킹을 위한 타이머
console.log('다음 작업');
setTimeout(콜백, 0) : 코드를 논블로킹으로 만들기 위해 사용하는 기법. 사용시 콜백 함수가 태스크 큐에 보내짐.

싱글스레드

프로세스 : 운영체제에서 할당하는 작업의 단위.

스레드 : 프로세스 내에서 실행되는 흐름의 단위.

하나의 프로세스는 스레드를 여러개 가질 수 있음.

 

노드는 왜 싱글 스레드 인가?

멀티 스레드는 요청이 많은 경우 유리 할 수 있지만, 스레드를 늘리고 줄이는 행위도 비용이 발생하기 때문.

논블로킹 방식 싱글 스레드로 이 문제점을 해결.

장점 단점
멀티 스레드 방식보다 컴퓨터 자운을 적게 사용 싱글 스레드라서 CPU코어를 하나만 사용
I/O 작업이 많은 서버로 적합 CPU 작업이 많은 서버로는 부적합
멀티 스레드 방식보다 쉬움 하나뿐인 스레드가 멈추지 않도록 관리해야함
웹 서버가 내장 서버 규모가 커졌을 때 서버 관리 어려움
자바스크립트 사용 어중간한 성능
JSON 형식과 호환하기 쉬움.