Node.js (1)

Ialec_11·2022년 12월 3일
0
post-thumbnail

노드 핵심 개념

노드 공식 사이트에서는 노드를 다음과 같이 설명 하고 있습니다.

Node.js®는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임 입니다.

노드는 자바스크립트 런타임입니다. 런타임은 특정 언어로 만든 프로그램들을 실행 할 수 있는 환경이라고 정의 되어 있는데 저는 그냥 쉽게 자바스크립트 실행기 정도로 이해하기로 합니다.

노드에 대해서 공부를 시작하면서 자바스크립트를 실행도 하지만 서버 애플리케이션을 실행하는 데 제일 많이 사용 된다고 합니다. 저에게 서버는 클라이언트가 요청을 하면 서버에서 응답을 하는 역할을 한다고 알 고 있습니다. 그게 서버가 다른 서버에 요청을 보내는 형태이든 정보나 서비스를 제공하는 형태이든 기본적인 형태는 요청과 응답입니다.

그렇다면 노드는 자바스크립트 프로그램이 서버로서 기능하기 위한 도구를 제공하게 되므로 서버 역할을 수행할 수 있습니다. 그러면 노드를 사용해 서버를 만드는 이유는 무엇일까??

찾아보니 노드의 특성을 알아야 이에 대한 대답을 할 수 있었습니다.

1. 이벤트 기반

이벤트 기반(event-driven) : 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
특정 이벤트가 발생할 때 무엇을 할 지 미리 등록합니다 이벤트 리스너에 콜백 함수를 등록한다고도 표현합니다.

이벤트 루프 : 이벤트 발생 시 호출할 콜백 함수들을 관리, 호출된 콜백 함수의 실행 순서를 결정하는 역할을 담당 (노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 부름)

백그라운드 : setTimeout 같은 타이머나 이벤트 리스너들이 대기하는 곳 (여러 작업이 동시 실행 가능 비동기관련??)

태스크 큐 (콜백 큐) : 이벤트 발생 후 백그라운드에서 태스크 큐로 보냄 콜백들은 보통 완료된 순서대로 줄을 서 있지만 특정한 경우에는 순서가 바뀌기도 함

먼저 전역 컨텍스트인 anonymous가 호출 스택에 쌓입니다 그 뒤 setTimeout이 호출 스택에 들어갑니다.

호출 스택에 들어간 순서와 반대로 실행되므로 setTimeout이 먼저 실행됩니다.

setTimeout이 실행되면 타이머와 함께 run 콜백을 백그라운드로 보내고 setTimeout은 호출 스택에서 빠집니다. 다음 anonymous가 호출 스택에서 빠짐

백그라운드에서는 n초를 센 후 run 함수를 태스크 큐로 보냅니다. (백그라운드에서 정해진 작업이 완료 된 후 태스크 큐로 보냄)

호출 스택에서 anonymous까지 실행이 완료되어 호출 스택이 비어 있는 상황입니다. 이벤트 루프는 호출 스택이 비어 있으면 태스크 큐에서 함수를 하나씩 가져와 호출 스택에 넣고 실행됨

이벤트 루프가 run 콜백을 태스크 큐에서 꺼내 호출 스택으로 올립니다. 호출스택으로 올련진 run은 실행되고 이 후 호출스택에서 비워집니다.
(이벤트 루프는 태스크 큐에 콜백 함수가 들어올 때까지 대기합니다)

0개의 댓글

관련 채용 정보