<Blocking Code>
let fs = require("fs");
let data = fs.readFileSync("sample.txt");
console.log(data.toString());
console.log("프로그램이 종료 되었습니다.");
- 위 예제는 Callback Function이 사용 되지 않는, Blocking Code 입니다.
- 위 코드를 실행 해보면 파일을 읽고 텍스트를 출력 한 후 "프로그램이 종료 되었습니다." 로그가 찍힌다.
- 즉, 파일을 찾고 읽고 toString() 하고 출력 후 "프로그램이 종료 되었습니다."가 순서대로 실행 된다.
<Non-Blocking Code>
let fs = require("fs");
// 모든 Node 어플리케이션의 비동기식 함수에서는 첫번째 매개변수로는 error를 받는다.
// 마지막 매개변수로는 callback function을 받는다.
fs.readFile('sample.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log(data.toString());
});
console.log("프로그램이 종료 되었습니다.");
- Blocking 예제와 같은 sample.txt 를 사용 하였다.
- fs.readFile()함수는 비동기식으로 파일을 읽는 함수이다.
- 도중에 에러가 발생하면 err객체에 에러내용을 담는다.
- 에러 발생없이 정상적으로 처리 되면 파일 내용을 다 읽고 출력한다.
- readFile() 메소드가 실행 된 후, 프로그램이 메소드가 끝날때 까지 기다리지 않는다.
- console.log("프로그램이 종료 되었습니다."); 를 출력한다.
- 그 후 메소드가 끝나서 console.log(data.toString()); 을 출력한다.
<프로그램이 끝난 시점은?>
- readFile() 메소드가 실행 된 후 프로그램은 readFile() 이 끝날 때까지 기다리지 않고 console.log("프로그램이 종료 되었습니다.'); 를 출력 하였다.
- 프로그램이 실질 적으로 끝난 시점은 console.log(data.toString()); 을 출력 후 이다.
<정리>
Non-Blocking 을 사용하는 서버는 Blocking 을 사용하는 서버보다 더 많은 양의 요청을 빠르게 처리할 수 있다.
'JavaScript > Node.js' 카테고리의 다른 글
[Node js] 콜백 함수(Callback Function)란 (0) | 2022.01.04 |
---|