So Unique About Node.js은 (는) 무엇 이죠? [닫은]


48

최근 Node.js에 대한 찬사가 많이있었습니다. 네트워크 응용 프로그램에 많이 노출 된 개발자는 아닙니다. Nodes.js에 대한 거의 모든 이해에서 그 강점은 다음과 같습니다. 이벤트 연결을 제공하는 여러 연결을 처리하는 스레드는 하나뿐입니다.

그러나 예를 들어 Java의 경우 NIO / AIO를 사용하여 하나의 스레드 만 만들 수 있습니다.이 스레드를 사용하여 여러 연결을 처리하고 데이터를 구현하는 이벤트 기반 아키텍처를 제공합니다. 처리 논리 (콜백 등을 제공하여 그렇게 어렵지 않아야 함)?

JVM이 V8보다 훨씬 성숙한 VM이고 (더 빨리 실행되기를 기대합니다) 이벤트 기반 처리 아키텍처는 만들기 어려운 것이 아닌 것 같으므로 Node.js가 왜 그렇게 많은 관심을 끌고 있는지 잘 모르겠습니다. 중요한 점을 놓쳤습니까?


3
왜 다운 다운되었는지 궁금합니다 ...이 질문은 프로그래밍 토론에 가깝기 때문에 스택 오버 플로우에 넣지 않았습니다. 또한 비슷한 주제를 검색하려고했지만 Nodes.js의 강도에 대한 정보 만 찾았지만 문제는 "강도"가 왜 그렇게 독창적인지 이해하지 못하는 것입니다 (아직 찾을 수 없음)
Adrian Shum

6
Java로 해당 패턴을 구현하십시오. 물론 작동합니다. 그러나 당신은 한 가지를 보게 될 것입니다 : 그것은 자바에서 매우 장황하게 보일 것입니다. 거의 항상 새로운 클래스를 만드는 것을 의미하는 수많은 콜백이 필요합니다. 사소한 이쑤시개처럼 들릴 수도 있지만, 큰 프로그램에서는 추악하고 다루기 힘들 정도로 빠르게 얻을 수 있습니다.
Joachim Sauer 2018 년

6
Javascript 콜백은 다루기 어려워지는 경향이 있으며 이러한 스파게티는 Javascript IMO보다 Java에서 디버깅 및 리팩토링하기가 훨씬 쉽습니다.
funkybro

5
@AdrianShum : 슬래시 도트 효과. 그룹의 사고 방식에 맞지 않는 것은 마이크로 소프트를 찬양하는 것처럼 하향식이 될 것입니다.
gbjbaanb

3
과대 광고를 언급 한 사람이없는 것에 놀랐습니다.
deadalnix

답변:


33

그 개념은 실제로 많은 언어로 구현 될 수 있지만 (그리고 dodgy_coder가 언급했듯이, 루비와 파이썬에서는 적어도 구현 된 것입니다.)

사실 Java에는 비 차단 IO API가 있습니다. 따라서 비 차단 방식으로 원시 디스크 / 네트워크 IO를 수행 할 수 있습니다. 그러나 IO를 래핑 하거나 처리 하는 모든 API 는 비 차단 방식으로 구현해야합니다. 모든 XML 파서, 모든 데이터베이스 드라이버, 모든 파일 형식 변환기는 비 차단 IO를 지원하도록 작성해야합니다. 단일 라이브러리가이 패턴으로 블로킹되면 서버 성능이 저하됩니다.

인기를 위해 노력하고 모든 라이브러리 : 그것은 항상 그런 식으로 설계 되었기 때문에 Node.js를, 즉 도서관 인프라를 가지고 있다 비동기 API를 제공하거나 사용하지 것이다.


18
네. 다시 말해 Node.js의 가장 중요한 강점은 ECMAScript의 가장 중요한 약점입니다. Node.js 개발자는 모든 휠을 재창조해야했기 때문에 올바른 방식으로 재창조 할 수있었습니다.
Jörg W Mittag 2018 년

4
내가 아는 한 ECMAScript는 항상 임베디드 언어로 설계되었으므로 어떤 종류의 OS 레벨 API도 필요하지 않았다 (네트워크 IO도 대부분 추상화되었다). 그 부족은 실제로 Node.js의 이점이었습니다.
Joachim Sauer 2018 년

"인기가되기 위해 노력하는 모든 라이브러리는 비동기 API를 제공해야합니다. 그렇지 않으면 사용되지 않을 것입니다." Node.js에서 XML 구문 분석 및 DB 액세스와 같은 비동기 API가 제공되는 방법에 대해 살펴볼 리소스가 있습니까?
Adrian Shum

1
@AdrianShum은 일반적으로 이벤트 중심 프로그래밍 예제를 찾습니다. 특정 구현은 여러 언어로 볼 수 있습니다. Node.js를 모듈 외에, 당신은 파이썬에서 트위스트의 예에서 볼 수 있었다 twistedmatrix.com/trac/wiki , 펄에서 POE 예 poe.perl.org , 루비는 EventMachine있다 github.com/eventmachine/eventmachine
mghicks

19

아마도 주된 이유는 JavaScript를 사용하여 웹 서버, 웹 응용 프로그램 또는 웹 서비스와 같은 서버 쪽 구성 요소를 작성하기 때문입니다. 이는 전통적인 프론트 엔드 (클라이언트 측) 개발 언어 JavaScript를 서버 측 언어와 통합합니다.

원자로 패턴을 사용하는 비 차단이라는 사실은 독특하지 않습니다. 예를 들어 Ruby의 EventMachine 또는 Python 's Twisted와 같은 다른 언어 및 프레임 워크를 사용하기 전에 수행되었습니다.


5
거의 기술은 독특한 기능을 가지고, 고유성은 모든 기능을 자신의 특정 조합에서 온다
JK.

1
동의, 모든 주요 언어로 지원하는 라이브러리 목록이 있습니다 ... Wikipedia의 리액터 패턴
dodgy_coder

10

내가 줄 세 가지 주요 이유는 다음과 같습니다.

  1. 비 차단 IO / 비동기 IO. 이것은 웹과 이전 포스터의 모든 곳에서 해시됩니다. 내가 기여할 한 가지는 비동기 동작을 명시 적으로 가정하도록 코드를 설계하면 컴파일러 엔진이 하드웨어를 최대화하는 데 도움이된다는 것입니다. 그렇습니다. 많은 JIT 컴파일러와 하이퍼 스레딩 프로세서는 동기 코드를 사용하여 실행을 병렬화합니다. 물론 이것은 최선의 노력입니다. 반대로, 비동기 애플리케이션을 명시 적으로 빌드하면 엔진과 하드웨어가 코드의 실행 시간을 최대화 할 수 있습니다. 분명히, 나는 이것을 증명하기 위해 정량화 할 수있는 데이터가 없지만, 그렇게 생각하기 위해 따뜻한 느낌을줍니다.

  2. 클라이언트와 서버를위한 단일 코드베이스. 여기에는 여러 가지 장점이 있습니다. 비즈니스 로직을 서버에서 클라이언트로 이동할 수 있으므로 데이터 센터 비용을 최적화 할 수 있습니다. 비즈니스 로직 / 데이터 유효성 검사 재사용 지원; 제품을 지원하기 위해 존재해야하는 개발자 기술의 복잡성을 줄입니다 (Python 및 Javascript).

  3. 진입 장벽이 낮습니다. 여러면에서 Javascirpt는 Basic, Pascal 및 Perl과 비슷합니다. 코드 작성을 시작하는 것은 매우 쉬우 며 많은 도메인 지식이 필요하지 않습니다. 또한 더 많은 개발자를 유치하고 프로젝트를 강화함으로써 개발 비용을 절감 할 수 있습니다. [물론 저 기능 개발자를 제거하기 위해서는 프로그래밍 언어가 어려워 야한다고 생각하는 이데올로그를 지나야합니다.]


jr로 노드 팀을 완전히 구축하는 것이 좋습니다. JS 개발자. 아키텍처는 더 많은 jr-grade 웹 / UI 프로젝트에서 고려해야 할 것이 아니며 JS는 결과를 상대적으로 얻을 수 있더라도 다른 언어와 마찬가지로 장거리 구축을 위해 정말 잘 시간이 걸립니다. 덜 복잡한 프로젝트에 대한 경험보다 낮은 수준의 경험에서 빠릅니다.
Erik Reppen

나는 @ErikReppen에 동의합니다. 주니어 개발자 (언어에 관계없이)로 구성된 건축 팀은 의자, 테이블 및 개집을 잘 만드는 목수를 사용하여 집을 디자인하고 건축하는 것과 같습니다.
와일드 카드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.