node.js가 웹 서버라고 말할 수 있습니까?


93

웹 프레임 워크와 웹 서버가 헷갈리는 것을 발견했습니다.

Apache is a web server.

Tornado is a web server written in Python.

Nginx is a web server written in C

Zend is a web framework in php

Flask/Bottle is a web framework in Python

RoR is a web framework written in Ruby

Express is a web framework written in JS under Node.JS

node.js가 웹 서버라고 말할 수 있습니까 ??? 웹 서버 / 프레임 워크가 너무 혼란 스럽습니다.

어떻게 든 node.js가 웹 프레임 워크가 아니라 웹 서버의 종류라면 (Express는 그렇습니다), 왜 전체 node.js를 유용한 연습에서 Nginx 서버 위에 놓아야합니까 ?? SO에 대한 질문

누가 도와 드릴까요 ???

전부


5
Tornado는 웹 서버 + 작은 웹 프레임 워크입니다. :) 나는 ezpresso가 옳다고 생각한다. Node.js는 실제로 Java의 JRE와 매우 유사한 런타임 환경입니다. Node.js는 웹이 아닌 응용 프로그램에 점점 더 많이 사용되고 있습니다. Node.js로 작성한 프로그램은 추가하지 않는 한 웹 서버 기능이 없습니다. 물론, Node.js에는 http.CreateServer (...). listen (80)을 사용하여 웹 서버를 쉽게 만들 수있는 매우 높은 수준의 기본 기능이 있습니다. 그러나 이것을 추가하지 않으면 프로그램에 웹 서버가 없습니다. 따라서 Node.js 자체는 웹 서버가 아닙니다. 대신 Node.js를 사용하여 만듭니다.
OCDev 2014

1
엄밀히 말하면 Node.js 위에 웹 서버를 배치 할 필요 가 없습니다. Node 프로젝트 내에 작은 서버를 작성하고 모든 일상적인 브라우저 요청과 관련 웹 앱에 대한 요청을 처리하도록 할 수 있습니다. 그러나 웹 페이지 변경과 같은 것은 Nginx와 같은 웹 서버에서 더 잘 처리됩니다. 따라서 Node에 웹 서버를 포함 할 필요는 없지만 그렇게하는 것이 더 현명한 경우가 많습니다.
Trunk

C ++는 웹 서버입니까? 아니요, 작성하는 데 사용할 수있는 프로그래밍 언어입니다. node.js와 동일합니다.
alfadog67

답변:


54

웹 서버

웹 서버는 인터넷을 통해 액세스 할 수있는 콘텐츠를 전달하는 데 도움이되는 하드웨어 (컴퓨터) 또는 소프트웨어 (컴퓨터 응용 프로그램)를 참조 할 수 있습니다. 1

웹 서버의 주요 기능은 요청시 웹 페이지를 클라이언트에 전달하는 것입니다. 이는 HTML 문서 및 이미지, 스타일 시트 및 스크립트와 같이 문서에 포함될 수있는 추가 콘텐츠의 전달을 의미합니다.

웹 서버는 인터넷에서 클라이언트 / 사용자에게 요청 / 페이지를 전달하기위한 기본입니다.

웹 프레임 워크

웹 애플리케이션 프레임 워크는 동적 웹 사이트, 웹 애플리케이션 및 웹 서비스의 개발을 지원하도록 설계된 소프트웨어 프레임 워크입니다. 프레임 워크는 웹 개발에서 수행되는 일반적인 활동과 관련된 오버 헤드를 줄이는 것을 목표로합니다. 예를 들어 많은 프레임 워크는 데이터베이스 액세스, 템플릿 프레임 워크 및 세션 관리를위한 라이브러리를 제공하며 종종 코드 재사용을 촉진합니다.

웹 프레임 워크는 웹 서버를 사용하여 클라이언트에 요청을 전달하지만 웹 서버는 아닙니다.

Node.js

Node.js는 빠르고 확장 가능한 네트워크 애플리케이션을 쉽게 구축하기 위해 Chrome의 JavaScript 런타임에 구축 된 플랫폼입니다. Node.js는 이벤트 중심의 비 차단 I / O 모델을 사용하여 분산 된 장치에서 실행되는 데이터 집약적 인 실시간 애플리케이션에 완벽하고 가볍고 효율적입니다.

그러나 다시 CLI 앱을 만들 수도 있으므로 처음과 같이 브라우저에서가 아닌 Javascript 프로그래밍 언어 를 사용하여 서버 (컴퓨터)에서 실행할 자바 스크립트 프로그램을 작성하는 플랫폼으로 더보아야한다고 생각합니다 . 나는 당신이 그것을 볼 수 있다고 생각합니까 Javascript++??

node.js의 첫 페이지에서 볼 수 있듯이 node.js로 웹 서버를 작성할 수도 있습니다. 처음에 Ryan은 프로젝트의 안정성 때문에 Nginx 를 node.js 앞에 놓을 수 있다고 말했습니다 . 이 프로젝트는 여전히 꽤 어리다. Nginx는 node.js가 충돌하는 동안 계속 실행되는 검증 된 웹 서버입니다. 그런 다음 다시 많은 사용자가 node.js를 사용합니다.


6
Node.js를가 자바 스크립트입니다 런타임 에 내장 된 구글의 V8 자바 스크립트 엔진 ...
ozanmuyes

1
웹 서버 (apache 또는 nginx)는 어떻게 하드웨어가 될 수 있습니까?
shadow0359

주요 질문은 Node.js가 기본적으로 HTTP 포트를 수신하는지 여부입니다. 그렇다면이를 HTTP 서버로도 분류합니다.
포스 버그

1
정사각형은 직사각형이지만 그 반대는 아닙니다. Nodejs가 단순한 웹 서버 그 이상이라는 말입니까? 아니면 웹 서버를 전혀 나타내지 않습니까?
CME64

1
@ shadow0359 조금 늦었지만 이것을 읽는 다른 사람들에게 웹 서버는 단순한 소프트웨어가 아닙니다. 또한 물리적 인 하드웨어, 소프트웨어가 실행중인 컴퓨터 의미 할 수있다
크리스토퍼

25

Node.js런타임 환경 또는 런타임 엔진 이라고 말하고 싶습니다 .

아마도 지금까지 찾은 최고의 정의는 Rob Gravelle의 "An Intro to Node.js" 라는 제목의 기사에서 나왔습니다 .

Node.js는 서버 측 JavaScript를 사용하여 네트워크 애플리케이션을 빌드하기위한 부분 런타임 환경 및 부분 라이브러리입니다. Chrome의 JavaScript 런타임 엔진을 사용하여 브라우저 샌드 박스없이 직접 JS 코드를 실행합니다.

또한 PCMAG.COM 백과 사전은 "런타임 엔진"에 대한 다음 정의 를 제공합니다 .

특정 응용 프로그램이 컴퓨터에서 실행되는 데 의존하는 소프트웨어입니다. 응용 프로그램을 실행하려면 런타임 엔진이 컴퓨터에서 실행되고 있어야합니다. 응용 프로그램에 필요한 공통 루틴 및 기능을 제공하며 일반적으로 중간 중간 언어 인 프로그램을 기계 언어로 변환합니다.

또한 "런타임 시스템"이라는 제목 의 Wikipedia 기사 는 다음과 같이 선언합니다.

런타임 시스템 (런타임 시스템, 런타임 환경 또는 런타임이라고도 함)은 언어가 컴파일 된 언어, 해석 된 언어, 포함 된 도메인 특정 언어 또는 API를 통해 호출되는지 여부에 관계없이 컴퓨터 언어의 기본 동작을 구현합니다. pthreads와 같습니다.

... 런타임 시스템은 화면에 텍스트를 그리거나 인터넷에 연결하는 등의 작업 동작을 구현할 수 있습니다. 또한 일반적으로 운영 체제에서 제공하는 서비스의 복잡성이나 변형을 숨기는 추상화 계층 역할을합니다.

음, Node.js와 같은 런타임 환경 (또는 소프트웨어 플랫폼)이 있습니까? JRE가 그러한 환경의 좋은 예라고 생각합니다. Node.js와 JRE-공통점이 많습니다. 이들은 모두 (일종의) 가상 머신, 클래스 라이브러리 및 CLI 애플리케이션을 포함한 다양한 유형의 애플리케이션을 구현하는 프레임 워크를 가지고 있습니다.

다시 질문으로 돌아가서 Node.js가 웹 서버라고 말할 수 있습니까? "JRE"에 대한 "Node.js"를 변경하고 JRE가 웹 서버인지 대답 해 봅시다. 대답은 '아니오.

우리가 말할 수있는 것은 Node.js가 웹 서버를 구현하는 데 사용할 수있는 런타임 환경이라는 것입니다. 글쎄요, 제 의견입니다.


당신은 애초에 그 런타임을 갖는 목적을 무시 합니다. 또한 그것이 정말로 유용한 일을하도록 만드는 데 필수적인 모든 모듈 [ nodejs.org/docs/latest-v9.x/api/] 없이 그것을 갖는 것은 쓸모 없다는 것입니다.
Trunk

19

노드가 웹 서버라고 말하는 것은 javacript가 브라우저 내에서만 실행될 수 있다고 말하는 것과 같습니다. 그렇게 말할 수는 있지만 다른 많은 일도 할 수 있습니다.

NodeJS

  1. [자바 스크립트 런타임 환경 (Chrome v8 엔진) + 노드 라이브러리 / API]
  2. 웹 서버를 만들 수 있으며 응용 프로그램 서버라고도 할 수 있습니다.

표현하다

  1. 웹 프레임 워크 (nodejs의 웹 서버를 사용하여 파일 제공)

Nginx

  1. 웹 서버

프로덕션에서 대부분의 사람들은 노드 서버 앞에서 Nginx를 프록시 서버로 사용하여 정적 파일 및 캐싱, 라우팅 등과 같은 기타 다양한 요소를 제공합니다.


1
또한 NodeJS가 웹 서버와 애플리케이션 서버 모두에 사용될 수 있음을 언급하고 Express를 언급하기위한 것입니다.
Yahya

16

node.js를 HTTP 서버, WebSocket 서버 또는 사용자 지정 프로토콜 등으로 사용할 수있는 패키지를 사용하여 서버 프레임 워크로 분류합니다.

node.js 서버 앞에 nginx를 배치하는 이유는 서버 애플리케이션을 실행하는 여러 머신에서 HTTP로드 밸런싱 및 리버스 프록시를위한 것입니다.


1
예. 웹 프레임 워크는 UI에 HTML 및 JavaScript를 사용하고 HTTP를 통해 통신하는 웹 애플리케이션을 작성하는 데 도움이됩니다. 웹 프레임 워크의 예로는 node.js의 경우 Express, Python의 경우 Django가 있습니다.
cmv

모든 시도의 가장 좋은 대답입니다. +1.
Trunk

내가, 우리가 부하 balncing 솔루션 HS 프록시 사용할 수 있습니다 appropriaite 솔루션이되지 않을 것 ngnix을 고집 같아요
카르 티케 야 샤르마

@cmv 죄송합니다 메신저 대화에 늦었습니다! 노드 앞에 nginx를 배치해야하지만로드 밸런서가 있어야합니까? 로드 밸런서를 EC2 인스턴스 앞에 놓고이를 통해 노드를 통과하여 엔드 포인트를 표현할 수 있습니까?
lopezdp

4

내가 당신의 고통을 어떻게 느끼는지!

많은 사람들과 마찬가지로 Node.js의 본질에 도달하기가 어려웠습니다. 대부분의 사람들은 자신이 유용하다고 생각하는 Node 부분에 대해서만 쓰고 이야기하기 때문입니다. 흥미를 느끼는 부분은 일반적으로 Node.js의 주요 이점이 아닌 2 차 이점입니다. 목적. Node가 단지 자바 스크립트 런타임이라고 말하는 것은 사람들에게 화가 났다고 생각합니다. 자바 스크립트의 노드의 사용 - 그리고 V8 런타임의 선택은 - 단순히 종료 수단 , 노드의 개발자 해결하고 싶어하는 문제에 가장 적합한 도구를 제공합니다.

Node의 주요 목적은 웹 앱에서 사용자 이벤트를보다 효율적으로 관리하는 것이 었습니다. 그래서 Node는 압도적으로웹 앱의 백엔드에서 사용됩니다. 이벤트 관리에서는 이러한 사용자 이벤트에 대해 서버 시스템에서 무언가를 수신해야합니다. 따라서 각 이벤트를 적절한 핸들러 스크립트로 라우팅하도록 http 서버를 설정해야합니다. Node는 사용자 요청을 위해 전용 포트에서 수신하도록 서버를 빠르게 설정하기위한 프레임 워크를 제공합니다. JavaScript에는 콜백 함수가 있기 때문에 Node는 이벤트 처리에 JavaScript를 사용합니다.이를 통해 종속 작업의 결과가 반환 될 때까지 하나의 작업을 일시 중단 할 수 있습니다. 이 기능이있는 다른 언어는 많지 않으며 Google의 V8 런타임만큼 효율적인 인터프리터가 없을 수 있습니다. 대부분의 웹 개발자는 JavaScript를 알고 있으므로 Node.js로 추가 언어 학습이 필요하지 않습니다. 또한 콜백 함수를 사용하면 모든 사용자 작업을 단일 스레드에 배치 할 수 있습니다.데이터베이스 또는 파일 시스템에 대한 액세스를 요구하는 작업에 명시적인 차단을 적용하지 않고 그리고 이것이 개발의 주된 목적인 동시 사용이 많은 노드에서 뛰어난 실행 효율성으로 이어집니다.

Node 사용자가 신속하게 백엔드 코드를 작성할 수 있도록 Node의 개발자는 일상적인 작업 (예 : HTTP 요청, 문자열 (디코딩, 스트림 등)과 관련된 문제) 및 NPM (노드 패키지 관리자) 저장소를위한 내장 JS 라이브러리를 모두 구성했습니다. : 이것은 다양한 표준 및 사용자 정의 기능을위한 오픈 소스, 사용자 유지 스크립트 패키지 세트입니다. 모든 노드 프로젝트에서는 설정된 npm install 명령을 통해 NPM 패키지를 프로젝트로 가져올 수 있습니다.

Node를 통해 처리되는 사용자 요청은 인증, 데이터베이스 쿼리, 콘텐츠 관리 (Strapi CMS) 등과 같은 웹 앱에 필요한 것입니다.이 모든 것들은 Node 포트로 전송됩니다. (데이터베이스에서 얻은 데이터 분석에 많은 CPU 시간이 소요되는 경우 이러한 유형의 프로세스는 별도의 스레드에 배치하는 것이 가장 좋으므로 단순한 사용자 요청이 느려지지 않습니다.) 다른 유형의 사용자 요청 (예 : 다른 웹 페이지로드) , 다운로드 CSS / JS / 이미지 파일 등은 웹 서버 프로그램 (Apache, NGinx 등)이 처리 할 서버 시스템의 기본 포트로 브라우저에 의해 계속 전송됩니다.

따라서 실제로 Node는 기본적으로 빠른 서버 생성 및 이벤트 처리를위한 프레임 워크이지만 웹 서버 프로그램의 일부 기능 만 대체하는 프레임 워크입니다 .

Node의 백엔드가 아닌 다른 사용은 단순히 V8 엔진과 같은 기능 중 하나 또는 다른 기능을 이용합니다. 예를 들어 프런트 엔드 빌드 도구 인 Grunt와 Gulp는 Node.js를 사용하여 SASS를 CSS로 변환하고, CSS / JS 파일을 최소화하고, 이미지 크기 /로드를 최적화하도록 코딩 할 수있는 빌드 스크립트를 처리합니다.하지만 이런 종류의 작업은 실제로 웹 애플리케이션을위한 효율적인 백엔드 프로세스를 만드는 주된 용도가 아니라 Node의 부산물 사용입니다.


2

웹 서버는 프로토콜을 통해 인터넷을 통해 클라이언트에 서비스를 제공하는 것이고 웹 프레임 워크는 우리가 컴파일러라고 부르는 것과 같습니다. 필요한 모든 라이브러리, 구문 규칙 등으로 구성됩니다.

그리고 node.js는 프레임 워크입니다 !!


2
그러나 Node에는 자체 서버를 빠르게 코딩 할 수 있도록 설계된 모듈 (예 : http)이 포함되어 있지 않습니까?
Trunk

1

문제는 "웹 서버"또는 "웹 응용 프로그램 서버"라는 용어가 JEE 세계와 제품이 오늘날의 자바 스크립트 프레임 워크 세계만큼 모듈화되지 않은 제품에 의해 지배되고 있다는 점이라고 생각합니다. 자유로이.

웹을 통해 복잡한 응용 프로그램을 제공 할 수있는 기술을 웹 서버 또는 웹 응용 프로그램 서버라고 부르지 말아야 할 이유가 없습니다 !

결합하면 Nuxt 를 프런트 엔드로, Feathers 를 백엔드로 사용하면 백엔드가 REST API와 서버 측 렌더링 된 UI를 제공하게됩니다!

물론 정적 콘텐츠를 제공하기 위해이를 (오용) 사용할 수 있습니다. 그런 다음이를 웹 서버라고 부르거나 전체 애플리케이션을 만들고 제공하는 데 사용할 수 있습니다. 그런 다음이를 웹 애플리케이션 서버라고 부릅니다.

목적을 달성하기 위해 요약되는 결합 된 기능 또는 특성입니다. 맞습니까? -안정성, 확장 성 등과 같은 기능은 시간이 지남에 따라 이러한 기술에 추가 될 IMHO입니다. 지금은 아직 꽤 새롭습니다.


0

Discord 봇을 만들기 위해 처음으로 Node.js를 사용했습니다. 내 생각은 "와우, Node.js는 서버입니까? JS 라이브러리 인 줄 알았어요!" 아니면 프레임 워크로 생각했을 수도 있습니다.

웹 서버입니까? 아니요,하지만 그것으로 만들 수 있습니다. 서버입니까? 쿼리를 수신하고 결과를 제공하는 소프트웨어 에서처럼? 예.

제 경우에는 다음과 같은 명령을 내 렸습니다. node index.js

이제 Node.js는 내 봇을 통해 응답 할 요청을 기다리고 있습니다. 서버이지만 웹 페이지를 제공하지 않습니다.


-1

아니 그것은 런타임 환경입니다 ... 그래서 웹 서버가 아니지만 실행할 필요가 없습니다. 그래서 아마도 이것이 혼란 스러울 수있는 이유 일 것입니다. 런타임 자체이기 때문에 웹 서버없이 독립 실행 형으로 실행할 수 있지만 다시 웹 서버가 아닙니다.


1
기술적으로는 사실이지만이 대답은 너무 짧고 새벌에게 유익하지 않다고 생각합니다.
트렁크
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.