 |
|
애플리케이션 빌드
애플리케이션이 어떤 모습이 될지 Part 1에서 잠깐 언급했다. 중요한 건 이 애플리케이션이 실제로 도처에 있는 여러 다른 비디오 공유 사이트와 경쟁할 목적으로 만들어지고 있지는 않다는 점이다. 초점을 맞추고 있는 것은 등급 매기기, 순위 매기기 등 사회적 성격 같은 게 아니다. 이 애플리케이션은 자신의 비디오 파일들을 관리하기 위해 사용할 수 있는 애플리케이션이다. 이 튜토리얼에서는 아주 기본적인 것을 빌드할 것이다. 기본적인 사용자 등록 방법, My Videos 페이지, 간단한 파일 업로딩, OS FLV 라이브러리와의 통합이 바로 그것이다. 시작하려면 할 게 많다. CakePHP를 설명하는 데 많은 부분을 할애하지는 않겠지만 기초적인 CakePHP 튜토리얼이 필요하다고 판단된다면 참고자료 절에 참고할만한 게 하나 있다. 이제 모델을 정의하는 것으로 애플리케이션 빌드를 시작하자.
애플리케이션 모델 설정
곧바로 CakePHP의 코드 생성기인 베이크(Bake)를 사용하여 애플리케이션 빌드를 해보자. 다만 그러기 전에 애플리케이션에 대한 모델을 설정할 필요가 있다.
Part 1에서 테이블을 몇 개 생성했다. 지금 당장 고려할 것은 사용자, 비디오, 태그 테이블인데 이 테이블 각각에 대해 CakePHP에서 모델을 설정해야 한다. 테이블들은 서로 일부 관련성을 갖고 있다. 예를 들어 비디오 테이블은 비디오를 업로드한 사람이 누구인지 알려주는 user_id 필드를 갖는다. 또한 특정 비디오에 태그를 다는 것을 가능하게 해주는 join 테이블도 있다. CakePHP를 정말 제대로 사용하려면 모델에서 이러한 관계, 이른바 모델 조합(model associations)을 정의하는 게 필요하다.
사용자 모델을 정의한 app/models/user.php는 아주 간단하다. 해줄 거라곤 모델의 이름을 명시하고 아래에 보인 것처럼 사용자와 비디오 간에 hasMany 관계를 정의하는 것이다.
Listing 1. 사용자 모델
class User extends AppModel {
var $name ='User';
var $hasMany = array(
'Video' => array(
'className' => 'Video'
)
);
}
|
이와 비슷하게 비디오 모델인 app/models/video.php에는 이름과 함께 Users에 대한 비디오의 belongsTo 관계를 정의할 필요가 있다. 또한 태그와는 hasAndBelongsToMany 관계가 있음을 명시할 필요가 있다. 비디오마다 여러 태그를 가질 수 있고 개개 태그는 여러 비디오에 적용될 수 있다.
Listing 2. 비디오 모델
class Video extends AppModel {
var $name ='Video';
var $belongsTo = array(
'User' => array(
'className' => 'User'
)
);
var $hasAndBelongsToMany = array(
'Tag' => array(
'className' => 'Tag',
'joinTable' => 'videos_tags'
)
);
}
|
마지막으로 태그 모델인 app/models/tag.php에는 이름과 함께 태그는 비디오와 hasAndBelongsToMany 관계가 있음을 명시한다.
Listing 3. 태그 모델
class Tag extends AppModel {
var $name ='Tag';
var $hasAndBelongsToMany = array(
'Video' => array(
'className' => 'Video',
'joinTable' => 'videos_tags',
)
);
}
|
이제 모델이 만들어졌으니 베이크 코드 생성기를 사용하자.
빨리 시작하는 방법
베이크는 CakePHP 콘솔 애플리케이션으로, 코드 생성에 사용할 수 있다. 베이크 콘솔은 테이블, 모델, 조합에 근거하여 애플리케이션에 대한 기본적인 생성(Create), 읽기(Read), 갱신(Update), 삭제(Delete)를 뜻하는 이른바 CRUD 기능을 제공한다. 사용하기 간단하며 실제로 사용하다 보면 금방 익숙해진다.
베이크는 app 디렉터리에서 구동해야 한다. 따라서 CakePHP를 /cakephp 디렉터리에 설치했다면 실행 전에 /cakephp/app 디렉터리로 이동해야 한다. 시스템 PATH에 cake/console 디렉터리를 추가해 둔다면 다음 단계 수행이 좀 더 쉬워지겠지만 여기서는 그렇게 하지 않았다고 가정하고 진행한다.
여러분의 컨트롤러를 만드는 것으로 시작해보자. 베이크 호출 시 하고자 하는 일을 명시해주면 베이크와 별로 주고 받을 내용 없이 작업을 진행할 수 있다. 예를 들어 app 디렉터리에서 사용자 컨트롤러를 만들고자 했다면 ../cake/console/cake bake controller Users scaffold라고 해준다.
베이크 콘솔은 테스트 파일을 만들지 물어볼 것이며 여기서 No라고 하면 작업은 끝난다. app/controllers/user_controller.php가 새로운 사용자 컨트롤러이며 기본적인 CRUD 기능을 담고 있다. 이후 이런 식으로 비디오와 태그 컨트롤러도 만들어낼 수 있다.
Listing 4. 비디오와 태그 컨트롤러 만들기
../cake/console/cake bake controller Videos scaffold
../cake/console/cake bake controller Tags scaffold
|
조합 뷰를 만들려면 대화형으로 베이크 콘솔을 띄우라. ../cake/console/cake bake view라고 입력하면 된다. 콘솔에서는 어떤 컨트롤러용 뷰를 만들지 물어볼 것이다. 여기에서는 사용자, 비디오, 태그용 뷰를 만들 필요가 있는데 따라서 이 과정을 몇 번에 걸쳐 해야 한다. 사용자 뷰부터 만들어보자. 베이크는 대화형으로 작업할지 물어올 것이고 관리자 라우팅용 뷰 생성을 원하는지도 물어올 것이다. 모두 no라고 답한다. 그리고 나면 일련의 파일이 생성된 것을 볼 수 있을 것이다(이 예에서는 app/views/users 디렉터리에 생성됨). 비디오와 태그에 대해 이 과정을 반복한다. 그리고 나면 애플리케이션의 기본 껍데기는 갖추게 된다. 지금 빌드된 애플리케이션을 갖고 이것저것 해보자. http://[도메인]/users나 http://[도메인]/videos로 가서 뭐가 만들어졌는지 살펴보라. 거기에 있는 게 뭔지 감이 온다면 커스터마이징을 시작할 때다.
커스터마이징하기 전에 하나만 바꾸고 가자. http://[도메인]으로 가면 CakePHP가 어떻게 설치되어 동작하는지에 대해 알려주는 페이지가 나타날 것이다. 도메인을 로드할 때 index 액션을 호출하여 기본적으로 비디오 목록을 보여주도록 이 페이지를 변경하자. 그러려면 app/config/routes.php 파일을 수정해야 한다.
이 파일에서 Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); 줄을 볼 수 있을 것이다. CakePHP가 루트 요청을 비디오 컨트롤러의 index 액션으로 보내도록 이 줄을 Router::connect('/', array('controller' => 'videos', 'action' => 'index'));로 고쳐준다.
이제 간단한 변경은 마쳤고 애플리케이션 설정에 좀 더 깊숙이 들어갈 준비가 되었다.
|