node.js 입문 #9

학미새🐥·2022년 1월 22일
0
post-custom-banner

node.js의 동기와 비동기의 차이

  • 동기적 처리 : 일을 순서대로 처리하는 것
  • 비동기적 처리 : 이전 일이 끝날 때까지 기다렸다가 다음일을 하는 것이 아닌, 병렬적으로 일을 처리하는 것

node.js는 비동기적 처리를 사용하기 좋다

우리가 이전에 사용하였던 node.js의 모듈 FileSystem를 사용한다.
공식문서에서 fs.readFilefs.readFileSync 함수를 비교해보면,

fs.readFile(path[,options],callback)
fs.readFileSync(path[,options])

둘의 눈에 띄는 차이점은 바로 callback의 유무이다.

코드를 통해 실행해보며 어떤 방식으로 다르게 실행되는지 확인해보자.

동기적 처리

//readFileSync
console.log('A')
var result = fs.readFileSync('syntax/sample.txt', 'utf8');
console.log(result);
console.log('C');

sample.txt에는 'B'라는 문자 하나만 적혀있다.
그럼 output이
A
B
C
로 순차적으로 실행된다.

비동기적 처리

console.log('A');
fs.readFile('syntax/sample.txt', 'utf8', function(err, result){
    console.log(result);
});
console.log('C');

비동기적 함수인 readFile을 쓸 때, callback 차리에는
function(err,result) {} 와 같은 함수가 들어간다.
발생한 에러가 인자로 들어가는 곳이 err, readFile이 경로에서 읽어낸 파일의 내용이 인자로 들어가는 곳이 result이다.

위의 readFileSync에서는 readFileSync 함수의 리턴값, 즉 해당 경로의 파일의 내용을 반환하여 변수 result에 넣어주고, 이를 console.log로 출력했다.
그러나 readFile은 해당 경로의 파일의 내용을 읽은 뒤에 실행할 코드를 callback 자리에 작성해주어야 한다.
따라서 파일 내용을 출력하는 console.log(result)가 callback 내부로 이동하게 되는 차이를 가진다.

output을 보면 동기와 비동기의 차이를 정확히 알 수 있다.
A
C
B
로 출력된다.
그 이유는,

  • 동기적 처리에서는 A출력 -> B(파일내용)출력 -> C출력 이 순차적으로 실행되었지만
  • 비동기적 처리에서는 A출력 -> C출력이 실행되면서 병렬적으로 B(파일내용)출력이 실행되기 때문이다.

callback

위의 코드에서

fs.readFile('syntax/sample.txt', 'utf8', function(err, result){
    console.log(result);
});

이 곳이 비동기적 처리가 구현된 곳이라고 하였다.
또 callback은 세번째 인자로 들어간 function이다.
callback을 구현한 것의 의미는,
"node.js에게 '파일읽기'(I/O작업으로서 시간이 조금 걸림)를 모두 마친 뒤에, callback 함수를 호출함으로써 나에게 작업이 마쳤음을 알려달라고 한 것" 이라고 할 수 있다.

쉽게 말해, readFile을 통해서 파일 내용을 읽은 뒤에 해야할 일, 실행시켜야할 함수를 callback 내부에 작성하는 것이다.


이름이 없는 함수 : 익명함수

function a() {
  console.log('A');
}

와 같은 일을 하는 코드를 익명함수로 구현하려면

var a = function() {
  console.log('A');
}

a();  //A라고 출력됨

와 같이 익명함수를 변수에 넣어줌으로써 이름을 붙여 사용할 수 있다.
이를 통해 알 수 있는 것은,

JavaScript에서의 함수는 이다.

profile
뭐든 다해보려는 공대생입니다
post-custom-banner

0개의 댓글