<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Flexible Flex</title>
		<link>http://rinn.kr/</link>
		<description>as3, Flex, Flash // @purpleRinn // me2day : rinn</description>
		<language>ko</language>
		<pubDate>Wed, 17 Aug 2011 07:01:48 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<image>
		<title>Flexible Flex</title>
		<url><![CDATA[http://cfile10.uf.tistory.com/image/206728264CD628C606EFFB]]></url>
		<link>http://rinn.kr/</link>
		<description>as3, Flex, Flash // @purpleRinn // me2day : rinn</description>
		</image>
		<item>
			<title>Silverlight 4 한글 도움말.</title>
			<link>http://rinn.kr/55</link>
			<description>실버라이트 4 관련책이 국내에 한권뿐이어서 보고나서 안타까움을 좀 느꼈는데..&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
MS에서 나온 정식한글 도움말 파일이 있다...;;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;http://www.microsoft.com/downloads/ko-kr/details.aspx?FamilyID=b6127b9b-968c-46c2-8cb6-d228e017ad74&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
chm 파일로 무려 80메가..&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;a href=&quot;http://cfile2.uf.tistory.com/original/11399B414DB1244A0BA6CD&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/11399B414DB1244A0BA6CD&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;06.jpg&quot; height=&quot;281&quot; width=&quot;620&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
어도비에서는 플렉스4 도움말을 한글로 안만들어줘서 번역까지 하게 만들었는데.. 한글 도움말을 만나니 엄청 반갑네 -ㅅ-;;;&lt;br /&gt;
&lt;br /&gt;
참고로 Silverlight 5 Beta 도움말은 아직 영문이다.. 정식버전이 릴리즈 되면 이것도 한글로 배포 해주면 좋을텐데.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.microsoft.com/downloads/ko-kr/details.aspx?FamilyID=b6127b9b-968c-46c2-8cb6-d228e017ad74&quot;&gt;&lt;/a&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-55-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-55-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-55-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=16027768&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Frinn.kr/55&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>Silverlight</category>
			<category>Silverlight 4</category>
			<category>Silverlight 4 chm</category>
			<category>Silverlight 4 도움말</category>
			<author>퍼플린</author>
			<guid>http://rinn.kr/55</guid>
			<comments>http://rinn.kr/55#entry55comment</comments>
			<pubDate>Fri, 22 Apr 2011 15:49:40 +0900</pubDate>
		</item>
		<item>
			<title>VisualStudio 2010 한글판에 실버라이트5 설치하기</title>
			<link>http://rinn.kr/54</link>
			<description>이번에 실버라이트 프로젝트를 진행하게 되어서 실버라이트4에 대한 스터디를 하던중 5가 금방 정식 릴리즈 될듯 하니.. 5버전으로 프로젝트를 진행하는것도 테스트 해보자는 의견이 나왔다.&amp;nbsp;&lt;br /&gt;
Silverlight 5 Beta를 설치 하기 위해서 서비스팩1도 깔고 SilverLight Tool 5 를 받아서 설치 했으나.. 언어가 달라서 지원하지 않는다는 메시지만 나오는 문제가 발생.. &lt;br /&gt;
&lt;br /&gt;
구글링을 해보니.. 영문판에만 tool이 깔린다는 결론이 대부분이었다. &lt;br /&gt;
다른 직원에게 한글판을 삭제하고 영문판으로 새로 깔아서 실버라이트5를 올리는 것을 테스트 시켜보니 정상적으로 깔리고 프로젝트 생성 및 컴파일이 진행되는 것을 확인 하였다. &lt;br /&gt;
&lt;br /&gt;
하지만 &lt;u&gt;한글판에 설치하는 방법을 발견&lt;/u&gt;!! (하루를 이것저것 테스트 한 결과물)&lt;br /&gt;
&lt;br /&gt;
테스트 환경은 윈도우7 / VisualStudio 2010 (한글) / Silverlight 4 tool / Silverlight 4 toolKit &amp;nbsp;/ WCF Service가 이미 설치되어있는 상태..&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;http://www.silverlight.net/getstarted/silverlight-5-beta/&lt;br /&gt;
&amp;nbsp;&lt;div&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/167CA2334DB11F7F2CA4D8&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/167CA2334DB11F7F2CA4D8&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;02.jpg&quot; height=&quot;363&quot; width=&quot;620&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
실버라이트 공식사이트에 가면 다운로드 받을수 있게 되어있는 5 Beta가 크게 들어오지만 받아봐야 언어때문에 안깔린다.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
스크롤을 아래로 내려보면 &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/1442AE3B4DB11FDD04BB50&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/1442AE3B4DB11FDD04BB50&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;03.jpg&quot; height=&quot;185&quot; width=&quot;589&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
오른쪽으로 Additional Downloads 라는 항목에 Runtime과 SDK만 따로 다운로드 받을수 있도록 되어있다. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#E31600&quot;&gt;Silverlight 5 SDK 시스템에 맞는 Runtime을 다운받아서 설치한다. &lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
설치 완료 후에 VisualStudio 에서 새프로젝트 생성 - Silverlight 응용 프로그램을 선택하면&amp;nbsp;&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/original/1729C5414DB120E91F1881&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/1729C5414DB120E91F1881&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;04.jpg&quot; height=&quot;416&quot; width=&quot;523&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
Silverlight 5 버전이 선택된다.!!&lt;br /&gt;
&lt;br /&gt;
확인을 선택하면.. 실버라이트 프로젝트 생성을 위해 툴을 받아야 한다고 알림 메시지가 뜨는데.. 이 툴은 Silverlight 4 tool 이다... &lt;br /&gt;
&lt;br /&gt;
&lt;font class=&quot;Apple-style-span&quot; color=&quot;#3058D2&quot;&gt;왜 이런식으로 진행되는지는 모르겠지만.. 실버라이트 4 툴을 새로 설치 하고 나면 실버라이트5 프로젝트를 생성해서 컴파일 할수 있게 된다. &lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/original/16261C3D4DB121933526D5&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/16261C3D4DB121933526D5&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;05.jpg&quot; height=&quot;345&quot; width=&quot;620&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
아직은 Silverlight toolkit 5가 나오지 않은 관계로 4 프로젝트와 완벽한 호환성은 보장되지 않지만 조만간 나올듯 하니.. 미리 테스트 해보고싶은 사람들은 위 방법대로 설치 해보면 될듯 하다. &lt;br /&gt;
&lt;br /&gt;
실제 프로젝트 테스트를 하면서 VisualStudio 2010 영문 버전에 설치한 기기와 한글버전에 위 방법으로 따로 설치한 기기에서 다른점이 발생하면 다시 포스팅 하겠다. &lt;br /&gt;
&lt;br /&gt;
모두 성공하시길~&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;PS. 하드 용량이 넉넉하고 영문판도 따로 가지고 있는 분은 한글판을 언인스톨 하지 않고 그냥 영문판을 깔아버리면 옵션에서 한글 영문 선택할 수 있게 되고 Silverlight 5 tool 도 그냥 설치 된다. &amp;nbsp;이것도 참고!&lt;br /&gt;
&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-54-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-54-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-54-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=16027445&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Frinn.kr/54&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>Silverlight</category>
			<category>Silverlight 5</category>
			<category>Silverlight 5 Beta 설치</category>
			<category>VisualStudio 2010 한글</category>
			<author>퍼플린</author>
			<guid>http://rinn.kr/54</guid>
			<comments>http://rinn.kr/54#entry54comment</comments>
			<pubDate>Fri, 22 Apr 2011 15:40:21 +0900</pubDate>
		</item>
		<item>
			<title>TextEvent를 사용해서 htmlText의 링크 클릭이벤트를 처리하기</title>
			<link>http://rinn.kr/53</link>
			<description>&lt;P&gt;&lt;br /&gt;
데이터를 표시 하다보면 어쩔수 없이 버튼등으로 처리 하지 못하고 Text나 Label 등을 사용해서 보여줘야 하는 경우가 생긴다. &lt;br /&gt;
&lt;br /&gt;Text 데이터를 보여 주면서 외부 링크의 경우 htmlText에 직접 링크를 걸어주면 되지만 플렉스 내부에서 처리 해야 하는 경우에는 좀 곤란해지기도 하는데 이럴때 TextEvent로 htmlText의 링크를 체크 할수 있다. &lt;/P&gt;
&lt;P&gt;TextEvent.LINK 와 TextEvent.TEXT_INPUT 두개밖에 없고 매우 간단하다&lt;br /&gt;
&lt;br /&gt;&lt;/P&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #c1c1c1 1px dashed; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-TOP: 10px&quot; class=txc-textbox&gt;
&lt;TABLE style=&quot;BACKGROUND-COLOR: white; MARGIN-TOP: 10px; MARGIN-BOTTOM: 3px; MARGIN-LEFT: 20px&quot; class=detailHeader cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;WHITE-SPACE: nowrap; FONT-SIZE: 16px; VERTICAL-ALIGN: baseline; FONT-WEIGHT: bold&quot; class=detailHeaderName&gt;TextEvent&lt;/TD&gt;
&lt;TD style=&quot;PADDING-BOTTOM: 2px; PADDING-LEFT: 1px; FONT-SIZE: 14px; FONT-WEIGHT: bold&quot; class=detailHeaderParens&gt;()&lt;/TD&gt;
&lt;TD style=&quot;PADDING-LEFT: 7px; PADDING-RIGHT: 10px; WHITE-SPACE: nowrap; FONT-SIZE: 12px; VERTICAL-ALIGN: baseline&quot; class=detailHeaderType&gt;생성자&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;DIV style=&quot;MARGIN-BOTTOM: 20px; MARGIN-LEFT: 20px; MARGIN-RIGHT: 15px&quot; class=detailBody&gt;&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;public function TextEvent(type:&lt;A style=&quot;COLOR: rgb(0,0,204); TEXT-DECORATION: none&quot; href=&quot;file:///D:/ë°±ì/AS3%20íê¸ëìë§/AS3LCR/Flash_10.0/String.html&quot;&gt;String&lt;/A&gt;, bubbles:&lt;A style=&quot;COLOR: rgb(0,0,204); TEXT-DECORATION: none&quot; href=&quot;file:///D:/ë°±ì/AS3%20íê¸ëìë§/AS3LCR/Flash_10.0/Boolean.html&quot;&gt;Boolean&lt;/A&gt;&amp;nbsp;= false, cancelable:&lt;A style=&quot;COLOR: rgb(0,0,204); TEXT-DECORATION: none&quot; href=&quot;file:///D:/ë°±ì/AS3%20íê¸ëìë§/AS3LCR/Flash_10.0/Boolean.html&quot;&gt;Boolean&lt;/A&gt;&amp;nbsp;= false, text:&lt;A style=&quot;COLOR: rgb(0,0,204); TEXT-DECORATION: none&quot; href=&quot;file:///D:/ë°±ì/AS3%20íê¸ëìë§/AS3LCR/Flash_10.0/String.html&quot;&gt;String&lt;/A&gt;&amp;nbsp;= &quot;&quot;)&lt;/CODE&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;TABLE style=&quot;BACKGROUND-COLOR: white&quot; border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;WHITE-SPACE: nowrap; FONT-SIZE: 13px&quot; vAlign=top&gt;&lt;B&gt;언어 버전:&amp;nbsp;&lt;/B&gt;&lt;/TD&gt;
&lt;TD style=&quot;FONT-SIZE: 13px&quot;&gt;ActionScript 3.0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE style=&quot;BACKGROUND-COLOR: white&quot; border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;WHITE-SPACE: nowrap; FONT-SIZE: 13px&quot; vAlign=top&gt;&lt;B&gt;런타임 버전:&amp;nbsp;&lt;/B&gt;&lt;/TD&gt;
&lt;TD style=&quot;FONT-SIZE: 13px&quot;&gt;AIR 1.0, Flash Player 9&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;텍스트 이벤트에 대한 정보가 포함된 Event 객체를 만듭니다. Event 객체는 매개 변수로 이벤트 리스너에 전달됩니다.&lt;/P&gt;&lt;SPAN style=&quot;COLOR: rgb(68,68,68); FONT-WEIGHT: bold&quot; class=label&gt;매개 변수&lt;/SPAN&gt; 
&lt;TABLE style=&quot;BACKGROUND-COLOR: white&quot; border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style=&quot;FONT-SIZE: 13px&quot; width=20&gt;&lt;/TD&gt;
&lt;TD style=&quot;FONT-SIZE: 13px&quot;&gt;&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;&lt;SPAN style=&quot;COLOR: rgb(68,68,68); FONT-WEIGHT: bold&quot; class=label&gt;type&lt;/SPAN&gt;:&lt;A style=&quot;COLOR: rgb(0,0,204); TEXT-DECORATION: none&quot; href=&quot;file:///D:/ë°±ì/AS3%20íê¸ëìë§/AS3LCR/Flash_10.0/String.html&quot;&gt;String&lt;/A&gt;&lt;/CODE&gt;&amp;nbsp;— 이벤트 유형입니다. 이벤트 리스너는 상속된&amp;nbsp;&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;type&lt;/CODE&gt;&amp;nbsp;속성을 통해 이 정보에 액세스할 수 있습니다. 사용할 수 있는 값은&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;TextEvent.LINK&lt;/CODE&gt;&amp;nbsp;및&amp;nbsp;&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;TextEvent.TEXT_INPUT&lt;/CODE&gt;입니다.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style=&quot;FONT-SIZE: 5px&quot; class=paramSpacer&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style=&quot;FONT-SIZE: 13px&quot; width=20&gt;&lt;/TD&gt;
&lt;TD style=&quot;FONT-SIZE: 13px&quot;&gt;&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;&lt;SPAN style=&quot;COLOR: rgb(68,68,68); FONT-WEIGHT: bold&quot; class=label&gt;bubbles&lt;/SPAN&gt;:&lt;A style=&quot;COLOR: rgb(0,0,204); TEXT-DECORATION: none&quot; href=&quot;file:///D:/ë°±ì/AS3%20íê¸ëìë§/AS3LCR/Flash_10.0/Boolean.html&quot;&gt;Boolean&lt;/A&gt;&lt;/CODE&gt;&amp;nbsp;(default =&amp;nbsp;&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;false&lt;/CODE&gt;)&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;&lt;/CODE&gt;&amp;nbsp;— Event 객체가 이벤트 흐름의 버블링 단계에 참여하는지 여부를 결정합니다. 이벤트 리스너는 상속된&amp;nbsp;&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;bubbles&lt;/CODE&gt;속성을 통해 이 정보에 액세스할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style=&quot;FONT-SIZE: 5px&quot; class=paramSpacer&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style=&quot;FONT-SIZE: 13px&quot; width=20&gt;&lt;/TD&gt;
&lt;TD style=&quot;FONT-SIZE: 13px&quot;&gt;&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;&lt;SPAN style=&quot;COLOR: rgb(68,68,68); FONT-WEIGHT: bold&quot; class=label&gt;cancelable&lt;/SPAN&gt;:&lt;A style=&quot;COLOR: rgb(0,0,204); TEXT-DECORATION: none&quot; href=&quot;file:///D:/ë°±ì/AS3%20íê¸ëìë§/AS3LCR/Flash_10.0/Boolean.html&quot;&gt;Boolean&lt;/A&gt;&lt;/CODE&gt;&amp;nbsp;(default =&amp;nbsp;&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;false&lt;/CODE&gt;)&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;&lt;/CODE&gt;&amp;nbsp;— Event 객체를 취소할 수 있는지 여부를 결정합니다. 이벤트 리스너는 상속된&amp;nbsp;&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;cancelable&lt;/CODE&gt;&amp;nbsp;속성을 통해 이 정보에 액세스할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style=&quot;FONT-SIZE: 5px&quot; class=paramSpacer&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style=&quot;FONT-SIZE: 13px&quot; width=20&gt;&lt;/TD&gt;
&lt;TD style=&quot;FONT-SIZE: 13px&quot;&gt;&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;&lt;SPAN style=&quot;COLOR: rgb(68,68,68); FONT-WEIGHT: bold&quot; class=label&gt;text&lt;/SPAN&gt;:&lt;A style=&quot;COLOR: rgb(0,0,204); TEXT-DECORATION: none&quot; href=&quot;file:///D:/ë°±ì/AS3%20íê¸ëìë§/AS3LCR/Flash_10.0/String.html&quot;&gt;String&lt;/A&gt;&lt;/CODE&gt;&amp;nbsp;(default = &quot;&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;&lt;/CODE&gt;&quot;)&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;&lt;/CODE&gt;&amp;nbsp;— 사용자가 입력한 한 자 이상의 텍스트 문자입니다. 이벤트 리스너는&amp;nbsp;&lt;CODE style=&quot;FONT-FAMILY: &#039;Lucida Console&#039;, &#039;Courier New&#039;, Courier, monospace; FONT-SIZE: 12px&quot;&gt;text&lt;/CODE&gt;&amp;nbsp;속성을 통해 이 정보에 액세스할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;
&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;br /&gt;
&lt;embed width=&quot;400&quot; height=&quot;200&quot; src=&quot;/attachment/cfile8.uf@1821103F4D44402F1C3D32.swf&quot; quality=&quot;high&quot; allowScriptAccess=&quot;always&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;/&gt;&lt;/P&gt;
&lt;P&gt;예제를 보면 첫번째 Google 링크는 외부 링크로 열리고 네이버 링크는 Flex 내부에서 처리해서 Alert을 띄운다. &lt;br /&gt;
&lt;br /&gt;[어플리케이션 스크립트소스]&lt;br /&gt;
&lt;br /&gt;&lt;pre class=&quot;brush:as3&quot;&gt;private var text:TextLink;

private function init():void
{
 text = new TextLink();
 
 text.htmlText = &quot;&lt;a href=&#039;http://google.com&#039; target=&#039;_blank&#039;&gt;Google&lt;/a&gt; = http://google.com&lt;br /&gt;&lt;a href=&#039;event:Naver&#039;&gt;Naver&lt;/a&gt; = http://naver.com&quot;;
 text.addEventListener(TextEvent.LINK, checkLink);
 addChild(text);
 text.x = 100;
 text.y = 80;
}

private function checkLink(e:TextEvent):void
{
 Alert.show(e.text+&quot; 링크를 클릭했어요&quot;);
}

&lt;/pre&gt;&lt;br /&gt;
TextLink.as&lt;br /&gt;
&lt;br /&gt;&lt;pre class=&quot;brush:as3&quot;&gt;package
{
 import flash.text.StyleSheet;
 import mx.controls.Text;

 public class TextLink extends Text
 {
  public function TextLink()
  {
   super();
  }
  
  override protected function createChildren():void
  {
   super.createChildren();
   
   var style:StyleSheet = new StyleSheet();
            style.setStyle(&quot;a:link&quot;, {color:&quot;#0000ff&quot;, textDecoration:&quot;underline&quot;});
            style.setStyle(&quot;a:hover&quot;, {color:&quot;#00ff00&quot;, textDecoration:&quot;none&quot;});
            style.setStyle(&quot;a:active&quot;, {color:&quot;#0000ff&quot;, textDecoration:&quot;underline&quot;});
            textField.styleSheet = style;
  }
 }
}

&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;TextLInk.as는 링크 컬러를 설정하기 위해서 Text를 상속받아서 만든 컴포넌트이다. Label, Text, TextArea, TextInput 등등 TextField를 가지고 있는 놈은 어떤것을 상속받더라도 상관없다.&lt;/P&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-53-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-53-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-53-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=13540632&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Frinn.kr/53&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>Flex</category>
			<category>flash</category>
			<category>flex</category>
			<category>htmlText 링크</category>
			<category>Link클릭으로 as 클래스 실행</category>
			<category>TextEvent</category>
			<category>TextEvent.LINK</category>
			<author>퍼플린</author>
			<guid>http://rinn.kr/53</guid>
			<comments>http://rinn.kr/53#entry53comment</comments>
			<pubDate>Sun, 30 Jan 2011 01:33:00 +0900</pubDate>
		</item>
		<item>
			<title>java+ MyBatis 에서 procedure 호출하기.</title>
			<link>http://rinn.kr/51</link>
			<description>&lt;br /&gt;
&lt;A href=&quot;http://rinn.kr/46&quot; target=_blank&gt;2010/11/02 - [Java &amp;amp; iBatis] - Java / iBatis에서 프로시저 호출하기&lt;/A&gt;&lt;br /&gt;
&lt;A href=&quot;http://rinn.kr/49&quot; target=_blank&gt;2010/11/05 - [Java &amp;amp; iBatis] - iBatis에서 myBatis로 개요 및 변경점&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;이 포스트를 읽기전에 이전글을 안읽었다면 한번 둘러보고 오는편이 좋을 것같아서 링크를 먼저 걸고 시작한다. &lt;br /&gt;
iBatis 에서 프로시저 호출하기의 &lt;STRONG&gt;myBatis 버전&lt;/STRONG&gt;이다. &lt;br /&gt;
&lt;br /&gt;myBatis 에서 paramterMap을 더이상 사용하지 말자고 했기 때문에.. 이전처럼 프로시저를 호출하는 것은 무리가 있다. &lt;br /&gt;
&lt;br /&gt;&lt;FONT color=#801fbf&gt;Procedure 관련 체크해야할 변경사항은.. 일단 parameterMap이 사라진것.. 그리고 &amp;lt;procedure &amp;gt; 가 사라지고 type 으로 판단하게 된것이다.&lt;/FONT&gt; &lt;br /&gt;
&lt;br /&gt;parameterMap이 사라지고 MyBatis에서는 inlineStatement를 사용하라고 이야기 하고있다.&amp;nbsp; 이것은 #{var}안에 직접 파라미터를 넣어서 사용하는 방법이다. 이방법에 따라서 이전 소스를 myBatis 버전으로 컨버팅 해보자. &lt;br /&gt;
&lt;br /&gt;
&lt;DIV&gt;
&lt;HR style=&quot;BORDER-BOTTOM: black 0px; BORDER-LEFT: black 0px; DISPLAY: block; HEIGHT: 1px; BORDER-TOP: black 1px dotted; BORDER-RIGHT: black 0px&quot;&gt;
&lt;/DIV&gt;&lt;br /&gt;
&lt;STRONG&gt;iBatis 소스&lt;br /&gt;
&lt;/STRONG&gt;&lt;PRE class=brush:xml&gt;&lt;PARAMETERMAP id=blParam class=map&gt;
	&lt;PARAMETER property=&quot;p_latitude&quot; jdbcType=&quot;VARCHAR&quot; javaType=&quot;java.lang.String&quot; mode=&quot;IN&quot; /&gt;
	&lt;PARAMETER property=&quot;p_longitude&quot; jdbcType=&quot;VARCHAR&quot; javaType=&quot;java.lang.String&quot; mode=&quot;IN&quot; /&gt;
	&lt;PARAMETER property=&quot;p_utmx&quot; jdbcType=&quot;DECIMAL&quot; javaType=&quot;long&quot; mode=&quot;OUT&quot; /&gt;
	&lt;PARAMETER property=&quot;p_utmy&quot; jdbcType=&quot;DECIMAL&quot; javaType=&quot;long&quot; mode=&quot;OUT&quot; /&gt;
&lt;/PARAMETERMAP&gt;
		
&lt;PROCEDURE id=bl_to_utm parameterMap=&quot;blParam&quot;&gt;
	{call PROC_BL_TO_UTM(?,?,?,?)}
&lt;/PROCEDURE&gt;&lt;/PRE&gt;&lt;br /&gt;
&lt;br /&gt;&amp;lt;procedure &amp;gt; 태그를 사용해서 프로시저를 정의 하고 들어오는 변수는 parameterMap에 정의해놓았다. &lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;java 소스&lt;br /&gt;
&lt;/STRONG&gt;&lt;PRE class=brush:as3&gt;Map&lt;STRING, Object&gt; map = new HashMap&lt;STRING,OBJECT&gt;();
map.put(&quot;p_latitude&quot;,vo.getX_latitude());
map.put(&quot;p_longitude&quot;, vo.getX_longitude());
sqlMapper.update(&quot;VocIphone.bl_to_utm&quot;, map );
					
System.out.println(map.get(&quot;p_utmx&quot;).toString());
System.out.println(map.get(&quot;p_utmy&quot;).toString());&lt;/PRE&gt;&lt;br /&gt;
&lt;br /&gt;자바쪽에서는 map에 IN 타입 변수를 담아서 쿼리를 실행시키고 map의 OUT 타입 변수에 엑세스 해서 값을 가져온다. &lt;br /&gt;
&lt;br /&gt;
&lt;DIV&gt;
&lt;HR style=&quot;BORDER-BOTTOM: black 0px; BORDER-LEFT: black 0px; DISPLAY: block; HEIGHT: 1px; BORDER-TOP: black 1px dotted; BORDER-RIGHT: black 0px&quot;&gt;
&lt;/DIV&gt;&lt;br /&gt;
&lt;STRONG&gt;MyBatis 소스&lt;br /&gt;
&lt;/STRONG&gt;&lt;PRE class=brush:xml&gt;&lt;UPDATE id=testProc statementType=&quot;CALLABLE&quot; parameterType=&quot;vo.ProcVO&quot;&gt;
	{call PROC_BL_TO_UTM(#{latitude,mode=IN,jdbcType=VARCHAR},#{longitude,mode=IN,jdbcType=VARCHAR},#{utmx,mode=OUT,jdbcType=DECIMAL},#{utmy,mode=OUT,jdbcType=DECIMAL})}
&lt;/UPDATE&gt;&lt;/PRE&gt;&lt;br /&gt;
&lt;br /&gt;&lt;FONT color=#e31600&gt;statementType을 &quot;CALLABLE&quot;로 설정해주면 procedure를 호출하게 된다.&lt;/FONT&gt;&amp;nbsp; parameterType 에는 클래스 파일을 지정해주고 직접 파라미터 부분에 들어올 타입에 대한 세팅을 하게 된다. &lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;vo.ProcVO.java&lt;br /&gt;
&lt;/STRONG&gt;&lt;PRE class=brush:as3&gt;public class ProcVO {
	
	private String latitude = &quot;&quot;;
	private String longitude = &quot;&quot;;
	private String utmx = &quot;&quot;;
	private String utmy = &quot;&quot;;
	... 이하 getter/setter&lt;/PRE&gt;&lt;br /&gt;
&lt;br /&gt;이건 그냥 데이터를 옮기기위한 빈즈 파일&lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;실제호출 java&lt;br /&gt;
&lt;/STRONG&gt;&lt;PRE class=brush:as3&gt;ProcVO proc = new ProcVO();
proc.setLatitude(&quot;37.539421&quot;);
proc.setLongitude(&quot;127.047852&quot;);

session.update(&quot;myBatis.mappers.UserMapper.testProc&quot;, proc);

System.out.println(&quot;utmx : &quot;+proc.getUtmx()+&quot; utmy : &quot;+proc.getUtmy());&lt;/PRE&gt;&lt;br /&gt;
&lt;br /&gt;자바쪽에서는 기존처럼 넘겨주면 된다. map 대신 클래스파일에 데이터를 담아주기만 하면 된다. &lt;br /&gt;
결과 코드 역시 자바클래스에서 getter로 받아오면 완료. &lt;br /&gt;
&lt;br /&gt;parameterMap으로 되어있는 기존의 소스들이 많다면 일일이 클래스를 만들어줘야 하기에 마이그레이션에 애로사항이 좀 있을수 있겠지만. 어차피 관리 측면에서도 빈파일로 관리하는쪽이 좋기 때문에. 이번기회에 싹 정리 하는것이 미래를 위해서는 좀더 낫지 않을까 싶다. &lt;br /&gt;
&lt;br /&gt;이전에 iBatis 에서 테스트 할때 자바빈파일로 파라미터를 매핑하는경우.. 프로시저가 정상적인 호출이 안되서 map으로 작업했던 거였는데.. iBatis가 원래 그런건지;; 내가 잘못했던 것인지 모르겠다...&lt;br /&gt;
정확한 답을 아시는분이 있다면 코멘트로~~~&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-51-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-51-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-51-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=11120853&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Frinn.kr/51&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>Java &amp; iBatis</category>
			<category>inline parameterMap</category>
			<category>mybatis</category>
			<category>myBatis procedure</category>
			<category>ParameterMap</category>
			<category>마이바티스에서 프로시저호출</category>
			<author>퍼플린</author>
			<guid>http://rinn.kr/51</guid>
			<comments>http://rinn.kr/51#entry51comment</comments>
			<pubDate>Mon, 08 Nov 2010 14:10:50 +0900</pubDate>
		</item>
		<item>
			<title>MyBatis 기본 환경 설정 예제</title>
			<link>http://rinn.kr/50</link>
			<description>&lt;br /&gt;
저번 포스팅에서 iBatis 에서 myBatis로 넘어오면서 바뀐점들에 대해 적었었다. &lt;br /&gt;
&lt;A href=&quot;http://rinn.kr/49&quot; target=_blank&gt;2010/11/05 - [Java &amp;amp; iBatis] - iBatis에서 myBatis로 개요 및 변경점&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;이 포스트에서는 이전에 바뀐 것들을 바탕으로 기본 환경 설정을 확인 해본다. &lt;br /&gt;
&lt;br /&gt;프로젝트 환경 설정은 그림과 같다. &lt;br /&gt;
&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/197031034CD952330E035B&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/197031034CD952330E035B&quot; alt=&quot;&quot; filemime=&quot;image/gif&quot; filename=&quot;project.gif&quot; height=&quot;178&quot; width=&quot;219&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;플렉스쪽이&amp;nbsp;더 있기는 하지만 그건 여기서는 중요한건 아니므로 패스 하고. Java, MyBatis 만 확인 해보자.&lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;&lt;FONT color=#5c7fb0&gt;Configration.xml&lt;br /&gt;
&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;
&lt;PRE class=brush:xml&gt;&lt;CONFIGURATION&gt;

	&lt;TYPEALIASES&gt;
		&lt;TYPEALIAS type=&quot;vo.UserVO&quot; alias=&quot;User&quot; /&gt;
	&lt;/TYPEALIASES&gt;
	
	&lt;ENVIRONMENTS default=&quot;development&quot;&gt;
		&lt;ENVIRONMENT id=development&gt;
		&lt;TRANSACTIONMANAGER type=&quot;JDBC&quot; /&gt;
		&lt;DATASOURCE type=&quot;POOLED&quot;&gt;
			&lt;property value=&quot;oracle.jdbc.driver.OracleDriver&quot; name=&quot;driver&quot;&gt;&lt;/property&gt;
			&lt;property value=&quot;db_url&quot; name=&quot;url&quot;&gt;&lt;/property&gt;
			&lt;property value=&quot;user&quot; name=&quot;username&quot;&gt;&lt;/property&gt;
			&lt;property value=&quot;passwd&quot; name=&quot;password&quot;&gt;&lt;/property&gt;
		&lt;/DATASOURCE&gt;
		&lt;/ENVIRONMENT&gt;
	&lt;/ENVIRONMENTS&gt;
	
	&lt;MAPPERS&gt;
		&lt;MAPPER resource=&quot;myBatis/mappers/UserMapper.xml&quot; /&gt;
	&lt;/MAPPERS&gt;
	
&lt;/CONFIGURATION&gt;&lt;/PRE&gt;&lt;br /&gt;
&lt;br /&gt;빈즈(여기서는 플렉스와 맞추기위해서 VO로 작업했다)의 typeAlias 가 먼저 나오고 환경설정 그다음에 mapper가 나온다.&amp;nbsp;&lt;FONT color=#e31600&gt;&lt;U&gt; 이 순서대로 넣지 않고 typeAlias를 environments 다음에 넣거나 하면 에러가 발생한다.&lt;/U&gt;&lt;/FONT&gt; &lt;br /&gt;
에러내용에 보면 순서 정의가 되어있고 그 순서에 맞춰서 넣어야 한다고 되어있다. &lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #c1c1c1 1px dashed; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-TOP: 10px&quot; class=txc-textbox&gt;Description&amp;nbsp;Resource&amp;nbsp;Path&amp;nbsp;Location&amp;nbsp;Type&lt;br /&gt;
The content of element type &quot;configuration&quot; must match &lt;FONT color=#e31600&gt;&quot;(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,mappers?)&quot;.&amp;nbsp;&lt;/FONT&gt;Configuration.xml&amp;nbsp;taskManager/WebContent/WEB-INF/classes/myBatis&amp;nbsp;line 6&amp;nbsp;XML Problem&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
properties 에서 시작해서 mapper 까지 순서가 정해져 있는데 xml을 위에서 부터 읽어서 뒤에정의된 내용은 덮어 쓰게 되므로 설정파일에서는 미리정의 해놓은것 같다. (이전포스트에서 속성을 덮어쓰는 순서에 대해서 이야기 한적이 있다)&lt;br /&gt;
&lt;br /&gt;&lt;FONT color=#5c7fb0&gt;&lt;STRONG&gt;MyBatisManager.java&lt;br /&gt;
&lt;/STRONG&gt;&lt;/FONT&gt;&lt;br /&gt;
&lt;PRE class=brush:as3&gt;public class MyBatisManager {
	
	public static SqlSessionFactory sqlMapper = null;
	
	public static SqlSessionFactory getInstance(){
		if(sqlMapper == null) {
			try {
				String resource = &quot;myBatis/Configuration.xml&quot;;
				Reader reader = Resources.getResourceAsReader(resource);
				sqlMapper = new SqlSessionFactoryBuilder().build(reader);
				reader.close();
				
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return sqlMapper;
	}
}&lt;/PRE&gt;&lt;br /&gt;
&lt;br /&gt;SqlSessionFactory는 어플리케이션과 같은 라이프사이클을 가지게 되므로 싱글톤으로 간단하게 구현해놓는다. &lt;br /&gt;
이후에 getInstance()를 호출해서 클래스의 참조를 받아오게 된다. &lt;br /&gt;
매니저로 구현하지 않고 그냥&amp;nbsp;java 파일의 상단에서 생성시켜도 별 상관은없다. &lt;br /&gt;
&lt;br /&gt;&lt;FONT color=#5c7fb0&gt;&lt;STRONG&gt;UserDao.java&lt;br /&gt;
&lt;/STRONG&gt;&lt;/FONT&gt;&lt;br /&gt;
&lt;PRE class=brush:as3&gt;public class UserDao {
	
	public static SqlSessionFactory sqlMapper = MyBatisManager.getInstance();
	
	public List&lt;USERVO&gt; getUserList() {
		
		List&lt;USERVO&gt; list = new ArrayList&lt;USERVO&gt;();
		
		SqlSession session = sqlMapper.openSession();
		try {
			list = session.selectList(&quot;myBatis.mappers.UserMapper.getUserList&quot;);
			
		} catch (Exception e){
			e.printStackTrace();
		} finally {
			session.close();
		}
		
		return list;
	}
}&lt;/PRE&gt;&lt;br /&gt;
&lt;br /&gt;상단에서 SqlSessionFactory 객체를 가져오고 SqlSession을 오픈하고 mapper의 네임스페이스를 호출해서 쿼리를 실행시킨다. &lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;&lt;FONT color=#5c7fb0&gt;UserMapper.xml&lt;br /&gt;
&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;
&lt;PRE class=brush:xml&gt;&lt;MAPPER namespace=&quot;myBatis.mapper.UserMapper&quot;&gt;
	
	&lt;SELECT id=getUserList resultType=&quot;User&quot;&gt; SELECT userID, name, phone, email, TO_CHAR(regdate,&#039;YYYY-MM-DD HH24:MI&#039;) regdate, isuse, auth FROM TR_USER ORDER BY REGDATE DESC&lt;/SELECT&gt;
	
&lt;/MAPPER&gt;&lt;/PRE&gt;&lt;br /&gt;
&lt;br /&gt;nameSpace가 풀 경로인것을 확인한다.&amp;nbsp; resultType에는 Configure.xml 에서 typeAlias에서 지정해놓은 shortName 으로 설정한다. 네임스페이스와 실행시킬 쿼리아이디를 합해서 UserDao.java에서 호출하게 된다.&lt;br /&gt;
&lt;br /&gt;&lt;U&gt;순서를 살펴 보면.. &lt;br /&gt;
&lt;br /&gt;&lt;/U&gt;UserDao가 실행되면서 MyBatisManager 에서 Configure.xml 파일의 설정을 참조해서&amp;nbsp;SqlSessionFactory를 생성하고 Factory에서 session을 열고 UserMapper의 쿼리를 실행시킨다.&lt;br /&gt;
&lt;br /&gt;플렉스에서 받아들이는쪽은 기존의 iBatis 설정과 같으니 패스 하기로 하고 마무리~&lt;br /&gt;
첨부된 소스는 위에서 설명된 파일들이다. &lt;br /&gt;
&lt;br /&gt;&lt;PRE&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://rinn.tistory.com/attachment/cfile10.uf@166D26034CD9525114B7E8.zip&quot;&gt;&lt;img src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; src.zip&lt;/a&gt;&lt;/div&gt;&lt;/PRE&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-50-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-50-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-50-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=11120823&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Frinn.kr/50&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>Java &amp; iBatis</category>
			<category>mybatis</category>
			<category>myBatis 시작하기</category>
			<category>myBatis 예제</category>
			<category>환경설정</category>
			<author>퍼플린</author>
			<guid>http://rinn.kr/50</guid>
			<comments>http://rinn.kr/50#entry50comment</comments>
			<pubDate>Mon, 08 Nov 2010 12:50:06 +0900</pubDate>
		</item>
		<item>
			<title>iBatis에서 myBatis로 개요 및 변경점</title>
			<link>http://rinn.kr/49</link>
			<description>&lt;DIV style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/200B7C244CD409B71C6436&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/200B7C244CD409B71C6436&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;mybatis.jpg&quot; height=&quot;314&quot; width=&quot;620&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;A href=&quot;http://mybatis.org/&quot;&gt;http://mybatis.org&lt;/A&gt;&lt;br /&gt;
&lt;/DIV&gt;
&lt;DIV&gt;&lt;br /&gt;
원래 마이그레이션 포스팅부터 다룰려고 했으나.. 이게 공식위키에서는 엄청 쉽게 이야기 한것과 달리 그냥 라이브러리 교체 정도로 끝나는게 아니라서 일단 바뀐 용어와 개요부터 정리를 좀 해야 할 필요성을 느꼈다. &lt;br /&gt;
&lt;br /&gt;myBatis로 바뀌면서 기본 용어들이 조금씩 차이가 나기 때문에.. 주의가 필요하다. &lt;br /&gt;
&lt;br /&gt;기존 SqlMapConfig은 Configration로 변경되었고 sqlMap은 mapper로 변경되었다. 다른 용어들이 변경된 상황이나.. 내부적으로 사용하는 것들(ex. isEqual 을 아에 if 로 바꾼거라던지)을 보면 좀더 범용적으로 알아보기 쉽게 바꿔가는 것을 목표로 가고있는 듯 하다. &lt;br /&gt;
익숙해지면 아무래도 코드 읽기도 만들기도 쉬울것으로 보인다. &lt;br /&gt;
&lt;br /&gt;큰 변화중 하나는 &lt;FONT color=#801fbf&gt;자바 애노테이션을 사용해서 xml을 사용하지 않고 모든것을 자바로만 할수 있게 되었다&lt;/FONT&gt;. &lt;br /&gt;
물론 Configration.xml 도 자바에서 직접 DataSource, &amp;nbsp;Environment 등을 선언해서 클래스화 시킬수 있다. xml 스트링으로 설정값등을 저장해야 한다는 것에 부담을 느꼈다면 좋은 변화라고 할수 있겠다.&lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #c1c1c1 1px dashed; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-TOP: 10px&quot; class=txc-textbox&gt;주의할점은 xml로 Configure를 만들고 환경변수와 property를 클래스로도 만들었다면.. 클래스쪽이 나중에 읽어지게 되서 xml로 되어있는 세팅이 자바 클래스에서 선언해놓은것으로 덮어써지게 된다. 혼란을 줄수 있으니 한가지 방법만으로 프로젝트를 구성하는것이 좋을것이다. &lt;br /&gt;
&lt;br /&gt;그리고 Configuration configuration = new Con.... 형식으로 선언을 하고 나서는 mapper도 xml이 아니고 configuration.addMapper(UserMapper.class) 형식으로 추가 해야 하기 때문에 어느쪽으로 할것인지 확실하게 결정을 하고 나서 진행해야 한다.&lt;br /&gt;
&lt;/DIV&gt;&lt;FONT color=#193da9&gt;&lt;br /&gt;
네임스페이스&lt;/FONT&gt; 방식도 변경되었는데.. sqlMap 파일별로 줄여놓은 이름을 사용했다면 이제 풀경로로 사용하게 된다. 공식 설명서에서는 혼란을 줄이고 어떤것이 호출되는지 정확하게 알수 있으니 좋다라고 해놨지만 아무래도 길어지니 쓰기에 불편하기는 하다.. &lt;br /&gt;
기존에 &amp;lt;sqlMap namespace=&quot;User&quot;&amp;gt; 이렇게 쓰던것을 &lt;br /&gt;
&amp;lt;mapper namespace=&quot;myBatis.mapper.UserMapper&quot;&amp;gt; 이렇게 풀 경로로 쓰게 된다.&lt;br /&gt;
&lt;br /&gt;실제 자바쪽에서 호출할때도 &lt;br /&gt;
&lt;PRE class=brush:as3&gt;list = session.selectList(&quot;myBatis.mappers.UserMapper.getUserList&quot;);&lt;/PRE&gt;&lt;br /&gt;
이렇게 길게 호출 하게 되는데.. 그냥 string 이라서 입력이 여간 불편하다.&lt;br /&gt;
&lt;br /&gt;이런 경우에 위에서 이야기한 자바 애노테이션 (@Select)을 사용해서 mapper 파일을 xml이 아니고 자바로 만들어놓으면 코드힌트까지 사용해서 편하게 쓸수있다. &lt;PRE class=brush:as3&gt;UserMapper mapper = session.getMapper(UserMapper.class);
list = mapper.selectUserList();&lt;/PRE&gt;&lt;br /&gt;
권장사항은 xml 이라고 되어있었던거 같은데.. 편하기는 자바쪽이 편한 구조랄까..;;&lt;br /&gt;
&lt;br /&gt;
&lt;DIV&gt;
&lt;HR style=&quot;BORDER-BOTTOM: black 0px; BORDER-LEFT: black 0px; DISPLAY: block; HEIGHT: 1px; BORDER-TOP: black 1px dotted; BORDER-RIGHT: black 0px&quot;&gt;
&lt;/DIV&gt;&lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;&lt;FONT color=#5c7fb0&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;FONT-FAMILY: Dotum&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt&quot;&gt;기본 용어&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;br /&gt;
&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;
&lt;STRONG&gt;SqlSessionFactory&lt;/STRONG&gt; :&amp;nbsp; SqlMapClient가 SqlSessionFactory로 변경되었다. 어플리케이션과 같은 라이프사이클을 가지게 된다. 한번만 생성되면 되므로 Manager 클래스에서 싱글톤으로 구현하면 된다.&lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;SqlSessionFactoryBuilder&lt;/STRONG&gt; : 환경 값(디비 및 트랜잭션 설정등..)을 읽어와서 SqlSessionFactory 인스턴스를 만들어준다. 기존의 SqlMapClientBuilder 대신 사용된다.&lt;br /&gt;
&lt;br /&gt;&lt;PRE class=brush:as3&gt;String resource = &quot;org/mybatis/example/Configuration.xml&quot;;
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);&lt;/PRE&gt;&lt;br /&gt;
&lt;STRONG&gt;SqlSession&lt;/STRONG&gt; :&amp;nbsp;SqlSessionFactory 에서 세션을 하나씩 열어서 개별 쓰레드 별로 사용한다. 세션을 열고나서 실제 쿼리를 수행하게 된다. 하나의 리퀘스트에 하나의 세션을 가지게 되고 사용후에는 꼭 닫아줘야 한다. &lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;mapper&lt;/STRONG&gt; : 기존의 sqlMap이 변경된 것이다. 실제 쿼리들이 들어있게 되고 위의 SqlSession을 열어야 호출할 수 있다. method scope를 가지게 되고 해당 메서드가 사용되고나면 사라진다. 별도로 닫거나 할 필요는 없고 SqlSession이 함께 관리 한다. &lt;br /&gt;
&lt;PRE class=brush:as3&gt;SqlSession session = sqlSessionFactory.openSession();
try {
    UserMapper mapper = session.getMapper(UserMapper.class);
    // do work
} finally {
    session.close();
}&lt;/PRE&gt;
&lt;DIV&gt;
&lt;HR style=&quot;BORDER-BOTTOM: black 0px; BORDER-LEFT: black 0px; DISPLAY: block; HEIGHT: 1px; BORDER-TOP: black 1px dotted; BORDER-RIGHT: black 0px&quot;&gt;
&lt;br /&gt;
&lt;FONT color=#5c7fb0&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 11pt&quot;&gt;변경되거나 추가된&amp;nbsp;속성들&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/STRONG&gt;&lt;/FONT&gt;기존에 조건에 따라 변하는 쿼리를 만들기 위해서 사용되던 태그들이 변경되었다. 조금더 직관적으로 바뀌었고 해당상황(Update, Select)등에 맞춰서 사용할 수 있는 태그들도 추가되었다. &lt;br /&gt;
&lt;br /&gt;parameterMap은 더이상 사용하지 않게 되었다. parameterMap과 parameterClass 대신 &lt;FONT color=#e31600&gt;&lt;STRONG&gt;parameterType&lt;/STRONG&gt;&lt;/FONT&gt; 하나로 사용한다.&lt;br /&gt;
resultMap은 여전히 남아있지만 resultClass 는 &lt;FONT color=#e31600&gt;&lt;STRONG&gt;resultType&lt;/STRONG&gt;&lt;/FONT&gt; 으로 변경되었다.&lt;br /&gt;
parameterType과 resultType에는 기본형(int, byte, .... )부터 클래스 명까지 기존처럼 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;기존에 procedure를 호출하기 위해 사용하던 &amp;lt;procedure&amp;gt;가 사라지고 &lt;FONT color=#e31600&gt;&lt;STRONG&gt;statementType&lt;/STRONG&gt;&lt;/FONT&gt; 속성이 생겼다. PREPARED, STATEMENT, CALLABLE 중에 하나를 선택할 수 있고 기본값은 PREPARED이다. &lt;br /&gt;
&lt;br /&gt;파라미터를 매핑하기위해서 사용하던 #var# 형태는 &lt;STRONG&gt;&lt;FONT color=#e31600&gt;#{var}&lt;/FONT&gt;&lt;/STRONG&gt; 로 바뀌었다. $var$ 역시 &lt;FONT color=#e31600&gt;&lt;STRONG&gt;${var}&lt;/STRONG&gt;&lt;/FONT&gt; 형태로 사용하면 된다.&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;/DIV&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #f3c534 1px dashed; BORDER-LEFT: #f3c534 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #fefeb8; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #f3c534 1px dashed; BORDER-RIGHT: #f3c534 1px dashed; PADDING-TOP: 10px&quot; class=txc-textbox&gt;참고)&amp;nbsp;#{var}와 ${var}의&amp;nbsp;차이는 prepredStatement의 파라미터로 사용할 것인가.. 그냥 String 값으로 때려박을것인가 하는 것이다. order by 같은 경우에 사용하기 위해서는 &lt;U&gt;order by ${orderParam}&lt;/U&gt; 처럼 사용해야 한다. 이 방법을 사용하는 경우 myBatis가 자체적으로 쿼리의 적합성여부를 판단할 수 없기 때문에&amp;nbsp;사용자의 입력값을 그대로 사용하는 것보다는 개발자가 미리 정해놓은 값등으로 변경하도록 해서 정확한값이 들어올수 있도록 해야 한다. &lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
&lt;br /&gt;sqlMap쪽에서 사용하던 typeAlias가 sqlMap이 바뀐 mapper 에서 사용되지 않고 Configration 파일에서 정의하도록 변경되었다. &lt;br /&gt;
&lt;br /&gt;&amp;lt;typeAliases&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;typeAlias type=&quot;vo.UserVO&quot; alias=&quot;User&quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/typeAliases&amp;gt;&lt;br /&gt;
&lt;br /&gt;Configration 파일에 위의 형식처럼 Aliase를 정의하면 전체 mapper 에서 사용할 수 있다. &lt;br /&gt;
&lt;br /&gt;
&lt;DIV&gt;
&lt;HR style=&quot;BORDER-BOTTOM: black 0px; BORDER-LEFT: black 0px; DISPLAY: block; HEIGHT: 1px; BORDER-TOP: black 1px dotted; BORDER-RIGHT: black 0px&quot;&gt;
&lt;/DIV&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;STRONG&gt;&lt;FONT color=#5c7fb0&gt;Dynamic Statement의 변화&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;&amp;lt;isEqual&amp;gt; , &amp;lt;isNull&amp;gt; 등의 구문이 &lt;STRONG&gt;&lt;FONT color=#c84205&gt;&amp;lt;if&amp;gt;&lt;/FONT&gt;&lt;/STRONG&gt;로 통합되었다. 이전보다는 확실히 직관적으로 쓸수 있을듯 하다. &lt;br /&gt;
&lt;FONT color=#801fbf&gt;&amp;lt;if test=&quot;userID != null&quot;&amp;gt;&lt;/FONT&gt; 형태로 간단하게 사용할 수 있다. (스트럿츠2에서 사용하는 형태 처럼 보이는데..;;)&lt;br /&gt;
&lt;br /&gt;&amp;lt;dynamic &amp;gt; 형태로 해서 where 조건절이나 and , or 를 동적으로 만들던것이 &amp;lt;where&amp;gt;나 update에서 사용할 수 있는&amp;nbsp;&amp;lt;set&amp;gt; 등으로 변경되었다. &lt;br /&gt;
&lt;br /&gt;&amp;lt;select id=&quot;getUserList&quot; resultType=&quot;User&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT * FROM TR_USER&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;where&amp;gt;&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;lt;if test=&quot;isAdmin != null&quot;&amp;gt;&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; authLevel = &#039;1&#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;lt;/if&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/where&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&lt;br /&gt;
&lt;br /&gt;trim, foreach 태그가 새로 추가 되었다. &lt;br /&gt;
trim은 쿼리를 동적생성할때에 쿼리를 연결하기 위해서 컴마(,)를 사용한경우 마지막항목이 조건을 만족하지 못해서 생성된 쿼리 끝에 컴마가 붙어있다던가 하는 경우에 잘라낼 수 있다. &lt;br /&gt;
foreach는 반복적인 항목을 동적으로 넣을때 사용할 수 있다. ( ex. where 조건절에서 in 을 사용하는 경우)&lt;br /&gt;
&lt;br /&gt;공식홈페이지의 위키에 기존 iBatis를 myBatis로 바꿀때 확인해야 할 부분들이 있으니 꼭 참고 하자.&lt;br /&gt;
&lt;A href=&quot;http://code.google.com/p/mybatis/wiki/DocUpgrade3&quot;&gt;http://code.google.com/p/mybatis/wiki/DocUpgrade3&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;ps.&lt;br /&gt;
지금 있는것도 못하고 있는데 항상 새로운 버전이 쏟아지니 미칠꺼같다 -ㅅ-;;&lt;br /&gt;
Flex4도 정식으로 손대보지 못했는데 5 소식이라니.. ㅠㅠ&lt;/DIV&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-49-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-49-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-49-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=11019696&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Frinn.kr/49&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>Java &amp; iBatis</category>
			<category>iBATIS</category>
			<category>iBatis to myBatis</category>
			<category>mybatis</category>
			<category>myBatis 설정</category>
			<author>퍼플린</author>
			<guid>http://rinn.kr/49</guid>
			<comments>http://rinn.kr/49#entry49comment</comments>
			<pubDate>Fri, 05 Nov 2010 11:05:23 +0900</pubDate>
		</item>
		<item>
			<title>모든걸 보여주마.. Log4SQL  PreparedStatement 로그 확인하기</title>
			<link>http://rinn.kr/47</link>
			<description>&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/original/183008374CD157DC03FC8E&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile8.uf.tistory.com/image/183008374CD157DC03FC8E&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;log4sql.jpg&quot; height=&quot;98&quot; width=&quot;445&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;보통 자바환경에서 iBatis를 사용중이라면 log4j를 기본 로거로 많이 사용하게 되는데.. &lt;br /&gt;
단순 자바 어플 만들면서 이것저것 추가하고 하는게 귀찮다면.. &lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;FONT-FAMILY: Trebuchet MS&quot;&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt&quot;&gt;log4sql&lt;/SPAN&gt;&lt;/SPAN&gt; 을 사용해보자. &lt;br /&gt;
&lt;br /&gt;간단하지만 성능은 완벽!&lt;br /&gt;
&lt;br /&gt;PreparedStatement 에 파라미터가 어떻게 들어가서 실행되는지 확인 해보는 것에는 이것만큼 좋은게 없는것 같다.. trace 에서 출력되는 쿼리를 바로 실행할수 있고 어떤것이 파라미터이고 어떤것이 statement인지 구별할수 있는 구분자도 포함되어있다. &lt;br /&gt;
&lt;br /&gt;&lt;A title=&quot;[http://sourceforge.net/projects/log4sql/files/]로 이동합니다.&quot; href=&quot;http://sourceforge.net/projects/log4sql/files/&quot; target=_blank&gt;일단 다운로드&lt;/A&gt;&lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;사용법&lt;/SPAN&gt;&lt;br /&gt;
&lt;/STRONG&gt;&lt;br /&gt;
다운로드 받은 파일의 압축을 풀면 log4sql.jar 파일이 있다.. 로그확인이 필요한 프로젝트의 라이브러리에 등록한후에 드라이버 경로를 바꿔준다. &lt;br /&gt;
&lt;br /&gt;자바 내부에서 정의 했다면 &lt;FONT color=#801fbf&gt;String oracleDriver = &quot;oracle.jdbc.driver.OracleDriver&quot;; &lt;/FONT&gt;형식으로 되어있을꺼고 &lt;br /&gt;
iBatis를 사용한다면 &amp;lt;property name=&quot;JDBC.Driver&quot; value=&quot;oracle.jdbc.driver.OracleDriver&quot;/&amp;gt; 이런식으로 컨피그 xml에 정의되어있을것이다. &lt;br /&gt;
&lt;br /&gt;이 경로를 &lt;STRONG&gt;&lt;FONT color=#0000ff size=2&gt;&#039;core.log.jdbc.driver.OracleDriver&#039; &lt;/FONT&gt;&lt;/STRONG&gt;이렇게만 바꿔주면 끝.. &lt;br /&gt;
&lt;br /&gt;별도의 설정을 할 수 있게 압축 파일 내부에 log4sql_conf.jsp 파일이 있어서 웹프로젝트일때는&amp;nbsp;동적으로 설정을 바꿀수 있도록 제공하지만 로그만 보기 위해서는 드라이버만 바꿔주면.. 쿼리 관련 로그들이 전부 출력된다. &lt;br /&gt;
&lt;br /&gt;세부 설정에서 내가 개발중인 패키지만 등록해서 해당 패키지에서 나오는 로그만 출력되도록 설정할수도 있고. SQL의 순수 실행시간만을 계산해주기 때문에 쿼리 자체의 퍼포먼스 테스트에도 유용하다. &lt;br /&gt;
&lt;br /&gt;MSSQL, Oracle, Cubrid, PostgreSql, Infomix 등등.. 현존하는 거의 모든 디비를 지원하고.. 비동기 모드도 지원한다..&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;참고]&amp;nbsp; &lt;A href=&quot;http://log4sql.sourceforge.net/index_kr.html&quot;&gt;http://log4sql.sourceforge.net/index_kr.html&lt;/A&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-47-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-47-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-47-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=10908779&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Frinn.kr/47&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>Java &amp; iBatis</category>
			<category>java log</category>
			<category>preparedstatement log</category>
			<category>query log</category>
			<category>로그확인</category>
			<author>퍼플린</author>
			<guid>http://rinn.kr/47</guid>
			<comments>http://rinn.kr/47#entry47comment</comments>
			<pubDate>Tue, 02 Nov 2010 16:01:38 +0900</pubDate>
		</item>
		<item>
			<title>Java / iBatis에서 프로시저 호출하기</title>
			<link>http://rinn.kr/46</link>
			<description>&lt;br /&gt;

&lt;DIV style=&quot;BORDER-BOTTOM: #cbcbcb 1px dashed; BORDER-LEFT: #cbcbcb 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #ffffff; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #cbcbcb 1px dashed; BORDER-RIGHT: #cbcbcb 1px dashed; PADDING-TOP: 10px&quot; class=txc-textbox&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/original/150B01374CD1580A4912C3&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/150B01374CD1580A4912C3&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;mybatis.jpg&quot; height=&quot;73&quot; width=&quot;277&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
아이바티스가 3으로 버전업 되면서 구글그룹으로 합류하고 이름이 myBatis로 변경되었다. &lt;br /&gt;
공식 홈페이지도 &lt;A href=&quot;http://www.mybatis.org/&quot;&gt;http://www.mybatis.org/&lt;/A&gt; 로 변경되었고.. 2010년 8 월에 3.02 버전이 나왔다.&lt;br /&gt;
이전에 DTD가 &lt;A href=&quot;http://www.ibatis.com/&quot;&gt;http://www.ibatis.com&lt;/A&gt; 으로 되어있어서 에러가 난다면.. &lt;A href=&quot;http://apache.ibatis.com/&quot;&gt;http://apache.ibatis.com&lt;/A&gt; 으로 변경하면 된다고 한다.&lt;br /&gt;
&lt;br /&gt;기존 버전사용자의 마이그레이션은 간단하다고 하는데.. 기존에 운영하던 프로젝트를 버전업 해보고나서 포스팅 예정이다.&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
&lt;br /&gt;iBatis를 사용해서 프로시저를 호출하는 것은 다른 statement(select, update.. )를 호출하는 것처럼 간단하다.. &lt;br /&gt;
문제는 파라미터의 세팅이다. 호출이야 &amp;lt;procedure&amp;gt; 태그만 적어주면 되는데 파라미터가 꽤나 귀찮게 하는 경우가 생긴다. &lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;1. 자바에서 호출하는 경우&lt;/SPAN&gt;&lt;br /&gt;
&lt;/STRONG&gt;&lt;br /&gt;
자바에서 호출하는 경우는 CallableStatement 를 사용하게 된다.&lt;br /&gt;
&lt;br /&gt;&lt;PRE class=brush:as3&gt;CallableStatement cstmt = conn.prepareCall(&quot;{call PROC_BL_TO_UTM(?,?,?,?)}&quot;);
cstmt.setString(1, &quot;37.465687&quot;);
cstmt.setString(2, &quot;127.249481&quot;);
cstmt.registerOutParameter(3, OracleTypes.FLOAT);
cstmt.registerOutParameter(4, OracleTypes.FLOAT);
cstmt.execute();
uTmx = cstmt.getFloat(3);
uTmy = cstmt.getFloat(4);&lt;/PRE&gt;&lt;br /&gt;
in 파라미터와 out 파라미터를 구분해서 넘겨주고 execute 시키면 가뿐하게 넘어온다. &lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;2. iBatis에서 프로시저 호출하기&lt;/SPAN&gt;&lt;br /&gt;
&lt;/STRONG&gt;&lt;br /&gt;
&lt;FONT color=#3058d2&gt;SqlMap 설정&lt;br /&gt;
&lt;/FONT&gt;&lt;br /&gt;

&lt;DIV style=&quot;BORDER-BOTTOM: #c1c1c1 1px dashed; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-TOP: 10px&quot; class=txc-textbox&gt;&amp;lt;parameterMap class=&quot;map&quot; id=&quot;blParam&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;parameter property=&quot;p_latitude&quot; jdbcType=&quot;VARCHAR&quot; javaType=&quot;java.lang.String&quot; mode=&quot;IN&quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;parameter property=&quot;p_longitude&quot; jdbcType=&quot;VARCHAR&quot; javaType=&quot;java.lang.String&quot; mode=&quot;IN&quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;parameter property=&quot;p_utmx&quot; jdbcType=&quot;DECIMAL&quot; javaType=&quot;long&quot; mode=&quot;OUT&quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;parameter property=&quot;p_utmy&quot; jdbcType=&quot;DECIMAL&quot; javaType=&quot;long&quot; mode=&quot;OUT&quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;/parameterMap&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;lt;procedure id=&quot;bl_to_utm&quot; parameterMap=&quot;blParam&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;![CDATA[&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;{call PROC_BL_TO_UTM(?,?,?,?)}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;]]&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;/procedure&amp;gt;&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
&lt;br /&gt;&lt;FONT color=#3058d2&gt;java 설정&lt;br /&gt;
&lt;/FONT&gt;&lt;br /&gt;
&lt;PRE class=brush:as3&gt;Map&lt;STRING, Object&gt; map = new HashMap&lt;STRING,OBJECT&gt;();
map.put(&quot;p_latitude&quot;,vo.getX_latitude());
map.put(&quot;p_longitude&quot;, vo.getX_longitude());
sqlMapper.update(&quot;VocIphone.bl_to_utm&quot;, map );

String utmx = map.get(&quot;p_utmx&quot;).toString();
String utmy = map.get(&quot;p_utmy&quot;).toString();&lt;/PRE&gt;&lt;br /&gt;
&lt;br /&gt;SqlMap 쪽에서 parameterMap 으로 설정해놓은 형식으로 프로시저에 전달되고 리턴은 데이터를 실어서 날렸던 맵으로 돌아온다.. &lt;br /&gt;
sqlMapper를 실행시킬때 update / queryForObject / queryForList 를 사용할수 있으니 리턴 타입에 맞춰서 사용하면 된다. &lt;br /&gt;
&lt;br /&gt;out을 리스트로 받는 경우 resultMap을 설정해서 List&amp;nbsp;형태로도 받을수 있다. &lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #c1c1c1 1px dashed; BORDER-LEFT: #c1c1c1 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 1px dashed; BORDER-RIGHT: #c1c1c1 1px dashed; PADDING-TOP: 10px&quot; class=txc-textbox&gt;&amp;lt;parameter property=&quot;result&quot; jdbcType=&quot;ORACLECURSOR&quot; javaType=&quot;java.sql.ResultSet&quot; &lt;FONT color=#e31600&gt;resultMap=&quot;resultParam&quot;&lt;/FONT&gt;&amp;nbsp;mode=&quot;OUT&quot;/&amp;gt;&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
resultMap을 설정해주고 resultMap에서 property와 column이름을 설정해주고 class를 미리 만들어놓은 VO객체로 넣어주면 해당항목의 리스트로 프로시저 실행결과가 리턴된다. &lt;br /&gt;
&lt;br /&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 10pt&quot;&gt;3. 주의사항&lt;/SPAN&gt;&lt;br /&gt;
&lt;/STRONG&gt;&lt;br /&gt;
&lt;U&gt;sqlMap에서 프로시저를 호출할때&lt;br /&gt;
&lt;/U&gt;&lt;br /&gt;

&lt;DIV style=&quot;BORDER-BOTTOM: #cbcbcb 1px dashed; BORDER-LEFT: #cbcbcb 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #ffffff; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #cbcbcb 1px dashed; BORDER-RIGHT: #cbcbcb 1px dashed; PADDING-TOP: 10px&quot; class=txc-textbox&gt;&amp;lt;procedure id=&quot;bl_to_utm&quot; parameterMap=&quot;blParam&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call PROC_BL_TO_UTM(?,?,?,?)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;lt;/procedure&amp;gt;&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
위의 코드처럼 중괄호를 적어놓으면 에러가 난다..;; 괜히 보기 편하게 만든다고 했다가 삽질하게 된다. &lt;br /&gt;
&lt;br /&gt;&lt;U&gt;파라미터의 타입&lt;br /&gt;
&lt;/U&gt;&lt;br /&gt;
만약 프로시저의 파라미터가 Number 타입이라면.. OUT 파라미터 정의에서 Number라고 쓰면 에러가 난다.....;;;&lt;br /&gt;
오라클의 경우 프로시저 내부에서 Number를 BigDecimal로 변환해서 사용한다고 한다. 따라서 아래처럼 적으면 에러가 난다. &lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #cbcbcb 1px dashed; BORDER-LEFT: #cbcbcb 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #ffffff; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #cbcbcb 1px dashed; BORDER-RIGHT: #cbcbcb 1px dashed; PADDING-TOP: 10px&quot; class=txc-textbox&gt;&amp;lt;parameter property=&quot;p_utmy&quot; jdbcType=&quot;NUMBER&quot; javaType=&quot;java.util.Number&quot; mode=&quot;OUT&quot;/&amp;gt;&lt;FONT color=#e31600&gt;&lt;STRONG&gt;ERROR&lt;br /&gt;
&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: #9fd331 1px dashed; BORDER-LEFT: #9fd331 1px dashed; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #e7fdb5; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #9fd331 1px dashed; BORDER-RIGHT: #9fd331 1px dashed; PADDING-TOP: 10px&quot; class=txc-textbox&gt;&amp;lt;parameter property=&quot;p_utmy&quot; &lt;FONT color=#e31600&gt;jdbcType=&quot;DECIMAL&quot; javaType=&quot;long&quot;&lt;/FONT&gt; mode=&quot;OUT&quot;/&amp;gt;&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;
이런 형태로 적어줘야 정상적으로 실행된다. 이것때문에 하루를 꼬박 구글링과 삽질로 보냈다.. &lt;br /&gt;
오라클 디비를 내가 만든것도 아니고 이런걸 어떻게 알지..-ㅅ-;; &lt;br /&gt;
&lt;br /&gt;iBatis로 할수 있는게 참 많다.. Result 를 받는 시점에서 rowHandler를 설정해서 xml 트리형태의 데이터를 한방에 가져올수도 있고... 복잡한 파라미터와 조건에 맞춘 쿼리도 쉽게 뽑아내준다.. &lt;br /&gt;
iBatis 파이팅 -ㅅ-!?;;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-46-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-46-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-46-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=10906231&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Frinn.kr/46&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>Java &amp; iBatis</category>
			<category>iBATIS</category>
			<category>Java</category>
			<category>mybatis</category>
			<category>oracle</category>
			<category>procedure</category>
			<category>아이바티스</category>
			<category>오라클 프로시저 호출</category>
			<author>퍼플린</author>
			<guid>http://rinn.kr/46</guid>
			<comments>http://rinn.kr/46#entry46comment</comments>
			<pubDate>Tue, 02 Nov 2010 14:52:11 +0900</pubDate>
		</item>
		<item>
			<title>플렉스 팝업을 띄우고 데이터 교환하기</title>
			<link>http://rinn.kr/45</link>
			<description>&lt;br /&gt;
&lt;div class=&quot;imageblock left&quot; style=&quot;float: left; margin-right: 10px;&quot;&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/original/135D6C364CD1596C0F2EBC&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/135D6C364CD1596C0F2EBC&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;Flex.png&quot; height=&quot;124&quot; width=&quot;120&quot;/&gt;&lt;/a&gt;&lt;/div&gt;플렉스에서 팝업에 관해서 가장 많이 나오는 질문중 하나가 팝업을 띄울때 어플리케이션의 데이터를 보내고 싶다거나 팝업이 닫힐때 데이터를 받아서 특정 함수를 실행시키고 싶다거나 하는 것이다. &lt;br /&gt;
&lt;br /&gt;이전에 쓴글 &lt;A href=&quot;http://rinn.kr/27&quot; target=_blank&gt;2010/02/17 - [Flex] - 커스텀이벤트 (Custom Event) 만들기 / 사용하기&lt;/A&gt;&amp;nbsp;를 보면 어느정도 알수 있지만 정확하게 팝업을 위해서 쓴 글이 아니기 때문에 실제 사용에 힘들어 하는 사람들을 보게 된다.&lt;br /&gt;
&lt;br /&gt;그래서 간단한 예제로 구현을 해보고자 한다. &lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;embed width=&quot;408&quot; height=&quot;193&quot; src=&quot;/attachment/cfile1.uf@1401A1304C848B5223EF4E.swf&quot; quality=&quot;high&quot; allowScriptAccess=&quot;always&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;예제를 보면 보낼 데이터에 rinn.kr 이 들어있고 팝업 띄우기를 클릭하면 팝업이 뜨면서 보낸 데이터가 보여진다. &lt;br /&gt;
팝업에 보낼데이터 필드에 들어있는 값이 어플리케이션에도 반영된다. &lt;br /&gt;
&lt;br /&gt;팝업으로 데이터를 보낼때에는 팝업컴포넌트의 public 변수에 그냥 값을 넘겨주기만 하면 되고. 팝업에서 데이터를 받을때에는 이벤트에 실어서 날려주면 된다. &lt;br /&gt;
&lt;br /&gt;팝업은 팝업을 띄우는 객체의 child로 취급되기 때문에 팝업에서 발생하는 이벤트를 어플리케이션에서 받을 수 있다. 기본적인 이벤트 전파만 이해 하면 사실 간단한 문제다. &lt;br /&gt;
&lt;br /&gt;워낙 간단하니 소스에 대한 설명은 생략하고 샘플 파일을 첨부하는 걸로 시마이~&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://rinn.tistory.com/attachment/cfile10.uf@160C0B304C848D15354114.zip&quot;&gt;&lt;img src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; popupTest.zip&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-45-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-45-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-45-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=9413967&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Frinn.kr/45&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>Flex</category>
			<category>Flex3</category>
			<category>PopupEvent</category>
			<category>PopUpManager</category>
			<category>데이터교환</category>
			<category>이벤트전파</category>
			<category>팝업</category>
			<category>팝업닫을때 함수 실행</category>
			<category>플렉스 팝업</category>
			<author>퍼플린</author>
			<guid>http://rinn.kr/45</guid>
			<comments>http://rinn.kr/45#entry45comment</comments>
			<pubDate>Mon, 06 Sep 2010 15:43:50 +0900</pubDate>
		</item>
		<item>
			<title>Flex 레이아웃 잡기 - 제한 레이아웃 (constraintRows, constraintColumns)</title>
			<link>http://rinn.kr/44</link>
			<description>플렉스의 레이아웃 컨테이너는 여러가지 종류가 있지만 가장 많이 사용되는 것은 Canvas, Box (VBox, HBox) 일것이다. &lt;br /&gt;
&lt;br /&gt;
기본적으로 Canvas 는 absolute 기반으로 즉 좌표를 기반으로 절대위치를 결정해서 아이템을 배치 하게 되고 Box 계열은 vertical 이나 horozontal 정렬 방식으로 다른 아이템들과의 위치를 판단해서 전체적인 배치를 하게 된다. &lt;br /&gt;
&lt;br /&gt;
어느것이 좋냐는 아빠가 좋냐 엄마가 좋냐 정도의 문제가 될수 있으니 일단 배제 하고.. &lt;br /&gt;
아래 그림과 같은 레이아웃을 만든다고 가정하고 간단하게 구조를 잡아보자.. &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/original/184022244BC672BF1BD65C&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/184022244BC672BF1BD65C&quot; alt=&quot;&quot; filemime=&quot;image/gif&quot; filename=&quot;issueReport.gif&quot; height=&quot;362&quot; width=&quot;620&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
클릭해서 보면 상단,하단의 위아래로 나눠진 구조에 아래쪽은 좌,우로 나눠진 형태이다. &lt;br /&gt;
&lt;br /&gt;
일반적인 사이트들의 레이아웃이고 관리자화면을 꾸밀때나 게시판 형식을 만들때 자주 보게 되는 형식일 것이다. (나만 이렇게 만드는건 아니겠지 -ㅅ-;)&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: rgb(128, 31, 191); font-weight: bold;&quot;&gt;상단은 높이가 고정되어있고 하단은 나머지 높이를 차지 하게 된다.&lt;/span&gt;&lt;br style=&quot;color: rgb(128, 31, 191); font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(128, 31, 191); font-weight: bold;&quot;&gt;
하단에서는 우측은 넓이가 고정되어있고 좌측은 우측을뺀 나머지 넓이를 차지하게 된다. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
이런 형태의 레이아웃을 만들기 위해서 일반적으로 생각을 할때 위아래로 배치 되어야 하니까 어플리케이션은 vertical로 레이아웃을 설정하고 상단/하단 구분을 위해서 HBox 를 두개 배치 하고 하단 HBox 내부에 다시 데이터 그리드와 패널을 배치 하는 형태가 될것이다. &lt;br /&gt;
만약 데이터 그리드 위쪽에 정보를 보여주거나 설명을 위한 라벨만 하나 들어갈려고 해도 하단 VBox를 추가해서 라벨과 데이터 그리드를 넣어야 한다. 몇개 안되는 구조를 위해서 컨테이너가 꽤나 많이 사용되는 것이다. &lt;br /&gt;
&lt;br /&gt;
이런 방법은 예전에 HTML 페이지에서 테이블로 구조를 만들어본 경험이있는 사람들이 즐겨 쓰는 방법이다. 지금은 HTML도 div를 사용해서 적절하게 겹치지 않도록 레이아웃을 하지만.. 전에는 중첩 테이블을 이용해서 td 안에 테이블 또 td 안에 테이블 이런 형태로 레이아웃을 구성했었다.&lt;br /&gt;
&lt;br /&gt;
그렇게 만들었던 경험이 저런식으로 레이아웃을 만들게 되는 것이다. &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-decoration: underline;&quot;&gt;중첩 구조로 만들때의 문제점은 Flex3 컨테이너가 모든 이벤트 처리 및 스크롤 등을 전부 가지고 있는 놈이라는 거다. 이벤트는 컨테이너를 따라 계속 버블링 되고 스크롤을 사용하던 사용하지 않던 이미 내부적으로는 맹렬하게 계산해서 처리를 하고 있다. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Flex4 에서는 Group이 추가 되면서 저런 문제가 줄어들겠지만 지금 Flex3를 주력으로 사용하고 있는 입장에서는 아무래도 중첩 구조는 퍼포먼스나 이후의 구조변경을 할때에도 부담이 될 수 밖에 없다. &lt;br /&gt;
&lt;br /&gt;
하지만 브라우저 사이즈에 따라서 유동적으로 변경되는 레이아웃을 좌표계를 기반으로 만들기에는 좀 불편하다.&lt;br /&gt;
&lt;br /&gt;
이 포스트에서 소개 하고자 하는것은 제한 레이아웃 생성자인 &lt;span style=&quot;color: rgb(227, 22, 0); font-weight: bold;&quot;&gt;constraintRows&lt;/span&gt; 와 &lt;span style=&quot;color: rgb(227, 22, 0); font-weight: bold;&quot;&gt;constraintColumns&lt;/span&gt; 이다.&lt;br /&gt;
absolute 타입의 레이아웃에서 미리 화면을 제한해서 분할 하고 그 제한된 위치를 참고해서 레이아웃을 구성할 수 있게 해준다. &lt;br /&gt;
constraintRows는 상하단으로 구분을 할때 사용하고 constraintColumns는 좌우측을 구분할때 사용한다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border: 1px dashed rgb(243, 197, 52); background-color: rgb(254, 254, 184); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&amp;lt;mx:constraintRows&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;mx:ConstraintRow id=&quot;title&quot; height=&quot;30&quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mx:ConstraintRow id=&quot;content&quot; height=&quot;100%&quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/mx:constraintRows&amp;gt;&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
이 코드는 absolute 로 정의된 어플리케이션의 공간을 상단을 높이 30 으로 하단은 나머지를 사용하도록 미리 분할한다. 분할된 선은 보이지 않는다 -ㅅ-;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border: 1px dashed rgb(243, 197, 52); background-color: rgb(254, 254, 184); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&amp;lt;mx:constraintColumns&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;mx:ConstraintColumn id=&quot;list&quot; width=&quot;100%&quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;mx:ConstraintColumn id=&quot;sideBar&quot; width=&quot;200&quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/mx:constraintColumns&amp;gt;&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
이 코드는 constraintColumns 를 사용하여 좌측을 200으로 우측은 나머지를 사용하도록 분할한다.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/original/15252D124BC67ADF0E9628&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/15252D124BC67ADF0E9628&quot; alt=&quot;&quot; filemime=&quot;image/gif&quot; filename=&quot;1.gif&quot; height=&quot;279&quot; width=&quot;436&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
컨테이너를 사용하지 않고도 화면을 미리 분할 해놓고 가상의 선을 기준으로 좌표를 지정할 수 있게 되는 것이다. &lt;br /&gt;
&lt;br /&gt;
상단 전체, 하단 전체, 좌측 전체, 우측 전체, 1,2,3,4 로 나눠진 부분공간 모두를 사용해서 원하는 곳에 아이템들을 배치 할 수 있게 된다.&lt;br /&gt;
또한 어플리케이션이 absolute 이므로 고정좌표를 사용해서 특정 위치에 특정 아이템을 배치 하는 것도 물론 가능하다.&lt;br /&gt;
&lt;br /&gt;
분할된 가상공간의 좌표를 지정할때는 id:좌표 형식으로 지정하게 된다. &lt;br /&gt;
제한 좌표를 사용할때는 top, left, right, bottom 속성으로 레이아웃의 크기를 설정 해주는것이 사용하기 편하다. &lt;br /&gt;
&lt;br /&gt;
예를 들어 3번 위치에 가득차게 데이터 그리드를 배치하고 오른쪽 공간과 5px 정도 떨어져서 간격을 유지 하게 하고싶다면. &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border: 1px dashed rgb(243, 197, 52); background-color: rgb(254, 254, 184); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&amp;lt;mx:DataGrid&amp;nbsp; top=&quot;content:5&quot; left=&quot;list:5&quot; bottom=&quot;content:5&quot; right=&quot;list:5&quot;&amp;gt;&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
이렇게 설정한다. 상대좌표를 잡을 constraintRow나 column의 아이디를 쓰고 거기서 얼마나 떨어져야 할지를 입력한다. &lt;br /&gt;
위 아래는 Row를 참조하고 좌우는 Column을 참조 해서 좌표를 잡게 된다.&lt;br /&gt;
저런 좌표를 디자인 뷰에서 직접 입력하기는 힘들지만 완성된 레이아웃은 디자인 뷰에서도 정상적으로 보이게 되니 처음 레이아웃을 잡을때 큰 틀을 설정해놓고 내부 아이템을 세팅해 내가는 형식으로 구성하면 된다.&lt;br /&gt;
&lt;br /&gt;이 방식으로 만들게 되면 단순 레이아웃을 위한 컨테이너의 중첩을 사용하지 않아도 되기 때문에 코드를 보기에도 깔끔해지고 중첩으로 인한 부담되는 이벤트 버블링도 방지 할 수 있다. &lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;레이아웃만을 위해서 중첩된 컨테이너를 사용하는 것은 지양하자.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock&quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;http://rinn.tistory.com/attachment/cfile5.uf@191FD91E4BC6969258D8F7.mxml&quot;&gt;&lt;img src=&quot;http://i1.daumcdn.net/cfs.tistory/v/110706133414/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; constraintLayout.mxml&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-44-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-44-1&quot; class=&quot;entry-ccl-nc&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black02.png&quot; alt=&quot;비영리&quot;/&gt;
	&lt;img id=&quot;ccl-icon-44-2&quot; class=&quot;entry-ccl-sa&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black04.png&quot; alt=&quot;동일 조건 변경 허락&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=6605795&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;&lt;div style=&quot;text-align:center; padding-top:10px;&quot;&gt;
&lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Frinn.kr/44&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=310&amp;amp;action=like&amp;amp;font=tahoma&amp;amp;colorscheme=light&amp;amp;height=65&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:310px; height:65px;&quot; allowTransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description>
			<category>Flex</category>
			<category>constraintColumns</category>
			<category>constraintRows</category>
			<category>Flex3</category>
			<category>레이아웃</category>
			<category>제한레이아웃</category>
			<category>컨테이너 중첩방지</category>
			<author>퍼플린</author>
			<guid>http://rinn.kr/44</guid>
			<comments>http://rinn.kr/44#entry44comment</comments>
			<pubDate>Thu, 15 Apr 2010 11:43:17 +0900</pubDate>
		</item>
	</channel>
</rss>

