[1] 노드 시작하기

김지원·2021년 3월 3일
0

Node

목록 보기
1/2

1.1 노드의 정의

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

노드는 서버가 아닌가요?

  • 서버의 역할도 수행할 수 있는 자바스크립트 런타임 입니다!
  • 노드로 자바스크립트로 작성된 서버를 실행 할 수 있습니다.
  • 서버 실행을 위해 필요한 http/https/http2 모듈을 제공합니다.

런타임: 실행기
Deno: TS 런타임

노드: 자바스크립트 런타임

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

  • 따라서 노드는 자바스크립트로 만든 프로그램들을 실행할 수 있게 해줍니다.

  • 다른 런타임으로는 웹 브라우저(크롬, 엣지,사파리, 파이어폭스 등)가 있습니다.

  • 노드 이전에도 자바스크립트 런타임을 만들기 위해 많은 시도를 했지만 엔진 속도 문제로 실패했습니다.

1.2 노드의 특징

1. 이벤트 기반
: 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식입니다.

 ◽ 이벤트의 예: 클릭, 네트워크 요청, 타이머 등
 ◽ 이벤트 리스너: 이벤트를 등록하는 함수
 ◽ 콜백 함수: 이벤트가 발생했을 때 실행될 함수
 

2. 논블로킹 I/O
: 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행시키는 것 입니다.

  • 논 블로킹 방식 하에서 일부 코드는 백그라운드에서 병렬로 실행됩니다.
  • 일부 코드는 I/O 작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등 을 실행하고
  • 나머지 코드는 블로킹 방식으로 실행됩니다.
  • 따라서 I/O 작업이 많을 때 노드 활용성이 극대화 됩니다.

3. 프로세스 vs 스레드

  • 프로세스와 스레드

    • 프로세스: 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유 x
    • 스레드: 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유
  • 노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현 합니다.

  • 노드는 주로 멀티 스레드 대신 멀티 프로세스를 활용합니다.

  • 노드는 14버전부터 멀티 스레드가 사용 가능합니다.

4. 싱글 스레드

  • 싱글 스레드라 주어진 일을 하나밖에 처리하지 못합니다.

    • 블로킹이 발생하는 경우 나머지 작업은 모두 대기해야합니다. -> 비효율 발생
  • 대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능하게 합니다.

    • 요청을 먼저 받고, 완료될 때 응답합니다.

    • I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아집니다.

5. 멀티 스레드 모델과의 비교

  • 싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈추게 됩니다.
    • 프로그래밍 난이도 쉽고, CPU, 메모리 자원 적게 사용합니다.
  • 멀티 스레드 모델은 에러 발생 시 새로우 ㄴ스레드를 생성하여 극복합니다.
    • 단, 새로운 스레드 생성이나 놀고 있는 스레드 처리에 비용이 발생하게 됩니다.
    • 프로그래밍 난이도가 어려워집니다.
    • 스레드 수만큼 자원을 많이 사용합니다.

6. 멀티 스레드의 활용
노드 14 버전

  • 멀티 스레드를 사용할 수 있도록 worker_threads 모듈 도입했습니다.
  • CPU를 많이 사용하는 직업인 경우에 활용 가능합니다.
  • 멀티 프로세싱(*ex)체인점 내는 것)만 가능했던 아쉬움을 달래줍니다.
멀티 스레딩멀티 프로세싱
하나의 프로세스 안에서 여러 개의 스레드 사용여러 개의 프로세스 사용
CPU 작업이 많을 때 사용I/O 요청이 많을 때 사용
프로그래밍이 어려움프로그래밍이 비교적 쉬움

1.3 서버로서의 노드

  • 서버: 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램입니다.
  • 크라이언트: 서버에 요청을 보내는 주체(브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내느 서버)입니다.
  • 예) 브라우저(클라이언트, 요청)가 길벗 웺 사이트(서버, 응답)에 접속합니다.
  • 노드 != 서버
  • 그러나 노드는 서버를 구성할 수 있게 하는 모듈을 제공합니다.

  • 노드 서버의 장단점
장점단점
멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함싱글 스레드라서 CPU 코어를 하나만 사용함
I/O 작업이 많은 서버로 적합CPU 작업이 많은 서버로는 부적합
멀티 스레드 방식보다 쉬움하나뿐인 스레드가 멈추지 않도록 관리해야 함
웹 서버가 내장되어 있음서버 규모가 커졌을 때 서버를 관리하기 어려움
자바스크립트를 사용함어중간한 성능
JSON형식과 호환하기 쉬움
  • CPU 작업을 위해 AWS Lambda나 Google Cloud Functions 같은 별도 서비스 사용합니다.
  • 페이팔, 넷플릭스, 나사, 월마트, 링크드인, 우버 등에서 메인 또는 서브 서버로 사용합니다.

  • 자바스크립트 런타임이기 때문에 용도가 서버에만 한정되지 않습니다.
  • 웹, 모바일, 데스크탑 애플리케이션에도 사용됩니다.
    • 웹 프레임워크: Anugular, React, Vue, Meteor 등
    • 모바일 앱 프레임워크: React Native
    • 데스크탑 개발 도구: Electron(Atom, Slack, VSCode, DisCord등 제작)
  • 위 프레임워크가 노드 기반으로 동작합니다.

0개의 댓글