본문 바로가기

공부/Node.js

[Node.js] 동기와 비동기

동기와 비동기에 관해서도 자세하게 설명이 되어있어 한 번 포스팅 해보려고 한다.

 

기본적으로 사용하는 메서드들은 대부분 비동기고 동기는 잘 없다. 아무래도 자원의 활용률이라던가 속도라던가 여러 부분에서 동기보다는 비동기가 좋아서 그런게 아닐까? 다만 둘 다 원한다면 사용은 가능하다.

 

const  readFile  = require('fs');

const fs = require('fs');

console.log('시작');
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('끝');

 

일단 효율이나 모양이나 그런건 떼어두고 확인을 위한 코드이다. 보면 시작 이후 1 2 3 끝의 순서대로 적혀있지만...

 

 

결과는 매번 실행할 때마다 달라진다. 이걸로 확인할 수 있는 건 내가 사용한 fs.readFIle이라는 메서드는 비동기 메서드라는 점이다. 그럼 default가 대부분 비동기인데 동기메서드는 어떻게 써야하나?

 

const fs = require('fs');

console.log('시작');
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('끝');

 

동기로 실행시킨 코드이다. 코드를 보면 data를 return 하는 함수로써 readFileSync라는 동기 메서드가 사용되는 듯하다.

직접 실행 시켜 보면

 

로그에는 이렇게 순번의 변화없이 실행하는 것을 볼 수 있다.

 

비동기 : 랜덤

동기 : 순서

 

로 생각될 수 있지만 비동기도 충분히 순서대로 할 수 있다. 바로 callback 함수를 이용해서 값을 다음 콜백함수로 넘겨주고 그런 방식이면 비동기지만 충분히 순서대로 구현이 가능하다. 거기다 더해서 코드의 간결화와 callback 지옥을 막기 위해서 Promise를 사용한다면 더욱 깔끔해질 것이다.

 

결론 : 기본적으로 우리가 사용하는 대부분의 함수는 비동기이지만 함수의 뒤에 Sync가 붙은 별개의 함수들이 존재하는데 이 함수들은 동기로 사용 된다.

'공부 > Node.js' 카테고리의 다른 글

[Node.js] REST  (2) 2020.08.18
[Node.js] 버퍼와 스트림  (0) 2020.08.14
[Node.js] Promise  (0) 2020.08.14
[Node.js] Do it! Node.js 후기  (0) 2020.08.12
[Node.js] 모듈화  (0) 2020.08.11