Node.js

imjingu·2024년 2월 26일
0

개발공부

목록 보기
481/481

Node.js란

공식 홈페이지에 나와있는 표현으로

Node.js 는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.
-Node.js 는 공식 홈페이지-

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

JavaScript 란 HTML 에 종속되어있는 언어입니다. HTML 조작과 변경을 위해 사용합니다.
정적언어인 HTML 을 조작해서 웹페이지를 다이나믹하게 바꿔주는 기능을 합니다.

HTML 은 자바스크립트가 조작하다면 자바스크립트 해석은 누가 할까?
바로 브라우저입니다. 브라우저에는 자바스크립트 해석 엔진이 있습니다. (브라우저의 종류에 따라 쓰는 엔진이 다릅니다.) 따라서 기존에는 자바스크립트를 인터넷 브라우저 위에서만 실행할 수 있었습니다.

그러나 2008년에 구글이 V8 엔진을 사용하여 크롬을 출시했습니다. V8 엔진은 엄청 빨랐고, 오픈 소스로 코드도 공개되었습니다. V8 엔진이 너무 뛰어나서 기능을 좀 더 더해서 V8 엔진 기반에 노드 프로젝트를 시작했고, Node.js(V8)이 등장했습니다. Node.js는 브라우저 내에서 말고도 다른 환경에서 자바스크립트를 사용할 수 있게 해줍니다. 덕분에 JavaScript 프론트엔드 영역뿐만 아니라 백엔드 영역까지 아우를 수 있는 언어가 되었습니다.

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

Node.js를 설치하면 브라우저를 키지 않아도 자바스크립트를 컴퓨터에서 수행할 수 있게됩니다.

Node.js가 자바스크립트를 컴퓨터에서 쉽게 실행시켜줬기 때문에 자바스크립트를 프로그래밍 언어처럼 사용하기 시작했습니다.

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

일반 서버의 경우 1, 2, 3, 의 명령이 들어오면 차례대로 1번을 처리하고 2번을 처리하고 3번을 처리합니다. 많은 요청이 들어올 경우 오래걸립니다.

Node.js 의 경우 모든 요청을 한번에 받아 순서와 상관없이 처리 속도가 빠른 것부터 결과를 가져다 줍니다. 이게 Node.js 의 Non-blocking I/O 의 개념입니다.

npm

Node Package Manager 의 약자로 필요한 모듈을 다운 받아 쓸 수 있습니다.

Node.js의 강점

SNS나 채팅서비스에 많이 사용됩니다. 이런 서비스들의 특징이 요청이 매우 많다는 것입니다.

일반 서버로 구현하면 요청이 많거나 오래 걸리는 요청이 있으면 멈추거나 대기 시간 발생합니다. (일반 서버에서도 스케일링을 하거나 멀티쓰레드를 사용하면 사용할 수도 있긴합니다)

Node.js 서버로 구현하면 요청이 많거나 오래걸리는 요청이 있어도 멈추거나 요청 대기 시간이 발생하지 않습니다. 이런 Non-blocking 덕분에 채팅이나 SNS에 자주 사용됩니다.

Node.js는 코드가 매우 짧고 쉬워서 빠른 개발 가능(Pivoting이 잘됨)합니다.

정리하자면, 개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는 데 적합해서, 실시간 채팅이나 주식 차트 등에 노드를 많이 사용합니다.

이미 안정성과 보안성 측면의 문제도 충분히 검증되었습니다. 규모가 큰 에어비엔비, 넷플릭스, 링크드인 등에서 노드를 사용하고 있고, 페이팔이나 월마트 같이 결제 시스템을 사용하는 대기업에서도 노드로 서비스를 운영하고 있습니다.

Node.js의 단점

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

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를 선택하는 것이 좋습니다.

0개의 댓글