[노드교과서] 1장. 노드 시작하기(4) 이벤트기반, 싱글쓰레드, 논블러킹IO
19 Jan 2020
Reading time ~1 minute
이벤트기반(Event-driven)
예를 들어 웹 사이트에 두 명의 사용자가 방문하고 그 중 한 명이 댓글을 남긴다고 가정합시다. 아래 그림과 같은 동작을 통해 실행됩니다.
여기서 이벤트 루프, 태스크 큐, 백그라운드는 다음을 의미합니다.
-
이벤트 루프: 이벤트 발생 시 호출되는 콜백 함수를 관리하고, 실행 순서를 결정하는 역할을 담당합니다. 종료될 때 까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 불립니다.
-
태스크 큐: 이벤트 발생 후 콜백 함수들이 기다리는 공간입니다. 콜백들이 이벤트 루프가 정한 순서대로 줄을 서 있으므로 콜백 큐라고도 부릅니다.
-
백그라운드: 타이머나 I/O 작업 콜백 또는 이벤트 리스너들이 대기하는 곳입니다.
방문 이벤트 발생 시 HTML 가져오기라는 콜백 함수가 태스크 큐에 들어가고, 댓글등록 시 댓글저장이라는 콜백 함수가 태스크 큐에 들어가게 됩니다. 그 후 이벤트 루프가 결정한 실행 순서에 맞게 호출 스택에 들어가고 하나씩 실행되는 구조입니다.
싱글쓰레드
싱글 쓰레드는 팔이 하나라서 한 번에 한가지 일 밖에 못한다는 의미입니다. 멀티 쓰레드는 양팔이라 한 번에 여러가지 일을 처리 할 수 있습니다. 멀티 쓰레드는 제어권을 넘겨주는 복잡한 과정때문에 프로그래밍이 어렵다는 단점이 있습니다. 노드가 싱글 쓰레드라는 단점을 극복하기 위해서 쓰레드보다 큰 개념인 프로세스를 여러개 만드는 멀티프로세싱을 하기도 합니다.
논블로킹I/O
논블로킹I/O란 이전 작업이 완료될 때까지 다음 작업이 진행되는 것을 막지않는다는 의미로 간단히 말하면 이전 포스팅의 setTimeout 함수 같이 호출 스택에 쌓여서 바로 실행되는 것이 아니라 run 함수를 태스크 큐로 보내면서 실행순서가 달라집니다. 이렇게 실행순서가 눈에 보이는 순서가 아니라 태스크 큐를 거쳐 호출 스택으로 가는 방식이라고 생각하시면 됩니다. 짧은 시간동안 더 많은 일을 처리할 수 있도록 해주는 방식입니다. 하지만 노드는 싱글 스레드라는 한계가 있어 다른 컴퓨팅 자원을 사용하는 I/O작업(파일시스템 및 네트워크 요청)에서 시간적인 이득을 보는 논블로킹으로 동작합니다.