
Node.js란 무엇인가?
흔히들 웹서버나 프레임워크라고 오해하지만 Node.js는 웹 서버나 프레임워크가 아니다. 공식 사이트에서는 이렇게 설명한다
Node.js는 Chrome V8 Javascript 엔진으로 빌드 된 javascirpt 런타임이다.
여기서 런 타임이란 특정 언어가 구동되는 환경을 뜻하는데 먼저 웹과 자바스크립트 역사를 간단히 살펴보자.
웹은 처음에 말 그대로 문서였다. 웹을 조금이라도 공부해본 사람이라면 문서 자체는 html만으로도 만들 수 있다는 것을 알 것이다.
여기서 웹이 발전하면서 웹이 동적으로 변할 필요가 생기게 되었다. 예를 들면 버튼을 누르면 화면을 전환한다던지 사용자에게 정보를 받아 처리를 한다던지 하는 작용을 하게 말이다. 따라서 마크웹 언어인 html만으로는 할 수 없었고 브라우저에서 동작할 수 있는 프로그래밍 언어인 자바스크립트가 탄생하게 된 것이다.(좀 더 복잡한 역사가 있지만 간단하게 말하자면...)
이 후 자바스크립트는 브라우저 전쟁 등 웹 브라우저마다 서로 호환이 되지 않거나 하는 여러 문제가 발생하기도 했지만 ECMAScript 5가 제정되고 표준 문제가 다소 해결되면서 AJAX, jQuery 등의 등장으로 계속해서 발전해나갔고 그 결과 Node.js까지 등장하게 된 것이다.
그러니까 쉽게 얘기해서 웹 브라우저에서만 동작하던 자바스크립트를 브라우저 밖에서도 동작하게 할 수 있는게 Node.js이고 이를 통해 서버 사이드 언어로서도 사용할 수 있게 된 것이다.
Node.js의 특징
Node.js의 특징 및 동작원리는 사실 좀 복잡하지만 정말 간단하게 특징만 정리하자면 다음과 같다.
- 비동기 이벤트 기반 환경
Node.js는 비동기 이벤트 기반의 환경을 제공한다. 이벤트 기반의 비동기 처리는 입출력 작업을 기다리는 동안 다른 작업을 수행 할 수 있기 때문에 CPU 자원을 효율적으로 활용할 수 있다.
- 단일 언어 사용
당연하게도 자바스크립트를 기반으로 하기 때문에 프론트엔드와 백엔드 모두에서 동일한 언어를 사용할 수 있으며 이는 생산성을 향상시키는 주요한 특징이다.
- 경량화
Node.js의환경은 매우 가벼우며 코드 구조가 모듈화 되어있기 때문에 병렬 작업과 대용량 데이터를 처리하는데 높은 성능을 보장한다. 특히 다양한 라이브러리와 패키지를 지원하기 때문에 사용이 매우 용이하다.
- 확장성
새로운 모듈을 추가하거나 업데이트 하는 과정이 무척 간단하다.
- 커뮤니티와 생태계의 다양성
Node.js는 거대하고 활발한 커뮤니티와 생태계를 보유하고 있어 다양한 모듈과 패키지가 지속적으로 발전하고 있다. 따라서 지속적인 혁신과 개선이 이루어질 수 있다.
조금 더 장점에 대해 말하자면 Node.js는 스레드를 기반으로 입출력을 처리하는 기존의 웹서버들과는 달리 대규모 네트워크 서비스를 개발하기 위해 고안되었기 때문에 이벤트 기반으로 처리가 된다. 비동기 이벤트 환경이기 때문에 하나의 이벤트를 처리하는 동안 다른 작업을 수행할 수가 있다. 이러한 상황을 이벤트 기반의 비동기 처리라고 할 수 있다. 다시 말해 이벤트가 병렬적으로 처리되는 특징을 가지고 있기 때문에 작업의 시간이 짧으며 요청이 많이 들어오는 시스템, 즉 채팅이나 실시간으로 데이터를 보여주는 서비스 등에 사용되면 아주 유리하다. (예를 들자면 대형 스트리밍 서비스를 제공하는 넷플릭스)
제일 대표적인 프레임워크 Express

Express는 Node.js의 웹 애플리케이션을위한 프레임워크이다. 다음 포스팅부터는 이 Express를 사용해서 간단한 웹 서버를 만들어 볼 것이다. 그러기 위해선 먼저 nodejs를 설치해야 한다.
Node.js — Run JavaScript Everywhere
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
nodejs.org
해당 사이트에 들어가서 LTS 버전을 잘 설치하면 된다. 그러면 다음 포스팅부터 웹 사이트를 하나 만들어보자
'backend > ExpressJS' 카테고리의 다른 글
[Prisma] EC2에서 Property does not exist on type 배포 실패 (0) | 2024.03.15 |
---|---|
[Express]ExpressJS란? (2) | 2023.12.06 |