본문 바로가기
카테고리 없음

NodeJS는 논블로킹 모델이지만 asnyc/await을 사용하면 블로킹이 되는 것이 아닌가요?

by Node.js 주니어 개발자 귤 2023. 6. 29.

Node.js는 기본적으로 싱글스레드 논블로킹 모델이다.

 

하지만 asnyc/await 함수를 사용하게되면 블로킹 처리가 되는것이 아닌가요? 라는 질문을 받았을때 멍해졌다...

무엇이 맞는건지 블로킹 처리로 봐야하는건지, Node.js는 논블로킹 모델이 맞는데... 내가 잘못알고 있는것인가?

Node.js가 블로킹 모델인가? 

뭐라 대답해야 하는것인지 하나도 생각이 나지 않았고 시간과 여유를 가지고 곱씹어 보아도 나는 시원하게 대답하지 못하는 질문이었기 때문에 어떤 대답을 해야 했는지 찾아보았다

 

 

async/await은 JavaScript의 비동기 처리를 위한 문법적인 편의성을 제공하는 기능이다.
이를 사용하면 비동기 작업을 동기적으로 작성할 수 있지만, async/await를 사용하는 함수는 비동기 함수이다.

하지만 async/await 문법을 사용한 코드에서도 Node.js의 논블로킹 특성은 그대로 유지된다.
async/await은 단순히 코드의 동기적인 흐름을 구성하는 문법적인 요소일 뿐이다.
async 함수 안에서 await 키워드를 사용하면 해당 비동기 작업이 완료될때 까지 기다리게 되지만 이는 현재 실행중인 함수의 블로킹을 의미하지는 않는다.
다른 이벤트 루프에서 실행되는 다른 작업들은 여전히 실행될 수 있기 때문에 블로킹처리가 되는것이 아니다.

 

결론적으로 async/await은 동기적 처리로 보이게 도와주는 것일 뿐 실제 블로킹이 발생하지는 않기 때문에 Node.js의 논블로킹 특성은 그대로 유지되며 다른 작업들은 계속해서 처리할 수 있다.