본문 바로가기
Programming 개발은 구글로/Web[프론트엔드&백엔드]

[Web] Node.js - Blocking & Non-Blocking code

by 40대직장인 2022. 7. 5.

Blocking & Non-Blocking code

1. Blocking Code

: 프로그램이 메서드가 끝날 때까지 대기를 한 후 다음 명령어로 진행이 됩니다.

 

 - Blocking 예제 코드

// input.txt
Let's understand what is a callback function.
What the HELL is it?

 

// main.js
var fs = require("fs");

var data = fs.readFileSync('input.txt');

console.log(data.toString());
console.log("Program has ended");

 

결과를 확인하면,

$ node main.js
Let's understand what is a callback function.
What the HELL is it?
Program has ended

위의 결과로 확인해보시면, 텍스트를 출력하고 나서 프로그램이 종료되었다는 문구를 출력합니다.

2. Non-Blocking Code

: 함수가 실행될 때, 프로그램이 함수가 끝날때까지 기다리지 않고 바로 그 아래에 있는 코드들을 실행하게 됩니다. 그다음에 함수에 있던 작업이 다 끝나면 콜백 함수를 호출합니다.

 

 - Non-Blocking 예제 코드

// main.js
var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});

console.log("Program has ended");

 

결과를 확인하면, 

Program has ended
Let's understand what is a callback function.
What the HELL is it?

readFile() 메서드가 실행이 먼저 된 후 프로그램이 메서드가 끝날때까지 대기하지 않고 곧바로 다음 명령어로 진행하였기 때문에, 프로그램이 끝났다는 메시지를 출력 한 후에, 텍스트 내용을 출력했습니다.

 

프로그램이 끝나고나서 텍스트 내용을 출력한 것은 아닙니다. 프로그램이 실질적으로 끝난건 텍스트가 출력된 후입니다. 만약에 readFile() 다음에 실행되는 코드가 그냥 console.out() 이 아니라 readFile() 보다 작업시간이 오래 걸리는 코드였다면 텍스트 출력을 먼저 하게 될 겁니다.

 

callback 함수를 사용하여 이렇게 프로그램의 흐름을 끊지 않음으로써 Non-Blocking 코드를 사용하는 서버는 Blocking 코드를 사용하는 서버보다 더 많은 양의 요청을 빠르게 처리 할 수 있게 됩니다.

 


 

 

참고 글: Callback Function 개념

https://velopert.com/255

 

 

 

 

댓글