전하실 이야기 있으시면 lesstif골뱅이gmail.com 으로 연락주세요.
Page tree



Contents

 

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

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

 

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의 주요 기능들에 대해서 간략하게 살펴보도록 하겠습니다.

Ref

PHP의 역사

VersionRelease dateSupported until[47]Notes
1.08 June 1995 Officially called "Personal Home Page Tools (PHP Tools)". This is the first use of the name "PHP".[6]
2.01 November 1997 Officially called "PHP/FI 2.0". This is the first release that could actually be characterised as PHP, being a standalone language with many features that have endured to the present day.
3.06 June 199820 October 2000Development moves from one person to multiple developers. Zeev Suraski and Andi Gutmans rewrite the base for this version.[6]
4.022 May 200023 June 2001Added more advanced two-stage parse/execute tag-parsing system called the Zend engine.[48]
4.110 December 200112 March 2002Introduced 'superglobals' ($_GET$_POST$_SESSION, etc.)[48]
4.222 April 20026 September 2002Disabled register_globals by default. Data received over the network is not inserted directly into the global namespace anymore, closing possible security holes in applications.[48]
4.327 December 200231 March 2005Introduced the command-line interface (CLI), to supplement the CGI.[48][49]
4.411 July 20057 August 2008Fixed a memory corruption bug, which required breaking binary compatibility with extensions compiled against PHP version 4.3.x.[50]
5.013 July 20045 September 2005Zend Engine II with a new object model.[51]
5.124 November 200524 August 2006Performance improvements with introduction of compiler variables in re-engineered PHP Engine.[51] Added PHP Data Objects (PDO) as a consistent interface for accessing databases.[52]
5.22 November 20066 January 2011Enabled the filter extension by default. Native JSON support.[51]
5.330 June 200914 August 2014Namespace support; late static bindings, jump label (limited goto), closures, PHP archives (phar), garbage collection for circular references, improved Windowssupport, sqlite3, mysqlnd as a replacement for libmysql as underlying library for the extensions that work with MySQL, fileinfo as a replacement for mime_magic for better MIME support, the Internationalization extension, and deprecation of ereg extension.
5.41 March 2012September 2015[53]Trait support, short array syntax support. Removed items: register_globalssafe_modeallow_call_time_pass_reference,session_register()session_unregister() and session_is_registered(). Built-in web server.[54] Several improvements to existing features, performance and reduced memory requirements.
5.520 June 2013June 2016[55]Support for generatorsfinally blocks for exceptions handling, OpCache (based on Zend Optimizer+) bundled in official distribution.[56]
5.628 August 2014August 2017[55]Constant scalar expressions, variadic functions, argument unpacking, new exponentiation operator, extensions of the use statement for functions and constants, new phpdbg debugger as a SAPI module, and other smaller improvements.[57]
6.xNot releasedn/aAbandoned version of PHP that planned to include native Unicode support.
7.0Mid October 2015[58]Mid October 2018[55]Zend Engine 3 (performance improvements[42] and 64-bit integer support on Windows[59]), uniform variable syntax,[46] AST-based compilation process,[60]added Closure::call(),[61] bitwise shift consistency across platforms,[62] ?? (null coalesce) operator,[63] Unicode codepoint escape syntax,[64] return type declarations[44] and scalar type (integer, float, string and boolean) declarations.[45]

 

 

  • No labels

This page has no comments.