Node.js

웹이 발전함에 따라 필요성이 대두됐다. WEB 1.0에서 단방향 통신 위주일 때 사용자가 정보를 일방적으로 수용했다. 2.0은 어떤 웹 프로그램의 개념이 등장해서 정보 수신뿐만 아니라 전달까지 가능했다. 사용자와 상호작용이 가능해졌다. 이에 따라 많은 사용자가 웹 어플리케이션을 사용하고, 그 종류도 많아졌기 때문에 고성능의 JavaScript가 필요해졌다. 이를 지원하는 브라우저인 Chromium Project가 등장했고 이 안에는 V8이라는 엔진이 있었다. 이 엔진은 JavaScript를 더 빠른 속도로 처리할 수 있어서, 오늘날 더욱 다양한 웹 어플리케이션을 사용하는데 도움이 되었다.

V8은 고성능의 JavaScript 실행이 가능했는데, 웹 브라우저에 달린 V8 엔진을 따로 분리해서 사용하면 어떨까 생각하게 되었다. 이를 바탕으로 다른 언어를 웹 브라우저와 독립적인 환경에서 JavaScript를 사용하면 좋겠다는 취지에서 나온 것이 Node.js다. Node.js는 자바스크립트를 어느 환경에서나 실행할 수 있게 해주는 실행기이다. 이 실행기가 있음으로서 JS 기반의 다양한 어플리케이션을 만들게 된다.
브라우저의 JS는 지금까지 배웠던 JS 개념에 기반한 실행기로, 브라우저에서 실행된다. 그러다보니 웹 내부에서 제한된 동작을 가진다. HTML 태그에서 특정 요소를 바꾼다거나, HTML 태그를 수정하고 삭제하는 제한적인 기능만 담당했다. 브라우저의 JS는 웹 프론트 개발자의 언어로 분류해왔다.
Node.js가 등장하면서 크로스 플랫폼 실행이 가능해졌다. 크로스 플랫폼은 윈도우나 리눅스, 맥 같은 다양한 환경에서도 이 Node.js를 활용하여 JS 프로그램을 실행할 수 있게 되었다는 의미다. 웹뿐만 아니라 다양한, 제한 없는 동작이 가능해졌고 다양한 어플리케이션이 개발되었다.

Node.js의 특징
한 줄 요약 : 싱글 쓰레드 - 비동기 - 이벤트 기반
쓰레드
쓰레드란 명령을 실행하는 단위이다. 복잡한 프로그램은 여러 명령을 수행해야 하니 하나의 단위로 진행하면 실행이 오래 걸릴 것이다. 이 때 단위를 나눠서 실행하면 속도가 빨라질 것이다. 기본적으로 한 개의 쓰레드는 한 번에 한 가지 동작만 실행이 가능하다.

싱글 쓰레드는 쓰레드가 늘어나지 않기 때문에 리소스 관리에 효율적이다. 그러나 쓰레드 기반의 작업들의 효율이 떨어지게 된다(ex. CPU 연산 작업). 빨리 끝날 수 있는 다른 작업들이 한 작업 때문에 기다려야 할 수도 있는 것이다. 그래서 Node.js는 비동기 동작으로 쓰레드 기반의 작업을 최소화한다.
비동기
동기는 동작을 실행한 후 완료가 되길 기다리는 방식이다. 비동기는 동작을 실행한 후 완료가 되길 기다리지 않는 방식이다. 그 핵심은 어떤 작업의 끝을 기다리는게 아닌 다른 작업을 시작하는 데에 있다. 동작의 완료를 기다리지 않기 때문에 다른 동작을 바로 실행 가능하다. Node.js는 싱글 쓰레드이기 때문에 비동기 방식을 사용한다.

이벤트 기반
HTML, CSS, JS에서 버튼을 누르는 작업 등을 이벤트라 했다. 이벤트 기반은 비동기 동작의 완료를 처리하는 방법이다. 비동기 방식은 특정 동작을 실행한 후, 해당 동작을 전혀 신경 쓰지 않는다. 대신 해당 동작이 완료될 경우 실행할 함수를 미리 등록한다. Node.js 상에서 작업을 주고, 끝나기 전까지 다른 작업을 수행하는 등으로 효율적으로 사용한다. 만약 그 사이에 놀고 있어도, 멀티 쓰레드보다 이 방식이 더 낫다는 것이다. 비동기 동작이 완료가 되면 미리 등록된 함수를 실행한다.

Node.js는 싱글 쓰레드이기 때문에 비동기 동작이 필요하고, 비동기 동작을 구현하기 위해 이벤트 기반인 것이다.
Node.js 시작
Node.js를 사용하기 위해서는 V8이 탑재된 Node.js를 설치해야 한다. Node.js는 빠르게 개발 중이라서 보안 이슈 및 버그 수정, 최신 기술이 빠르게 적용된다. 이렇게 급변하는 기술은 가장 안정적인 최신 버전을 선택하는 것이 최선이다. LTS는 Long-Term Support 버전으로, Node.js의 안정적이고, 오래 지원하는 버전 명을 말한다. 오래 지원 받는 것은 곧 보안 관련 문제에 대해서도 유연하게 대처받을 수 있음을 의미한다.
'AI / DL > 엘리스 SW 코딩 훈련 트랙' 카테고리의 다른 글
[SW 코딩 훈련] Node.js와 Express.js 03. NPM과 모듈 (0) | 2022.11.24 |
---|---|
[SW 코딩 훈련] Node.js와 Express.js 02. Node.js 이해하기 (0) | 2022.11.22 |
[SW 코딩 훈련] 핵심 JavaScript 기초 04. DOM과 이벤트 (0) | 2022.11.21 |
[SW 코딩 훈련] 핵심 JavaScript 기초 03. 자바스크립트 제어문 (0) | 2022.11.15 |
[SW 코딩 훈련] 핵심 JavaScript 기초 02. 자바스크립트의 객체와 연산 (0) | 2022.11.08 |
댓글