개발자 / 오픈소스 / 웹서비스

친구였던 PHP와 Node.js, 서로간의 전쟁이 시작되다

Peter Wayner | InfoWorld 2015.01.16
각자 다른 길을 걷게 된 오랜 친구 사이의 '전쟁'은 할리우드 영화에서 흔히 찾아볼 수 있는 플롯이다. 이때 한 사람이 지금까지 다른 사람의 영역이었던 무언가를 욕심내면서 전쟁이 시작되는 경우가 많다. 프로그래밍 언어 부문에서도 이런 일이 일어나고 있다.

치열한 전쟁은 Node.js의 등장으로 시작됐다. PHP와 자바스크립트(JavaScript)는 한때 파트너로 인터넷 세상을 함께 지배했지만, 지금은 개발자 '점유율'을 놓고 서로 치고 받으면서 일전을 벌이고 있다.

과거, 두 언어가 협력한 방식은 간단했다. 자바스크립트는 브라우저의 '디테일'을 처리하고, PHP는 포트 80과 MySQL 사이에 존재하는 서버 수준의 작업 일체를 관리했다. 인터넷의 많은 중요 요소들을 계속 지원해온 행복한 '연합'이었다.

그러다 누군가 서버에서 자바스크립트를 구현시켰다. PHP를 사용하지 않고도 차세대 서버 스택을 구축할 수 있게 된 것이다. 한 언어만 가지고 클라이언트에서 실행되는 Node.js와 프레임워크들을 구축할 수 있게 됐다. 적어도 일부에게는 "모든 곳에 자바스크립트가 있다"가 마치 '주문'처럼 대두됐다.

물론 아직까지는 '마지막 장'이 완성되지 않았다. Node.js의 깨끗함과 도처에 위치한 자바스크립트의 편리함을 소리 높여 반기는 사람이 있지만, 동시에 PHP의 오랜 안정성과 깊은 코드 기반에 만족하는 사람들도 있다.

PHP가 서버 부문에서 갑작스레 부상한 신생 강자에게 반격을 가할까? 아니면 자바스크립트가 오랜 친구를 무너뜨리고 세상을 지배할까? 팝콘을 먹으며 영화를 감상하듯 느긋하게 지켜볼 일이다.

PHP의 강점: 코드와 콘텐츠의 혼합
타이핑을 하면서 웹사이트에 생각한 내용을 텍스트로 집어 넣거나, 프로세스에 가지를 더하고, URL의 일부 파라미터에 따라 예쁘게 다듬어 나가고 싶을 수 있다. 또는 데이터베이스에서 가져온 데이터나 텍스트를 통합하고 싶을 수 있다.

PHP에서는 마법과 같은 PHP 태그를 열어, 단 몇 초 만에 코드 개발을 시작할 수 있다. 탬플릿이 필요 없다. 모든 것이 탬플릿이기 때문이다. 추가 파일이 필요 없다. 아키텍처를 발전시킬 필요도 없다. 손가락으로 실현시킬 프로그램 논리만 있으면 된다.

Node.js의 강점: 걱정거리 분리
하지만 코드를 콘텐츠와 섞다 보면 '절름발이'가 될 수 있다. 처음 2~3번 정도는 코드를 HTML과 섞는 작업이 재미있을 것이다. 그러나 얼마 지나지 않아, 코드 기반이 '헝클어진 논리 덩어리'가 되고 만다.

출중한 프로그래머라면 구조를 추가시키고, 코스메틱 계층을 논리 계층과 분리시킨다. 다른 프로그래머가 훨씬 쉽게 파악, 유지관리 할 수 있기 때문이다. 모델, 뷰, 컨트롤러를 분리하는 것이 낫다는 사실을 알고 있는 프로그래머는 Node.JS를 실행시키는 프레임워크를 구축한다.

PHP의 강점: 깊은 코드 기반
웹은 PHP 코드로 가득하다. (워드프레스, 드루팔, 줌라) 등 대다수 인기 플랫폼들이 웹사이트 구축에 PHP를 사용한다. 오픈소스는 물론 플러그인도 있다. 어디를 가도 PHP 코드를 찾을 수 있다. 즉시 다운로드 받아, 자신의 필요에 맞게 수정해 이용하면 된다.

Node.js의 강점: 현대적 기능
우수한 오픈소스 PHP 파일이 많지만 일부는 8년 묵은 워드프레스 플러그인이다. 몇 년 동안 업데이트가 되지 않은 코드를 만지작거리는데 시간을 투자할 사람이 있을까? Node.js 플러그인은 훨씬 새롭다. 최신 아키텍처 기법이 적용되어 있다. 최신 웹 앱을 이해하는 프로그래머들은 클라이언트에 더 많은 지능을 넣기 위해 이를 이용하게 될 것이다.

평이성: PHP가 우세 (어느 정도)
PHP의 변수와 기본 기능은 소수다. 데이터를 포트 80에서 데이터베이스로 옮기거나, 데이터베이스에서 포트 80으로 다시 옮기는 것을 제외하고는 별다른 큰 일을 하지 않는 얇은 계층이다. 원래 그런 목적에서 개발된 언어이다. 최신 데이터베이스는 마법과도 같은 툴이기 때문에 무거운 작업을 떠넘기는 것 또한 말이 된다. PHP는 아주 복잡하지 않은, 적당하게 복잡한 작업을 처리하는 평이성을 갖고 있다.

클로저 등의 정교성: Node.js의 우세
자바스크립트는 일부에게는 까다로운 소소한 특성들을 많이 갖고 있다. 그러나 현대적인 신텍스와 클로저(Closure) 등 유용한 기능을 자랑하는 현대적인 언어라는 장점이 더 크다. 쉽게 재구성 및 확장해 jQuery 같은 강력한 라이브러리를 구현할 수 있다. 객체로 기능을 배포할 수도 있다. 제약이 적다는 의미다.

PHP의 강점: 클라이언트 앱이 필요 없음
브라우저와 서버에서 같은 언어를 사용한다는 개념은 근사하다. 그러나 브라우저에서 언어를 사용할 필요가 없는 경우는 어떨까? 또 데이터를 HTML 양식으로 내보내야 하는 경우는 어떨까?

20여 개의 웹 서비스 콜로 브라우저에서 페이지를 생성해야 하는 자바스크립트 쓰레드가 제대로 작동하지 않아 초래되는 골칫거리가 없다. 깨끗한 HTML만으로 충분한 경우가 있다. 그리고 PHP는 여기에 최적화 된 언어다. 브라우저에 자바스크립트를 탑재시키느라 애를 쓸 필요가 있을까? 모든 것을 서버에서 구현하면, 스마트폰의 작은 브라우저에 초래되는 부담을 없앨 수 있다.

Node의 강점: HTML이 많은 PHP 콜보다 서비스 콜이 작음
AJAX가 많은 HTML5 웹에는 이동하는 요소가 너무 많을 수 있지만, 이들은 '쿨'하고 아주 효율적이다.

브라우저 캐시에 자바스크립트가 코드가 있을 경우, 네트워크에서 이동을 하는 유일한 요소는 새 데이터뿐이다. HTML 마크업이 많지 않다. 전체 페이지를 다운로드 받기 위해 반복을 하지 않는다. 데이터만 바뀔 뿐이다. 멋진 브라우저 기반 웹 앱을 만들 계획을 갖고 있다면, 큰 보상이 있을 것이다.

Node.js는 웹 서비스를 통해 데이터만 전달하게끔 최적화되어 있다. 앱이 복잡하고 데이터가 많다면, 효율적인 전달에 좋은 토대가 될 것이다.

SQL: PHP가 우세
PHP는 MySQL, 그리고 MariaDB 등 많은 변종과 공존하게끔 설계되어 있다. MySQL이 아니라도 오라클과 마이크로소프트의 좋은 SQL 데이터베이스들이 있다. 쿼리에 맞게 조금만 코드를 변경하면 된다. 이게 다가 아니다. 안정적이고, 잘 개발된 코드라면 어떤 SQL 데이터베이스와도 호환이 될 것이다. PHP 프로젝트에 무엇이든 쉽게 통합시킬 수 있다는 의미다. 완벽하지는 않지만, 큰 장점이 있다.

JSON: Node.js의 우세
SQL 액세스가 필요한가? Node.js에는 이를 지원할 라이브러리들이 있다. 여기에 더해 최신 NoSQL 데이터베이스 가운데 상당수를 지원하는 JSON도 지원한다.

PHP 스택에서는 JSON 라이브러리를 쓸 수 없다는 소리는 아니다. 그러나 자바스크립트에서 JSON을 처리하기가 훨씬 용이하다. 브라우저, 웹 서버, 데이터베이스까지 하나의 신텍스를 사용하는 것이다. 콜론과 괄호가 같은 방식으로 사용된다. 이것만으로도 많은 시간을 절약할 수 있다.

코딩 속도: PHP가 우세
PHP를 이용한 웹 앱 개발이 훨씬 빠른 개발자가 더 많다. 컴파일러, 배치, JAR 파일, 전처리기(선행처리기)가 필요 없기 때문이다. 즐겨 쓰는 에디터, 디렉토리의 PHP 파일만 있으면 된다. 물론 구체적인 속도는 천차만별이다. 그러나 속도 면에서는 PHP가 이용하기 좋은 툴이다.

로우 속도: Node.js의 우세
괄호와 소괄호 등의 수를 세면, 자바스크립트 코드 개발이 더 어렵다고 판단할 수 있다. 그러나 완성됐을 경우, Node.js는 날아다닌다. 쓰레드와 씨름할 필요가 없는 콜백 메커니즘이 우수하다. 핵심 요소들이 필요한 것들을 우수하게 처리할 수 있게끔 잘 구축 및 설계되어 있다. 결국 누구나 원하는 것이 아닌가?

*Peter Wayner는 지금까지 16권 이상의 서적을 집필한 인포월드 전문기고가다. ciokr@idg.co.kr

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.