sanguk.dev
작성완료
NodeJS 기초

NodeJS 기초

NodeJS는 Chrome V8 JavaScript 엔진으로 구축된 JavaScript 런타임으로, 브라우저 외에서도 JavaScript를 실행할 수 있게 해줍니다. 주요 특성으로는 이벤트 기반 처리, 논 블로킹 I/O, 그리고 싱글 스레드 구조가 있으며, 이는 I/O 요청이 많은 서버 운영에 적합하지만 CPU 부하가 큰 작업에는 부적합합니다.

NodeJS

NodeJS란?

NodeJS의 정의에 대한 질문을 하면 서버라고 답하는 사람들이 종종 있다 하지만 엄밀히 말하면 Node js는 JavaScript 런타임이고 공식 문서에서는 아래와 같이 정의하고 있다

NodeJS는 Chorome V8 JavaScript 엔진으로 빌드 된 JavaScript 런타임

런타임이란 특정 언어로 만든 프로그램을 실행할 수 있는 환경을 뜻하며 노드를 통해 다양한 자바스크립트 어플리케이션을 실행할 수 있다는 것을 의미한다
JavaScript는 말 그대로 스크립트 언어이므로 브라우저에서만 실행이 가능했었다. 하지만 이런 자바스크립트를 브라우저에서 해방시켜 브라우저 외에서도 실행 가능하게 만든 것이 Node js이다

즉 한가지 언어로 전체 웹 페이지를 만들 수 있게 된 것은 매우 혁신적이었다


NodeJS의 특성

이벤트 기반

이벤트 기반이란 이벤트가 발생했을 때 미리 지정해둔 작업을 수행하는 방식으로 이벤트가 발생하면 리스너에 등록해둔 콜백함수를 호출하며 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기한다

논 블로킹 I/O

파일 시스템 접근, 네트워크를 통한 요청 작업은 Input / Output의 일종이며 노드는 이런 작업들을 비동기 방식으로 블로킹을 만들지 않게 끔 처리한다

싱글 스레드

노드는 스레드가 여러 개지만 직접 다룰 수 있는 스레드는 하나이기에 싱글 스레드라고 표현한다. 노드는 싱글 스레드로 혼자서 일을 처리하지만 논 블로킹 방식으로 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행한다

노드는 기본적으로 싱글 스레드, 논블로킹을 지원하므로 I/O 요청이 많이 발생하면 노드를 서버로 사용하는 것이 좋지만 노드는 CPU 부하가 큰 작업에는 적합하지 않다.