Node.js란?

HS K·2022년 10월 2일
0

1. REPL(Read-Evaluate-Print loop)

  • 하나의 입력을 받아서(Read single input), 처리하고(Evaluate), 결과를 반환하는(Print result) 환경으로 구현된 프로그램을 REPL 이라고 한다.
  • 즉, 커맨드라인 인터페이스를 가지는 프로그램이다.
  • 보통 js, python 같은 스크립트 언어를 말한다.

cf) 커맨드라인 인터페이스 : 사용자가 텍스트로 명령어를 입력하고 다시 텍스트로 결과를 화면에 출력해주는 인터페이스를 가진 컴퓨팅 인터페이스

2. Node.js

요약 : Chrome 브라우저의 V8 Javascript 엔진을 탑재한 Server Side 오픈소스 Javascript 런타임

브라우저 이외의 환경에서도 동작할 수 있도록 V8 엔진을 브라우저에서 독립시킨 Javascript의 또 다른 실행 환경(runtime)이다.
그로인해, 브라우저에서 할 수 없는 운영체제의 파일 시스템에 접근해서 파일을 조작한다든지 등의 다양한 일들이 가능하게 되었다.

단순히 브라우저 밖으로 꺼내는게 목적이 아니라 웹 서버인 Apache HTTP Server가 최대 10,000개 이상의 동시 요청을 다루는데 있어서 갖는 문제를 해결하기 위해 자바스크립트(Javascript)를 그대로 활용하면서, 이벤트 기반의 높은 처리 성능을 낼 수 있는 network 서버를 만드는 것에 관심이 있었고 그렇게 Node.js가 탄생했다.

이러한 특징을 가진 Node.js는 페이팔, 넷플릭스, 월마트, 링크드인, 우버 등에서 메인 또는 서브 백엔드 서버를 만드는데 사용되고 있다.

Javascript

브라우저(Chrome, Safari, Internet Exploere)에서 HTML 요소 생성부터 모든 페이지 및 기능을 동적으로 처리할 수 있도록 만들어주는 브라우저에서 실행되는 프로그래밍 언어

Chrome V8 엔진

Google이 주도하여 C++로 개발한 고성능 엔진.
Javascript 언어로 작성된 코드를 컴퓨터가 해석하기 쉬운 바이트 코드로 JIT 컴파일 방식으로 변환하는 역할을 수행한다.

바이트 코드 : 직접 CPU 내의 레지스터와 누산기를 어떤 식으로 사용하라고 명령하는 명령문

Serverside

네트워크의 한 방식인 클라이언트-서버 구조의 서버 쪽에서 행해지는 처리

Runtime

어떤 프로그램이 실행되고 있는 동안의 동작

해당 프로그램이 필요한 시스템 자원(RAM, 시스템 변수, 환경변수 등)을 할당받고 실제로 시스템 자원을 사용해서 어떤 처리를 하고 있는 것 (그러한 상태/그런 처리가 행해지고 있는 것)이다.

  • 런타임은 프로그램이 (필요한 프레임워크, 컴포넌트, 라이브러리들과 함께) 메모리에 로드되었을 때 시작된다.
  • 메모리에 로드되는 작업은 보통 소프트웨어 개발 유틸리티와 언어(개발언어) 안에 있는 Compiler 나 Loader 애플리케이션에 의해 이뤄진다.
  • 런타임을 위해 운영체제(OS)는 실행이 처음 시작될 때부터 끝날 때까지
    모든 프로그램에 필요한 만큼의 메모리, 프로세서, 입출력(I/O) 리소스들을 할당한다.

RuntimeEnvironment

Runtime이 일어나기 위해, 즉 해당 프로그램(애플리케이션)이 시스템 자원을 사용하기 위하여 시스템 자원에 액세스 할 수 있도록 해주는 실행 환경

  • 애플리케이션은 런타임 환경을 통해 프로세서에 명령을 보낼 수 있으며, 시스템 리소스를 접근하고 사용한다.
  • 이런 런타임 환경 같은 매개가 없다면 애플리케이션 프로그램은 (대부분 고수준의 언어로 짜이므로) 시스템 리소스에 접근할 방법이 없다.
  • 런타임 환경은 운영체제 자체에 속하는 경우도 있고, 운영체제 위에서 작동하는 소프트웨어일 경우도 있다.

3. Node.js를 왜 쓸까?

  1. Frontend와 Backend 기술 스택 통합
  • 프론트엔드와 백엔드 양쪽에 동일한 언어를 사용하면 코드를 모듈로 만들어서 재사용할 수 있다.
  • Javascript로 훈련된 개발자는 최소한의 노력으로 서버 측 프로그래밍을 시작할 수 있다.
  • 현대 웹 개발에서 가장 중요한 개발팀의 전반적인 생산성 향상에 도움이 된다.
  1. 빠른 처리 속도와 동시 요청 처리 성능

libuv 라는 비동기 I/O에 중점을 둔 오픈 소스 라이브러리를 사용함으로써 이벤트 기반(Event Driven), Single Thread, non-blocking I/O 모델을 구현한다.
덕분에 Node.js는 지연(blocking) 없이 동시 요청을 빠르게 처리할 수 있다.

  1. MSA (Micro Service Architecture)에 적합

MSA : 한 가지 일만 수행하는 작은 어플리케이션
즉, 쉽게 교체될 수 있고 독립적으로 개발되고 전개될 수 있는 작은 컴포넌트를 의미한다.

  • MSA 구조 안에서는 기능이 추가될 때마다 기존 시스템에 더해지는 것이 아니라 가벼운 시스템을 새롭게 구축하는 방법으로 확장하게 된다.
    결과적으로 Node.js는 상대적으로 가벼운 런타임이기 때문에 MSA와 아주 잘 조화되어 사용될 수 있다.

  • node.js는 풍부한 생태계(라이브러리 약 80만개)를 갖고 있고, JSON 형식을 그대로 사용할 수 있는 등 많은 장점들이 있다. 이러한 이유로 자바스크립트와 노드로 백엔드 API 서버를 구축하는 것은 좋은 선택일 수 있다. Node.js의 경우 속도와 확장성을 요구하는 집중적인 I/O가 있는 실시간 애플리케이션, 웹, 앱 어플리케이션 개발에 적합한 기술이다.

profile
주의사항 : 최대한 정확하게 작성하려고 하지만, 틀릴내용이 있을 수도 있으니 유의!

0개의 댓글