JavaScript/Node.js

[Node.js] 동기(Syncronous)와 비동기(Asyncronous)

aaaahy 2023. 1. 14. 15:07

1. 동기(Syncronous)와 비동기(Asyncronous)

 

동기적으로 일을 처리한다 ? 

▶ 어떤 일을 처리하고 그 일이 다 끝난 후, 다음 일을 처리한다.

▶ 오래걸리는 작업이 있을 경우, 수행중인 작업이 끝날 때까지 기다린다.

 

비동기적으로 일을 처리한다 ?

▶ 어떤 일을 컴퓨터나 다른 사람에게 시키고 , 다음 일을 처리한다.

▶ 동시에 일을 처리하며(병렬적) 시간 효율성을 높인다.

 

→ Node.js 에서는 비동기적 처리를 하기위한 좋은 기능들을 가지고 있다. 

 

 

Node.js 에서의 사용 예제

 

Node.js 공식 홈페이지 → 문서 → 자신이 사용하는 Node.js 버전 선택

→ File System → Sync 검색

▶ ~Sync 함수는 동기적 처리

 

여기서는 readFileSyncreadFile을 사용해보자.

 

readFileSync와 다르게 callback 함수 존재

 

1) 동기적 처리

var fs = require('fs');

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

▶ sync.js 파일 내용

- readFileSync()을 이용해 파일 읽기 기능 수행

- 동기적 처리 방식 이해를 위해 console.log() 각각 수행

 

sample.txt 내용

- syntax/sample.txt 파일에는 문자 'B'만 입력되어 있음

 

실행 결과

- A 출력 → B 출력 → C 출력

 

 

2) 비동기적 처리

var fs = require('fs');

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

▶ async.js 파일 내용

- readFile()을 이용해 파일 읽기 기능 수행

- 비동기 처리 방식 이해를 위해 console.log() 각각 수행

- readFileSync()와 다르게 콜백함수를 3 번째 인자로 하며 리턴 값이 존재하지 않음

- sample.txt 파일 내용은 위와 같음

 

실행 결과

- A 출력 → C 출력 → B 출력

- A 출력 후 readFile 실행하면서 결과를 가져오기 전에 C 가 출력된 후 작업이 끝나 B 출력 됨

 

 

▷ Node.js의 성능 최대화를 위해서는 비동기 방식으로 작업을 해야 한다 !!

 

* 생활코딩 WEB2-Node.js-28.1, WEB2-Node.js-28.2 강의 기반으로 작성됨