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

먹보·2022년 11월 6일
0

MUK_BO's Node.js

목록 보기
1/7

Node JS란 무엇인가

Chrome 브라우저의 V8 Javascript엔진을 탑재한 Server Side 오픈소스 JavaScript 런타임이다.

(자바스크립트 런타임에는 노드 이외에 디노도 있습니다)

우선 "Node JS(이하 '노드')"를 제대로 이해하기 위해서는 위의 4가지 개념을 정립하고 넘어가야 할 것 같다.

JavaScript(이하 `JS`)의 경우 자바스크립트를 직접 다루는 자바스크립트 문법편을 참고하면 되기에 나머지 3가지에 대한 기본 개념만 짚어보자.

🚩V8 - JavaScript

V8 자바스크립트 엔진JS언어로 작성된 코드를 컴퓨터가 해석하기 쉬운 바이트코드로 변환,해석,실행을 가능케 하는 엔진으로써, 2008년 Google이 주도하여 C++을 기반으로 개발한 고성능 엔진이다.

여기서 바이트코드란 직접 CPU 내의 레지스터와 누산기를 어떤 식으로 사용하라고 명령하는 명령문이나 마찬가지기 때문에 사람 입장에서는 어렵지만 컴퓨터 입장에서는 한결 이해하기가 편한 코드를 뜻한다.

V8 엔진 이외에도 타사에서 만든 여러 엔진들이 존재하는데 예를 들어, 모질라에서 만든 Rhino, 파이어폭스의 SpiderMonkey, 그리고 사파리의 JavaScriptCore 등과 같은 것이 있다.

🚩Server Side

Server Side란 글자 그대로 서버쪽에서 처리된다라는 것을 뜻하며, 클라이언트로 보낼 웹 페이지(HTML, JavaScript 등이 담긴)를 만들며, 정말 중요한 작업들(사용자 유효성, DB 관련 등)을 수행한다.

대표적인 언어는 Java, PHP, Ruby, Python, Node.js 등을 언급할 수 있다.

이와 반대(?)개념인 Client Side란 개념도 존재한다.

🚩실행환경 or 런타임 환경 (Runtime)

컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태이다. 운영 체제 자체에 속하는 경우도 있고 운영 체제에서 작동하는 소프트웨어를 뜻할 수도 있다.


자 이제 수박 겉 핥기 방식으로라도 노드의 정의를 구성하는 요소에 대해서 간단하게 알아보았으니, 노드를 누가? 그리고 왜? 만들었는지를 알아보자.

왜 Node.js를 개발 하였는가?

V8 엔진의 발전으로 자바스크립트의 실행 속도가 급격히 증가하였기 때문에 개발자들은 브라우저 이외의 환경에서도 JS가 동작할 수 있도록 환경을 설정해주고 싶었는데 이 때 2009년 11월, Joyent사의 라이언 달(Ryan Dahl)이라는 공학자가 V8엔진을 브라우저에서 독립시켜 JS를 브라우저 이외의 환경에서도 구동할 수 있도록 런타임 환경인 Node.js를 발표했다.

이로써 브라우저 환경 이외에서도 자바스크립트를 사용할 수 있게 되었고 이에 더 나아가 노드에 내장되어 있는 기능들(libuv, httpd, ...)로 높은 동시 요청 처리 성능을 갖는 HTTP Server 구축이 가능하게 되었다.

그럼 왜 사람들은 Node.js를 사용하는 것일까?

그건 다음과 같은 장점들 때문이다.

Node.js의 장점

📌프론트와 백 기술 스택 통함

  • 개발에 사용된 공통된 코드를 모듈로 만들어 재사용 가능
  • 프론트 개발자의 서버 프로그래밍 접근성 용이
  • 개발팀 생산성 증가

📌빠른 처리 속도 및 동시 요청 처리 성능

  • V8의 최적화 기법으로 놀라운 속도로 작업을 수행
  • libuv라는 비동기적으로 I/O에 중점을 둔 오픈 소스 라이브러리(Non-blocking I/O)

📌Micro Service Architecture(MSA)

  • 전체적인 구조를 서비스별로 독립적으로 나뉘어서 구성되는 아키텍쳐
  • 하나의 시스템에서 하나의 기능만 하도록 만들어진 구조이기에 하나의 시스템에 문제가 발생해도 다른 시스템은 정상적으로 작동

이와 같은 단점들 때문에 많은 사람들이 Node.js를 사용하였지만 아쉽게도 우리나라에서는 예전부터 정부에서 JAVA를 사용하였고 정부의 오랜 사용으로 인해 국내에서는 Node.js보다는 JAVA를 더 선호하는 편이다.

profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글