JS V8 Engine & Node.js

Yeeeeeun_IT·2022년 8월 26일
0

Javascript

자바스크립트는 객체(object) 기반의 스크립트 프로그래밍 언어이다.
HTML로 웹의 내용을 작성하고, CSS로 웹의 시각적인 부분을 디자인하며, 자바스크립트로는 웹의 기능 동작을 구현한다.

자바스크립트는 크로스 플랫폼을 위한 가장 중요한 언어로 부상하였다.
웹, 모바일, 하이브리드앱, 서버사이드, 데스크톱, 머신러닝, 로보틱스 환경을 위한, 세계에서 가장 인기있는 프로그래밍 언어이다.

자바스크립트는 HTML, CSS와 함께 웹을 구성하는 요소 중 하나로 웹브라우저에서 동작하는 유일한 프로그래밍 언어이다. 자바크스립트는 개발자가 별도의 컴파일 작업을 수행하지 않는 인터프리터 언어이다.
(인터프리터 언어: 인터프린트 단계와 실행단계가 분리되어 있지 않고 한줄씩 변환하여 즉시 실행되기 때문에 코드 실행속도가 비교적 느리다.)
자바스크립트는 명령형, 함수형, 프로토타입 기반, 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어이다.

Node.js

2009년에 발표된 Node.js는 구글 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 환경이다. Node.js는 브라우저의 자바스크립트 엔진에서만 동작하던 자바스크립트를 브라우저 이외의 환경에서도 동작할 수 있도록 자바스크립트 엔진을 브라우저에서 독립시킨 자바스크립트 실행 환경이다. Node.js는 다양한 플랫폼에 적용할 수 있지만 서버사이드 애플리케이션 개발에 주로 사용되며, 이에 필요한 모듈, 파일, 시스템, HTTP 등 빌트인 API를 제공한다.

Node.js 는 비동기 I/O를 지원하며 단일스레드(single thread) 이벤트루프 기반으로 동작함으로써 요청처리 성능이 좋다.
Node.js 는 데이터를 실시간으로 처리하기위해 I/O가 빈번하게 발생하는 SPA(Single Page Application)에 적합하다.
Node.js 의 등장으로 자바스크립트는 브라우저를 벗어나 서버사이드 애플리케이션 개발에서도 사용할 수 있는 범용 프로그래밍 언어가 되었다.

이벤트 루프 (Event Loop)

자바스크립트의 싱글스레드 방식은 한번에 하나의 태스크만 처리할 수 있는 것을 의미한다. 하지만 브라우저는 많은 태스크가 동시에 처리되는 것처럼 보인다.
이렇게 자바스크립트의 동시성을 지원하는 것이 이벤트 루프이다.

이벤트 루프는 콜 스택에 현재 실행중인 실행 컨텍스트가 있는지, 태스크 큐에 대기중인 함수가 있는지 반복해서 확인한다. 만약 콜스택이 비어있고 태스크 큐에 대기중인 함수가 있다면, 이벤트 루프는 순차적으로 태스크 큐에 대기중인 함수를 콜스택으로 이동시킨다. 이때 콜 스택으로 이동한 함수는 실행된다. 태스크 큐에 일시 보관된 함수들은 비동기 처리 방식으로 동작한다.

자바스크립트 엔진은 단하나의 콜스택을 사용하기 때문에 최상위의 실행 컨택스트가 종료되어 콜스택에서 제거되지 않으면 다른 태스크를 실행할 수 없다. 실행중인 실행 컨택스트를 제외한 모든 실행 컨텍스트는 실행 대기중인 태스크에 들어간다.

동기 처리 방식은 태스크를 순서대로 하나씩 처리하므로 실행순서가 보장되지만,
앞의 태스크가 종료되기 전까지 다음 태스크들은 블로킹(작업중단)된다.

JS V8 Engine

구글 맵스를 통해 웹 애플리케이션 프로그래밍 언어로서의 가능성이 확인된 자바스크립트로 웹 애플리케이션을 구축하려는 시도가 늘면서 더욱 빠르게 동작하는 자바스크립트 엔진의 필요성이 대두되었다.
2008년 등장한 v8 자바스크립트 엔진은 이러한 요구에 부합하는 빠른 성능을 보여주었다. V8 자바스크립트 엔진의 등장으로 자바스크립트는 데스크톱 애플리케이션과 유사한 사용자 경험(UX: user experience)을 제공할 수 있는 웹 애플리케이션 프로그래밍 언어로 정착하게 되었다.
V8 자바스크립트 엔진으로인해 더욱 발전한 자바스크립트와 더불어,
과거 웹서버에서 수행되는 많은 로직들이 브라우저(클라이언트)로 이동하였고 이는 웹애플리케이션 개발에서 프론트엔드 영역을 더욱 주목받게 했다.


출처 : <모던 자바스크립트 Deep Dive>

profile
🍎 The journey is the reward.

0개의 댓글