인터넷은 급속한 발전의 시대에 있습니다. 서버사이드 개발자들은 언어를 선택할 때 매우 혼란스러워합니다. C, Java, Perl과 같은 오랫동안 지배적인 언어도 있고 Ruby와 같은 웹 개발에 중점을 둔 언어도 있습니다. , 클로저, 그리고 Go. 프로젝트가 잘 진행되고 있는 한, 귀하의 선택은 그다지 중요해 보이지 않을 것입니다.
그러나 새로운 웹 개발자가 올바른 선택을 하도록 하려면 어떻게 해야 할까요?
저는 PHP와 NodeJ라는 두 진영 사이에 전쟁을 일으키고 싶지 않습니다. 이 두 언어의 개발 상태를 비교해 보겠습니다.
PHP
Rasmus Lerdorf는 1994년에 PHP를 만들었습니다. 웹 서버(Apache, Ngix)에 설치된 구성 요소에 의해 실행됩니다.
PHP 코드는 HTML과 혼합될 수 있습니다. 초보자는 많은 연습 없이도 가치 있는 코드를 빠르게 작성할 수 있습니다. 이로 인해 PHP는 점점 더 대중화되었으며, 현재 PHP는 전 세계 서버의 80%에서 실행되고 있습니다. 전 세계 웹사이트의 4분의 1이 사용하는 콘텐츠 관리 시스템인 WordPress는 PHP로 작성되었습니다.
Node.js
Ryan Dahl은 2009년에 Node.js를 만들었습니다. 이는 Google의 V8 JavaScript 해석 엔진(Chrome 브라우저에서 클라이언트측 JavaScript 코드 실행을 담당함)을 기반으로 합니다. 다른 언어와 달리 Node.js에는 네트워크 요청 및 응답을 처리하기 위한 함수 라이브러리가 내장되어 있으므로 별도의 서버(Apache, Ngix)나 기타 종속성이 필요하지 않습니다.
Node.js는 새로운 것이지만 빠르게 큰 인기를 얻었습니다. Microsoft, Yahoo, LinkedIn 및 PayPal과 같은 많은 대기업에서 사용됩니다.
우리가 사랑하는 C#, Java, Ruby, Python, Perl, Erlang, C, Go, Dart, Scala, Haskell 등은 어떻습니까?
기사가 위에서 언급한 모든 언어의 다양한 매개 변수를 비교했다면 기사가 매우 길어질 것입니다. 프로그래머가 모든 프로그래밍 언어를 알 것이라고 기대하시나요? 이것은 분명히 불가능합니다. 주로 PHP와 Node.js를 비교했는데, 주된 이유는 다음과 같습니다.
우선 비교할 가치가 있습니다. 둘 다 오픈 소스이고 둘 다 웹 개발 전용이며 유사한 프로젝트에 사용할 수 있습니다.
PHP는 출시된 지 오래되었지만 Node.js가 이제 막 등장하여 점점 더 많은 주목을 받고 있습니다. PHP 프로그래머는 Node.js의 선전을 믿어야 할까요? 언어 전환을 고려해야 합니까?
저는 프로그래밍 언어를 이해하고 사랑하며 1990년대부터 PHP와 JavaScript를 사용해 왔으며 Node.js에 대한 몇 년간의 경험을 갖고 있습니다. 또한 다른 기술에도 손을 대었지만 여기서는 객관적인 평가를 할 수 없습니다.
그리고 얼마나 많은 언어를 비교하는지는 중요하지 않습니다. 왜냐하면 내가 그들의 언어를 언급하지 않았다고 불평하는 사람들이 항상 어딘가에 있기 때문입니다.
SitePoint 경쟁
프로그래머는 자신의 프로그래밍 기술을 향상시키는 데 많은 시간을 보냅니다. 어떤 사람들은 프로그래밍 언어 사이를 확장할 수 있는 능력을 가지고 있지만 더 높은 수준에 도달한 사람들은 여러 요인을 기반으로 스스로 선택합니다. 주관적인 측면에서는 기술적 결정을 발전시키고 방어하게 됩니다.
SitePoint Smackdowns는 "친구여, 당신에게 적합한 것을 선택하십시오"라는 관점을 취하지 않습니다. 개인적인 경험, 요구 사항 및 선호도를 바탕으로 추천해 드리겠습니다. 당신은 내가 말하는 모든 것에 동의하지 않을 수도 있지만 그것은 중요하지 않습니다. 중요한 것은 당신의 의견이 다른 사람들이 더 많은 정보를 바탕으로 선택하는 데 도움이 된다는 것입니다.
평가방법
다음은 PHP와 Node.js를 10회 비교한 내용입니다. 각 라운드에서는 모든 웹 기술에 적용할 수 있는 일반적인 개발 과제를 고려합니다. 우리는 너무 자세히 설명하지 않을 것입니다. 난수 생성기나 배열 정렬의 가치에 관심을 갖는 사람은 거의 없습니다.
가장 많은 라운드를 승리한 사람이 승자가 됩니다. 준비됐나요? 전투를 시작하자. . . . . .
1라운드: 시작
'Hello World' 웹페이지를 만드는 속도는 얼마나 되나요? PHP에서:
<?php echo 'Hello World!'; ?>
이 코드는 PHP 엔진에서 구문 분석할 수 있는 모든 파일(일반적으로 .php 접미사가 있는 파일)에 배치할 수 있습니다. 파일로 이동하려면 브라우저에 URL을 입력하기만 하면 됩니다.
물론 이것이 전부는 아닙니다. 이 코드는 PHP가 설치된 웹 서버에서만 실행됩니다(PHP에는 서버가 내장되어 있지만 보다 강력한 서버를 사용하는 것이 더 좋습니다). 대부분의 운영 체제는 Windows의 IIS, Mac 및 Linux의 Apache와 같은 서버 소프트웨어를 제공하지만 시작 및 구성이 필요합니다. 일반적으로 XAMPP와 같은 사전 구축된 설치 프로그램이나 Vagrant와 같은 가상 머신 이미지를 사용합니다. 더 쉬운 방법: 파일을 웹 호스트에 업로드하세요.
이에 비해 Node.js를 설치하는 것은 매우 쉽습니다. 설치 프로그램을 다운로드하거나 패키지 관리자를 사용할 수 있습니다. 다음으로 hello.js에서 웹페이지를 만들어 보겠습니다.
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World!'); }).listen(3000, '127.0.0.1');
브라우저에서 http://127.0.0.1:3000/에 접속하기 전에 터미널에 node hello.js를 입력해야 애플리케이션이 시작됩니다. 위의 다섯 줄의 코드를 사용하여 클라이언트 측 JavaScript 경험이 풍부한 사람이라도 이해하기 어려운 작은 웹 서버를 만들었습니다.
PHP가 개념적으로 더 간단하기 때문에 이번 라운드에서 승리했습니다. PHP 선언에 대해 약간의 지식이 있는 사람이라면 유용한 것을 개발할 수 있습니다. PHP에는 더 많은 소프트웨어 종속성이 있지만 초보자에게는 PHP 개념이 덜 번거롭습니다.
일부 JavaScript를 아는 것과 Node.js 애플리케이션을 개발하는 것은 서로 다릅니다. Node.js 개발 방법은 대부분의 서버 측 기술과 다릅니다. 먼저 종료 및 콜백 기능과 같은 꽤 복잡한 개념을 이해해야 합니다.
2차: 도움말 및 지원
공식 문서와 리소스(강좌, 포럼, 스택 오버플로)의 도움이 없으면 문제가 발생할 수 있습니다. PHP는 이번 라운드에서 쉽게 승리했습니다. 그녀는 광범위한 가이드와 20년 동안의 Q&A를 보유하고 있습니다. 당신이 무엇을 하고 싶어하든, 당신보다 먼저 같은 문제에 직면한 사람이 항상 있기 마련입니다.
Node.js에는 좋은 문서가 있지만 PHP보다 더 젊고 도움을 덜 제공합니다. JavaScript는 PHP만큼 오랫동안 시장에 나와 있었지만 주요 도움말은 브라우저용으로 개발되었기 때문에 기본적으로 도움이 되지 않습니다.
3차: 언어 문법
선언과 구조가 논리적이고 단순하며 사용하기 쉬운가요?
일부 언어 및 프레임워크와 달리 PHP는 특정 방식으로 작성하는 것을 제한하지 않으며 원하는 대로 수행할 수 있습니다. 몇 줄의 프로그램으로 시작한 다음 몇 가지 메서드를 추가하고 간단한 PHP4 패턴 객체를 작성하고 마지막으로 우아한 객체 지향 MVC 패턴 PHP5 애플리케이션을 작성할 수 있습니다. 귀하의 코드는 처음에는 혼란스러울 수 있지만, 작동할 것이며, 이해가 깊어질수록 더 좋아질 것입니다.
PHP의 구문은 버전마다 약간씩 조정될 수 있지만 일반적으로 이전 버전과의 호환성은 잘 이루어집니다. 그러나 불행하게도 이는 문제를 야기합니다. PHP는 혼란스럽습니다. 예를 들어 문자열의 문자 수를 계산하는 방법은 무엇입니까? 카운트인가요? str_len? 또는 strlen? 아니면 mb_strlen?PHP에 수백 개의 함수가 있고 명명 규칙이 완전히 일관되지 않을 수도 있습니다. 문서를 확인하지 않고도 몇 줄의 코드를 작성해 볼 수 있습니다.
JavaScript는 수십 개의 핵심 문만으로 비교적 간단합니다. 그러나 이 구문은 프로토타입 개체 모델이 접근하기 쉬워 보이지만 실제로는 그렇지 않기 때문에 개발자들로부터 종종 비판을 받습니다. 그리고 다양한 수학적 오류(0.1 0.2 != 0.3)와 유형 변환 혼란('4' 2 == '42' 및 '4' - 2 == 2)도 많은 불만을 불러일으켰지만 이러한 상황이 문제로 이어지는 경우는 거의 없습니다. 문제가 있나요? 대부분의 언어에는 이런 변명이 있습니다.
PHP에는 장점이 있지만 이번 라운드에서는 Node.js가 승리한다고 생각합니다. 그 이유는 다음과 같습니다.
JavaScript는 세상에서 가장 이해하기 어려운 언어입니다. 하지만 어느 날 깨달음을 얻고 개념을 이해하면 다른 언어는 너무 서툴다는 것을 알게 될 것입니다.
JavaScript 코드는 PHP보다 간단합니다. 예를 들어 더 이상 JSON이나 UTF-8을 처리할 필요가 없습니다
풀 스택 엔지니어는 클라이언트 측과 서버 측 모두에서 JavaScript를 사용할 수 있습니다. 뇌는 앞뒤로 전환할 필요가 없습니다.
JavaScript를 깊이 이해하면 더 많이 사용하고 싶어지지만, PHP는 그렇지 않습니다.
4라운드: 개발 도구
두 기술 모두 훌륭한 편집기, 통합 개발 환경, 디버거, 유효성 검사기 및 기타 도구를 갖추고 있습니다. 나는 이것이 동점이라고 생각하지만 Node.js에 약간의 이점을 제공하는 몇 가지 도구는 다음과 같습니다: NPM - 패키지 관리자. NPM을 사용하면 종속성을 설치 및 관리하고, 구성 변수를 설정하고, 스크립트를 정의하는 등의 작업을 수행할 수 있습니다.
PHP의 Composer 프로젝트는 NPM에서 영감을 얻었으며 일부 측면에서 더 강력합니다. 그러나 PHP는 기본적으로 제공되지 않으며 활성 라이브러리가 더 작고 커뮤니티에 미치는 영향도 적습니다.
NPM은 개발 방법에 혁명을 일으킨 Grunt 및 Gulp와 같은 빌드 도구의 성장에도 부분적으로 책임이 있습니다. 때때로 PHP 개발자는 node.js를 설치하기를 원하거나 필요로 할 수 있습니다. 이는 한 단계 뒤로 물러서는 것이 아닙니다.
5라운드: 환경
기술을 어디에 사용하고 배포할 수 있나요? 어떤 플랫폼과 생태계가 지원되나요? 웹 개발자는 빌드 도구, 마이그레이션 도구, 데이터베이스 변환 스크립트 등과 같이 완전히 웹 페이지를 대상으로 하지 않는 애플리케이션을 개발해야 하는 경우가 많습니다.
PHP에는 데스크톱 애플리케이션과 명령줄 도구를 개발할 수 있는 방법이 있지만 사용하지는 않습니다. 본질적으로 PHP는 그 분야에 능숙하지만 그 이상으로 확장되는 경우가 거의 없는 서버 측 기술입니다.
몇 년 전만 해도 JavaScript는 매우 제한적이고 첨단 기술을 갖고 있다고 여겨졌지만 여전히 주요 전쟁터는 브라우저였습니다. Node.js는 이러한 느낌을 바꾸었고 많은 JavaScript 프로젝트를 탄생시켰습니다. 브라우저, 서버, 터미널, 데스크톱, 심지어 임베디드 시스템까지 어디에서나 JavaScript를 사용할 수 있으므로 JavaScript가 어디에나 존재하게 됩니다.
6차: 통합
데이터베이스 및 드라이버와 통합할 수 없다면 개발 기술은 매우 제한적입니다. PHP는 이 점에서 강력합니다. PHP는 수년 동안 사용되어 왔으며 그 확장을 통해 주류 또는 덜 인기 있는 API를 사용하여 서버와 직접 통신할 수 있습니다.
Node.js가 따라잡고 있지만 일부 오래되고 인기가 없는 기술을 위한 성숙한 통합 구성 요소를 찾는 데 어려움을 겪을 수도 있습니다.
7차: 호스팅 및 배포
멋진 새 애플리케이션을 온라인 웹 서버에 배포하는 것이 얼마나 쉬운가요? 이는 PHP의 또 다른 큰 승리입니다. 임의의 웹 호스팅 회사에 문의하면 주로 PHP에 대한 지원을 찾을 수 있으며 아마도 MySQL이 무료로 포함될 수도 있습니다. 샌드박싱의 경우 PHP는 더 간단한 것으로 간주되며 위험한 확장은 비활성화될 수 있습니다.
Node.js는 서버 측 애플리케이션이 영원히 실행되는 또 다른 괴물입니다. 물리적/가상/클라우드 또는 사용자 정의 서버 환경이 필요하며, 가능하면 루트 액세스가 가능한 서버 환경이 필요합니다. 이는 일부 서버, 특히 공유 서버에서는 도달할 수 없으며 전체 서버가 다운될 위험이 있습니다.
Node.js 호스팅은 쉬워지겠지만 일부 PHP 파일을 업로드하는 데는 FTP만큼 편리하지는 않을 것 같습니다.
8라운드: 퍼포먼스
PHP는 매우 열심히 일하고 있으며 더 빠르게 실행할 수 있는 많은 프로젝트와 옵션을 갖추고 있습니다. 성능이 중요한 PHP 개발자라도 속도에 대해서는 거의 걱정하지 않지만 일반적으로 Node.js 성능이 더 좋습니다. 물론 성능은 개발팀의 경험과 헌신에 크게 좌우되지만 Node.js에는 여전히 다음과 같은 장점이 있습니다.
종속성 감소
PHP 인터프리터를 시작하고 PHP 코드를 실행하려면 PHP 애플리케이션에 대한 모든 요청이 웹 서버를 통해 라우팅되어야 합니다. Node.js에는 이러한 종속성이 필요하지 않으며 기본적으로 매우 가볍고 애플리케이션에서 좋은 역할을 하는 Express와 같은 서버와 함께 프레임워크를 사용하게 됩니다.
더 작고 빠른 통역사
Node.js의 인터프리터는 PHP보다 작고 유연합니다. 이전 버전의 언어와의 레거시 호환성 문제로 인해 방해를 받지 않으며 Google은 V8 엔진의 성능을 개선하기 위해 상당한 노력을 기울였습니다.
지원서는 항상 온라인 상태입니다
PHP는 표준 클라이언트-서버 모델을 따릅니다. 각 페이지 요청은 구성 매개변수를 읽고, 데이터베이스에 연결하고, 정보를 읽고, HTML을 렌더링하는 애플리케이션을 초기화합니다. Node.js 애플리케이션은 지속적으로 실행되며 한 번만 시작하면 됩니다. 예를 들어 단일 데이터 연결 개체를 만든 다음 모든 요청에 다시 사용할 수 있습니다. PHP에는 Memcached를 사용하는 등 이를 구현하는 몇 가지 방법도 있지만 이는 더 이상 언어의 표준 기능이 아닙니다.
이벤트 중심, 비차단 I/O
대부분의 다른 서버측 언어와 마찬가지로 PHP는 차단 실행 모델을 사용합니다. 데이터베이스에서 데이터를 가져오는 등의 명령을 실행할 때 다음 내용이 실행되기 전에 해당 명령이 실행될 때까지 기다려야 합니다. Node.js는 일반적으로 기다리지 않습니다. 대신 명령이 실행될 때 한 번 호출되는 콜백 함수를 제공해야 합니다. 예:
이 예에서는 모든 데이터가 반환될 때 프로세스 함수가 호출되므로 콘솔은 'finished'를 먼저 출력한 다음 'N records received'를 출력합니다. 즉, 다른 프로세스가 처리되는 동안 인터프리터는 다른 작업을 수행할 수 있습니다.
상황은 더욱 복잡하며 몇 가지 경고가 있습니다.
Node.js/JavaScript는 단일 스레드에서만 실행될 수 있지만 대부분의 웹 서버는 다중 스레드이며 요청을 동시에 처리합니다.
한 사용자의 장기 실행 JavaScript 처리로 인해 작업이 분할되거나 Web Workers가 사용되지 않는 한 다른 사용자의 코드가 실행되지 않습니다.
벤치마크는 주관적이며 결함이 있습니다. Node.js가 더 나은 몇 가지 예와 PHP가 더 나은 몇 가지 비교 예를 찾을 수 있습니다. 프로그래머들은 단지 자신의 믿음을 증명하려고 노력하고 있을 뿐입니다!
비동기 이벤트 중심 코드를 작성하는 것은 매우 복잡하고 어렵습니다.
내 경험을 통해서만 말할 수 있습니다. 내 Node.js 애플리케이션은 PHP에 비해 훨씬 빠릅니다. 당신의 것이 아닐 수도 있지만 시도하지 않으면 결코 알 수 없습니다.
9라운드: 개발자 열정
이는 '일반적인 웹 개발 과제' 목표를 넘어서는 것이지만 중요합니다. 매일 코드 작성을 두려워한다면 어떤 언어가 더 나은지는 중요하지 않습니다.
비교하기는 어렵지만 일부 PHP 개발자는 언어에 대해 매우 열정적입니다. 마지막으로 감동을 받은 PHP 기사나 슬라이드쇼를 읽은 때는 언제였나요? 어쩌면 더 말할 필요가 없겠죠? 노출이 더 낮을까요? 아니면 내가 올바른 곳을 찾고 있지 않은 걸까요? PHP7에는 몇 가지 새로운 기능이 있지만 기술은 수년 동안 정체되어 있으며, 그럼에도 불구하고 PHP에 대해 불평하는 개발자는 거의 없습니다.
JavaScript는 커뮤니티를 분열시켰고, 일부는 좋아하고 일부는 싫어하며, 일부 프로그래머는 중간에 주저합니다. 그럼에도 불구하고 Node.js에 대한 피드백은 지속되어야 합니다. 현재 이번 라운드에서는 Node.js가 승리합니다.
10라운드: 전망
어떤 서버 언어를 선택하든 상관없습니다. 더 이상 업데이트되지 않아도 계속 작동합니다(예, ColdFusion!). 사용량이 정체되었지만 여전히 많은 사람들이 PHP를 사용하고 있으며 앞으로도 그럴 것이라고 장담합니다. 앞으로 20년은 더 버틸 수 있습니다.
Node.js는 클라이언트 측 개발과 동일한 구문을 사용하는 동시에 네트워크 소켓 및 서버 측 전송 이벤트와 같은 HTML5의 혁신적인 기능을 지원하는 현대적인 개발 방법을 제공합니다. 언어의 분기 기능에 대한 일부 논란에도 불구하고 Node.js 사용량은 기하급수적으로 증가했습니다.
Node.js가 PHP의 시장 점유율을 잠식할 것은 분명하지만 완전히 대체할 수는 없을 것 같습니다. 두 기술 모두 밝은 미래를 가지고 있습니다. 이번 라운드를 무승부로 선언합니다.
최종 우승자
최종 점수: Node.js가 5라운드 승리, PHP가 4라운드 승리, 1라운드 동점을 기록했습니다. 한쪽으로 기울어질 줄 알았는데 생각보다 적당한 정도였습니다.
Node.js에는 특정 학습 곡선이 있으며 초보자에게 적합하지 않지만 이 결투에서 승리했습니다. 그리고 당신이 언어를 좋아하는 탄탄한 JavaScript 프로그래머라면 Node.js는 당신을 실망시키지 않을 것입니다. 더욱 최신 버전이고 자신만의 웹 개발 경험을 제공하므로 PHP를 놓칠 일이 없습니다.
하지만 PHP를 얕보지 마세요. PHP는 여전히 중요합니다. 단지 Node.js가 더 빠르고, 더 새롭거나, 더 트렌디하다고 해서 Node.js 트렌드를 따라가서는 안 됩니다. PHP는 배우기 쉽고 전문적인 프로그래밍 기술을 지원하며 어디에서나 도움을 받을 수 있고 개발도 간단합니다. 완고한 Node.js 개발자라도 간단한 웹사이트와 애플리케이션에 PHP를 사용하는 것을 고려해야 합니다.
내 조언은: 옵션을 평가하고 필요에 따라 언어를 선택하는 것입니다. 이 기사는 이와 같은 "비교" 기사보다 훨씬 더 신뢰할 수 있습니다.
위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.