Erzsamatory Weblog


※ 외국 문서 번역 자료입니다.

원문: Fundamentals - Module (http://goo.gl/7LDE51)


모듈은 모듈, 뷰, 컨트롤러, 컴포넌트를 독자적으로 가지고 있는 단독적인 소프트웨어 유닛입니다. 여러 측면에서 볼 때, 모듈은 어플리케이션을 닮아 있습니다. 두 개의 차이점이라고 하면, 모듈은 독자적으로 실행될 수 없고, 어플리케이션 내에서만 실행될 수 있다는 것이 가장 큰 차이점입니다. 개발자는 어플리케이션의 컨트롤러에 접근하는 것과 같이 모듈 내의 컨트롤러에 접근할 수 있습니다.

모듈은 몇몇의 경우에 유용하게 사용됩니다. 큰 규모의 어플리케이션에서는 개발자는 해당 어플리케이션을 여러 개의 모듈로 쪼갤 수 있으며, 그 각각의 모듈은 각자 개발되고 유지보완될 수 있습니다. 개발자는 댓글 관리 시스템, 회원 관리 시스템을 각각의 모듈로 개발한 후, 나중에 다른 프로젝트에서 재활용할 수도 있습니다.


사용자 삽입 이미지


1. 모듈 만들기


모듈은 특별한 ID(Unique ID)의 이름을 가지는 디렉터리에 저장됩니다. 모듈 디렉터리의 기본 구조는 어플리케이션 디렉터리의 기본 구조와 비슷합니다. 다음은 forum이라고 이름 지어진 모듈 디렉터리의 기본 구조입니다.

forum/
   ForumModule.php            the module class file
   components/                containing reusable user components
      views/                  containing view files for widgets
   controllers/               containing controller class files
      DefaultController.php   the default controller class file
   extensions/                containing third-party extensions
   models/                    containing model class files
   views/                     containing controller view and layout files
      layouts/                containing layout view files
      default/                containing view files for DefaultController
         index.php            the index view file


모듈은 CWebModule을 부모 클래스로 가지는 모듈 클래스가 반드시 존재해야 합니다. 해당 모듈 클래스의 이름은 ucfirst($id).'Module' 와 같이 만들어져야 하며, 여기에서 $id는 모듈의 ID (모듈 디렉터리의 이름)를 의미합니다. 모듈 클래스는 모듈 전반적으로 사용되는 정보를 보관하고 처리하는데 중심적인 역할을 수행합니다. 예를 들어, 개발자는 모듈 속성 값을 저장할 때 CWebModule::params 를 사용할 수 있으며, 모듈 레벨의 어플리케이션 컴포넌트를 사용할 때 CWebModule::components 를 사용할 수 있습니다.

참고: 개발자는 Gii라는 모듈 생성기를 통해서 빈 모듈을 만들 수 있습니다.


2. 모듈 사용하기


모듈을 사용하기 위해서는 먼저 해당 모듈을 어플리케이션 디렉터리 하위의 modules 디렉터리에 저장해야 합니다. 그리고 난 후, 어플리케이션의 모듈 속성 값을 통해서 해당 모듈을 실행할 수 있는 환경을 만들어야 합니다. 예를 들어 위에서 소개한 forum 모듈을 사용하고자 한다면, 개발자는 어플리케이션 설정 스크립트에 다음과 같은 내용을 추가해야 합니다.

return array(
    ......
    'modules'=>array('forum',...),
    ......
);

또한 모듈 초기 설정을 이 파일을 통해서 할 수도 있습니다. 이것은 어플리케이션 컴포넌트를 설정할 때와 매우 흡사합니다. 예를 들어 forum 모듈에 postPerPage 라는 초기 속성 값을 전달하고 싶다면, 개발자는 아래와 같은 내용을 어플리케이션 설정 스크립트에 추가하면 됩니다.

return array(
    ......
    'modules'=>array(
        'forum'=>array(
            'postPerPage'=>20,
        ),
    ),
    ......
);

모듈의 인스턴스는 현재 실행되고 있는 컨트롤러의 모듈 속성 값을 통해서 접근할 수 있습니다. 개발자는 모듈 인스턴스를 통해서, 모듈 레벨의 정보에 접근할 수 있습니다. 예를 들어 모듈의 postPerPage 속성 값에 접근하고 싶다면, 개발자는 아래와 같이 접근할 수 있습니다.

$postPerPage=Yii::app()->controller->module->postPerPage;
// or the following if $this refers to the controller instance
// $postPerPage=$this->module->postPerPage;


모듈 내 컨트롤러의 액션에 대해서는 moduleID/controllerID/actionID 경로로 접근이 가능합니다. 예를 들어 forum 모듈이 PostController 라는 이름의 컨트롤러를 가지고 있다고 가정했을 때, 개발자는 forum/post/create 경로를 통해서 해당 컨트롤러의 create 액션에 접근할 수 있습니다. 이에 대응하는 URL은 다음과 같이 될 것입니다. ㅡ http://www.example.com/index.php?r=forum/post/create

참고: 컨트롤러가 controllers 디렉터리의 서브 디렉터리에 있는 경우에도 위와 같은 방법으로 접근할 수 있습니다. 예를 들어 PostControllerforum/controllers/admin 에 있는 경우에는, 개발자는 forum/admin/post/create 경로로 해당 액션에 접근할 수 있습니다.


3. 모듈 집합


모듈은 제한된 레벨 하에서 서로 함께 사용될 수 있습니다. 즉, 한 모듈이 다른 기능을 가지고 있는 다른 모듈을 포함시킬 수 있습니다. 개발자는 후자인 자식 모듈에서 전자인 부모 모듈에 접근할 수도 있습니다. 자식 모듈은 위에서 보았던 어플리케이션 설정 값을 설정하는 것처럼, 부모 모듈의 모듈 속성 값으로 인스턴스가 생성이 되어야 제대로된 자식 모듈의 기능을 다할 수 있습니다.

개발자는 자식 모듈의 컨트롤러에 접근하기 위해서 다음의 경로를 사용할 수 있습니다. ㅡ parentModuleID/childModuleID/controllerID/actionID


목차
1. 시작하기
     1-1. Yii란 무엇인가?
     1-2. 설치
     1-3. 아파치 웹서버와 Nginx 설정
     1-4. 첫 Yii 어플리케이션 생성

2. 기본 개념
     2-1. 모델-뷰-컨트롤러 (MVC)
     2-2. 엔트리 스크립트
     2-3. 어플리케이션
     2-4. 컨트롤러
     2-5. 모델
     2-6.
     2-7. 컴포넌트
     2-8. 모듈 (현재 페이지)
     2-9. 경로 별칭과 네임스페이스
     2-10. 일반 규칙
     2-11. 개발 흐름 (Workflow)
     2-12. MVC 예제

3. 양식(Form) 사용 연습
     3-1. 개요
     3-2. 모델 생성
     3-3. 액션 생성
     3-4. 양식 생성
     3-5. 테이블 추출
     3-6. 양식 생성기 사용하기

4. 데이터베이스 사용 연습
     4-1. 개요
     4-2. DB 액세스 객체
     4-3. 쿼리 빌더
     4-4. 동적 레코드
     4-5. Relational Active Record
     4-6. 데이터베이스 변환

5. 캐싱
     5-1. 개요
     5-2. 데이터 캐시
     5-3. 부분 캐시
     5-4. 페이지 캐시
     5-5. 동적 컨텐츠

6. Yii 확장
     6-1. 개요
     6-2. 확장 사용하기
     6-3. 확장 생성하기
     6-4. 써드파티 라이브러리 사용하기

7. 테스트
     7-1. 개요
     7-2. Defining Fixtures
     7-3. Unit Testing
     7-4. Functional Testing

원문: http://www.yiiframework.com/doc/guide/
http://www.erzsamatory.net/trackback/40

건전한 댓글 문화를 만들어주시기 바랍니다 ^^
불건전한 댓글이 등록되는 경우 관리자의 임의적 판단으로 삭제될 수 있음을 미리 공지드립니다.

비밀글로 작성하기