2011년 2월 28일 월요일

php framework CI

지난번 포스티에서 PHP Framework를 비교 한적이 있습니다.
그 4개의 Framework중에서 제 마음에 드는건 CodeIgniter더 군요. 그리고 몇 일 공부 한 짧은 지식을 정리해 볼까 합니다.


프레임워크를 왜 사용하는가?

프레임워크는 재사용 가능한 클래스와 개발 시간을 단축 할 수 있는 기능을 제공합니다. 프레임워크를 통해서 개발 함으로 인해서 원치 않은 코드의 개발을 최소화 할 수 있다. codeIgniter의 예로 들면, database 접근,email 전송, form 데이터검증(validation),세션관리, 이미지 처리, XML-RPC 등 이 외에도 다양한 기능을 제공합니다. 이런 기능들을 특별히 구현 할 필요 없이 프레임워크에서 제공해 주는 것을 사용하면 됩니다. 이런 것을 통해서 많은 개발 시간을 단축 시킬 수 있습니다.



CodeIgniter를 선택한 이유.

CodeIgniter는 매우 가볍은 프레임워크입니다. PHP Framework 비교 글에서 언급하였다 시피 codeIgniter는 PHP Framework중에서 최고의 속도를 자랑합니다.
학습이 쉽습니다. 뿐만 아니, 친절한 도움말이 제공됩니다.(한글번역본도 있습니다.).
MVC 패턴을 지원합니다. 비니지스로직 계층과 표현계층이 분이 되어 있고 디자이너와 협업시에는 템플릿파일에 최소한의 코드로 제작 할 수 있습니다.
그리고 무료 입니다 ^ ^;; 가장 중요한가요?

아래 내용은 CodeIgniter 제공하는 기능 목록 입니다. CodeIgniter 사용자 가이드에서 퍼왔습니다 ^^;;;.

  • 모델-뷰-컨트롤러 기반
  • PHP 4 에 적합
  • 엄청 가벼움
  • 여러플렛폼을 지원하는 완벽한 데이터베이스 클래스들
  • 액티브레코드(Active Record Database) 지원
  • 폼과 데이터의 검증
  • 보안과 XSS 필터링
  • 세션 관리
  • Email 전송클래스. 첨부파일지원.HTML/Text 지원.다양한프로토콜 지원(sendmail, SMTP, and Mail) 등.
  • 이미지 관리 라이브러리(자르기,크기조절,돌리기 등).GD , ImageMagick, NetPBM 지원
  • 파일 업로드 클래스
  • FTP 클래스
  • 로컬라이즈(Localization)
  • 페이지네이션
  • 데이터암호화
  • 벤치마크
  • 전체페이지 캐싱
  • 에러로깅
  • 성능측정(Application Profiling)
  • 스캐폴드(Scaffolding)
  • 캘린더클래스
  • User Agent 클래스
  • Zip 압축
  • 템플릿엔진
  • 트랙백(Trackback)
  • XML-RPC 라이브러리
  • 단위테스트
  • 검색엔진에 색인되기 좋은 URLs
  • 유연한 URI 라우팅
  • 후킹,클래스확장,플러그인 지원
  • 방대한 헬퍼 라이브러리

이런 엄청난 기능을 제공해 주는데, 사용 안 할 수 없겠죠?
그럼 시작해 보겠습니다.


1. CodeIgniter 다운로드

당연히 다운로드 받아야 겠죠? CodeIgniter 홈페이지에 가서 받으시면 됩니다. 현재 가장 최신은 1.7.1입니다.



2. 설치 및 구조 좀 살펴 보기.

CodeIgniter의 압축을 푸시면 위와 같은 구조가 나옵니다. 참 많죠? -_-;;
이 파일들은 Apache에 PHP가 설치되고, MySQL이 설치된 환경의 디렉토리에 복사 하시면 됩니다. 여기서는 ci라는 폴더를 만들어서 복사해서 넣겠습니다.

그러면, 이 많은 폴더에 뭐가 들어 있는지 간략하게 적어 보겠습니다.
아래부터는 CodeIgniter를 CI라고 쓰겠습니다. 코드이그나이터 라고 쓸려니.. 영타도 길고 해서.. 줄여서 쓸랍니다.
  • system : CI 작업을하게 되는 모든 파일입니다.
    • application : 응용 프로그램 폴더 입니다. 현재 작업 하시는 공간이라고 보시면 좋습니다.
      • config : 응용프로그램의 환경설정. 자동로드 및 데이터베이스 연결, 라우트등 대부분의 설정을 합니다.
      • controllers : 응용프로그램 컨트롤.
      • errors : 응용프로그램에 대한 오류 페이지 템플릿.
      • helpers : 헬퍼 저장소.
      • hooks : CI의 코어 파일을 변경하지 않고 작동방식을 변경할때 사용
      • language : 다국어 지원을 위한 언어 폴더.
      • libraries : 응용프로그램 사용자 라이브러리.
      • models : 모델. 데이터베이스와 연동하여 사용하기 위한 클래스.
      • views : 뷰. 웹페이지 디자인 및 템플릿.
    • cache : 캐시 라이브러리에 의해 생성된 캐시가 저장 됨.
    • codeigniter : codeingiter
    • database : 데이터베이스 드라이버와 클래스.
    • fonts : 이미지 편집 라이브러에 사용할 글꼴.
    • helpers : CI에서 제공하는 기본 핼퍼.
    • language : CI에서 기본제공되는 언어
    • libraries : 라이브러리
    • logs : 지정된 로그가 기록 됨.
    • plugin : 플러그인
    • scaffolding : 데이터베이스 조작 클래스.
  • user_guide : 사용자 도움말. 홈페이지에 있는 도움말과 동일한 내용입니다.
  • index.php : CI의 시작점. 시스템 및 응용프로그램의 폴더 이름을 변경 할 수 있습니다.


3. CI 동작 개념


먼저 CI 한글 사용자 가이드의 내용을 보시겠습니다.

  1. The index.php 는 프론트콘트롤러(front controller)로 동작하여 CI가 동작하기 위한 기반리소스들을 초기화 합니다.
  2. 라우터모듈(Routing)은 http 요청을 분석하여 어떤 동작을 해야할지를 결정합니다.
  3. 캐쉬파일이 있다면 그파일을 바로 브라우저로 보내고 일반적인 동작절차는 무시합니다.
  4. 보안모듈(Security)은 프로그램 컨트롤러가 로딩 되기전에 HTTP 요청및 어떤 사용자 전송데이터든지 모두 필터링합니다.
  5. 컨트롤러(Application controller)는 사용자 요청을 처리하기 위해 모델을 로드하고,코어라이브러리,플러그인,헬퍼 및 필요한 다른 리소스들을 로드 합니다.
  6. 최종적으로 뷰모듈(View)이 렌더링되어 브라우저로 전송됩니다. 캐싱이 활성화 되어이다면 먼저 캐쉬(Cashing)하여 다음번 요청에 사용할 수 있도록 합니다.

위와 같은 처리를 거쳐서 어플리케이션이 돌아 가게 됩니다. 참 복잡하죠? ^^;; 하지만 걱정하지 마세요.. 대부분의 기능은 프레임워크에서 담당해 주고 있습니다. 개발자는 약간의 손만 거들 뿐~ ^^;


이번 포스팅에서는 이 정도의 간단한 구조라고 생각하시면 됩니다. Controller를 제작해서 Model을 통해서 DataBase의 정보를 빼오고 View를 통해서 출력 하는 구조 입니다.

// 아이고 -_-;;; 아직 코딩 시작도 못 했는데.. 생각보다 내용이 길어 졌네요 ^^;; 코딩은 다음글로~ 졸리네요 ^^