PHP 개발에 있어서 MVC 패턴의 적용
PHP 개발에 흔히들 사용은 하지 않지만 MVC 패턴을 적용하기 위해서 Framework (Codeigniter , Zend Framework, Cake PHP, Symfony 등)을 이용하여 개발을 한다.
MVC 패턴을 이용해 개발을 하려면 우선 위에서 제시한 프레임웍을 사용을 하거나 MVC 에 맞도록 구조를 잡아야 한다.
* MVC패턴
사용자 인터페이스로 부터 비지니스 로직을 분리하여 서로 영향없이 개발,수정할수 있는 패턴이다.
Model : 데이터 처리 와 상위 개념의 프로그램 처리 로직
View : 사용자의 UI 등
Control : 응답과 데이터의 흐름을 처리
기존 프로그램 개발은 하나의 PHP 스크립트 안에 한개, 혹은 다수의 function, library 등의 스크립트가 include 되어 돌아가는 형태 , 또는 하나의 PHP안에 모든것이 다 돌아가는 형태의 프로그램이 주를 이루었다.
흔히들 말하는 스파게티 소스(?, 웹 개발 특히 PHP에 있어서 Javascript, PHP, HTML, CSS가 하나의 파일 안에 두루 잘섞여 있는 모습)가 되어버린 지금, 당장 유지보수를 하거나 인수인계작업에 있어서 작업을 하려면 상당히 고된 시간이 필요할 수도 있다. 예를 들어 하나의 파일과 파일의 연관성이 아주 직접적으로 연관이 되어있고, 새로운 기능이나, 향상을 위해 수정을 하기 위해서는 프로그램 전체를 뜯어 고치거나 , 새로 개발하는 작업이 주를 이룰것이다.
실제로 새로운 웹 개발자가 회사에 입사를 하여 주로 하는 작업은 아주 잘 정리가된 ERD, 명세서, 프로그램설계서 등을 보는것이 아니라, 실제 코드를 하나 하나씩 보며 구조를 이해한다. 물론 잘 정리가된 문서나 , 코딩규칙에 의해서 쉽게 접근한다면, 유지보수,인수인계 작업은 좀더 수월할 수 있겠으나 실제적으로 그렇지 않은 경우가 대부분이다.
구조화되고, 모델과, 뷰, 컨트롤러가 분리가 되어 서로 상화연관되어 돌아가고 정해진 규칙안에서 자유롭게 프로그래밍을 구성할 수 있다면 그게 더 효율적이라 할수 있겠다.
MVC모델을 이용하여 개발을 한다면 문서와 동일한 프로그램 구조, 비지니스 로직을 영향없이 쉽고 수정,향상 시킬수가 있다.
간혹 어떤이들은 PHP 스크립트에서 OOP로 개발을 하면 실제 적으로 많은 성능 차이가 나타난다고들 한다. 웹 페이지가 늦게 뜨거나 , 파싱하는데 0.000x 초를 다루는 입장에서 실행 시간이 오래 걸린다고들 말한다. 내 생각은 약간 틀리다. 보통의(아주 일반적으로) PHP 코드의 경우에는 대부분 데이터베이스와 연동이 되어 있고 수 많은 혹은 1~2개의 질의를 하면서 사용자의 화면에 결과를 뿌리거나 데이터를 처리하게 된다. 이때 PHP 가 실행하는 시간은 아주 짧은 시간이다. 하지만 DB 질의는 대부분 0.00n ~ 0.n초 에서 이루어지기 때문에 PHP코드를 성능을 최적화 한다고 절차 지향적으로 작업을 할 필요는 없다고 생각한다. 차라리 유지 보수와 개발을 편리하고, 깔끔하게 유지 할 수 있는 형태로 작업을 하고 DB설계나 질의에 대한 부분을 최적화 하는게 맞다고 생각을 한다. 0.00n초 나 0.000n초 나 실제적으로 사람이 느낄 수 있는 차이는 거의 없다고 생각을 하기때문에 MVC패턴의 적용은 전체적으로 비용감소를 이루어 낼수 있다고 생각을 한다.
이번 프레임웍을 개발 하면서 , 공개 프레임웍 보다는 잘 짜여져 있지는 않지만 , 보다 서비스에 충실하게 , 환경에 딱 맞도록 만들기 위해서 노력을 많이 했다. HTML 템플릿 파서를 새롭개 개발을 하고 , 그에 맞도록 최적화 작업을 몇번씩 거친 후 만들었지만 부족함이 많고 좀더 손쉽게 처리 할 수 있는 형태로 새롭게 만들어 공개해 볼 예정이다. (언제 될지는 모르겠지만. ㅋㅋ)
이번 개발에서 모델을 담당하고 있는 Libarary 디렉토리 안에 각각 기능별로 나누어진 Class 들이 존재한다. Database, System, Parser 등이 존재 하고 , Database 에는 데이터 베이스 기본 Query 클래스와 , DB 드라이버(PHP의 PDO 형식을 띄는) 그리고 System의 모듈 로더 (모듈을 적재하는)와 Parser 에 HTML 템플릿 (전체 HTML을 읽어 캐시 디렉토리에 새롭게 구현이된 HTML 파서)를 만들었다. Module 에는 MVC의 컨트롤을 담당할 수 있는 각각의 모듈들이 존재하고 이 모듈 디렉토리 안에는 한개씩의 모듈과 , 하부 비지니스 로직이 들어갈 수 있도록 구성되어 있다. 전체적 Include를 최소화 하여 환경설정 파일 하나와 Autoload 화 해서 전체적으로 구조를 최적화 하였다.
구조는 로더 -> 모듈 -> 기반모델 -> 파서 -> 파싱 -> 출력 순으로 이루어져 있다.
개발중에 약간의 넋두리를 풀어 본다. ~
시간이 좀더 된다면 코드를 새로 개발하여 전체적으로 한번 공개를 해볼 생각이다.~ 물론 그때쯤이면 눈이 한번 오고 다시 매미가 울 계절이 되겟지만 말이다 ^^
"PHP" 카테고리의 다른 글
- PHP 개발시 지키면 좋은 10 - 1 가지 (댓글 2개 / 트랙백 0개) 2010/06/30
- 웹(PHP) 개발에 유용(필요)한 유틸 (댓글 0개 / 트랙백 1개) 2010/05/12
- PHP Session 공유 (memcached 이용) (댓글 0개 / 트랙백 0개) 2010/06/02
- 복합 인자 사용방법 (댓글 0개 / 트랙백 0개) 2010/09/01
- PHP 성능향상 (댓글 0개 / 트랙백 0개) 2010/06/03
- PHP 변수를 이용해 객체 생성 (댓글 0개 / 트랙백 0개) 2010/05/11
- PHP 개발에 있어서 MVC 패턴의 적용 (댓글 2개 / 트랙백 0개) 2010/05/11
- PHP __autoload 이용 (댓글 0개 / 트랙백 0개) 2010/03/09
- 이미지 워터 마크 (PNG Alpha 채널 이용) (댓글 0개 / 트랙백 0개) 2010/06/17
- PHP Exception 활용 (댓글 0개 / 트랙백 0개) 2010/05/11
Trackback
Trackback Address :: http://www.lovelgw.com/Blog/trackback/177
