node.js란 무엇이며 왜 사용해야 할까

이라운·2022년 10월 1일
0
post-thumbnail

📰 이번에 다룬 문서:

Kinsta 의
What Is Node.js and Why You Should Use It
⚠️ 뉴스를 보고 작성자 편한대로, 이해한 대로, 기억하고 싶은 부분만 번역했습니다. 믿지 마시고, 되도록이면 위의 원문을 봐주세요.

✒️ 느낀 점

프론트엔드를 공부하며 백엔드단을 이해하지 못하면 프로젝트 진행에서 어려움이 많다는 것을 느꼈다. 프론트엔드에서의 필수 능력, 자바스크립트로 다룰 수 있는 백엔드 node.js 에 대해서 알아봤다

🔤 번역

들어가며

JavaScript는 세계에서 가장 인기 있는 프로그래밍 언어 중 하나이다. 오늘날 수백만 개의 웹 사이트를 지원하고 있으며 웹용 기능을 구축하기 위해 수많은 개발자와 디자이너를 끌어들이고 있다. 프로그래밍을 처음 접하는 경우 JavaScript는 쉽게 사용할 수 있는 최고의 프로그래밍 언어 중 하나다.

처음 20년간 자바스크립트는 클라이언트 측 스트립팅에만 사용되었다.

Node.js는 빠르고 확장 가능한 서버 측 및 네트워킹 애플리케이션을 구축하기 위한 단일 스레드, 오픈 소스, 플랫폼 간 런타임 환경이다. V8 JavaScript 런타임 엔진에서 실행되며 이벤트 기반의 비차단 I/O 아키텍처를 사용하므로 효율적이고 실시간 애플리케이션에 적합하다.

❔ Node.js 는 무엇으로 작성되었는가

C, C++ 및 자바스크립트로 작성되었다.

❔ Node.js 의 아키텍처(구조)와 작동방식

Node.js 는 단일 스레드 이벤트 루프 아키텍처를 사용하여 다수의 클라이언트를 한 번에 처리할 수 있다. 이것이 다른 런타임 환경가 어떻게 다른지 알기위해서는, 다중 스레드 동시 클라이언트를 자바에서 어떻게 처리하는지 알아야 한다.

다중 스레드에서의 요청-응답 모델에서는, 다중 클라이언트가 요청을 보내고 서버는 각각의 요청을 반응을 보내기전에 처리하게 된다. 하지만 멀티스레드는 한 번에 여러 동시 콜을 수행하기 위해 사용된다. 스레드는 스레드 풀에 정의되어, 요청이 들어올 때 마다 하나의 스레드가 할당되어 해당 요청을 처리한다.

Node.js 는 다르게 작동한다. 각각의 단계를 살펴보자

  1. Node.js 는 한정된 스레드 풀을 관리하여 요청을 처리한다.
  2. 요청이 올 때마다 Node.js 는 큐에 집어넣는다.
  3. 이제 핵심 컴포넌트인 단일 스레드 이벤트 루프가 나온다. 이 이벤트 루프는 요청을 끊임없이 기다린다.
  4. 요청이 들어오면, 이벤트 루프는 큐에서 요청을 꺼내고 해당 요청이 차단 입출력(input/output I/O) 를 필요로 하는지 확인한다. 필요하지 않다면 요청을 처리하고 응답을 보낸다.
  5. 만약 요청이 차단 작업을 가지고 있다면, 이벤트 루프는 내부적으로 가지고 있는 스레드 풀에서 하나의 스레드를 배정해 요청을 해결한다. 내부적으로 한정된 스레드를 사용할 수 있다. 이 보조 스레드 그룹을 작업자 그룹이라고 한다.
  6. 이벤트 루프는 차단 요청을 트랙킹하고, 차단 작업이 처리되면 대기열에 배치한다. 이것이 차단되지 않는 특성을 유지하는 방법...이다. (무슨 소리지)

Node.js는 더 적은 수의 스레드를 사용하기 때문에 더 적은 리소스/메모리를 사용하므로 더 빠른 작업 실행이 가능하다. 따라서 우리의 목적을 위해서 이 단일 스레드 아키텍처는 다중 스레드 아키텍처와 동일하게 작동한다. 데이터 집약적인 작업을 처리해야 하는 경우 Java와 같은 다중 스레드 언어를 사용하는 것이 훨씬 더 합리적이다. 그러나 실시간 애플리케이션의 경우 Node.js가 확실한 선택이다.

❔ Node.js 의 특징

Node.js는 지난 몇 년 동안 빠르게 성장했다. 이는 다음과 같은 방대한 기능 목록을 제공하기 때문이다.

  1. Easy — Node.js는 시작하기 쉽다. 웹 개발 초보자를 위한 늘 찾는 선택이다. 많은 튜토리얼과 대규모 커뮤니티를 통해 시작하는 것이 매우 쉽다.
  2. 확장성 — 애플리케이션을 위한 방대한 확장성을 제공한다. 단일 스레드인 Node.js는 많은 수의 동시 연결을 높은 처리량으로 다룰 수 있다.
  3. 속도 — 비차단 스레드 실행은 Node.js를 더욱 빠르고 효율적으로 만든다.
  4. 패키지 — 작업을 단순화할 수 있는 방대한 오픈 소스 패키지 세트를 사용할 수 있다. 오늘날 NPM 생태계에는 백만 개 이상의 패키지가 있다.
  5. 강력한 백엔드 — Node.js는 C 및 C++로 작성되어 속도가 빠르고 네트워킹 지원과 같은 기능이 추가되었다.
  6. 다중 플랫폼 — 교차 플랫폼 지원을 통해 Node.js를 사용하여 SaaS 웹 사이트, 데스크톱 앱, 심지어 모바일 앱까지 만들 수 있다.
  7. 유지 관리 가능 — Node.js는 프론트엔드와 백엔드 모두 JavaScript를 단일 언어로 관리할 수 있기 때문에 개발자에게 쉬운 선택이다.

❔ 시장 크기

지난 20년간 웹사이트 분야에서 엄청난 성장이 있었고, 예상할 수 있듯이 Node.js 도 빠르게 성장했다. 인기 있는 런타임은 이미 10억 다운로드를 2018년에 넘어섰으며, W3Tech 에 따르면 전체 웹사이트의 2.1 % 가 사용되고 있다고 한다. 즉 4000만개의 사이트가 인터넷에서 Node.js 로 운영되고 있다는 뜻이다.

수백만의 회사에서 사용되는 유명한 방식중 하나라는 것은 놀랍지도 않다. 아래는 node.js 를 사용하는 유명한 기업예시이다.

  • 트위터
  • 스포티파이
  • 이베이
  • reddit
  • 링크드인
  • 에이블리

❔ Node.js 의 응용

Node.js 는 다양한 어플리케이션에 사용된다.

  1. 실시간 채팅 — Node.js는 단일 스레드 비동기 특성으로 인해 실시간 통신을 처리하는 데 적합하다. 쉽게 확장할 수 있으며 챗봇 구축에 자주 사용된다. 또한 Node.js를 사용하면 다자간 채팅 및 푸시 알림과 같은 추가 채팅 기능을 간단하게 구축할 수 있다.
  2. IOT — IoT 응용 프로그램은 일반적으로 여러 센서로 구성되어 있는데, 작은 데이터 청크를 자주 전송하기 때문에 수 많은 요청이 쌓일 수 있다. Node.js는 이러한 동시 요청을 빠르게 처리할 수 있으므로 좋은 선택이다.
  3. 데이터 스트리밍 — Netflix와 같은 회사는 스트리밍 목적으로 Node.js를 사용한다. 이는 주로 Node.js가 기본 스트리밍 API를 제공한다는 점 외에도 Node.js가 가볍고 빠르기 때문이다.
  4. 복잡한 SPA(single-page applications) 어플리케이션 — SPA에서는 전체 애플리케이션이 단일 페이지에 로드된다. 이것은 특정 구성 요소에 대해 백그라운드에서 몇 가지 요청이 처리되고 있음을 말하는데, Node.js의 이벤트 루프는 비차단 방식으로 요청을 처리하기 때문에 여기에 도움이 된다.
  5. REST API 기반 애플리케이션 — JavaScript는 사이트의 프론트엔드와 백엔드 모두에서 사용된다. 따라서 서버는 Node.js를 사용하는 REST API를 통해 프런트엔드와 쉽게 통신할 수 있습니다.

❔ Node.js 는 프로그래밍 언어인가?

아니다.
브라우저 외부에서 JavaScript를 실행하는 데 사용되는 런타임 환경이다.

또한 Node.js도 프레임워크가 아니다. Node.js 런타임은 프로그래밍 언어(이 경우 JavaScript) 위에 구축되며 프레임워크 자체를 실행하는 데 도움을 준다.

요약하자면 Node.js는 프로그래밍 언어도 프레임워크도 아니다. 그들을 위한 환경을 제공하는 것이다.

❔ Node.js는 프론트엔드인가, 백엔드인가

개발자들 사이에서 흔한 오해는 Node.js가 백엔드 프레임워크이며 서버 구축에만 사용된다는 것이다. 이것은 사실이 아닙니다. Node.js는 프론트엔드와 백엔드 모두에서 사용할 수 있다.

❔ 요약

간단히 말해서 Node.js는 여러 동시 요청을 지원해야 하는 대규모 애플리케이션을 구축하는 데 사용할 수 있는 인기 있는 프로그래밍 환경이다. 단일 스레드 비차단 I/O는 실시간 및 데이터 스트리밍 애플리케이션 모두에 탁월한 선택이다.

이를 더욱 강화하기 위해 Node.js는 활발한 개발자 커뮤니티를 보유하고 있으며 현재 백만 개 이상의 패키지가 포함된 세계 최대의 오픈 소스 패키지 저장소인 NPM을 가지고 있다.

단어

go-to: 늘 찾는, 항상 선택하는
throughput: 처리량
immense: 엄청난

profile
Programmer + Poet = Proet

0개의 댓글