2023. 4. 10. 15:06ㆍnode.js
본 게시글은 node.js 교과서 강의를 듣고 정리한 글입니다.
- node.js 는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다. ( 런타임 : 포켓몬 골드버전 에뮬레이터 느낌? )
- 노드는 서버가 아니다.
- 노드는 서버의 역할도 수행할 수 있는 자바스크립트 런타임
- 노드로 자바스크립트로 작성된 서버를 실행할 수 있다.
- 서버 실행을 위해 필요한 http / https / http2
- 브라우저 종속성에서 벗어난 것 ( 브라우저 탈출 )
특성
- 비동기, 싱글스레드, 이벤트 기반
이벤트 기반
- ex) 버튼을 클릭했을 때 팝업이 뜬다, 스크롤을 내리면 화면이 내려간다 ( 상호작용? )
- 이벤트 리스너에 콜백 함수 등록 > 이벤트 발생 > 등록된 콜백함수 호출
논 블로킹 I / O
- 노드는 블로킹이면서 동기, 비동기이면서 논 블로킹이다.
- 노드에서 동시라는 것을 구현하기는 정말 힘들다.
- 동기면 코드가 순서대로 실행된다. 비동기는 코드가 순서대로 실행되지 않는다.
싱글 스레드
- 프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유를 하지 않는다.
- 스레드 : 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유
- 기본적으로 프로그램 하나를 띄우면 프로세스가 하나 뜬다.
ex) 크롬은 프로세스, 크롬에 텝들은 스레드
- 노드는 사실 싱글 스레드가 아니다. 노드를 실행할 때는 프로세스의 안에 스레드가 여러개 뜬다. 그 중에서 개발자가 컨트롤 할 수 있는건 하나이다. 그래서 노드를 싱글스레드라고 표현하는 것이다.
- 또 개발자가 컨트롤 할 수 있는 스레드 외에 나머지 스레드는 무엇을 하냐면 나머지 스레드는 코드를 동시에 돌릴 준비를 하고 있다.
- 노드 14 버전부터 멀티스레드를 직접 개발자가 다룰 수 있게 되었다.
- 멀티스레드를 하면 동시에 여러가지 일을 할 수 있어 좋다.
- 프로그래밍 자체는 멀티스레드 인게 좋은데 왜 노드는 처음부터 멀티스레드를 지원하지 않았는가 ?
- 이는 멀티스레드의 단점때문이다. 코딩이 너무 어렵다.
- 싱글 스레드가 효율적인 구조는 아니다. 나머지 코어가 놀고 있기 때문이다.
서버로서의 노드
- 서버 : 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
- 클라이언트 : 서버에 요청을 보내는 주체 ( 브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버 )
- 노드로 만든 서버의 장단점은 자바스크립트의 장단점과 크게 다르지 않다.
- cpu 작업이 많은 서버로는 부적합하다.
- JSON 형식과 호환하기 쉽다.
- 노드가 빠르지만 진짜 성능을 원한다면 더 빠른게 많다.
'node.js' 카테고리의 다른 글
캐싱 , require, 순환참조 [ node.js 교과서 ] (0) | 2023.04.10 |
---|---|
this [ node.js 교과서 ] (0) | 2023.04.10 |
CommonJS 모듈 시스템 [ node.js 교과서 ] (0) | 2023.04.10 |
package.json [node.js 교과서] (0) | 2023.04.10 |
npm [ node.js 교과서 ] (0) | 2023.04.10 |