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 |