노드(Node.js)에서 블로킹과 논블로킹 처리

홍석현·2023년 5월 31일
1

CS

목록 보기
2/6

노드(Node.js)는 비동기 이벤트 기반의 JavaScript 런타임 환경으로, 블로킹과 논블로킹 처리가 중요한 개념입니다.
노드에서의 블로킹과 논블로킹 처리에대해 공부해보았다.

블로킹 (Blocking) 처리

노드에서 블로킹 처리는 한 작업이 완료될 때까지 다른 작업들이 대기해야 하는 방식을 말합니다. 블로킹 처리는 동기적인 방식으로 작업을 처리하는 것을 의미합니다.

일반적으로 I/O(인풋/아웃풋) 작업이나 네트워크 요청과 같은 느린 작업을 수행할 때 블로킹 처리가 발생합니다. 이 때 해당 작업이 완료될 때까지 노드는 다른 작업을 처리하지 못하며, 대기 상태에 있게 됩니다.(싱글스레드적 면모)

블로킹 처리의 장점:

간단한 코드: 블로킹 처리는 동기적인 방식으로 작업을 처리하므로 코드가 간단하고 직관적입니다.

예측 가능한 동작: 작업이 순차적으로 실행되므로 예측 가능한 동작을 보장합니다.

블로킹 처리의 단점:

성능 저하: 작업이 완료될 때까지 대기해야 하므로 다른 작업들이 처리되지 못하고 대기하는 시간이 발생합니다. 따라서 시스템의 전체 성능이 저하될 수 있습니다.

확장성 문제: 블로킹 작업은 요청을 처리하기 위해 추가적인 스레드를 생성하지 않기 때문에 동시에 처리할 수 있는 요청의 수에 제약이 있을 수 있습니다.

논블로킹 (Non-blocking) 처리

논블로킹 처리는 한 작업이 완료될 때까지 다른 작업들이 대기하지 않고, 다른 작업들을 처리하는 비동기적인 방식을 말합니다.

논블로킹 처리는 일반적으로 비동기적인 I/O 작업이나 네트워크 요청에서 사용됩니다. 작업을 요청한 후에 다른 작업들을 처리하며, 작업이 완료되면 노드는 콜백 함수를 호출하여 결과를 처리합니다.

논블로킹 처리의 장점:

성능 개선: 다른 작업들을 처리하면서 작업 완료를 기다리지 않기 때문에 시스템의 성능을 개선할 수 있습니다.

확장성: 작업이 완료될 때까지 대기하지 않고 다른 작업을 처리하기 때문에 동시에 처리할 수 있는 요청의 수가 더 많아질 수 있습니다.

논블로킹 처리의 단점:

코드 복잡성: 비동기적인 방식으로 작업을 처리하므로 코드가 복잡해지고, 콜백 헬(callback hell) 현상이 발생할 수 있습니다. 이를 해결하기 위해 프로미스(Promise)나 async/await과 같은 패턴을 사용할 수 있습니다.

예측 어려움: 작업이 완료될 때까지 순서가 보장되지 않기 때문에 예측하기 어려운 동작을 보일 수 있습니다.

노드에서는 주로 논블로킹 처리를 권장하며, 비동기 방식을 지원하는 다양한 모듈과 라이브러리가 제공됩니다. 예를 들면, fs 모듈의 비동기 메서드나 http 모듈의 비동기 서버 요청 등이 있습니다.

중요

동기:
블로킹

비동기:
논블로킹

profile
Front-end to Full-stack

0개의 댓글