티스토리 뷰
nodejs는 Chorme V8 Javascript 엔진으로 빌드된 Javascript 런타임입니다.
(런타임 : 특정 언어로 만든 프로그램들을 실행할 수 있는 환경)
이벤트 기반(event-driven) : 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
이벤트 루프 : 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할을 담당합니다. 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 부릅니다.
백그라운드 : setTimeout 같은 타이머나 이벤트 리스너들이 대기하는 곳입니다. 자바스크립트가 아닌 다른 언어로 작성된 프로그램이라고 봐도 됩니다. 여러 작업이 동시에 실행될 수 있습니다.
태스크 큐 : 이벤트 발생 후, 백그라운드에서는 태스크 큐로 타이머나 이벤트 리스너의 콜백 함수를 보냅니다. 정해진 순서대로 콜백들이 줄을 서 있으므로 콜백 큐라고도 부릅니다. 콜백들은 보통 완료된 순서대로 줄을 서 있지만 특정한 경우에는 순서가 바뀌기도 합니다.
논 블로킹 I/O
이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있습니다. 작업에는 기본적으로 동시에 실행될 수 있는 작업과 동시에 실행될 수 없는 작업이 있습니다. 기본적으로 여러분이 작성한 자스 코드는 동시에 실행될 수 없습니다. 하지만 I/O 작업 같은 것은 동시에 처리될 수 있습니다.(input, output)
파일 시스템 접근이나 네트워크를 통한 요청 같은 작업이 I/O의 일종입니다. 이러한 작업을 할 때 노드는 논 블로킹 방식으로 처리.
논 블로킹이란 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행함을 의미.
블로킹이란 이전 작업이 끝나야만 다음 작업을 수행하는 것을 의미.
setTimeout, setImmediate는 논 블로킹을 만들기 위한 기법
다만, 논 블로킹으로 코드를 작성하더라도 코드가 전부 여러분이 작성한 것이라면 전체 소요 시간 짧아지지 않는다.
단지 실행 순서만 바뀜.
그렇다고 I/O 작업이 없다고 해서 논 블로킹이 의미가 없는 것은 아니다. 또한 논 블로킹과 동시는 다른 의미다.
노드에서는 동기와 블로킹이 유사, 비동기와 논 블로킹이 유사.(3절에서 설명)
예시 블로그
싱글 스레드
프로세스 : 운영체제에서 할당하는 작업의 단위. 토드나 웹 브라우저 같은 프로그램은 개별적인 프로세스. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.
스레드 : 프로세스 내에서 실행되는 흐름의 단위. 프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.
노드는 싱글 스레드라고 불린다. 하지만 싱글 스레드로 동작하지는 않는다. 노드를 실행하면 프로세스가 하나 생성. 그리고 그 프로세스에서 스레드를 내부적으로 여러 개 생성. 그중에서 여러분이 직접 제어할 수 있는 스레드는 하나. 그래서 싱글 스레드라고 여겨진다.
노드가 싱글 스레드로 동작하지 않는 두 가지 경우
1. 스레드풀 : 노드가 특정 동작을 수행할 때 스스로 멀티 스레드를 사용(암호화, 파일입출력, 압축)
2. 워커 스레드 : 노드12버전에서 이제 노드에서도 멀티 스레드를 사용하는 것이 가능
node설치
안된다면 환경벼수 확인
npm 버전 업데이트하기
npm install -g npm
(맥과 리눅스는 명령어 앞에 sudo, 계정 비밀번호 입력해야 하 수도)
함께 보면 좋은 자료
노드 공식 사이트
노드 공식 사이트의 가이드
https://nodejs.org/ko/docs/guides/
노드에 대한 전반적인 설명
이벤트 루프 설명
https://nodejs.org/ko/docs/guides/event-loop-timers-and-nexttick/
이벤트 루프에 대한 시각적 설명
vs code 공식 사이트
https://code.visualstudio.com/
Homebrew 사이트
'책 > nodejs 교과서' 카테고리의 다른 글
6. 익스프레스 웹 서버 만들기 (0) | 2021.02.21 |
---|---|
5. 패키지 매니저 (0) | 2021.02.20 |
4. http 모듈로 서버 만들기 (0) | 2021.02.20 |
3. 노드 기능 알아보기 (0) | 2021.02.19 |
2. 알아두어야 할 자바스크립트 (0) | 2021.02.18 |