node.js 를 알아보자 [ node.js 교과서 ]

2023. 4. 10. 15:06node.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