개발자 '쑥말고인절미'
[Node.js] Node.js 개념 본문
Node.js
: Chrome V8 JavaScript 엔진으로 빌드 된 JavaSript 런타임
: 비동기 이벤트 주도 JavaScript 런타임
- 웹서버와 같이 확장성 있는 네트워크 애플리케이션을 만들수 있도록 설계되어 있다.
- 확장성 있는 시스템을 개발하는게 아주 자연스럽다.
- Node.js를 통해 다양한 JavaScript 애플리케이션을 실행할 수 있으며, 서버를 실행하는 데 제일 많이 사용된다.
- Node.js는 JavaScript를 서버에서도 사용할 수 있도록 만든 프로그램이다.
- Node.js는 서버사이드 스크립트 언어가 아니다. 프로그램(환경)이다.
- 사용되는 언어로는 JavaScript를 활용하며, Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있는 것이 특징이다.
- 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도 소프트웨어 없이 동작하는 것이 가능하며, 이를 통한 웹 서버의 동작에 있어 더 많은 통제에서 벗어나 여러 가지 기능을 가능하게 한다.
- JavaScript는 스크립트 언어이기 때문에 웹 브라우저(크롬, 사파리, 익스플로러, 파이어폭스 등) 프로그램에서만 동작하지만 Node.js는 웹 브라우저에서 JavaScript를 독립시킨 것이어서 Node.js를 설치하게 되면 터미널 프로그램(윈도우의 cmd, 맥의 terminal 등)에서 Node.js를 입력하여 웹 브라우저 없이 바로 실행할 수 있다.
- 그래서 Node.js를 이용하여 웹 브라우저와 무관한 프로그램을 만들 수 있게 되었다.
- 중요한 것은 Node.js를 이용하여 서버를 만들 수 있다는 것인데, 중요한 이유는 이전까지 Server-Client 웹사이트를 만들 때 웹에서 표시되는 부분은 JavaScript를 사용하여 만들어야만 했으며, 서버는 Reby, Java 등 다른 언어를 써서 만들었어야 했는데 마침내 한 가지 언어로 전체 웹 페이지를 만들 수 있게 되었기 때문이다.
- Node.js는 JavaScript를 컴퓨터에서 실행할 수 있게 하는 JavaScript 실행기이다.
- Node.js는 V8과 더불어 libuv라는 라이브러리를 사용하는데 libuv 라이브러리는 Node.js의 특징인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있다.
정리
- Node.js는 기본적으로 싱글 스레드, 논블로킹 모델을 채용하므로 I/O 요청이 많이 발생하면 Node.js를 서버로 사용하는 것이 좋지만 Node.js는 CPU 부하가 큰 작업에는 적합하지 않다.
- 우리가 작성하는 코드는 모두 스레드 하나에서 처리되기 때문에 코드가 CPU 연산을 많이 요구하면 스레드 하나가 혼자서 감당하기 어렵다.
- 즉, 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는데 Node.js는 적합하다. 예를 들어 네트워크나 DB, 디크스 작업 같은 I/O에 특화되어있다. 실시간 채팅 애플리케이션, 주식 차트도 포함된다.
- 결론적으로 Node.js의 장점은
- 멀티 스레드 방식에 비해 적은 컴퓨터 자원을 사용한다.
- I/O 작업이 많은 서버로 적합하다.
- 웹 서버가 내장되어 있어 별도의 웹서버를 설치할 필요가 없다.
- JavaScript를 사용하기 때문에 JSON 형식과 쉽게 호환된다.
메모
- V8
- 구글에서 개발한 자바스크립트 엔진이다. 과거에도 그랬고, 현존하는 모든 자바스크립트 엔진 중 표준을 가장 완벽하게 구현했으며 최고 작동 속도 및 사용자 UI와 그 편의성이 타의 추종을 불허하는 걸작이다.
- 역사 : 2013년 10월 17일 MS의 IE 11이 출시되었고, 이 브라우저는 지금까지도 ES6 구현율이 불과 11% 밖에 안된다. 반면 크롬의 경우 2012년 5월 15일부터 실험적으로 지원을 해오고 있었다. 2016년 4월 Kangax table 기준 ES6 98%, ES7 100%의 구현율을 선보였다.
- 자바스크립트 엔진
- 자바스크립트 코드를 실행하는 프로그램 또는 인터프리터이다.
- 런타임(환경)
- 특정 언어로 만든 프로그램을 실행할 수 있는 환경이다.
- 예를 들어, 자바스크립트가 브라우저에서 실행된다면 '런타임 환경'은 브라우저가 되고, Node.js에서 실행된다면 '런타임 환경'은 Node.js가 된다. 또한, "최적의 runtime을 제공한다."는 "최적의 구동환경을 제공한다."와 같은 의미로 해석할 수 있다.
- JavaScript
- 이름에서 알 수 있듯 독립적인 언어가 아닌 스크립트 언어이다. 스크립트 언어는 특정한 프로그램 안에서 동작하는 언어이기 때문에 JavaScript를 사용하는 Node.js는 웹 브라우저 프로그램 안에서만 동작을 한다. 스크립트 언어로는 JavaScript, jQuery, JSP, PHP, ASP, Perl, Python, Ruby, VBScript 등이 있다.
- 이벤트 기반(Event-driven)
- 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미한다.
- 이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두고, 이를 이벤트 리스너에 콜백함수를 등록한다. 이후에 이벤트가 발생하면 리스너에 등록해둔 콜백함수를 호출하며, 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기한다.
- 이벤트 루프
- 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백함수를 호출 할지를 이벤트 루프가 판단한다.
- Node.js는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프(loop)라고 부른다.
- CallBack함수(콜백함수)
- 나중에 호출되는 함수를 말한다.
- 콜백함수라고 해서 그 자체로 특별한 선언이나 문법적 특징을 가지고 있지는 않다.
- 콜백함수는 코드를 통해 명시적으로 호출하는 함수가 아니라, 개발자는 단지 함수를 등록하기만 하고, 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수를 의미한다.
- 즉, 콜백함수는 콜백함수라는 유니크한 문법적 특징을 가지고 있는 것이 아니라 호출방식에 의한 구분이다.
- 대표적인 콜백함수의 사용 예로는 JavaScript에서 이벤트 핸들러 처리이다.
- JavaScript에서 비동기적 프로그래밍을 할 수 있기 떄문에 콜백함수를 사용한다.
- 비동기적 프로그래밍
- 싱글 스레드의 멈춤을 방지하는 프로그래밍인데, 블록킹을 방지하여 싱글스레드가 논블록킹으로 동작하게 한다.
- 사용이유
- 사용자 이벤트 처리 : 브라우저 화면에서 발생하는 사용자의 이벤트는 예측이 불가능하므로 이런 화면이벤트를 관리담당하는 녀석에게 우리는 특정이벤트가 발생할 때 호출을 원하는 내용을 콜백함수에 전달하게 된다.
- 네트워크 응답 처리 : 화면단에서 서버에게 요청을 보냈을 때, 그 응답이 언제 올지 알 수 없기 때문에 이런 서버에 대한 응답처리 등도 비동기적으로 처리해야 한다.
- 파일을 읽고 쓰는 등의 파일 시스템 작업
- 의도적으로 시간 지연을 사용하는 기능 (알람 등)
참고링크
About | Node.js
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
nodejs.org
자바스크립트 엔진 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 자바스크립트 엔진(JavaScript engine)은 자바스크립트 코드를 실행하는 프로그램 또는 인터프리터이다. 자바스크립트 엔진은 전통적인 인터프리터일 수도 있고,
ko.wikipedia.org
https://wooono.tistory.com/362
[Software Engineering] 런타임이란?
들어가기 전, 그 놈의 런타임..런타임..런타임.. 평소에 '런타임' 이라는 용어를 많이 사용하지만, 그 용어의 개념이 명확하지 않다. 위키백과에선 '런타임' 과 '런타임 환경' 을 분리해서 설명하
wooono.tistory.com
https://hanamon.kr/nodejs-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/
Node.js 노드 개념 이해하기 자바스크립트 JavaScript 런타임 이벤트
Node.js 노드 개념 이해하기 JavaScript 런타임 - 노드는 다양한 자바스크립트 애플리케이션을 실행할 수 있으며, 서버를 실행하는데 제일 많이 사용된다. 이벤트 기반 이벤트 루프 논블로킹 I/O 싱글
hanamon.kr
http://wiki.hash.kr/index.php/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8_%EC%96%B8%EC%96%B4
스크립트 언어 - 해시넷
스크립트 언어(script language)란 다른 응용 프로그램에 삽입되어서 동작하는 프로그래밍 언어이다. 스크립트 프로그래밍 언어 또는 간략히 스크립트라고도 한다. 비(非)스크립트 언어인 C, C++, Java
wiki.hash.kr
https://www.hanumoka.net/2018/10/24/javascript-20181024-javascript-callback/
Javascript - 콜백함수(Callback function)이란?
들어가기Callback 함수를 모르지는 않는다. 하지만 잘 안다고 말할수도 없다.요즘 Node, Vue 등을 공부하면서 callback 함수의 진화형인 Promise, async 등을 접했고 곧 벽에 막혔다.이 글을 통해 Javascript cal
www.hanumoka.net
'STUDY > Vue.js & Express.js & JS' 카테고리의 다른 글
[JS] fill() 메소드 (0) | 2022.09.05 |
---|---|
[Vue.js] 컴포넌트 & Props (0) | 2022.09.01 |
[에러] 'vue-cli-service'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. (0) | 2022.08.19 |
[에러] Uncaught Error Error: Cannot find module 'http-errors' (0) | 2022.08.19 |
[JS] getMonth() 반환값에 1씩 차이발생?! (0) | 2022.07.14 |