

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

이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
이벤트 리스너 : 이벤트를 등록하는 함수콜백 함수 : 이벤트가 발생했을 때 실행될 함수
논 블로킹이 뭔데!!!
: 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래걸리는 함수를 실행

I/O 작업파일(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등의 일부 코드는 논 블로킹 방식 하에 백그라운드에서 병렬로 실행됨
I/O 작업이 많을 때 노드 활용성이 극대화 됨

- 노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현함
- 노드는 주로 멀티 스레드 대신 멀티 프로세스를 활용
(노드는 14버전부터 멀티 스레드 사용 가능)
싱글 스레드라 주어진 일을 하나 밖에 처리하지 못함
대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능하도록 함

싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈춤
멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복

| 멀티 스레딩 | 멀티 프로세싱 |
|---|---|
| 하나의 프로세스 안에서 여러개의 스레드 사용 | 여러개의 프로세스 사용 |
| CPU 작업이 많을 때 사용 | I/O 요청이 많을 때 사용 |
| 프로그래밍이 어려움 | 프로그래밍이 비교적 쉬움 |
노드 != 서버 , 노드는 서버를 구성할 수 있게 하는 모듈
| 장점 | 단점 |
|---|---|
| 멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용 | 싱글 스레드라서 CPU코어를 하나만 사용 |
| I/O 작업이 많은 서버로 적합 | CPU작업이 많은 서버로는 부적합 |
| 멀티 스레드 방식보다 쉬움 | 하나뿐인 스레드가 멈추지 않도록 관리해야함 |
| 웹 서버가 내장되어 있음 | 서버 규모다 커졌을 때 서버 관리가 어려움 |
| 자바 스크립트를 사용 | 어중간한 성능 |
| JSON 형식과 호환하기 쉬움 |
References
Node.js 교과서 - 조현영
https://nodejs.org/ko/
https://hanamon.kr/nodejs-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/