IT/Node.js

노드란 무엇인가 & 특성

린지:) 2022. 9. 12. 23:48

Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 입니다.

브라우저, HTML의 종속성을 벗어나서 Javascript를 실행할 수 있습니다.

- 런타임: 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상머신(크롬의 V8 엔진사용)의 상태

- 노드: 자바스크립트로 만든 프로그램들을 실행할 수 있게 해줌

- 다른 런타임으로는 웹 브라우저(크롬,엣지..등)가 있음

- 노드 이전에도 자바스크립트 런타임을 만들기 위한 시도가 있었으나 엔진 속도 문제로 실패함

 

노드는 서버인가? No!

- 서버의 역할도 수행할 수 있는 자바스크립트 런타임

- 노드로 자바스크립트로 작성된 서버를 실행할 수 있음

- 서버 실행을 위해 필요한 http/https/http2 모듈을 제공

 

노드의 특성

싱글Thread이면서 비동기 모델 → 엄청난 장점이라 인기가 상승함!

 

- 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식 (대부분의 프로그래밍 특성..)

1) 이벤트 리스너에 콜백 함수 등록

2) 이벤트 발생

3) 등록된 콜백 함수 호출

 

- 논블로킹 I/O

오래걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행

대체로 동기이멘서 블로킹, 비동기이면서 논블로킹

비동기이면서 논블로킹일때 동시에 돌아간다고 오해하는데, 노드에서 동시에 돌아가게 하는 것은 힘듦

ㄴ 논 블로킹 방식 하에서 일부 코드는 백그라운드에서 병렬로 실행

ㄴ 일부 코드: I/O작업, 압축, 암호화 등

ㄴ 나머지 코드는 블로킹 방식으로 실행됨

ㄴ I/O작업이 많을 때 노드 활용성이 극대화

 

- 프로세스와 스레드

ㄴ 프로세스: 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원공유 X

ㄴ 스레드: 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유

 

노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현

노드는 주로 멀티 스레드 대신 멀티 프로세스 활용

노드 14버전부터 멀티 스레드 사용 가능

 

서버로서의 노드

서버: 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램

클라이언트: 서버에 요청을 보내는 주체(브러우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버)

 

노드 != 서버

But, 노드는 서버를 구성할 수 있게 하는 모듈을 제공함

 

노드서버의 장단점

장점 단점
멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함 싱글 스레드라서 CPU 코어를 하나만 사용함
I/O 작업이 많은 서버로 적합 CPU 작업이 많은 서버로는 부적합
멀티 스레드 방식보다 쉬움 하나뿐인 스레드가 멈추지 않도록 관리해야함
웹 서버가 내장되어 있음 서버 규모가 커졌을 때 서버를 관리하기 어려움
자바스크립트를 사용함 어중간한 성능
JSON 형식과 호환하기 쉬움  

 

서버 외의 로드

자바스크립트 런타임이기 때문에 용도가 서버에만 한정되지 않음

웹, 모바일 데스크탑 어플리케이션에서도 사용