[Node.JS] Node .js 란 무엇인가? 🧐

June hyoung Park·2020년 7월 25일
1

NodeJs

목록 보기
1/8


프론트엔드 개발자를 꿈꾸며 Vanila JS, Vue JS에 빠져있던 내가, 최근 데이터 베이스와 서버에도 관심이 생겨 Node.js와 JAVA를 공부하기 시작했다. 최근 몇일간 Node.js를 스윽 훑어보면서 가장 혹했던것은 자바스크립트에서 아직 이해가 부족한 부분이었던 Promise, Async await등 을 이용한 많은 비동기 패턴처리들을 맘껏 겪어볼 수 있다는 점이었는데, 이 글을 시작으로 Node JS 공부 일지를 올려볼까 한다.🔥🔥🔥

Node .js 란 무엇인가? 🧐

Node.js 란 2009년 Ryan Dahl이 발표한 크롬 브라우저의 V8(자바스크립트 엔진)기반의 자바스크립트 런타임이다.

자고로 런타임에 대해 간단하게 설명하자면 프로그래밍 언어가 구동되는 환경이라고 이해하면 좋을거같다.💻


Node.js의 특징


Node.js의 여러 글들에서 공통적으로 언급되는 큰 특징 두가지는'논블로킹 I/O'와 '이벤트 루프'인데, 깊게 파고들면 양이 너무 방대하여, 공부하는 입장에서 아직 이해가 많이 부족하다.

Non blocking I/O

Non blocking 이란 이전작업이 완료될 때까지 멈추지 않고 다음 작업을 수행하는 패러다임 이다.

즉 비동기로 실행 된다는 의미인데, Node.js에서의 논블로킹 I/O 모델은 Input과 Output이 관련된 작업(http, Database CRUD, third party api, filesystem) 등의 블로킹 작업들을 백그라운드에서 수행하고, 이를 비동기 콜백함수로 이벤트 루프에 전달하는 것 이라고 한다.

Event Loop

Event LoopSingle-Thread 기반에서 비동기 메시지를 처리합니다. - Node JS 공식 홈페이지 -

이벤트 루프가 이벤트가 발생하면 해당되는 함수를 실행시키기 때문에 싱글 쓰레드로 동시성을 가진 작업 처리가 가능하다고 한다.

즉 요청이 들어오면 이벤트 루프가 요청을 Event Queue에 넣고, 들어와 있는 요청들을 이벤트 루프가 순차적으로 Thread Pool에 있는 쓰레드들에게 작업을 할당해주고, 작업이 끝난 이벤트들을 감지하여 해당 콜백을 다시 Event Queue에 집어넣는다고한다.

실제로 요청을 처리하는 이벤트 루프는 싱글 쓰레드이지만 Thread Pool 내부는 여러개의 쓰레드를 사용하여 이벤트 루프가 콜백을 내부에 여러 스레드들에게 요청을 할당해준다.

이렇게 병렬처리가 가능하게끔 설계되어 있다고하지만, 짧은 시간에 처리 가능한 단위의 작업들이 아닌 CPU를 많이 소모하는 작업이나 대용량 파일을 관리하는 작업들은 Node.js에게 독약과도 같다고한다.

profile
Take me home~~~~

0개의 댓글