>> 참고로 이 글은 본문 글보다 댓글이 더 재밌습니다. 
>> 댓글은 위 url을 참조하세요.

TL;DR

PHP는 언어 정책이 매우 보수적이기때문에 현재 개발하는 소스가 앞으로 버전업 되면서도 그대로 동작할 가능성이 높다. 요즘 웹은 성능이 상향 평준화되었기 때문에 굳이 신기능을 쓰기 위해서 다른 언어/프레임웍을 선택하는 건 의미없는 일이다. 그 시간에 본업에 집중하자. 보안이나 성능 관련 이슈는 PHP가 알아서 해 줄 것이다.

풀스택을 지향하는 잡식성 개발자인 저에게도 편애하는 언어가 둘 있는데 PHP와 Javascript입니다. Javascript는 요즘 대세라고 해도 과언이 아닌데다 node.js가 나오면서 서버 플랫폼으로도 각광을 받고 있습니다. 그에 비하면 PHP는 안티가 무척이나 많은데, 이렇게 인식이 안좋은 언어는 classic asp이외에 본적이 없습니다. 얼마나 인기가 없냐고 하면 예전에 이런 에피소드도 있었습니다. 협력회사 담당자가 저희 회사의 인력 구성이 어떤지 물어보면서, 그 회사에 웹개발자는 있나요? PHP 개발자 말구요. 라고 했었습니다. (PHP 전문가가 한명 있긴 있었죠. 바로 저..) 이 정도로 안티가 많으면 마켓쉐어도 미미해야 할텐데 2015년 12월 기준 서버사이드 언어로서의 사용률이 81.7%이고, 전 세계 사이트의 25.8%가 워드프레스를 쓰고 있습니다. 이런 걸 이율배반이라고 하던가요.

PHP만이 가지고 있는 언어적 특성이 이런 상황의 근본적인 원인이 아닐까 합니다. 개발용어로 설명하자면 컨트롤 로직과 프리젠테이션 레이어가 분리되어있지 않다는 것인데, 쉽게 말하면 PHP 코드와 html이 뒤섞여있다는 것이죠. PHP의 템플릿적인 특성덕분에 개발을 잘 모르고도 코딩이 가능하지만, 개발을 잘 안다면 안티패턴을 돌아가느라 코딩하기가 좀 귀찮아 집니다. 덕분에 다른 언어들 보다 잘못 설계된 코드와 만날 가능성이 높죠. 왜 PHP가 이런 – 매력적인 – 특징을 갖게 되었는지에 대해 이해하기 위해서는 html 초창기 시절의 분위기부터 설명해야 할 듯 합니다.

다들 아시다시피 html은 평범한 텍스트 파일이기에 초기에는 텍스트 에디터로 제작했습니다. vi나 emacs나 아마도 notepad같은 걸 썼겠죠. 시간이 지날수록 다이나믹한 컨텐츠에 대한 니즈가 커졌고 이때 등장한게 CGI(Common Gateway Interface)입니다.

CGI는 거의 모든 언어로 작성이 가능합니다. 심지어는 COBOL로도요.. 웹초기에는 개발자들이 DB나 텍스트를 다룰때 쓰던 C나 Perl로 개발하는게 일반적이였습니다. 90년대 후반에는 JAVA기반의 Servlet도 나왔습니다만 pro*c와의 연결이 여의치 않아서 결국 C로 데이터베이스를 다루던 기억이 있습니다. 아무튼 CGI를 설정하고 프로그래밍하고 컴파일하는 작업은 딱히 어려운 일은 아니지만, 어쨌든 무조건 개발자가 필요했습니다.  초창기에 웹을 다루던 사람들은 대부분 전문가라서 별 문제가 안되었지만 점점 한계에 부딪히게 됩니다. PHP는 이런 시대적 상황을 배경으로 탄생했습니다. html파일에 간단히 코드를 넣는 것만으로누구나 쉽게 동적인 웹사이트를 만들수 있게 되었습니다. 게다가 당시에는 CGI방식보다 월등하게 속도가 빨랐습니다. fastcgi를 설정해야 PHP와 비슷한 속도가 났는데, fastcgi는 문법이 달라서 개발이 상대적으로 까다로웠습니다.  지금에서야 fastcgi가 일반화되고, PHP는 성능문제로 까이고 있지만 그 당시에는 가히 혁명적이였죠. 폭발적인 PHP의 인기덕분에 CGI 방식에서 template을 이용한 방식으로 웹트렌드가 크게 바뀌게 되고 asp나 jsp같은 아류작이 나오는 계기가 됩니다. 사용하기 쉬운 템플릿이 웹개발의 필수라는 것을 모두가 알게 된 것이죠.

서버 프레임웍의 트렌드는 2000년대 초반 Java진영에서 Struts가 에 나오면서 MVC로 바뀌게 됩니다. MVC는 재사용성이 매우 뛰어났기 때문에 순식간에 엔터프라이즈 시장을 장악하게 됩니다. 2005년에 나온 Ruby on Rails는 Struts및 그전까지의 구세대 MVC프레임웍의 문제점이였던 복잡한 xml설정과 사용 방식을 Convention over Configuration으로 깔끔하게 해결한데 이어, 줄어든 복잡도만큼 다양한 최신 기술을 마구 구겨 넣어서 인기를 끌게 됩니다. 지금 생각해보면 어째서 그렇게 프레임웍의 설정이 복잡해야했는지 이해가 안가지만, 2000년대 초반은 정말 아무 것도 정해진게 없었던 웹개발의 매드맥스 시절이였습니다. RoR 이후로 시장에 수많은 유사 MVC프레임웍이 등장하고 서로 영향을 주는 상황으로 발전하게 되었습니다. RoR이 승승 장구하던 와중에 PHP는 4에서 5로 넘어가면서 스텝이 살짝 엉키더니 6.0을 만든다고 삽질하다가 시장의 흐름에서 완전히 소외되었습니다. 그런 이유로 2000년대 후반부터 PHP개발자에 대한 인식은 최악이 되었습니다.

한때는 어디가서 PHP 개발한다고 하기도 부끄러운 시절도 있었는데, 요즘 들어 인식이 조금씩 바뀌고 있습니다. 그렇게 된데는 페이스북과 워드프레스가 가장 큰 역할을 했습니다.

페이스북이 창립했을 당시인 2004년의 PHP는 완전 핫한 언어였지만, 회사가 세계규모로 커지고 그 사이 PHP의 인기가 식었음에도 페이스북은 꾸준히 PHP를 사용했습니다. IT 업계 큰형님이 PHP를 밀고 있으니 구글이 크롬을 통해 밀고 있는 Javascript만큼 백이 든든합니다. 이에 비하면 Ruby는 서포트가 많이 소박하죠. 게다가  페이스북은 PHP자체의 개선에도 많은 노력을 들여서 hack이나 hhvm같은 오픈소스도 만들었습니다. 그 결과로 나온  PHP7 덕분에 이제 PHP가 성능이 부족하다는 느낌은 없어졌습니다. 재밌게도 TechEmpower의 작년 framework benchmark를 보면 PHP+PHP-FPM+NGINX의 성능이 이미 스크립트 언어 중에 적수가 없을 정도로 좋았습니다. 이때의 PHP는 5.6인데도 말이죠. hhvm은 테스트 도중에 문제가 생겨서 결과에 반영이 안되었지만, PHP7으로 같은 벤치마크를 한다면 거의 탑텐 안에 들어가리라 생각됩니다. 이 정도 성능이 나오는 스크립트 언어가 지금까지 있었던가요. python이나 ruby는 GIL때문에 근본적으로 불가능한 일이죠.

워드프레스의 인기는 날이 갈수록 점점 더 높아만 가고 있습니다. 무료 플러그인과 마켓에서 60달러 정도에 살 수있는 테마를 사용하면 간단하게 프로페셔널한 사이트를 만들수 있고, 자동 업데이트 덕분에 – 커스텀 코드를 넣지 않는 이상 – 언제까지라도 무료로 서포트를 받을 수 있습니다. 최소 3~4명이 만들어야 할 사이트를 혼자서 고퀄로 뚝딱 만들 수 있으니 들어가는 비용이 1/3이하입니다. 이런 플랫폼이 인기가 없으면 그게 더 이상한 일입니다. 게다가 웹디자인도 플랫+반응형으로 통일되고 있고, 낮은 버전의 IE에 대응할 필요도 없어졌기에, 워드프레스로 제작한 사이트의 퀄리티는 나날이 눈부시게 높아지고 있습니다. 왠만한 기성품 웹사이트가 따라갈 수 있는 수준을 한참 뛰어 넘었습니다.

이런 워드프레스의 코어가 PHP 5.2를 기반으로 하고 있다는 것은 시사하는 점이 매우 큽니다.  5.2는 2006년에 발표되었고 5.3의 출시가 늦어지면서 웹사이트및 호스팅 업체에 광범위하게 채택된 버전이고, 현재도 12%의 점유율을 보여줄 정도로 바퀴벌레같은 생명력을 자랑합니다. PHP 5.2의 출시가 이미 10년전인데다 공식적인 서포트도 끊긴걸 생각하면 워드프레스의 개발 방법론은 매우 보수적입니다. 그런데 이런 보수성은 PHP라는 언어 자체의 특징이기도 합니다. PHP 5.2의 코드는 별다른 수정없이 7.0에서도 잘 돌아가니까요. 어떠한 언어의 웹프레임웍도 이렇게까지 다양한 버전을 서포트하는 경우는 없습니다. 예를들어 Java는 버전별로 클래스의 포맷이 달라서 Java8로 만든 라이브러리가 Java10에서 실행된다는 보장이 전혀 없습니다. PHP 보수성은 웹개발사에서 매우 예외적이고 PHP의 확고한 철학이 있기에 가능한 일입니다.

PHP의 아버지인 Rasmus Lerdorf씨는 무척 재미있는 분인데 한 컨퍼런스에서 이렇게 말했습니다.

I actually hate programming, but I love solving problems. 나는 프로그래밍은 싫어하지만 문제해결은 좋아한다.

이런 실용적인 철학은 PHP의 곳곳에서 발견됩니다. 예를 들자면 PHPDoc을 이용한 Type Hinting은 유용한 기능이지만 코드가 엄청 지저분해 보이는 단점이 있습니다. Python같은 언어는 이 기능이 없거나 일부분만 구현했는데, PHP에서는 그냥 지저분한 채로 구현합니다. 직접 써보면 역시 PHP는 짱이라는 걸 인정하지 않을 수 없습니다.

이제와서 PHP를 사용해야 하는 이유는 웹의 생태계에 있어서 더 이상 언어의 버전이라던가 프레임웍의 구조적인 아름다움이라던가 하는 요인이 개발자가 생각하는 것 만큼 중요하지 않기 때문입니다. 유저들은 보안적으로 완벽하고 속도가 빠른 사이트에서 양질의 컨텐츠를 다양한 디바이스를 통해 보고 싶을 뿐입니다. 10년전 기술인 PHP 5.2로도 충분히 그런 사이트를 만들수 있다는 것이 워드프레스를 통해 증명되었습니다. 비록 글로벌 변수를 쓰는 등 내부적으로 지저분한 부분이 있기는 하지만요. 게다가 같은 코드를 PHP 7.0에서 돌리기만해도 속도가 두배로 빨라집니다. 현 시점에서 일부러 5.2호환으로 만들 필요는 없지만, 지금 만드는 코드가 10년후의 최신 환경에도 동작한다는 건 PHP 생태계가 아니면 상상도 못할 일입니다. 영속적으로 발전하는 코드라니 완전 멋지지 않나요?

앞으로의 웹은 오랜기간 쓰여지면서 최대한 많은 사용자를 모으는 플랫폼이 주도하게 될 것입니다. 그런데 아직도 타 언어/프레임웍에서는 쿨한 신기능 추가에만 신경을 쓰고 있습니다. 대부분의 메이저 프레임웍이 1년에 하나씩 메이저 업데이트를 발표하지만(그보다 더 짧은 경우도 있습니다) 워드프레스처럼 버튼 하나만 눌러서 업그레이드 되는 경우는 없습니다. PHP가 아니니까, 철학이 다르니까 불가능한 것입니다. (그런 의미에서 기능을 최소한으로 줄이고 하위호환을 중시하는 GO는 PHP와 비슷한 철학을 공유하고 있습니다.)

이제라도 늦지 않았습니다. PHP로 개발자 중심이 아닌 사용자와 웹 생태계 중심의 개발을 시작해 보세요. 컨트롤 로직과 프리젠테이션 레이어가 혼합되어 생기는 문제는 MVC패턴을 적용하면 쉽게 해결됩니다. 아직 매뉴얼이 제작 중이지만 PHP 기반의 no-framework framework인  usa-framework으로 시작하는 것도 괜찮은 선택이 될 것입니다. 잘 모르는게 있으시면 저에게 연락주세요. 언제든 환영입니다!