공식 홈페이지 설명
‘Node.js’는 크롬 ‘V8’ 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다.
빠른 자바스크립트 실행기다.
노드가 서버는 아니지만 서버의 역할을 수행할 수 있다.
노드는 서버가 아닌가요?
노드는 싱글스레드이면서 비동기인 모델이다.
V8 / libuv
1) 이벤트 기반
이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
2) 논블로킹 I/O
노드는 블로킹이면서 동기, 비동기이면서 논블로킹 거의 두가지만 쓰인다.
논블로킹 : 오래 걸리는 함수를 백그라운드로 보내서 다음코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 시행한다.
동기이면 코드가 순서대로 실행한다. 비동기이면 코드가 순서대로 실행되지 않는다.
동시에 실행되는지 안되는지는 나중에 따로 공부, 동시에 실행되는 경우는 거의 없다.
3) 프로세스 vs 스레드
프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유X
기본적으로 프로그램 하나 당 프로세스 하나가 뜬다.
스레드 : 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유
4) 싱글 스레드
싱글 스레드라 주어진 일을 하나밖에 처리하지 못함
5) 멀티 스레드 모델과의 비교
프로그래밍 난이도 쉽고, CPU, 메모리 자원 적게 사용
노드의 핵심은 싱글 스레드 하나를 어떻게 효율적으로 잘 관리하냐 이다.
노드는 멀티 스레드 활용이 메인이 되지 않는다.
1) 서버로서의 노드
서버 : 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
클라이언트 : 서버에 요청을 보내는 주체(브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버)
예시
브라우저가 길벗 웹사이트에 접속
핸드폰을 통해 앱스토어에서 앱 다운로드
노드 ≠ 서버
but, 노드는 서버를 구성할 수 있게 하는 모듈(4장에서 설명)을 제공
I/O : input, output
아까 노드가 빠르다고 했지만, 진짜 성능을 원한다면 더 빠른 게 많다.
2) 서버 외의 노드
자바 스크립트 런타임이기 때문에 용도가 서버에만 한정되지 않는다.
웹, 모바일, 데스크탑 애플리케이션에도 사용
웹 프레임워크 : Angular, React, Bue, Meteor
모바일 앱 프레임워크 : React Native
데스크탑 개발 도구 : Electron(Atom, Slack, VSCode, Discord 등)