CodeIgniter 살펴보기

지금 근무중인 회사에서 Old type PHP 를 사용하고 있어, 이를 개선하기 위해 PHP MVC Framework 도입을 고려하던 중 CodeIgniter 가 긍정적이라는 팀원들의 의견을 듣고 살펴보고 사내 위키에 게시하였다. 다음 내용이 그것이다.

---------------

이 페이지는 본인이 CodeIgniter 를 처음 사용해보고 작성한 것으로, 이해부족으로 사실과 다른 내용이 있을 수 있다.

장점

  • PHP4에서 사용가능하다.
  • 오픈 소스이다.
  • MVC의 기본 개념에 충실한 것 처럼 보인다.
  • 비교적 단순하고 읽기 쉬운 소스 코드 구조.
  • PHP 모듈이나 다른 라이브러리에 대한 의존성이 적다.
  • 충실한 공식 한글 자료.

단점

  • PHP4 호환을 위해 PHP5의 좋은 특징을 충분히 수용하지 못했다.
    • 객체 참조
    • OOP를 위한 Access Modifiers (public/private/protected)
    • Test 를 지원하기 위한 interface 사용의 부재
    • 가장 아쉬운 것은 예외 처리. PHP의 원시적 오류 처리는 골치 아프다.
  • 자유롭지 못한 라이센스. 소스코드 수정과 배포에 제약이 따른다.
    (배포버전의 license.txt 중)
    • Any files that have been modified must carry notices stating the nature of the change and the names of those who changed them.
    • Products derived from the Software must include an acknowledgment that they are derived from CodeIgniter in their documentation and/or other materials provided with the distribution.
  • Persistence Layer 의 애매 모호함.
    • 단순히 DB Helper Classes. DB를 은닉하지 못함.
    • Persistence 관련 코드는 가이드대로 사용하게 되면 지나치게 DBMS에 의존적이 된다.
      • Java 진영의 JPA 나 .NET의 Nhibernate 의 경우는 DBMS 와 완전히 독립적인 코드 생성이 가능하다.
      • DBMS 가 변경될 경우나 스키마가 변경될 경우 코드내에서 해당 부분을 찾아 일일히 수정해야 한다.
    • Active Record 는 SQL을 제거해 DBMS 에 종속적이지 않고, 단순화하려고 했으나, 구현을 단순화하기 위해 결국 SQL을 사용하는 것과 동등한 수준의 종속성이 발생하고 단순화되지도 않아 이도 저도 아니게 되어 있는 모습
    • Binding 시 Place Holder 로 의미 있는 값을 사용할 수 없다. 단순히 ? 사용..NET, Java 진영의 ibatis 와 비교
    • 디버깅이 어렵다. 무슨 일이 일어나는지 일일히 찍어보지 않으면 알 수 없다.
  • PEAR 와 중복된 라이브러리. PEAR와 거의 동일한 수준의 OO 적이지도 않은 똑같은 것(PEAR 역시 4.x 호환)들을 왜 만들어 둔 것인가. PEAR는 PHP 패키지에 기본 포함 되어 있으므로 중복을 피할 수 없다.
  • IDE 환경의 부재. 단순히 PDT의 Template 을 제공할 뿐. PHP 언어의 한계이기도 하다.
  • 어설픈 I18N. Locale 에 관한 고려가 없다. 반드시 언어를 코드레벨에서 선택해 주어야 한다. 브라우저의 헤더에 따른, 또는 GeoIP 에 따른 자동 지원은 불가능하다.
  • 디스크 단위의 Cache 모델. 서버가 여럿일 경우 오버헤드 및 동기화에 문제 있을 수 있음.
  • Log 가 파일로만 출력된다. 마찬가지로 서버가 여러대일 경우 데이터 취합에 문제.
  • Dispatch 모델에서 코드 중복이 발생할 여지가 있다. 동일한 Action 을 View 만 다르게 한다던지 할 경우 Mapping을 위해 Controller Class를 추가해야만 한다.
  • View 와 Controller 이 strong coupled 이다. 이상적인 MVC 모델은 Controller 는 화면에 표시되는 것에 대해 전혀 관여하지 않는 것이다.
  • View Layer 가 독립적이지 않다. PHP 언어의 한계 일수도 있겠으나, 굳이 View Layer 가 아니어도 사용자에게 출력을 제공할 수 있으므로 통일감을 잃을 수 있고, 실수를 유발할 수 있다. echo, print 등.
  • 관점 분리에 대한 배려가 적다. 예를 들어 Form Validation 은 Business Logic 에 전혀 포함되지 않아도 될 것이다.

정리

  • 한정된 용도의 작은 웹사이트 개발에 용이할 것 같다. 확장을 위해 신경써주어야 할 부분이 많다.
  • PHP 언어의 특징을 잘 살린 가벼운 MVC Framework 이나, PHP 4 까지만이다.
  • PHP 창시자인 Rasmus Lerdorf 가 PHP Framework 사용을 반대하면서, 굳이 사용하려면 CodeIgniter 를 사용하라고 한 것은 PHP Framework 를 아예 사용하지 말라는 것을 역설적으로 표현한 것은 아닐까 싶다. (지능적 안티)

댓글

  1. 저도 꽤 예전부터 CI로 작업을 해오고 있는데, 단점으로 적어주신 부분에 십분 공감합니다. 특히 DB 관련 라이브러리들에 문제가 많아요. (짚어주신) 개념적인 문제들도 있지만, 기술적으로도 mysql 이외의 데이터베이스 적용에 애로가 많죠.
    제대로 사용하려면 코어 라이브러리들을 상당부분 해킹해야 하는 일이 다반사인데, 이 부분도 작업 해놓고 나면 뭔가 맘에 들지 않구요.

    그럼에도 불구하고, (대형 서비스는 무리겠지만) 중소형 서비스들은 개발장애 없이 쉽고 빠르게 생산할 수 있다는게 매력이라..

    답글삭제
  2. 예전에 fguy님도 프래임웍? 류를.. 개발하셨던걸로 아는데 어찌되었나요?

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

단위테스트를 위한 주민등록번호 생성

낡은 방식으로 PHP를 사용하고 있는 조직의 개발환경 개선 방안 구상

프로그래머가 되기까지...