[Node JS]란 무엇인지 알아보자

용용이·2023년 4월 10일
0

Node.js

목록 보기
1/1

며칠 전 사내에서 유튜브 생활코딩으로 유명한 이고잉님을 초청하여
4일간 하루 5시간 총 20시간의 [React + Next.js] 오프라인 강의가 있었습니다.
하여 사전에 Node JS에 대하여 정리한 내용들을 적어보겠습니다.

이고잉님의 강의 [React + Next.js] 에 대한 내용은 추후 포스팅 하도록 하겠습니다.

자바스크립트는 브라우저에서 많이 사용하는 프로그래밍 언어로, DOM을 편집하거나, 브라우저에서 로딩된 페이지를 편집, 팝업, 모달 같은 효과 또는 기능을 사용할 수 있도록 합니다.
JavaScriot는 브라우저에서 사용 되는 언어로 페이지 로딩 이후에도 페이지와 사용자의 상호작용(Interactive) 가능하도록 합니다. 따라서 브라우저에서 JS는 필수적인 요소라고 볼 수 있습니다.

JS의 기능은 이게 전부가 아닙니다. Node.js는 다른 버전의 Javascript라고 볼 수 있습니다. JS기반으로 만들어 졌고, 몇몇 기능을 더하고, 기존 JS로 브라우저에서 가능했던 기능들 중 일부는 빠진 형태입니다.

NodeJS는 JS코드를 서버에서 실행 할 수 있도록 해주며, 그뿐만 아니라 어떤 기기에서도 실행할 수 있도록 만든 JS입니다. 대체로 서버에서 사용되는데, 서버 사이드에선 네트워크 어플리케이션 개발에 간편하게 사용할 수 있습니다.

NodeJS 공식 사이트는 다음과 같이 설명합니다.

Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.

NodeJS는 구글에서 개발한 JS엔진인 V8엔진을 사용합니다. V8 엔진은 NodeJS JavaScript코드를 머신코드로 컴파일합니다. 이렇게 컴파일된 머신 코드가 컴퓨터에서 효율적으로 처리할 수 있는 코드이기 때문입니다. V8자체는 C++로 이뤄져 있지만, JS코드를 작성하는 우리는 C++ 코드 없이 JS코드로만 작업이 가능합니다. NodeJS는 로컬 파일 활용, 파일 읽기, 파일 열기, 파일 삭제 등 원래 브라우저에선 할 수 없었던 기능들을 쉽게 사용할 수 있도록 지원합니다. 하지만, 원래 브라우저에서의 JS의 역할이었던 문서 객체 모델과 상호작용, 즉 HTML 요소들과 상호작용 하는 모습은 볼 수 없을 것입니다.

NodeJS를 통하여 Javascript의 이름과 다르게 종속적인 스크립트 언어에서 독립적인 언어처럼 사용이 가능하게 되었다는 뜻입니다.

NodeJS 서버에서의 역할

Web - 먼저 클라이언트 사이드와 서버 사이드가 나눠져 Client에서 URL에 요청을 전달 하면, 서버는 인터넷에서 실행 중인 컴퓨터로 들어오는 요청을 처리해서 HTML, JS, CSS 같은 페이지 형태를 response로 보내게 됩니다.

우리가 일반적으로 사용하는 브라우저, 클라이언트 사이드는 사용자가 개발자 도구를 열어 현재 페이지를 마음대로 수정 할 수 있습니다. 하지만, 서버는 유저가 액세스 할 수 없으므로 안전합니다. 모든 서버 운영에는 비즈니스 로직이 적용됩니다. 이러한 서버를 제공할 때 NodeJS가 사용됩니다. 사용자에게 데이터를 회신하는 코드를 서버에서 작성하여 클라이언트가 사용할 수 있도록 하는 거죠.

물론 NodeJS는 서버의 코드 실행에만 국한되지 않습니다. JS 런타임 환경이며, 브라우저가 필수인 것도 아니고, 서버 구축에서만 사용되는 것이 아닌 모든 JS코드를 NodeJS로 실행할 수 있습니다.

NodeJS는 서버에서 작성하는 코드만 작성하는 것이 아니고, 서버 자체를 스스로 작성합니다. 따라서 들어오는 요청을 처리하여 다른 코드로 보내주는 역할을 하죠. PHP는 아파치나 Nginx 같은 툴로 요청을 받아 PHP 코드를 실행하는 형식입니다. NodeJS는 둘 다 혼자 수행하는 것과 차이가 있죠.

NodeJS를 대체할 프레임워크는 너무나도 많지만 프런트엔드에서 빌드 툴에 이르기까지 현대 웹 개발에서 굉장히 많이 사용되는 프로그래밍 언어이고, JS의 사용처가 굉장히 다양하기 때문에 배워둬서 손해 볼 것은 없다는 것이죠.

NodeJS의 특징

NodeJS는 이벤트 기반이며 논 블록킹 I/O 모델을 구현하고 있습니다. 어려운 말들이라 이해가 하기 힘들 수 있는데, 하나하나 풀어 이해를 해보죠. 먼저 노드는 libuv라는 라이브러리를 이용하기 때문에 논 블록킹 I/O 모델을 구현하고 있는 것입니다. libuv는 비동기 입출력, 이벤트 기반에 초점을 맞춘 라이브러리입니다.

쉽게 설명하면 이벤트가 발생할 때 미리 지정해 뒀던 작업을 수행하는 방식을 의미합니다. Blocking의 경우에는 프로세스에서 한 작업의 실행을 위해 다른 작업이 완료될 때까지 기다리는 방식이고, Non-Blocking 방식은 한 작업이 시작되고 끝나지 않았더라도 기다리지 않고 B작업이 실행될 수 있도록 하는 방식입니다. 동시에 요청이 오더라도 처리가 완료 될 때까지 기다리지 않아도 되기 때문에 서버 부하가 적다는 점이 장점인 것이죠.

그리고 NodeJS는 싱글 스레드 기반입니다. Node 런타임 환경에서 자바스크립트 코드는 동시에 실행 될 수 없습니다. 쉽게 프로세스와 스레드를 설명하면, 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다. NodeJS는 싱글 스레드가 혼자서 일을 처리하지만 들어오는 요청 순서대로 처리하는 것이 아닌 논 블록킹 처리 방식으로 전 작업이 완료될 때까지 대기하지 않고 바로 다음 작업을 수행합니다.

따라서 NodeJS는 JavaScript의 이름과 다르게 브라우저에 종속적인 스크립트 언어가 아닌 독립적인 언어로 사용할 수 있도록 탈 바꿈 시켜주고, 특히 서버 사이드에서 사용하기 쉽도록 개발된 자바 스크립트 런타임 환경입니다. 노드의 특징에 따라 간단한 로직, 비동기가 필요한 서비스에 적합한 스택이라고 볼 수 있겠습니다.

profile
Dragon

0개의 댓글