본문 바로가기

Yii Framework/블로그 만들기

05. 데이터베이스 설치

이 곳은 제가 개인적으로 YII framework의 블로그 만들기를 번역해 놓은 곳입니다.

제가 영어 전공자도.. 그렇다고 영어랑 친하지도 않습니다. 

그래서 보시면 뭔가 글도 엉성하고 말이 안맞는게 많습니다.

잘못 오역된 부분이라던지 그런 부분들 친절하게 알려주시면 바로 수정하겠습니다.

이 페지의 원글 http://www.yiiframework.com/doc/blog/1.1/en/prototype.database



데이터베이스 설치

  1. 데이터 베이스 만들기
  2. 데이터베이스 연결 설정하기

기본 어플리케이션의 데이터베이스의 설계가 끝났습니다.
이번 섹션에서는 블로그의 데이터베이스를 작성하고 기본 어플리케이션에서 데이터베이스와의 연결을 설정합니다


1. 데이터베이스 만들기

Yii 데이터베이스 지원은 PDO 위에 구축되어 있기 때문에 어플리케이션의 코드를 변경하지 않고, MySQL 및 PostgreSQL 등
다양한 DBMS를 사용할 수 있습니다.

우리는 SQLite 데이터베이스를 사용하겠습니다.
Yii 데이터베이스 PDO 위에 구축되어 있기 때문에 어플리케이션의 코드를 변경하지 않고, MySQL 및 PostgreSQL 등 다양한 DBMS를 사용할 수 있습니다.

데이터베이스 파일은 blog.db는 /wwwroot/blog/protected/data 에 만들면 됩니다.
또한, 디렉토리와 데이터베이스 파일 모두 쓰기권한으로 되어 있어야 웹서버 프로세서가 돌면서 SQLite 에 서 사용할수 있습니다.

우리는 이미 설치된 Yii 블로그 데모에서 데이터베이스 파일을 복사 할수 있으며 사용 할수 있습니다.
데이터파일 은 /wwwroot/yii/demos/blog/protected/data/blog.db 에 있습니다. 또는,  /wwwroot/yii/demos/blog/protected/data/schema.sqlite.sql 파일을 실행하여 데이터베이스를 생성 할수 있습니다.
라는 파일에있는 SQL 문을 실행하여 데이터베이스를 생성 할 수 있습니다.

팁: SQL 문장의 실행은 SQLite 공식 웹 사이트 에있는 sqlite3 실행 도구를 사용할 수 있습니다.


2. 데이터베이스 연결 설정하기

기본어플리케이션에서 블로그 데이터 베이스를 사용하기 위해서는 /wwwroot/blog/protected/config/main.php 에 저장되어 있는 PHP 스크립트의 구성을 변경하여야 합니다. 이 스크립트는  name-value 쌍으로 구성된 연관 배열을 반환하며, 이 값은
기본어플리케이션의 인스턴스의 쓰기 속성을 초기화 하는데 사용됩니다.

DB 구성 요소는 다음과 같습니다.

return array(
    ......
    'components'=>array(
        ......
        'db'=>array(
            'connectionString'=>'sqlite:/wwwroot/blog/protected/data/blog.db',
            'tablePrefix'=>'tbl_',
        ),
    ),
    ......
);

위의 설정은 어플리케이션이 DB application component를 가지고 있으며, connectionString 의 값은 sqlite:/wwwroot/blog/protected/data/blog.db로 초기설정이 되며, 그리고 tablePrefix속성이 tbl_ 이라는것을 보여줍니다.


이 설정은 어플리케이션의 어디에서나 Yii::app()->db 코드를 통해 DB 연결 개체에 액세스 할 수 있습니다. 
Yii::app()는 entry script로 작성된 애플리케이션 인스턴스를 리턴 해주는 것에 주의 해야 합니다.DB 연결이 있을수 있는 매서드와 속성에 관심이 있다면, class reference를 참조하세요. 하지만, 대부분의 경우 우리는 직접 DB 연결을 사용할 수 없습니다.
대신, 우리는 액티브 레코드 를 사용하여 데이터베이스에 액세스합니다.


구성 파일에서 설정 한 tablePrefix 속성에 대해 좀 더 설명하겠습니다. 이것은 데이터베이스 테이블 이름의 접두어로 tbl_ 을 사용하는 것을 db 연결 개체에 전달합니다. 구체적으로는, 만약 SQL 문장에 이중 중괄호로 둘러싸인 토큰이있는 경우 (예:{{post}}), db 연결은 그것을 테이블 접두어를 붙인 이름 (예:tbl_post)로 변환 하고 DBMS에 전송하여 실행 시킵니다.
이 기능은 향후 테이블 접두어를 변경해야하는 경우에도 소스 코드를 만지는 필요가 없다는 점에서 매우 유용합니다. 
예를 들어, 일반 콘텐츠 관리 시스템 (CMS)를 개발하는 경우이 기능을 사용하면 CMS를 새로운 환경에 설치할 때 사용자가 테이블 접두어를 자유롭게 선택할 수 있도록 할 수 있습니다.

팁: 만약 데이터를 저장하기 위해 SQLite 대신 MySql을 사용 하려면 /wwwroot/yii/demos/blog/protected/data/schema.mysql.sql 의 SQL 문을 사용하여 blog 라는 MySql 데이터베이스를 만들수 있습니다. 그리고 기본어플리케이션의 구성 파일을 다음과 같이 수정합니다.

return array(
    ......
    'components'=>array(
        ......
        'db'=>array(
            'connectionString' => 'mysql:host=localhost;dbname=blog',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
            'tablePrefix' => 'tbl_',
        ),
    ),
  ......
);