본문 바로가기

원리

Node.js 가 무엇인지 (작성중)

Node.js (nodejs.org)

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

책은 Node.js 교과서 개정 2판을 참고 하였다. 

 

노드는 서버로 사용된다.


서버란? 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램을 말한다. 

 

 저장소에 필요한 리소스(웹 사이트의 화면, 웹 설치 파일, 정보 등등) 넣고. 필요할때마다 서비스나 정보를 꺼내 프로그램에 올린 후 클라이언트에게 필요한 정보를 전송해 준다. 이게 서버이다. 하지만 서버는 서버의 역할만 하는것이 아니다. 다른 클라이언트에게 리소스를 요청하는 클라이언트의 역할 또한 가능하다. (이건 TMI) 

 

그리고 노드는 자바스크립트가 서버로서 기능하기 위한 도구를 제공하므로서 서버 역할을 수행 한다. 

 

Node.js (nodejs.org) 

 

Node 는 서버의 역할을 수행한다 했다. 그리고 Node.js 의 공식 홈페이지에 가면 아래와 같은 한줄을 확인 할 수 있다. 

Node.js 는 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임이다. 

 

노드는 자바스크립트 런타임이다. 런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻한다. 자바의 런타임 환경은 JRE 가 있다. 기존에는 자바 스크립트를 웹 브라우저에만 실행 할 수 있었고 브라우저가 자바 스크립트 런타임을 내장하고 있으므로 자바스크립트 코드를 실행 할 수 있었다(하지만 느리다는 문제가 있었다). 그리고 2008 년 구글이 V8 엔진을 사용하여 크롬을 출시했고 오픈소스를 공개하자(느리다는 문제가 해결되었다) 라이언 달(Ryan Dahl) 이 2009년 V8 엔진 기반의 노드 프로젝트를 시작해 런타임 환경이 개발 된 것이다. 

 

https://mygumi.tistory.com/154

 

Node.js vs Java 구조적 차이 :: 마이구미

Node.js Architecture - Single Threaded Event Loop 링크를 참고하여 작성된 글이다. 이번 글은 Node.js의 구조를 다뤄본다. 단순히 Node.js에 대한 글이 아니기에, 도움이 될만한 글이라 생각하기에 읽고 판단하..

mygumi.tistory.com

 

 

 

 그리고 노드는 V8 javascript 엔진으로 빌드된 런타임이라 했으니. V8 의 엔진을 살펴보자. 

 

 노드는 V8 과 더불어 libuv 라는 라이브러리를 사용하며 V8 과 libuv 는 CC++ 로 구현되어 있다. 

우리가 코딩한 자바스크립트 코드는 노드가 V8 과 libuv 에 연결해 준다.  libuv 라이브러리는 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현한다.

 

 

노드는 싱글 스레드 기반이다. 


 운영 체제는 컴퓨터에서 항시 실행되는 프로그램으로 프로세스, 리소스 등을 관리하기 위해 제공한다. 시스템 서비스 들을 프로그램(프로세스)에 제공한다.

 프로세스는 운영체제에서 할당하는 작업의 단위. 노드나 웨 브라우저 같은 프로그램은 개별적인 프로세스이다. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다. 

 스레드는 프로세스 내에서 실행되는 흐름의 단위. 프로세스는 스레드를 여러개 생성해 여러 작업을 동시에 처리 할 수 있다. 스레드들은 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능 하므로 데이터를 공유 할 수 있다. 

 

노드는 운영체제 위에 올라가있는 하나의 프로세스 이며 싱글 스레드라고 불리지만 엄밀히 말하면 싱글 스레드로 동작 하지 않는다. 노드로 프로세스를 실행할때 여러 스레드들이 생성 되는데 우리가 직접 제어할수 있는 스레드는 하나 뿐이기에 싱글 스레드라고 여겨 지는 것이다. 

 

스레드를 작업을 처리하는 일손으로 표현하기도 하는데. 하나의 스레드만 직접 조작 할 수 있으므로 하나인 셈이다. 요청이 많이 들어오면 한 번에 하나씩 처리하며. 블로킹이 심하게 일어나는 작업을 처리하지 않는 다면 스레드 하나로도 충분하다. 블로킹이 발생할 것 같은 경우에는 논 블로킹 방법으로 대기 시간을 최대한 줄인다. 

Node 에서 하나의 스레드만 사용한다는 것은 Node 작업장에서 오직 한명의 인부에만 일을 일을 시킬 수 있다는 것과 같다.

 

 

싱글 스레드,  논 블로킹


 

 

 

 

 

https://ui.toast.com/weekly-pick/ko_20200228

 

Loupe is a little visualisation to help you understand how JavaScript's call stack/event loop/callback queue interact with each other.

http://latentflip.com/loupe

 

http://latentflip.com/loupe/

 

latentflip.com

https://mygumi.tistory.com/154

 

Node.js vs Java 구조적 차이 :: 마이구미

Node.js Architecture - Single Threaded Event Loop 링크를 참고하여 작성된 글이다. 이번 글은 Node.js의 구조를 다뤄본다. 단순히 Node.js에 대한 글이 아니기에, 도움이 될만한 글이라 생각하기에 읽고 판단하..

mygumi.tistory.com

https://blog.fitz.software/183

 

[JAVA vs node.js] 무엇을 사용해야할까?

요새 새로운 API를 개발할 때 node.js로 개발하는 비율이 점점 늘어나는 것 같습니다. 저도 node.js를 접해가면서 "다들 노드 쓰니까 나도 써야지" 가 아닌 개발자스럽게 "노드는 이런 장점이 있으

blog.fitz.software

 

반응형

'원리' 카테고리의 다른 글

ID Token  (2) 2024.03.05
[Vue] Vue.js 기본 원리  (0) 2021.10.14
[Junit5] 테스트 라이프 사이클  (0) 2021.07.25