Maenya's Techlog

[20210505] Node.js 와 비동기 I/O 처리 본문

프로그래밍/JS | React

[20210505] Node.js 와 비동기 I/O 처리

ming235 2021. 5. 5. 13:48

 

 

 

[Node.js]

 

 

서버사이드 자바스크립트.

구글의 자바스크립트 엔진인 V8을 기반으로 구성된 일종의 소프트웨어 시스템이다.

 

이벤트 기반으로 개발이 가능하며 Non-Blocking I/O를 지원하기 때문에 비동기식 프로그래밍이 가능.

이 때문에 I/O 부하가 심한 대규모 서비스를 개발하기 적합하다.

또한 자바스크립트의 표준라이브러리 프로젝트인 CommonJS의 스펙을 따르고 있다

 

 

 

 

[싱글 쓰레드와 이벤트 기반의 비동기 I/O 처리]

 

 

싱글 쓰레드를 가진 노드는 I/O 작업이 시작되면 I/O 작업 처리에 대한 응답을 기다리지 않고, 

바로 다음 작업을 실행한다.

대신 I/O 작업이 종료되면 이벤트를 발생시키고, 이 이벤트는 해당 프로세스의 이벤트 큐에 등록된다.

노드로 개발된 프로세스는 이 이벤트 큐에 등록된 새로운 이벤트를 감지하여,

해당 이벤트 시 수행하여야 할 작업을 실행한다.

(*쓰레드: 프로세스를 여러개로 나눈 단위)

 

 

 

 

[이벤트 루프]

 

 

작업을 요청하면서 그 작업이 완료되었을 때 어떤 작업을 진행할지

콜백 함수를 지정하여 동작이 완료되었을 때 해당 콜백 함수를 실행되는 방식의 동작 방식

만약 클라이언트가 웹 서버에 HTTP 형식으로 요청하게 되면

서버에서는 이벤트 루프가 계속 돌고 있다가 이를 감지하고 알맞은 작업을 워커 쓰레드를 생성하여 실행한다.

 

이벤트 루프는 어떤 요청이 발생하면 그 작업에 대해 쓰레드 실행만 일으킬 뿐이고

이후 작업을 할당받았던 해당 쓰레드가 모든 작업을 마치면 미리 전달받은 콜백 함수를 실행하도록

이벤트 루프로 응답하게 되며 이벤트 루프는 이것을 실행하여 클라이언트에게 결과를 응답하게 된다. 

 

 

 

 

 

출처 | 구름EDU