Erzsamatory Weblog


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

원문: Creating Your First Yii Application (http://goo.gl/cKye6K)


Yii Framework의 어플리케이션


Yii를 기반으로 하는 어플리케이션의 개발에 대한 이해를 높이기 위해서 이 포스트에서는 Yii 어플리케이션을 어떻게 생성하는지 알려드리겠습니다. 여기에서는 Yii 어플리케이션을 생성할 때 사용되는 강력한 명령 툴인 yiic와 상황에 맞는 코드를 자동으로 생성해주는 강력한 웹 기반 코드 생성기인 gii를 사용할 것입니다. 설명의 편의를 위해서 Yii루트(YiiRoot)는 Yii가 설치된 경로, 웹루트(WebRoot)는 웹서버의 최상위 경로라고 가정하겠습니다.

다음의 명령어를 통해서 yiic를 실행합니다.

% YiiRoot/framework/yiic webapp WebRoot/testdrive


참고
MacOS, Linux, Unix에서 yiic를 실행할 때, 개발자는 yiic 파일에 접근할 수 있도록 이 파일에 대해서 권한을 설정해야 합니다. 또는 다음과 같은 방법으로 실행할 수도 있습니다.
% cd WebRoot
% php YiiRoot/framework/yiic.php webapp testdrive


이 명령어는 WebRoot/testdrive 경로에 빈 Yii 어플리케이션을 생성합니다. 이 어플리케이션은 Yii 어플리케이션이 필요로하는 가장 최소한의 필수적인 디렉토리로 구성됩니다.

위에서 생성된 빈 Yii 어플리케이션에 접속하기 위해서는 일반적으로 아래의 URL을 사용하면 됩니다.

http://hostname/testdrive/index.php


쉽게 알 수 있듯이, 이 어플리케이션은 홈페이지, 소개 페이지, 문의 페이지, 로그인 페이지 등 총 4개의 페이지를 가지고 있습니다. 문의 페이지는 웹 사이트 이용자가 문의사항이 있을 때 양식을 작성하여 웹 관리자에게 보낼 수 있는 양식을 포함하고 있고, 로그인 페이지는 특정한 집단에 공개된 페이지에 접근하기 전 웹 사용자에게 접근 허가 명령을 내리는 역할을 담당합니다. 더 자세히 알아보기 위해서 아래의 스크린샷을 참고해 주십시오.


빈 Yii 어플리케이션의 홈페이지

빈 Yii 어플리케이션의 홈페이지



빈 Yii 어플리케이션의 문의 페이지

빈 Yii 어플리케이션의 문의 페이지



문의 페이지에서 입력 오류 발생 시 나타나는 화면

문의 페이지에서 입력 오류 발생 시 나타나는 화면



문의사항이 성공적으로 발송되었을 때 나타나는 페이지

문의사항이 성공적으로 발송되었을 때 나타나는 페이지



빈 Yii 어플리케이션의 로그인 페이지

빈 Yii 어플리케이션의 로그인 페이지



다음은 이 어플리케이션의 디렉토리 구성을 나타냅니다. 더 자세한 설명은 일반 규칙을 참고하십시오.

testdrive/
   index.php                 Web application entry script file
   index-test.php            entry script file for the functional tests
   assets/                   containing published resource files
   css/                      containing CSS files
   images/                   containing image files
   themes/                   containing application themes
   protected/                containing protected application files
      yiic                   yiic command line script for Unix/Linux
      yiic.bat               yiic command line script for Windows
      yiic.php               yiic command line PHP script
      commands/              containing customized 'yiic' commands
         shell/              containing customized 'yiic shell' commands
      components/            containing reusable user components
         Controller.php      the base class for all controller classes
         UserIdentity.php    the 'UserIdentity' class used for authentication
      config/                containing configuration files
         console.php         the console application configuration
         main.php            the Web application configuration
         test.php            the configuration for the functional tests
      controllers/           containing controller class files
         SiteController.php  the default controller class
      data/                  containing the sample database
         schema.mysql.sql    the DB schema for the sample MySQL database
         schema.sqlite.sql   the DB schema for the sample SQLite database
         testdrive.db        the sample SQLite database file
      extensions/            containing third-party extensions
      messages/              containing translated messages
      models/                containing model class files
         LoginForm.php       the form model for 'login' action
         ContactForm.php     the form model for 'contact' action
      runtime/               containing temporarily generated files
      tests/                 containing test scripts
      views/                 containing controller view and layout files
         layouts/            containing layout view files
            main.php         the base layout shared by all pages
            column1.php      the layout for pages using a single column
            column2.php      the layout for pages using two columns
         site/               containing view files for the 'site' controller
            pages/           containing "static" pages
               about.php     the view for the "about" page
            contact.php      the view for 'contact' action
            error.php        the view for 'error' action (displaying external errors)
            index.php        the view for 'index' action
            login.php        the view for 'login' action


어플리케이션 생성기는 Git 버전 관리 시스템에서 필요로 하는 파일을 생성하는 기능을 지원합니다. 다음의 명령어를 통해서 Git 버전 관리 시스템의 필수적 파일인 .gitignore와 .gitkeep 파일을 생성합니다.

% YiiRoot/framework/yiic webapp WebRoot/testdrive git


Git 이외의 버전 관리 시스템을 사용하려면 세 번째 매개변수 (hg value)를 사용해야 합니다. 이 기능은 1.1.11 버전부터 지원합니다.


사용자 삽입 이미지


1. 데이터베이스 연결


대부분의 웹 어플리케이션은 데이터베이스 기반으로 개발됩니다. 위에서 만들어진 빈 Yii 어플리케이션도 예외는 아닙니다. 데이터베이스를 사용하기 위해서 어떻게 데이터베이스에 연결해야 하는지 알아야 합니다. 데이터베이스 연결에 관한 설정은 이 어플리케이션의 설정 파일 WebRoot/testdrive/protected/config/main.php에서 변경할 수 있으며, 다음은 데이터베이스 연결에 관한 설정의 한 부분을 보여줍니다.

return array(
    ......
    'components'=>array(
        ......
        'db'=>array(
            'connectionString'=>'sqlite:protected/data/testdrive.db',
        ),
    ),
    ......
);


위 코드는 Yii Framework에 이 어플리케이션은 WebRoot/testdrive/protected/data/testdrive.db 를 경로로 하는 SQLite 데이터베이스를 필요로 한다는 것을 알려줍니다. SQLite 데이터베이스는 빈 어플리케이션을 생성할 때 자동으로 해당 어플리케이션에 포함됩니다. 이 데이터베이스는 tbl_user라는 한 개의 테이블을 가지고 있습니다.

CREATE TABLE tbl_user (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    username VARCHAR(128) NOT NULL,
    password VARCHAR(128) NOT NULL,
    email VARCHAR(128) NOT NULL
);


만약 SQLite 대신 MySQL을 사용하고 싶다면, 데이터베이스를 생성할 때 MySQL 스키마 파일 (WebRoot/testdrive/protected/data/schema.mysql.sql)을 사용하면 됩니다.

참고
Yii Framework의 데이터베이스 기능을 사용하기 위해서는 PHP PDO 확장과 PDO 데이터베이스 드라이버가 설치되어 있어야 합니다. 이 포스트에서 설명하는 테스트 어플리케이션을 정상적으로 실행하기 위해서는 php_pdo와 php_pdo_sqlite 확장이 실행되어 있어야 합니다.


2. CURD 명령어 실행


이제부터 재미있는 부분이 시작됩니다. 위에서 간단하게 생성된 tbl_user 테이블에 대해서 CRUD (생성, 읽기, 업데이트, 삭제) 명령을 실행하는 방법에 대해서 설명하겠습니다. 이 기능 또한 어플리케이션 개발에 실제적으로 사용되는 것들입니다. 여기에서는 실제 코드를 작성할 때 발생할 수 있는 문제를 피하기 위해서 웹 기반 코드 생성 툴인 Gii를 사용할 것입니다.

Gii는 1.1.2 버전부터 지원합니다. 앞서 설명했던 yiic 또한 1.1.2 버전부터 지원합니다. 더 자세한 설명은 Implementing CRUD Operations with yiic shell 문서를 참고해 주십시오.


Gii 설정


Gii를 사용하기에 앞서, 우리는 먼저 어플리케이션 설정 파일인 WebRoot/testdrive/protected/config/main.php 파일을 수정해야 합니다.

return array(
    ......
    'import'=>array(
        'application.models.*',
        'application.components.*',
    ),
     
    'modules'=>array(
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'pick up a password here',
        ),
    ),
);


위 설정을 한 후, http://hostname/testdrive/index.php?r=gii에 접속합니다. 그러면 패스워드를 요청하는 창이 나타날 것입니다. 여기에서의 패스워드는 위 설정 파일에 입력했던 그 패스워드를 입력하면 됩니다.


사용자 모델 생성


Gii에 로그인한 후, Model Generator 링크를 클릭합니다. 그러면 다음과 같이 모델 생성 페이지가 나타날 것입니다.

모델 생성 페이지

모델 생성 페이지



Table Name 입력란에 tbl_user를 입력합니다. Model Class 입력란에는 User를 입력합니다. 모두 입력한 후 [Preview] 버튼을 클릭하면, 생성된 코드를 볼 수 있습니다. 코드 미리보기 창에서 [Generate] 버튼을 클릭하면 protected/models 경로에 User.php라는 새로운 파일이 생성됩니다. 나중에 다시 설명하겠지만, 여기에서 생성된 User 모델 클래스는 객체 지향 방식으로 tbl_user 테이블과 의사소통하는 기능을 지원합니다.


CRUD 코드 생성


모델 클래스 파일을 설정했으니 이제부터 사용자 데이터에 대한 CRUD 명령을 실행하는 코드를 생성할 수 있습니다. Gii 메인 페이지에서 Crud Generator 링크를 클릭하면 다음과 같은 화면이 나타납니다.

CRUD Generator

CRUD Generator



Model Class 입력란에 User를 입력합니다. Controller ID 입력란에 소문자로 user를 입력합니다. 모두 입력한 후, 하단의 [Preview] 버튼을 클릭한  후, 다음에 나타나는 [Generate] 버튼을 클릭합니다. 이렇게 함으로써 CRUD 명령어 생성이 완료되었습니다.


CRUD 페이지 연결


다음 URL로 접속합니다.

http://hostname/testdrive/index.php?r=user

위 URL로 접속하면 tbl_user 테이블에 저장된 유저 목록을 나타내는 페이지가 나타날 것입니다.

이 페이지에서 [Create User] 버튼을 클릭합니다. 만약, 이전에 로그인한 기록이 없다면 다시 로그인하라는 메시지가 나타날 것입니다. 관리자 계정으로 로그인하면, 새로운 사용자를 추가할 수 있는 입력 양식이 나타납니다. 양식을 채우고 [Create] 버튼을 클릭합니다. 만약 양식 입력을 잘못했다면, 잘못된 값이 데이터베이스가 입력되는 것을 방지하기 위해서 오류 메시지가 나타나는 것을 볼 수 있을 것입니다. 목록 페이지로 돌아가면 추가된 사용자 목록을 확인할 수 있습니다.

위의 과정을 반복하면서 새로운 사용자를 계속 추가할 수 있습니다. 만약 한 페이지에 표시해야 하는 사용자가 너무 많을 때에는 목록 페이지에서 자동으로 목록을 여러 개의 페이지로 나눕니다.

만약 관리자 계정으로 로그인했다면, 다음의 URL을 통해서 유저 관리 페이지에 접속할 수 있습니다.

http://hostname/testdrive/index.php?r=user/admin


이 페이지는 잘 정리된 유저 목록을 보여줍니다. 상단의 테이블 헤더를 클릭하면 해당하는 열을 중심으로 정렬할 수 있습니다. 각각의 행에 있는 버튼들은 해당 데이터를 보거나, 업데이트, 삭제할 때 사용합니다. 또한 우리가 원하는 정보를 얻기 위해서 필터 기능을 사용할 수도 있습니다.

사용자 관리 페이지

사용자 관리 페이지



사용자 추가 페이지

사용자 추가 페이지




이 모든 것들이 단 한 줄의 소스코드도 작성하지 않고 지원되는 기능들입니다!


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

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

비밀글로 작성하기