programing

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

telecom 2023. 7. 29. 08:12
반응형

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

저는 제가 웹 프레임워크와 웹 서버를 혼동하고 있다는 것을 발견했습니다.

  • Apache는 웹 서버입니다.
  • 토네이도는 파이썬으로 작성된 웹 서버입니다.
  • Nginx는 C로 작성된 웹 서버입니다.
  • 젠드는 php의 웹 프레임워크입니다.
  • 플라스크/보틀은 파이썬의 웹 프레임워크입니다.
  • RoR은 루비로 작성된 웹 프레임워크입니다.
  • Express는 Node.JS 아래 JS로 작성된 웹 프레임워크입니다.

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

어떻게든 node.js가 웹 프레임워크가 아닌 웹 서버의 일종이라면(Express does), 왜 전체 node.js를 유용한 방법으로 Nginx 서버 위에 올려놓아야 합니까?

웹 서버

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

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

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

웹 프레임워크

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

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

노드.js

Node.js는 크롬의 JavaScript 런타임을 기반으로 구축된 플랫폼으로, 빠르고 확장 가능한 네트워크 애플리케이션을 쉽게 구축할 수 있습니다.Node.js는 이벤트 중심의 논블로킹 I/O 모델을 사용하여 가볍고 효율적이며 분산된 장치에서 실행되는 데이터 집약적인 실시간 애플리케이션에 적합합니다.

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

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

Node.js런타임 환경 또는 런타임 엔진입니다.

아마도 지금까지 제가 찾은 가장 좋은 정의는 Rob Gravelle의 "An Intro to Node.js"라는 제목의 기사에서 나온 것입니다.

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

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

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

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

런타임 시스템(런타임 시스템, 런타임 환경 또는 런타임이라고도 함)은 컴파일된 언어, 해석된 언어, 임베디드 도메인 특정 언어 또는 API를 통해 pthreads로 호출되는 컴퓨터 언어의 기본 동작을 구현합니다.

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

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

그렇다면, 질문으로 돌아가서, Node.js가 웹 서버라고 할 수 있을까요?"Node.js"를 "JRE"로 변경하고 JRE가 웹 서버인지 여부를 확인합니다.대답은 아니오입니다.

Node.js는 웹 서버를 구현하는 데 사용할 수 있는 런타임 환경입니다.그게 제 의견입니다.

노드가 웹 서버라고 말하는 것은 자바스크립트가 브라우저 안에서만 실행될 수 있다고 말하는 것과 같습니다. 그렇다고 말할 수도 있지만 다른 많은 것들도 할 수 있습니다.

노드 JS

  1. [Javascript 런타임 환경(Chrome v8 엔진) + 노드 라이브러리/APIs]
  2. 응용 프로그램 서버라고도 할 수 있는 웹 서버를 만들 수 있습니다.

표현

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

Nginx

  1. 웹 서버

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

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

node.js 서버 앞에 nginx를 두는 이유는 서버 응용 프로그램을 실행하는 여러 컴퓨터에서 HTTP 로드 밸런싱 및 역방향 프록시를 수행하기 위해서입니다.

당신의 고통을 얼마나 느끼나요!

많은 사람들과 마찬가지로 대부분의 사람들이 유용하다고 생각하는 노드 부분에 대해서만 쓰고 이야기하기 때문에 Node.js의 본질을 파악하는 것이 어려웠습니다. 그리고 흥미를 느끼는 부분은 주로 노드의 주요 목적보다는 노드의 2차적인 이점입니다.나는 사람들이 노드가 단지 자바스크립트 런타임이라고 말하는 것은 미친 짓이라고 생각한다고 말해야 합니다.노드의 자바스크립트 사용과 V8 런타임 선택은 노드의 개발자들이 해결하고자 했던 문제에 대한 최고의 도구인 목적을 달성하기 위한 수단일 뿐입니다.

Node의 주요 목적은 웹 앱에서 사용자 이벤트를 보다 효율적으로 관리하는 것이었습니다.그래서 노드는 웹 앱의 백엔드에서 압도적으로 사용됩니다.이벤트 관리를 위해서는 서버 컴퓨터에서 이러한 사용자 이벤트를 수신해야 합니다.따라서 각 이벤트를 해당 처리기 스크립트로 라우트하도록 http 서버를 설정해야 합니다.노드는 전용 포트에서 사용자 요청을 수신하도록 서버를 신속하게 설정할 수 있는 프레임워크를 제공합니다.JavaScript를 사용하면 함수를 개체로 호출할 수 있으므로 노드는 이벤트 처리에 JavaScript를 사용합니다.이를 통해 비동기 요청(예: 파일 시스템, 데이터베이스 또는 네트워크) 직후에 작업을 실행하여 함수로 래핑하고 비동기 요청 함수 호출의 매개 변수로 참조할 수 있습니다.

const mysql = require('mysql2');

const conn = mysql.createConnection(
{
    host: "XXXXXXXXXXXXX",
    database: "doa_statsbase",
    user: "uoalabama_doas",
    password: "*************"
});
. . . 
. . . 
const analyse_bigwheat_farmers = (err, result, fields) =>
{
    . . . . .
    . . . . .
    return data_object;
}
. . . 
. . .
let query = "SELECT * FROM us_farmers WHERE acreage > '1000' AND crop='wheat'"; 

mysql.query(query, (err, result, fields) =>
{
   analyse_bigwheat_farmers(err, result, fields);
}
. . . 
. . . 
. . . 

많은 다른 언어들은 함수를 객체로 취급하지 않으며, 함수가 없는 언어들은 Google의 V8 런타임만큼 효율적인 인터프리터를 가지고 있지 않을 수 있습니다.대부분의 웹 개발자들은 이미 자바스크립트를 알고 있기 때문에 노드를 통한 추가적인 언어 학습은 없습니다.또한 콜백 기능을 사용하면 데이터베이스 또는 파일 시스템에 대한 액세스를 요구하는 작업에 명시적인 차단을 적용하지 않고도 모든 사용자 작업을 단일 스레드에 배치할 수 있습니다.그리고 이것이 바로 많은 동시 사용 하에서 노드의 우수한 실행 효율성으로 이어지는 것입니다. 노드 개발의 주요 목적입니다.

2015년 JavaScript ES6에서 Promise 구조를 도입하여 비동기식 호출을 보다 쉽고 쉽게 처리할 수 있게 되었기 때문에 오늘날 대부분의 Node 웹 애플리케이션은 콜백을 거의 사용하지 않습니다.

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

Node를 통해 처리되는 사용자 요청은 인증, 데이터베이스 쿼리, 콘텐츠 관리 시스템(ApostropheCMS, StrapiCMS) 업데이트 등 웹 앱에 필요한 사항이 될 것입니다.이 모든 것은 노드 포트로 전송됩니다. (데이터베이스에서 가져온 데이터 분석에 CPU 시간이 많이 소요되는 경우, 이러한 유형의 프로세스는 더 단순한 사용자 요청을 지연시키지 않도록 별도의 스레드에 배치하는 것이 가장 좋습니다.)다른 유형의 사용자 요청(예: 다른 웹 페이지 로드, CSS/JS/이미지 파일 다운로드 등)은 브라우저에 의해 웹 서버 프로그램(Apache, NGinx 등)이 전통적인 웹 사이트 모드로 처리할 서버 시스템의 기본 포트(일반적으로 포트 80(HTTP) 및 443(HTTPS)로 계속 전송됩니다.

[서버로의 스트리밍 요청에 대한 참고 사항입니다.대부분의 서버 컴퓨터의 방화벽은 기본 포트 80/443만 열 수 있으므로 일반적으로 URL의 다른 포트(예: https://mynodeapp.com:3001/fetch-members )와 함께 Node.js 요청을 직접 보낼 수 없습니다.이 경우 서버 시스템의 방화벽이 잘못된 포트를 직접 참조하기 때문에 서버 시스템의 방화벽이 이를 무시합니다.대신 명시적 포트 번호는 없지만 Node.js 앱을 식별하는 가상 폴더 이름(예: https://mynodeapp.com/mynodeapp/fetch-members )이 포함된 요청에 URL을 적용할 수 있습니다.그런 다음 다음 .htaccess 파일에 다음과 같은 서버 지시 코드를 추가합니다.

RewriteEngine On
RewriteRule ^mynodeapp/(.*) https://localhost:3001/$1 [P]

따라서 Node.js 요청은 이러한 방식으로 Node 응용 프로그램에 대해 지정된 포트(예: 여기 예에서는 3001)를 통해 해당 웹 응용 프로그램의 Node.js 서버로 이동합니다.]

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

노드의 다른 비백엔드 사용은 자바스크립트 V8 엔진과 같은 노드의 기능 중 하나 또는 다른 하나를 이용합니다.예를 들어 프런트엔드 빌드 도구 Grunt Gulp는 프런트엔드 Node.js 앱을 사용하여 SAS를 CSS로 변환하도록 코딩할 수 있는 빌드 스크립트를 처리하고, CSS/JS 파일을 최소화하며, 이미지 크기 또는 이미지 로드를 최적화하고, 단일 페이지 응용 프로그램 사이트에서 페이지 상태를 새로 고치기 위한 페이지 상태 HTML 파일을 생성합니다.그러나 이러한 종류의 작업은 현대 웹 애플리케이션을 위한 효율적인 백엔드 프로세스를 만드는 데 주로 사용되는 것이 아니라 단지 부산물로 노드를 사용하는 것입니다.

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

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

제 생각에 문제는 "웹 서버" 또는 "웹 애플리케이션 서버"의 용어가 JEE 세계와 오늘날의 자바스크립트 프레임워크만큼 모듈화되지 않은 제품에 의해 지배된다는 것입니다. 이는 결국 어느 정도 자유롭게 결합될 수 있습니다.

웹을 통해 복잡한 애플리케이션을 제공할 수 있는 기술이 웹 서버 또는 웹 애플리케이션 서버라고 불리지 않을 이유가 없습니다!

만약 당신이 결합한다면, Nuxt를 프론트엔드로 하고 Footers를 백엔드로 한다고 합시다. 당신은 REST API와 서버 측 렌더링된 UI를 제공하는 백엔드를 갖게 될 것입니다!

물론 정적 콘텐츠를 제공하는 데 사용할 수도 있습니다. 그러면 웹 서버라고 부르거나 전체 응용 프로그램을 만들고 제공하는 데 사용할 수도 있습니다. 그런 다음 웹 응용 프로그램 서버라고 부르겠습니다.

기능 또는 품질의 결합이 목적을 달성하는 데 도움이 됩니다. 그렇죠? 안정성, 확장성 등의 기능은 시간이 지남에 따라 IMHO 기술에 추가될 것입니다.지금으로서는, 그것들은 여전히 꽤 새로운 것입니다.

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

방금 Node.js를 사용하여 Discords 봇을 만들었습니다.제 생각은 "와, 노드.js가 서버인가요?"였습니다.JS 도서관인 줄 알았어요!"아니면 틀로 생각할 수도 있었을 겁니다.

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

", 과은같명내렸니습령을경다:▁command내니렸습▁the▁in▁issued"라는 명령을 내렸습니다.node index.js

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

Nodejs는 매우 멋지고 가벼운 런타임 환경으로 취급되며 노드 에코시스템에서 npm이라는 훌륭한 패키지 관리자로 구성됩니다.전용 포트에 사용되는 익스프레스 프레임워크를 사용하여 REST API, 웹 애플리케이션 서버를 스핀업할 수 있습니다.웹 서버의 주요 의제는 계층 7 로드 밸런싱 장치 및 프록시 서버 역할을 하는 것이지만, 그 위에 웹 서버를 설치할 필요는 없었습니다.산업 표준에 따르면 가장 일반적으로 사용되는 웹 서버는 안정성 때문에 nginx입니다.노드 라이브러리와 익스프레스 프레임워크를 사용하여 http 프록시 서버를 구성할 수 있습니다.

언급URL : https://stackoverflow.com/questions/9462356/can-we-say-node-js-is-a-web-server

반응형