Node.js를 공부해보면서 중요한 개념인 동기와 비동기 방식에 대해 적어보려한다.
동기 처리 방식(Synchronous)
동기 처리 방식(synchronous)은 일련의 작업을 순차적으로 실행하며, 각 작업이 완료될 때까지 다음 작업을 실행하지 않는 방식이다.
JavaScript 코드로 예시를 들어보면
1
2
3
console.log(1);
let data = fs.readFileSync('data.txt',{encoding:'utf8'});
console.log(data);
동기 처리 방식에서는 1번 줄 코드 -> 2번 줄 코드 -> 3번 줄 코드 실행이 순차적으로 진행되며, 각 줄의 실행이 끝나면 다음 줄로 이동하는 형태로 실행된다(만약 각 작업이 완료되지 않았다면 다음 줄 코드는 이 실행이 완료 될 때까지 실행 되지 않는다).
비동기 처리 방식(Asynchronous)
비동기 처리 방식(asynchronous)은 일련의 작업을 순차적으로 실행하지 않고, 작업을 백그라운드에서 병렬로 실행하며, 작업이 완료되지 않았더라도 다음 작업을 실행할 수 있는 방식이다.
JavaScript 코드로 예시를 들어보면
1
2
3
4
5
6
console.log(1);
fs.readFile('data.txt',{encoding:'utf8'},function(err,data){
console.log(2);
console.log(data);
})
console.log(3);
비동기 처리 방식에서는 동기 처리 방식과는 다르게 순차적으로 실행되지 않고, console.log(1) 후 readFile이 시작되고 바로console.log(4)가 실행된다. 그리고 readFile의 실행이 끝나면 function을 (콜백함수)통해 끝났다는 것을 알려준다. 즉 작업이 완료되지 않았더라도 다음 작업을 실행한다.
Node.js는 비동기 방식을 이용한다.
Node.js는 비동기 IO를 지원하며 Single-Thread 기반으로 동작하는 서버이다.
비동기 처리 방식은 주로 긴 시간이 필요한 작업에 사용되며, 작업 간의 순서와 실행 시간이 중요하지 않은 경우에 사용된다.
Node.js에서는 비동기 처리 방식을 이용하기 때문에 시스템의 처리 속도가 높다는 장점을 가지고 있다.