1장 노드 시작하기 🚀
1.1 핵심 개념 이해하기
Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임.
1.1.1 서버
서버란 : 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램.
노드는 서버인가🤔
노드는 자바스크립트 프로그램이 서버로서 기능하기 위한 도구를 제공하므로 서버 역할을 수행할 수 있다.
1.1.2 자바스크립트 런타임
런타임
특정 언어로 만든 프로그램들을 실행할 수 있는 환경. = 노드는 자바스크립트 실행기
1.1.3. 이벤트 기반
이벤트 기반(event-driven) : 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식.
이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해야 한다. ⇒ 이벤트 리스너에 콜백 함수를 등록한다.
이벤트 루프 : 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지를 판단.
일반적인 동기 자스 실행 순서
0. 전역 컨텍스트인 anonymox가 콜 스택에 들어간다.
1. 함수를 발견하면 전역 컨텍스트 위로 콜 스택에 쌓는다.
2. 호출된 순서와 반대로 실행이 완료된다.
궁금한 거 : 컨텍스트는 함수가 호출되었을 때 생성되는 환경이라고 했고, 자스 코드는 실행 시 기본적으로 전역 컨텍스트 안에서 돌아간다고 했는데...음 잘 개념이 안잡힌다.
비동기
- 이벤트 루프 : 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할을 담당. 노드가 종료될 때까지 작업을 반복하므로 loop.
- 백그라운드 :
setTimeout
같은 타이머나, 이벤트 리스너들이 대기하는 곳. 자스가 아닌 다른 언어로 작성된 프로그램. - 태스크 큐 : 이벤트 발생 후, 백그라운드에서는 태스크 큐로 타이머나 이벤트 리스너의 콜백 함수를 보낸다. (=콜백 큐)
- 정리 : 콜 스택에서 이벤트 리스너가 실행되면 이벤트와 콜백을 백그라운드로 보내고, 이벤트가 끝나면 콜백은 콜백 큐로 들어간다. 그리고 콜 스택이 비어 있으면 이벤트 루프는 콜백 큐에서 콜백 함수를 하나씩 가져와 콜 스택에 넣고 실행한다.
- 콜 스택에 함수들이 너무 많이 들어 있으면
setTimeout
의 경우 정확한 시간에 맞춰 나오지 않을 수 있다.
1.1.4. 논 블로킹 I/O
이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것.
I/O : input & output. 파일 시스템 접근(파일 읽기, 파일 쓰기, 폴더 만들기 등)이나 네트워크를 통한 요청 등.
자바스크립트 코드는 기본적으로 동시에 실행될 수 없으나, 자바스크립트 상에서 돌아가는 것이 아닌 I/O 작업 같은 것은 동시에 처리 가능하다.
setTimeout(콜백, 0)
자주 사용하는 논 블로킹 기법.
1.1.5 싱글 스레드
스레드가 하나뿐이라는 것을 의미. 다만 노드는 스레드는 여러 개인데 제어할 수 있는 건 하나 뿐이라 그렇게 여겨짐.
프로세스와 스레드
- 프로세스 : 운영체제에서 할당하는 작업의 단위. 노드나 웹 브라우저 등. 프로세스 간에는 메모리 등의 자원을 공유하지 않음.
- 스레드 : 프로세스 내에서 실행되는 흐름의 단위. 프로세스는 스레드를 여러 개 생성해 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다.
1.2 서버로서의 노드
노드는 I/O 요청을 논 블로킹 방식으로 처리하므로 많은 수의 I/O 요청이 들어오는 서버 작업에 적합하다.
다만 싱글 스레드이므로 CPU 부하가 큰 작업(대규모 데이터 처리 등)에는 적합하지 않다.
so, 개수는 많지만 크기는 작은 데이터를 주고받는 데 적합하다.
주의할 점 : 스레드가 하나뿐이라 에러로 멈추지 않도록 잘 관리해야 한다.
장점
- 멀티 스레드 방식에 비해 적은 컴퓨터 자원 사용
- I/O 작업이 많은 서버로 적합
- 멀티 스레드 방식보다 쉬움
- 웹 서버가 내장되어 있음
- JSON 형식과 쉽게 호환됨
단점
- 기본적으로 싱글 스레드라서 CPU 코어를 하나만 사용
- CPU 작업이 많은 서버로는 부적합
- 하나뿐인 스레드가 멈추지 않도록 관리가 필요함
- 서버 규모가 커졌을 때 서버를 관리하기 어려움
- 어중간한 성능
1.3 서버 외의 노드
웹 프레임워크 개발. (Angular, React, Vue etc.)
데스크톱 개발 도구 (Electron)
1.4 개발 환경 설정하기
LTS와 Current 버전의 차이
- LTS : 기업을 위해 3년간 지원. 짝수 버전만 LTS가 될 수 있음. 서버를 안정적으로 운영해야 하는 경우
- Current : 최신 기능. 짝수 버전은 나중에 LTS가 되므로 Current부터 사용 고려 추천.
노드, npm 버전 확인 : node -v
npm -v
npm 버전 업데이트 : npm install -g npm