Node.js - basic info

ryan·2022년 4월 30일
0

노드의 정의

  • Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임.
  • 서버의 역할도 수행할 수 있는 자바스크립트 런타임
    • 런타임 : 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상 머신의 상태 (다른 런타임으로는 웹 브라우저(크롬,엣지, 사파리 등)가 있음)
  • 노드는 자바스크립트로 작성된 서버와 프로그램을 실행시킬 수 있음
  • 서버 실행을 위해 필요한 http/https/http2 모듈을 제공

노드의 특징

1. 이벤트 기반

  • 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식

2. 논블로킹 I/0

  • 논 블로킹 : 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행하는 것
  • 논 블로킹 방식 하에서 일부 코드는 백그라운드에서 병렬로 실행되며 나머지 코드는 블로킹 방식으로 실행
    • 일부 코드 : I/O 작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화
    • 블로킹은 동기, 논블로킹은 비동기

3. 프로세스 / 스레드

  • 노드 프로세스는 엄밀히 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나 이므로 싱글 스레드라고 표현.
  • 노드는 주로 멀티 스레드 대신 멀티 프로세스 활용
    • 싱글 스레드의 장점 : 프로그래밍이 비교적 쉽다. CPU, 메모리 자원을 적게 사용.
    • 싱글 스레드의 단점 : 블로킹이 발생할 경우, 다른 작업은 대기해야 함. 에러 처리하지 못하는 경우 멈춤. 비효율 발생
    • 멀티 스레드 장점 : 에러 발생 시 새로운 스레드를 생성하여 극복
    • 멀티 스레드 단점 : 많은 스레드만큼의 비용 발생, 프로그래밍 난이도 높음, 컴퓨터 자원 많이 소모.
    • 프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유 X
    • 스레드 : 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유

4. 서버로서의 노드

  • 서버 : 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
  • 클라이언트 : 서버에 요청을 보내는 주체(브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버)
    • 노드는 서버가 아니지만 노드는 서버를 구성할 수 있게 하는 모듈을 제공한다.
  • 노드 서버의 장단점
    • 장점 :
      • 멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함
      • I/O(input/output) 작업이 많은 서버로 적합
      • 멀티 스레드 방식보다 쉬움
      • 웹 서버가 내장되어 있음
      • 자바스크립트를 사용함
      • JSON 형식과 효환하기 쉬움
    • 단점 :
      • 싱글 스레드라서 CPU 코어를 하나만 사용
      • CPU 작업이 많은 서버로는 부적합 ; CPU 작업을 위해 AWS Lambda나 Google Cloud Functions같은 별도 서비스 사용
      • 하나뿐인 스레드가 멈추지 않도록 관리해야 함
      • 서버 규모가 커졌을 때 서버를 관리하기 어려움

5. 서버 외의 노드

  • 웹, 모바일, 데스크탑 애플리케이션에도 사용 :
    - 웹 프레임워크 : Angular, React, Vue, Meteor
    - 모바일 앱 프레임워크 : React Native
    - 데스크탑 개발 도구 : Electron(Atom,Slack,VSCode,Discord 등 제작)
profile
프론트엔드 개발자

0개의 댓글