[Node.js] - 동기와 비동기 그리고 콜백

mingguriguri·2022년 6월 12일
0

Node.js

목록 보기
21/21
post-thumbnail

22.6.12.

28. Node.js - 동기와 비동기 그리고 콜백

  • Node.js에서 매우 중요한 특징인 비동기 처리 방식을 살펴보기
  • Node.js 실행순서를 파악하는 것이 목적

✔ synchronous 동기 & asynchronous 비동기

  • synchronous 동기 : 순서대로 처리
  • asynchronous 비동기 : 일이 오래 걸릴 경우 병렬적으로 처리 ➡ 시간 효율적, 매우 복잡
    👉 Node.js 이용

✔ 동기/비동기 차이

1. 동기 readFileSync

  • return 값 준다.
  • fs.readFileSync('읽고자하는 파일 이름','utf8')
var fs = require('fs');
console.log('A');
var result = fs.readFileSync('syntax/sample.txt','utf8');
console.log(result);
console.log('C');

결과

A
B
C
순차적으로 결과 나옴

2. 비동기 readFile

  • return 값 X, 함수를 3번째 인자로 줘야 함
  • readFile('읽고자하는 파일 이름','utf8', callback)
console.log('A');
var result = fs.readFile('syntax/sample.txt','utf8', function(err,result){
/*함수의 첫번째 인자에는 에러가 있다면 에러를 제공하고,
두번째 인자에는 파일의 내용을 제공하도록 약속 */
  console.log(result); //동작하다가 함수내 코드가 나중에 실행됨
});
console.log('C');

결과

A
C
B


3. 정리

  • Node.js에서는 가능한 비동기로 !!
  • 하지만 좋은 성능이 필요없다면 이해하기 쉬운 동기적 처리 사용

✔ callback

  • 어려운 개념이니 이해 안될 수 있음
  • 많이 봐서 익숙해지도록 하자

1. 함수

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

실행결과 : A

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

  • 변수에 집어넣어줌
var a = function(){ 
   console.log('A');
 }
a();

실행결과 : A

WHY?

  • 변수 a뒤에 호출하는 기호(();)를 넣음
    a라는 변수가 담긴 값인 함수를 실행

3. callback의 형식 살펴보기

var a = function(){ //4. a()실행되면
   console.log('A'); //5. A가 출력
 }
function slowfunc(callback) {//2. a를 callback으로 전달받음
  callback(); //3. callback()을 실행, 즉, a();를 실행하는 것과 같음
}
slowfunc(a); //1. slowfunc에서 a를 인자로 가져옴

실행결과 : A

코드과정
1. slowfunc에서 a를 인자로 가져옴
2. a를 callback으로 전달받음
3. callback()을 실행, 즉, a();를 실행하는 것과 같음
4. a()실행되면
5. A가 출력


느낀 점

  • 동기와 비동기의 차이는 확실히 이해완료!
  • callback이 조금 헷갈린다. 그래도 매개변수로 전달받는 개념인 것 같고, 안에 매개변수 이름도 일부러 callback을 사용하신 것 같다!
  • 댓글에 괜찮은 게 있어서 추가
    1. callback함수 = parameter가 반드시 함수인 함수
    2. 왜 이런 형태인가? > 어플리케이션의 비동기 처리를 위해 필요하다
    3. 비동기 처리는 왜 필요한가? > 주어진 요청을 동기적으로 처리하면 들어가는 리소스가 많아지기 때문이다
profile
To be "irreplaceable"

0개의 댓글