<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>jaehyun.kr</title>
		<link>http://jaehyun.kr/</link>
		<description>@jaehyun on Twitter</description>
		<language>ko</language>
		<pubDate>Wed, 17 Aug 2011 06:47:23 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<image>
		<title>jaehyun.kr</title>
		<url><![CDATA[http://cfile24.uf.tistory.com/image/160A453D4D0CB16E0CD373]]></url>
		<link>http://jaehyun.kr/</link>
		<description>@jaehyun on Twitter</description>
		</image>
		<item>
			<title>티스토리로 다시 돌아왔습니다.</title>
			<link>http://jaehyun.kr/232</link>
			<description>잠시 텍스트큐브로 이사갔다가,&lt;div&gt;
워드프레스 설치해서 한번 써보려고 노력하다가..&lt;/div&gt;
&lt;div&gt;다시 티스토리로 돌아왔습니다.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
시간이 없어서 블로그에 신경을 많이 못쓸것 같기는 합니다.&lt;/div&gt;</description>
			<author>jhkim</author>
			<guid>http://jaehyun.kr/232</guid>
			<comments>http://jaehyun.kr/232#entry232comment</comments>
			<pubDate>Sun, 19 Dec 2010 07:19:40 +0900</pubDate>
		</item>
		<item>
			<title>Thinkreals 회사 블로그 소개</title>
			<link>http://jaehyun.kr/231</link>
			<description>&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot; id=&quot;aeaoofnhgocdbnbeljkmbjdmhbcokfdb-mousedown&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div id=&quot;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
이미 아시는 분이 많으시겠지만, 제가 &lt;a href=&quot;http://thinkreals.com&quot; target=&quot;_blank&quot;&gt;(주)씽크리얼스&lt;/a&gt;&amp;nbsp;라는 이름으로 회사를 시작하게 되었습니다.&lt;/div&gt;
&lt;div&gt;시간이 많이 부족하고, 글재주가 없어서 글을 자주 올리지는 못합니다만, 부족하게나마 &lt;a href=&quot;http://blog.thinkreals.com&quot; target=&quot;_blank&quot;&gt;Thinkreals Blog&lt;/a&gt;&amp;nbsp;를 통해 회사관련된 블로깅을 적어보려고 노력하고 있습니다.&lt;/div&gt;
&lt;div&gt;관심있으신분은 &amp;nbsp;&lt;a href=&quot;http://blog.thinkreals.com&quot; target=&quot;_blank&quot;&gt;Thinkreals Blog&lt;/a&gt;&amp;nbsp;에도 들려주세요.^^&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;</description>
			<author>jhkim</author>
			<guid>http://jaehyun.kr/231</guid>
			<comments>http://jaehyun.kr/231#entry231comment</comments>
			<pubDate>Sat, 27 Mar 2010 22:40:47 +0900</pubDate>
		</item>
		<item>
			<title>아이폰 사파리 윈도우 시뮬레이터 iphone safari window simulator</title>
			<link>http://jaehyun.kr/230</link>
			<description>&lt;div&gt;아래 두가지 찾았다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;어플리케이션 베이스&lt;/div&gt;&lt;a href=&quot;http://labs.blackbaud.com/NetCommunity/article?artid=662&quot;&gt;http://labs.blackbaud.com/NetCommunity/article?artid=662&lt;/a&gt;&lt;script&gt;try{for(var lastpass_iter=0; lastpass_iter &lt; document.forms.length; lastpass_iter++){ var lastpass_f = document.forms[lastpass_iter]; if(typeof(lastpass_f.lpsubmitorig2)==&quot;undefined&quot;){ lastpass_f.lpsubmitorig2 = lastpass_f.submit; lastpass_f.submit = function(){ var form=this; var customEvent = document.createEvent(&quot;Event&quot;); customEvent.initEvent(&quot;lpCustomEvent&quot;, true, true); var d = document.getElementById(&quot;hiddenlpsubmitdiv&quot;); for(var i = 0; i &lt; document.forms.length; i++){ if(document.forms[i]==form){ d.innerText=i; } } d.dispatchEvent(customEvent); form.lpsubmitorig2(); } } }}catch(e){}&lt;/script&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;웹 베이스&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.testiphone.com/&quot;&gt;http://www.testiphone.com/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description>
			<author>jhkim</author>
			<guid>http://jaehyun.kr/230</guid>
			<comments>http://jaehyun.kr/230#entry230comment</comments>
			<pubDate>Thu, 14 Jan 2010 18:35:59 +0900</pubDate>
		</item>
		<item>
			<title>아이폰 앱스토어 어플리케이션 개발. 궁합이 잘 맞는 서버개발은? Ruby on Rails</title>
			<link>http://jaehyun.kr/229</link>
			<description>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;지난 금요일에 컬트스토리( &lt;a href=&quot;http://blog.cultstory.com/&quot;&gt;http://blog.cultstory.com/&lt;/a&gt;&amp;nbsp;) 를 창업하신 분을 만나서,&lt;div&gt;이런저런 재미있는 이야기들을 나누며 저녁식사와 함께 오랫만에 소주 한잔 했다.&lt;/div&gt;&lt;div&gt;지금도 좋은 회사이고, 훌륭한 회사로 발전할 것 같다는^^ 대표님, 번창하시길 바래요..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;여러가지 재미있는 이야기를 나누었는데,&lt;/div&gt;&lt;div&gt;그중에 잠깐 이야기를 나누었던 것중에 한가지 생각나는 것이 있어서,&lt;/div&gt;&lt;div&gt;비슷한 고민을 하시는 많은 분들께 도움이 될까 싶어서 내 생각을 블로그에 써 볼까 한다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&quot;아이폰 앱과 연동할 서버를 개발하는데 PHP로 하려고 한다?&quot;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;아이폰 앱 개발을 하는데, 서버 연동 기반의 서비스를 구상중이라면 Ruby on Rails를 추천한다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;이유는 아래와 같이 꼽을 수 있겠다.&lt;/div&gt;&lt;div&gt;어떻게 보면, 트위터가 초기에 개발 공수를 많이 들이지 않은 시점 부터,&lt;/div&gt;&lt;div&gt;수많은 App이 널리 퍼치게 된 이유도 이런 이유가 아닐까 싶다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. html과 동일한 json, xml 등의 http response를 쉽게 얻을 수 있다.&lt;/div&gt;&lt;div&gt;아래 예와 같이, html, xml, json 가 기본 제공되고,&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://repling.com/jaehyun&quot;&gt;http://repling.com/jaehyun&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://repling.com/jaehyun.xml&quot; target=&quot;_blank&quot;&gt;http://repling.com/jaehyun.xml&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://repling.com/jaehyun.json&quot; target=&quot;_blank&quot;&gt;http://repling.com/jaehyun.json&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;나중에 멀티 디바이스 html view가 필요하면, &lt;/div&gt;&lt;div&gt;http://repling.com/jaehyun.iphone, http://repling.com/jaehyun.android&lt;br /&gt;&lt;/div&gt;&lt;div&gt;등의 mime-type을 쉽게 추가할 수 있다.&lt;/div&gt;&lt;div&gt;MVC에서 View를 자유로이 멀티 환경으로 쉽게 구성할 수 있다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. 위와 유사한 이야기 인데, 앱에서 필요로 하는 자원을 RESTful (&lt;a href=&quot;http://en.wikipedia.org/wiki/Representational_State_Transfer&quot;&gt;http://en.wikipedia.org/wiki/Representational_State_Transfer&lt;/a&gt;&amp;nbsp;)&lt;/div&gt;&lt;div&gt;하게 접근할 수 있게 지원해 주므로, 따로 프로토콜을 구상하지 않아도 된다.&lt;/div&gt;&lt;div&gt;위 RESTful 통신 방법을 따르다 보면 많은 설계 요소가 standard로 잘 잡히게 된다.&lt;/div&gt;&lt;div&gt;괜히 RESTful 안쓰면서 서버, 앱간의 통신 요소를 request, response를 하나하나 정의해 가며 시간낭비 하지 말자. (Getting Real에 언급된 것 처럼, 작고 Agile하게 해야지.. 급하게 막 코드를 늘려가면 안되요..)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. Ruby on Rails 웹 개발 프레임웍은 쉽고, 직관적으로 되어 있다고 개인적으로 생각한다.&lt;/div&gt;&lt;div&gt;DB쿼리를 직접 다룰 필요가 없는데도, 제약사항이 있긴 하지만 우연한 편이며,&lt;/div&gt;&lt;div&gt;Javascript Ajax로 동적인 웹 UI를 만드는 데도 상당히 직관적으로 개발할 수 있도록 만은 배려를 해 놓았다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그리고 내가 좋아하는 말.&lt;/div&gt;&lt;div&gt;Don&#039;t Repeat Yourself. &lt;/div&gt;&lt;div&gt;소스코드를 중복해서 작성하지 말라.&lt;/div&gt;&lt;div&gt;심지어 최근 루비온레일즈를 만들었고,, 만들고 있는 &lt;a href=&quot;http://twitter.com/dhh&quot; target=&quot;_blank&quot;&gt;@DHH&lt;/a&gt;&amp;nbsp;님의 트윗에서 본 글에는&lt;/div&gt;&lt;div&gt;Why do you need a signature in your emails if it&#039;s just name + email address? Why repeat information that&#039;s already in the from field?&lt;br /&gt;&lt;/div&gt;&lt;div&gt;라고 써있다. 이메일에도 의미없는 서명 중복을 피하라는..ㅎㅎ -_-;; &lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://twitter.com/dhh/status/7532661418&quot;&gt;http://twitter.com/dhh/status/7532661418&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ruby on Rails를 배우고 싶은 분들에게 강추하는 스크린캐스트 강의&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://railscasts.com/&quot;&gt;http://railscasts.com/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ruby on Rails 배우기 좋은 사이트를 더 알려드리고 싶지만.. &lt;/div&gt;&lt;div&gt;많이 소개해 드리면 하나도 안본다는..ㅎ,, 더 필요하신 분은 &lt;a href=&quot;http://twitter.com/jaehyun&quot; target=&quot;_blank&quot;&gt;@jaehyun&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;물론, Ruby, Ruby on Rails라는 새로운 것들을 배우는 것은 쉽지 않다. &lt;/div&gt;&lt;div&gt;개발자들은 기존 익숙한 언어를 사용하고 싶다.&lt;/div&gt;&lt;div&gt;그리고, 이런 장점 외에 Ruby on Rails의 단점도 있다는 사실.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;제가 주로 Java 웹개발만 해와서, Java와 Ruby on Rails를 조금 아는 상태에서..&lt;/div&gt;&lt;div&gt;PHP를 잘 모르고 단면만 보고 주장 할 수도 있다는 사실도..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;회사와 달리,,&lt;/div&gt;&lt;div&gt;내 목소리를 낼 수 있는 블로그.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;script&gt;try{for(var lastpass_iter=0; lastpass_iter &lt; document.forms.length; lastpass_iter++){ var lastpass_f = document.forms[lastpass_iter]; if(typeof(lastpass_f.lpsubmitorig2)==&quot;undefined&quot;){ lastpass_f.lpsubmitorig2 = lastpass_f.submit; lastpass_f.submit = function(){ var form=this; var customEvent = document.createEvent(&quot;Event&quot;); customEvent.initEvent(&quot;lpCustomEvent&quot;, true, true); var d = document.getElementById(&quot;hiddenlpsubmitdiv&quot;); for(var i = 0; i &lt; document.forms.length; i++){ if(document.forms[i]==form){ d.innerText=i; } } d.dispatchEvent(customEvent); form.lpsubmitorig2(); } } }}catch(e){}&lt;/script&gt;&lt;script&gt;try{for(var lastpass_iter=0; lastpass_iter &lt; document.forms.length; lastpass_iter++){ var lastpass_f = document.forms[lastpass_iter]; if(typeof(lastpass_f.lpsubmitorig2)==&quot;undefined&quot;){ lastpass_f.lpsubmitorig2 = lastpass_f.submit; lastpass_f.submit = function(){ var form=this; var customEvent = document.createEvent(&quot;Event&quot;); customEvent.initEvent(&quot;lpCustomEvent&quot;, true, true); var d = document.getElementById(&quot;hiddenlpsubmitdiv&quot;); for(var i = 0; i &lt; document.forms.length; i++){ if(document.forms[i]==form){ d.innerText=i; } } d.dispatchEvent(customEvent); form.lpsubmitorig2(); } } }}catch(e){}&lt;/script&gt;&lt;script&gt;try{for(var lastpass_iter=0; lastpass_iter &lt; document.forms.length; lastpass_iter++){ var lastpass_f = document.forms[lastpass_iter]; if(typeof(lastpass_f.lpsubmitorig2)==&quot;undefined&quot;){ lastpass_f.lpsubmitorig2 = lastpass_f.submit; lastpass_f.submit = function(){ var form=this; var customEvent = document.createEvent(&quot;Event&quot;); customEvent.initEvent(&quot;lpCustomEvent&quot;, true, true); var d = document.getElementById(&quot;hiddenlpsubmitdiv&quot;); for(var i = 0; i &lt; document.forms.length; i++){ if(document.forms[i]==form){ d.innerText=i; } } d.dispatchEvent(customEvent); form.lpsubmitorig2(); } } }}catch(e){}&lt;/script&gt;</description>
			<category>개발</category>
			<category>서버개발</category>
			<category>아이폰</category>
			<author>jhkim</author>
			<guid>http://jaehyun.kr/229</guid>
			<comments>http://jaehyun.kr/229#entry229comment</comments>
			<pubDate>Sun, 10 Jan 2010 07:32:01 +0900</pubDate>
		</item>
		<item>
			<title>Freemarker Ecliopse Plugin이 deprecated되었다. 다운로드 받을 수 있는 곳</title>
			<link>http://jaehyun.kr/228</link>
			<description>&lt;script&gt;try{for(var lastpass_iter=0; lastpass_iter &lt; document.forms.length; lastpass_iter++){ var lastpass_f = document.forms[lastpass_iter]; if(typeof(lastpass_f.lpsubmitorig2)==&quot;undefined&quot;){ lastpass_f.lpsubmitorig2 = lastpass_f.submit; lastpass_f.submit = function(){ var form=this; var customEvent = document.createEvent(&quot;Event&quot;); customEvent.initEvent(&quot;lpCustomEvent&quot;, true, true); var d = document.getElementById(&quot;hiddenlpsubmitdiv&quot;); for(var i = 0; i &lt; document.forms.length; i++){ if(document.forms[i]==form){ d.innerText=i; } } d.dispatchEvent(customEvent); form.lpsubmitorig2(); } } }}catch(e){}&lt;/script&gt;&lt;div&gt;Freemarker Eclipse Plugin에 버그가 있다는 것을 알고 있었지만,&lt;/div&gt;&lt;div&gt;지금은 아예 &amp;nbsp;&lt;a href=&quot;http://freemarker.org/eclipse/update/&quot;&gt;http://freemarker.org/eclipse/update/&lt;/a&gt;&amp;nbsp;업데이트 사이트를 가 동작을 안한다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;sourceforge에서 freemarker eclipse plugin 을 다운로드 받아서 eclilpse 디렉토리 아래 plugin 디렉토리에 풀어 놓으면 기존과 같이 동일하게 사용할 수 있다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Freemarker eclipse plugin is deprecated. but I want to download it.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can download it bellow.&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://sourceforge.net/projects/freemarker/files/&quot;&gt;http://sourceforge.net/projects/freemarker/files/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;script&gt;try{for(var lastpass_iter=0; lastpass_iter &lt; document.forms.length; lastpass_iter++){ var lastpass_f = document.forms[lastpass_iter]; if(typeof(lastpass_f.lpsubmitorig2)==&quot;undefined&quot;){ lastpass_f.lpsubmitorig2 = lastpass_f.submit; lastpass_f.submit = function(){ var form=this; var customEvent = document.createEvent(&quot;Event&quot;); customEvent.initEvent(&quot;lpCustomEvent&quot;, true, true); var d = document.getElementById(&quot;hiddenlpsubmitdiv&quot;); for(var i = 0; i &lt; document.forms.length; i++){ if(document.forms[i]==form){ d.innerText=i; } } d.dispatchEvent(customEvent); form.lpsubmitorig2(); } } }}catch(e){}&lt;/script&gt;&lt;script&gt;try{for(var lastpass_iter=0; lastpass_iter &lt; document.forms.length; lastpass_iter++){ var lastpass_f = document.forms[lastpass_iter]; if(typeof(lastpass_f.lpsubmitorig2)==&quot;undefined&quot;){ lastpass_f.lpsubmitorig2 = lastpass_f.submit; lastpass_f.submit = function(){ var form=this; var customEvent = document.createEvent(&quot;Event&quot;); customEvent.initEvent(&quot;lpCustomEvent&quot;, true, true); var d = document.getElementById(&quot;hiddenlpsubmitdiv&quot;); for(var i = 0; i &lt; document.forms.length; i++){ if(document.forms[i]==form){ d.innerText=i; } } d.dispatchEvent(customEvent); form.lpsubmitorig2(); } } }}catch(e){}&lt;/script&gt;</description>
			<category>Eclipse</category>
			<category>freemarker</category>
			<category>plugin</category>
			<author>jhkim</author>
			<guid>http://jaehyun.kr/228</guid>
			<comments>http://jaehyun.kr/228#entry228comment</comments>
			<pubDate>Sat, 09 Jan 2010 11:44:56 +0900</pubDate>
		</item>
		<item>
			<title>Transaction 서비스</title>
			<link>http://jaehyun.kr/227</link>
			<description>&lt;div&gt;Java Transaction 관리 방법을 설명한 좋은 문서를 찾았다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(85, 26, 139); -webkit-text-decorations-in-effect: underline; &quot;&gt;&lt;a href=&quot;http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:psl:transaction&quot; target=&quot;_blank&quot;&gt;http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:psl:transaction&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#039;Malgun Gothic&#039;, &#039;Lucida Grande&#039;, Verdana, Lucida, Helvetica, Arial, sans-serif; line-height: normal; font-size: 13px; &quot;&gt;&lt;ul style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 3.5em; line-height: 1.5em; list-style-type: square; list-style-image: none; color: rgb(99, 140, 156); &quot;&gt;&lt;li class=&quot;level1&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;div class=&quot;li&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(0, 0, 0); font-weight: normal; &quot;&gt;&lt;a href=&quot;http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:psl:transaction:declarative_transaction_management&quot; class=&quot;wikilink1&quot; title=&quot;egovframework:rte:psl:transaction:declarative_transaction_management&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(0, 153, 153) !important; text-decoration: none; &quot;&gt;Declarative Transaction Management&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class=&quot;level1&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;div class=&quot;li&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(0, 0, 0); font-weight: normal; &quot;&gt;&lt;a href=&quot;http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:psl:transaction:programmatic_transaction_management&quot; class=&quot;wikilink1&quot; title=&quot;egovframework:rte:psl:transaction:programmatic_transaction_management&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(0, 153, 153) !important; text-decoration: none; &quot;&gt;Programmatic Transaction Management&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;자바코드에서 DB 트랜젝션을 관리하는 방법은 위와 같이 두가지가 있다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;선언적 트렌젝션 관리 방법과 프로그래밍적 트렌젝션 관리 방법.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;프로그래밍적 트렌젝션 관리 방법은&lt;br /&gt;&lt;/div&gt;&lt;div&gt;소스코드에 직접 트렌젝션을 얻어서, 트렌젝션 코드 수행 후, 트렌젝션을 종료하는 코드를 &lt;/div&gt;&lt;div&gt;코드레벨에서 직접 써주면 된다.&lt;/div&gt;&lt;div&gt;이런 방법은 오래 전부터 사용되던 방법이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;선언적 트렌젝션 관리 방법은 최근에 알게 된 방법이며,&lt;/div&gt;&lt;div&gt;XML이나 Annotation 으로 어떤 단위를 트렌젝션 처리 하라고, 선언만 해 놓으면,&lt;/div&gt;&lt;div&gt;알아서 트렌젝션이 처리가 되는 방법니다.&lt;/div&gt;&lt;div&gt;스프링 프레임웍이 있어서 가능한 방법인 것 같다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;이번 내가 맏은 프로젝트에서는 &lt;/div&gt;&lt;div&gt;진보된 방법으로 볼 수 있는 선언적 트렌젝션 관리 방법를 사용해 보려고 한다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;자세한 기술적인 내용은 위 링크를 가면 알 수 있으니 참고하세요.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description>
			<category>Java</category>
			<category>Spring</category>
			<category>Transaction</category>
			<category>트랜젝션</category>
			<author>jhkim</author>
			<guid>http://jaehyun.kr/227</guid>
			<comments>http://jaehyun.kr/227#entry227comment</comments>
			<pubDate>Tue, 22 Dec 2009 12:24:00 +0900</pubDate>
		</item>
		<item>
			<title>주말을 이용한 java struts2를 이용한 웹 개발 후기</title>
			<link>http://jaehyun.kr/226</link>
			<description>최근에는 혼자 웹 개발을 할때는 Ruby on Rails를 주로 이용하는데,&lt;div&gt;이번에는 Java Struts2를 이용하여 개발하고 있다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;이유는 유지보수 부분을 다른 분에게 양도해야 하기 때문에, &lt;/div&gt;&lt;div&gt;듣보잡인 RoR로 개발해서 넘겨줄 수 없기 때문이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;과거에 블로깅 에서 소개한 &lt;a href=&quot;http://jaehyun.kr/201&quot; target=&quot;_blank&quot;&gt;Java로 Ruby on Rails의 RESTful, scaffold처럼 웹개발하기&lt;/a&gt;&lt;/div&gt;&lt;div&gt;방법을 활용해서 개발했다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;iBator 에서 DB Access소스 제너레이션을 하고, 내가 만든 scaffold generator를 이용하여,&lt;/div&gt;&lt;div&gt;기반코드를 작성하니 좋았다. &lt;/div&gt;&lt;div&gt;이제는 이런 소스 제너레이터 없이 개발하는 것은 상상하기도 싫다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;CRUD 를 위한 RESTful plugin, Convention plugin등을 사용하여 RoR 환경에 비슷한 방향으로&lt;/div&gt;&lt;div&gt;개발 할 수 있도록 노력했다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;plugin에 버그가 조금 있는 것 같은데, (아니면 문서화가 부족해서 내가 잘 모르는 부분이 있거나..)&lt;/div&gt;&lt;div&gt;우회하는 방법으로 피해서 사용하고 있다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그래도 Ruby on Rails보다는 개발하기 번거로운 부분이 많다. &lt;/div&gt;&lt;div&gt;RoR 생각을 간절히 하면서.. &lt;/div&gt;&lt;div&gt;Java 노가다 코드를 삽입하며, 천천히 코드를 개발중이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그래도 나중에 Java환경에서 개발을 할 일이 있을 때, &lt;/div&gt;&lt;div&gt;많은 도움이 될 개발이 될 듯 하다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;만약에, 회사에서 처럼 이런 라이브러리 쓰지 말고 개발하라고 요구 했다면?? &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;못한다..-_-&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description>
			<category>Java</category>
			<category>웹개발</category>
			<author>jhkim</author>
			<guid>http://jaehyun.kr/226</guid>
			<comments>http://jaehyun.kr/226#entry226comment</comments>
			<pubDate>Mon, 21 Dec 2009 18:06:36 +0900</pubDate>
		</item>
		<item>
			<title>windows mysql Ruby gem 설치 에러</title>
			<link>http://jaehyun.kr/225</link>
			<description>windows 에 mysql ruby gem 을 설치하면 에러가 발생한다.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;이것을 해결하기 위해, mysql 에 있는 libmysql.dll 파일을 ruby설치경로\bin 디렉토리에 복사한 후,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ gem install mysql --version 2.7.3&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;명령어로 설치하면 RDoc은 에러가 나긴 하지만, 정상적으로 사용할 수 있다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;현재 2.8 버전에서는 테스트를 다 안해봐서, 잘 모르겠다.&lt;/div&gt;&lt;div&gt;현재로서는 그냥 2.7.3 버전을 사용하려고 한다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description>
			<author>jhkim</author>
			<guid>http://jaehyun.kr/225</guid>
			<comments>http://jaehyun.kr/225#entry225comment</comments>
			<pubDate>Sun, 13 Dec 2009 23:39:16 +0900</pubDate>
		</item>
		<item>
			<title>개발자의 성향과 회사</title>
			<link>http://jaehyun.kr/224</link>
			<description>나는 비교적 큰 회사에 다니고 있다.&lt;div&gt;규모로 따지자면 한국 IT업계에서는 한국에서는 손에 꼽을 만큼 규모가 있는 회사이다.&lt;/div&gt;&lt;div&gt;그런데, 나는 가끔은 이 큰 조직에서 회사를 위해서 내가 할 수 있는 일이 무엇인지 가끔은 고민해 본다.&lt;/div&gt;&lt;div&gt;회사에서 월급을 받으니, 그에 따른 회사에 기여를 해야 한다는 것이 나의 생각이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그런데, 내가 회사에서 하고 있는 일이나 업무 역량을 보면..&lt;/div&gt;&lt;div&gt;뛰어나지 않은 그냥 그런 보통의 개발자로 보인다. (어쩌면 조금 뒤쳐질지도..)&lt;/div&gt;&lt;div&gt;시키는 일을 그때그때 잘 하는 편 같다. 시키면 한다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그런데, 좀 더 능동적인 행동은 되지 않는 듯 하다.&lt;/div&gt;&lt;div&gt;아니, 능동적으로 행동해서 변화 될 수 있는게 별로 없다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;요즘 드는 생각은, (능동적으로 해보려고.)&lt;/div&gt;&lt;div&gt;회사에서 내가 하는 일이 데이터 관리 시스템을 만드는 것이기 때문에,&lt;/div&gt;&lt;div&gt;Java EE 개발환경 보다는 Ruby on Rails가 적합해 보인다. 생산성이 좋고, 데이터 무결성 유지에 좋아보인다. 데이터 정규화도 더 잘 될 듯 하고..(몇백만건, 몇천만건 넘는 대용량은 아직 잘 모르겠지만..)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그래서 팀원들에게 Ruby on Rails를 당장 쓰자고 말하는 것도 아니고, &lt;/div&gt;&lt;div&gt;세미나를 한번 해주고 싶은 마음이 솟구쳐, 팀 세미나.. &lt;/div&gt;&lt;div&gt;스터디 시간에 살짝 언급을 했었는데.. &amp;nbsp;한방에 퇴짜 맞았다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;퇴짜 이유는? Java 기술이 아니라서 ㅎ&lt;/div&gt;&lt;div&gt;생산성이 월등히 좋다고 다시 한번 더 설득을 시도 하였으나,, &lt;/div&gt;&lt;div&gt;그렇다면,, php를 쓰겠다고 한다..-_- php가 java보다 생산성이 좋다고..ㅡㅡ&lt;/div&gt;&lt;div&gt;내가 php를 잘 몰라서 반문할 여력은 별로 없다.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그런데, 나는 개발자 성향을 가진 팀원으로서, 생산성 좋은 Ruby on Rails를 보면 적용하고 싶고, 좋다는 것을 알리고 싶다.&lt;/div&gt;&lt;div&gt;Ruby on Rails의 Active Record, Formtastic .. 등등 수많은 라이브러리들을 보면.. 흥분된다 -_- 단지 좋아서.ㅎㅎ&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;하긴, 회사에서는 java 중에서도 내가 쓰고 싶은 java framework 이나 라이브러리를 쓰지 못하는 판에.. 왠 Ruby on Rails니..ㅎ&lt;br /&gt;&lt;/div&gt;&lt;div&gt;회사에서는 회사 자체의 라이브러리로 개발해야 한다. (내생각엔 좀 뒤쳐진..)&lt;/div&gt;&lt;div&gt;java로 개발 하더라도, java framework, 라이브러리 사용의 자유를 줬으면 한다..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description>
			<category>일상</category>
			<category>개발자</category>
			<category>회사</category>
			<author>jhkim</author>
			<guid>http://jaehyun.kr/224</guid>
			<comments>http://jaehyun.kr/224#entry224comment</comments>
			<pubDate>Fri, 11 Dec 2009 15:51:06 +0900</pubDate>
		</item>
		<item>
			<title>해외 여행 호텔을 예약하려면..HotelTravel.com</title>
			<link>http://jaehyun.kr/223</link>
			<description>&lt;div&gt;이번에 말레이시아 코타 키나발루에 여행계획을 세우면서&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://hoteltravel.com&quot; target=&quot;_blank&quot;&gt;hoteltravel.com&lt;/a&gt;으로 호텔을 예약을 했다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;http://data2.hoteltravel.com/genimages/borders/hoteltravel_logo.gif&quot; alt=&quot;Hotel Travel&quot; style=&quot;background-color: rgb(248, 248, 248); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(238, 238, 238); border-right-color: rgb(238, 238, 238); border-bottom-color: rgb(238, 238, 238); border-left-color: rgb(238, 238, 238); background-position: 50% 50%; background-repeat: no-repeat no-repeat; &quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;예약과정이 아주 편하고, 직관적이다. &lt;/div&gt;&lt;div&gt;처음 접속하면 영어로 기본으로 보이지만, 오른쪽 상단에 태극기로 한국어 설정을 하면&lt;/div&gt;&lt;div&gt;한글로 편하게 볼 수도 있다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;심지어, 한가지 놀라운 점은.. 바로 채팅으로 고객문의를 들어준 다는점.&lt;/div&gt;&lt;div&gt;그것도 한국어로 채팅을 해서 고객문의 서비스를 받았다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://jaehyun.kr/222&quot; target=&quot;_blank&quot;&gt;이전 포스트&lt;/a&gt;에서 쓴 호텔 3곳을 예약하는 과정에서,&lt;/div&gt;&lt;div&gt;단순 변심으로 카드 결제까지 한 호텔을 하나 취소하게 되었다.&lt;/div&gt;&lt;div&gt;취소도 잘 된다.&lt;/div&gt;&lt;div&gt;결제 취소 관련해서 궁금한 것이 생겨서, 채팅 고객문의 서비스를 이용해 보니, 아주 편하다. 대만족.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;물론, 결제에도 ActiveX 가 사용되는 것이 아니고, https로 그냥 한다.&lt;/div&gt;&lt;div&gt;너무 쉽게 결제가 되고, &lt;/div&gt;&lt;div&gt;브라우저의 html form에서 카드번호 등의 기존입력 값들이 자동 완성이 되어서,&lt;/div&gt;&lt;div&gt;너무 편해 걱정스러울 정도다. (이건 거짓말임.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;여기서 잠깐 예기를 옆으로 세보면..&lt;/div&gt;&lt;div&gt;&quot;저런 form자동완성 보안문제 때문에 ActiveX써야되..&quot; 라고 말하는 분이 계시다면..OTL&lt;/div&gt;&lt;div&gt;공공PC는 브라우저 설정에서 form 자동완성을 꺼놓으면 된다. (이건 공공PC를 운영하는 곳에서 신경을 써 줘야 할듯.)&lt;/div&gt;&lt;div&gt;개인용 PC면 위 기능이 제공되면 편해서 좋은거 아닌가..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;우리나라의 Flash로 된 메뉴, 웹표준화 안지키고, ActiveX의 결제시스템 등..&lt;/div&gt;&lt;div&gt;이런 오바스러움을 떨면서도 주민등록 번호는 https가 아닌 http로 전송 받는다. -_- 안습.&lt;/div&gt;&lt;div&gt;우리나라 전형적인 웹서이트들을 보면 좀 안쓰럽다. 왜 이렇게 되었는지..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;실용주의 소프트웨어(&lt;a href=&quot;http://jaehyun.userstorybook.net/2181/&quot;&gt;http://jaehyun.userstorybook.net/2181/&lt;/a&gt;&amp;nbsp;)의 깨진창문 얘기가 떠오른다.&lt;/div&gt;&lt;div&gt;한번 깨지기 시작하면 쉽게 연속으로 깨지고, 금방 집이 폐허가 될 수 있다는 것.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;호텔 얘기로 시작해서 개발자 얘기로 끝나는 -_- 뭥미.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description>
			<category>해외 호텔 예약</category>
			<category>해외여행</category>
			<category>호텔</category>
			<author>jhkim</author>
			<guid>http://jaehyun.kr/223</guid>
			<comments>http://jaehyun.kr/223#entry223comment</comments>
			<pubDate>Fri, 11 Dec 2009 11:51:43 +0900</pubDate>
		</item>
	</channel>
</rss>

