Back/Node.js

Node.js 개념 및 특성

Node.js 개념 및 특성

Node.js의 개념

공식 홈페이지 설명

: 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임

 

노드는 서버가 아니고 런타임이며, 쉽게 말해서 자바스크립트 실행기다.

 

브라우저랑 HTML에서 JS가 해방된게 중요하다.

 

JS는 이제 앱도 만들 수 있고, 데스크탑 프로그램, 게임도 만들 수 있는 다양한 역할에서 사용이 가능해졌다.

 

개발자 중에선 웹 개발자가 제일 많은데,

 

웹 개발자는 JAVA를 사용하든 C#이든 무슨 언어를 사용하든 어쩔 수 없이 JS를 해야만 한다.

 

하지만 서버 쪽을 하려면 새로운 언어를 배워야 했는데,

 

이미 알고 있는 JS로 하니 접근성이 높아졌다.

 

노드의 가장 큰 장점은 자바스크립트를 사용하는 것이다.

 

js는 전세계 언어 1

 

Node는 절대없어지지 않음. 자바스크립트를 없애야함.

 

node의 적은 deno 하나. deno말곤 아무도 node를 없앨 수 없음

 

예를 들어 다른 언어들은 json을 자기들 언어로 바꿔야하는데

 

json을 바꿔야할 필요가없음 json js니까

 

 

Node.js의 특성 및 동기 비동기

이벤트 기반이다. (노드말고도 대부분의 프로그램이 다 이벤트 기반이긴 하다)

 

이벤트의 예 : 클릭, 네트워크 요청, 타이머 등

 

이벤트 리스너 : 이벤트를 등록하는 함수

 

콜백 함수 : 이벤트가 발생했을 때 실행될 함수

 

노드가 쓰이는 방식은 대부분 2가지다.

- 블로킹이면서 동기 (코드가 순서대로 실행됨)

- 비동기이면서 논블로킹 (코드가 순서대로 실행되지 않는다)

 

노드에서는 동시에 돌아가는건 없다. 구현하려면 할 수 있지만 매우 어려움.

 

 

 

비동기

- 순서대로 실행되지 않지만

- 그것대로의 규칙이 있다.

- 그게 이벤트 루프

 

 

스레드

노드는 싱글스레드가 아니다.

 

작업관리자에서만 봐도 여러개가 있다.

 

노드를 실행할 때는 프로세스 안에 스레드가 여러개 뜨는데,

 

그 중에 하나만 컨트롤 할 수 있는 것.

 

나머지 스레드는 코드를 동시에 돌릴 준비를 한다.

 

그래서 많은 사람들이 싱글스레드라고 표현하지만 노드는 멀티 스레드다

(14버전부터는 아예 멀티스레드를 사용가능하게끔 했다.)

 

- 비유 -

페북,인스타,트위터 다 키고있는데

페북 키고 있는 동안은 인스타 알람이 안옴

페북을 끄고 인스타를 다시 들어가야함

멀티스레드는 스위칭만 하면되는 것

 

노드의 핵심은 '싱글 스레드 하나를 어떻게 효율적으로 관리하냐'다.

 

 

 

노드의 역할

노드는 서버가 아니지만 서버로 쓸 수 있다.

 

I/O 작업(인풋 아웃풋)이 많은, 즉 요청이 왔다갔다 하는게 많은 서버에 적합하다.