My Boundary As Much As I Experienced

ZeroCho-Node) Node.js란? 본문

BackEnd/Node.js

ZeroCho-Node) Node.js란?

Bumang 2024. 3. 8. 05:28

노드란?

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

  • 서버의 역할도 수행할 수 있는 자바스크립트 런타임
  • 노드로 자바스크립트로 작성된 서버를 실행할 수 있음.
  • 서버 실행을 위해 필요한 http/https/http2 모듈을 제공
  • 런타임: 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상 머신
  •  

노드의 특성

  1. 이벤트 기반
    1. 대부분의 프로그램은 이벤트 기반이다. (클릭, 네트워크 요청, 타이머 등)
      1. 주소를 치는 것도 이벤트이다. (get)
    2. 이벤트 리스너: 이벤트를 등록하는 함수
    3. 콜백 함수: 이벤트가 발생했을 대 실행될 함수

  1. 논블로킹 I/O
    1. 논블로킹: 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
    2. 대충 논블로킹을 비동기, 블로킹을 동기로 봐도 괜찮다.
    3. 일부 코드: I/O 작업 (파일 시스템 접근, 네트워크 요청), 압축, 암호화 등
    4. 나머지 코드는 블로킹 방식으로 실행됨
  2. 싱글 스레드
    1. 프로세스와 스레드
      1. 프로세스: 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유x
      2. 스레드: 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유
    2. 노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현
    3. 노드는 주로 멀티 스레드 대신 멀티 프로세스 활용
    4. 노드는 14버전부터 멀티 스레드 사용 가능(아직 많이 사용 안 함)
    5. 싱글스레드가 멀티스레드보다 코딩하고 이해하기 쉬워서 사용. 그러나 비효율 발생.

서버로서의 노드

  1. 서버: 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
  2. 클라이언트: 서버에 요청을 보내는 주체(브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버)
  3. 예시
    1. 브라우저(클라이언트, 요청)가 웹사이트(서버, 응답)에 접속
  4. 노드 서버의 장단점:
    1. 장점:
      1. 멀티스레드 방식에 비해 컴퓨터 자원을 적게 사용함
      2. I/O 작업이 많은 서버로 적합
      3. 멀티 스레드 방식보다 쉬움
      4. 웹 서버가 내장되어 있음
      5. 자바스크립트를 사용함
      6. json 형식과 호환하기 쉬움
    2. 단점:
      1. 싱글 스레드라서 cpu 코어를 하나만 사용함
      2. cpu 작업이 많은 서버로는 부적합
      3. 하나뿐인 스레드가 멈추지 않도록 관리해야 함
      4. 서버 규모가 커졌을 때 서버를 관리하기 어려움 (대부분의 서버가 그렇긴 함)
      5. 어중간한 성능

CPU 작업을 위해 AWS Lambda나 Google Cloud Functions같은 별도 서비스 사용

페이팔, 넷플릭스, 나사, 월마트, 링크드인, 우버 등에서 메인 또는 서브 서버로 사용