Erzsamatory Weblog


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

원문: Fundamentals - Application (http://goo.gl/zPAVjU)


어플리케이션 객체는 사용자의 요청에 의하여 실행되는 프로세스의 과정을 모두 포함하고 있습니다. 어플리케이션의 가장 주가 되는 작업은 사용자 요청에 대한 기본적인 정보를 획득하는 것이고, 프로세스의 진행을 위하여 여기에서 획득한 정보를 적당한 컨트롤러에 넘겨주는 것이 가장 중요한 역할이라 할 수 있습니다. 또한 어플리케이션 레벨의 설정 값을 유지하는 역할도 담당합니다. 이러한 이유로 어플리케이션 객체는 프론트 컨트롤러(front-controller)라고 불리기도 합니다.

엔트리 스크립트에서 어플리케이션 객체는 싱글톤 패턴으로 디자인되는 것으로 정의되고 있고, 어플리케이션 싱글톤에 접근할 때에는 Yii::app()을 사용합니다.


사용자 삽입 이미지


1. 어플리케이션 설정


기본적으로 어플리케이션 객체는 CWebApplication의 인스턴트입니다. 따라서 수정이 제한될 수 있는데, Yii Framework에서는 커스터마이징을 지원하기 위하여 어플리케이션 객체가 초기화될 때 사용되는 각종 변수를 수정하는  설정 파일(configuration settings file) 또는 배열을 지원합니다. 이외의 커스터마이징의 방법으로는 CWebApplication을 확장하는 방법도 있습니다.

어플리케이션의 설정은 key-value의 쌍으로 이루어진 하나의 배열입니다. 각 key는 어플리케이션 인스턴스 실행에 영향을 미치는 변수의 이름을 나타내며, value는 이에 대응하는 값을 나타냅니다. 예를 들어, 아래의 설정은 어플리케이션의 name과 defaultController를 정의합니다.

array(
    'name'=>'Yii Framework',
    'defaultController'=>'site'
);


어플리케이션은 다른 Yii Framework의 클래스와 같이 하나의 구성요소일 뿐이라는 것을 명심해야 합니다. 이것은 다음의 두 가지를 의미합니다.
1. 개발자는 간단한 PHP 스크립트에서와 같이 임의적인 변수(설정값)를 정의할 수 없습니다. 해당 변수를 사용하기 위해서는 반드시 어플리케이션 클래스에 정의되어 있어야 합니다.
2. 어플리케이션은 개발자가 따로 변수(설정값)을 정의할 수 있게 해줍니다. 예를 들어, 개발자는 아래와 같이 변수를 정의할 수 있습니다.

array(
    'import'=>array(
        'application.components.*',
    ),
)


일반적으로 설정 파일은 protected/config/main.php와 같이 분리된 PHP 스크립트로 보관합니다. 이 스크립트는 다음과 같이 설정 배열을 반환합니다.

return array (...);


일반적으로 어플리케이션 인스턴스는 엔트리 스크립트에서 생성되는데, 개발자는 어플리케이션 인스턴스를 생성할 때 어플리케이션 설정 파일이 위치한 경로를 Yii Framework에 넘겨줌으로써 설정 값을 적용시킬 수 있습니다. 예를 들면, 다음과 같습니다.

$app=Yii::createWebApplication($configFile);


어플리케이션 설정 파일이 매우 복잡한 경우, 개발자는 이 설정 파일을 여러 개로 나눌 수 있습니다. 각각의 설정 파일은 설정 배열을 반환하는 스크립트가 되어야 합니다. 이렇게 분리된 설정 파일을 만든 후에는 어플리케이션 인스턴스에서 불러올 메인 설정 파일에서 PHP의 include() 구문을 사용하여 나머지 설정 파일을 로드합니다.


2. 어플리케이션 기본 디렉터리


어플리케이션 기본 디렉터리는 외부에서는 접근할 수 없도록 차단되는 PHP 스크립트와 데이터가 저장된 루트 디렉터리를 의미합니다. 기본적으로 어플리케이션 기본 디렉터리는 엔트리 스크립트가 저장된 디렉터리 아래에 위치하는 protected라는 이름의 서브 디렉터리입니다. 이것은 어플리케이션 설정의 basePath 설정변수를 변경함으로써 수정할 수 있습니다.

어플리케이션 기본 디렉터리에 저장되는 내용은 웹 유저가 접근할 수 없도록 외부로부터 차단되어야 합니다. 이것은, 아파치 웹 서버에서 Yii Framework가 실행된다고 가정할 때, 어플리케이션 기본 디렉터리에 .htaccess 파일을 위치시키는 것으로 해결할 수 있습니다. .htaccess 파일의 기본적인 내용은 다음과 같습니다.

deny from all


3. 어플리케이션 구성요소


구성요소 아키텍쳐를 잘 활용하면 어플리케이션 객체를 커스터마이징하거나 기능을 강화할 수 있습니다. 어플리케이션 객체는 다양한 구성요소를 관리하는데, 각각의 구성요소를 나름대로의 특별한 기능을 가지고 있습니다. 예를 들어, CUrlManager와 CHttpRequest 구성요소의 도움으로 어플리케이션 객체는 사용자 요청을 받아들이고 처리할 수 있습니다.

어플리케이션 인스턴스의 구성요소 변수를 설정함으로써, 사용할 어플리케이션 구성요소의 클래스와 설정 값을 커스터마이징할 수 있습니다. 예를 들어, 개발자는 아래와 같이 CMemCache 구성요소를  설정하여, 이 구성요소에서 두 개의 캐시 서버를 사용하도록 할 수 있습니다.

array(
    ......
    'components'=>array(
        ......
        'cache'=>array(
            'class'=>'CMemCache',
            'servers'=>array(
                array('host'=>'server1', 'port'=>11211, 'weight'=>60),
                array('host'=>'server2', 'port'=>11211, 'weight'=>40)
            )
        )
    )
)


위에서 개발자는 구성요소 배열에 cache 엘리먼트를 추가하였습니다. 이 cache 엘리먼트는 어플리케이션 구성요소의 클래스가 CMemCache이고, 어떻게 캐시 서버가 설정되어야 하는지를 명시하고 있습니다.

어플리케이션 구성요소에는 Yii::app()->ComponentID 와 같이 접근할 수 있으며, 여기에서 ComponentID는 위에서 말했던 cache와 같은 해당 구성요소의 고유한 이름입니다. 예를 들어, CMemCache 구성요소에는 Yii::app()->cache와 같이 접근할 수 있습니다.

개발자는 해당 어플리케이션 구성요소의 enabled 설정 값을 false로 정의함으로써 원하는 어플리케이션 구성요소가 실행되지 않게 할 수 있습니다. 만약, 실행되지 않은 어플리케이션 구성요소에 접근하면 Null 값이 반환됩니다.

어플리케이션 구성요소는 기본적으로 개발자의 요구가 있으면 생성됩니다. 이것은 어떤 사용자 요청이 해당 구성요소를 필요로 하지 않는다면 해당 구성요소는 실행되지 않습니다. 따라서 어플리케이션이 많은 구성요소를 설정하고 있더라도 전체적인 성능은 저하되지 않습니다. CLogRouter와 같은 일부 어플리케이션 구성요소는 해당 구성요소가 필요한지 필요하지 않은지 여부를 떠나 꼭 실행됩니다. 이것은 어플리케이션 설정에서 따로 프리로드할 구성요소를 설정할 수 있기 때문입니다.


4. 코어 어플리케이션 구성요소


웹 어플리케이션에 필요한 기본적인 기능을 지원하기 위하여 기본적으로 미리 정의된 구성요소가 있습니다. 예를 들어, request 구성요소는 사용자 요청 정보를 획득하고 요청된 URL과 쿠키 정보를 다른 구성요소에 제공할 때 사용됩니다. 이러한 코어 어플리케이션 구성요소의 설정을 변경함으로써 Yii Framework의 기본적인 작동 방식을 바꿀 수 있습니다.

다음은 CWebApplication에서 기본적으로 미리 로드되는 코어 구성요소의 목록입니다.

assetManager    CAssetManager       중요한 파일을 관리하는 구성요소
authManager     CAuthManager        역할 기반 접근 제어(role-based access control; RBAC)를 관리하는 구성요소
cache           CCache              데이터 캐시를 관리하는 구성요소. 개발자는 반드시 하부 캐시 구성요소 즉, CMemCache, CDbCache 등을 지정해야 함
clientScript    CClientScript       자바스크립트, CSS 등 클라이언트 스크립트를 관리하는 구성요소
coreMessages    CPhpMessageSource   Yii Framework 코어의 메시지를 관리하는 구성요소
db              CDbConnection       데이터베이스를 관리하는 구성요소
errorHandler    CErrorHandler       PHP 오류와 예외를 처리하는 구성요소
format          CFormatter          화면 출력을 위한 데이터 포맷 구성요소
messages        CPhpMessageSource   Yii Framework의 메시지를 관리하는 구성요소
request         CHttpRequest        사용자 요청과 관련된 정보를 관리하는 구성요소
securityManager CSecurityManager    해싱과 암호화와 같이 보안과 관련된 정보를 관리하는 구성요소
session         CHttpSession        세션과 관련된 기능을 제공하는 구성요소
statePersister  CStatePersister     provides the mechanism for persisting global state.
urlManager      CUrlManager         URL을 파싱하거나 새로 만들때 사용되는 구성요소
user            CWebUser            현재 접속한 사용자의 정보를 관리하는 구성요소
themeManager    CThemeManager       테마 관리 구성요소


5. 어플리케이션 라이프 사이클


사용자 요청을 처리할 때, 어플리케이션은 다음과 같은 라이프 사이클을 가집니다.

1. CApplication::preinit() 를 이용한 어플리케이션 프리로드
2. 클래스 로더와 오류 핸들러 로드
3. 코어 어플리케이션 구성요소 로드
4. 어플리케이션 설정 로드
5. CApplication::init() 를 이용한 어플리케이션 초기화
5-1. - 어플리케이션 동작 초기화
5-1. - 정적 어플리케이션 구성요소 로드
6. onBeginRequest 이벤트 실행
7. 사용자 요청 처리
7-1. - 사용자 요청 정보 획득
7-1. - 컨트롤러 인스턴스 생성
7-1. - 컨트롤러 실행
8. onEndRequest 이벤트 실행


목차
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/26

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

비밀글로 작성하기