노드의 정의
노드란 무엇인가!
흔히들 노드를 서버라고 하는데 서버가 아니다!
공식 홈페이지에서는 V8 자바스크립트 엔진으로 빌드된 자바스크립트 '런타임' 이다.
(런타임 : 쉽게 말하면 '실행기')
자바스크립트 파일을 만들고, 파일명 앞에 노드를 붙여주면 'V8 자바스크립트 엔진'이 파일을 해석해서 실행시켜준다.
이로써, 브라우저가 없어도 html에 종속되어있지 않아도 실행하게 된것이다!!
어? 사람들이 서버 공부할때 NodeJs 한다는데!? 서버가 아니라고요?
서버의 역할도 수행할 수 있는 자바스크립트 런타임
노드(node)로 자바스크립트로 작성된 서버를 실행할 수 있다!
노드의 특징
1. 이벤트 기반 (왠만한 언어들이 다 이렇다)
이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
- 이벤트의 예 : 클릭, 네트워크 요청, 타이머 등
- 이벤트 리스너 : 이벤트를 등록하는 함수
- 콜백 함수 : 이벤트가 발생했을때 실행될 함수

2. 논 블로킹 I/O
논 블로킹 : 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
- 논 블로킹 방식 하에서 일부 코드는 백그라운드에서 병렬로 실행됨
- 일부 코드 : I/O 작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등
- 나머지 코드는 블로킹 방식으로 실행됨
- I/O 작업이 많을 때 노드의 활용성이 극대화
노드는 대부분은 블로킹이면서 동기, 비동기면서 논 블로킹
3. 프로세스 vs 스레드
프로그램 하나 띄울때마다 프로세스 하나만 뜬다! (모두는 아니지만 기본적으로!)
- 노드 프로세스는 멀티 스레드이지만, 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 '표현'
- 노드 14버전 부터는 멀티 스레드 사용 가능! (멀티 스레드는 코드가 너무 어렵다고한다...)
(노드에서의 주력은 싱글 스레드이다. 그래도 있어야하지않냐~ 해서 만든 느낌...)
4. 싱글 스레드
싱글 스레드라 주어진 일을 하나밖에 처리하지 못한다.
- 블로킹이 발생하는 경우 나머지 작업은 일시정지
대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능
- 요청을 먼저 받고, 완료될 때 응답
- I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아짐
5. 멀티 스레드 모델과의 비교
싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈춘다.
- 프로그래밍 난이도가 쉽고, CPU,메모리 자원을 적게 사용한다.
멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복한다.
- 단, 새로운 스레드 생성이나 놀고있는 스레드 처리에 비용 발생
- 프로그래밍 난이도가 매우 어려움
- 스레드 수만큼 자원을 많이 사용
'Node.js' 카테고리의 다른 글
| [Node.js] Promise , async/await 함수 (0) | 2023.11.08 |
|---|---|
| [Node.js] Node 버전 변경하기 (0) | 2023.11.06 |
| [Node.js]노드(Node.js)의 역할 (0) | 2023.11.06 |