PHP(Hypertext Preprocessor)는 C언어와 유사한 문법으로 비교적 쉽게 배울 수 있어 진입장벽이 낮은 서버 사이드 언어에 속합니다. 상대적으로 높은 점유율과 풍부한 레퍼런스들로 인해 웹 개발을 처음 시작하는 초보 개발자들에게 적극적으로 채택되어왔습니다.
Node.js가 등장하기 전 PHP는 JavaScript와 떼려야 뗄 수 없는 단짝이었습니다. 클라이언트 사이드 언어인 JavaScript는 브라우저의 디테일을, 서버사이드 언어인 PHP는 서버 수준의 동적인 작업 전반을 담당하고 있었기 때문입니다. 하지만 2009년 Ryan Dahl이 JavaScript를 활용해 서버 스택을 구축할 수 있는 Node.js를 고안한 이후 JavaScript와 PHP의 긴 협력의 역사가 마감됩니다.
Node.js는 클라이언트 개발에만 국한해 활용되던 JavaScript로 서버 사이드 개발을 가능케 하는 런타임 환경입니다. Node.js는 Window, Linux, Mac OS에서 모두 실행이 가능하고, Node.js 내에 HTTP 서버 라이브러리를 포함하고 있기 때문에 WAS 없이는 동작할 수 없는 PHP와 달리 별도의 WAS 없이도 웹 서버에서 동작할 수 있습니다.
Node.js의 등장으로 인해 JavaScript만으로 클라이언트와 서버단을 모두 개발할 수 있게 되었습니다. 추가적인 언어를 학습하지 않아도 JavaScript로 서버단을 개발할 수 있어 프런트엔드(Front-end) 개발자들에게는 Node.js는 더욱 중요한 의미를 지닙니다.
PHP와 Node.js의 차이점을 구분하지 못하는 경우가 종종 있습니다. PHP와 Node.js를 보다 명확히 이해하기 위해 각각이 지닌 장점에 대해 정리해보겠습니다.
PHP의 장점
코드와 콘텐츠의 혼합
HTML과 CSS를 활용해 웹사이트를 구축하는 와중에 PHP를 통해 특정 프로세스를 웹에 추가하거나, 데이터베이스에서 가져온 데이터를 웹상의 내용과 결합해 보여주는 것이 가능합니다. 이 경우 바로 PHP 스크립트를 열어 원하는 내용을 추가하기만 하면 됩니다.
단단한 기반을 갖춘 언어
워드프레스나 드루팔, 줌라와 같은 인기 CMS(콘텐츠 관리 시스템)들이 모두 웹 서버 구축에 PHP를 활용하고 있습니다. 또한 짧지 않은 역사로 인해 현존하는 대다수의 웹 서버에는 PHP 언어로 작성된 코드가 넘쳐납니다. 긴 역사로 인해 다양한 플러그인이 개발되었고, 오픈소스로 공개된 코드도 많다는 장점이 있습니다.
진입장벽이 낮은 서버 사이드 언어
PHP는 문법을 익히는 것이 어렵지 않아 진입장벽이 낮은 언어에 속합니다. 그 때문에 웹 개발을 처음 시작하는 입문자가 접근하기 쉽고 관련 레퍼런스 또한 어렵지 않게 찾을 수 있어 어렵지 않게 서버 개발을 할 수 있다는 장점이 있습니다.
Node.js의 장점
코드와 콘텐츠의 분리
PHP와 달리 코드와 컨텐츠를 분리하는 점이 Node.js의 장점이 될 수 있습니다. 코드와 컨텐츠를 하나로 융합할 경우 완성도가 떨어지거나 복잡한 논리 구조로 전락할 가능성이 있습니다. 하지만 이 둘을 분리하는 경우 코드를 체계적으로 관리할 수 있어, 소스 코드를 직접 작성하지 않은 프로그래머도 쉽게 내용을 파악하고 유지/보수를 할 수 있습니다.
Non-blocking I/O 처리 방식
Node.js는 Non-blocking I/O(NIO) 처리 방식을 채택하고 있습니다. 이는 곧 한 개의 요청이 완료될 때까지 시스템이 기다릴 필요가 없음을 의미합니다. 서버 입장에서 NIO는 당연한 처리 방식일 수 있지만, 클라이언트 개발의 전유물이었던 JavaScript로 NIO 처리가 가능한 서버 개발을 할 수 있게 된 점은 그 자체로 의미가 있습니다.
다양한 모듈 생태계와 활발한 커뮤니티
Node.js 관련 패키지를 관리해주는 NPM(Node Package Manager)과 같은 모듈이 여럿 존재합니다. 따라서 모든 기능을 직접 개발할 필요 없이 패키지를 다운받아 사용할 수 있고, 이는 개발 과정을 훨씬 수월하게 만듭니다. 또한 활발한 커뮤니티 활동으로 개발 과정에서 발생할 수 있는 이슈를 해결하고, 다른 개발자들의 지원을 받는 것이 용이합니다.
Node.js는 파일을 업로드하거나 스트리밍하는 애플리케이션, 많은 양의 데이터가 오고 가는 채팅이나 게임 애플리케이션에 적합한 플랫폼으로 손꼽힙니다. 하지만 복잡한 컴퓨팅이 필요하거나 성능이 무거운 애플리케이션에는 Node.js를 채택하지 않는 것이 바람직합니다. 그 이유는 Node.js의 단일 스레드(Single Thread)가 많은 컴퓨팅을 요하는 웹 서비스에 적합하지 않기 때문입니다. 또한 서버단의 로직이 복잡한 경우 콜백 함수의 늪에 빠질 수 있어 서버 체크로직이 많은 경우에도 적합하지 않습니다.
미항공우주국 NASA를 비롯해 넷플릭스나 링크드인, 우버와 같은 글로벌 기업들조차도 적극적으로 Node.js를 도입해 활용하고 있습니다. 또한 가비아의 하이웍스 메신저 서버 또한 Node.js로 개발/운영되고 있습니다. 하이웍스 메신저의 동시 접속자 수가 6만 명에 육박하는 것을 고려하면 Node.js로 충분히 안정적인 서비스를 운영할 수 있음을 알 수 있습니다.
JavaScript가 익숙한 개발자들에게 Node.js는 개발 가능한 범위를 넓혀줬다는 점에서 그리고 활발한 커뮤니티 활동으로 지속해서 고도화를 거듭하고 있다는 점에서 앞으로도 그 인기는 쉬이 식지 않을 것으로 보입니다.
서비스하고자 하는 애플리케이션이 Node.js를 도입하기에 적합한 경우라면 간단한 채팅 서버 개발부터 시작해볼 수 있습니다.
[Node.js Socket.IO와 Redis를 활용한 채팅 서버 개발하기]
Node.js 개발을 시작하신다면 가비아의 안정적이고 합리적인 Node.js 호스팅을 고려해보세요.
[가비아 Node.js 호스팅 바로 가기]