1.노드 시작하기

1.1 노드의 정의

Node란?

  • Node@js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임
  • 서버의 역할도 수행 가능한 자바스크립트 런타임(실행기)
  • V8과 libuv를 내부적으로 포함
    • V8: 오픈소스 자바스크립트 엔진 -> 속도 문제 개선
    • libuv: 노드 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현한 라이브러리
  • 싱글스레드이면서 비동기인 모델 -> 장점
  • 대부분 블로킹 이면서 동기 이거나 논블로킹 이면서 비동기

1.2 노드의 특징

1.이벤트 기반

  • 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
  • 이벤트 리스너에 콜백 함수를 등록 하면 이벤트가 발생 될 때 리스너에 의해 등록된 콜백 함수가 호출 됨

2.논블로킹 I/O

  • 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
  • 동기는 코드가 순서대로 실행되고 비동기는 코드가 순서대로 실행되지 않는다.

3.프로세스와 스레드

  • 프로세스란 운영체제에서 할당하는 작업의 단위, 프로세스간 자원 공유를 하지 않는다.
  • 스레드는 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스의 자원을 공유 한다.
  • 노드 프로세스는 멀티 스레드 이지만 직접다룰수 있는 스레드는 하나이기 때문에 싱글스레드라고 표현
  • 노드는 주로 멀티 프로세스를 활용
  • 14버전 부터 멀티 스레드 사용 가능

4.싱글 스레드

  • 주어진 일을 하나 밖에 처리하지 못함
    • 블로킹이 발생하는 경우 나머지 작업은 모두 대기 해야함.
  • 대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능
    • I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아짐

5.멀티 스레드와 비교

  • 싱글 스레드 모델은 에러를 처리하지 못하고 멈춤
  • 멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복

1.3 노드의 역할

1.서버로서의 노드

  • 노드 != 서버
  • 노드는 서버를 구성 할 수 있게 하는 모듈을 제공

3.서버 외의 노드

  • 자바스크립트 런타임 이기 때문에 용도가 서버에 한정 되지 않음
  • 웹, 모바일 테스크탑 APP에서도 사용
    • 웹: Angular, React, Vue 등
    • 모바일 앱: React Native
    • 데스크탑: Electron(Atom, Slack, Discord, Etc..)

가장 중요한 자바스크립트 3요소

  • 실행 컨텍스트
  • 이벤트 루프
  • 프로토 타입

출처

Comments