1. Node.js 개요
1) Node.js
- 정의: 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임
- 특징: 이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적
*이벤트 기반: 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미
*논블로킹 I/O: 논블로킹이란 이전 작업이 완료될 때까지 멈추지 않고 다음 작업을 수행함을 뜻하며 현재 노드 프로세스 외의 다른 컴퓨팅 자원을 사용할 수 있는 I/O(입출력) 작업이 시간적 이득을 많이 얻음
2) 용어 정리
- 이벤트 루프: 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할 담당
- 태스크 큐: 이벤트 발생 후 호출되어야 할 콜백 함수들이 기다리는 공간
- 백그라운드: 타이머나 I/O 작업 콜백 도는 이벤트 리스너들이 대기하는 곳
- 프로세스: 운영체제에서 할당하는 작업의 단위로서 프로세스 간에는 메모리 등의 자원을 공유하지 않음
- 스레드: 프로세스 내에서 실행되는 흐름의 단위로서 부모 프로세스의 자원을 공유
3) 싱글 스레드
- 정의: 노드 프로세스는 하나의 스레드를 통해 작업을 수행
- 특징: 노드는 스레드를 늘리는 대신(멀티 스레드) 프로세스 자체를 복사해 여러 작업을 동시에 처리하는 멀티 프로세싱 방식을 채택
- 장점: 간편한 프로그래밍이 가능하며 Deadlock에 대한 우려가 없음
- 비고
*child_process.fork() API를 사용해서 프로세스 생성 가능
*내부적으로는 멀티 스레드를 사용하지만 개발자가 제어할 수 있는 스레드는 하나
4) 노드 서버의 장단점
- 노드 서버의 장단점은 싱글 스레드, 논블로킹 모델의 장단점과 크게 다르지 않음
*장점
- 자바스크립트 사용(JSON 형식과의 호환성 보장)
- 웹 서버가 내장되어 있어 입문자가 쉽게 접근 가능
- 멀티 스레드 방식에 비해 쉬운 프로그래밍 가능하며 자원을 적게 소모
- libuv 라이브러리를 사용하여 I/O 작업을 논블로킹 방식으로 처리해주기 때문에 I/O 작업이 많은 서버로 적합
*단점
- 싱글 스레드 방식으로 CPU 코어를 하나만 사용하며 스레드가 멈추면 서버 전체가 정지
- 비동기에 강점을 보이는 언어나 로드 밸런싱에 특화된 서버에 비해 느린 속도
- 서버 규모가 커졌을 때 관리가 어려움
- 미디어 데이터 처리 혹은 대규모 데이터 처리와 같이 CPU를 많이 사용하는 작업을 위한 서버로는 부적합
'프로그래밍 > Node.js' 카테고리의 다른 글
[Node.js] 테스트 프레임워크 및 부가 라이브러리 알아보기 (0) | 2019.07.06 |
---|---|
[Node.js] Nodemon이란? (0) | 2019.07.06 |
[Node.js] Forever 란? (0) | 2019.07.06 |
[Node.js 요약 정리] 3. Node 내장 객체와 내장 모듈 (0) | 2019.06.14 |
[Node.js 요약 정리] 2. Node.js를 위한 기본 자바 스크립트 (0) | 2019.02.10 |