[JavaScript] Node.js

wrld_worthy·2024년 1월 1일

JavaScript

목록 보기
15/21

Javascript

자바 스크립트는 기본적으로 VC(VsCode)를 설치하면 사용할 수 있다.

각 종 Extensions는 검색해보는게 하나하나 더 정확하고 좋을 것이다.

Node.js

Node.js의 정의는 공식 사이트에 정의되어 있다.

Node.js®는 오픈 소스, 크로스 플랫폼 자바스크립트 런타임 환경입니다.

말 그대로 JavaScript를 사용하면서 노드를 통해 다양한 JS 애플리케이션을 실행할 수

있도록 런타임을 제공하는 것이다.

Node.js의 기본적인 목적은 JavaScirpt의 단일 언어의 사용 목적을 확장하며, 브라우저만이 아닌 높은 성능의 서버 사이드 애플리케이션을 쉽게 구축하기 위함에 있다.

특징

  • Node.js는 JS를 브라우저만이 아닌 서버에서도 사용할 수 있도록 만들어진 런타임 프로그램이다.
  • Node.js는 V8 JS 엔진 위에서 동작한다.
  • 런타임이다.
  • Node.js는 웹 서버와 같이 확장성 있는 네트워크 프로그램을 제작하기 위해 만들어졌다.

Node.js는 V8 JavaScript 엔진을 사용하는데, 이 엔진은 구글 크롬 브라우저에서

사용되는 엔진이지만

브라우저 밖의 환경에서도 사용할 수 있도록하며

이 때문에 브라우저의 보안 제약 사항이 적용되지 않고 사용할 수 있다.

일반 적으로는 JavaScript로 파일을 읽거나 쓸 수 없는데,

그 이유는 JavaScript는 기본적으로 브라우저에서 구동되기 때문이다.

Node.js는 이러한 제한적인 환경을 브라우저 밖에서 런타임을 제공함으로써 언어의 범위를 확장시켜

컴퓨터 시스템에 접근이 가능하도록 하여 서버 사이드 애플리케이션을 쉽게 구축할 수 있다.

Node.js는 다양한 라이브러리를 제공하여 아파치 톰캣 등 별도의 처리 과정이 없이 웹서버 동작이 가능하다.(ex: HTTP)

이벤트 기반
Node.js는 이벤트 기반, 논 블록킹 I/O를 구현하고 있다.
미리 지정해둔 이벤트가 발생했을 시에 콜백함수를 사용하여 처리하고, 다음 이벤트가 발생할 때까지 대기한다.

이벤트 루프
이벤트 루프는 여러 이벤트가 동시에 발생했을 때, 어떤 순서로 콜백함수를 호출할지 이벤트 루프가 판단한다.

노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복한다.

논 블록킹 I/O
작업에는 동시에 실행될 수 있는 작업, 동시에 실행될 수 없는 작업 2가지가 있다.
예시로 파일 시스템에 접근, 네트워크를 통한 요청 작업은 I/O의 일종으로,
이러한 작업을 할 때에는 비동기 방식으로 Non-Blocking으로 처리한다.
비동기는 이전 작업이 완료될 때까지 대기하지 않고 동시에 작업을 수행하는 것.
동기는 이전 작업이 끝나야만 다음 작업을 수행할 수 있는 것이다.
함수 호출시 당장 실행하는 것이 아니라, 어느 곳에 쌓아서 요청을 동시에 처리하고 요청이 완료된 스택을 사용하여 순서대로 처리한다는 뜻이다.
( blocking, non-blocking, synchronous, asynchronous 의 관계가 좀 헷갈리는데 따로 포스팅 하겠다. )

싱글 스레드
위의 모든 것들과 관련이 되어있다. 바로 싱글 스레드이다.
Node.js는 싱글 스레드이기 때문에 위와 같은 처리가 필요한 것이다.

Node.js는 실글 스레드, 논 블로킹 모델로 싱글 스레드가 혼자서 모든 일들을 처리하지만 요청 순서가아닌 논 블로킹 방식으로 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행한다.

0개의 댓글