Node.js vs. Java : 개발자 마인드 셰어를위한 대결

컴퓨팅 역사에서 1995 년은 미친시기였습니다. 처음으로 자바가 등장한 후 자바 스크립트가 등장했습니다. 이름이 그들을 새로 분리 된 결합 된 쌍둥이처럼 보이게 만들었지 만 더 이상 다를 수는 없었습니다. 그중 하나는 컴파일되고 정적으로 형식화됩니다. 다른 하나는 해석되고 동적으로 입력됩니다. 이것은 Node.js 덕분에 충돌 과정으로 전환 된이 두 개의 격렬하게 구별되는 언어 간의 기술적 차이의 시작일뿐입니다.

그 당시에 살 수있을만큼 나이가 많았다면 자바의 초기 장대 한 정점을 기억할 것입니다. 실험실을 떠났고 과대 광고 측정기가 고정되었습니다. 모든 사람들은 그것을 컴퓨팅의 총체적 인수 이상으로 멈출 혁명으로 보았다. 그 예측은 부분적으로 만 정확했습니다. 오늘날 Java는 Android 휴대폰, 엔터프라이즈 컴퓨팅 및 Blu-ray 디스크와 같은 일부 임베디드 세계를 지배합니다.

그러나 모든 성공을 위해 Java는 데스크탑이나 브라우저에서 많은 견인력을 얻지 못했습니다. 사람들은 애플릿과 자바 기반 도구의 힘을 선전했지만 항상 이러한 조합을 엉망으로 만들었습니다. 서버는 Java의 최적의 장소가되었습니다.

한편, 프로그래머가 처음에 바보 쌍둥이라고 착각했던 것이 그 자체로 등장했습니다. 물론, 자바 스크립트는 몇 년 동안 HTML과 웹이 Borg를 세상에 끌어 올렸다는 태그를 붙였습니다. 그러나 그것은 AJAX로 바뀌 었습니다. 갑자기 멍청한 쌍둥이가 힘을 얻었다.

그런 다음 Node.js가 생성되어 속도로 개발자의 머리를 돌 렸습니다. 서버에서 JavaScript가 예상했던 것보다 빠를뿐만 아니라 Java 및 기타 옵션보다 빠르기도했습니다. 웹 페이지가 더 역동적으로 성장함에 따라 작고 빠르고 끝없는 데이터 요청의 꾸준한 다이어트는 Node.js를 더 일반적으로 만들었습니다.

20 년 전에는 상상도 할 수 없었을 지 모르지만, 준 쌍둥이는 이제 프로그래밍 세계를 장악하기위한 전투에 갇혀 있습니다. 한쪽에는 견고한 엔지니어링 및 아키텍처의 깊은 기초가 있습니다. 다른 한편으로는 단순성과 편재성이 있습니다. 구식 컴파일러 중심의 Java 세계가 그 기반을 유지할 것인가, 아니면 Node.js의 속도와 유연성이 JavaScript가 계속해서 모든 경로를 잡아 먹는 데 도움이 될까요?

Java가이기는 곳 : 견고한 기반

개발자들이 웃는 소리를들을 수 있습니다. 일부는 심지어 심부전으로 죽을 수도 있습니다. 예, Java에는 결함과 버그가 있지만 상대적으로 말하면 지브롤터의 바위입니다. Node.js에 대한 동일한 믿음은 몇 년이 걸리지 않습니다. 사실 JavaScript 팀이 Sun / Oracle이 Java Virtual Machine을 테스트하기 위해 개발 한만큼의 회귀 테스트를 작성하기까지는 수십 년이 걸릴 수 있습니다. JVM을 부팅하면 엔터프라이즈 서버를 장악하기로 결정한 견고한 큐레이터로부터 20 년의 경험을 얻게됩니다. 

JavaScript 세계는 빠르게 따라 잡고 있습니다. 전체 웹의 상당 부분이 자바 스크립트 실행 엔진에 의존 할 때 수많은 개발자 시간이 모든 가장자리를 다듬는 데 들어갑니다. 그러나 새로운 기능이 개발자 기반이 흡수 할 수있는 것보다 빠르게 확산 될 수 있기 때문에 모든 혁신에는 단점이 있습니다. 구식 개발자들은 종종 새로운 ECMAScript 구문 향상으로 채워진 코드에 혼동을 겪습니다.이 새로운 코드는 일부 오래된 브라우저에서 조용히 충돌합니다. CoffeeScript 및 JSX와 같은 혁신적인 전 처리기의 끝없는 공급은 이러한 기능을 원하는 개발자에게 유용 할 수 있지만 나머지 사람들이 임의의 파일을 열고 즉시 이해하기 어렵게 만듭니다.

Java에는 새로운 기능과 옵션이 있지만 대부분 안정적인 플랫폼입니다. 따라서 오래 지속될 무언가를 구축하는 개발자의 삶이 훨씬 쉬워집니다.

Node.js가이기는 곳 : 유비 쿼티

Node.js 덕분에 JavaScript는 서버와 브라우저에서 홈을 찾습니다. 하나를 위해 작성한 코드는 둘 다에서 동일한 방식으로 실행될 가능성이 높습니다. 인생에서 보장되는 것은 없지만 이것은 컴퓨터 비즈니스에서 얻는 것만 큼 가깝습니다. 클라이언트 / 서버 분할의 양쪽에 JavaScript를 고수하는 것이 Java로 한 번, JavaScript로 다시 작성하는 것보다 훨씬 쉽습니다. Java로 작성한 비즈니스 로직을 이동하기로 결정한 경우 수행해야 할 것입니다. 브라우저에 서버. 또는 사장님이 브라우저 용으로 구축 한 로직을 서버로 옮기라고 주장 할 수도 있습니다. 어느 방향 으로든 Node.js와 JavaScript를 사용하면 코드를 훨씬 쉽게 마이그레이션 할 수 있습니다.

이 세상에서 노드의 리드는 확장되고있는 것 같습니다. React와 같은 가장 정교한 웹 프레임 워크는 마지막 순간에 코드를 서버에서 실행할 것인지 클라이언트에서 실행할 것인지 결정합니다. 언젠가는 클라이언트에서 실행되고 다른 날에는 서버에서 실행됩니다. 일부 스마트 로직은로드 또는 스페어 RAM 또는 다른 것을 기반으로 즉석에서 결정을 내립니다. 일부 프레임 워크는 JavaScript가 실행되는 쿼리로 데이터베이스에 제공됩니다. 코드는 어디에서나 실행될 수 있으며 엽서를 집으로 보내지 않기 때문에 유지하기가 점점 더 어려워집니다. 세부 사항에 대해 생각할 필요가 없기 때문에 행복하십시오.

Java가이기는 곳 : 더 나은 IDE

Java 개발자는 디버거, 디 컴파일러 및 서버와 잘 통합 된 세 가지 최고의 도구 인 Eclipse, NetBeans 또는 IntelliJ를 보유하고 있습니다. 각각은 수년간의 개발, 전용 사용자 및 플러그인으로 가득 찬 견고한 생태계를 가지고 있습니다.

한편, 대부분의 Node.js 개발자는 명령 줄에 단어를 입력하고 선호하는 텍스트 편집기에 코드를 입력합니다. 예, Atom과 같은 일부 최고의 텍스트 편집기에는 거의 모든 작업을 수행하는 정교한 플러그인 모음이 있지만 Node.js가 Eclipse보다 더 오래된 학교 인 것처럼 느껴집니다. 곧 마우스를 Atari 조이스틱으로 교체 할 예정입니다.

일부 개발자는 Eclipse 또는 Visual Studio를 사용하며 둘 다 Node.js를 지원합니다. 물론 Node.js에 대한 관심이 급증하면서 IBM의 Node-RED와 같은 일부 도구는 흥미로운 접근 방식을 제공하지만 여전히 Eclipse 또는 IntelliJ만큼 완벽하거나 지배적 이기에는 먼 길입니다.

이상한 점은 개발자가 이러한 도구를 사용하지 않는 것 같습니다. 명령 줄은 35 년 전에 Mac이 등장하면서 사라질 예정 이었지만 Node.js 개발자에게 아무도 말하지 않았습니다. 옵션이 있습니다. 예를 들어 WebStorm은 많은 명령 줄 빌드 도구를 통합하는 JetBrains의 견고한 상용 도구입니다.

물론 코드를 편집하고 저글링하는 IDE를 찾고 있다면 Node.js를 지원하는 새로운 도구로 충분합니다. 그러나 심장 외과 의사가 가슴을 여는 것처럼 실행중인 소스 코드에서 작업하는 동안 편집 할 수 있도록 IDE에 요청하면 Java 도구가 훨씬 더 강력합니다. 그것은 모두 거기에 있고 모두 지역적입니다.

Node.js가이기는 곳 : 데이터베이스 쿼리

CouchDB 및 MongoDB와 같은 일부 최신 데이터베이스에 대한 쿼리는 JavaScript로 작성됩니다. Node.js와 데이터베이스 호출을 혼합하면 구문 차이를 기억할 필요는 물론 기어 시프 팅이 필요하지 않습니다. 

한편, 많은 Java 개발자는 SQL을 사용합니다. Java DB (이전 Java 개발자를 위해 Java로 작성된 데이터베이스 인 Derby)를 사용하는 경우에도 SQL로 쿼리를 작성합니다. 당신은 그들이 단순히 자바 메소드를 호출 할 것이라고 생각할 것이지만 당신은 틀렸을 것입니다. SQL로 데이터베이스 코드를 작성한 다음 Derby가 SQL을 구문 분석하도록해야합니다. SQL은 좋은 언어이지만 Java와는 완전히 다르며 많은 개발 팀이 SQL과 Java를 작성하기 위해 서로 다른 사람이 필요합니다.

설상가상으로 많은 Java 코더는 정교한 라이브러리와 체계를 사용하여 SQL 쿼리의 데이터를 Java 개체로 변환하여 템플릿으로 다시 캐스팅 할 수 있습니다. 그것은 미친 과정이며 궁극적으로 꽤 낭비입니다.

Java가이기는 곳 : 유형 

많은 진지한 프로그래머가 단순성과 안전성 모두를 위해 정적으로 형식화 된 코드를 선호하는 경향이 있기 때문에 많은 입문 프로그래밍 과정에서 Java를 계속 사용합니다. 컴파일러가 명백한 버그를 포착 한 후에 코드는 더욱 엄격 해집니다.

하지만 자바 스크립트가 따라 잡고 있으며 일부 개발자는 브라우저의 자바 스크립트 스택에서 실행되는 무언가를 뱉어 내기 전에 모든 유형 검사 마법을 적용하는 정적으로 유형이 지정된 자바 스크립트 수퍼 세트 인 TypeScript로 전환하고 있습니다. 유형을 좋아한다면 JavaScript를 수용하기에 충분할 수 있습니다. 또는 모방을 진심으로 아첨하는 형태로 인식하고 처음부터 정적 타이핑을 수용 한 Java를 고수 할 수 있습니다.

Node.js가이기는 곳 : 구문 유연성

JavaScript는 원치 않는 경고 상자를 표시하고 양식 입력을 다시 확인하는 간단한 언어였습니다. 그런 다음 개발자 커뮤니티는 브라우저 용으로 변환 할 수있는 다양한 버전의 언어를 만들었습니다. 깔끔한 구두점에 대한 취향을 만족시키기 위해 설계된 몇 가지 다양한 구문을 제공하는 CoffeeScript 군중이 있습니다. 더 깔끔하기 때문에 HTML과 JavaScript를 함께 혼합하는 React / Vue 군중이 있습니다. 타입 애호가를위한 TypeScript와 기능적 언어 애호가를위한 LiveScript가 있습니다.

Java 세계에서도 엄청난 양의 창의력을 발견 할 수 있지만 어떤 이유로 많은 전처리기로 표현되지 않습니다. Kotlin, Scala 및 Clojure와 같은 여러 언어가 JVM 용 바이트 코드로 바뀌었지만 어떻게 든 별도의 언어로 구별 될만큼 충분히 다르게 느껴집니다. 모든 전처리 기는 코드를 공식화하거나 구두점을 지정하는 다양한 방법을 좋아하는 JavaScript 프로그래머에게 삶의 즐거움을 더 해줍니다.

Java가이기는 곳 : 간단한 빌드 프로세스 

Ant 및 Maven과 같은 복잡한 빌드 도구는 Java 프로그래밍에 혁명을 일으켰습니다. 하지만 문제는 하나뿐입니다. 프로그래밍 논리를 지원하도록 설계되지 않은 데이터 형식 인 XML로 사양을 작성합니다. 물론 중첩 된 태그로 분기를 표현하는 것은 상대적으로 쉽지만, 단순히 무언가를 빌드하기 위해 Java에서 XML로 기어를 전환하는 것은 성가신 일이 있습니다. JavaScript를 사용하면 전환 장치가 없습니다. 

Node.js는 더 간단한 빌드를 사용했습니다. 코드를 편집 한 다음 "실행"을 누르십시오. 그때였습니다. Node 개발자가 프로세스를 "개선"함에 따라 JavaScript의 선호하는 하위 방언을 실행 가능한 것으로 바꾸는 전처리기를 추가했습니다. 그런 다음 노드 패키지 관리자는 올바른 라이브러리를 찾아야합니다. 대부분의 경우 이것은 작동하지만 때로는 그렇지 않은 경우 별도의 단계에서 직접 구축하고있는 일부 아티팩트의 올바른 버전 번호를 찾는 데 시간을 소비합니다. 아티팩트 저장소에 실수를 저지르면 버전 번호가 찍히고 주행 바퀴를 다시 돌려야합니다.

Java에는 Node.js 메소드와 매우 유사한 복잡한 빌드 프로세스도 있지만 더 이상 복잡해지지 않은 것 같습니다. 어쨌든 Maven과 Ant는 이제 Java 기반의 일부처럼 보입니다. 거친 가장자리의 많은 부분이 오래 전에 사라졌으며 빌드가 더 자주 작동합니다. 빌드 번거 로움에 대한 절대적인 척도가 있다면 두 언어가 비슷할 수 있지만 JavaScript 복잡성의 급속한 폭발은 Java가 승리한다는 것을 의미합니다.

관련 비디오 : Node.js 팁과 트릭

이 설명자 비디오에서는 노드 개발 경험을 향상시킬 수있는 몇 가지 기술을 배웁니다.

Node.js가이기는 곳 : JSON

데이터베이스가 답을 내 놓으면 Java는 결과를 Java 객체로 변환하기 위해 정교한 길이로 이동합니다. 개발자는 POJO 매핑, Hibernate 및 기타 도구에 대해 몇 시간 동안 논쟁 할 것입니다. 구성하는 데 몇 시간 또는 며칠이 걸릴 수 있습니다. 결국 Java 코드는 모든 변환 후에 Java 객체를 가져옵니다. 그리고 구성과 관련하여 Java 세계는 여전히 XML에 집착하고 개발자에게 더 많은 이유를 제공하기 위해 두 가지 주요 파서를 제공합니다.

오늘날 많은 웹 서비스와 데이터베이스는 JavaScript의 자연스러운 부분 인 JSON으로 데이터를 반환합니다. JSON은 이제 매우 일반적이고 유용하여 많은 Java 개발자가이 형식을 사용하며 Java 라이브러리로도 여러 가지 훌륭한 JSON 파서를 사용할 수 있습니다. 그러나 JSON은 JavaScript의 기초의 일부입니다. 라이브러리가 필요하지 않습니다. 모든 것이 준비되어 있습니다.

Java의 장점 : 원격 디버깅

Java는 시스템 클러스터를 모니터링하는 놀라운 도구를 자랑합니다. JVM에 대한 깊은 후크와 병목 현상과 실패를 식별하는 데 도움이되는 정교한 프로파일 링 도구가 있습니다. Java 엔터프라이즈 스택은 지구상에서 가장 정교한 서버 중 일부를 실행하며 이러한 서버를 사용하는 회사는 최고의 원격 분석을 요구했습니다. 이러한 모든 모니터링 및 디버깅 도구는 매우 성숙하고 배포 할 준비가되었습니다.

Node.js가이기는 곳 : 데스크톱

일부 Java 애플릿이 실행 중일 수 있으며 클릭하여 실행할 수있는 일부 Java JAR 파일을 여전히 유지 관리하지만 대부분의 경우 데스크탑 세계는 대부분 Java가 없습니다. 반면에 JavaScript는 브라우저가 데스크톱에서 대부분의 역할을 차지함에 따라 점점 더 많은 작업을 캡처합니다. Microsoft가 브라우저에서 작동하도록 Office를 다시 작성했을 때 주사위가 캐스팅되었습니다. 여전히 궁금하다면 웹 코드를 독립 실행 형 데스크톱 앱으로 바꾸는 Electron과 같은 흥미로운 옵션이 있습니다.

자바가이기는 곳 : 핸드 헬드

Android 앱은 종종 Java로 작성되며 새로운 휴대 전화의 90 %는 일부 버전의 Android를 실행합니다. 많은 사람들이 더 이상 데스크톱을 사용하지 않습니다. 전화기가 모든 것에 충분하기 때문입니다.

물론 약간의 혼란이 있습니다. 많은 개발자가 iPhone과 Android 모두에서 모바일 브라우저를 대상으로하는 Node.js 웹 앱을 작성하고 있습니다. 이것이 잘 수행되면 성능이 충분히 좋은 경우가 많습니다.