[Node.js] 노드의 정의와 특성

말하는 감자·2024년 1월 28일
0
post-thumbnail

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

섹션 0.개정3판 강좌 FAQ & 강의수강Tip & 1강

📌 노드의 정의

📍 공식 홈페이지의 설명

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

런타임 = 실행기
➡️ 노드는 자바스크립트를 실행하는 것

크롬 V8 자바스크립트 엔진이 안에 들어있음 ➡️ html과 브라우저의 종속성에서 벗어나게 됨.
브라우저가 없어도 html이 아니여도 javascript를 실행할 수 있게 됨.

📍 노드는 서버?

노드는 서버가 아님.
하지만 자바스크립트로 서버를 수행하는 코드를 넣으면 실행하여 서버를 만들 수 있음.

typescript 런타임은 Deno(node.js와 동일한 개발자가 만듬).

📍 내부 구조

C나 C++로 구성되어있음.
C와 C++은 빠르지만 생산성이 안좋아서 Java, JavaScript등 새로운 언어를 만듬.
싱글스레드이면서 비동기인 모델.

📌 노드의 특성

📍 이벤트 기반

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

  • 이벤트 리스너 : 이벤트를 등록하는 함수
  • 콜백 함수 : 이벤트가 발생했을 때 실행될 함수
  1. 시스템에서 이벤트 발생
  2. 이벤트 리스너에 콜백 함수 등록
  3. 등록된 콜백 함수를 호출하여 시스템에 전달

📍 논블로킹 I/O

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

동시에 한다X
노드는 블로킹이면서 동기, 비동기면서 논블로킹만 존재.
비동기에서 논블로킹은 프로그램이 동시에 실행된다? ➡️ ❌ 노드에서 동시라는 걸 구현하기는 매우 힘들다. 사실상 일부를 제외하고는 없다.

블로킹이면 소스가 순서대로 실행된다.
논블로킹이면 소스가 순서대로 실행되지 않을 수도 있다.
(무조건 랜덤X, 규칙 존재 ➡️ 실행 컨텍스트, 이벤트 루프 배울 때 나옴)

📍 프로세스 vs 스레드

✏️ 프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유X
✏️ 스레드 : 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유

노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현.
노드는 주로 멀티 스레드 대신 멀티 프로세스 활용.
14버전 부터는 멀티 스레드 사용 가능 but 멀티 스레드를 만들기는 매우 어렵다...
싱글 스레드로 한가지 일을 한번에 하는 게 빠르고 좋았으나 못하는 거와 안하는 거는 다르기 때문에 가능성은 열어둠...

📍 싱글 스레드

싱글 스레드라 주어진 일을 하나밖에 처리 못함
➡️ 블로킹이 발생하는 경우 나머지 작업은 모두 대기해야 함 ➡️ 비효율 발생

  • 싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈춤
    ➡️ 프로그래밍 난이도 쉽고, CPU, 메모리 자원 적게 사용
  • 멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복
    ➡️ 단, 새로운 스레드 생성이나 놀고 있는 스레드 처리에 비용 발생
    ➡️ 프로그램 난이도 어려움
    ➡️ 스레드 수 만큼 자원 사용

대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능

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

📌 서버로서의 노드

📍 노드 서버의 장단점

JSON은 자바스크립트로 만든 언어 ➡️ 다른 언어로 변환할 필요가 없음

개발자 중 웹개발자 가장 많음 ➡️ 자바스크립트 개발자가 많음 ➡️ 자바스크립트가 사라지기 어려움 ➡️ 자바스크립트를 이용하는 Node.js도 안전하다. (유일한 라이벌 deno...?)


📑 출처

  • [개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지 (인프런/조현영)
profile
나는 말하는 감자다

0개의 댓글