Node.js란?

  • Chrome V8 JS엔진으로 빌드 된 JS런타임
  • 이벤트 기반
  • 논 블로킹 I/O 모델
  • npm open source library

V8 Engine

V8엔진은 구글에서 만들고 브라우저가 없이도 작동 할 수 있도록 만든것인데 이를 가지고 Node.js를 만들었다고 한다.

Pasted image 20221223220540 Pasted image 20221223225303

왜? Node.JS

Node.JS 특성 Non-blocking / Single Thread / Event Loop

Non-blocking : 함수실행 중에도 다른작업을 진행 할 수 잇게 함

- 기존 Blocking I/O (Input/Output)은 작업을 마칠때 까지 대기하는 방식으로 그걸 없앰
- 함수실행중에도 다른 작업을 동시에 진행 가능
- db에서 통신 중 가지고 와야할때 기다리는것이 아니라 백그라운드에서 기다렸다가 오는것들은       
    업데이트방식으로 가능
- 비동기적(Async) 작업이 가능하다. #### 싱글 스레드 
- 스레드 하나를 가지고 하나만 처리가능 (스레드 생성부하 및 유지에 대한 부담이 적어 효율적)
- 일반적으로 1작업 1스레드 방식 (여러스레드를 쓰면 좋긴함)
- Race condition (경쟁상태 / 경쟁위험) 발생 안함
- 공유자원이 없으니 하나의 오류로 모든 스레드가 문제가 되는것을 방지
- 서버확장이 자유로움 #### 이벤트 루프
- js가 가지고 있는 싱글스레드의 약점을 극복하기 위한 효율적 특성
- V8 엔진 발고도 libuv 라는 비동기 I/O 라이브러리가 존재하여 자신만의 워커 스레드가 담긴
    스레드 풀을 사용한다 (환경변수를 설정해 최대 128개 까지)
- 자세한 건 해당 링크를 참조.
  [이벤트루프] [[https://www.korecmblog.com/node-js-event-loop/]]

REPL

REPL이란?

일반적으로 'REPL 환경'이라고 하면 
- Read(읽고) > Evaluate(평가) > Print(출력)후 
  특정 신호를 받기 전까지 위의 과정을 Loop(반복)하는 과정
  'R'ead, 'E'valuate, 'P'rint, 'L'oop
- 입력코드의 결과값을 즉시 확인할 수 있기 때문에 간단한 문법 테스트, 
    테스트 등으로 아주 적합한 개발환경으로 볼 수 있음
- Node.JS는 REPL 환경을 제공

REPL 환경 이용방법 - Terminal을 사용하면 이미 REPL을 사용하는거다.

REPL