세상에는 수많은 프로그래밍 언어가 존재하며 계속 새로운 언어가 개발되고 있습니다.

새로운 언어들은 기존에 해결이 어려웠던 문제를 쉽게 해결하거나 혹은 기존과는 차별화된 생산성과 편의성등의 기능과 우아한 문법등을 내세우며 개발자들에게 어필하고 있습니다.


PHP 는 이런 프로그래밍 언어의 홍수속에서도 1995년 1.0 버전이 발표된 이후 점점 더 웹 개발 부분에서 사용 영역을 넓혀가고 있습니다.

특히 가장 많은 점유율을 차지하고 있는 컨텐츠 관리 시스템인 워드프레스(Wordpress.com), 위키피디아(en.wikipedia.org)에 사용되고 있는 위키 시스템인 미디어위키(MediaWiki), B2B 솔루션인 마젠토(Magento),  SNS 서비스인 페이스북, 사진 공유 서비스인 플리커등 많은 솔루션과 서비스가 PHP 로 개발되었고 현재도 서비스 되고 있습니다.


특히 최근의 조사에 의하면 PHP 는 서버 사이드 프로그래밍에서 약 82%로 점유율을 차지한다는 통계도 있습니다.(http://goo.gl/V28whg)


하지만 그간 PHP 는 많은 개발자들에게 웹 개발에 사용할 경우 생산성은 좋지만 프로그래밍 언어로서는 완성도가 떨어지고 PHP 로 개발한 코드는 읽기가 어렵고 유지보수가 용이하지 않다는 평가를 받아왔습니다.


과거의 PHP 를 대상으로 한다면 이는 매우 타당한 지적입니다. PHP 는 Rasmus Lerdorf 라는 개발자가 자신이 사용하려고 개발하였는데 의미는 "Personal Home Page Tools" 이었고 HTML 을 쉽게 만들기 위해 CGI(Common Gateway Interface) 기반으로 돌아 가는 C 로 만든 매크로 묶음 수준이었습니다. 

그후에 나온 2.0 버전인 PHP/FI 의 FI 는Forms Interpreter 로 PERL 과 비슷한 문법을 가지고 현재도 쓰이고 있는 함수들을 구현하였습니다.


그후에 3.0 부터 개발 주체가 개인에서 커뮤니티로 넘어가고 많은 개발자들의 참여에 의해 엔진과 파서를 새로 작성하고 모듈 기반의 확장성을 갖추게 됩니다.


그리고 지속적인 발전을 거쳐 현재 안정 버전은 5.6, 개발 버전은 7.0까지 발표되어 있습니다.


이렇게 PHP 역사를 살펴 보면 철저한 분석과 설계에 의해서 태어난 언어가 아니라 특정 목적과 문제를 해결하기 위한 툴로서 시작되고 발전되다 보니 태생적인 많은 한계를 가졌던 것도 사실입니다.

하지만 PHP 는 지속적인 개량과 발전을 통해 그간 지적되어 왔던 언어적인 단점들을 거의 해결했으며 나아가 현대적인 프로그래밍에 필요한 대부분의 요소들을 제공하고 있습니다.


PHP 4 부터 클래스가 지원되었지만 실은 함수들을 묶은 것에 불과했고 진정한 객체지향이 아니라는 비판을 받았으나 PHP 5는 견고한 객체 지향 기법을 제공하고 있으며 네임스페이스(namespace), 익명 함수(Anonymous functions), 특성(traits) 등 현대적인 프로그래밍을 위한 요소들을 지원하고 있습니다.


아키텍처 측면에서는 스크립트 언어의 속도 저하를 해결하기 위해 바이트 코드(OPCode)로 컴파일한 후에 메모리에 캐시하는 OpCache 가 5.5 부터 정식으로 포함되어 있으며 웹 서버 모듈로 동작할 경우의 제약을 넘고 속도 향상을 위해 다수의 PHP 엔진을 띄워서 처리하는 FPM(FastCGI Process Manager) 가 5.4 부터 정식으로 포함되었습니다.

또 PHP 코드를 JIT(Just-in-Time) 방식으로 컴파일하고 빠르게 구동할 수 있는 가상 머신인 HHVM(HipHop Virtual Machine) 이 페이스북에 의해 개발되어 공개되어 있는등 아키텍처 측면에서도 많은 발전이 있습니다.


이제 PHP 는 다양하고 폭넓은 애플리케이션, 방대한 라이브러리와 사용자층을 갖추고 현대적인 프로그래밍 기법을 제공하는 언어입니다.

비록 기존 코드와 호환성을 위해 절차적인 기법과 과거의 함수들도 계속 제공되지만 PHP 의 언어적 완성도가 떨어진다는 비판은 이제는 적절하지 않다고 생각합니다.


그러면 라라벨을 잘 사용하기 위해 알아야 할 PHP 5의 주요 기능들에 대해서 간략하게 살펴보도록 하겠습니다.