Node.js란?

fasongsong·2024년 6월 13일

cs

목록 보기
1/3

공식 홈페이지에서는 Node.js를 다음과 같이 설명합니다.

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

런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻합니다.
우선 자바스크립트라는 언어를 알아야합니다.

JavaScript 란?

자바스크립트는 HTML에 종속되어있는 언어입니다. HTML 조작과 변경을 위해 사용합니다.

💡 HTML은 웹페이지에 글쓰고, 그림넣는 언어
특징 ) 안 움직임, 글 넣고 그림 넣고 끝

정적 언어인 HTML을 조작해서 웹페이지를 다이나믹하게 바꿔주는 기능을 하는게 자바스크립트입니다.

🤔HTML은 자바스크립트가 조작한다면 자바스크립트 해석은 누가할까요?
바로 브라우저입니다. 브라우저에는 자바스크립트 해석 엔진이 있습니다. (브라우저의 종류에 따라 쓰는 엔진이 다릅니다.) 따라서 기존에는 자바스크립트를 인터넷 브라우저 위에서만 실행할 수 있었습니다.
그러나 2008년에 구글이 V8 엔진을 사용하여 크롬을 출시했습니다. V8 엔진은 엄청 빨랐고, 오픈 소스로 코드도 공개되었습니다. V8 엔진이 너무 뛰어나서 기능을 좀 더 더해서 V8 엔진 기반에 노드 프로젝트를 시작했고, Node.js(V8)이 등장했습니다. Node.js는 브라우저 내에서 말고도 다른 환경에서 자바스크립트를 사용할 수 있게 해줍니다.

따라서 Node.js는 JavaScript 실행 환경(=런타임)입니다.

Node.js를 설치하면 브라우저를 키지 않아도 자바스크립트를 컴퓨터에서 수행할 수 있게됩니다.
Node.js가 자바스크립트를 컴퓨터에서 쉽게 실행시켜줬기 때문에 자바스크립트를 프로그래밍 언어처럼 사용하기 시작했습니다.

자바스크립트는 본래 웹 브라우저에서만 동작하였기 때문에 프론트엔드만 커버할 수 있었습니다. Node.js는 JavaScript를 웹 브라우저로부터 독립시켜 서버 구현을 가능하게 했습니다. 기존 자바스크립트의 런타임은 오직 웹 브라우저뿐이었는데, Node.js로 새로운 런타임이 생긴 거죠. 덕분에 JavaScript 프론트엔드 영역뿐만 아니라 백엔드 영역까지 아우를 수 있는 언어가 됐습니다.

많은 사람들이 Node로 서버를 만듭니다.

왜 하필 Node.js로 서버를 만들어 쓸까?

두 개의 서버(=요청을 처리하는 기계)가 있습니다.
Node.js로 만들어 진 거 하나, 일반 서버 하나 이렇게 두 개가 있다고 가정해봅시다.
이 서버는 동일한 작업을 수행하는 서버입니다. 예를 들어 CGV 페이지라고 생각해봅시다.

손님이 예매할 영화의 티켓 수를 얘기(요청)하면
CGV 페이지의 서버가 요청을 받고 티켓을 줍니다(응답).
손님은 서버가 준 티켓을 받습니다.

일반 서버의 경우

손님이 4명 있다고 생각해봅시다.
1번째 손님은 티켓 1장을 요구해서 서버가 티켓 1장을 줬습니다.
2번째 손님은 1번째 손님이 가기를 기다렸다가 차례가 되면 예매를 합니다. 1장을 요구하고 서버에게 1장을 받고 갑니다.
그런데 3번째 손님이 200장을 예매합니다. 그러면 서버는 200장의 티켓을 준비하고, 3번째 손님은 기다립니다. 근데 문제는 4번째 손님도 3번째 손님이 마무리될 때까지 기다려야한다는 겁니다.

Node.js로 개발한 서버인 경우

모든 손님의 요청을 한번에 받습니다. 그리고 순서와 상관없이 처리 속도가 빠른 것부터 결과를 가져다줍니다. 처리 속도가 빠른 것부터 처리하기 때문에 요청을 놓치지 않고, 4번째 손님이 굳이 3번째 손님의 요청이 끝날 때까지 기다리는 문제도 사라졌습니다.
이게 Node.js의 Non-blocking I/O의 개념입니다.

Node.js의 강점

낮은 학습 장벽

앞서 말했듯이 Node.js는 JavaScript를 기반으로 하는데요. JavaScript는 개발 공부를 처음 한 사람도 쉽게 익힐 수 있을 만큼 난이도가 낮습니다. 또다른 프로그래밍 언어닌 자바(Java)로도 백엔드 개발을 할 수 있지만, 자바는 자바스크립트보다 학습 난이도가 높습니다.

방대한 개발자 커뮤니티

개발에서는 유용한 코드 모음인 패키지가 중요한데요. 패키지가 잘 구축됐느냐, 아니냐에 따라 개발 생산성이 결정되죠. Node.js는 전 세계적으로 인기가 높기 때문에 커뮤니티에는 이미 개발자들이 만들어 공유한 다양한 패키지들이 있습니다. 이런 npm(node package manager)를 활용하면 유용한 기능들을 쉽게 구현할 수 있죠.

풀스택 개발자로 확장 가능

Node.js를 학습한다는 것은 곧 JavaScript를 활용할 줄 알게 된다는 의미인데요. JavaScript는 원래 프론트엔드 개발에서 주로 활용됐던 언어입니다. 따라서 Node.js 개발자는 보다 쉽게 프론트엔드까지 진출해 풀스택 개발자로 커리어를 쌓을 수 있죠. 꼭 풀스택 개발자가 되지 않더라도, 백엔드 개발자가 프론트 엔드 영역을 쉽게 파악할 수 있다는 점만으로도 경쟁력이 됩니다.

점점 증가하는 취업 수요

Node.js는 실행 중인 작업이 있어도 다른 작업을 진행할 수 있는 Non-bloking I/O 방식으로 작동하기 때문에 처리 속도가 월등이 빠릅니다. Node.js는 코드가 매우 짧고 쉬워서 빠른 개발 가능(Pivoting이 잘됨)합니다. 이런 장점 때문에 전세계적으로 대형 IT 기업부터 스타트업까지 다양한 기업에서 채택하고 있는데요. 대표적으로 넷플릭스, 페이팔, 링크드인 등의 기업에서 Node.js를 활용하고 있죠.
국내에서도 점점 Node.js를 활용하는 기업이 늘고 있어 Node.js 개발자에 대한 수요가 높아지고 있습니다. 스타트업을 중심으로 네이버, 카카오, 넷마블, 토스와 같은 규모가 큰 IT 회사까지 점점 영역을 확장하고 있죠.

**Pivoting 은 기존 사업 아이템을 포기하고 방향 전환에 나서는 것을 가리키는 표현

Node.js와 함께 학습하면 좋은 언어와 프레임워크

TypeScript : 보다 안정적인 개발 가능

타입스크립트(TypeScript)는 JavaScript의 확장 버전으로, 정적 타입 시스템을 제공합니다. 정적 타입 시스템은 코드 작성 중 발생할 수 있는 오류를 줄이고 유지 보수를 용이하게 합니다. 대규모 프로젝트나 서버 단에서 개발이 이루어지는 복잡한 프로젝트에서 특히 유용하죠.

Express.js : 가볍고 빠르게 개발 가능

Express는 Node.js의 웹 애플리케이션 개발을 위한 가장 간단하면서도 강력한 프레임워크 중 하나입니다. 프레임워크는 도구 상자로 비유할 수 있는데요. Express는 Node.js로 쉽게 서버를 만들 수 있게 해주는 클래스와 라이브러리들이 모여 있는 도구 상자라고 할 수 있죠.

Nest.js : 구조적이고 확장 가능한 개발

Nest.js는 TypeScript를 기반으로 한 프레임워크로, Node.js 웹 애플리케이션을 구조적이고 모듈화된 방식으로 개발하는 데 도움을 줍니다. Nest.js의 모듈 시스템은 코드의 가독성과 유지 보수성을 높여 대형 프로젝트를 관리할 때 이상적인 도구입니다.
💡Express.js와 Nest.js 모두 웹 개발을 효율적으로 만드는 도구로, 프로젝트의 크기와 요구 사항에 따라 선택하면 됩니다. 간단한 웹 서비스를 빠르게 구축하려면 Express.js를, 대규모 애플리케이션의 경우 Nest.js를 선택하는 것이 좋습니다.

Node.js의 단점

Node.js는 모두 스레드 하나에서 처리됩니다. 코드가 CPU 연산을 많이 요구하면 스레드 하나가 감당하기 어렵습니다. 그렇기 때문에 이미지나 비디오 처리, 대규모 데이터 처리 같이 CPU를 많이 사용하는 작업을 위한 서버로는 권장하지 않습니다. 노드보다 더 적합한 다른 언어들이 많기 때문입니다.


🔗참고 자료

node.js 란?
node.js 점유율이 높아지는 이유

profile
파송송의 개발 기록

0개의 댓글