나는 이런 종류의 것들에 익숙하지 않지만 최근에는 Node.js 가 얼마나 좋은지에 대해 많이 들었습니다 . jQuery와 JavaScript로 작업하는 것을 얼마나 좋아하는지 고려할 때 Node.js를 언제 사용할지 결정하는 방법을 궁금해 할 수는 없습니다. 내가 염두에두고있는 웹 응용 프로그램은 Bitly 와 비슷 합니다. 콘텐츠를 가져 와서 보관하십시오.
지난 며칠 동안 해왔 던 모든 숙제에서 다음과 같은 정보를 얻었습니다. Node.js
- 일반 웹 서버로 실행할 수 있고 JavaScript 프로그램을 실행할 수있는 명령 줄 도구입니다.
- 위대한 V8 JavaScript 엔진을 사용합니다
- 동시에 여러 가지 일을해야 할 때 매우 좋습니다
- 이벤트 기반이므로 멋진 Ajax 와 같은 모든 것을 서버 측에서 수행 할 수 있습니다.
- 브라우저와 백엔드간에 코드를 공유 할 수 있습니다
- 우리는 MySQL과 대화 할 수 있습니다
내가 찾은 소스 중 일부는 다음과 같습니다.
Node.js가 Amazon EC2 인스턴스에서 거의 기본적으로 실행될 수 있다는 점을 고려하여 PHP , Python 및 Ruby 와 같은 강력한 왕과는 달리 Node.js에 어떤 유형의 문제가 필요한지 이해하려고합니다. . 나는 그것이 언어에 대한 전문 지식에 달려 있다는 것을 이해하지만 내 질문은 더 일반적인 범주에 속합니다. 특정 프레임 워크를 사용할 때와 어떤 유형의 문제가 특히 적합합니까?
답변
Node.js에 대한 멋진 점을 요약 한 훌륭한 작업을 수행했습니다. 내 느낌은 Node.js가 브라우저에서 서버로의 지속적인 연결을 유지하려는 응용 프로그램에 특히 적합하다는 것입니다. “long-polling” 이라는 기술을 사용하여 실시간으로 사용자에게 업데이트를 보내는 응용 프로그램을 작성할 수 있습니다. Ruby on Rails 또는 Django 와 같은 많은 웹 거대 기업에서 긴 폴링을 수행하면 각 활성 클라이언트가 하나의 서버 프로세스를 소비하기 때문에 서버에 막대한 부하가 발생합니다. 이 상황은 타르 핏 공격에 해당합니다. Node.js와 같은 것을 사용할 때 서버는 열린 각 연결에 대해 별도의 스레드를 유지할 필요가 없습니다.
이는 Node.js에서 많은 클라이언트에게 서비스를 제공하기 위해 시스템 리소스를 거의 사용하지 않는 브라우저 기반 채팅 응용 프로그램 을 만들 수 있음을 의미합니다 . 이런 종류의 긴 폴링을 원할 때마다 Node.js는 훌륭한 옵션입니다.
Ruby와 Python에는 모두 이러한 종류의 작업을 수행 할 수있는 도구 ( 이벤트 머신 과 트위스티드 )가 있지만 Node.js는 예외적으로 잘 수행합니다. JavaScript는 콜백 기반 동시성 모델에 매우 적합하며 여기에서 뛰어납니다. 또한 클라이언트와 서버 모두에서 기본 JSON으로 직렬화 및 역 직렬화 할 수 있다는 것은 매우 멋진 일입니다.
나는 여기에 다른 답변을 읽을 수 있기를 기대합니다. 이것은 환상적인 질문입니다.
Node.js는 클라이언트 / 서버 간격에 걸쳐 많은 코드를 재사용하는 상황에서도 유용하다는 점을 지적 할 가치가 있습니다. 유성 프레임 워크는 정말 쉽게이를 만들고, 사람들의 많은이 웹 개발의 미래가 될 수 있습니다 제안합니다. 경험상 Meteor에서 코드를 작성하는 것은 정말 재미 있다고 말할 수 있습니다.이 중 상당 부분은 데이터를 재구성하는 방법에 대해 생각하는 데 적은 시간을 소비하므로 브라우저에서 실행되는 코드를 쉽게 사용할 수 있습니다 그것을 조작하고 다시 전달하십시오.
다음은 피라미드 및 롱 폴링에 관한 기사입니다.이 글은 gevent의 도움을 받아 TicTacToe 및 Long Polling with Pyramid 를 통해 매우 쉽게 설정할 수 있습니다.
답변
Node.js는 온라인 게임, 협업 도구, 대화방 또는 한 명의 사용자 (또는 로봇 또는 센서)가 해당 응용 프로그램으로 수행하는 작업이 다른 사용자에게 즉시 보여 져야하는 실시간 응용 프로그램에 가장 적합하다고 생각합니다. 페이지 새로 고침없이
또한 Node.js와 함께 Socket.IO를 사용하면 긴 폴링에서 가능한 것보다 실시간 대기 시간이 훨씬 줄어 듭니다. Socket.IO는 최악의 시나리오로 긴 폴링으로 돌아가고 대신 웹 소켓이나 플래시를 사용할 수 있습니다.
그러나 스레드로 인해 코드가 차단 될 수있는 상황은 Node.js로 더 잘 해결할 수 있다고 언급해야합니다. 또는 이벤트 중심의 응용 프로그램이 필요한 상황.
또한 Ryan Dahl은 Node.js 벤치 마크에서 기존의 오래된 HTTP 요청에 대해 Nginx와 거의 비슷한 벤치 마크에 참여한 적이 있다고 말했습니다. 따라서 Node.js로 빌드하면 일반 리소스를 매우 효과적으로 제공 할 수 있으며, 이벤트 중심의 자료가 필요할 때 처리 할 수 있습니다.
또한 항상 모든 JavaScript입니다. 전체 스택에 Lingua Franca.
답변
NodeJS를 사용해야하는 이유 :
-
Javascript를 실행하므로 서버와 클라이언트 에서 동일한 언어 를 사용하고 이들 사이에 코드를 공유 할 수도 있습니다 (예 : 양식 유효성 검사 또는 양쪽에서 뷰를 렌더링하기 위해).
-
단일 스레드 이벤트 기반 시스템은 빠르게 기존의 멀티 스레드에 비해 한 번에 요청을 많이 처리하는 경우에도, 또한 간단한 자바 또는 ROR 프레임 워크.
-
웹 개발을위한 명령 줄 도구뿐만 아니라 클라이언트 및 서버 측 라이브러리 / 모듈을 포함하여 NPM을 통해 액세스 할 수있는 꾸준한 패키지 풀 . 이들 중 대부분은 github에서 편리하게 호스팅되며 때로는 문제를보고하고 몇 시간 내에 문제를 해결할 수 있습니다! 표준화 된 문제보고 및 손쉬운 분기와 함께 모든 것을 한 지붕 아래에 두는 것이 좋습니다.
-
태스크 실행기, 축소 기, 미화 기, 린터, 전 처리기, 번 들러 및 분석 프로세서를 포함하여 Javascript 관련 도구 및 기타 웹 관련 도구 를 실행하는 사실상의 표준 환경이되었습니다 .
-
프로토 타이핑, 민첩한 개발 및 신속한 제품 반복에 매우 적합합니다 .
NodeJS를 사용 하지 않는 이유 :
-
컴파일 타임 유형 검사가없는 Javascript를 실행합니다. 크고 복잡한 안전에 중요한 시스템 또는 여러 조직 간의 협업을 포함한 프로젝트의 경우 계약 인터페이스 를 장려 하고 정적 유형 검사를 제공 하는 언어를 사용 하면 장기적으로 디버깅 시간 (및 폭발 )을 줄일 수 있습니다. (JVM이에 붙어 있지만
null
핵 원자로에는 Haskell을 사용하십시오.) -
또한 NPM의 많은 패키지는 약간 원시적 이며 여전히 빠른 개발 중입니다. 이전 프레임 워크를위한 일부 라이브러리는 10 년 동안 테스트 및 버그 수정을 거쳤으며 현재까지 매우 안정적 입니다. Npmjs.org는 패키지를 평가하는 메커니즘이 없기 때문에 패키지 의 확산이 거의 일어나지 않아서 더 많은 비율이 유지되지 않습니다.
-
중첩 된 콜백 지옥. (물론 이것에 대한 20 가지 솔루션 이 있습니다 …)
-
꾸준히 증가하는 패키지 풀은 하나의 NodeJS 프로젝트가 다음 프로젝트와 크게 다르게 보일 수 있습니다 . 사용 가능한 많은 옵션 (예 : Express / Sails.js / Meteor / Derby ) 으로 인해 구현에있어 다양성이 다양 합니다. 이로 인해 새로운 개발자가 Node 프로젝트에 참여하기가 더 어려워 질 수 있습니다. 기존 프로젝트에 참여하는 Rails 개발자 와는 대조적으로 : 모든 Rails 앱은 유사한 구조 를 사용하도록 권장되기 때문에 앱에 빠르게 익숙해 질 수 있어야합니다 .
-
파일을 다루는 것은 약간의 고통이 될 수 있습니다. 텍스트 파일에서 줄을 읽는 것과 같이 다른 언어로 사소한 것은 Node.js 와 관련이 있으며 이상이 80 + upvotes 인 StackOverflow 질문이 있습니다. CSV 파일에서 한 번에 하나의 레코드를 읽는 간단한 방법 은 없습니다 . 기타.
나는 NodeJS를 좋아합니다. 빠르고 신나고 재미 있습니다. 그러나 그것이 교정 가능성에 거의 관심이 없다는 것이 걱정됩니다. 우리가 궁극적으로 두 세계의 최고를 합칠 수 있기를 바랍니다. 나는 미래에 노드를 대체 할 것이 무엇인지보고 싶어합니다 … 🙂
답변
짧게하려면 :
Node.js는 동시 연결이 많은 응용 프로그램에 매우 적합하며 함수 실행 중에 이벤트 루프 (다른 모든 클라이언트와 함께)가 차단되므로 각 요청마다 CPU주기가 거의 필요하지 않습니다.
Node.js의 이벤트 루프에 대한 좋은 기사는 Mixu의 기술 블로그 : node.js 이벤트 루프 이해 입니다.
답변
Node.js를 사용한 실제 사례가 하나 있습니다. 내가 일하는 회사에는 간단한 정적 HTML 웹 사이트를 갖고 싶어하는 고객이 있습니다. 이 웹 사이트는 PayPal을 사용하여 하나의 품목을 판매하기위한 것이며 고객은 또한 판매 된 품목의 양을 보여주는 카운터를 원했습니다. 고객은이 웹 사이트를 방문 할 사람이 많을 것으로 예상했습니다. Node.js와 Express.js 프레임 워크를 사용하여 카운터를 만들기로 결정했습니다 .
Node.js 애플리케이션은 간단했습니다. Redis 데이터베이스 에서 판매 품목 수량을 가져 오고 품목 판매시 카운터를 늘리고 API 를 통해 사용자에게 카운터 값을 제공하십시오 .
이 경우 Node.js를 사용하기로 선택한 몇 가지 이유
- 매우 가볍고 빠릅니다. 3 주 동안이 웹 사이트를 방문한 횟수는 200000 회이며 최소한의 서버 리소스만으로도이 모든 것을 처리 할 수 있습니다.
- 카운터는 실시간으로 만들기가 정말 쉽습니다.
- Node.js는 쉽게 구성 할 수있었습니다.
- 무료로 사용할 수있는 많은 모듈이 있습니다. 예를 들어 PayPal 용 Node.js 모듈을 찾았습니다.
이 경우 Node.js는 훌륭한 선택이었습니다.
답변
노드를 사용하여 다음 프로젝트를 시작해야하는 가장 중요한 이유 …
- 모든 멋진 친구들이 여기에 있습니다 … 그래서 재미 있어야 합니다.
- 쿨러에서 행 아웃을하고 자랑 할 노드 모험을 많이 할 수 있습니다.
- 클라우드 호스팅 비용과 관련하여 페니 핀처입니다.
- Rails로 그렇게 했습니까?
- 당신은 IIS 배포를 싫어
- 기존 IT 작업이 다소 어려워지고 있으며 새롭고 빛나는 시작을 원합니다.
뭘 기대 할까 …
- 필요하지 않은 모든 서버 블로 트웨어없이 Express를 사용하여 안전하고 안전하게 느낄 수 있습니다.
- 로켓처럼 뛰며 잘 확장됩니다.
- 당신은 그것을 꿈꿉니다. 설치했습니다. 노드 패키지 repo npmjs.org 는 세계에서 가장 큰 오픈 소스 라이브러리 에코 시스템입니다.
- 중첩 된 콜백의 땅에서 뇌가 뒤 틀릴 것입니다 …
- … 약속 을 지키는 법을 배울 때까지 .
- Sequelize 와 Passport 는 새로운 API 친구입니다.
- 주로 비동기 코드를 디버깅하면 재미 있을 것 입니다.
- 모든 Noder가 Typescript 를 마스터하기위한 시간 .
누가 사용합니까?
- PayPal, Netflix, Walmart, LinkedIn, Groupon, Uber, GoDaddy, Dow Jones
- 이들이 Node로 전환 한 이유는 다음과 같습니다 .
답변
Silver Bullet과 같은 것은 없습니다. 모든 것은 관련 비용이 함께 제공됩니다. 기름진 음식을 먹는 것과 마찬가지로 건강에 해를 끼치며 건강한 음식에는 기름진 음식과 같은 향신료가 없습니다. 그들이 음식 에서처럼 건강이나 향신료를 원하는지 여부는 개인의 선택입니다. 특정 시나리오에서 Node.js를 사용하는 것과 같은 방법입니다. 앱이 해당 시나리오에 맞지 않으면 앱 개발을 위해 고려해야합니다. 나는 단지 내 생각을 동일하게 생각하고 있습니다.
Node.JS를 사용하는 경우
- 서버 측 코드에 CPU 사이클이 거의 필요하지 않은 경우. 다른 세계에서는 비 차단 작업을 수행하고 많은 CPU주기를 소비하는 무거운 알고리즘 / 작업이 없습니다.
- Javascript를 기반으로하고 클라이언트 측 JS처럼 단일 스레드 코드를 작성하는 데 익숙한 경우.
Node.JS를 사용하지 않을 때
- 서버 요청은 많은 CPU 소비 알고리즘 / 작업에 의존합니다.
Node.JS를 통한 확장 성 고려 사항
- Node.JS 자체는 기본 시스템의 모든 코어를 사용하지는 않으며 기본적으로 단일 스레드이므로 멀티 코어 프로세서를 활용하고 멀티 스레드로 만들려면 자체적으로 논리를 작성해야합니다.
Node.JS 대안
Node.JS 대신 사용할 다른 옵션이 있지만 Vert.x 는 꽤 유망한 것으로 보이며 polygot 및 더 나은 확장 성 고려 사항과 같은 추가 기능이 많이 있습니다.