1.노드의 핵심개념
[1] 서버
클라이언트는 서버에 요청을 보내고 서버는 그 요청에 응답한다.
서버는 응답만 하는것이 아니라 다른 서버에 또 요청하는 클라이언트가 될수 있다.
[2] 자바스크립트 런타임
런타임이란? 특정언어로 만든 프로그램들을 실행할수 있는 환경
노드란 자바스크립트 런타임이다. 자바스크립트 실행기라고 봐도 무방하다.
[3] 이벤트 기반
노드는 이벤트 기반 방식으로 동작하기 때문에 이벤트가 발생하면 콜백 함수를 호출한다.
발생한 이벤트가 없거나 발생했던 이벤트를 다 처리하면 다음 이벤트 발생까지 대기한다.
함수를 실행하면 호출스택에 쌓이고 반대순으로 실행된다.
이벤트 루트가 있다면 함수의 콜백함수가 백그라운드로 간 후 태스크 큐에 대기한다.
호출스택이 비워진 후 태스크큐에 있는 콜백함수들을 호출스택으로 올려 실행한다.
[4] 논 블로킹 I/O
I/O 는 input(입력)/output(출력) 을 의미한다.
기본적으로 자바스크립트 코드는 동시에 실행 될수 없다. 그러나 네트워크 요청과 같은 I/O 작업은 동시에 실행될수 있다.
논 블로킹이란 이전 작업이 완료 될때 까지 대기하지 않고 다음 작업을 수행함을 뜻한다.
블로킹은 반대로 이전 작업이 끝나야 다음 작업을 수행할 수 있다.
*setTimeout(콜백, 0) : 브라우저와 노드에서는 기본적인 지연시간이 있으므로 바로 실행되지 않는다.
[5] 싱글 스레드
프로세스와 스레드의 차이점
프로세스는 노드와 웹브라우저같은 프로그램이다. 프로세스는 메모리 등의 자원을 공유하지 않는다.
프로세스에서 여러개의 스레드를 생성해 작업을 동시에 처리할 수 있다.
스레드들은 부모 프로세스의 자원을 공유한다.
스레드들은 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.
노드를 실행하면 하나의 프로세스를 생성한다.
프로세스에서 여러개의 스레드를 생성하지만 제어할수 있는 스레드는 한개 뿐이다.
노드가 싱글스레드로 동작하지 않는 두가지 경우
스레드풀 : 특정 동작을 수행할 때 멀티 스레드를 사용 (암호화, 입출력, 압축)
워커스레드 : 노드12버전에서 멀티 스레드를 이용할 수 있다. CPU작업이 많은경우 이용하면 된다.
노드는 싱글스레드 논블로킹 방식이다.
'개발 > node.js' 카테고리의 다른 글
[Node.js] socket.io 로 채팅방 만들기 (0) | 2022.07.26 |
---|---|
[Node.js] 삭제, 수정버튼 만들기 (0) | 2022.07.26 |
[node.js] express, MySQL (0) | 2022.07.25 |
[node.js] formatting, linting (0) | 2022.07.19 |
[node.js] node.js (0) | 2022.07.19 |