<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/style/rss/style.xsl" type="text/xsl" media="screen"?>
<rss version="2.0">
	<channel>
		<title>이빨까기인형</title>
		<link>http://jeen.tistory.com/</link>
		<description>도쿄에서 지내는 사이비 개발자의 이야기</description>
		<language>ko</language>
		<pubDate>Thu, 21 Aug 2008 13:53:50 +0900</pubDate>
		<generator>Tistory 1.1</generator>
		<managingEditor>JEEN</managingEditor>
		<image>
		<title>이빨까기인형</title>
		<url><![CDATA[http://cfs8.tistory.com/upload_control/download.blog?fhandle=YmxvZzExMjI4OUBmczgudGlzdG9yeS5jb206L2F0dGFjaC8wLzA5MDAwMDAwMDAwMC5qcGc=]]></url>
		<link>http://jeen.tistory.com/</link>
		<description>도쿄에서 지내는 사이비 개발자의 이야기</description>
		</image>
		<item>
			<title>[ Perl ] Perl 로 메일보내기 ... SSMTP 와 MIME::Lite 를 사용해서!</title>
			<link>http://jeen.tistory.com/entry/Perl-Perl-%EB%A1%9C-%EB%A9%94%EC%9D%BC%EB%B3%B4%EB%82%B4%EA%B8%B0-SSMTP-%EC%99%80-MIMELite-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C</link>
			<description>&lt;br /&gt;&amp;nbsp; Perl 로 메일을 보내려면 어떻게 해야할까요?&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 저도 몰라서 근처 사는 최선생님께 물어봤습니다.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs8.tistory.com/image/18/tistory/2008/08/21/13/13/48aceb7c60907&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;262&quot; width=&quot;465&quot;/&gt;&lt;p class=&quot;cap1&quot;&gt;&amp;quot;메일, 그거 삶아먹으면 되는 거 아닙니까?&amp;quot;&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;라는 것은 훼이크고...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Net::SMTP 라든가... CPAN 을 찾아보면 Mail 에 관련된 모듈은 널리고 널렸습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;전 MIME::Lite 를 사용하기 때문에... 이쪽으로만 다루겠습니다. :-)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;사실 Korean Perl Workshop 참가신청을 만들 때, 메일 송신 스크립트 때문에 좀 고단했던 적이 있었습니다.&lt;br /&gt;&amp;nbsp;메일서버도 없고, 사용할만한 건 Gmail 인데... CPAN 에서 Gmail 에 관련된 메일 송신 모듈이 제대로 동작하지 않는 것도 문제였죠. KPW 자체적인 메일 서버도 가지고 있지 않았구요. 시간은 촉박했고...&lt;br /&gt;&amp;nbsp; 설령 메일서버가 있다고 해도... 메이저 포털로 메일을 보낼 때 잘 안된다고 하는 그런 이슈도 있었구요.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;그때 한줄기 빛이 내려왔는데,, 그것이 SSMTP 라는 것입니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;SSMTP 가 무엇이냐는 자세한 설명은 여기에서 하지 않겠습니다. 구글해주세요.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;우분투에서 간단하게 SSMTP 패키지를 설치할때는...&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;sudo apt-get install ssmtp&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;로 설치가 가능합니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 그리고는 /etc/ssmtp/ssmtp.conf 에 아래의 설정을 넣습니다.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;root=your.email@gmail.com&lt;br /&gt;mailhub=smtp.gmail.com:587&lt;br /&gt;useSTARTTLS=YES&lt;br /&gt;AuthUser=your.email@gmail.com&lt;br /&gt;AuthPass=your.password&lt;br /&gt;rewriteDomain=gmail.com&lt;br /&gt;FromLineOverride=YES&lt;br /&gt;hostname=blah&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;그래서 메일계정은 gmail 을 사용하기로 하고 위와같이 설정했습니다. Gmail 을 사용하면 어디든지 메일을 보낼 수 있기 때문이었죠. Gmail 을 스팸처리하는 곳은 없을 테니...&lt;br /&gt;&amp;nbsp; MIME::Lite 모듈이 없으면 설치해주세요. &lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;use MIME::Lite;&lt;br /&gt;&lt;br /&gt;my $msg = MIME::Lite-&amp;gt;new(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;Return-Path&#039; =&amp;gt; &#039;sender.email@gmail.comr&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;From&#039; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; =&amp;gt; &#039;sender.email@gmail.com&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;To&#039; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; =&amp;gt; &#039;receive@email.com&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;Subject&#039; &amp;nbsp; &amp;nbsp; =&amp;gt; &#039;saillinux 산 버터, 어떻게 생각하시나요?&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;Charset&#039; &amp;nbsp; &amp;nbsp; =&amp;gt; &#039;utf-8&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;Encoding&#039; &amp;nbsp;&amp;nbsp; =&amp;gt; &#039;8bit&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;Data&#039; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; =&amp;gt; &#039;사실 그거 삶아먹으면 괜찮은거 아닙니까?&#039;&lt;br /&gt;&amp;nbsp; &amp;nbsp; );&lt;br /&gt;$msg-&amp;gt;send;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;이렇게 스크립트 하나 만들어서 실행시키면...&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs8.tistory.com/image/32/tistory/2008/08/21/13/49/48acf3e11f74c&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;156&quot; width=&quot;610&quot;/&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;이렇게 메일이 오게됩니다. +_+ &lt;br /&gt;&lt;br /&gt;&amp;nbsp;뭐, 파라메터 넘겨서 From ,To 바꾸거나, 제목 바꾸거나... DB 에서 긁어와서 집어넣거나... 혹은 Template 를 사용해서 메일 내용을 꾸미거나... 하는 방법도 있겠죠. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;여러가지 다양한 부수적인 내용은 직접 해보시면 됩니다.&lt;br /&gt;&amp;nbsp;현재 KPW 사이트에서는 KPW::Mail 이라는 Wrapper 모듈을 만들어 두고 사용하고 있습니다. Template 도 만들어서 Mail 내용등은 완전히 분리시켜두고 말이죠. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; Daum이나 Yahoo 에서는 Subject 가 깨지는 현상도 있다고 하는데요. keedi 님께서 이에 대한 처치방법을 알려주셨네요.&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;&amp;nbsp; use MIME::QuotedPrint qw(encode_qp);&lt;br /&gt;&amp;nbsp; use Encode qw(encode);&lt;/div&gt;&lt;br /&gt;&amp;nbsp;필요한 모듈을 use 해서... Subject 를 &lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;...&lt;br /&gt;Subject =&amp;gt; &#039;=?UTF8?Q?&#039; . encode_qp(encode(&#039;utf-8&#039;, &quot;블라블라&quot;), &#039;&#039;) .&#039;?=&#039;,&lt;br /&gt;...&lt;br /&gt;&lt;/div&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;이런식으로 감싸면 된다는 군요. keedi++&lt;br /&gt;&lt;br /&gt;&amp;nbsp;(SSMTP 는 jachin 님으로부터 줏어들어서 saillinux 님께서 설정해주셨습니다. jachin++, saillinux++)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; :: 이상 IRC #perl-kr 에서 h0ney 님께서 &quot;메일 어케날려요?&quot; 라는 떡밥을 날리셔서 썼습니다.&lt;br /&gt;&amp;nbsp; :: (떡밥주도 블로그 포스팅 전략!!)&lt;br /&gt;</description>
			<category>Perl</category>
			<category>ddd</category>
			<category>Email</category>
			<category>Email::Sender</category>
			<category>Gmail</category>
			<category>IRC</category>
			<category>jachin</category>
			<category>keedi</category>
			<category>MIME</category>
			<category>MIME::Lite</category>
			<category>perl</category>
			<category>saillinux</category>
			<category>SMTP</category>
			<category>SSMTP</category>
			<category>떡밥</category>
			<category>떡밥DrivenBlogPosting</category>
			<category>메일서버</category>
			<category>펄</category>
			<author>JEEN</author>
			<guid>http://jeen.tistory.com/128</guid>
			<comments>http://jeen.tistory.com/entry/Perl-Perl-%EB%A1%9C-%EB%A9%94%EC%9D%BC%EB%B3%B4%EB%82%B4%EA%B8%B0-SSMTP-%EC%99%80-MIMELite-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C#entry128comment</comments>
			<pubDate>Thu, 21 Aug 2008 13:53:49 +0900</pubDate>
		</item>
		<item>
			<title>[ iPhone ] 한달간의 사용.. 그리고 후기...</title>
			<link>http://jeen.tistory.com/entry/iPhone-%ED%95%9C%EB%8B%AC%EA%B0%84%EC%9D%98-%EC%82%AC%EC%9A%A9-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%ED%9B%84%EA%B8%B0</link>
			<description>&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs9.tistory.com/image/1/tistory/2008/08/11/12/56/489fb88127bea&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;457&quot; width=&quot;610&quot;/&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;a href=&quot;/115&quot;&gt;2008/07/20 - [IT/Gears] - [ iPhone ] 결국은 사버렸습니다!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;지난 7/11일에 발매된 iPhone.. 오늘이 8/11일이니.. 한달동안 써봤다고 생각하면서 간단한 사용후기를 써볼 까 합니다(사실 Referer 가 제일 많은 게 iPhone 이어서... 물타기 한번)&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;최근에 Apple 에서 iPhone 2.0.1 firmware 를 내고서부터 약간 안정된 모습을 보여주는 iPhone. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;그 이전에는 어떠했냐면...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;- iPod 음악을 켜고 Safari 에서 한 두페이지 넘어가면 Safari 가 튕깁니다.&lt;br /&gt;&amp;nbsp;- 물론 Safari 뿐 아니라 다른 App 에서도 마찬가지입니다.&lt;br /&gt;&amp;nbsp;- 그냥 Safari 켜고 돌아다녀도 튕깁니다.&lt;br /&gt;&amp;nbsp;- 일본어자판 사용이 극악으로 느립니다.&lt;br /&gt;&amp;nbsp;- App Store 에서 다운받은 App 들이 실행조차 안될 때가 있습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;MobileMe 같은 건 안써봐서 모르겠지만... 써보신 분들은 느리다고도 하고. 이에 대해서 스티브 잡스도 MobileMe 는 완성된 것이 아니라고 말한 적이 있었지요.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;그냥 냅두고 써도 불안정해서.. 불안함을 극대화시켜볼까 하는 생각으로 jailbreak 를 했습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;** Jailbreak&lt;br /&gt;&lt;br /&gt;&amp;nbsp;첫번째 jailbreak 에서 통신사 정보를 읽어오지 못해서 휴대폰으로의 사용이 불가능했었죠.&lt;br /&gt;&amp;nbsp;그래서 다시 밀고 두번째 jailbreak를 했는데.. 그때 iTunes 에서 통신사 정보를 업데이트 하겠느냐는 메시지가 뜨더군요.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;최근에는 MobileInstallation 이라는 파일을 덮어쓰면 유료 App 을 hacking 한 파일을 설치하면 그대로 설치가 된다는 얘기도 있어서 해봤습니다만... 역시 유료 App 에서도 그닥 만족할 만한 App 가 없습니다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; iPhone 2.0.1 firmware 를 그대로 업데이트 하면 다시는 jailbreak 할 수 없다는 얘기도 나오던데요. 그래서 jailbreak 하지 말라고 하는 얘기도 나와서 그대로 냅뒀습니다. 그리고 주말즈음에 2.0.1 용 jailbreak 가 나와서 jailbreak 했죠. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; 여기서 든 생각이... 한국에 iPhone 을 발매하게 되면 분명 firmware 버젼은 2.0.1 이상이 될 것이라는 건데.. 제가 듣기로는 순정 2.0.1 에서 jailbreak 방법이 아직 없는 것으로 알고 있는데요. 한국에서 나중에 발매하게 된다면 이부분이 어떻게 될 지 주목되네요.(아마 깨지지 않을 까 싶지만,...)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 어쨌든 firmware 2.0.1 에서 위에 적었던 내용들이 나아졌느냐? ... 네.. 분명 좋아진 것은 사실이지만..&lt;br /&gt;&amp;nbsp; 아직도 불안정하다는 것도 사실입니다. (App Store 에서 받은 App 가 불안정한지도 모르겠지만...)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;** 휴대성&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 처음에는 때탈까봐 애지중지 하던 iPhone 은 이제 집에서 굴러다니는 군요. 그래도 아직은 실기스 하나 안보일 정도로 제대로 쓰고 있지만... 불안해서 일단 케이스 같은 것을 구입해야되겠더군요.&lt;br /&gt;&amp;nbsp; 일단 저는 청바지 호주머니에 집어넣고 다닙니다. 그러니 자리에 앉을 때는 바지가 땡겨서 혹시 iPhone 이 부러지지 않을까 하는 걱정도 사고 1주일 정도는 해봤습니다만.. 다행히도 아직까지 문제가 없네요.&lt;br /&gt;&amp;nbsp; 이어폰에 달린 마이크로 가끔 쓰기도 하는데... 길거리에서 그거 쓰니까 왠지 혼자서 중얼거리는 게.. 주위의 시선이 여간 부담스러워서 그냥 들고 통화를 합니다. &lt;br /&gt;&amp;nbsp; 배터리는 물론 항상 USB 꼽아두고 살아서... 어떤지 모르겠습니다. 짧기는 짧은 가 봅니다.&lt;br /&gt;&amp;nbsp; iPhone 을 구입하기 전에는 휴대폰과 iPod touch 를 주머니에 넣고 다녔는데.. 요즘은 iPhone 만 들고 다니면 되니까... 편리해졌다는 것을 느끼고 있기는 합니다. :-)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; ** 3G &lt;br /&gt;&lt;br /&gt;&amp;nbsp; 흠.. Youtube 는 3G 네트워크에서 저화질, 저음질을 자랑합니다. 물론 Wifi 네트워크 안에서는 제대로된 음질과 화질을 보장해주죠. 그래서 전 jailbreak 해서 mxTube 를 이용해서 일반적인 Youtube 영상을 다운받아서 보곤합니다. 최근 일본의 Softbank 는 세계에서 처음으로 3G iPhone에 대한 이용요금을 조정했거든요. 무조건 7200엔정도 내는 돈이 최저 2900엔까지 떨어지니... 주의를 기울일 만도 합니다.&lt;br /&gt;&amp;nbsp; 일단 지하철안에서는 통화권이탈이니 출퇴근때는 그냥 iPod 로 이용하고 있는 중입니다. 별시리 밖에서 3G 네트워크를 사용해서 Safari 를 돌린다거나 할 일은 아직까지는 없네요.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; ** App&lt;br /&gt;&lt;br /&gt;&amp;nbsp; App Store 에서 받은 App 들은 GPS 와 중력감지센서를 이용한 App 들이 많습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; * Twinkle 같은 경우는 자신의 반경 1KM - 50KM 안에서의 Twitter 메시지를 송수신 할 수 있죠. Twinkle 의 메시지는 Twitter 의 자기 계정으로 전송되지 않는 것 같더군요.&lt;br /&gt;&amp;nbsp;&amp;nbsp; * Twitterific 은 그냥 Twitter iPhone Client App 입니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp; * midomi 는 허밍으로 노래검색이 가능한 App 입니다. 회사에서 틀어놓은 라디오에서 귀에 익은 노래가 나오면 허밍을 통해서 노래를 찾아보고는 합니다. 한국노래는 없는 것 같더군요. &lt;br /&gt;&amp;nbsp; &amp;nbsp; * PhotoShare 는 말 그대로 PhotoShare 입니다. 재미있는 게 어제 Most Popular 의 사진에 BALLPEN GIRL 이라고.. 예전에 짤방으로 많이 살포되던 볼펜녀의 사진이 가장 인기있더군요.&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; * PhoneSaber 는 스타워즈의 광선검입니다.. 지잉지잉 하는 소리와 휘두를때 소리도 나죠. 처음에는 신기해서 휘두르고 하지만.. 나중에는 그냥 그저 그런 App 가 되었죠.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; App Store 를 통해서 하루에 2000달러를 번다는 그런 얘기도 많은데... 사실 제 입맛에 맞는 App 들이 별로 없는 게 아쉽네요. 그래도 한달만에 쏟아져 나온 App 갯수는 상당합니다. 집에 Objective-C 책은 사뒀는데.. 언제 iPhone App 만들어볼까 ...;; 항상 시간탓만 하고 있습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; ** 전화 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; 처음에 발신자번호도 제대로 안뜨길래 놀랬는데.. 아마도 통신사의 문제였던 듯 합니다. 이제는 전화가 걸려와도 전화번호가 제대로 남더군요. &lt;br /&gt;&amp;nbsp; Mac 의 연락처나 Windows 의 Outlook 의 연락처 정보를 iPhone 과 동기를 하기때문에... 연락처 관리가 쉽습니다. 하지만 전화로써의 기능은 아쉽습니다.&lt;br /&gt;&amp;nbsp; 일단 전화걸기 위해서 &quot;전화&quot; 버튼을 누르고, 연락처를 열때 딜레이가 좀 있습니다. 2-3초 정도의 딜레이는 감수하면서 쓰고 있습니다. 빠른 전화를 원한다면 SpeedDial 이라는 App 도 생각해볼만 하겠습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; ** SMS, 메일&lt;br /&gt;&lt;br /&gt;&amp;nbsp; iPhone 에서는 일본의 그림문자라든가 .. 그런 것들을 지원하지 않습니다. 물론 저도 쓰지 않으니 별 상관없지만요. SMS 나 Mail 에서 아쉬운 것은 예약 전송입니다. 일단 전파가 안통하는 지하철에서 SMS 를 보내곤 하는데.. 전파가 안들어올 때는.. 전파를 찾을 때까지 계속 SMS 전송 버튼을 누르지 않습니다. 그리고 한두칸 뜨면 그때 버튼을 누르죠. 그런 편리함이 없기 때문에 쓰기가 좀 불편합니다. 이건 Mail 에서도 마찬가지입니다. 이것을 위한 Background 처리가 없는 것 같아서 아쉬움이 많네요. 아마 이부분은 App 로 떼우든가 하는 방법도 있겠지만...&lt;br /&gt;&lt;br /&gt;--------&lt;br /&gt;&amp;nbsp; 대충 이정도의 소감입니다. 휴대폰에 대한 사용자 경험 노하우가 별로 없는 Apple 이라서 그런지... 솔직히 휴대폰으로서의 iPhone 은 좀 실망입니다. App 로 땜빵기능 채우는 것도 한계가 있지 않을까 싶기도 하네요.&lt;br /&gt;&amp;nbsp; 솔직히 뭐 iPhone 을 휴대폰만으로 쓰겠다고 산 것도 아니지만... 아무튼 어느정도 만족하고 살고 있습니다. :-) &lt;br /&gt;</description>
			<category>Gears</category>
			<category>Apple</category>
			<category>iPhone</category>
			<category>MobileMe</category>
			<category>사용후기</category>
			<category>스티브잡스</category>
			<category>아이폰</category>
			<category>애플</category>
			<author>JEEN</author>
			<guid>http://jeen.tistory.com/126</guid>
			<comments>http://jeen.tistory.com/entry/iPhone-%ED%95%9C%EB%8B%AC%EA%B0%84%EC%9D%98-%EC%82%AC%EC%9A%A9-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%ED%9B%84%EA%B8%B0#entry126comment</comments>
			<pubDate>Mon, 11 Aug 2008 13:24:28 +0900</pubDate>
		</item>
		<item>
			<title>[ Perl ] Korean Perl Workshop 2008 : Rising Perl</title>
			<link>http://jeen.tistory.com/entry/Perl-Korean-Perl-Workshop-2008-Rising-Perl</link>
			<description>&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs7.tistory.com/image/8/tistory/2008/08/11/12/05/489fac6c35779&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;243&quot; width=&quot;610&quot;/&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;2주후, 8월 23일에 드디어 Korean Perl Workshop 이 개최됩니다(물론 전 못가지만...). &lt;br /&gt;&lt;br /&gt;&amp;nbsp;세션은 오후 1시부터 저녁 9시까지의 세션이니&amp;nbsp; 8시간입니다. 일반적으로 대충 3-4시간하고 끝나는 중소규모의 컨퍼런스나 Tech Talk 와는 달리 8시간이면.. 꽤나 하드코어한 것이죠.&amp;nbsp; 하드코어한만큼 좋은 내용들이 즐비합니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;생물학, 언어학같은 생소한 부분을 비롯해서... Perl 을 이용한 보안/해킹, GUI 개발, 웹 개발...&lt;br /&gt;&amp;nbsp;상당히 넓은 장르를 한꺼번에 소화할 수 있는 기회가 될 것 같습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;거기에 한국에서는 아마도 처음으로 열리는 Perl 만을 위한 워크샵이니 많은 기대를 하고 있습니다. KPW2008 의 주제에 맞게 다시금 Perl 이 떠올라서 CGI 로만 결부되는 인식을 무참하게 깨뜨렸으면 하네요.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;자세한 정보는 &lt;a href=&quot;http://event.perl.kr/kpw2008/&quot; target=&quot;_blank&quot;&gt;KPW2008 홈페이지 &lt;/a&gt;를 참조하세요.&lt;br /&gt;&lt;br /&gt;
 (사실 예전에 있었던 &lt;a href=&quot;http://jeen.tistory.com/100&quot;&gt;2008/06/18 - [IT/Perl] - * 제 1회 Korean Perl Workshop : Rising Perl 개최 *&lt;/a&gt; , 이것이 연기된 것입니다.)&lt;br /&gt;</description>
			<category>Perl</category>
			<category>Korean Perl Workshop</category>
			<category>KPW2008</category>
			<category>perl</category>
			<category>워크샵</category>
			<category>컨퍼런스</category>
			<category>펄</category>
			<author>JEEN</author>
			<guid>http://jeen.tistory.com/125</guid>
			<comments>http://jeen.tistory.com/entry/Perl-Korean-Perl-Workshop-2008-Rising-Perl#entry125comment</comments>
			<pubDate>Mon, 11 Aug 2008 12:10:55 +0900</pubDate>
		</item>
		<item>
			<title>[ Perl ] Perl 에서의 ORM , DBIx::Class에 대해서... #5 - InflateColumn</title>
			<link>http://jeen.tistory.com/entry/Perl-Perl-%EC%97%90%EC%84%9C%EC%9D%98-ORM-DBIxClass%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-4-InflateColumn</link>
			<description>&lt;br /&gt;&amp;nbsp;현재 개발중인 프로젝트에 쓰이는 내용을 살짝 다뤄볼까 합니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;음... 테이블의 칼럼 수가 많거나, 적거나.. 아직 정해지지 않아서 나중에 추가될 지도 모른다거나... 이런 불안함에서 제대로 테이블을 만들더라도, 나중에 ALTER TABLE 의 폭발을 겪게 되는 경우가 있었습니다. 컬럼을 추가하거나, 지우거나, 바꾸거나 하면서 불안함이 있다는 것이죠. 그래서 YAML 을 그대로 집어넣게 되었습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;이럴때 가볍게 쓸 수 있는 것이 inflate_column 입니다. &lt;br /&gt;&amp;nbsp;위의 얘기는 잠시 접어두고 그럼 예제를 볼까요? MyTest::User 에 다음과 같은 것을 추가했습니다.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;&amp;nbsp;__PACKAGE__-&amp;gt;inflate_column(&amp;lt;br /&amp;gt;&amp;nbsp; &amp;nbsp; user_id =&amp;gt; {&amp;lt;br /&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inflate =&amp;gt; sub {&amp;lt;br /&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; my ($value, $obj) = @_;&amp;lt;br /&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # $obj-&amp;gt;$column_name 으로 User Schema Class 의 컬럼을 참조할 수 있습니다.&amp;lt;br /&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sprintf &quot;%04d&quot;, $value;&amp;lt;br /&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; },&amp;lt;br /&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; deflate =&amp;gt; sub {&amp;lt;br /&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; my ($value, $obj) = @_;&amp;lt;br /&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $value;&amp;lt;br /&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; },&amp;lt;br /&amp;gt;&amp;nbsp; &amp;nbsp; });&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 이것으로 무엇을 하느냐... &lt;br /&gt;&lt;br /&gt;&amp;nbsp; User 의 user_id 컬럼을 지정해서 user_id 를 처음부터 건드려놓은 상태로 내놓거나(inflate), Table 에 입력을 할 시에도 마찬가지로 입력 직전에 건드린 상태로 쓰기를 수행(deflate) 하는 겁니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 위의 예제에서는 User 의 user_id 를 zero-fill 합니다. 1 이라면 0001 이라든가.. 이런 형식으로 나오겠죠?&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;my $user = $schema-&amp;gt;resultset(&#039;User&#039;)-&amp;gt;search({});&lt;br /&gt;&lt;br /&gt;while(my $row = $user-&amp;gt;next) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; print $row-&amp;gt;user_id.&quot;\t&quot;.$row-&amp;gt;name.&quot;\n&quot;;&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 그럼 한번 뽑아볼까요?&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs9.tistory.com/image/10/tistory/2008/08/06/21/11/489994f94122c&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;159&quot; width=&quot;308&quot;/&gt;&lt;/div&gt;&amp;nbsp; 자, 이렇게 나오네요. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; 이렇게해서, 예를들면 datetime 의 data type 을 가지고 있는 created_on, updated_on 은 DateTime 인스턴스로 만들어 줄 수도 있겠죠. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; 제가 사용하는 경우는 ...&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;CREATE TABLE test (&lt;br /&gt;&amp;nbsp;&amp;nbsp; no &amp;nbsp;&amp;nbsp; INT NOT NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp; attributes &amp;nbsp; TEXT NOT NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp; created_on DATETIME NOT NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp; updated_on DATETIME NOT NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp; primary key(no)&lt;br /&gt;&amp;nbsp;);&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 이런 Schema 가 있다면...&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;use YAML;&lt;br /&gt;__PACKAGE__-&amp;gt;inflate_column(&lt;br /&gt;&amp;nbsp; attributes =&amp;gt; { &lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; inflate =&amp;gt; sub { &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; my ($value, $obj) = @_;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; YAML::Load($value);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; },&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; deflate =&amp;gt; sub {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; my ($value, $obj) = @_;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; YAML::Dump($value);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; },&lt;br /&gt;});&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 이렇게 inflate_column 을 설정해두었습니다. 그리고 이런식으로 등록합니다.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;&amp;nbsp;my $obj = {&lt;br /&gt;&amp;nbsp; &amp;nbsp; irc =&amp;gt; { &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; perl =&amp;gt; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; saillinux =&amp;gt; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; envy =&amp;gt; &#039;yuni&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; attack =&amp;gt; &#039;JEEN&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; love&amp;nbsp; =&amp;gt; [ &#039;ero&#039;, &#039;하얀_고양이&#039;, &#039;Fate&#039; ],&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; },&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; },&lt;br /&gt;&amp;nbsp; &amp;nbsp; },&lt;br /&gt;&amp;nbsp;};&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;$schema-&amp;gt;resultset(&#039;Test&#039;)-&amp;gt;create( attributes =&amp;gt; $obj );&lt;/div&gt;&lt;br /&gt;&amp;nbsp;이렇게 등록된 데이터는 YAML 형식으로 보관되어 있을 겁니다.&lt;br /&gt;&amp;nbsp;그리고 빼내서 쓸려면 이런식으로 합니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;my $rs = $schema-&amp;gt;resultset(&#039;Test&#039;)-&amp;gt;search({})-&amp;gt;first;&lt;br /&gt;print $rs-&amp;gt;attributes-&amp;gt;{irc}-&amp;gt;{perl}-&amp;gt;{saillinux}-&amp;gt;{envy};&amp;nbsp; # yuni&lt;br /&gt;print for (@{ $rs-&amp;gt;attributes-&amp;gt;{irc}-&amp;gt;{perl}-&amp;gt;{saillinux}-&amp;gt;{love} }); # ero 하얀_고양이 Fate&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 이렇게 사용합니다. :-)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; inflate_column 를 사용하지 않는 경우에는 집어넣을 때는 매번 YAML::Dump 하고...&lt;br /&gt;&amp;nbsp; 뺄때는 매번 YAML::Load 해야 되겠죠.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 이렇게 가볍게 InflateColumn 에 대해서 알아보았습니다.&lt;br /&gt;</description>
			<category>Perl</category>
			<category>DBIC</category>
			<category>DBIx::Class</category>
			<category>InflateColumn</category>
			<category>ORM</category>
			<category>saillinux</category>
			<category>YAML</category>
			<author>JEEN</author>
			<guid>http://jeen.tistory.com/124</guid>
			<comments>http://jeen.tistory.com/entry/Perl-Perl-%EC%97%90%EC%84%9C%EC%9D%98-ORM-DBIxClass%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-4-InflateColumn#entry124comment</comments>
			<pubDate>Wed,  6 Aug 2008 21:24:21 +0900</pubDate>
		</item>
		<item>
			<title>[ Perl ] Perl 에서의 ORM , DBIx::Class에 대해서... #4 - Relation</title>
			<link>http://jeen.tistory.com/entry/Perl-Perl-%EC%97%90%EC%84%9C%EC%9D%98-ORM-DBIxClass%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-4-Relation</link>
			<description>&lt;br /&gt;&amp;nbsp;자, 그럼 Relation 에 대한 이야기입니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Relation 은 말그대로 관계입니다. 뭐에 대한 관계냐면, Schema Class 간의 관계이죠.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;User, Company, Deathnote 에서 Deathnote 는 User 의 user_id 와 Company 의 company_id 를 가지고 있습니다. &lt;br /&gt;&amp;nbsp;그럼 어떻게 Deathnote 에서 User 의 name 을 알 수 있을까요?&lt;br /&gt;&amp;nbsp;( SQL 스럽게 하면 애들장난같은 얘기라서 접어두겠습니다만 )&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 아, 그전에 일단 테스트 용으로 데이터를 집어넣겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;my $deathnote = $schema-&amp;gt;resultset(&#039;Deathnote&#039;);&lt;br /&gt;&lt;br /&gt;while(&amp;lt;DATA&amp;gt;) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; chomp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; my @data = split/,/, $_;&lt;br /&gt;&amp;nbsp; &amp;nbsp; $deathnote-&amp;gt;create({&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; user_id =&amp;gt; $data[0],&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; company_id =&amp;gt; $data[1],&lt;br /&gt;&amp;nbsp; &amp;nbsp; });&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;__DATA__&lt;br /&gt;1,1&lt;br /&gt;2,2&lt;br /&gt;3,3&lt;br /&gt;4,4&lt;br /&gt;5,5&lt;br /&gt;6,6&lt;br /&gt;7,7&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 자.. 어떻게 할 것인가... 가장 간편하게 이런 방법이 있습니다.&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;my $deathnote = $schema-&amp;gt;resultset(&#039;Deathnote&#039;)-&amp;gt;search({});&lt;br /&gt;&lt;br /&gt;while(my $row = $deathnote-&amp;gt;next) {&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; my $user = $schema-&amp;gt;resultset(&#039;User&#039;)-&amp;gt;find($row-&amp;gt;user_id);&lt;br /&gt;&amp;nbsp; &amp;nbsp; print $user-&amp;gt;name if $user;&lt;br /&gt;}&lt;/div&gt;&amp;nbsp;흠? 근데 이건 좀 너무하다 싶지 않나요?&lt;br /&gt;&lt;br /&gt;&amp;nbsp;이렇게 생각하면 Relation 이 나올 때입니다.&lt;br /&gt;&amp;nbsp;MyTest/Deathnote.pm 을 보겠습니다. 아, 다른 건 다 집어치우고... 그냥 추가된 것만 보죠. &lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;__PACKAGE__-&amp;gt;has_one( user =&amp;gt; &#039;MyTest::User&#039;, { &#039;foreign.user_id&#039; =&amp;gt; &#039;self.user_id&#039; } );&lt;br /&gt;__PACKAGE__-&amp;gt;has_one( company =&amp;gt; &#039;MyTest::Company&#039;, { &#039;foreign.company_id&#039; =&amp;gt; &#039;self.user_id&#039; &lt;br /&gt;} );&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;이렇게 추가했습니다. &lt;br /&gt;&amp;nbsp; Deathnote 에서 User 로 연결하기 위해서 user 라는 키를 사용하고, &lt;br /&gt;User 와 Deathnote 는&amp;nbsp; user_id 로 연결된다는 내용입니다. (has_one 이라는 것은 말 그대로 1:1의 관계입니다)&lt;br /&gt;&amp;nbsp; 그리고 Company 역시나 마찬가지입니다.&lt;br /&gt;&amp;nbsp; 이렇게 Relation 을 지정해두면 어떻게 되려나요?&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;&amp;nbsp;my $deathnote = $schema-&amp;gt;resultset(&#039;Deathnote&#039;)-&amp;gt;search({});&lt;br /&gt;&lt;br /&gt;while(my $row = $deathnote-&amp;gt;next) {&lt;br /&gt;&amp;nbsp; print $row-&amp;gt;user-&amp;gt;name.&quot;¥n&quot;;&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 이런 형식으로 간단하게 user의 name 을 얻어올 수 있습니다.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;&amp;nbsp; 정말로 그럴까요? 두번째 장에서 하얀_고양이라는 User 를 삭제했기 때문에 세번째 Deathnote 에서는 에러가 발생합니다.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;&amp;nbsp; can&#039;t call method &quot;name&quot; on an undefined value at ..&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;그러면 이렇게 해주면 됩니다. user 가 있으면 찍어라 라고...&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(227, 143, 188); padding: 10px; background-color: rgb(255, 228, 244);&quot;&gt;&amp;nbsp;&amp;nbsp; print $row-&amp;gt;user-&amp;gt;name if $row-&amp;gt;user;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 간단하죠;;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;근데 User 가 어떤 Company 인지를 알고 싶습니다. 근데 이 정보는 Deathnote 에만 있어요. &lt;br /&gt;&amp;nbsp;User-&amp;gt;Deathnote-&amp;gt;Company 식으로 넘어가야되는데요...&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 우선은 MyTest/User.pm 을 열어서 한 줄 추가합니다.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;__PACKAGE__-&amp;gt;belongs_to( note =&amp;gt; &#039;MyTest::Deathnote&#039;, { &#039;foreign.user_id&#039; =&amp;gt; &#039;self.user_id&#039; });&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp; belongs_to 라는 것은 말 그대로입니다. :-) Deathnote 에 User 가 has_one 으로 Relation 관계를 성립하고 있습니다. belongs_to 로 Deathnote 에 속하게 됩니다. (근데 has_one 으로도 Relation 관계가 성립되더군요;;; 뭔가 일방적인 관계일지도..)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 그러면 User 에서 Company 의 name&amp;nbsp; 을 읽어 볼까요?&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;my $user = $schema-&amp;gt;resultset(&#039;User&#039;)-&amp;gt;search({});&lt;br /&gt;&lt;br /&gt;while(my $row = $user-&amp;gt;next) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; print $row-&amp;gt;name .&#039;=&amp;gt;&#039;.$row-&amp;gt;note-&amp;gt;company-&amp;gt;name.&quot;\n&quot; if $row-&amp;gt;note &amp;amp;&amp;amp; $row-&amp;gt;note-&amp;gt;company;&lt;br /&gt;&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 이렇게 하면 되겠죠?&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 근데 여기서 잠깐... &quot;언제까지 전체 레코드를 읽어올 것인가요. 제대로 SQL 조건도 좀 주고.. 이러고 싶은데..&quot; 라고 saillinux 님께서 사장님 마인드로 또 말씀하십니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 그러면서 던져주신 조건이란게 &amp;lt;&amp;lt; user_id 가 3 을 넘고, company_id 가 2 를 넘는 것 &amp;gt;&amp;gt; 이라고 하네요.&lt;br /&gt;&amp;nbsp;근데 User Schema Class 를 사용하라고 합니다. 어라... 분명 User Schema Class 에는 company_id 가 없는 데 말이죠. 역시 사장님 마인드입니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &quot;거기다가 company_id 순으로 정렬하고, 그 중에 딱 2개만 보고 싶어요&quot; 라고 하시는 군요...&lt;br /&gt;&amp;nbsp; 오늘 제대로 뽕을 뽑으시는 군요.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 요건 정의를 다시 해보겠습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &quot;user_id&quot; 가 3 을 넘고, &lt;br /&gt;&amp;nbsp; &amp;nbsp; &quot;company_id&quot;&amp;nbsp; 가 2 를 넘고,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &quot;User&quot; Schema Class 를 사용하고,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &quot;company_id&quot; 순으로 정렬하고&lt;br /&gt;&amp;nbsp; &amp;nbsp; &quot;2개&quot; 만 출력한다 입니다.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;&amp;nbsp; 답은 이렇습니다. &amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;my $user = $schema-&amp;gt;resultset(&#039;User&#039;)-&amp;gt;search({&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;me.user_id&#039; =&amp;gt; { &#039;&amp;gt;&#039; =&amp;gt; 3 },&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;company.company_id&#039; =&amp;gt; { &#039;&amp;gt;&#039; =&amp;gt; 2 },&lt;br /&gt;},{&lt;br /&gt;&amp;nbsp; &amp;nbsp; prefetch =&amp;gt; [ { &#039;note&#039; =&amp;gt; &#039;company&#039; } ],&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; order_by =&amp;gt; &#039;company.company_id asc&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; rows =&amp;gt; 2,&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;while(my $row = $user-&amp;gt;next) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; print $row-&amp;gt;name. &#039;=&amp;gt;&#039; .$row-&amp;gt;note-&amp;gt;company-&amp;gt;name.&quot;\n&quot;;&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp; User Schema Class 에서 Company 와는 어떤 관계도 아닙니다. 그럴려면 Deathnote 를 통해서 Company 에 접근할 수 있습니다. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;&amp;nbsp;&amp;nbsp; prefetch =&amp;gt; [ { &#039;note&#039; =&amp;gt; &#039;company&#039; } ]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp; MyTest::User 에서 note 로 Deathnote 에 갈 수 있고, Deathnote 는 company 로 Company에 접근할 수 있습니다.&amp;nbsp; Relation 관계는 이미 Schema Class 에서 정의해줬기 때문에 이렇게 간단하게 접근할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;&amp;nbsp; &amp;nbsp; order_by =&amp;gt; &#039;company.company_id asc&#039;,&lt;/div&gt;&lt;br /&gt;&amp;nbsp; company_id 순이라면 위의 prefetch 에서 이미 길을 텄기때문에 &quot;company.company_id&quot;&amp;nbsp; 로 접근할 수 있습니다.(SQL::Abstract 를 참조하세요)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; rows =&amp;gt; 2&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 단 두줄만 뺀다는 겁니다. MySQL 의 LIMIT 2 같은 사용법이죠. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; 물론 Relation은 might_have, has_many 같은 것들도 있습니다. 자세한 내용은 문서를 참조하세요. :-)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 이런저런 빼고 넘어가는 부분들이 많은지라... 조금만 문서를 보시면 금방 아실만한 내용들이 대부분일 겁니다. 모르시면 같이 한번 궁리해보죠 :-)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 흡.. 빠진 부분들(제가 아는 한도에서)은 다음에 DBIC 를 정리하는 차원에서 가볍게 짚고 가도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description>
			<category>Perl</category>
			<category>db</category>
			<category>DBI</category>
			<category>DBIC</category>
			<category>DBIx::Class</category>
			<category>dbms</category>
			<category>MySQL</category>
			<category>ORM</category>
			<category>perl</category>
			<category>펄</category>
			<author>JEEN</author>
			<guid>http://jeen.tistory.com/123</guid>
			<comments>http://jeen.tistory.com/entry/Perl-Perl-%EC%97%90%EC%84%9C%EC%9D%98-ORM-DBIxClass%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-4-Relation#entry123comment</comments>
			<pubDate>Wed,  6 Aug 2008 19:42:38 +0900</pubDate>
		</item>
		<item>
			<title>[ Perl ] Perl 에서의 ORM , DBIx::Class에 대해서... #3 - Component</title>
			<link>http://jeen.tistory.com/entry/Perl-Perl-%EC%97%90%EC%84%9C%EC%9D%98-ORM-DBIxClass%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-3-Component</link>
			<description>&amp;nbsp; 이번에는 Component 에 대해서 알아보겠습니다. 일단 예제부터 보고 시작하죠.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; Mytest/Company.pm 을 열어봅니다.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;package MyTest::Company;&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;&lt;br /&gt;use base &#039;DBIx::Class&#039;;&lt;br /&gt;use AutoStoreDateTime;&lt;br /&gt;&lt;br /&gt;__PACKAGE__-&amp;gt;load_components(&quot;PK::Auto&quot;, &quot;+AutoStoreDateTime&quot;, &quot;Core&quot;);&lt;br /&gt;__PACKAGE__-&amp;gt;table(&quot;company&quot;);&lt;br /&gt;__PACKAGE__-&amp;gt;add_columns(&lt;br /&gt;&amp;nbsp; &quot;company_id&quot;,&lt;br /&gt;&amp;nbsp; { data_type =&amp;gt; &quot;INT&quot;, default_value =&amp;gt; undef, is_nullable =&amp;gt; 0, size =&amp;gt; 11 },&lt;br /&gt;&amp;nbsp; &quot;name&quot;,&lt;br /&gt;&amp;nbsp; { data_type =&amp;gt; &quot;VARCHAR&quot;, default_value =&amp;gt; &quot;&quot;, is_nullable =&amp;gt; 0, size =&amp;gt; 255 },&lt;br /&gt;&amp;nbsp; &quot;created_on&quot;,&lt;br /&gt;&amp;nbsp; { data_type =&amp;gt; &quot;DATETIME&quot;, default_value =&amp;gt; &quot;&quot;, is_nullable =&amp;gt; 0, size =&amp;gt; 19 },&lt;br /&gt;&amp;nbsp; &quot;updated_on&quot;,&lt;br /&gt;&amp;nbsp; { data_type =&amp;gt; &quot;DATETIME&quot;, default_value =&amp;gt; &quot;&quot;, is_nullable =&amp;gt; 0, size =&amp;gt; 19 },&lt;br /&gt;);&lt;br /&gt;__PACKAGE__-&amp;gt;set_primary_key(&quot;company_id&quot;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-08-05 16:39:27 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:DHRIea3OvvtGG+yhaBVTvQ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# You can replace this text with custom content, and it will be preserved on regeneration &amp;nbsp; &amp;nbsp; &lt;br /&gt;1;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;이 중에서 제가 살짝 추가한 부분이 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;use AutoStoreDateTime;&lt;br /&gt;__PACKAGE__-&amp;gt;load_components(&quot;PK::Auto&quot;, &quot;+AutoStoreDateTime&quot;, &quot;Core&quot;);&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;바로 이부분에 PK::Auto 라는 component 도 불러오라고 지정했습니다. PK::Auto 는 &lt;span style=&quot;text-decoration: line-through;&quot;&gt;온라인 게임에서 자동으로 PK 를 수행하는 &lt;/span&gt;&amp;nbsp; Primary Key Auto Increment 라고 보시면 됩니다. 즉 이 Schema Class 에서는 company_id 가 Primary Key 이니까 자동으로 Auto Increment 해준다는 거죠. (물론 SQL 에서 Auto Increment 를 지정해주면 DBMS 자체적으로 이 행위를 수행하지만, auto increment 가 지정되지 않은 경우에는 PK::Auto가 알아서 해줍니다. 이것을 확인하기 위해서 직접 Company 테이블을 변경해보시길 바랍니다)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 그리고 AutoStoreDateTime 도 있습니다. 근데 이 앞에 +라고 붙었는데.. 이것은 Custom component 입니다. PK::Auto 같은 경우는 DBIx::Class::PK::Auto 라는 모듈을 불러오는 것인데, AutoStoreDateTime 은 DBIC 정식 모듈이 아닌... 여기서 만들어서 쓰겠다라는 것이죠.&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;use AutoStoreDateTime;&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;use base &#039;DBIx::Class&#039;;&lt;br /&gt;&lt;br /&gt;use DateTime;&lt;br /&gt;&lt;br /&gt;sub insert {&lt;br /&gt;&amp;nbsp; &amp;nbsp; my $self = shift;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; $self-&amp;gt;created_on( DateTime-&amp;gt;now( time_zone =&amp;gt; &#039;Asia/Seoul&#039; ) )&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if $self-&amp;gt;result_source-&amp;gt;has_column(&#039;created_on&#039;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; $self-&amp;gt;next::method(@_);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sub update {&lt;br /&gt;&amp;nbsp; &amp;nbsp; my $self = shift;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; $self-&amp;gt;updated_on( DateTime-&amp;gt;now( time_zone =&amp;gt; &#039;Asia/Seoul&#039; ) )&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if $self-&amp;gt;result_source-&amp;gt;has_column(&#039;updated_on&#039;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; $self-&amp;gt;next::method(@_);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;1;&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 이와 같은 컴포넌트 모듈을 만들었습니다. 이것을 AutoStoreDateTime.pm 이라고 저장하고 MyTest.pm 과 같은 디렉토리에 놓습니다.&lt;br /&gt;&amp;nbsp; 그럼 어떤 결과를 보이는 지 확인해 볼까요?&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;my $company = $schema-&amp;gt;resultset(&#039;Company&#039;);&lt;br /&gt;&lt;br /&gt;while(&amp;lt;DATA&amp;gt;) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; chomp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; $company-&amp;gt;create({&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#039;name&#039; &amp;nbsp;&amp;nbsp; =&amp;gt; $_,&lt;br /&gt;&amp;nbsp; &amp;nbsp; });&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;__DATA__&lt;br /&gt;I company&lt;br /&gt;N company&lt;br /&gt;D company&lt;br /&gt;E company&lt;br /&gt;A company&lt;br /&gt;Y company&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 이렇게 Company.name 을 만들도록합니다. company_id 도 지정하지 않았고, created_on 도 지정하지 않았습니다. 등록날짜도 모르면 어떻게 하려고 이럴까요?&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs9.tistory.com/image/13/tistory/2008/08/06/13/47/48992ce5ce3c9&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;202&quot; width=&quot;603&quot;/&gt;&lt;/div&gt;&amp;nbsp; 하지만 이렇게 created_on 은 create 한 시점의 날짜/시간을 가지고 있습니다. company_id 도 물론 지정하지 않았는데 이렇게 생겼네요(SQL에서 auto increment 가 있으면 뭐 그게 그거입니다만).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;근데 사장 마인드를 가지신 saillinux 님께서 짝수 회사번호를 가진 회사는 전부 소문자로 표기하고 싶다는 얼토당토 않은 요구를 하고 있습니다. 어쩔 수 있나요. 까라면 까야지..&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;my $company = $schema-&amp;gt;resultset(&#039;Company&#039;)-&amp;gt;search({});&lt;br /&gt;&lt;br /&gt;while(my $row = $company-&amp;gt;next) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if ($row-&amp;gt;company_id % 2 == 0) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $row-&amp;gt;name(lcfirst $row-&amp;gt;name);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $row-&amp;gt;update;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 이렇게 하면 되겠죠?&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs8.tistory.com/image/15/tistory/2008/08/06/14/24/489935985fdf4&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;213&quot; width=&quot;596&quot;/&gt;&lt;/div&gt;&amp;nbsp; 그러면 update 된 레코드만 updated_on 이 지정되게 되죠.&amp;nbsp; 어때요? 참 쉽죠?&lt;br /&gt;&lt;br /&gt;&amp;nbsp;이렇게 DBIC 의 Component 활용에 대해서 알아보았습니다. :-) 직접 Component 를 만들어서 보다 편하게 DB 를 주물러 보심은 어떠실런지요?&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 다음에는 Relation 에 대해서 살짝 알아보겠습니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;* 참고&lt;br /&gt;&amp;nbsp;- **** Project&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description>
			<category>Perl</category>
			<category>Component</category>
			<category>datetime</category>
			<category>db</category>
			<category>DBI</category>
			<category>DBIC</category>
			<category>DBIx::Class</category>
			<category>dbms</category>
			<category>MySQL</category>
			<category>perl</category>
			<category>SQL</category>
			<author>JEEN</author>
			<guid>http://jeen.tistory.com/122</guid>
			<comments>http://jeen.tistory.com/entry/Perl-Perl-%EC%97%90%EC%84%9C%EC%9D%98-ORM-DBIxClass%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-3-Component#entry122comment</comments>
			<pubDate>Wed,  6 Aug 2008 14:22:20 +0900</pubDate>
		</item>
		<item>
			<title>[ Perl ] Perl 에서의 ORM , DBIx::Class에 대해서... #2 - DBIC 의 간단한 사용</title>
			<link>http://jeen.tistory.com/entry/Perl-Perl-%EC%97%90%EC%84%9C%EC%9D%98-ORM-DBIxClass%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-2</link>
			<description>&lt;br /&gt;&amp;nbsp; 그럼, DBIC::Schema::Loader 로 만든 Schema Class 는 어떻게 사용하는 것일까요?&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(144, 224, 255); padding: 10px; background-color: rgb(210, 242, 255);&quot;&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;use MyTest;&amp;nbsp; # 앞서 정의한 Schema Class&lt;br /&gt;use DateTime; &lt;br /&gt;&lt;br /&gt;my $schema = MyTest-&amp;gt;connect(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;dbi:mysql:mytest&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;root&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;PASSWORD&#039;);&amp;nbsp; # DBI 의 connect_info 랑 같습니다.&lt;br /&gt;&lt;br /&gt;my $user = $schema-&amp;gt;resultset(&#039;User&#039;);&lt;br /&gt;&lt;br /&gt;while(&amp;lt;DATA&amp;gt;) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; chomp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; my @data = split /,/, $_;&lt;br /&gt;&amp;nbsp; &amp;nbsp; $user-&amp;gt;create({&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#039;user_id&#039; =&amp;gt; $data[0],&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#039;name&#039; &amp;nbsp;&amp;nbsp; =&amp;gt; $data[1],&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#039;created_on&#039; =&amp;gt; $dt-&amp;gt;ymd. &#039; &#039;. $dt-&amp;gt;hms,&lt;br /&gt;&amp;nbsp; &amp;nbsp; });&amp;nbsp; # INSERT INTO..&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;__DATA__&lt;br /&gt;1,JEEN&lt;br /&gt;2,saillinux&lt;br /&gt;3,하얀_고양이&lt;br /&gt;4,a3r0&lt;br /&gt;5,yuni&lt;br /&gt;6,keedi&lt;br /&gt;7,pung96&lt;br /&gt;8,song&lt;br /&gt;9,ssie&lt;br /&gt;10,amorette&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 이 스크립트를 MyTest.pm 과 같은 장소에 놓으시고... 적당한 이름으로 저장해서 실행해봅니다.&lt;br /&gt;&amp;nbsp; 아무것도 안나올겁니다. 그렇다면... DB 를 확인해볼까요?&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs7.tistory.com/image/13/tistory/2008/08/05/19/55/4898319d6dd7d&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;263&quot; width=&quot;610&quot;/&gt;&lt;/div&gt; 이렇게 제대로 들어가 있네요 :-)&lt;br /&gt;그러면 이렇게 입력된 데이터를 가지고 놀아 볼까요?&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;use MyTest;&lt;br /&gt;use DateTime;&lt;br /&gt;&lt;br /&gt;my $schema = MyTest-&amp;gt;connect(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;dbi:mysql:mytest&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;root&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;PASSWORD&#039;);&lt;br /&gt;&lt;br /&gt;my $user = $schema-&amp;gt;resultset(&#039;User&#039;)-&amp;gt;search({&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;user_id&#039; =&amp;gt; { &#039;&amp;lt;&#039; =&amp;gt; 5 },&lt;br /&gt;});&amp;nbsp; # SELECT * FROM user WHERE user_id &amp;lt; 5;&lt;br /&gt;&lt;br /&gt;while(my $row = $user-&amp;gt;next) {&lt;br /&gt;&amp;nbsp;print $row-&amp;gt;name.&quot;\n&quot;;&lt;br /&gt;}&lt;/div&gt;&amp;nbsp;위의 주석처럼 user_id 가 5보다 작은 사람들을 불러모읍니다. :-)&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;&amp;nbsp;JEEN&lt;br /&gt;&amp;nbsp;saillinux&lt;br /&gt;&amp;nbsp;하얀_고양이&lt;br /&gt;&amp;nbsp;a3r0&lt;br /&gt;&lt;/div&gt;&amp;nbsp;결과는 이처럼 나오겠죠?&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; -&amp;gt;search 로 데이터를 줏어올 때는 기본적으로 복수로 가정합니다. 그러니 $user-&amp;gt;next 같은 것으로 루프를 돌려주는 것입니다. $user-&amp;gt;all 같은 것을 사용하면 말 그대로 전체 데이터를 ARRAY 로 받습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;여기에서 생각난 예제:&lt;br /&gt;&amp;nbsp;근데 전 하얀_고양이 님을 별로 좋아하지 않습니다. 그래서 지워버리고 싶어요.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;use utf8;&lt;br /&gt;&lt;br /&gt;my $user = $schema-&amp;gt;resultset(&#039;User&#039;)-&amp;gt;find({&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;name&#039; =&amp;gt; &#039;하얀_고양이&#039;,&lt;br /&gt;}); &amp;nbsp;&amp;nbsp; # find 를 사용할 경우 하나의 레코드만을 얻어옵니다.&lt;br /&gt;&lt;br /&gt;print $user-&amp;gt;name;&lt;br /&gt;$user-&amp;gt;delete; &lt;br /&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; 혹은 &lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;use utf8;&lt;br /&gt;my $user = $schema-&amp;gt;resultset(&#039;User&#039;)-&amp;gt;search({});&lt;br /&gt;&lt;br /&gt;while(my $row = $user-&amp;gt;next) {&lt;br /&gt;&amp;nbsp; $row-&amp;gt;delete if $row-&amp;gt;name eq &#039;하얀_고양이&#039;;&amp;nbsp; # 이렇게도 삭제할 수 있죠 :-)&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&amp;nbsp; 이렇게 해서 하얀_고양이님을 지웠습니다.&lt;br /&gt;&amp;nbsp; 그러니 IRC #perl 에 계신 분들이 모두 기뻐하셔서 빵글이를 붙이고 싶다는 데요. :-)&lt;br /&gt;&amp;nbsp; 그럼 어떻게 할까요?&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;my $user = $schema-&amp;gt;resultset(&#039;User&#039;)-&amp;gt;search({});&lt;br /&gt;&lt;br /&gt;while(my $row = $user-&amp;gt;next) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; $row-&amp;gt;name($row-&amp;gt;name . &#039;_^^&#039;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; $row-&amp;gt;update;&lt;br /&gt;}&lt;/div&gt;&amp;nbsp;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs9.tistory.com/image/35/tistory/2008/08/05/20/13/489835d67be71&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;245&quot; width=&quot;610&quot;/&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;과연.. 모두들 기뻐하시는 군요 :-)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;이런식으로 직감적으로 DB의 데이터를 조작할 수 있는 것이 바로 DBIC 의 강점입니다.&lt;br /&gt;&amp;nbsp;이에관한 예제는 &lt;a style=&quot;font-weight: bold;&quot; href=&quot;http://search.cpan.org/perldoc?DBIx::Class&quot; target=&quot;_blank&quot;&gt;DBIx::Class 페이지&lt;/a&gt;에서 쉽게 찾아볼 수 있고, 보다 다양한 예제를 제공해줍니다.&lt;br /&gt;&amp;nbsp; 그리고 보다 자세한 SELECT 구문에 대한 예제는 앞으로도 계속 적어나가도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 다음번에는 Component 에 대해서 간단하게 알아보겠습니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;</description>
			<category>Perl</category>
			<category>db</category>
			<category>DBI</category>
			<category>DBIC</category>
			<category>DBIx::Class</category>
			<category>MySQL</category>
			<category>perl</category>
			<category>select</category>
			<category>SQL</category>
			<category>펄</category>
			<author>JEEN</author>
			<guid>http://jeen.tistory.com/121</guid>
			<comments>http://jeen.tistory.com/entry/Perl-Perl-%EC%97%90%EC%84%9C%EC%9D%98-ORM-DBIxClass%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-2#entry121comment</comments>
			<pubDate>Tue,  5 Aug 2008 20:15:41 +0900</pubDate>
		</item>
		<item>
			<title>[ Google ] Street View 에 우리집 나오는 지 찾아보기.</title>
			<link>http://jeen.tistory.com/entry/Google-Street-View-%EC%97%90-%EC%9A%B0%EB%A6%AC%EC%A7%91-%EB%82%98%EC%98%A4%EB%8A%94-%EC%A7%80-%EC%B0%BE%EC%95%84%EB%B3%B4%EA%B8%B0</link>
			<description>&lt;br /&gt;&amp;nbsp;오늘부로 일본에서도 구글 스트리트뷰 기능이 추가되었다고 합니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;그래서 한번 찾아봤어요.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs7.tistory.com/image/23/tistory/2008/08/05/17/11/48980b24160db&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;354&quot; width=&quot;610&quot;/&gt;&lt;/div&gt;&amp;nbsp; 오른쪽 위로 두번째가 우리집입니다. :-)&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs8.tistory.com/image/19/tistory/2008/08/05/17/12/48980b7a507ba&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;336&quot; width=&quot;610&quot;/&gt;&lt;/div&gt;&amp;nbsp; 어익후 집앞에 쓰레기가... ;; &lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs8.tistory.com/image/26/tistory/2008/08/05/17/14/48980be70be0b&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;334&quot; width=&quot;610&quot;/&gt;&lt;/div&gt;&amp;nbsp; 전 대로변만 찍혔을 줄 알았는데.. 집앞에 있는 저런 좁은 골목까지 다 찍어놓았을 줄이야. &lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; 참으로 대단한 근성입니다. 구글...&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 하지만 회사에서 사람들은 거꾸로 &quot;이건 위험한 거 아냐?&quot; 라고 하더군요.&lt;br /&gt;&amp;nbsp; 흠.. 확실히 생각해보면 그럴 것 같기도 하니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 폭탄도 광산에 쓰이면 좋은 것이겠지만, 인명살상에 쓰이면 나쁜 것이듯...&lt;br /&gt;&amp;nbsp; 폭탄을 미워하는 게 아니라 폭탄을 사용하는 사람을 미워했으면 좋겠습니다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; 이걸로 또 이에 관련된 몇몇 이슈들이 일본에서 생기겠네요 :-) 좋은 일이든 나쁜 일이든...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 아무튼 대단합니다.&lt;br /&gt;</description>
			<category>일본생활</category>
			<category>Google</category>
			<category>Japan</category>
			<category>StreetView</category>
			<category>TOKYO</category>
			<category>구글</category>
			<category>구글맵스</category>
			<category>도쿄</category>
			<category>맵스</category>
			<category>스트리트뷰</category>
			<category>일본</category>
			<category>집</category>
			<author>JEEN</author>
			<guid>http://jeen.tistory.com/120</guid>
			<comments>http://jeen.tistory.com/entry/Google-Street-View-%EC%97%90-%EC%9A%B0%EB%A6%AC%EC%A7%91-%EB%82%98%EC%98%A4%EB%8A%94-%EC%A7%80-%EC%B0%BE%EC%95%84%EB%B3%B4%EA%B8%B0#entry120comment</comments>
			<pubDate>Tue,  5 Aug 2008 17:11:20 +0900</pubDate>
		</item>
		<item>
			<title>[ Perl ] Perl 에서의 ORM , DBIx::Class에 대해서... #1 - DBIC::Schema::Loader</title>
			<link>http://jeen.tistory.com/entry/Perl-Perl-%EC%97%90%EC%84%9C%EC%9D%98-ORM-DBIxClass%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-1</link>
			<description>: 요 근래 잠깐 깜빡하고 Catalyst 에 관한 글을 쓰지도 못하고 있었네요.&lt;br /&gt;&lt;br /&gt;일단 그전에 미리 Template Toolkit 같은 Template Engine 이나 &lt;br /&gt;DBIx::Class 같은 ORM 같은 것을 알아놓고 가는 게 좋겠다는 생각에...&lt;br /&gt;잠시 얘기가 빙빙 겉돌고 있습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;일단 DBIx::Class, 통칭 DBIC 라고 불리는 것부터 알고 나중에 차근차근 Catalyst 내용을 이어가도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;ORM 이라고 아시죠? Object-Relation Mappings 라고... &lt;br /&gt;&amp;nbsp;자세한 내용은 검색해보시면 짠 하고 나올겁니다. (&lt;a style=&quot;font-weight: bold;&quot; href=&quot;http://blog.naver.com/hdklove1012?Redirect=Log&amp;amp;logNo=100036835482&quot; target=&quot;_blank&quot;&gt; 검색 예 &lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Perl 에서 ORM 을 얘기하면 DBIC 가 대표적인 예가 될 것입니다. 그외 여러가지 있지만 안써봐서 생략합니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;DBIC 를 제대로 사용하려면 Schema 클래스를 만들어야 합니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;만들어야한다에 대한 제대로 다시 정의를 하자면, &quot;만들게 해야합니다&quot; 입니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;DBIx::Class::Schema::Loader 가 이 일을 해주는데요. 그런고로 한번 만들게 해보겠습니다.&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;&amp;nbsp;CREATE TABLE user (&lt;br /&gt;&amp;nbsp;&amp;nbsp; user_id&amp;nbsp; int not null auto_increment,&lt;br /&gt;&amp;nbsp;&amp;nbsp; name &amp;nbsp;&amp;nbsp; varchar(255) not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; created_on datetime not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; updated_on datetime not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; primary key(user_id)&lt;br /&gt;&amp;nbsp;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;CREATE TABLE company (&lt;br /&gt;&amp;nbsp;&amp;nbsp; company_id int not null auto_increment,&lt;br /&gt;&amp;nbsp;&amp;nbsp; name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; varchar(255) not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; created_on datetime not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; updated_on datetime not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; primary key(company_id)&lt;br /&gt;&amp;nbsp;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;CREATE TABLE deathnote (&lt;br /&gt;&amp;nbsp;&amp;nbsp; death_id int not null auto_increment,&lt;br /&gt;&amp;nbsp;&amp;nbsp; user_id &amp;nbsp; int not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; company_id int not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; created_on datetime not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; updated_on datetime not null,&lt;br /&gt;&amp;nbsp;&amp;nbsp; primary key(death_id)&lt;br /&gt;&amp;nbsp;);&lt;/div&gt;&lt;br /&gt;&amp;nbsp;이와같은 SQL 을 깨작거렸습니다. 우선 mytest 라는 DB 를 만들고 위의 user 와 company와 deathnote 라는 테이블을 생성합니다.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(227, 143, 188); padding: 10px; background-color: rgb(255, 228, 244);&quot;&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;&lt;br /&gt;use DBIx::Class::Schema::Loader (qw/make_schema_at/);&lt;br /&gt;&lt;br /&gt;make_schema_at(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &#039;MyTest&#039;, {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; components =&amp;gt; [],&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dump_directory =&amp;gt; &#039;./&#039;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; },&lt;br /&gt;&amp;nbsp; &amp;nbsp; \@ARGV,&lt;br /&gt;&amp;nbsp; &amp;nbsp; );&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;그리고 이와같은 스크립트를 만들었습니다.(schema-loader.pl)&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;&amp;nbsp;perl schema-loader.pl dbi:mysql:mytest &quot;mysql user&quot; &quot;mysql pass&quot;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;그런 다음에는 이렇게 명령을 내립니다. (DBI 에서 connect_info 설정해주는 그것입니다)&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;Dumping manual schema for MyTest to directory ./ ...&lt;br /&gt;Schema dump completed.&lt;/div&gt;&amp;nbsp; 그러면 이렇게 Schema dump 가 끝났다고 말해주죠.&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs8.tistory.com/image/19/tistory/2008/08/05/16/38/4898038f712e7&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;91&quot; width=&quot;332&quot;/&gt;&lt;/div&gt;&amp;nbsp; 그러면 이처럼 Schema 클래스가 생성되게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(128, 184, 136); padding: 10px; background-color: rgb(202, 238, 206);&quot;&gt;package MyTest;&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;&lt;br /&gt;use base &#039;DBIx::Class::Schema&#039;;&lt;br /&gt;&lt;br /&gt;__PACKAGE__-&amp;gt;load_classes;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-08-05 16:25:30 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:P0OGC/gBKsOEyhe8yV+xsA &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# You can replace this text with custom content, and it will be preserved on re\&lt;br /&gt;generation &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;1;&lt;/div&gt;&lt;br /&gt;&amp;nbsp; MyTest.pm 은 이처럼 썰렁합니다만..&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(180, 153, 126); padding: 10px; background-color: rgb(230, 216, 201);&quot;&gt;package MyTest::User;&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;&lt;br /&gt;use base &#039;DBIx::Class&#039;;&lt;br /&gt;&lt;br /&gt;__PACKAGE__-&amp;gt;load_components(&quot;Core&quot;);&lt;br /&gt;__PACKAGE__-&amp;gt;table(&quot;user&quot;);&lt;br /&gt;__PACKAGE__-&amp;gt;add_columns(&lt;br /&gt;&amp;nbsp; &quot;user_id&quot;,&lt;br /&gt;&amp;nbsp; { data_type =&amp;gt; &quot;INT&quot;, default_value =&amp;gt; undef, is_nullable =&amp;gt; 0, size =&amp;gt; 11 },&lt;br /&gt;&amp;nbsp; &quot;name&quot;,&lt;br /&gt;&amp;nbsp; { data_type =&amp;gt; &quot;VARCHAR&quot;, default_value =&amp;gt; &quot;&quot;, is_nullable =&amp;gt; 0, size =&amp;gt; 255 },&lt;br /&gt;&amp;nbsp; &quot;created_on&quot;,&lt;br /&gt;&amp;nbsp; { data_type =&amp;gt; &quot;DATETIME&quot;, default_value =&amp;gt; &quot;&quot;, is_nullable =&amp;gt; 0, size =&amp;gt; 19 },&lt;br /&gt;&amp;nbsp; &quot;updated_on&quot;,&lt;br /&gt;&amp;nbsp; { data_type =&amp;gt; &quot;DATETIME&quot;, default_value =&amp;gt; &quot;&quot;, is_nullable =&amp;gt; 0, size =&amp;gt; 19 },&lt;br /&gt;);&lt;br /&gt;__PACKAGE__-&amp;gt;set_primary_key(&quot;user_id&quot;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-08-05 16:25:30 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:wV7hRdze6zdTrll+QAg4fw &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# You can replace this text with custom content, and it will be preserved on regeneration &amp;nbsp; &amp;nbsp; &lt;br /&gt;1;&lt;/div&gt;&lt;br /&gt;&amp;nbsp; MyTest/User.pm (MyTest::User) 는 이처럼 속이 꽉찼습니다. 처음에 SQL 로 정의해준 내용들이 그대로 정의되어 DBIC Schema 를 구성하게 됩니다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp; Catalyst 에서는 위의 스크립트(schema-loader.pl)를 쓸 필요없이...&lt;br /&gt;&lt;div style=&quot;border: 1px solid rgb(180, 153, 126); padding: 10px; background-color: rgb(230, 216, 201);&quot;&gt;./script/[App]_create.pl model MyTest DBIC::Schema MyTest create=static dbi:mysql:mytest *** ****&lt;br /&gt;&lt;/div&gt;&amp;nbsp;이런식으로 하면 Schema Class 가 생성됩니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;다음에는 DBIC 를 이용해서 어떻게 데이터를 다루는 가에 대해서 알아보겠습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;-- 참고 &lt;br /&gt;&amp;nbsp;* DBIx::Class&lt;br /&gt;&amp;nbsp;* DBIx::Class::Schema::Loader&lt;br /&gt;&amp;nbsp;&lt;br /&gt;</description>
			<category>Perl</category>
			<category>DBIC</category>
			<category>DBIx::Class</category>
			<category>DBIx::Class::Schema::Loader</category>
			<category>ORM</category>
			<category>perl</category>
			<author>JEEN</author>
			<guid>http://jeen.tistory.com/119</guid>
			<comments>http://jeen.tistory.com/entry/Perl-Perl-%EC%97%90%EC%84%9C%EC%9D%98-ORM-DBIxClass%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-1#entry119comment</comments>
			<pubDate>Tue,  5 Aug 2008 16:46:38 +0900</pubDate>
		</item>
		<item>
			<title>[ 버젼관리 ] 공연히 생각한 개인소스코드 관리</title>
			<link>http://jeen.tistory.com/entry/%EB%B2%84%EC%A0%BC%EA%B4%80%EB%A6%AC-%EA%B3%B5%EC%97%B0%ED%9E%88-%EC%83%9D%EA%B0%81%ED%95%9C-%EA%B0%9C%EC%9D%B8%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C-%EA%B4%80%EB%A6%AC</link>
			<description>&amp;nbsp; Perl로 작업하다 보면(뭐, 굳이 이야기하면 Perl 뿐만 아니라), 단발에 끝나는 작업들이 많이 있습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 주로 데이터 집계나 해석용으로 만드는 간단한 스크립트들인데요. 일때문에 서둘러 만들어서 쓰고는 별도로 관리하지 않고 그대로 놔둡니다. 그리고는 시간이 지나서... &quot;이거 뭐하는 거지?&quot; 라고 물음표를 세 번정도 날리고... &quot;필요없나보다&quot; 하고 지워버립니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 그렇게 지우고서, 집계 소스 데이터는 또 덩그러니 놔둡니다. 그것도 나중에는 어디에 쓰는 건지 몰라서 또 지워버리죠.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; (주로 단발에 끝나는 스크립트들은 대개 이름조차도 성의없는&amp;nbsp; d.pl, e.pl, a.pl, blah.pl 등등등 입니다)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 그리고는 시간이 지나고, 다시 비슷한 작업을 할 때가 오고... &quot;어라 이거 예전에 했던 건데&quot; 하고는 예전에 작업한 곳들을 뒤져봐도 답이 안나옵니다. 그리고 또 다시 만들고... 이렇게 시간을 버리는 것이죠.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 프로젝트 돌아가는 Repo 서버에 집어넣는 것도 좀 그렇다 싶어서...&lt;br /&gt;&amp;nbsp; 요즘에는 아예 개인적인 Repo 를 만들어버렸습니다.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfs8.tistory.com/image/1/tistory/2008/08/04/15/54/4896a79a1bd59&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;193&quot; width=&quot;396&quot;/&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp; (근 1년새에 Google Code 에 만든 Project 들인데요... 대부분 Ownership 이 되어있어서;; Project Owner 아니면 참가도 안하는 놈으로 낙인이 찍혀버렸습니다)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 일단 적당한 분류법도 정해놓지 않았습니다. 일단 코드가 있다면 적당한 주석을 집어넣고 일단 닥치는 대로 커밋해버립니다. 분류는 자료가 모인다음에 해도 늦지 않을 거라고 생각해서 입니다.&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; 커밋을 위한 어떤 기준도 없습니다. 그냥 10줄 이상의 코드라면 일단 커밋하고 본다는 것이죠. 기준같은 것이야, 어느 정도의 규모가 되고나서 생각해도 된다고 생각해서 입니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 사실 이런식으로 일단 커밋하고 보자는 게 일본의 Repository 공유 Project 인 CodeRepos 인데요. &lt;br /&gt;&amp;nbsp; CodeRepos 를 보고 있으면 사람이 많아질 수록 어떤 기준과 분류가 생겨서 자유로움이 없어지는 경향이 있어서요. 거기에 여러 사람이 있으면 지켜야할 룰이 있어야 하는 것은 당연하게 되죠.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 그래서 다른 사람 눈치볼 필요도 없고, 룰따위도 전혀없이 제 맘대로하는&amp;nbsp; 순전 100% 개인용 Repository라는 겁니다.(사실 개인 서버를 Repo 서버로 할 수도 있지만 Trac 같은 서비스 올리는 것도 싫고 해서.. Google Code 를 골랐습니다)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 그리고는 하루에 두서너개씩 커밋을 합니다. 개인용 스크립 뿐 아니라, 업무에서 사용하는 다른 사람들 스크립트도 마구잡이로 끌어들이고 있고... 웹에서 줏어들은 스크립트도 모으고 있습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 뭐, 그냥 이러다가보면 언젠가 도움되겠지 하는 막연한 생각이 드는 것이라고 할까요?&lt;br /&gt;&lt;br /&gt;&amp;nbsp; (근데 Google Code 에서 자기 Project 의 소스검색이 안되네요? -- 안된다기 보다는 일반적인 검색방법과 다른걸까나.. 사용법을 잘 모르겠네요. 이러면 Gonzui 같은 소스검색기를 도입해야 되는건가?)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; (결국은 혼자서 중얼중얼 이었습니다)&lt;br /&gt;</description>
			<category>IT</category>
			<category>Code</category>
			<category>google code</category>
			<category>Repository</category>
			<category>SVK</category>
			<category>SVN</category>
			<author>JEEN</author>
			<guid>http://jeen.tistory.com/118</guid>
			<comments>http://jeen.tistory.com/entry/%EB%B2%84%EC%A0%BC%EA%B4%80%EB%A6%AC-%EA%B3%B5%EC%97%B0%ED%9E%88-%EC%83%9D%EA%B0%81%ED%95%9C-%EA%B0%9C%EC%9D%B8%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C-%EA%B4%80%EB%A6%AC#entry118comment</comments>
			<pubDate>Mon,  4 Aug 2008 16:05:41 +0900</pubDate>
		</item>
	</channel>
</rss>
