본문 바로가기

source-code

Node.js 교과서 - 노드 시작하기

https://thebook.io/080229/ch01/

 

Node.js 교과서 개정 2판: 1장 노드 시작하기

더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.

thebook.io

 

1. 핵심 개념 이해하기

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

  • 이 때 노드는 서버만 실행할 수 있는 것이 아님! (자바스크립트 프로그램을 실행하는 런타임으로서도 가능)

서버 vs 런타임

  • 서버
    • 네트워크를 통해 클라이언트(브라우저, 데스트톱 프로그램, 모바일 앱 ...)에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램.
    • 노드는 자바스크립트 프로그램이 서버로서 기능하기 위한 도구를 제공하므로, 서버 역할을 수행할 수 있다.
    • 다른 언어가 아닌, 굳이 노드를 사용해 서버를 만드는 이유?
  • 런타임
    • 특정 언어로 만든 프로그램들을 실행할 수 있는 환경.
    • 따라서 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있음. (노드 = JS 실행기)
    • 이전에는 브라우저가 JS 런타임을 내장 - JS 코드 실행 가능(그 이외 환경은 실행 속도 이슈 존재)
      → 구글의 V8 엔진(빠름, 오픈소스) 출시와 함께 노드 프로젝트 시작
      V8 엔진 + libuv라이브러리 - 이 때 해당 라이브러리는 노드의 특징인 이벤트 기반, 논 블로킹 I/O 모델을 구현

노드의 특징

  • 이벤트 기반
    • 이벤트 기반(event-driven)이란, 이벤트(클릭, 네트워크 요청 등)가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미.
    • 특정 이벤트 발생 시 동작할 작업 등록 = 이벤트 리스너(event listener)에 콜백(callback) 함수를 등록한다고 표현!
    • 발생한 이벤트가 없거나 발생했던 이벤트를 다 처리하면, 노드는 다음 이벤트가 발생할 때까지 대기.
    • 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지를 이벤트 루프(event loop)가 판단.
  • 논 블로킹 I/O
    • 기본적으로 JS 코드는 동시 실행 불가능. but JS상에서 돌아가는 것이 아닌, I/O 작업 같은 것은 동시에 처리 가능.
    • I/O = 입력(Input)/출력(Output) (ex 파일 시스템 접근(파일 읽기, 파일 쓰기, 폴더 만들기 등), 네트워크를 통한 요청 등)
      노드는 이러한 작업을 논 블로킹 방식(이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행)으로 처리하는 방법 제공.
  • 싱글 스레드
    • 스레드가 하나뿐이라는 것을 의미.
    • 노드를 실행 시 먼저 프로세스가 하나 생성 그 프로세스에서 스레드들을 생성하는데, 이 때 내부적으로 스레드를 여러 개 생성 그 중 우리가 직접 제어할 수 있는 스레드는 하나뿐! (따라서 흔히 싱글 스레드 가 얘기하는 것)

 

서버로서의 노드

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

 

서버 외의 노드

  • 대표적 노드 기반 웹 프레임워크 앵귤러(Angular), 리액트(React), 뷰(Vue)

 

'source-code' 카테고리의 다른 글

🔒 QAnaray Privacy Policy  (0) 2025.02.04
소소한 디버깅 사항 정리 2  (0) 2023.02.06
테스팅 트로피  (0) 2023.01.19
말하고자 하는 내용을 명확히 전달한다.  (0) 2023.01.10