본문 바로가기

Programming/Node.js

4. Node 기능 살펴보기 (6) - 동기 / 비동기 메서드 2

node js logo image

 

 

 

 

앞선 아티클에서 설명했다시피, 동기 / 비동기블로킹 / 논 블로킹과 비슷해 보이지만 엄연히 다른 개념이라는 것을 알아둬야 합니다. 

 

 

 

4. Node 기능 살펴보기 (6) - 동기 / 비동기 메서드 1

우리는 이제까지 노드에 대해서 학습하면서 동기 방식, 비동기 방식 메서드에 대해서 살펴보았습니다. 개념적으로 동기 / 비동기 방식에 대해서 살펴보았는데, 지금부터는 동기 / 비동기 메서드

nozeroslope.tistory.com

 

 

 

기본적으로 동기, 블로킹에 따른 구분은 아래와 같이 요약할 수 있습니다. 

 

· 동기, 비동기 : 백그라운드 작업의 완료 상태를 확인하는지 여부
· 블로킹, 논-블로킹 : 함수가 바로 return 되는지 여부

 

 

 


 

 

 

위의 아티클에서 살펴보았던 fs.readFile( ) 메서드는 비동기 메서드였습니다. 여기서는 백그라운드에서 파일을 읽는 작업이 완료되었는지를 확인하지 않고 바로 console.log( )를 실행했었죠? 만일 동기 메서드라면 해당 파일을 읽는 작업이 완료되었는지를 확인하고 (콜백)함수가 실행되었을 것입니다. 

 

fs.readFile('./readme2.txt', (err, data) => {
    if (err) {
        throw err;
    }
    console.log('1번', data.toString());
});

 

 

 

블로킹과 논블로킹의 구분은, 어떠한 (콜백)함수를 호출할 때, 백그라운드 상에서 즉시 return을 하는지 여부로 결정된다고 했습니다. 사실 동기/비동기 구분과 거의 비슷한 느낌이지만, 어쨌든 관념상 다른 개념입니다. 즉, 논-블로킹일 경우에는 (콜백)함수를 호출할 경우 바로 return처리를 합니다. 그럼 다른 작업을 메인 스레드가 수행하게 됩니다. 그리고 나중에 백그라운드가 알림을 주게 되면, 비로소 해당 (콜백)함수를 처리를 하는 것이죠. 

 

실제로 노드에서는 [동기-블로킹 방식] / [비동기-논 블로킹] 방식이 대부분입니다. 이외의 경우는 사실상 없다고 봐도 무방합니다. 그래서 실제로는 두 방식이 같은 것처럼 보이는 것입니다. 다소 개념적인 구분이니, 잘 이해가 가지 않는다면 반복해서 학습해보시기 바랍니다. 

 

 


 

 

그럼, 앞서 작성했던 다음 비동기-논블로킹 예제를 동기-블로킹 형식으로도 바꾸어 보겠습니다. 

 

[비동기-논블로킹]

const fs = require('fs');

console.log('**START**');

fs.readFile('./readme2.txt', (err, data) => {
    if (err) {
        throw err;
    }
    console.log('1번', data.toString());
});

fs.readFile('./readme2.txt', (err, data) => {
    if (err) {
        throw err;
    }
    console.log('2번', data.toString());
});

fs.readFile('./readme2.txt', (err, data) => {
    if (err) {
        throw err;
    }
    console.log('3번', data.toString());
});

console.log('###END###');

/* 출력
**START**
###END###
3번 반복 조회 테스트 중
2번 반복 조회 테스트 중
1번 반복 조회 테스트 중
*/

 

 

 

[동기-블로킹]

 

const fs = require('fs');

console.log('**START**');

let data = fs.readFileSync('./readme2.txt');
console.log('1번', data.toString());

data = fs.readFileSync('./readme2.txt');
console.log('2번', data.toString());

data = fs.readFileSync('./readme2.txt');
console.log('3번', data.toString());

console.log('###END###');

/* 출력
**START**
1번 반복 조회 테스트 중
2번 반복 조회 테스트 중
3번 반복 조회 테스트 중
###END###
*/

 

 

 

위와 같이 동기-블로킹 방식에서는 fs.readFileSync( )라는 동기형 메서드를 사용했습니다. 이에 대해서 다음 아티클에서 살펴보겠습니다.