[Node.js] 1. 노드 시작하기

시아·2022년 10월 18일

nodejs

목록 보기
1/3
post-thumbnail

1. 노드 시작하기

Event-driven (이벤트 기반)

이벤트 기반이란, 이벤트 발생 시 미리 지정해둔 작업을 수행하는 방식을 의미함

  • 이벤트의 예 : 클릭, 네트워크 요청, ...

이벤트 리스너에 콜백(callback) 함수를 등록한다.

  • ex) 버튼 클릭시 경고창 팝업

발생한 이벤트가 없거나, 발생했던 이벤트의 처리가 종료되면 노드는 다음 이벤트 발생까지 대기

노드는 자바스크립트 코드의 맨 위부터 한 줄씩 실행

function first() {
	second();
    console.log('1st');
}
function second() {
	third();
    console.log('2nd');
}
function third() {
    console.log('3rd');
}
first();

호출 스택을 생각해 보았을 때,
콘솔의 출력 결과는 다음과 같을 것이다.

**Console**
3rd
2nd
1st
  • 추가로 알아봐야 할 것 : 블로킹, 논 블로킹, 동기, 비동기

논 블로킹

기본적으로 자바스크립트 코드는 동시에 실행될 수 없음.
그러나, 자바스크립트상에서 돌아가는 것이 아닌 I/O(input/output) 작업은 동시 처리 가능

  • ex) 파일(읽기, 쓰기, 폴더 만들기, ...), 네트워크 요청, ...

노드는 이러한 I/O 작업에 한하여 논 블로킹 방식으로 처리

  • 논 블로킹 : 이전 작업 완료까지 대기하지 않고 다음 작업 수행
  • 블로킹 : 이전 작업이 끝나야만 다음 작업 수행

노드는 I/O 작업에 대하여 백그라운드로 넘긴 뒤 동시에 처리
=> 즉, 동시에 처리 가능한 작업들은 최대한 묶어서 백그라운드로 넘기는 것이 좋다

  • ex) 블로킹 방식의 코드
function longRunningTask(){
	//오래 걸리는 작업
    console.log('작업 끝');
}

console.log('시작')
longRunningTask();
console.log('다음 작업');

실행 결과는 당연하게도

시작
작업 끝
다음 작업

setTimeout을 사용하여 코드를 작성하면,

  • ex) 논 블로킹 방식의 코드
function longRunningTask() {
	//오래 걸리는 작업
    console.log('작업 끝');
}
console.log('시작');
setTimeout(longRunningTask, 0);
console.log('다음 작업');

이때의 실행 결과는 다음과 같다.

시작
다음 작업
작업 끝

setTimeout(callback, 0)은 코드를 논 블로킹으로 만들기 위하여 사용된다.
callback 함수는 태스크 큐로 보내지므로 순서대로 실행되지 않는다.
다음 작업이 먼저 실행된 후, 오래 걸리는 작업이 완료되는 프로세스이다.

싱글 스레드

노드 실행 > 프로세스 생성 > 프로세스 내에 스레드 여러개 생성
이때, 내가 직접 제어할 수 있는 스레드는 1개
--> 노드를 싱글 스레드라고 표현하는 이유

profile
Sia Lim

0개의 댓글