[Server Study] Node.js (노드) 의 특징, 노드 서버

Seohyun-kim·2022년 5월 8일
0
post-thumbnail

Node.js ?

Node.js®는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.


노드는 서버가 아닌건가?

  • 서버의 역할도 수행할 수 있는 자바스크립트 런타임
  • 노드로 자바스크립트로 작성된 서버를 실행할 수 있음
  • 서버 실행을 위해 필요한 HTTP/HTTPS/HTTP2 모듈을 제공함

런타임(Runtime) 이 뭔데!!

  • 컴퓨터 프로그래밍 언어가 구동되는 환경을 의미
  • 자바스크립트 런타임 : 자바스크립트가 구동되는 환경
  • 자바스크립트 런타임의 종류
    - 크롬, 엣지, 사파리, 파이어폭스 등
  • 노드 이전에도 자바스크립트 런타임을 만들기 위한 많은 시도가 있었으나 엔진속도 문제로 실패했었음 ㅠ

노드의 내부 구조

  • V8 엔진 : 오픈소스 자바스크립트 엔진으로 속도문제를 개선함
  • libuv : 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현한 라이브러리

Node.js의 특성

1. 이벤트 기반

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

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


2. 논 블로킹(Non-Blocking) I/O

  • 논 블로킹이 뭔데!!!
    : 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래걸리는 함수를 실행

  • I/O 작업파일(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등의 일부 코드는 논 블로킹 방식 하에 백그라운드에서 병렬로 실행됨

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


3. 프로세스(Process) vs 스레드(Thread)

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

4. 싱글 스레드(Single Thread)

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

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

    • 요청을 먼저 받고, 완료될 때 응답함
    • I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아짐


5. 멀티(multi) 스레드 vs 싱글(Single) 스레드

  • 싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈춤

    • 프로그래밍 난이도가 쉽고, CPU와 메모리 자원을 적게 사용함
  • 멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복

    • 단, 새로운 스레드 생성이나 놀고있는 스레드 처리에 비용 발생
    • 프로그래밍 난이도 어려움
    • 스레드 수만큼 자원을 많이 사용

6. 멀티 스레드의 활용

  • 노드 14버전에서 멀티 스레드를 사용할 수 있도록 worker_threads 모듈 도입
  • CPU 를 많이 사용하는 작업인 경우에 활용 가능
  • 멀티 프로세싱만 가능했던 아쉬움을 달래줌
멀티 스레딩멀티 프로세싱
하나의 프로세스 안에서 여러개의 스레드 사용여러개의 프로세스 사용
CPU 작업이 많을 때 사용I/O 요청이 많을 때 사용
프로그래밍이 어려움프로그래밍이 비교적 쉬움

서버로서의 노드

노드 != 서버 , 노드는 서버를 구성할 수 있게 하는 모듈

노드 서버의 장단점

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


References
Node.js 교과서 - 조현영
https://nodejs.org/ko/
https://hanamon.kr/nodejs-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/

0개의 댓글