글
IT/Perl 2008/08/05 16:46[ Perl ] Perl 에서의 ORM , DBIx::Class에 대해서... #1 - DBIC::Schema::Loader
: 요 근래 잠깐 깜빡하고 Catalyst 에 관한 글을 쓰지도 못하고 있었네요.
일단 그전에 미리 Template Toolkit 같은 Template Engine 이나
DBIx::Class 같은 ORM 같은 것을 알아놓고 가는 게 좋겠다는 생각에...
잠시 얘기가 빙빙 겉돌고 있습니다.
일단 DBIx::Class, 통칭 DBIC 라고 불리는 것부터 알고 나중에 차근차근 Catalyst 내용을 이어가도록 하겠습니다.
ORM 이라고 아시죠? Object-Relation Mappings 라고...
자세한 내용은 검색해보시면 짠 하고 나올겁니다. ( 검색 예 )
Perl 에서 ORM 을 얘기하면 DBIC 가 대표적인 예가 될 것입니다. 그외 여러가지 있지만 안써봐서 생략합니다.
DBIC 를 제대로 사용하려면 Schema 클래스를 만들어야 합니다.
만들어야한다에 대한 제대로 다시 정의를 하자면, "만들게 해야합니다" 입니다.
DBIx::Class::Schema::Loader 가 이 일을 해주는데요. 그런고로 한번 만들게 해보겠습니다.
이와같은 SQL 을 깨작거렸습니다. 우선 mytest 라는 DB 를 만들고 위의 user 와 company와 deathnote 라는 테이블을 생성합니다.
그리고 이와같은 스크립트를 만들었습니다.(schema-loader.pl)
그런 다음에는 이렇게 명령을 내립니다. (DBI 에서 connect_info 설정해주는 그것입니다)
그러면 이처럼 Schema 클래스가 생성되게 됩니다.
MyTest.pm 은 이처럼 썰렁합니다만..
MyTest/User.pm (MyTest::User) 는 이처럼 속이 꽉찼습니다. 처음에 SQL 로 정의해준 내용들이 그대로 정의되어 DBIC Schema 를 구성하게 됩니다.
Catalyst 에서는 위의 스크립트(schema-loader.pl)를 쓸 필요없이...
다음에는 DBIC 를 이용해서 어떻게 데이터를 다루는 가에 대해서 알아보겠습니다.
-- 참고
* DBIx::Class
* DBIx::Class::Schema::Loader
일단 그전에 미리 Template Toolkit 같은 Template Engine 이나
DBIx::Class 같은 ORM 같은 것을 알아놓고 가는 게 좋겠다는 생각에...
잠시 얘기가 빙빙 겉돌고 있습니다.
일단 DBIx::Class, 통칭 DBIC 라고 불리는 것부터 알고 나중에 차근차근 Catalyst 내용을 이어가도록 하겠습니다.
ORM 이라고 아시죠? Object-Relation Mappings 라고...
자세한 내용은 검색해보시면 짠 하고 나올겁니다. ( 검색 예 )
Perl 에서 ORM 을 얘기하면 DBIC 가 대표적인 예가 될 것입니다. 그외 여러가지 있지만 안써봐서 생략합니다.
DBIC 를 제대로 사용하려면 Schema 클래스를 만들어야 합니다.
만들어야한다에 대한 제대로 다시 정의를 하자면, "만들게 해야합니다" 입니다.
DBIx::Class::Schema::Loader 가 이 일을 해주는데요. 그런고로 한번 만들게 해보겠습니다.
CREATE TABLE user (
user_id int not null auto_increment,
name varchar(255) not null,
created_on datetime not null,
updated_on datetime not null,
primary key(user_id)
);
CREATE TABLE company (
company_id int not null auto_increment,
name varchar(255) not null,
created_on datetime not null,
updated_on datetime not null,
primary key(company_id)
);
CREATE TABLE deathnote (
death_id int not null auto_increment,
user_id int not null,
company_id int not null,
created_on datetime not null,
updated_on datetime not null,
primary key(death_id)
);
user_id int not null auto_increment,
name varchar(255) not null,
created_on datetime not null,
updated_on datetime not null,
primary key(user_id)
);
CREATE TABLE company (
company_id int not null auto_increment,
name varchar(255) not null,
created_on datetime not null,
updated_on datetime not null,
primary key(company_id)
);
CREATE TABLE deathnote (
death_id int not null auto_increment,
user_id int not null,
company_id int not null,
created_on datetime not null,
updated_on datetime not null,
primary key(death_id)
);
이와같은 SQL 을 깨작거렸습니다. 우선 mytest 라는 DB 를 만들고 위의 user 와 company와 deathnote 라는 테이블을 생성합니다.
use strict;
use warnings;
use DBIx::Class::Schema::Loader (qw/make_schema_at/);
make_schema_at(
'MyTest', {
components => [],
dump_directory => './',
},
\@ARGV,
);
use warnings;
use DBIx::Class::Schema::Loader (qw/make_schema_at/);
make_schema_at(
'MyTest', {
components => [],
dump_directory => './',
},
\@ARGV,
);
그리고 이와같은 스크립트를 만들었습니다.(schema-loader.pl)
perl schema-loader.pl dbi:mysql:mytest "mysql user" "mysql pass"
그런 다음에는 이렇게 명령을 내립니다. (DBI 에서 connect_info 설정해주는 그것입니다)
Dumping manual schema for MyTest to directory ./ ...
Schema dump completed.
그러면 이렇게 Schema dump 가 끝났다고 말해주죠.Schema dump completed.
package MyTest;
use strict;
use warnings;
use base 'DBIx::Class::Schema';
__PACKAGE__->load_classes;
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-08-05 16:25:30
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:P0OGC/gBKsOEyhe8yV+xsA
# You can replace this text with custom content, and it will be preserved on re\
generation
1;
use strict;
use warnings;
use base 'DBIx::Class::Schema';
__PACKAGE__->load_classes;
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-08-05 16:25:30
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:P0OGC/gBKsOEyhe8yV+xsA
# You can replace this text with custom content, and it will be preserved on re\
generation
1;
MyTest.pm 은 이처럼 썰렁합니다만..
package MyTest::User;
use strict;
use warnings;
use base 'DBIx::Class';
__PACKAGE__->load_components("Core");
__PACKAGE__->table("user");
__PACKAGE__->add_columns(
"user_id",
{ data_type => "INT", default_value => undef, is_nullable => 0, size => 11 },
"name",
{ data_type => "VARCHAR", default_value => "", is_nullable => 0, size => 255 },
"created_on",
{ data_type => "DATETIME", default_value => "", is_nullable => 0, size => 19 },
"updated_on",
{ data_type => "DATETIME", default_value => "", is_nullable => 0, size => 19 },
);
__PACKAGE__->set_primary_key("user_id");
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-08-05 16:25:30
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:wV7hRdze6zdTrll+QAg4fw
# You can replace this text with custom content, and it will be preserved on regeneration
1;
use strict;
use warnings;
use base 'DBIx::Class';
__PACKAGE__->load_components("Core");
__PACKAGE__->table("user");
__PACKAGE__->add_columns(
"user_id",
{ data_type => "INT", default_value => undef, is_nullable => 0, size => 11 },
"name",
{ data_type => "VARCHAR", default_value => "", is_nullable => 0, size => 255 },
"created_on",
{ data_type => "DATETIME", default_value => "", is_nullable => 0, size => 19 },
"updated_on",
{ data_type => "DATETIME", default_value => "", is_nullable => 0, size => 19 },
);
__PACKAGE__->set_primary_key("user_id");
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-08-05 16:25:30
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:wV7hRdze6zdTrll+QAg4fw
# You can replace this text with custom content, and it will be preserved on regeneration
1;
MyTest/User.pm (MyTest::User) 는 이처럼 속이 꽉찼습니다. 처음에 SQL 로 정의해준 내용들이 그대로 정의되어 DBIC Schema 를 구성하게 됩니다.
Catalyst 에서는 위의 스크립트(schema-loader.pl)를 쓸 필요없이...
./script/[App]_create.pl model MyTest DBIC::Schema MyTest create=static dbi:mysql:mytest *** ****
이런식으로 하면 Schema Class 가 생성됩니다.다음에는 DBIC 를 이용해서 어떻게 데이터를 다루는 가에 대해서 알아보겠습니다.
-- 참고
* DBIx::Class
* DBIx::Class::Schema::Loader
'IT > Perl' 카테고리의 다른 글
| [ Perl ] Perl 에서의 ORM , DBIx::Class에 대해서... #2 - DBIC 의 간단한 사용 (0) | 2008/08/05 |
|---|---|
| [ Perl ] Perl 에서의 ORM , DBIx::Class에 대해서... #1 - DBIC::Schema::Loader (0) | 2008/08/05 |
| [ Perl ] Perl 의 Template Engine - Template Toolkit 을 알아보자(구요)! (0) | 2008/07/10 |
| [ Perl ] CPAN 모듈 만들기!! #2 (0) | 2008/07/04 |
RECENT COMMENT