본문 바로가기

생각정리

Node.js 에 대한 나의 생각(feat.javascript) 2편

728x90

앞서 1편에서 말한 것 처럼 JavaScript를 좀 이해하고나면 Node.js 를 이해하기가 좀 더 쉬워진다. 

안봤다면 1편을 보고 오세요~

 

먼저 node.js의 구조 

 

 

* Node.js는 Javascript와 C++언어로 구성되어 있습니다. V8엔진도 70% 이상의 C++로 구성되어 있으며, libuv는 100%의 C++언어로 구성된 라이브러리 입니다. 하지만 우리는 C/C++언어를 몰라도 Node.js는 사용할 수 있습니다. 이는 V8 엔진에서 Javascript를 C++로 Translate 해주기 때문에 가능한 일입니다. 또한 Node.js의 코어 라이브러리는 process.binding()을 통해 Javascript 환경에서 사용될 수 있습니다. 예를 들어 Node.js의 내장 모듈인 crypto는 원래 C++ 언어로 작성되어 있습니다.* Node.js에 동작하는 이벤트 루프는 libuv 내에서 구현됩니다. 이벤트 루프가 libuv 내에서 실행된다고 해서, Javascript의 스레드와 이벤트 루프의 스레드가 별도로 존재한다고 생각하실 수 있습니다. 하지만 Node.js는 싱글스레드이기 때문에 하나의 이벤트 루프를 갖으며, 하나의 스레드가 모든 것을 처리합니다.

 

 

Node.js의 특징을 한번 설명해 보겠습니다 .

싱글쓰레드, 비동기,Non_Blocking, FIFO 방식, 이벤트기반,이벤트루프  등이 있다. 

 

여기서 JavaScritp와 좀 다른 점은 논블로킹방식과 이벤트 기반, 이벤트루프 라는 것이다. 

 

이벤트기반이라는 것은? 

이벤트가 발생했을 때 미리 지정해둔 작업을 수행하는 방식,

이벤트 리스너에 콜백함수를 등록하고 실행하는 방식입니다 . 

(콜백함수란? 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 호출되는 함수)

 

이벤트 루프란 이벤트 발생시, 콜백함수를 관리하고, 실행순서를 관리하고 테스크 큐에 있는 이벤트를 전달하는 것을 뜻합니다 .

(테스크큐란 이벤트가 발생되기전에 기다리고있는 대기실)

 

그리고 Node.js의 논블로킹 방식은 

무거운 작업들을 백그라운드에서 처리하게하고 가벼운 작업들은 이를 비동기 콜백함수로 이벤트 루프에 전달하는 것을 말합니다.

 

한가지 의문점 

무거운 작업인지 가벼운작업인지 어떻게 알수있을까? 

I/O들은 OS 커널 혹은 libuv 내의 스레드 풀에서 담당합니다. libuv는 OS 커널에서 어떤 비동기 작업들을 지원해주는지 알고 있기때문에, 작업 종류에 따라 커널 혹은 스레드 풀로 분기합니다

 

위의 설명이 이해하기 어렵다면 밑의 그림을 보시면 되겠습니다. 

이렇게 간단하게 생각하면 된다. 

 

여기까지 Node.js의 동작원리를 간단하게 소개를 해보았습니다 . 

 

그렇다면 Node.js가 생겨난 이유는 무엇일까?? 

1. javascript는 웹 브라우저에서 프론트엔드 한정으로 밖에사용을 못함 .

2. node.js가 생겨남으로서 백 엔드에서도 서버 개발이 가능해짐

3. 프론트엔드 백엔트 개발자를 따로 둘 필요없이 개발을 할 수 있게됨

 

이렇게 개발자들이 편리하게 개발을 할 수 있게 도와주지만 과연 장점만 있을까요?? 장단점을 한 번 살펴보겠습니다.

 

장점

빠른 처리속도

개발이 쉬워짐

비동기 , 논블로킹 처리가 가능해짐

 

단점

비동기 처리를 위해 콜백함수를 많이 만들게되고

콜백함수가 많아지면 디버그가 쉽지않아짐

어떤 한쪽에 문제가 생겼을 때 웹 서버가 통째로 죽어버리기 쉬움

 

이유: 싱글쓰레드임으로 연결 중 어떤 함수에서 에러가 날 경우 웹

서버가 터져버림

 

더 자세한 내용은 저도 부족한 점이 많기 때문에 한번 구글링 검색해보시면서 더 공부해보세요!

저같은경우는 node.js로 채팅이랑 스트리밍서비스를 한번 만들어보니까 아 이 말이 이런말이구나 라는것을 깨달았습니다!! 

 

모두 화이팅하세요~!  

 

참고 

https://medium.com/@vdongbin/node-js-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC-single-thread-event-driven-non-blocking-i-o-event-loop-ce97e58a8e21

 

Node.js 동작원리 (Single thread, Event-driven, Non-Blocking I/O, Event loop)

Node.js는 어떻게 동작하는가

medium.com

 

https://soldonii.tistory.com/53

LIST