<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>허니몬의 자바guru</title>
		<link>http://java.ihoney.pe.kr/</link>
		<description>자바와 관련된 것들에 대해서 정리하고 알리는 블로그로 만들어보고자 합니다. ^^ 많은 응원 부탁 합니다!!</description>
		<language>ko</language>
		<pubDate>Thu, 26 Jan 2012 18:02:32 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<managingEditor>허니몬</managingEditor>
		<image>
		<title>허니몬의 자바guru</title>
		<url><![CDATA[http://cfile4.uf.tistory.com/image/203BA90F4A01705B557440]]></url>
		<link>http://java.ihoney.pe.kr/</link>
		<description>자바와 관련된 것들에 대해서 정리하고 알리는 블로그로 만들어보고자 합니다. ^^ 많은 응원 부탁 합니다!!</description>
		</image>
		<item>
			<title>JSON 데이터 정렬하기</title>
			<link>http://java.ihoney.pe.kr/205</link>
			<description>&lt;p&gt;&lt;/p&gt;
JavaScript sort 참고 : &lt;a href=&quot;http://www.w3schools.com/jsref/jsref_sort.asp&quot; target=&quot;_blank&quot; title=&quot;[http://www.w3schools.com/jsref/jsref_sort.asp]로 이동합니다.&quot;&gt;http://www.w3schools.com/jsref/jsref_sort.asp&lt;/a&gt;
&lt;div&gt;
&lt;pre class=&quot;brush:javascript&quot;&gt;  
var testArray = [
    {&quot;id&quot; : 1, &quot;total&quot; : 3}, {&quot;id&quot; : 2, &quot;total&quot; : 20}, {&quot;id&quot; : 3, &quot;total&quot; : 12}, {&quot;id&quot; : 4, &quot;total&quot; : 9}, {&quot;id&quot; : 3, &quot;total&quot; : 24}
];
function custonSort(a, b) {
  if(a.total == b.total){ return 0} return  a.total &amp;gt; b.total ? 1 : -1;
}
testArray.sort(custonSort);
console.log(testArray);
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&amp;lt;&amp;lt; 정렬 결과 &amp;gt;&amp;gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Menlo, monospace; font-size: 11px; line-height: normal; white-space: pre-wrap; background-color: rgb(255, 255, 255); &quot;&gt;[&lt;/span&gt;&lt;span class=&quot;console-formatted-object source-code&quot; style=&quot;box-sizing: border-box; position: relative; display: inline-block; vertical-align: top; color: rgb(0, 0, 0); font-family: Menlo, monospace; font-size: 11px; white-space: pre-wrap; line-height: normal; background-color: rgb(255, 255, 255); &quot;&gt;&lt;div class=&quot;section expanded&quot; style=&quot;box-sizing: border-box; position: static; margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 12px !important; &quot;&gt;
&lt;div class=&quot;header monospace&quot; style=&quot;box-sizing: border-box; padding-top: 0px; padding-right: 8px; padding-bottom: 0px; padding-left: 0px; min-height: 0px; white-space: nowrap; -webkit-background-origin: padding; -webkit-background-clip: padding; background-image: none; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; border-width: initial; border-color: initial; &quot;&gt;&lt;div class=&quot;subtitle&quot; style=&quot;box-sizing: border-box; float: right; margin-left: 5px; max-width: 55%; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; &quot;&gt;
&lt;/div&gt;&lt;div class=&quot;title&quot; style=&quot;box-sizing: border-box; word-wrap: break-word; white-space: normal; line-height: 18px; &quot;&gt;
Object&lt;/div&gt;
&lt;/div&gt;&lt;ol class=&quot;properties properties-tree monospace&quot; tabindex=&quot;0&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 6px; padding-bottom: 2px; padding-left: 16px; list-style-type: none; list-style-position: initial; list-style-image: initial; min-height: 18px; &quot;&gt;
&lt;li title=&quot;&quot; style=&quot;box-sizing: border-box; margin-left: 12px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); &quot;&gt;id&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-number&quot; style=&quot;box-sizing: border-box; color: rgb(28, 0, 207); &quot;&gt;1&lt;/span&gt;&lt;/li&gt;
&lt;li title=&quot;&quot; style=&quot;box-sizing: border-box; margin-left: 12px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); &quot;&gt;total&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-number&quot; style=&quot;box-sizing: border-box; color: rgb(28, 0, 207); &quot;&gt;3&lt;/span&gt;&lt;/li&gt;
&lt;li title=&quot;&quot; class=&quot;parent&quot; style=&quot;box-sizing: border-box; margin-left: 1px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name dimmed&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); opacity: 0.6; &quot;&gt;__proto__&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-object&quot; style=&quot;box-sizing: border-box; position: relative; display: inline-block; vertical-align: top; &quot;&gt;Object&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Menlo, monospace; font-size: 11px; line-height: normal; white-space: pre-wrap; background-color: rgb(255, 255, 255); &quot;&gt;, &lt;/span&gt;&lt;span class=&quot;console-formatted-object source-code&quot; style=&quot;box-sizing: border-box; position: relative; display: inline-block; vertical-align: top; color: rgb(0, 0, 0); font-family: Menlo, monospace; font-size: 11px; white-space: pre-wrap; line-height: normal; background-color: rgb(255, 255, 255); &quot;&gt;&lt;div class=&quot;section expanded&quot; style=&quot;box-sizing: border-box; position: static; margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 12px !important; &quot;&gt;
&lt;div class=&quot;header monospace&quot; style=&quot;box-sizing: border-box; padding-top: 0px; padding-right: 8px; padding-bottom: 0px; padding-left: 0px; min-height: 0px; white-space: nowrap; -webkit-background-origin: padding; -webkit-background-clip: padding; background-image: none; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; border-width: initial; border-color: initial; &quot;&gt;&lt;div class=&quot;subtitle&quot; style=&quot;box-sizing: border-box; float: right; margin-left: 5px; max-width: 55%; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; &quot;&gt;
&lt;/div&gt;&lt;div class=&quot;title&quot; style=&quot;box-sizing: border-box; word-wrap: break-word; white-space: normal; line-height: 18px; &quot;&gt;
Object&lt;/div&gt;
&lt;/div&gt;&lt;ol class=&quot;properties properties-tree monospace&quot; tabindex=&quot;0&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 6px; padding-bottom: 2px; padding-left: 16px; list-style-type: none; list-style-position: initial; list-style-image: initial; min-height: 18px; &quot;&gt;
&lt;li title=&quot;&quot; style=&quot;box-sizing: border-box; margin-left: 12px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); &quot;&gt;id&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-number&quot; style=&quot;box-sizing: border-box; color: rgb(28, 0, 207); &quot;&gt;4&lt;/span&gt;&lt;/li&gt;
&lt;li title=&quot;&quot; style=&quot;box-sizing: border-box; margin-left: 12px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); &quot;&gt;total&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-number&quot; style=&quot;box-sizing: border-box; color: rgb(28, 0, 207); &quot;&gt;9&lt;/span&gt;&lt;/li&gt;
&lt;li title=&quot;&quot; class=&quot;parent&quot; style=&quot;box-sizing: border-box; margin-left: 1px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name dimmed&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); opacity: 0.6; &quot;&gt;__proto__&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-object&quot; style=&quot;box-sizing: border-box; position: relative; display: inline-block; vertical-align: top; &quot;&gt;Object&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Menlo, monospace; font-size: 11px; line-height: normal; white-space: pre-wrap; background-color: rgb(255, 255, 255); &quot;&gt;, &lt;/span&gt;&lt;span class=&quot;console-formatted-object source-code&quot; style=&quot;box-sizing: border-box; position: relative; display: inline-block; vertical-align: top; color: rgb(0, 0, 0); font-family: Menlo, monospace; font-size: 11px; white-space: pre-wrap; line-height: normal; background-color: rgb(255, 255, 255); &quot;&gt;&lt;div class=&quot;section expanded&quot; style=&quot;box-sizing: border-box; position: static; margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 12px !important; &quot;&gt;
&lt;div class=&quot;header monospace&quot; style=&quot;box-sizing: border-box; padding-top: 0px; padding-right: 8px; padding-bottom: 0px; padding-left: 0px; min-height: 0px; white-space: nowrap; -webkit-background-origin: padding; -webkit-background-clip: padding; background-image: none; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; border-width: initial; border-color: initial; &quot;&gt;&lt;div class=&quot;subtitle&quot; style=&quot;box-sizing: border-box; float: right; margin-left: 5px; max-width: 55%; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; &quot;&gt;
&lt;/div&gt;&lt;div class=&quot;title&quot; style=&quot;box-sizing: border-box; word-wrap: break-word; white-space: normal; line-height: 18px; &quot;&gt;
Object&lt;/div&gt;
&lt;/div&gt;&lt;ol class=&quot;properties properties-tree monospace&quot; tabindex=&quot;0&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 6px; padding-bottom: 2px; padding-left: 16px; list-style-type: none; list-style-position: initial; list-style-image: initial; min-height: 18px; &quot;&gt;
&lt;li title=&quot;&quot; style=&quot;box-sizing: border-box; margin-left: 12px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); &quot;&gt;id&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-number&quot; style=&quot;box-sizing: border-box; color: rgb(28, 0, 207); &quot;&gt;3&lt;/span&gt;&lt;/li&gt;
&lt;li title=&quot;&quot; style=&quot;box-sizing: border-box; margin-left: 12px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); &quot;&gt;total&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-number&quot; style=&quot;box-sizing: border-box; color: rgb(28, 0, 207); &quot;&gt;12&lt;/span&gt;&lt;/li&gt;
&lt;li title=&quot;&quot; class=&quot;parent&quot; style=&quot;box-sizing: border-box; margin-left: 1px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name dimmed&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); opacity: 0.6; &quot;&gt;__proto__&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-object&quot; style=&quot;box-sizing: border-box; position: relative; display: inline-block; vertical-align: top; &quot;&gt;Object&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Menlo, monospace; font-size: 11px; line-height: normal; white-space: pre-wrap; background-color: rgb(255, 255, 255); &quot;&gt;, &lt;/span&gt;&lt;span class=&quot;console-formatted-object source-code&quot; style=&quot;box-sizing: border-box; position: relative; display: inline-block; vertical-align: top; color: rgb(0, 0, 0); font-family: Menlo, monospace; font-size: 11px; white-space: pre-wrap; line-height: normal; background-color: rgb(255, 255, 255); &quot;&gt;&lt;div class=&quot;section expanded&quot; style=&quot;box-sizing: border-box; position: static; margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 12px !important; &quot;&gt;
&lt;div class=&quot;header monospace&quot; style=&quot;box-sizing: border-box; padding-top: 0px; padding-right: 8px; padding-bottom: 0px; padding-left: 0px; min-height: 0px; white-space: nowrap; -webkit-background-origin: padding; -webkit-background-clip: padding; background-image: none; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; border-width: initial; border-color: initial; &quot;&gt;&lt;div class=&quot;subtitle&quot; style=&quot;box-sizing: border-box; float: right; margin-left: 5px; max-width: 55%; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; &quot;&gt;
&lt;/div&gt;&lt;div class=&quot;title&quot; style=&quot;box-sizing: border-box; word-wrap: break-word; white-space: normal; line-height: 18px; &quot;&gt;
Object&lt;/div&gt;
&lt;/div&gt;&lt;ol class=&quot;properties properties-tree monospace&quot; tabindex=&quot;0&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 6px; padding-bottom: 2px; padding-left: 16px; list-style-type: none; list-style-position: initial; list-style-image: initial; min-height: 18px; &quot;&gt;
&lt;li title=&quot;&quot; style=&quot;box-sizing: border-box; margin-left: 12px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); &quot;&gt;id&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-number&quot; style=&quot;box-sizing: border-box; color: rgb(28, 0, 207); &quot;&gt;2&lt;/span&gt;&lt;/li&gt;
&lt;li title=&quot;&quot; style=&quot;box-sizing: border-box; margin-left: 12px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); &quot;&gt;total&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-number&quot; style=&quot;box-sizing: border-box; color: rgb(28, 0, 207); &quot;&gt;20&lt;/span&gt;&lt;/li&gt;
&lt;li title=&quot;&quot; class=&quot;parent&quot; style=&quot;box-sizing: border-box; margin-left: 1px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name dimmed&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); opacity: 0.6; &quot;&gt;__proto__&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-object&quot; style=&quot;box-sizing: border-box; position: relative; display: inline-block; vertical-align: top; &quot;&gt;Object&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Menlo, monospace; font-size: 11px; line-height: normal; white-space: pre-wrap; background-color: rgb(255, 255, 255); &quot;&gt;, &lt;/span&gt;&lt;span class=&quot;console-formatted-object source-code&quot; style=&quot;box-sizing: border-box; position: relative; display: inline-block; vertical-align: top; color: rgb(0, 0, 0); font-family: Menlo, monospace; font-size: 11px; white-space: pre-wrap; line-height: normal; background-color: rgb(255, 255, 255); &quot;&gt;&lt;div class=&quot;section expanded&quot; style=&quot;box-sizing: border-box; position: static; margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 12px !important; &quot;&gt;
&lt;div class=&quot;header monospace&quot; style=&quot;box-sizing: border-box; padding-top: 0px; padding-right: 8px; padding-bottom: 0px; padding-left: 0px; min-height: 0px; white-space: nowrap; -webkit-background-origin: padding; -webkit-background-clip: padding; background-image: none; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-image: initial; border-width: initial; border-color: initial; &quot;&gt;&lt;div class=&quot;subtitle&quot; style=&quot;box-sizing: border-box; float: right; margin-left: 5px; max-width: 55%; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; &quot;&gt;
&lt;/div&gt;&lt;div class=&quot;title&quot; style=&quot;box-sizing: border-box; word-wrap: break-word; white-space: normal; line-height: 18px; &quot;&gt;
Object&lt;/div&gt;
&lt;/div&gt;&lt;ol class=&quot;properties properties-tree monospace&quot; tabindex=&quot;0&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 6px; padding-bottom: 2px; padding-left: 16px; list-style-type: none; list-style-position: initial; list-style-image: initial; min-height: 18px; &quot;&gt;
&lt;li title=&quot;&quot; style=&quot;box-sizing: border-box; margin-left: 12px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); &quot;&gt;id&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-number&quot; style=&quot;box-sizing: border-box; color: rgb(28, 0, 207); &quot;&gt;3&lt;/span&gt;&lt;/li&gt;
&lt;li title=&quot;&quot; style=&quot;box-sizing: border-box; margin-left: 12px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); &quot;&gt;total&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-number&quot; style=&quot;box-sizing: border-box; color: rgb(28, 0, 207); &quot;&gt;24&lt;/span&gt;&lt;/li&gt;
&lt;li title=&quot;&quot; class=&quot;parent&quot; style=&quot;box-sizing: border-box; margin-left: 1px; white-space: nowrap; text-overflow: ellipsis; overflow-x: hidden; overflow-y: hidden; -webkit-user-select: text; cursor: default; &quot;&gt;&lt;span class=&quot;name dimmed&quot; style=&quot;box-sizing: border-box; color: rgb(136, 19, 145); opacity: 0.6; &quot;&gt;__proto__&lt;/span&gt;&lt;span class=&quot;separator&quot; style=&quot;box-sizing: border-box; &quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;value console-formatted-object&quot; style=&quot;box-sizing: border-box; position: relative; display: inline-block; vertical-align: top; &quot;&gt;Object&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Menlo, monospace; font-size: 11px; line-height: normal; white-space: pre-wrap; background-color: rgb(255, 255, 255); &quot;&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Menlo, monospace; font-size: 11px; line-height: normal; white-space: pre-wrap; background-color: rgb(255, 255, 255); &quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
간단하게 예제를 만들어봤다.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
참고사이트 :&amp;nbsp;&lt;a href=&quot;http://stackoverflow.com/questions/881510/json-sorting-question&quot; target=&quot;_blank&quot; title=&quot;[http://stackoverflow.com/questions/881510/json-sorting-question]로 이동합니다.&quot;&gt;http://stackoverflow.com/questions/881510/json-sorting-question&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
난 전혀 다른 곳을 파고 있었던 것이다.&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
&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-205-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;!--
	&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-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&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;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>Web(HTML, CSS, JSP, JavaScript)</category>
			<category>javascript</category>
			<category>JSON</category>
			<category>sort</category>
			<author>허니몬</author>
			<guid>http://java.ihoney.pe.kr/205</guid>
			<comments>http://java.ihoney.pe.kr/205#entry205comment</comments>
			<pubDate>Thu, 26 Jan 2012 17:53:27 +0900</pubDate>
		</item>
		<item>
			<title>프로그래머가 되기 위해서는 운영체제에 대한 이해도 필요하다.</title>
			<link>http://java.ihoney.pe.kr/203</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote style=&quot;color: rgb(227, 22, 0);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt; font-weight: bold;&quot;&gt;나는 웹 애플리케이션 개발자이기 때문에 운영체제를 몰라도 된다?&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 모든 프로그램은 운영체제를 기반으로 하여 동작한다. 운영체제는 플랫폼이다. 최근에는 웹과 &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 운영체제에 대해서 이해를 함으로 인해서 프로그래밍을 할 때, 운영체제의 오류에 빠져드는 실수를 회피할 수 있는 가능성이 높아진다.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 자바는 운영체제에서 실행시킨 JVM(Java Virtual Machine)에 의해서 바이트 코드를 실행하기 때문에 운영체제의 영향을 받지 않는다고 알려져 있다(운영체제마다 약간의 차이는 있다는 생각이 들지만, 코딩하는 중에는 윈도우, 리눅스, 유닉스 에서 큰 영향은 없었다. 통합된 빌드과정과 웹서버에 코드를 배포하고 웹서버에서 구동시키는 형태였으니 그랬겠지만…). &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 프로그래머가 직접 운영서버에다가 빌드를 하게 되는 경우가 얼마나 될까? 외부에서 접근이 가능한 서버라면 통합빌드 환경을 구축해두고서 원격배포를 할 수 있으니 크게 신경쓸 것이 그리 많지가 않다(SSH, FTP 접속, 웹서버의 설치 위치 확인, 스크립트 작성… 또 뭘 신경써야 하더라?). &lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 이전 프로젝트에서는 개발빌드환경을 신경쓸 필요가 없었다. 아키텍트가 개발에 필요한 웹서버 및 빌드환경을 구축해주고 알려줬기 때문에 이런 것들을 신경쓸 필요가 없었다. 로직과 기능을 개발하고 커밋하고 개발서버에서 빌드를 누르고 오류가 발생했는지 지켜보다가 정상빌드되며 개발서버에서 내가 구현한 기능이 정상동작하는지 확인하면 되었다. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 최근 공공기관에서 수주한 작은 SI프로젝트를 하면서 직접 리눅스LINUX(Redhat 6.0 Enterprise) 서버 콘솔Console로 접근해서 톰캣 서버(Tomcat 6.0)를 설치하고 jar파일을 복사하는 등의 일을 하면서 느끼는 거지만 프로그래머는 단순히 코딩만 하는 것이 아니라 운영체제를 충분히 알고 있어야 한다는 것이다. 어디가서 &#039;리눅스 좀 씁니다, 요즘은 유닉스(맥북의 맥OS가 Unix 기반이니까)도 좀 씁니다.&#039; 라고 이야기 했지만, 운영서버에 집접 배포본(.war)을 설치하고 구동시키는 것은 만만치가 않았다. 그나마 운영서버들이 모두 GUI를 제공했기 때문에 내가 운영체제를 쓰던 그대로 사용할 수가 있었다. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 리눅스 운영체제에서 애플리케이션이 설치되는 위치, 로그파일 생성 위치와 배포본의 압축해제 위치 등을 주의깊게 본 적이 없었는데, 이번 프로젝트를 하면서 깨달은 바가 좀 있다. &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 물론 나 혼자였다면 훨씬 더 많은 시간을 들여야 했겠지만 곁에서 알려주시는 멘토가 있으셨기에 훨씬 수월하게 일을 처리할 수가 있었다. 우리 회사에서 진행하는 솔루션들도 이런 과정을 직접 프로그래머가 진행해야할 상황이 될 가능성이 높으니 이런 경험은 성장을 위한 좋은 밑거름이 되지 않을까?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; &#039;프로그래머라면 자신이 사용하는 개발환경의 운영체제를 스스로 구축하고 사용하는 것을 피하지 않아야 한다.&#039;고 생각한다. 꽤 많은 시간이 소요되는 작업이지만, JDK가 어떻게 설치되고 JDK_HOME의 위치가 어떻게 설치되는지, 경로를 설정할 때 &#039;;&#039;(윈도우)을 써야하는지 &#039;:&#039;(리눅스, 유닉스)을 써야하는지는 알아야 하지 않을까? &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&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-203-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;!--
	&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-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&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;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>Developer&#039;s History</category>
			<category>linux</category>
			<category>Unix</category>
			<category>개발환경</category>
			<category>운영체제</category>
			<category>이해</category>
			<category>프로그래머</category>
			<author>허니몬</author>
			<guid>http://java.ihoney.pe.kr/203</guid>
			<comments>http://java.ihoney.pe.kr/203#entry203comment</comments>
			<pubDate>Wed, 04 Jan 2012 10:22:05 +0900</pubDate>
		</item>
		<item>
			<title>openJpa, nonfatal user error 발생시, persistence.xml 에 Item을 추가하세요.</title>
			<link>http://java.ihoney.pe.kr/200</link>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;openjpa-2.1.1-r422266:1148538 &lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;nonfatal user error&lt;/font&gt;&lt;/b&gt;&amp;gt; &lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;org.apache.openjpa.persistence.ArgumentException: Attempt to cast instance&lt;/font&gt;&lt;/b&gt; &quot;...EntityItem@bbef5e8&quot; to &lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#e31600&quot;&gt;PersistenceCapable failed. &amp;nbsp;Ensure that it has been enhanced.&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;FailedObject: ...EntityItem@bbef5e8&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.apache.openjpa.kernel.BrokerImpl.assertPersistenceCapable(BrokerImpl.java:4631)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.apache.openjpa.kernel.BrokerImpl.persistInternal(BrokerImpl.java:2610)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2555)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2538)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2442)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1077)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:715)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;...&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre; &quot;&gt;	&lt;/span&gt;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at java.lang.reflect.Method.invoke(Method.java:597)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.junit.runners.ParentRunner.run(ParentRunner.java:236)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;hr style=&quot;height: 1px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; border-top-width: 1px; border-top-style: dotted; border-top-color: black; border-right-color: black; border-bottom-color: black; border-left-color: black; display: block; &quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;tx_left_marker&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; &quot;&gt;[해결책]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em; &quot;&gt;&lt;span style=&quot;font-size: 11pt; &quot;&gt;persistence.xml 에 Item들을 추가하세요.&lt;/span&gt;&lt;span id=&quot;tx_right_marker&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&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-200-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;!--
	&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-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&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;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>Frameworks</category>
			<category>Java</category>
			<category>nonfatal user error</category>
			<category>openJPA</category>
			<category>PersistenceCapable failed</category>
			<author>허니몬</author>
			<guid>http://java.ihoney.pe.kr/200</guid>
			<comments>http://java.ihoney.pe.kr/200#entry200comment</comments>
			<pubDate>Mon, 14 Nov 2011 17:56:50 +0900</pubDate>
		</item>
		<item>
			<title>[가이드] 우분투에서 안드로이드 앱을 개발하려면?</title>
			<link>http://java.ihoney.pe.kr/199</link>
			<description>&lt;p style=&quot;background-color: transparent; &quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote style=&quot;background-color: transparent; &quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;Why? 왜 우분투에서 안드로이드 앱 개발을 해야할까?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. 윈도우 보다는 안드로이드 개발하기가 편하다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 이유 : 윈도우에서 안드로이드폰을 테스트하기 위해서는 USB 드라이버를 제조사별로 설치해야 한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; 우분투에서는 android용 rule.set만 설정해주면 된다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. 무료로 사용할 수 있는 안정적인 리눅스 운영체제이다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. 개발 중에 필요한 서버테스트 환경 등을 손쉽게 구축할 수 있다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;p style=&quot;background-color: transparent; &quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 적어도 안드로이드 앱 개발자에게는 윈도우보다는 나은 환경을 제공한다(맥북에서 써보니까 맥북도 괜찮다. 하지만, 맥북을 사야한다. 우분투는 지금 쓰는 노트북의 운영체제를 밀고 설치하면 된다).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 우분투에서 안드로이드 앱 개발환경을 구축하기는 쉽다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;1. JDK 설치하기&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.1. JDK 설치 여부 확인&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - honeymon$ java -version&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = 설치되어 있는 경우 : 2.1.로 넘어가자.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = 설치되어 있지 않은 경우 : 1.2.로 넘어가자.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.2. JDK 설치하기&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - JDK 중 하나를 선택하자.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = OpenJDK(참조하는 라이브러리에서 오류가 발생한다고 합니다. 다른 분들은 이걸 비추.)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: transparent;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = SunJDK(&lt;/span&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#3058d2&quot; style=&quot;background-color: rgb(194, 194, 194);&quot;&gt;많은 분들은 이걸 추천합니다.&lt;/font&gt;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: transparent;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = IBMJDK 듣보잡!&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - JDK를 설치하기&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = sudo apt-get install sun-6-jdk&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = 설치 완료 확인 : java -version&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;2. Android SDK 설치하기(ADK -&amp;gt; Android SDK로 변경)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.1. 구글 안드로이드 개발 사이트 : http://developer.android.com/index.html&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - 우분투용&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 22px; &quot;&gt;Android SDK&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;를 다운로드 받는다&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 22px; &quot;&gt;Android SDK&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;url : http://developer.android.com/sdk/index.html&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ** i386이라고 되어있지만 아키텍쳐(32bit/64bit)는 크게 신경쓰지 않아도 된다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 22px; &quot;&gt;Android SDK&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;를 지정한 위치에 푼다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = honeymon : /home/honeymon/Dev/android-sdk 에 설치함&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.2.&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 22px; &quot;&gt;Android SDK&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;가 설치된 경로(PATH)를 .bashrc 에서 설정해준다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - 설정 이유 : adb, ddms와 같은 안드로이드를 다루는데 필요한 커맨드를 실행할 수 있도록 해주는 것이다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - Tip. 윈도우에서는 1개의 경로가 끝나면 끝에 ;(세미콜론)을 붙이지만, 유닉스와 리눅스에서는 :(콜론)을 사용한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; font-size: 11pt; &quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; = 윈도우 사용자가 유닉스나 리눅스 환경에서 낯설어하는 부분 중 하나다. 윈도우가 유닉스를 따라한 것이다. 모든 운영체제의 시작은 유닉스였다고 보면 된다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div style=&quot;border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot; class=&quot;txc-textbox&quot;&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold; color: rgb(25, 61, 169);&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;설정방법 :&lt;/span&gt;&lt;/span&gt;&lt;br style=&quot;font-weight: bold; color: rgb(25, 61, 169);&quot;&gt;&lt;span style=&quot;font-weight: bold; color: rgb(25, 61, 169);&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;
&amp;nbsp; .bashrc 제일 마지막 문장에 PATH 추가&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: transparent; &quot;&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: transparent; &quot;&gt;
&lt;pre class=&quot;brush:bash&quot;&gt;ANDROID_PATH=/home/honeymon/Dev/android-sdk
PATH=$PATH:$ANDROID_PATH/bin
&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p style=&quot;background-color: transparent; &quot;&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.3.&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; line-height: 22px; &quot;&gt;Android SDK&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;경로설정이 완료되었는지 확인한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - adb help&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;3. Eclipse 설치하기&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.1. Eclipse DownLoad site : http://www.eclipse.org/downloads/&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - Eclipse IDE for Java Developers 가 안드로이드 앱 개발에는 더 적합해 보인다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - 내가 처음에 배울 때는 Eclipse classic 을 추천받았었는데...&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.2. Eclipse의 압축을 푼다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.3. eclipse.ini 환경을 설정한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - 개발에 적합한 것들과 설정했을 때 관련이 있는 것을 알려준다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.4. eclipse를 설치한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;4. ADT 플러그인 설치하기&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - 참고 사이트 : http://developer.android.com/sdk/eclipse-adt.html&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.1. eclipse adt update site 추가 : https://dl-ssl.google.com/android/eclipse/ &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.2. Update 목록에 나온 플러그인을 선택하고 설치한다. 설치 완료 후 이클립스 재시작&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.3. android Manager에서 ADK의 위치를 설정한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.4. 개발하려고하는 android 버전의 라이브러리를 확인한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - 다운로드 속도가 느린 편이므로 마음의 여유를 가지고 임하자.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.5. 라이브러리 다운로드가 완료된 후 이클립스를 다시 시작한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;5. ADT 설치확인&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.1. Android manager를 선택한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.2. Android Emulator를 추가한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.3. Android Emulator를 실행한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.4. DDMS perspective를 선택하여 화면전환 후 5.3.에서 실행한 에뮬레이터가 인식되는지 확인한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.5. 가볍게 화면을 캡쳐해본다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;6. Android Project 생성하기(맛뵈기)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6.1. Android Project 추가&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6.2. 실행하기&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - Android Application 선택 -&amp;gt; 수행&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6.3. 5.3.에서 실행한 Emulator에서 실행되는지 확인하기&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - Emulator가 동작하는데 걸리는 시간은 실제 안드로이드가 실행되는 시간보다 오래걸린다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - CPU의 성능에 따라서 그 차이가 제법 난다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - Emulator보다는 넥서스, 넥서스S, 넥서스 프라임과 같은 레퍼런스폰을 개발기기로 연결해서 테스트하는 것이 좋다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6.4. 실행시킨 에뮬레이터가 에뮬레이터에 보이면 정상적인 빌드 및 설치가 완료된 것이다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;7. 안드로이드 개발 Tip&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7.1. Java에 대한 공부는 꾸준하게 한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7.2. 커뮤니티 활동을 한다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7.2. 로그(Log)를 잘 이용해서 동작을 체크하자.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - 디버그(Debug)모드를 자주 이용하면 동작을 한눈에 확인하기 어렵다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - 기록(로그)을 세밀하게 남겨서 확인하는 습관을 가지자.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7.3. Android Reference를 꼼꼼히 읽어두자.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - 어느 개발서적보다 낫다.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; - 개발서적들은 대부분 저자가 자세히 모르는 내용은 얼버무리게 된다.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: transparent; &quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: transparent; &quot;&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: transparent; &quot;&gt;
&lt;hr style=&quot;height: 1px; border-width: 1px 0px 0px; border-style: dotted none none; border-color: black; -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; -moz-border-image: none; display: block;&quot;&gt;&lt;/div&gt;
&lt;p style=&quot;background-color: transparent; &quot;&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: transparent; &quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;P.S. 안드로이드 개발용 rule.set 설정하기&lt;/span&gt;&lt;br /&gt;
&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-199-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;!--
	&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-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&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;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>우분투(Ubuntu) 에서 개발하기</category>
			<category>Android</category>
			<category>eclipse</category>
			<category>Java</category>
			<category>SDK</category>
			<category>ubuntu</category>
			<category>안드로이드</category>
			<category>우분투</category>
			<category>자바</category>
			<author>허니몬</author>
			<guid>http://java.ihoney.pe.kr/199</guid>
			<comments>http://java.ihoney.pe.kr/199#entry199comment</comments>
			<pubDate>Sat, 12 Nov 2011 21:07:12 +0900</pubDate>
		</item>
		<item>
			<title>[Java Object] java.lang.Class</title>
			<link>http://java.ihoney.pe.kr/198</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;API 참고 URL : http://download.oracle.com/javase/6/docs/api/java/lang/Class.html&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;BORDER-LEFT: #000000 200px solid; PADDING-BOTTOM: 3px; BACKGROUND-COLOR: #e8e8e8; PADDING-LEFT: 6px; WIDTH: 690px; PADDING-RIGHT: 6px; FONT: bold 1pt/1 나눔고딕, Sans-serif; MARGIN-BOTTOM: 10px; HEIGHT: 1px; COLOR: #fff; PADDING-TOP: 3px&quot;&gt;
&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;span style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&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: Batang&quot;&gt;&lt;span style=&quot;FONT-SIZE: 11pt&quot;&gt;&lt;span style=&quot;FONT-SIZE: 1pt&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;LINE-HEIGHT: 1.7&quot;&gt;
&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&lt;font color=&quot;#474747&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;﻿&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;font color=&quot;#474747&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;﻿&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;FONT-FAMILY: Dotum&quot;&gt;&lt;font color=&quot;#474747&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;﻿&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;font color=&quot;#474747&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;﻿ &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; Class는 JVM(Java Virtual Machine)에서 정의된 클래스로 자동 생성해준다. 자바에서 사용하는 모든 클래스에 존재하는 한다. ㅡ_-)&amp;gt; &lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;처음에는 내가 원하는 기능을 만들기 위해, 내가 할 수 있는 것들을 총동원해서(총동원해도 다른 이들보다 역량이 부족하니 턱없이 완성도가 낮은) 만들려고 했었다. 하지만, 요즘 들어 꺠닫게 되는 것이지만 &#039;내가 필요로 하는 것들은 이미 누군가에 의해 만들어져 있다&#039; 라는 경험을 자주 접하고 있다. 인터넷 검색만 제대로 해도 내가 원하는 기능을 &#039;내가 할 수 있는 방법&#039;보다 훨씬 깔끔하고 간결하게 표현한 것들을 많이 찾아볼 수가 있다. &lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;최근 진행하고 있는 프로젝트에서도 &#039;오픈 소스&#039;로 제공하고 있는 다양한 기능들을 활용하여 만족스런 성과를 거두고 있다(아는 만큼 보인다. &#039;오픈소스&#039;도 마찬찬가지다. 아는 만큼 보인다. 제대로 소스와 언어를 이해하는 사람에게는 잘 보이는 것 같다. &lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;나는 아직 안보여!!&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;). &lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&#039;오픈소스&#039; 라고 무턱대고 가져다 쓰다보면 나중에 고생할 수가 있다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; 우리 수석님이 강조하고 강조하시는 부분이다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;어쨌든!&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&#039;객체에 있는 필드명을 이용해서 정보를 가져올 수 있지 않을까?&#039;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; 라는 기대를 하면서 인터넷 검색을 하다보니&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&#039;왠걸?&#039;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;이미 JDK에 기본적으로 있는 java.lang.Class 에서 필요한 부분들을 제공하고 있었다. 우선은 간단하게 어떻게 동작하는지 알아볼겸 테스트 케이스를 작성해봤다. 어떻게 정보를 가져올지 찔러본달까?&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;brush:java&quot;&gt;package javastudy.clazz;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import java.lang.reflect.Field;

import org.junit.Before;
import org.junit.Test;

public class ClassTest {

    private TestMakeClass makeClass;
    private String FIELD_NAME = &quot;fieldName&quot;;
    private String FIELD_ATTRIBUTE = &quot;filedAttribute&quot;;
    private String MAKE_VALUE = &quot;testMakeValue&quot;;
    private String MAKE_ATTRIBUTE = &quot;string&quot;;

    @Before
    public void setUp() {
        makeClass = new TestMakeClass();
        makeClass.setFieldName(MAKE_VALUE);
        makeClass.setFieldAttribute(MAKE_ATTRIBUTE);
    }

    /**
     * private 접근제어 선언이 되어 있는 경우,
     * field.setAccessible(true) 선언을 해주면 접근이 가능하다. 
     */
    @Test
    public void testClassGetPrivateField() {
        
        Field field = null;
        try {
            field = makeClass.getClass().getDeclaredField(FIELD_NAME);
            field.setAccessible(true);
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }

        String fieldNameValue = null;
        try {
            fieldNameValue = (String) field.get(makeClass);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        assertThat(fieldNameValue, is(makeClass.getFieldName()));
    }
    
    /**
     * private 선언된 필드 정보를 가져오려고 하면 IllegalAccessExceptino이 발생함.
     * 
     * @throws SecurityException
     * @throws NoSuchFieldException
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     */
    @Test(expected=IllegalAccessException.class)
    public void testClassGetPrivateFieldThrowsEception() throws SecurityException,
    NoSuchFieldException, IllegalArgumentException,
    IllegalAccessException {
        
        Field field = makeClass.getClass().getDeclaredField(FIELD_NAME);
        
        String fieldNameValue = (String) field.get(makeClass);
        assertThat(fieldNameValue, is(makeClass.getFieldName()));
    }
    
    @Test
    public void testClassGetPublicField() throws SecurityException,
    NoSuchFieldException, IllegalArgumentException,
    IllegalAccessException {
        
        Field field = makeClass.getClass().getDeclaredField(FIELD_ATTRIBUTE);
        
        String fieldAttribute = (String) field.get(makeClass);
        assertThat(fieldAttribute, is(makeClass.getFieldAttribute()));
    }
    
    @Test
    public void testClassGetFileds() throws IllegalArgumentException, IllegalAccessException {
        Field[] fields = makeClass.getClass().getFields();
        System.out.println(&quot;fields size is[&quot; +fields.length+ &quot;]&quot;);
        
        for(Field field : fields) {
            //public 선언되어 있는 필드 정보만 나타난다. 
            String fieldValue = (String) field.get(makeClass);
            System.out.println(fieldValue);
            
        }
    }

    public class TestMakeClass {
        private String fieldName;
        public String fieldAttribute;

        public String getFieldName() {
            return fieldName;
        }

        public void setFieldName(String fieldName) {
            this.fieldName = fieldName;
        }

        public String getFieldAttribute() {
            return fieldAttribute;
        }

        public void setFieldAttribute(String fieldAttribute) {
            this.fieldAttribute = fieldAttribute;
        }

    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;
이렇게 해서 fieldName을 이용해서 객체의 필드정보를 뽑아내고, 그 필드정보에서 원하는 정보를 가져오는 방법을 익혀봤다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;객체의 필드를 다루기 위해서 숙지해둬야할 것은,&amp;nbsp; 접근하려고 하는 필드의 &#039;접근제어&#039;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;에 대한 선언이 어떻게 되어있는지 알고 있어야 한다는 것이다. &lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;처음에는 &lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; &#039;뭐야? 이렇게 필드값을 빼낼 수 있으면 캡슐화를 할 이유가 없잖아?&#039;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;하고 생각했지만, 테스트 케이스를 작성하면서&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; &#039;아, 그 객체 안에 있는 필드명을 모르면 예외만 보겠구나.&#039;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;라고 생각하면서 테스트 케이스를 작성해보다가&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; &#039;아, 이걸 XML 등에서 정의해놓고 이 xml에서 정보를 가져와서 요렇게 해서 저렇게 할 수 있곘는데?&#039;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;라는 &#039;내가 찾던 해결책&#039;을 찾았다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 이 부분에 대해서는 나중에 공개하도록 하겠다. ^^; 오늘은 여기&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&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-198-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;!--
	&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-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&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;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>JAVA Language</category>
			<category>CLASS</category>
			<category>field</category>
			<category>getField</category>
			<category>Java</category>
			<author>허니몬</author>
			<guid>http://java.ihoney.pe.kr/198</guid>
			<comments>http://java.ihoney.pe.kr/198#entry198comment</comments>
			<pubDate>Fri, 11 Nov 2011 23:24:42 +0900</pubDate>
		</item>
		<item>
			<title>&#039;Simple&#039; Framework를 이용하여 자바 객체를 XML로 변환하기</title>
			<link>http://java.ihoney.pe.kr/197</link>
			<description>&lt;p&gt;관련 사이트 : &lt;a title=&quot;[http://simple.sourceforge.net/home.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://simple.sourceforge.net/home.php&quot;&gt;http://simple.sourceforge.net/home.php&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
자바를 위한 XML 직렬화처리 및 설정을 해주는 높은 성능의 프레임워크다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b style=&quot;color: #000000;&quot;&gt;- Simple&amp;nbsp;framework&amp;nbsp;with&amp;nbsp;powerful&amp;nbsp;capabilities&lt;/b&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b style=&quot;color: #000000;&quot;&gt;-&lt;/b&gt; &lt;b style=&quot;color: #000000;&quot;&gt;Can&amp;nbsp;handle&amp;nbsp;cycles&amp;nbsp;in&amp;nbsp;the&amp;nbsp;object&amp;nbsp;graph&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b style=&quot;color: #000000;&quot;&gt;-&lt;/b&gt; &lt;b style=&quot;color: #000000;&quot;&gt;It&amp;nbsp;requires&amp;nbsp;absolutely&amp;nbsp;no&amp;nbsp;configuration&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b style=&quot;color: #000000;&quot;&gt;-&lt;/b&gt; &lt;b style=&quot;color: #000000;&quot;&gt;Extremely&amp;nbsp;rapid&amp;nbsp;development&amp;nbsp;with&amp;nbsp;XML&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b style=&quot;color: #000000;&quot;&gt;-&lt;/b&gt; &lt;b style=&quot;color: #000000;&quot;&gt;Converts&amp;nbsp;to&amp;nbsp;and&amp;nbsp;from&amp;nbsp;human&amp;nbsp;editable&amp;nbsp;XML&lt;/b&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b style=&quot;color: rgb(0, 0, 0);&quot;&gt;- &lt;/b&gt;&lt;b style=&quot;color: #000000;&quot;&gt;Contains&amp;nbsp;an&amp;nbsp;XML&amp;nbsp;templating&amp;nbsp;system&lt;/b&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b style=&quot;color: #000000;&quot;&gt;&lt;/b&gt;&lt;br /&gt;
위의 특징을 가지고 있는 프레임워크다. 자세한 내용은 사이트에 가서 확인하기 바란다. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;아래 튜토리얼을 확인하기 바란다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;tutorial : &lt;a title=&quot;[http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php&quot;&gt;http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;hr style=&quot;height: 1px; border-width: 1px 0px 0px; border-style: dotted none none; border-color: black; -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; -moz-border-image: none; display: block;&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;간단한 예제코드&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;1. 먼저 Simple framework를 다운로드 받는다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&amp;lt; Example.java &amp;gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;brush:java&quot;&gt;  
package javastudy.simplexml;

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root
public class Example {
    
    @Element
    private String text;
    
    @Attribute
    private int index;

    public Example() {
        super();
    }

    public Example(String text, int index) {
        super();
        this.text = text;
        this.index = index;
    }

    public String getText() {
        return text;
    }

    public int getIndex() {
        return index;
    }
    
}
&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;&amp;lt;SimpleXmlTest.java&amp;gt; 테스트 코드&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;brush:java&quot;&gt;  
package javastudy.simplexml;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import java.io.File;

import org.junit.Test;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

/**
 * simple Xml serialization 프레임워크를 이용하여 객체를 XML로 변환처리 테스트
 * @author 허니몬
 * 
 * 고려사항 : 
 *  1. Java 객체를 우선 정의해줘야한다.
 */
public class SimpleXmlTest {

    /**
     * Example 클래스의 구조를 example.xml으로 변환하여 xml파일을 생성한다.
     * 이때, 객체 안에 담겨있는 데이터는 @Attribute @Element 애노테이션에 
     * 의해 xml의 attribute와 element로 정의된다. 
     */
    @Test
    public void simpleObjectToXmlTest() {
        Serializer serializer = new Persister();
        Example example = new Example(&quot;Example message&quot;, 123);
        File result = new File(&quot;example.xml&quot;);
        
        try {
            serializer.write(example, result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    @Test
    public void simpleXmlToObjectTest() {
        Serializer serializer = new Persister();
        File source = new File(&quot;example.xml&quot;);
        
        Example example = null;
        try {
            example = serializer.read(Example.class, source);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        assertThat(example.getText(), is(&quot;Example message&quot;));
        assertThat(example.getIndex(), is(123));
    }
}

&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;&amp;lt;example.xml&amp;gt; 위의 코드에서 생성된 xml&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;  
&lt;example index=&quot;123&quot;&gt;
   &lt;text&gt;Example message&lt;/text&gt;
&lt;/example&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;의 형태를 띄게 된다. 그 이외의 상세한 내용에 대해서는...&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;차근차근 해보도록 하자. 요즘 머리에 주입되는 정보들을 처리하느라 힘들다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;div&gt;
&lt;hr style=&quot;height: 1px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; border-top-width: 1px; border-top-style: dotted; border-top-color: black; border-right-color: black; border-bottom-color: black; border-left-color: black; display: block; &quot;&gt;&lt;/div&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;사용용도 : 객체(Java source)를 뼈대로 해서 xml파일을 생성하려고 할 때 사용할 수 있을 것이며,&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;이렇게 생성된 XML에 담긴 정보를 객체에 주입할여 인스턴스를 생성할 수 있을 것이다.&lt;br /&gt;
&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;
&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-197-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;!--
	&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-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&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;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>Frameworks</category>
			<category>Java</category>
			<category>object</category>
			<category>Serialization</category>
			<category>Simple</category>
			<category>xml</category>
			<author>허니몬</author>
			<guid>http://java.ihoney.pe.kr/197</guid>
			<comments>http://java.ihoney.pe.kr/197#entry197comment</comments>
			<pubDate>Mon, 07 Nov 2011 18:22:33 +0900</pubDate>
		</item>
		<item>
			<title>안드로이드에서 위치정보를 가져오지 못하는 경우, LocationManager.getKnownLastLocation 에서 null이 발생할 경우</title>
			<link>http://java.ihoney.pe.kr/196</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;안드로이드에서 위치정보를 가져오기 위해 사용하는 클래스가 LocationManager이다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;Location location = locationManager.getKnowLastLocation(LocationManager.GPS_PROVIDER);&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;의 형태로 정보를 가져오게 되는데, 앱을 개발하다가 이 API를 이용해서 위치정보를 가져오지 못하는 상황을 계속 접했다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;위치정보를 내놓지 못하는 폰이 &lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&#039;갤럭시S&#039; 였기 때문에 &#039;갤쓰레기!!&#039;라며 속으로 욕하면서 인터넷 검색을 했지만 사람들은&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;나와 비슷한 반응을 보이며 안된다고 이야기 하고 있었다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;하지만 폰에 설치된 위치정보 서비스를 제공하는 앱들은 위치정보를 정상적으로 가져오고 있었다. 그럼 왜 그런거지?&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;혹시나 하는 마음에 &lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;무선WiFi를 끄고 3G로 접속한 후에 약간의 인터넷 서핑과 위치정보 앱을 가동&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;시켰다. 이렇게 하면, &#039;위치정보가 저장되지 않을까?&#039;라는 기대를 하면서한 시도였다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;그렇게 한 후에 위의 코드를 다시 실행하니까!!&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;왠걸!&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;위치정보를 가져오는 것이다. 이런이런!!&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;다른 폰들도 확인을 해봤다. 처음에는 위치정보를 가져오지 못했었는데, 3G 로 접속해주고 위치정보 앱 실형시켜주니까&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;그 이후로는 정상적으로 동작한다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;이 위치정보를 가져오기 위해 무선WiFi에 연결한 상태에서 위치정보 앱을 실행시켰을 때는 그 정보를 가져오지 못했는데...&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;내가 기대한 바를 보란 듯이 외면해주는 안드로이드.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;div&gt;
&lt;hr style=&quot;height: 1px; border-width: 1px 0px 0px; border-style: dotted none none; border-color: black; -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; -moz-border-image: none; display: block;&quot;&gt;&lt;/div&gt;
&lt;/p&gt;&lt;p&gt;&lt;div&gt;
&lt;table style=&quot;WIDTH: 100%; BORDER-COLLAPSE: collapse; HEIGHT: 31px&quot; bgcolor=&quot;#ffffff&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;BORDER-BOTTOM: rgb(48,88,210) 1px solid; BORDER-LEFT: rgb(48,88,210) 0px solid; BORDER-TOP: rgb(48,88,210) 0px solid; BORDER-RIGHT: rgb(48,88,210) 0px solid&quot; bgcolor=&quot;#3058d2&quot; width=&quot;1%&quot;&gt;&lt;span style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold&quot; class=&quot;Apple-style-span&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;BORDER-BOTTOM: rgb(48,88,210) 1px solid; BORDER-LEFT: rgb(48,88,210) 0px solid; BORDER-TOP: rgb(48,88,210) 0px solid; BORDER-RIGHT: rgb(48,88,210) 0px solid&quot; width=&quot;99%&quot;&gt;&lt;span style=&quot;COLOR: rgb(48,88,210); FONT-SIZE: 10pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold&quot; class=&quot;Apple-style-span&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;정리&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font color=&quot;#c8056a&quot;&gt;&lt;strong&gt;&lt;span style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;&lt;span style=&quot;COLOR: rgb(48,88,210)&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style=&quot;BORDER-BOTTOM: rgb(255,70,197) 1px solid; BORDER-LEFT: rgb(48,88,210) 0px solid; BORDER-TOP: rgb(48,88,210) 0px solid; BORDER-RIGHT: rgb(48,88,210) 0px solid&quot; width=&quot;100%&quot;&gt;&lt;span style=&quot;FONT-SIZE: 10pt&quot;&gt;&lt;span style=&quot;FONT-FAMILY: Gulim&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;font face=&quot;굴림&quot;&gt;&lt;span style=&quot;FONT-SIZE: 9pt&quot;&gt;&lt;span style=&quot;COLOR: rgb(92,127,176); FONT-WEIGHT: bold&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;1. 안드로이드는 오랫동안 꺼져있다가 켜지면 위치정보를 가지고 있지 않다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;2. WiFi만 연결해서는 네트워크를 이용한 위치정보를 가져오지 못한다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;3. GPS를 켜고 위치정보를 가져올떄까지 기다리는 리스너를 통해서 위치정보를 가져올 수는 있다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;4. &lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;내가 구현한 방식&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; : GPS를 10초동안 동작시켜서 그동안 위치정보를 가져오면 그 정보를 등록하고, 그렇지 않을 경우에는 네트워크 위치정보를 가져와서 사용하도록 만들었다. &lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;오랫동안 GPS 정보를 가져오는 것을 꺼려했다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;5. &lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;문제의 원인&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; : 그런데 테스트에 사용된 스마트폰들은 개발 이후 꽤 오랜시간을 꺼져있는 상태로 방치되었던 탓에 이런 위치정보 등이 소거된 상태였을 것이다. 내가 만든 방식과 &lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;WiFi 에만 연결된 형태로 인해서 위치정보를 가져올 수가 없었다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;6. &lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;조치방법&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; : &lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;3G를 켜고 인터넷 서핑과 위치정보 서비스를 이용. 개인적인 생각으로는 &#039;3G&#039;만 켜서 잠시 내버려둬도 될 것이다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
&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-196-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;!--
	&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-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&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;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>getKnownLastLocation</category>
			<category>LocationManager</category>
			<category>안드로이드</category>
			<category>위치정보 가져오지 못할 떄</category>
			<author>허니몬</author>
			<guid>http://java.ihoney.pe.kr/196</guid>
			<comments>http://java.ihoney.pe.kr/196#entry196comment</comments>
			<pubDate>Wed, 02 Nov 2011 14:55:16 +0900</pubDate>
		</item>
		<item>
			<title>WebView CookieManager removeSessionCookie() : 갤럭시S 개 썩을!</title>
			<link>http://java.ihoney.pe.kr/195</link>
			<description>&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;프로젝트에서 하이브리드앱 형태로 해서 모바일웹페이지를 안드로이드의 웹뷰에서 보여주며 동작시키는 앱을 만들었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;제조사마다 다양한 종류의 디바이스에서 테스트를 해봐야하는 안드로이드 개발은 앞으로도 고역이 될 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;얼마간 나를 괴롭히던 녀석이 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;로그인을 할때 CookieManager를 이용해서 웹뷰의 쿠키 Sync를 맞춰두고 로그인상태를 유지하도록 만들었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;이 싱크를 맞추는 작업이 지금까지도 곤혹스럽다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;갤럭시S는 사용자가 많다. 그런데 가장 이상한 안드로이드폰이 갤럭시S다. 갤럭시S를 제외한 안드로이드폰들에서는&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;정상적으로 동작하는 앱이 꼭! 갤럭시S에서는 다르게 반응하는 것이다. 후아.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;인터넷을 뒤져보다가 이 문제에 대한 해결책을 찾았다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div style=&quot;border-style: solid; border-width: 1px; border-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold; color: rgb(92, 127, 176);&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;참고 Url&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; :&lt;/span&gt; &lt;a title=&quot;[http://cdkkcdkktoandroid.tistory.com/27]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://cdkkcdkktoandroid.tistory.com/27&quot;&gt;http://cdkkcdkktoandroid.tistory.com/27&lt;/a&gt;&lt;br /&gt;
&lt;span style=&quot;font-weight: bold; color: rgb(92, 127, 176);&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;
CookieManager 소스 url&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; :&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;[http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/webkit/CookieManager.java]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/webkit/CookieManager.java&quot;&gt;http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/webkit/CookieManager.java&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;brush:java&quot;&gt;  
/**
 * Remove all session cookies, which are cookies without expiration date
 */
public void removeSessionCookie() {
    final Runnable clearCache = new Runnable() {
        public void run() {
            synchronized(CookieManager.this) {
                Collection&lt;arraylist&lt;cookie&gt;&amp;gt; cookieList = mCookieMap.values();
                Iterator&lt;arraylist&lt;cookie&gt;&amp;gt; listIter = cookieList.iterator();
                while (listIter.hasNext()) {
                    ArrayList&lt;cookie&gt; list = listIter.next();
                    Iterator&lt;cookie&gt; iter = list.iterator();
                    while (iter.hasNext()) {
                        Cookie cookie = iter.next();
                        if (cookie.expires == -1) {
                            iter.remove();
                        }
                    }
                }
                CookieSyncManager.getInstance().clearSessionCookies();
            }
        }
    };
    new Thread(clearCache).start();
}
&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;
위의 소스를 보면 마지막에 new Thread(clearCache).start()가 실행되는 것이 보인다. CookieManager.removeSessionCookie() 가&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; 스레드로 실행되는 것을 확인할 수 있다. &lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;갤럭시S가 다른폰들과 다른 반응을 보인 부분이 이 부분이다.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;인터넷에 해결방법이 있을까?&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;하는 생각으로 인터넷을 뒤적거리다가 해결방법을 찾았다.&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div style=&quot;border-style: solid; border-width: 1px; border-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold; color: rgb(92, 127, 176);&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;jinu&#039;s blog : Android webview cookie sync 문제&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; : &lt;/span&gt;&lt;a title=&quot;[http://jinu.info/blog/372]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://jinu.info/blog/372&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;http://jinu.info/blog/372&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;1년 전에 작성된 글인데, 글의 중간에 보면 &lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div style=&quot;border-style: solid; border-width: 1px; border-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&lt;p&gt;&lt;code class=&quot;keyword&quot; style=&quot;margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 0px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: rgb(255, 255, 255); text-align: left; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 13px; font-family: Consolas, Monaco, &#039;Bitstream Vera Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace !important; font-weight: bold !important; font-style: normal; font-size: 12px; display: inline !important; color: rgb(0, 102, 153) !important; font-variant: normal; letter-spacing: normal; orphans: 2; text-indent: -18px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: initial initial !important; background-repeat: initial initial !important; &quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;try&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 0, 0); font-family: Consolas, Monaco, &#039;Bitstream Vera Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 13px; orphans: 2; text-align: left; text-indent: -18px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); display: inline !important; float: none; &quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;code class=&quot;plain&quot; style=&quot;margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 0px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: rgb(255, 255, 255); text-align: left; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 13px; font-family: Consolas, Monaco, &#039;Bitstream Vera Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace !important; font-weight: normal; font-style: normal; font-size: 12px; display: inline !important; color: rgb(0, 0, 0); font-variant: normal; letter-spacing: normal; orphans: 2; text-indent: -18px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: initial initial !important; background-repeat: initial initial !important; &quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;{ Thread.sleep(&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;value&quot; style=&quot;margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 0px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: rgb(255, 255, 255); text-align: left; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 13px; font-family: Consolas, Monaco, &#039;Bitstream Vera Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace !important; font-weight: normal; font-style: normal; font-size: 12px; display: inline !important; color: rgb(0, 153, 0) !important; font-variant: normal; letter-spacing: normal; orphans: 2; text-indent: -18px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: initial initial !important; background-repeat: initial initial !important; &quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;500&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;plain&quot; style=&quot;margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 0px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: rgb(255, 255, 255); text-align: left; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 13px; font-family: Consolas, Monaco, &#039;Bitstream Vera Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace !important; font-weight: normal; font-style: normal; font-size: 12px; display: inline !important; color: rgb(0, 0, 0); font-variant: normal; letter-spacing: normal; orphans: 2; text-indent: -18px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: initial initial !important; background-repeat: initial initial !important; &quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;); }&lt;/span&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code class=&quot;keyword&quot; style=&quot;margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 0px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: rgb(255, 255, 255); text-align: left; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 13px; font-family: Consolas, Monaco, &#039;Bitstream Vera Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace !important; font-weight: bold !important; font-style: normal; font-size: 12px; display: inline !important; color: rgb(0, 102, 153) !important; font-variant: normal; letter-spacing: normal; orphans: 2; text-indent: -18px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: initial initial !important; background-repeat: initial initial !important; &quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;catch&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 0, 0); font-family: Consolas, Monaco, &#039;Bitstream Vera Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 13px; orphans: 2; text-align: left; text-indent: -18px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); display: inline !important; float: none; &quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;code class=&quot;plain&quot; style=&quot;margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 0px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: rgb(255, 255, 255); text-align: left; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 13px; font-family: Consolas, Monaco, &#039;Bitstream Vera Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace !important; font-weight: normal; font-style: normal; font-size: 12px; display: inline !important; color: rgb(0, 0, 0); font-variant: normal; letter-spacing: normal; orphans: 2; text-indent: -18px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: initial initial !important; background-repeat: initial initial !important; &quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(Exception e) {}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;plain&quot; style=&quot;margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 0px !important; border-style: initial !important; border-color: initial !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: rgb(255, 255, 255); text-align: left; float: none !important; vertical-align: baseline !important; position: static !important; left: auto !important; top: auto !important; right: auto !important; bottom: auto !important; height: auto !important; width: auto !important; line-height: 13px; font-family: Consolas, Monaco, &#039;Bitstream Vera Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace !important; font-weight: normal; font-style: normal; font-size: 12px; display: inline !important; color: rgb(0, 0, 0); font-variant: normal; letter-spacing: normal; orphans: 2; text-indent: -18px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: initial initial !important; background-repeat: initial initial !important; &quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;위의 코드가 핵심이다. 500ms의 강제 대기시간을 주어서 cookieManager가 세션쿠키를 삭제할 수 있는 충분한 시간적인 여유를 부여한 후에 진행되도록 하는 것이다. &lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold; font-size: 11pt;&quot;&gt;&amp;lt;&amp;lt; 위의 내용을 힌트삼아서 수정한 소스 &amp;gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;brush:java&quot;&gt;  
public void removeAllCookie() {
        Log.d(LOG_TAG, &quot;webViewHelper removeAllCookie execute.&quot;);
        cookieManager.removeAllCookie();
        threadSleep();
        setDefaultCookies();
        CookieSyncManager.getInstance().sync();
    }

    public void removeSessionCookies() {
        Log.d(LOG_TAG, &quot;webViewHelper removeSessionCookies execute.&quot;);
        cookieManager.removeSessionCookie();
        threadSleep();
        this.httpClient = null;
        setDefaultCookies();
        CookieSyncManager.getInstance().sync();
    }

    private void threadSleep() {
        try {
            Thread.sleep(500);
        } catch (Exception e) {
            Log.d(LOG_TAG, &quot;thread Exception!&quot;);
        }
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;처럼 처리했다.&lt;/span&gt;&lt;br /&gt;
&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-195-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;!--
	&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-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&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;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>Android go andromeda</category>
			<category>Android</category>
			<category>Cookie</category>
			<category>cookiemanager</category>
			<category>removeSessionCookie</category>
			<category>Sync</category>
			<category>thread</category>
			<category>안드로이드</category>
			<author>허니몬</author>
			<guid>http://java.ihoney.pe.kr/195</guid>
			<comments>http://java.ihoney.pe.kr/195#entry195comment</comments>
			<pubDate>Sun, 30 Oct 2011 00:13:23 +0900</pubDate>
		</item>
		<item>
			<title>Maven을 이용하여 간단하게 Struts2 프로젝트 생성하기</title>
			<link>http://java.ihoney.pe.kr/194</link>
			<description>&lt;p&gt;참고 사이트 :&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;http://struts.apache.org/2.2.3/docs/struts-2-maven-archetypes.html&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 메이븐을 이용하면 의존성을 가진 라이브러리들까지 손쉽게 다운로드 받아서 프로젝트를 생성할 수가 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 2줄의 명령어만 넣어주면 된다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;스트럿츠 archetype을 생성하는 방법은 두 종류가 있다. 둘 중 마음에 드는 방법을 선택한다.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;hr style=&quot;height: 1px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; border-top-width: 1px; border-top-style: dotted; border-top-color: black; border-right-color: black; border-bottom-color: black; border-left-color: black; display: block; &quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;1.1. 메이븐의 archetype을 이용하여 스트럿츠 프로젝트를 생성(generate)한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - 스트럿츠 2.2.3.1 버전을 사용했다.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;border-style: solid; border-width: 1px; border-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold; color: rgb(92, 127, 176);&quot;&gt;mvn archetype:generate -B &lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(92, 127, 176);&quot;&gt;&lt;br /&gt;
-DgroupId=tutorial &lt;br /&gt;
                       -DartifactId=tutorial &lt;br /&gt;
                       -DarchetypeGroupId=org.apache.struts &lt;br /&gt;
                       -DarchetypeArtifactId=struts2-archetype-blank &lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: rgb(92, 127, 176);&quot;&gt;&lt;br /&gt;
-DarchetypeVersion=&amp;lt;version&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;pre class=&quot;code-java&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-left: 0px; margin-bottom: 10px; margin-right: 0px; text-align: left; overflow-x: auto; overflow-y: auto; &quot;&gt;1.2. 스트럿츠 archetype 을 생성한다. &lt;br /&gt;
&lt;div style=&quot;border-style: solid; border-width: 1px; border-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&lt;span style=&quot;color: rgb(92, 127, 176);&quot;&gt;mvn archetype:generate -DarchetypeCatalog=http:&lt;/span&gt;&lt;span class=&quot;code-comment&quot; style=&quot;color: rgb(92, 127, 176); background-color: inherit;&quot;&gt;//struts.apache.org/&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;/pre&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Courier; font-size: 11px; line-height: 13px; background-color: rgb(240, 240, 240); &quot;&gt;&lt;pre class=&quot;code-java&quot; style=&quot;color: rgb(0, 0, 0); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-left: 0px; margin-bottom: 10px; margin-right: 0px; text-align: left; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;div&gt;
&lt;hr style=&quot;height: 1px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; border-top-width: 1px; border-top-style: dotted; border-top-color: black; border-right-color: black; border-bottom-color: black; border-left-color: black; display: block; &quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;2. 메이븐으로 생성한 프로젝트를 이클립스에서 사용할 수 있는 프로젝트로 변경한다.&lt;br /&gt;
&lt;/p&gt;
&lt;div style=&quot;border-style: solid; border-width: 1px; border-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&lt;span style=&quot;font-weight: bold; color: rgb(92, 127, 176);&quot;&gt;mvn eclipse:eclipse -Dwtpversion=1.5&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;/pre&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 0, 0); font-family: Courier; font-size: 11px; line-height: 13px; background-color: rgb(240, 240, 240); &quot;&gt;&lt;pre class=&quot;code-java&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-left: 0px; margin-bottom: 10px; margin-right: 0px; text-align: left; overflow-x: auto; overflow-y: auto; &quot;&gt;이렇게 하면 된다. &lt;/pre&gt;&lt;pre class=&quot;code-java&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-left: 0px; margin-bottom: 10px; margin-right: 0px; text-align: left; overflow-x: auto; overflow-y: auto; &quot;&gt;그럼 이클립스에서 사용할 수 있는 프로젝트가 간단하게 생성된다. &lt;/pre&gt;&lt;pre class=&quot;code-java&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-left: 0px; margin-bottom: 10px; margin-right: 0px; text-align: left; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;br /&gt;
&lt;/pre&gt;&lt;pre class=&quot;code-java&quot; style=&quot;padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 10px; margin-left: 0px; margin-bottom: 10px; margin-right: 0px; text-align: left; overflow-x: auto; overflow-y: auto; &quot;&gt;1.2번과 2번을 같이하는 게... 편한 것 같기도 하다.&lt;br /&gt;
&lt;/pre&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;hr style=&quot;height: 1px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-right-style: none; border-bottom-style: none; border-left-style: none; border-color: initial; border-top-width: 1px; border-top-style: dotted; border-top-color: black; border-right-color: black; border-bottom-color: black; border-left-color: black; display: block; &quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; 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-color: rgb(238, 238, 238); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;color: rgb(92, 127, 176);&quot;&gt;생성 과정 기록 :&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;HoneyBook:dreaminfra ihoneymon$ &lt;/span&gt;&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;mvn archetype:generate -DarchetypeCatalog=http://struts.apache.org/&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Scanning for projects...&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Building Maven Stub Project (No POM) 1&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO]&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] &amp;gt;&amp;gt;&amp;gt; maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom &amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO]&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] &amp;lt;&amp;lt;&amp;lt; maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom &amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO]&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] --- maven-archetype-plugin:2.1:generate (default-cli) @ standalone-pom ---&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Generating project in Interactive mode&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;//원하는 유형을 선택하고 groupId, articleId 를 임의에 따라 지정한다.&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;Choose archetype:&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;1: http://struts.apache.org/ -&amp;gt; org.apache.struts:struts2-archetype-blank (Struts 2 Archetypes - Blank)&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;2: http://struts.apache.org/ -&amp;gt; org.apache.struts:struts2-archetype-convention (Struts 2 Archetypes - Blank Convention)&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;3: http://struts.apache.org/ -&amp;gt; org.apache.struts:struts2-archetype-dbportlet (Struts 2 Archetypes - Database Portlet)&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;4: http://struts.apache.org/ -&amp;gt; org.apache.struts:struts2-archetype-plugin (Struts 2 Archetypes - Plugin)&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;5: http://struts.apache.org/ -&amp;gt; org.apache.struts:struts2-archetype-portlet (Struts 2 Archetypes - Portlet)&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;6: http://struts.apache.org/ -&amp;gt; org.apache.struts:struts2-archetype-starter (Struts 2 Archetypes - Starter)&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 1&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;Define value for property &#039;groupId&#039;: : StudyStruts&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;Define value for property &#039;artifactId&#039;: : StudyStruts&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;Define value for property &#039;version&#039;: &amp;nbsp;1.0-SNAPSHOT: :&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;Define value for property &#039;package&#039;: &amp;nbsp;StudyStruts: :&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;Confirm properties configuration:&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;groupId: StudyStruts&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;artifactId: StudyStruts&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;version: 1.0-SNAPSHOT&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;package: StudyStruts&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;&amp;nbsp;Y: : y&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] ----------------------------------------------------------------------------&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Using following parameters for creating project from Archetype: struts2-archetype-blank:2.2.1&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] ----------------------------------------------------------------------------&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Parameter: groupId, Value: StudyStruts&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Parameter: artifactId, Value: StudyStruts&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Parameter: version, Value: 1.0-SNAPSHOT&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Parameter: package, Value: StudyStruts&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Parameter: packageInPathFormat, Value: StudyStruts&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Parameter: package, Value: StudyStruts&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Parameter: version, Value: 1.0-SNAPSHOT&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Parameter: groupId, Value: StudyStruts&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Parameter: artifactId, Value: StudyStruts&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] project created from Archetype in dir: /Users/ihoneymon/Documents/workspaces/dreaminfra/StudyStruts&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] BUILD SUCCESS&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Total time: 15.347s&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Finished at: Wed Oct 12 10:45:18 KST 2011&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Final Memory: 7M/81M&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;HoneyBook:dreaminfra ihoneymon$ cd StudyStruts/&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;HoneyBook:StudyStruts ihoneymon$ &lt;/span&gt;&lt;/font&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#000000&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;mvn eclipse:eclipse -Dwtpversion=1.5&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Scanning for projects...&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Building Struts 2 Blank Webapp 1.0-SNAPSHOT&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO]&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] &amp;gt;&amp;gt;&amp;gt; maven-eclipse-plugin:2.8:eclipse (default-cli) @ StudyStruts &amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO]&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] &amp;lt;&amp;lt;&amp;lt; maven-eclipse-plugin:2.8:eclipse (default-cli) @ StudyStruts &amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO]&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] --- maven-eclipse-plugin:2.8:eclipse (default-cli) @ StudyStruts ---&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Adding support for WTP version 1.5.&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Using Eclipse Workspace: /Users/ihoneymon/Documents/workspaces/dreaminfra&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[WARNING] Workspace defines a VM that does not contain a valid jre/lib/rt.jar: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] no substring wtp server match.&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Using as WTP server : VMware vFabric tc Server Developer Edition (Runtime) v2.5&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAINER&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Not writing settings - defaults suffice&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Wrote Eclipse project for &quot;StudyStruts&quot; to /Users/ihoneymon/Documents/workspaces/dreaminfra/StudyStruts.&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO]&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] BUILD SUCCESS&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Total time: 2.254s&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Finished at: Wed Oct 12 10:45:34 KST 2011&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] Final Memory: 6M/81M&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;[INFO] ------------------------------------------------------------------------&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;span style=&quot;font-size: 8pt;&quot;&gt;HoneyBook:StudyStruts ihoneymon$&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;이클립스를 열고, 이 StudyStruts라는 폴더를 import하면 스트럿츠 라이브러리가 설치된 프로젝트를 바로 이용해볼 수 있다. 여기에는 간단한 예제 코드가 포함되어 있다. 이 프로젝트를 서버에 추가하고 실행해보면 다음처럼 나온다.&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://cfile26.uf.tistory.com/image/127CA0464E94F3151DC70E&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;스크린샷 2011-10-12 오전 10.52.59.png&quot; height=&quot;212&quot; width=&quot;600&quot;/&gt;&lt;/div&gt;자! 스트럿츠를 시작해보자.&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-194-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;!--
	&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-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&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;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>Frameworks</category>
			<category>maven</category>
			<category>struts2</category>
			<category>메이븐</category>
			<category>스트럿츠</category>
			<author>허니몬</author>
			<guid>http://java.ihoney.pe.kr/194</guid>
			<comments>http://java.ihoney.pe.kr/194#entry194comment</comments>
			<pubDate>Wed, 12 Oct 2011 09:33:38 +0900</pubDate>
		</item>
		<item>
			<title>자바 음력날짜 얻기</title>
			<link>http://java.ihoney.pe.kr/193</link>
			<description>&lt;p&gt;관련 사이트 :&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(219, 232, 251); border-right-color: rgb(219, 232, 251); border-bottom-color: rgb(219, 232, 251); border-left-color: rgb(219, 232, 251); background-color: rgb(219, 232, 251); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;&lt;p&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;b&gt;&amp;nbsp; - Joda Time :&amp;nbsp;http://joda-time.sourceforge.net/quickstart.html&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#5c7fb0&quot;&gt;&lt;b&gt;&amp;nbsp; - ICU4j calendar :&amp;nbsp;http://userguide.icu-project.org/datetime/calendar#TOC-Calendar&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;
&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;쪼다타임(Joda time)은 자바의 &amp;nbsp;Date, Time class를 대신할 수 있는 DateTime 클래스를 제공한다. &amp;nbsp; 날짜, 시간 정보를 손쉽게 접근하고 가공할 수 있는 오픈소스다. 퀵스타트만 봐도 손쉽게 사용할 수 있다. ^^;&lt;/p&gt;
&lt;p&gt;쪼다타임이 편리하기는 한데, 음력 처리를 해주지 못하는 걸 알고는 인터넷을 뒤져보다가 IBM에서 ICU(International Componenets for Unicode)라는 이름으로 제공하는 컴포넌트다. 그 중에 달력처리 부분에서 ChineseCalendar를 이용해서 음력처리가 가능한 것을 발견하고는 간단하게 테스트 코드를 작성해본다.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;pre class=&quot;brush:java&quot;&gt;  
/**
 * Create Date : 2011. 10. 11.
 */
package honeymon.study.test;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;

import com.ibm.icu.util.ChineseCalendar;

/**
 * @author 허니몬
 */
public class LunarCalendarTest {
    
    private ChineseCalendar chineseCal;
    private DateTime dateTime;
    
    @Before
    public void setUp() {
        chineseCal = new ChineseCalendar();
        dateTime = new DateTime();
    }

    /**
     *  왜 중국음력에서 달에 +1을 하는 걸까?
     *  +1은 회합주기?
     *  2011/10/11 음력은 2011/09/15일
     */
    @Test
    public void 음력테스트() {
        chineseCal.setTimeInMillis(dateTime.getMillis());
        assertThat(chineseCal.get(ChineseCalendar.MONTH) + 1, is(9));
        assertThat(chineseCal.get(ChineseCalendar.DAY_OF_MONTH), is(15));
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;&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-193-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;!--
	&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-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&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;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
</description>
			<category>JAVA Language</category>
			<category>chineseCalendar</category>
			<category>DateTime</category>
			<category>JodaTime</category>
			<category>Lunar</category>
			<category>음력</category>
			<author>허니몬</author>
			<guid>http://java.ihoney.pe.kr/193</guid>
			<comments>http://java.ihoney.pe.kr/193#entry193comment</comments>
			<pubDate>Tue, 11 Oct 2011 16:51:29 +0900</pubDate>
		</item>
	</channel>
</rss>

