1장. 노드에 대해

My_Code·2024년 1월 4일

Node.js 교과서

목록 보기
1/11
post-thumbnail

다음 내용은 인프런에서 공부한 내용을 복습하는 차원에서 기록한 것입니다.
출처 : https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-js-%EA%B5%90%EA%B3%BC%EC%84%9C


💻 1.1 노드의 정의

📌 노드의 정의

✏️ 공식 홈페이지의 설명

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

✏️ 노드는 서버가 아닌가요?

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

📌 런타임

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

  • 런타임: 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상 머신(크롬의 V8 엔진 사용)의 상태
  • 노드: 자바스크립트로 만든 프로그램들을 실행할 수 있게 해 줌
  • 다른 런타임으로는 웹 브라우저(크롬, 엣지, 사파리, 파이어폭스 등)가 있음

💻 1.2 노드의 특징

📌 이벤트 기반

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

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

📌 논블로킹 I/O

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

  • 사실은 아니지만 블로킹과 동기, 논블로킹과 비동기를 세트로 생각해도 됨
  • 동기: 코드가 순서대로 실행됨
  • 비동기: 코드가 순서대로 실행되지 않을 수 있음

📌 프로세스 vs 스레드

✏️ 프로세스와 스레드

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

✏️ 노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현

✏️ 노드는 주로 멀티 스레드 대신 멀티 프로세스 활용

✏️ 노드는 14버전부터 멀티 스레드 사용 가능


📌 싱글 스레드

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

  • 블로킹이 발생하는 경우 나머지 작업은 모두 대기해야 함 -> 비효율 발생

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

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

📌 멀티 스레드 모델과 비교

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

  • 프로그래밍 난이도 쉽고, CPU, 메모리 자원 적게 사용

✏️ 멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복

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

📌 멀티 스레드의 활용 (주력으로 사용x)

✏️ 노드 14버전

  • 멀티 스레드를 사용할 수 있도록 worker_threads 모듈 도입
  • CPU를 많이 사용하는 작업인 경우에 활용 가능
  • 멀티 프로세싱만 가능했던 아쉬움을 달래줌.

💻 1.3 노드의 역할

📌 서버로서의 노드

✏️ 서버: 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램

✏️ 클라이언트: 서버에 요청을 보내는 주체(브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버)

✏️ 예시

  • 브라우저(클라이언트, 요청)가 길벗 웹사이트(서버, 응답)에 접속
  • 핸드폰(클라이언트)을 통해 앱스토어(서버)에서 앱 다운로드

✏️ 노드 != 서버

✏️ But, 노드는 서버를 구성할 수 있게 하는 모듈을 제공

✏️ 노드 서버의 장단점

profile
조금씩 정리하자!!!

0개의 댓글