tag:blogger.com,1999:blog-31529006589899550662024-03-13T08:05:53.755-07:00蒼月 AzurothAnonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.comBlogger109125tag:blogger.com,1999:blog-3152900658989955066.post-11743962313264428022012-10-23T20:39:00.002-07:002012-10-23T20:39:38.153-07:00불라자드 베타 테스터 인증와 와 불라자드 베타 테스터가 되었으니 이것은 가문의 영광이 아닌기...!!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-XwXIgXBI0BI/UIdi4R5ROdI/AAAAAAAAG-4/tTCDN0F0CgA/s1600/blizzard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="192" src="http://1.bp.blogspot.com/-XwXIgXBI0BI/UIdi4R5ROdI/AAAAAAAAG-4/tTCDN0F0CgA/s320/blizzard.png" width="320" /></a></div>
<br />Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-40055306832223680802012-10-06T01:47:00.001-07:002012-10-06T01:47:00.949-07:00 YG new girl group, their official debut is confirmed next year January.<b id="internal-source-marker_0.9181906238663942" style="font-size: 15px; font-weight: normal; text-indent: 246px;"><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;">YG’s new girl group is confirmed their debut is January, next year. </span><br /><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;">One of the most big K-pop company YG’s Yang Hyun-Seok says to Star News their debut is January next year.</span><br /><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;">Yang Hyun-Seok says “G-Dragon is occupying all producing of their album but he is performing his solo album so it is little bit delayed” and “This month has Epic High and Lee Hai’s album release and next month is for 2NE1 and Tae-Yang. So new girl’s debut is next year”</span><br /><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;">Yang Hyun-Seok says “New girl is YG’s brand new so we start next year with this girls”.</span><br /><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-family: Arial; vertical-align: baseline; white-space: pre-wrap;">Formerly YG has announed five member of new girl group in their high teens in their blog YG Life.</span><br /><span style="background-color: white; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; vertical-align: baseline; white-space: pre-wrap;">Last 2010, Super Star K2 6 finalist Kim Eun-bi born in 1993, Super Star K3’s US finalist Yuna Kim born in 1994, Kim Jeni who showed beautiful figure and one more mistery girl who showed her excellent dance technique and caucasian and Korean hybrid girl is the girls.</span><br /><span style="background-color: white; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; vertical-align: baseline; white-space: pre-wrap;">YG is not showing more detailed feature of the girls but it is after 2009’s 2NE1 debut so it is interested by many people.</span><br /><span style="background-color: white; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; vertical-align: baseline; white-space: pre-wrap;">And YG don’t talk about final member number and other things. </span></b>Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-89451761161562318192012-09-01T22:02:00.002-07:002012-09-01T22:02:38.362-07:00YG Mystery girl Kim Jenny, innocent beauty and powerful rap, reversal attraction is announced.<br />
<div>
<span style="font-family: Tahoma; text-align: -webkit-auto;">Kim Jenny as a member of new girl group in YG, she revealed her reversal attraction.</span><div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
Kim Jenny appeared in YG official blog, YG Life. A video titled as 'YG Trainee Jenne Kim' showed mystery girl Kim Jenny's fast rap performance.</div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
Kim Jenny viewed cute and powerful attraction as various her charm. In front of vivid color, she showed teenager's cheerful attraction. </div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
And she also showed G-Dragon's hair style. She showed available language as English and Japanese so she showed English rap.</div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
Kim Jenny is heroine in G-Dragon's 'That XX' music video. YG Entertainment chose her because her style is going well with G-Dragon's music. The music is revealed on 1st of September.</div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
<br /></div>
<div style="font-family: Tahoma; text-align: -webkit-auto;">
And Kim Jenny's YG new girl group is debut on October. This girl group is 3 year difference from 2NE1 in YG. And contains Mnet Super Star's Kim Eunbim, Super Star 3's Yuna Kim and 1995 born 16 years old hybrid member.</div>
</div>
Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-58022457613870557942012-09-01T04:31:00.001-07:002012-09-01T04:31:03.804-07:00Rap performance is revealed by Kim Jenny. Mystery girl is unveiled now.
<br />
<div class="p1">
Kim Jenny's rap capability is revealed.</div>
<div class="p2">
<br /></div>
<div class="p1">
YG entertainment announced 'YG Trainee Jenny Kim' video in official blog on 30th of August.</div>
<div class="p1">
In the video pictures of Jenny and rap performances are contained. So far, no informations are revealed so Jenny Kim is known as mystery girl.</div>
<div class="p2">
<br /></div>
<div class="p1">
She unveiled cute and lovely girl's attractive forms in the beginning of video but she also revealed her rap performance in the end of video. She showed fancy style of shirts and beanie.</div>
<div class="p2">
<br /></div>
<div class="p1">
People also say about YG's Girl's generation new girl group's debut. Kim Jenny also appeared in G-Dragon's new single 'That XX' music video. YG's Gilr's generation also has Mnet super star's Kim Eunbi and MBC Great Born's Yuna Kim and it is 9 members.</div>
<div class="p2">
<br /></div>
<div class="p1">
Kim Jenny is also known for her 3 language skill.</div>
Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-89494317520901396202012-05-12T20:23:00.000-07:002012-05-12T20:23:12.462-07:00덕의 직업을 가지다...이제 YG에서 새 걸그룹이 나온다고 하니...<br />
이에따라 덕을 키우기 위하여 이에 관련한 직업을 가지게 되었으니...<br />
<br />
Blogger Admin, Designer Admin 이라는 이름으로 YG 새 걸그룹에 대한 기사를<br />
영문으로 번역하여 블로그에 올려주는 일을 정식으로 하고 있습니다.<br />
<br />
ygnewgirl.wordpress.com 을 주목해 주세요.<br />
<br />
벌써 내 이름이 달린 기사가 나왔습니다.Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com2tag:blogger.com,1999:blog-3152900658989955066.post-89945177872347446442011-08-02T04:49:00.000-07:002011-08-02T04:50:17.561-07:00Cassandra (11/12)<div style="mso-element:para-border-div;border-top:solid windowtext 3.0pt; border-left:none;border-bottom:solid windowtext 3.0pt;border-right:none; padding:0cm 0cm 0cm 0cm"> <h1><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼포먼스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">튜닝</span></h1> </div> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;mso-pagination:widow-orphan; word-break:keep-all"><span style="font-size:11.0pt;font-family:굴림;mso-ascii-font-family: Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black; mso-font-kerning:0pt">이</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif"; mso-fareast-font-family:굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt;font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family: Arial;mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">챕터에서</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">우리는</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">카산드라가</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">퍼포먼스를</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">낫게</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">하기</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">위해서</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">어떻게</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">튜닝하는지</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">살펴본다</span><span lang="EN-US" style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt">. </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">설정</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">파일에서</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">다양한</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">셋팅이</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">우리가</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">이것을</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">하게</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">돕는다</span><span lang="EN-US" style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt">. </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">우리는</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">하드웨어</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">선택과</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">설정에의</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">몇가지</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">포인트를</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">보여준다</span><span lang="EN-US" style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt">. </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">카산드라</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">설정</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">파일에서</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">몇</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">가지</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">독립된</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">설정이</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">있다</span><span lang="EN-US" style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt">. </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">그럼에도</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">디폴트가</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">종종</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">적당하다</span><span lang="EN-US" style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt">. </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">당신이</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">그</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">디폴트를</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">바꿔야</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">할</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">몇</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">가지</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">환경이</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">있을</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">수는</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">있다</span><span lang="EN-US" style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt">. </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">이</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">챕터에서</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">그것들중</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">몇가지를</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">살펴본다</span><span lang="EN-US" style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt">.</span><span lang="EN-US" style="font-size: 13.5pt;mso-fareast-font-family:굴림;color:black;mso-font-kerning:0pt"><br /></span><span style="font-size:11.0pt;font-family:굴림;mso-ascii-font-family:Arial; mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;color:black;mso-font-kerning: 0pt">일반적인</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif"; mso-fareast-font-family:굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt;font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family: Arial;mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">법칙으로</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">클러스터에</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">단지</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">노드를</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">추가하는</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">것이</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">퍼포먼스를</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">더</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">나이지게</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">하지는</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">않는다는</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">것을</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">기억해야</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">한다</span><span lang="EN-US" style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt">. </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">당신은</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">클라이언트로부터</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">모든</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">노드로</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">트래픽을</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">보내야</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">한다</span><span lang="EN-US" style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt">. </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">그리고</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">데이터를</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">적당히</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">복사할</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">필요가</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">있다</span><span lang="EN-US" style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt">. </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">클라이언트의</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">요청을</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">재배분하지</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">않는다면</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">새로운</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">노드는</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">잠깐동안</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">멍하니</span><span style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt"> </span><span style="font-size:11.0pt; font-family:굴림;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial; mso-bidi-font-family:Arial;color:black;mso-font-kerning:0pt">있게된다</span><span lang="EN-US" style="font-size:11.0pt;font-family:"Arial","sans-serif";mso-fareast-font-family: 굴림;color:black;mso-font-kerning:0pt">.</span><span lang="EN-US" style="font-size: 13.5pt;mso-fareast-font-family:굴림;color:black;mso-font-kerning:0pt"><o:p></o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">또한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">함께</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">발매되는</span><span lang="EN-US"> Python </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스트레스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">테스트</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">도구를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하는지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">볼것이며</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">카산드라에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적당한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로드를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수행해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스트레스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">테스트</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">환경에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">행동하는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대략</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">튠하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단계적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">환경에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">준비가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되었다고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">확신할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장소</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">업데이트</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동작을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다루는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부분동작으로서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰기를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋트가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그것들의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하는동안</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것들을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다루는지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이해하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">둘의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">목적이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">고려되어야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span></p> <p class="MsoNormal"><span lang="EN-US">Commit log</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일시적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저장소처럼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생각되어질</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">카산드라가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">업데이트를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">받음에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값은</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에</span><span lang="EN-US"> raw</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">순차적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파일에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">덭붙여지는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것처럼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">바로바로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">씌어지게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">셧다운하거나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">뜻하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다운되어도</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">없어지지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않도록</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보장한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시작하였을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">불려지기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사실은</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">읽혀지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">유일한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시간이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클라이언트는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">읽지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그러나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일반적인</span><span lang="EN-US"> commit log </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쓰기는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">멈춘다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그래서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클라이언트가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰기가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">끝날</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때까지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기다리도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요청하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼포먼스에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">치명적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">영향을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파일은</span><span lang="EN-US"> Sorted String Tables (SSTables) </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">표현한다</span><span lang="EN-US">. Commit log</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">와는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">달리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파일에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비동기적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">씌어진다</span><span lang="EN-US">. SSTable </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">압축</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동안에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">공간을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">늘이기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주기적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">합쳐진다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">키를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">합치고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">융합하며</span><span lang="EN-US"> tombstone</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지운다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">읽기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동작은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메모리안의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐쉬를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">참조할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있으며</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우에는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">직접적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디스크에있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파일에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">직접적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">갈</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">카산드라에게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기가바이트의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">허락한다면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">행</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐쉬와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">키</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐쉬가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">접근될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼포먼스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">향상할수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">Commit log</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주기적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제거된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">성공적인</span><span lang="EN-US"> flush</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">추가된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">할당된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파일에</span><span lang="EN-US"> flush </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">했을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">따르는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이유로</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사이즈만큼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">커지지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그래서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">디스크가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그만큼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">클</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하드웨어를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">고를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">고려되어</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">져야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들어</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라가</span><span lang="EN-US"> flush</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행하면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">서버로그에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아래와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보게된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 18:26:11,497 Enqueuing flush of Memtable-LocationInfo@26830618(52 bytes, 2</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">operations)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 18:26:11,497 Writing Memtable-LocationInfo@26830618(52 bytes, 2 operations)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 18:26:11,732 Completed flushing /var/lib/cassandra/data/system/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">LocationInfo-2-Data.db</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 18:26:11,732 <b>Discarding obsolete commit log:<o:p></o:p></b></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">CommitLogSegment(/var/lib/cassandra/commitlog/CommitLog-1278894011530.log)</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span><span lang="EN-US"> commit log </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">디렉토리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">확인하면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지워졌다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디폴트로</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파일은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아래의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위치에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저장되어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">진다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><commitlogdirectory>/var/lib/cassandra/commitlog</commitlogdirectory></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><datafiledirectories></datafiledirectories></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><datafiledirectory>/var/lib/cassandra/data</datafiledirectory></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">바꾸어서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파일과</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위치에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">원한다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디렉토리를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지정할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">테스트를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위치를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">바꿀</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">느끼지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">못할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그러나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파일과</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼포먼스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하드</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디스크의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위치에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">각각</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">추천한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터베이스처럼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">특히</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하드</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디스크와</span><span lang="EN-US"> CPU</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속도에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">영향을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">받는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그래서</span><span lang="EN-US"> QA</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생산</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">환경에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">빠른</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">디스크를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가지는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">확인하라</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적어도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두개를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두어</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일이</span><span lang="EN-US"> IO</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경쟁하지는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하라</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">두개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">빠른</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로세서를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가진것보다도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로세싱</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">코어를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">중요하다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.2.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Reply Timeout</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">Reply timeout</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요청이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실패했다고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">판단하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">얼마나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오랫동안</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대답을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기다리는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관계형</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터베이스와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메시징</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시스템에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">공통적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span><span lang="EN-US"> RpcTimeoutInMillis </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">디폴트로</span> <span lang="EN-US">5,000 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">즉</span><span lang="EN-US"> 5</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">초이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.3.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Commit Logs</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">새로운</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">멈추거나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">또는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">또다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">만드는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그만하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어느</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">크기까지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">계속</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">커질</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> Log4J</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에서</span><span lang="EN-US"> log rotation</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비슷하다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span><span lang="EN-US"> CommitLogRotationThresholdInMB </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정해진다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디폴트로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값은</span><span lang="EN-US"> 128MB</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">Commit log</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관련된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동기화</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동작이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이것은</span><span lang="EN-US"> commitlog_sync </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표현된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해서는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가능한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는데</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것은</span><span lang="EN-US"> periodic </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">과</span><span lang="EN-US"> batch </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이다</span><span lang="EN-US">. Periodic</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">디폴트</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">서버가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지정된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">인터벌을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰기를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의미한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">서버가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰기를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주기적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되었을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">잠재적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">잊어버릴</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는데</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐쉬에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디스크로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">싱크가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">되지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않았기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클러스터에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내구성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보장하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴보기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만약</span><span lang="EN-US"> commit log </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅을</span><span lang="EN-US"> batch</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쓰기가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">디스크에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">싱크가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때까지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">멈추어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기다린다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">분명히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼포먼스에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부정적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">영향이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어트리뷰트의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span><span lang="EN-US"> periodic </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에서</span><span lang="EN-US"> batch</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">바꿀수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그러면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동작을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">알기전에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">디스크에</span><span lang="EN-US"> flush</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">바꾸는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어느</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정도의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트레이드</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오프가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있어</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼포먼스에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">영향을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">미친다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라에게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">곧바로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시키는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자원을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알아서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관리하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자유도를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">조금</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">빼앗는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신이</span><span lang="EN-US"> commitlog_sync</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span><span lang="EN-US"> batch</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅하면</span><span lang="EN-US"> CommitLogSyncBatchWindowInMS </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적당한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주어야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서</span><span lang="EN-US"> MS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">각</span><span lang="EN-US"> sync </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사이의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">밀리세컨드</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">거기에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰기의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">복사본을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일반적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클러스터에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">복사본은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정의대로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰기는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">노드가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가질때까지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알려지지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의미하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span><span lang="EN-US"> batch </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모드를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하기로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결정하였다면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아마도</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">분리하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디바이스에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">두고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">퍼포먼스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">영향을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">완화하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">원할수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행하지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않아도</span><span lang="EN-US"> SSTable </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로부터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">별개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">디스크에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">분리하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">좋은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아이디어이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.4.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Memtables</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼군은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관계된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span><span lang="EN-US"> memtable</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. Memtable</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다루기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. SSTable </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">처럼</span><span lang="EN-US"> memtable</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">디스크에</span><span lang="EN-US"> flush </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어느</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사이즈까지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">커질</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가는</span><span lang="EN-US"> MemtableSizeInMB </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값은</span><span lang="EN-US"> memtable </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자체의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리에서의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사이즈에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기반한다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기억하라</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">인덱싱과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관련된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오버헤드</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">커질</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">힙의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아니다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅을</span><span lang="EN-US"> MemtableObjectCountInMillions </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">균형을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">맞추기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">원할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span><span lang="EN-US"> flush</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전에</span><span lang="EN-US"> memtable</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">컬럼의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">숫자값의</span><span lang="EN-US"> threshold</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관련된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정은</span><span lang="EN-US"> memtable_throughput_in_mb</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이다</span><span lang="EN-US">.<span style="mso-spacerun:yes"> </span></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이것은</span><span lang="EN-US"> memtable</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span><span lang="EN-US"> SSTable</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디스크에</span><span lang="EN-US"> flush </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되기전에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span><span lang="EN-US"> memtable</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">저장이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">큰</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">숫자를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디폴트</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span><span lang="EN-US"> 0.3 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이며</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대략</span><span lang="EN-US"> 333,000 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">또한</span><span lang="EN-US"> memtable</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디스크에</span><span lang="EN-US"> flush</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">후에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">얼마나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오랫동안</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보관하는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값은</span><span lang="EN-US"> memtable_flush_after_mins </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅된다</span><span lang="EN-US">. Flush</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되었을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때</span><span lang="EN-US"> flush </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">버퍼에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">버퍼의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">크기를</span><span lang="EN-US"> flush_data_buffer_size_in_mb </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">Memtable</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">튜닝하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소는</span><span lang="EN-US"> memtable_flush_writers </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디폴트값은</span><span lang="EN-US"> 1</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때</span><span lang="EN-US"> memtable</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쓰레드의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">숫자를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">나타낸다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">큰</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">힙을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가진다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카운트를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">높게하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼포먼스를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">향상시킬수있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰레드는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디스크</span><span lang="EN-US"> I/O </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">막혀져있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.5.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Concurrency</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">읽기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼포먼스보다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼포먼스가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">점에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저장소와는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다르다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">얼마나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쓰레드가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">읽기와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쓰기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동작을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행하는지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관련된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">두가지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. Concurrent_reads </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">와</span><span lang="EN-US"> concurrent_writes </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일반적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라에의해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디폴트로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주어지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">좋다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그러나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서버를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시작하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전에</span><span lang="EN-US"> concurrent_reads </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">업데이트</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하기를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">원할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그것은</span><span lang="EN-US"> concurrent_reads </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로세서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하나에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">두개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰레드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행하는데</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">최적화</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되어</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">디폴트로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅은</span><span lang="EN-US"> 8</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것은</span><span lang="EN-US"> 4 </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">코어가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">박스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가정하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그렇게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적당하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span><span lang="EN-US"> 8 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">코어</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">박스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span><span lang="EN-US"> 16</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맞춘다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">Concurrent_writes </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">셋팅은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">조금</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다르게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">행동한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서버에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동시적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓸수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">클라이언트의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맞아야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">웹</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">서버를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지원하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">셋팅을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">디폴트</span><span lang="EN-US"> 32</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">서버가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">연결할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰레드의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">숫자에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맞도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해야한다</span><span lang="EN-US">. WebLogic</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">서버가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">베이스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">커넥션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">풀을</span><span lang="EN-US"> 20</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이나</span><span lang="EN-US"> 30</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">잡는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일반적이지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서버를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클러스터안에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">조절을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해야한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.6.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Caching</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라에도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오퍼레이팅</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시스템</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">레벨에도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관련한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐쉬는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">상당한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">양의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">패턴을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이해한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">후에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐쉬를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">잘</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조심해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">튜닝하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생각이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라에는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐쉬가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">행</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐쉬와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">키</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐쉬이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">행</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐쉬는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">완전한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">행을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐쉬한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그래서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">키</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐쉬의</span><span lang="EN-US"> superset </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주어진</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼군에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">행</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐쉬를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용한다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">키</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐쉬를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐슁</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전략은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몇가지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사항에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">튜닝되어야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:40.0pt;mso-para-margin-left:0gd; text-indent:-20.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쿼리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">고려하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쿼리에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">잘</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">맞는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐쉬</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:40.0pt;mso-para-margin-left:0gd; text-indent:-20.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">힙</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사이즈와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐쉬</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사이즈의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비율을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">고려한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐쉬가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">힙사이즈를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">넘어가지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:40.0pt;mso-para-margin-left:0gd; text-indent:-20.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">키의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사이즈와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">행의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사이즈를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">고려한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일반적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">키는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전체</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">행보다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">훨씬</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">Keys_cached</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">키</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위치의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">숫자를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">나타낸다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">키</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아니다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">분수의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">표현이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되거나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정수이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">분수를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">키의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐쉬에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼센트값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">나타낸다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정수값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위치가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐쉬되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">키의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">절대</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">숫자를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">나타낸다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상당한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">양의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메모리를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">소비한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그러나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위치가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이미</span><span lang="EN-US"> hot</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트레이드</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오프가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">Disk_access_mode</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">목적은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">오퍼레이팅</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시스템이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">읽기를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐쉬할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">맵</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">활성화하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그래서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내부</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐쉬의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">로드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">줄이는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좋게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들린다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그러나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실제로는</span><span lang="EN-US"> disk_access_mode</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실용적이지는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">셋팅이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시점에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원래</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보여진</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정확하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일하지는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">미래에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나아질</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">없어질</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주위에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자유롭게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">작동해보라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그러나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다른점을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서버가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시작할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">행</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐쉬를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">덧붙일수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해서는</span><span lang="EN-US"> preload_row_cache </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">디폴트</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅은</span><span lang="EN-US"> false</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그러나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼포먼스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">향상</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시키기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span><span lang="EN-US"> true</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">싶을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">댓가는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프리로드하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼군에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상당한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">양의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span><span lang="EN-US"> bootstrapping </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오래</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">걸린다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span></p> <p class="MsoNormal"><span lang="EN-US">Row_cached </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐쉬될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">행의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">숫자를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">나타낸다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디폴트로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값은</span><span lang="EN-US"> 0</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되어있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아무런</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">행도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐쉬되지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의미한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그래서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">키는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아이디어이다</span><span lang="EN-US">. </span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">분수를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든것의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐쉬에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼센티지를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">나타내는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정수값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위치가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐쉬될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">행의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">절대</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">나타내는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">조심스럽게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하기를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">원할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그러나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쉽게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">우리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">손을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">벗어난다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컬럼군이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰기보다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">읽기를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">훨씬</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">많이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">높게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅한다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요없이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상당한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">서버의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자원을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">소모할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컬럼군이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">낮은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">읽기와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰기의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비율을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가진다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">행을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가진다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">숫자를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">높게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수학을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해야할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많이</span><span lang="EN-US"> hit</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">행을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것들은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조금</span><span lang="EN-US"> hit</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">여기서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">많은</span><span lang="EN-US"> boost</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되지는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.7.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">버퍼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사이즈</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">버퍼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사이즈는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동작을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수행할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메모리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할당을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다음은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">셋팅들에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대략적인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오버뷰이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">Flush_data_buffer_size_in_mb</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디폴트로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> 32 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메가바이트로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되어있고</span><span lang="EN-US"> memtable</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디스크로</span><span lang="EN-US"> flush </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">버퍼의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사이즈를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나타낸다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">Flush_index_buffer_size_in_mb</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디폴트로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> 8 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메가바이트로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되어있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">키가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컬럼을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정의한다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">인덱스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">버퍼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사이즈를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">늘리는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아이디어이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">행이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">컬럼을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가진다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">버퍼의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사이즈를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">줄이기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">원할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">Sliced_buffer_size_in_kb</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쿼리가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">얼마나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">변동하는지에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유용하지는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">인접한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구획을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수행할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">버퍼의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사이즈를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">킬로바이트로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정해줄</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것보다</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쿼리가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아니면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">군당</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비교적</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일정한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">배치되어</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">적절히</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">읽기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동작에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">도움이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그러나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">글로벌하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정의되었다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기억하자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.8.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Python</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">스트레스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">테스트를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하기</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라는</span><span lang="EN-US"> py_stress </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">라는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유명한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유틸리티와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">함께</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">온다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이것으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">카산드라</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">클러스터에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스트레스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">테스트를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. Py_stress</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수행하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해서</span><span lang="EN-US"> <cassandra-home>/contrib </cassandra-home></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디렉토리로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이동한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span><span lang="EN-US"> README.txt </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파일을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">확인하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원할수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">도구를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실행하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의존성의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">도구를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지나쳐야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">몇가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">과정이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">첫째</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디폴트</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">키스페이스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로드했는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">확인한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">도구는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디폴트</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼군</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정의에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">반하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동작하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span><span lang="EN-US"> Python Thrift </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인테페이스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">빌드해야</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아마도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">과정을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요구할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="margin-left:50.0pt;text-indent:-20.0pt"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.8.1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US"><span style="mso-spacerun:yes"> </span>Python Thrift </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">인터페이스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생성하기</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">스트레스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">도구를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가용한</span><span lang="EN-US"> Python</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위한</span><span lang="EN-US"> Thrift </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인터페이스를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">확인해야</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">과정을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아직</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않았다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">알게된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아니면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">잘못</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">했거나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수행을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해봐서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아래와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">에러를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">No module named thrift.transport</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시스템에</span><span lang="EN-US"> Python</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설치된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">확인하라</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">터미널을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">열고</span><span lang="EN-US"> $python</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타이핑한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아래와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">비슷한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">출력을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">eben@morpheus$ python</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">[GCC 4.4.3] on linux2</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Type "help", "copyright", "credits" or "license" for more information</span></p> <p class="MsoNormal"><span lang="EN-US">Python 2.6 </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이상</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">버전을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설치해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">최근의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">멀티</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰레드</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">능력을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">확인한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">스트레스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">테스트에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">편리하다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="margin-left:50.0pt;text-indent:-20.0pt"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.8.2.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Thrift</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">갖기</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">Thrift</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">갖기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span lang="EN-US"><a href="http://incubator.apache.org/thrift">http://incubator.apache.org/thrift</a> </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다운로드한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신에게</span><span lang="EN-US"> thrift-0.2.0-incubating.tar.gz </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파일을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">줄것이고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">압축을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">푼다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">압축을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">푼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">디렉토리에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리눅스의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아래</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명령을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의존성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만들기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실행한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ sudo apt-get install -y libboost-dev libevent-dev python-dev automake pkg-config</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">libtool flex bison</span></p> <p class="MsoNormal"><span lang="EN-US">Thrift</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시스템에</span><span lang="EN-US"> C++ Boost </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">라이브러리를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적당히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">인스톨하지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않았다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동작하지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. <a href="http://www.boost.org/">http://www.boost.org</a> </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">부스트를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가져오라</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부스트의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">홈</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디렉토리에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명령을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ ./bootstrap.sh</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ ./bjam</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">부스트를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컴파일하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">인스톨한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span><span lang="EN-US"> Thrift</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">빌드하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해서</span><span lang="EN-US"> Thrift </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">홈</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">디렉토리에서</span><span lang="EN-US"> root </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">몇</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">명령을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시행한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ ./bootstrap.sh</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ ./configure</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ ./make</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ ./make install</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ cd lib/py</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ ./make</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span lang="EN-US">$which thrift </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명령을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수행한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> Thrift</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어디</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인스톨</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되었는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">말해준다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">나의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시스템에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> /usr/local/bin/thrift </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span><span lang="EN-US"> Thrift</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적절히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인스톨</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되었다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신은</span><span lang="EN-US"> Thrift</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">실행할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">도움을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ thrift -version</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Thrift version 0.2.0-exported</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신의</span><span lang="EN-US"> site-packages </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디렉토리를</span><span lang="EN-US"> Python </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">패스에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">둔다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ export PYTHONPATH=/usr/lib/python2.6/site-packages/</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span><span lang="EN-US"> <cassandra-home> </cassandra-home></span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">디렉토리로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이동할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. Python</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위한</span><span lang="EN-US"> Thrift </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인터페이스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생성하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아래의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명령을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ ant gen-thrift-py</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">성공적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">빌드</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메시지를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span><span lang="EN-US"> <cassandra-home>/interfaces/thrift/gen-py </cassandra-home></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성된</span><span lang="EN-US"> Python</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위한</span><span lang="EN-US"> Thrift </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인터페이스를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되었다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디렉토리를</span><span lang="EN-US"> <cassandra-home>/contrib/py_stress </cassandra-home></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복사한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서버가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시작이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되고</span><span lang="EN-US"><span style="mso-spacerun:yes"> </span>Python </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스트레스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">테스트를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">준비가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">확인한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="margin-left:50.0pt;text-indent:-20.0pt"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.8.3.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Python </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스트레스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">테스트</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행하기</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅되었다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">스트레스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">테스트를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. <cassandra-home>/contrib./py_stress </cassandra-home></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디렉토리로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이동한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">터미널에서</span><span lang="EN-US"> stress.py</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">타이핑한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그래서</span><span lang="EN-US"> local host</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">테스트를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수행한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스트레스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">테스트가</span><span lang="EN-US"> localhost:9160</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">연결하지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">못한다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메시지를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보게되면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">몇</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">옵션이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">첫째</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">서버가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시작이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되었고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주소와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포트를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">귀기울이고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">확인한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정에서</span><span lang="EN-US"> localhost </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대신에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신의</span><span lang="EN-US"> IP </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주소를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">듣게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">스크립트를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">서버가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">곳에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정에서</span><span lang="EN-US"> localhost</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">듣도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">바꾸고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아마도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">스크립트에</span> <span lang="EN-US">–d </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">옵션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전달하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">연결하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원하는지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">나타낸다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ stress.py -d 192.168.1.5</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">테스트는</span><span lang="EN-US"> 1</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">입력할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때까지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">계속</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">멈춘다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">테스트를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일반적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">워크스테이션</span><span lang="EN-US"> , Intel I7 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로세서와</span><span lang="EN-US"> 4GB </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">램에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">했다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">eben@morpheus<b>$ ./stress.py -d 192.168.1.5 -o insert<o:p></o:p></b></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">total,interval_op_rate,avg_latency,elapsed_time</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">196499,19649,0.0024959407711,10</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">370589,17409,0.00282591440216,20</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">510076,13948,0.00295883878841,30</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">640813,13073,0.00438663874102,40</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">798070,15725,0.00312562838215,50</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">950489,15241,0.0029109908417,60</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">1000000,4951,0.00444872583334,70</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">풀어보자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">우리가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일만개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">완전히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">튜닝되지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">서버에</span><span lang="EN-US"> 70 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">초</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동안</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생성하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">입력한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처음</span><span lang="EN-US"> 10</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">초</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동안에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">우리가</span><span lang="EN-US"> 196,499 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">랜덤하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생성된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">넣었다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동작당</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">평균</span><span lang="EN-US"> latency</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span><span lang="EN-US"> 0.0025 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">초이고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것은</span><span lang="EN-US"> 2.5 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">밀리세컨드이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그러나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디폴트를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">카산드라</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">서버가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이미</span><span lang="EN-US"> 1 GB</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">테스트를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하기전에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관리해야</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">했다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">테스트에게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰레드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼포먼스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">짜낼수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하자</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">eben@morpheus$ <b>./stress.py -d 192.168.1.5 -o insert -t 10<o:p></o:p></b></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">total,interval_op_rate,avg_latency,elapsed_time</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">219217,21921,0.000410911544945,10</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">427199,20798,0.000430060066223,20</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">629062,20186,0.000443717396772,30</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">832964,20390,0.000437958271074,40</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">1000000,16703,0.000463042383339,50</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여기서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span><span lang="EN-US"> 10 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰레드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해서</span> <span lang="EN-US">–t </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">플래그를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> 50</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">초에</span><span lang="EN-US"> 1,000,000 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기록을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">썼다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의미한다</span><span lang="EN-US">. 2</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">밀리세컨드의</span><span lang="EN-US"> latency</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있었고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이미</span><span lang="EN-US"> 1.5GB</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관리하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">튜닝되지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">베이스이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">테스트를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">번</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시행하여</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주어진</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하드웨어</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적당한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰레드의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개수를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">찾아내야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시스템에서의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">코어의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개수에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">따라서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쓰레드의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개수를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">많이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">높게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">했다면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">안좋은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼포먼스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보게될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로세서가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰레드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관리하는데</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일리있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">테스트를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰레드의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개수와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">코어의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사이에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대략</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맞는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">갖기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원한다</span><span lang="EN-US">. </span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">베이스에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있으니</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">조금의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">읽기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">테스트를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용해보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><b><span lang="EN-US">$ ./stress.py -d 192.168.1.5 -o read<o:p></o:p></span></b></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">total,interval_op_rate,avg_latency,elapsed_time</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">103960,10396,0.00478858081549,10</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">225999,12203,0.00406984714627,20</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">355129,12913,0.00384438665076,30</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">485728,13059,0.00379976526221,40</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">617036,13130,0.00378045491559,50</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">749154,13211,0.00375620621777,60</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">880605,13145,0.00377542658007,70</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">1000000,11939,0.00374060139004,80</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있듯이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것처럼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">빨리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">읽지는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">못한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">백만개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">읽기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">약</span><span lang="EN-US"> 80</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">초가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">소요된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기억하라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">튜닝되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">싱글</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰레드의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일반적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위크스테이션에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로그램을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">돌리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">베이스의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사이즈는</span><span lang="EN-US"> 2GB</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그럼에도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">환경을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼포먼스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">튜닝을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클러스터에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것들을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예상하는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">숫자들을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">얻어내는데</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">도구이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.9.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시작하기와</span><span lang="EN-US"> JVM </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서버가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시작하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">얼마나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자바</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">할당이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되어야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">등을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다양한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">옵션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정하도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">섹션에서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시작할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">튜닝을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하는지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴본다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">윈도우즈를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시작</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">스크립트는</span> <span lang="EN-US">Cassandra.bat </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">라고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">불린다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리눅스에서는</span> <span lang="EN-US">Cassandra.sh </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">단지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파일들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행함으로써</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">서버를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시작할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디폴트를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그러나</span><span lang="EN-US"> bin </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디렉토리에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있어서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">카산드라가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시작하는지에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관계된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다양한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">셋팅을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">해준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파일은</span> <span lang="EN-US">Cassandra.in.sh </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">라고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하며</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">옵션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">분리한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파일에의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">업데이트를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쉽게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해주는</span><span lang="EN-US"><span style="mso-spacerun:yes"> </span>JVM </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">셋팅</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">등이다</span><span lang="EN-US">.</span></p> <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none;mso-border-alt:solid black .5pt; mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt"> <tbody><tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes"> <td width="146" valign="top" style="width:109.7pt;border:solid black 1.0pt; mso-border-alt:solid black .5pt;background:#D9D9D9;mso-background-themecolor: background1;mso-background-themeshade:217;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자바</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">옵션</span></p> </td> <td width="435" valign="top" style="width:326.3pt;border:solid black 1.0pt; border-left:none;mso-border-left-alt:solid black .5pt;mso-border-alt:solid black .5pt; background:#D9D9D9;mso-background-themecolor:background1;mso-background-themeshade: 217;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가이드라인</span></p> </td> </tr> <tr style="mso-yfti-irow:1"> <td width="146" valign="top" style="width:109.7pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">MaxTenuring Threshold</span></p> </td> <td width="435" valign="top" style="width:326.3pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오브젝트는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">헤더에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">나이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">얼마나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">많이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">젊은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">세대의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">공간에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">복사가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되었는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">나타낸다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것들은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">젊은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">세대의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가비지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">콜렉션에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">살아남으면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">복사된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">복사는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대가가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오래</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">살아남은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오브젝트들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">번</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카피가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되었을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">튜닝하면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼포먼스가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좋아질</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디폴트로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span><span lang="EN-US"> 1</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">젊은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">세대의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">콜렉션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">살아남은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">오브젝트를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">종신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">세대로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">옮기기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해서는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span><span lang="EN-US"> 0</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅한다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:2;mso-yfti-lastrow:yes"> <td width="146" valign="top" style="width:109.7pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">UseConcMarkSweepGC</span></p> </td> <td width="435" valign="top" style="width:326.3pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> JVM</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가비지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">콜렉션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전략을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지도한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">특별히</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그것은</span><span lang="EN-US"> ConcurrentMarkSweep </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알고리즘을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">활성화한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span><span lang="EN-US"> RAM</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span> <span lang="EN-US">GC</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">소요되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">멈추는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시간을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">최소화하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">애플리케이션이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동작되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동안에도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">잦은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가비지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬렉션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">많은</span><span lang="EN-US"> CPU </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파워를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전략을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">힙의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">최소와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">최대값을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">중요하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> JVM</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">힙을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">크게하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시간을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">소요하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방지한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것을</span> <span lang="EN-US">–XX:+UseParallelGC</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">튠하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가능하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">멀티</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로세서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기기에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">장점을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">발휘한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">높은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">퍼포먼스를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주지만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때때로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">멈춘다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">함께</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">연속적인</span><span lang="EN-US"> GC</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">말라</span><span lang="EN-US">.</span></p> </td> </tr> </tbody></table> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">포함된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정파일의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대부분의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">옵션은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자바</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">둘러싼다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">들어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">힙</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디폴트</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">맥시멈</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사이즈는</span><span lang="EN-US"> 1GB</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기기에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">튜닝하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">싶어</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자바가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">힙의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">성장을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관리해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않도록</span> <span lang="EN-US">–Xmx </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">와</span> <span lang="EN-US">–Xms </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">옵션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정하도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노력한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">옵션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">튜닝하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스트레스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">테스트의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실행을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">들어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">디폴트보다</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다음과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">셋팅을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">적용했을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">나는</span><span lang="EN-US"> 15%</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼포먼스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">향상을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보았다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">JVM_OPTS=" \</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">-da \</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">-Xms1024M \</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">-Xmx1024M \</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">-XX:+UseParallelGC \</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">-XX:+CMSParallelRemarkEnabled \</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">-XX:SurvivorRatio=4 \</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">-XX:MaxTenuringThreshold=0</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼포먼스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">튜닝시에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처음에는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">힙의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">최소와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">최대값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아이디어이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오직</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실제</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">세계에서의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">환경에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">힙</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">분석</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">도구의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">도움과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">특정한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">행동을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관찰함으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼포먼스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">벤치마킹을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이후에야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">발전된</span><span lang="EN-US"> JVM </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">튜닝을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신</span><span lang="EN-US"> JVM </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">옵션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">튜닝하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로드</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">테스팅</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">도구의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용이나</span> <span lang="EN-US">contrib </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에서의</span> <span lang="EN-US">Python </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">스트레스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">테스트</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">성공을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보았다면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">너무</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">좋아서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">흥분하지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">말아라</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">진짜</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">세계의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">환경</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컨디션에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">테스트할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그냥</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">셋팅들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">복사하지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">말아라</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일반적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아마</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">힙이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아웃</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오브</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메모리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">에러를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내었다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">힙이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상태를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">덤프하도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하였음을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">확인하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">싶을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아웃</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오브</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리에서는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">연습이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">힙이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가비지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">콜렉션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자세한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사항을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프린트하도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가비지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">콜렉션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한참</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동안</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">멈춰</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">안다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가비지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">콜렉션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">초기화하도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰레쉬홀드값을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">갖도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가비지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">콜렉션이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">힙이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">꽉</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">채우도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실행하도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시도할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파라미터는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여기에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보여진다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">-XX:CMSInitiatingOccupancyFraction=88 \</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">-XX:+HeapDumpOnOutOfMemoryError \</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -verbose:gc \</span></p>Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-41084700594532174862011-07-28T19:55:00.000-07:002011-07-28T19:56:03.036-07:00Cassandra (10/12)<div style="mso-element:para-border-div;border-top:solid windowtext 3.0pt; border-left:none;border-bottom:solid windowtext 3.0pt;border-right:none; padding:0cm 0cm 0cm 0cm"> <h1><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">유지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관리</span></h1> </div> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">챕터에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">건강하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유지하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">살펴본다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주의를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기울이고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시작하자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">Nodetool</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">함께</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오고</span><span lang="EN-US"> <cassandra-home>/bin </cassandra-home></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">찾을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클러스터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제공하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">커맨드</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">라인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로그램이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이해하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수정해보아라</span><span lang="EN-US">. Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">클러스터에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제한된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">통계를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가지게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하거나</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유지관리하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">범위를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보거나</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른곳으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">옮기거나</span><span lang="EN-US">, </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해체하거나</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">문제가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">고칠</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">Nodetool</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자신과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">환경이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">클래스패스와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로깅</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">Nodetool</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시작하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쉽다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">터미널을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">열고</span><span lang="EN-US"> <cassandra-home> </cassandra-home></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이동하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다음과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">명령을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">집어넣는다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$bin/nodetool</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">식으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실행하면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">에러가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나온다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그러나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다음에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보는것처럼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">실행이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가능한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명령의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">리스트가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력되도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로그램을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구동할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">링의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정보를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구하기</span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">링과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대하여</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">얻을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정보는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다양하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">섹션에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">살펴보도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기본적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정보를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가질</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">링에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">참여하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대해서도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.1.1 </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"; background:silver;mso-highlight:silver">정보</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">직접적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법은</span><span lang="EN-US"> info </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">명령어이다</span><span lang="EN-US">. Nodetool </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">노드에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">연결하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">현재</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">상태에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기본적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가져온다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정보를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주소를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전달하라</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ bin/nodetool -h 192.168.1.5 info</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">134439585115453215112331952664863163581</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Load : 3.93 MB</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Generation No : 1277663698</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Uptime (seconds) : 19639</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Heap Memory (MB) : 36.60 / 1011.25</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">분명하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아이템은</span> <span lang="EN-US">“Generation No” </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필드이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">엔드포인트와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">연관된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">심장박동</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상태이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> Gossiper </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타임스탬프를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이용하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리된다</span><span lang="EN-US">. </span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.1.2 </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"; background:silver;mso-highlight:silver">링</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">링에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그것들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상태에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결정하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해서</span><span lang="EN-US"> host </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">와</span><span lang="EN-US"> ring </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스윗치를</span><span lang="EN-US"> Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하라</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ bin/nodetool -host 192.168.1.5 ring</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Address Status Load Range Ring</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">41654880048427970483049687892424207188</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">192.168.1.5 Up 1.71 KB 20846671262289044293293447172905883342 |<--|</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">192.168.1.7 Up 2.93 KB 41654880048427970483049687892424207188 |-->|</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">링안의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드들의</span><span lang="EN-US"> IP </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주소를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">본다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개는</span><span lang="EN-US"> 1.5 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">또</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하나는</span><span lang="EN-US"> 1.7</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">둘</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">현재</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">살아있다</span><span lang="EN-US">. Load </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">노드가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">바이트</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개수다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.1.3 </span><span lang="EN-US">Range Tokens</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">키스페이스는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그들의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">범위로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나눈다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">카산드라는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">클러스터의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">노드에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">고유한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">토큰을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">할당하는데</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그것이</span><span lang="EN-US"> Range Token </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복사를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">키인지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결정한다</span><span lang="EN-US">. Ring </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스윗치를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보여지는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">범위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">컬럼은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">책임이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">토큰이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어느것인지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">알려준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">“wrapping range” </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">라고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">불리는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">특별한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">범위가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">낮은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">토큰</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가진</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">토큰보다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">키를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">할당받는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">또한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">큰</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">토큰은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">범위보다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">큰</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">키를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">받는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">큰것에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">랩핑한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.2.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">통계를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구하기</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">Nodetool</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">서버의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상태를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">레벨까지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">통계를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이것은</span><span lang="EN-US"> info </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스윗치로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모은것보다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자세한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정보이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기본적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두가지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">명령이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. Cfstats </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">와</span><span lang="EN-US"> tpstats </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">양쪽</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">살펴보도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.2.1 </span><span lang="EN-US">cfstats<span style="background:silver;mso-highlight:silver"> </span></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman";background:silver;mso-highlight:silver">사용하기</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼군의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오버뷰를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span><span lang="EN-US"> cfstats</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">스윗치를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">클러스터에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메트릭스를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컬럼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">군의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">통계를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보이기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span><span lang="EN-US"> Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아래와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">같이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">실행하라</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ bin/nodetool -host 192.168.1.5 cfstats</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아래와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">낸다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Keyspace: Keyspace1</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Read Count: 13</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Read Latency: 0.3252307692307692 ms.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Write Count: 3</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Write Latency: 0.13266666666666665 ms.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Pending Tasks: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Column Family: StandardByUUID1</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">SSTable count: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Space used (live): 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Space used (total): 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Memtable Columns Count: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Memtable Data Size: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Memtable Switch Count: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Read Count: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Read Latency: NaN ms.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Write Count: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Write Latency: NaN ms.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Pending Tasks: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Key cache capacity: 200000</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Key cache size: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Key cache hit rate: NaN</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Row cache: disabled</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Compacted row minimum size: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Compacted row maximum size: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Compacted row mean size: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Column Family: Standard2</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">SSTable count: 1</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Space used (live): 379</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Space used (total): 379</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Memtable Columns Count: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Memtable Data Size: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Memtable Switch Count: 1</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Read Count: 13</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Read Latency: 0.325 ms.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Write Count: 3</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Write Latency: 0.133 ms.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Pending Tasks: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Key cache capacity: 1</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Key cache size: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Key cache hit rate: NaN</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Row cache: disabled</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Compacted row minimum size: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Compacted row maximum size: 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Compacted row mean size: 0</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간결하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생략하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">통계가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼군을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">읽기와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰기에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지연되는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">읽기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰기의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">총</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">숫자를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">볼수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있으며</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐쉬의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">힛트</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">율</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span><span lang="EN-US"> Pending Tasks </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카운트에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">완료되지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개수를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">통계가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보여주는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한가지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">얼마나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">빠른가이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">박스에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로드가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">걸리지는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않았으나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쓰기는</span><span lang="EN-US"> 1/10 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">밀리초로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수행되어진다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.2.2 </span><span lang="EN-US">tpstats<span style="background:silver;mso-highlight:silver"> </span></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman";background:silver;mso-highlight:silver">사용하기</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">Tpstats </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">도구는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유지하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰레드</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">풀에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정보를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상당히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동시적이고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">멀티프로세서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">멀티코어기계에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">최적화</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">되어</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">게다가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내부적으로</span><span lang="EN-US"> Staged Event-Driven Architecture (SEDA)</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">잘</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">유지하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해서는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰레드풀의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">행동과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">건강상태를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이해하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">중요하다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰레드풀의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">통계를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">찾기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span><span lang="EN-US"> Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span><span lang="EN-US"> tpstats </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">스윗치와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">함께</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하며</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아래와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ bin/nodetool -host 192.168.1.5 tpstats</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">특정한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓰레드</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">풀</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">표현하는</span><span lang="EN-US"> ASCII </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">출력을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성한다</span><span lang="EN-US">. </span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Pool Name Active Pending Completed</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">FILEUTILS-DELETE-POOL 0 0 101</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">MESSAGING-SERVICE-POOL 2 4 71594081</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">STREAM-STAGE 0 0 2</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">RESPONSE-STAGE 0 0 38154433</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">ROW-READ-STAGE 0 0 12542</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">LB-OPERATIONS 0 0 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">COMMITLOG 1 0 65070187</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">GMFD 0 0 1002891</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">MESSAGE-DESERIALIZER-POOL 0 0 105025414</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">LB-TARGET 0 0 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">CONSISTENCY-MANAGER 0 0 2079</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">ROW-MUTATION-STAGE 1 1 52419722</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">MESSAGE-STREAMING-POOL 0 0 121</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">LOAD-BALANCER-STAGE 0 0 0</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">FLUSH-SORTER-POOL 0 0 115</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">MEMTABLE-POST-FLUSHER 0 0 115</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">COMPACTION-POOL 0 0 364</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">FLUSH-WRITER-POOL 0 0 115</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">HINTED-HANDOFF-POOL 0 0 154</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">직접적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">얼마나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동작이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상태에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그것들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">액티브한지</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지연되고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는지</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">완료가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되었는지도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쓰기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동작도중에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캡처된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">따라서</span><span lang="EN-US"> ROW-MUTATION-STAGE</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">활성화된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제로를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보게되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">서버에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">활동을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">로드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">감당하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예외적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의미한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.3.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기본적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">유지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">영향이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전이나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">후에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해야할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일들이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">플러쉬를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수행한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">후에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스냅샷을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">찍는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의미가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그래서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">섹션에서는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기본적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">유지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴본다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> repair, snapshot, cleanup </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">등이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.3.1 </span><span lang="EN-US">Repair</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">Nodetool repair</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">실행하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">압축을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행하도록</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타겟</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터의</span><span lang="EN-US"> Merkel </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트리는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계산된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span lang="EN-US">Merkle </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트리는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">복사본의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비교된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">과정은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">싱크가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">맞지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">잊혀지지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">확실히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">압축</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동안에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서버는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이웃한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드들과</span><span lang="EN-US"> Merkle </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">교환하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span><span lang="EN-US"> TreeRequest/TreeResponse</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시작한다</span><span lang="EN-US">. Merkle </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트리는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">컬럼군에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">표현하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">해쉬이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트리와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맞지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않으면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조정이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">셋팅되어져야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">최근의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결정하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트리의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비교</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">확인은</span><span lang="EN-US"> org.apache.cassandra.service.AntiEntropyService </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">클래스의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">책임이다</span><span lang="EN-US">. AntiEntropyService </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">싱글톤</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">패턴을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구현한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정적인</span><span lang="EN-US"> Differencer </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">클래스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정의한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비교하는데</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">차이점을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">발견하면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일치하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">범위에서</span><span lang="EN-US"> repair</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">런치한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그래서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그런</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사항들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자동적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다루지만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">스스로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그런</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실행할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span><span lang="EN-US"> Nodetool </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">명령과는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다르게</span><span lang="EN-US"> repair </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명령은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신이</span><span lang="EN-US"> repair</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">싶은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">특정한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">키스페이스의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이름을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전달하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요구한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ bin/nodetool repair Keyspace1 -h 192.168.1.7</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">도구를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행시킨</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">후에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">서버로그에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보게된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 13:34:59,683 Started deliverAllHints</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 13:34:59,684 Compacting []</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 13:34:59,684 Expected bloom filter size : 128</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 13:34:59,685 Finished deliverAllHints</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <div style="mso-element:para-border-div;border:solid windowtext 1.0pt; mso-border-alt:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt"> <p class="MsoNormal" style="border:none;mso-border-alt:solid windowtext .5pt; padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt"><span lang="EN-US">Merkle </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트리란</span><span lang="EN-US">?</span></p> <p class="MsoNormal" style="border:none;mso-border-alt:solid windowtext .5pt; padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt"><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">발명자의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이름</span><span lang="EN-US"> Ralph Merkle </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">딴</span><span lang="EN-US"> Merkle </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트리는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">또한</span> <span lang="EN-US">“</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해쉬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트리</span><span lang="EN-US">” </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알려져</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">바이너리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트리로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">표현된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구조이며</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">큰</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터셋의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">짧은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요약본</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">형태이므로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">유용하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해쉬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트리에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">잎은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요약되어야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">블록이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트리의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부모노드는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">직접적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자식노드의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해쉬이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요약을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">잘</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">압축한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="border:none;mso-border-alt:solid windowtext .5pt; padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt"><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라에서</span><span lang="EN-US"> org.apache.cassandra.utils.MerkleTree </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">클래스에</span><span lang="EN-US"> Merkle </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트리가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구현되어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="border:none;mso-border-alt:solid windowtext .5pt; padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt"><span lang="EN-US">Merkle </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트리는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라에서</span><span lang="EN-US"> peer-to-peer </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">네트워크</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">받고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">바뀌어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지거나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">손상이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않았다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">확실히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">암호화에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파일의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">검사하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전달하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이것은</span><span lang="EN-US"> Google Wave </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에서도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">.</span></p> </div> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.3.2 </span><span lang="EN-US">Flush</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터는</span><span lang="EN-US"> memtable</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">저장이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. Memtable </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로부터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시스템의</span><span lang="EN-US"> SSTable</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쓰기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신은</span><span lang="EN-US"> Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span><span lang="EN-US"> flush </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">명령을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쓸</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">bin/nodetool flush -h 192.168.1.1 -p 9160</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서버</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로그를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">확인한다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 15:16:33,945 Forcing binary flush on keyspace Keyspace1, CF Standard2</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 15:16:33,945 Forcing flush on keyspace Keyspace1, CF Standard2</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 15:16:33,945 Standard2 has reached its threshold;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">switching in a fresh Memtable at</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">CommitLogContext(file='/var/lib/cassandra/commitlog/CommitLog-1277663698134.log',</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">position=1390)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">//etc</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 15:16:34,104 Completed flushing /var/lib/cassandra/data/Keyspace1/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-3-Data.db</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.3.3 </span><span lang="EN-US">Cleanup</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">얼마간</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">운용이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">되는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">클러스터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span><span lang="EN-US"> replication factor</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나</span><span lang="EN-US"> replication strategy </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">변경하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">원한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경고와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">함께</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가능하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">첫째</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">살아있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">클러스터에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행되려는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아니었다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그래서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다운시키고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">올리는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요구할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모른다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다이나믹하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">로드</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">했어도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">마찬가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">둘째</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이상없다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">확인하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span><span lang="EN-US"> Nodetool cleanup</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">원하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">깨끗이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드에</span><span lang="EN-US"> Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span><span lang="EN-US"> cleanup </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인자를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">실행할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ bin/nodetool cleanup -h 192.168.1.7</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">곧바로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컨트롤을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">터미널에게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">반환한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">근본적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">특정한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">반압축을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.4.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Snapshots</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">Snapshot</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">목적은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일부나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전체</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">키스페이스의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복사본을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만들고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">별도의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">베이스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파일에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">근본적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">키스페이스를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">백업하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">놓았다가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">차후에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되살릴수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의미한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.4.1 </span><span lang="EN-US">Snapshot</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman";background:silver;mso-highlight:silver">을</span><span style="background:silver;mso-highlight:silver"> </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"; background:silver;mso-highlight:silver">찍기</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이상의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">키스페이스의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스냅샷을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">찍을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라는</span><span lang="EN-US"> Table </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">클래스에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">호출을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대신한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">후에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컬럼군에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">스냅샷</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메서드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">부른다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> SSTable</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">복사본을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생성하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의미하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">바를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기억하자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터가</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">존재한다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스냅샷의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일부가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아니다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이전에</span><span lang="EN-US"> flush </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터만이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스냅샷의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일부이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span><span lang="EN-US"> storage service</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기본적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">직접적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복사를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">행하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스냅샷을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">찍는것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">복잡하지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ bin/nodetool -h 192.168.1.5 snapshot</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서버</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로그에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">스냅샷이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">찍혔다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:25:15,385 Snapshot for Keyspace1 table data file</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">/var/lib/cassandra/data/Keyspace1/Standard2-1-Filter.db</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">created as /var/lib/cassandra/data/Keyspace1/snapshots/1277673915365/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-1-Filter.db</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:25:15,424 Snapshot for system table data file</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">/var/lib/cassandra/data/system/LocationInfo-9-Filter.db</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">created as /var/lib/cassandra/data/system/snapshots/1277673915389/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">LocationInfo-9-Filter.d</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스냅샷은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">찍혀진</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">타임스탬프</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이름의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">폴더에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위치하며</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터파일</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">끝과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같이</span><span lang="EN-US"> .db </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">익스텐션으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">끝난다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일반적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">테이블과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">여기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내부적인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">키스페이스</span><span lang="EN-US"> system</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">포함하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">서버의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">키스페이스의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스냅샷이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">찍혀있다</span><span lang="EN-US">. </span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">키스페이스의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스냅샷만을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">찍기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원한다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">추가적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">인자를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전달하여야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ bin/nodetool -h 192.168.1.5 snapshot Keyspace1</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이전에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">찍었던</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스냅샷을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되살리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">싶다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">몇가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">과정이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단순히</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">노드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">닫고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오래된</span><span lang="EN-US"> SSTable</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">과</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제거한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스냅샷</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">디렉토리로부터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파일을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일반적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디렉토리로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복사한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.4.2 </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"; background:silver;mso-highlight:silver">스냅샷을</span><span style="background: silver;mso-highlight:silver"> </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman";background:silver; mso-highlight:silver">깨끗이</span><span style="background:silver;mso-highlight: silver"> </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman";background:silver;mso-highlight:silver">하기</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스냅샷이던</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지울수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">말하자면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">영구한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어딘가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">저장한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">후이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스냅샷을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지우기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span><span lang="EN-US"> Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span><span lang="EN-US"> clearsnapshot </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스윗치를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서버에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아래와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보게된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:45:00,490 Disseminating load info ...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:45:11,797 Removing snapshot directory</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">/var/lib/cassandra/data/Keyspace1/snapshots</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:45:11,798 Deleting Standard2-1-Index.db</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:54:45,727 Deleting 1277675283388-Keyspace1</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">//...clearing out other data files</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:54:45,728 Deleting snapshots</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:45:11,806 Cleared out all snapshot directories</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">행동을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주의하자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">키스페이스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해</span><span lang="EN-US"> system </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">테이블과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">포함하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스냅샷이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지워진다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.5.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Load-Balancing the Cluster</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">클러스터가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">밸런스가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맞지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">발견했다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아마</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">특정한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">범위에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">키가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">삽입되어졌기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클러스터의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">밸런스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">맞추기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">재배분할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.5.1 </span><span lang="EN-US">loadbalance and streams</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">Nodetool</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span><span lang="EN-US"> loadbalance </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">스윗치를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">해체한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그래서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">토큰을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보내고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시작한다</span><span lang="EN-US">. Loadbalance </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명령은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">근본적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">별도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">편리하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">랩퍼이다</span><span lang="EN-US">. Decommission </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">과</span><span lang="EN-US"> bootstrap </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span><span lang="EN-US"> load-balancing </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동작을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모니터할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">많이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조금</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">걸린다</span><span lang="EN-US">. Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에서</span><span lang="EN-US"> stream </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스윗치를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그렇다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기</span><span lang="EN-US"> loadbalance </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">인자를</span><span lang="EN-US"> Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터를</span><span lang="EN-US"> 1.5</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보낸다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ bin/nodetool -host 192.168.1.5 loadbalance</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> load-balancing </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로세스를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시작한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일어나는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동안</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">확인하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">호스트와</span><span lang="EN-US"> stream </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인자를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상태를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">체크할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아직</span><span lang="EN-US"> OK</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">확인한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">eben@morpheus$ bin/nodetool streams -h 192.168.1.5</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><b><span lang="EN-US">Mode: Leaving: streaming data to other nodes<o:p></o:p></span></b></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Not sending any streams.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Not receiving any streams.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">eben@morpheus$ bin/nodetool streams -h 192.168.1.7</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><b><span lang="EN-US">Mode: Normal<o:p></o:p></span></b></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Not sending any streams.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Not receiving any streams</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일단</span><span lang="EN-US"> load balancing</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">끝나면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">로그를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보고</span><span lang="EN-US"> balancing </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동안에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">무엇이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일어났는지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">체크할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리가</span><span lang="EN-US"> load balanced</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">후</span><span lang="EN-US"> 1.5</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">클러스터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">떠나는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">노드로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보내는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">본다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스스로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">부트스트랩을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">받기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시작한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> load balancing</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">효과가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:46:58,727 Leaving: old token was 20846671262289044293293447172905883342</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:46:58,746 Pending ranges:</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">/192.168.1.7:</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(41654880048427970483049687892424207188,</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">20846671262289044293293447172905883342]</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:46:58,746 Leaving: sleeping 30000 for pending range setup</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:46:59,323 Disseminating load info ...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:28,748 Node /192.168.1.5 ranges</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">[(41654880048427970483049687892424207188,20846671262289044293293447172905883342]]</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:28,749 Range</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(41654880048427970483049687892424207188,20846671262289044293293447172905883342]</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><b><span lang="EN-US">will be responsibility of /192.168.1.7<o:p></o:p></span></b></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:28,750 Ranges needing transfer are</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">[(41654880048427970483049687892424207188,20846671262289044293293447172905883342]]</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:47:28,750 Leaving: streaming data to other nodes</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:28,753 Beginning transfer process to /192.168.1.7 for ranges</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(41654880048427970483049687892424207188,20846671262289044293293447172905883342]</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:47:28,753 Flushing memtables for Keyspace1...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:47:28,753 Performing anticompaction ...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:28,754 waiting for stream aks.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:47:28,754 AntiCompacting [org.apache.cassandra.io.SSTableReader(</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">path='/var/lib/cassandra/data/Keyspace1/Standard2-1-Data.db')]</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:28,755 index size for bloom filter calc for file :</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">/var/lib/cassandra/data/Keyspace1/Standard2-1-Data.db : 256</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:28,755 Expected bloom filter size : 128</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:47:28,886 AntiCompacted to /var/lib/cassandra/data/Keyspace1/stream/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-2-Data.db.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">239/239 bytes for 1 keys. Time: 131ms.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:47:28,887 AntiCompacting []</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:28,887 Expected bloom filter size : 128</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:47:28,888 AntiCompacting []</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:47:28,892 Stream context metadata /var/lib/cassandra/data/Keyspace1/stream/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-2-Index.db:55,</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">1 sstables./var/lib/cassandra/data/Keyspace1/stream/Standard2-2-Filter.db:325,</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">1 sstables./var/lib/cassandra/data/Keyspace1/stream/Standard2-2-Data.db:239</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:28,893 Adding file /var/lib/cassandra/data/Keyspace1/stream/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-2-Index.db to be streamed.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:28,893 Adding file /var/lib/cassandra/data/Keyspace1/stream/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-2-Filter.db to be streamed.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:28,893 Adding file /var/lib/cassandra/data/Keyspace1/stream/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-2-Data.db to be streamed.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><b><span lang="EN-US">INFO 10:47:28,895 Sending a stream initiate message to /192.168.1.7 ...<o:p></o:p></span></b></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:28,895 attempting to connect to /192.168.1.7</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:47:28,895 Waiting for transfer to /192.168.1.7 to complete</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,309 Running on default stage</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,310 Received a stream initiate done message ...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,310 Streaming 55 length file /var/lib/cassandra/data/Keyspace1/stream/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-2-Index.db ...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,316 Bytes transferred 55</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,316 Done streaming /var/lib/cassandra/data/Keyspace1/stream/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-2-Index.db</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,331 Running on default stage</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,332 Deleting file /var/lib/cassandra/data/Keyspace1/stream/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-2-Index.db after streaming</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">55/619 bytes.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,332 Streaming 325 length file /var/lib/cassandra/data/Keyspace1/stream/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-2-Filter.db ...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,335 Bytes transferred 325</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,335 Done streaming /var/lib/cassandra/data/Keyspace1/stream/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-2-Filter.db</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,345 Running on default stage</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,345 Deleting file /var/lib/cassandra/data/Keyspace1/stream/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-2-Filter.db after streaming</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">325/619 bytes.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,345 Streaming 239 length file /var/lib/cassandra/data/Keyspace1/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">stream/Standard2-2-Data.db ...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,347 Bytes transferred 239</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,347 Done streaming /var/lib/cassandra/data/Keyspace1/stream/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-2-Data.db</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,389 Running on default stage</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,390 Deleting file /var/lib/cassandra/data/Keyspace1/stream/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Standard2-2-Data.db after streaming</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">239/619 bytes.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,390 Signalling that streaming is done for /192.168.1.7</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:47:29,390 Done with transfer to /192.168.1.7</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,391 stream acks all received.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:47:29,392 No bootstrapping or leaving nodes -> empty pending ranges</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">for Keyspace1</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:48:59,322 Disseminating load info ...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:49:01,406 Processing response on a callback from 191997@/192.168.1.7</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:49:01,406 New token will be 134439585115453215112331952664863163581 to</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">assume load from /192.168.1.7</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:49:01,407 re-bootstrapping to new token</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">134439585115453215112331952664863163581</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:49:01,407 Joining: sleeping 30000 for pending range setup</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 10:49:31,408 <b>Bootstrapping<o:p></o:p></b></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:49:31,408 Beginning bootstrap process</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:49:31,413 <b>Added /192.168.1.7/Keyspace1 as a bootstrap source<o:p></o:p></b></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:49:31,414 Requesting from /192.168.1.7 ranges</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(41654880048427970483049687892424207188,134439585115453215112331952664863163581]</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:49:32,097 Running on default stage</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 10:49:32,098 StreamInitiateVerbeHandler.doVerb STREAM_INITIATE 10579</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라가</span><span lang="EN-US"> load balancing</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">과정을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자세히</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몇가지가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일어나는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">본다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">첫째</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">카산드라는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가용한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">클러스터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">노드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조사한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">토큰</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">범위를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">본다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스트림되어야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span><span lang="EN-US"> 1.5 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">서버의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">베이스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파일의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리스트를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성한다</span><span lang="EN-US">. Standard2 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼군이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인덱스</span><span lang="EN-US">, </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파일의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">옮긴다</span><span lang="EN-US">. 1.5 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드는</span><span lang="EN-US"> stream initiate </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메시지를</span><span lang="EN-US"> 1.7 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보내고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">스트리밍</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시작한다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표시한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">바이트는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전송된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일단</span><span lang="EN-US"> 1.7</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">받는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알게되면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로컬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파일은</span><span lang="EN-US"> 1.5</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지워진다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서버는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">잠시동안</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해체된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">곧바로</span><span lang="EN-US"> 1.5 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">돌아온다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">클러스터에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가용하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">받는다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">알린다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">새로운</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">범위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">토큰이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">할당되고</span><span lang="EN-US"> 1.5 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드는</span><span lang="EN-US"> 1.7 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">서버로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">부터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">약간의</span> <span lang="EN-US">load </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가정하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시작한다</span><span lang="EN-US">. </span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span><span lang="EN-US"> Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span><span lang="EN-US"> ring </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인자와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행한다면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">새로운</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">범위가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">노드에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">할당이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것들은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">둘다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대략</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">똑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">양의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Address Status Load Range Ring</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">134439585115453215112331952664863163581</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">192.168.1.7 Up 3.53 KB 41654880048427970483049687892424207188 |<--|</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">192.168.1.5 Up 2.95 KB 134439585115453215112331952664863163581 |-->|</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.6.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">노드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">해체하기</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해체하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서비스에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">끌어내는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의미한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span><span lang="EN-US"> Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에서</span><span lang="EN-US"> decommission</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">호출</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">카산드라의</span><span lang="EN-US"> StorageService </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">클래스에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">해체</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동작을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">호출하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">링에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하자</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">eben@morpheus$ bin/nodetool -host 192.168.1.5 ring</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Address Status Load Range Ring</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">134439585115453215112331952664863163581</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">192.168.1.7 Up 4.17 KB 41654880048427970483049687892424207188 |<--|</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">192.168.1.5 Up 3.59 KB 134439585115453215112331952664863163581 |-->|</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리는</span><span lang="EN-US"> 1.7 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해체하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">서비스에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">끌어내기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해서</span><span lang="EN-US"> decommission </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인자를</span><span lang="EN-US"> Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">발행할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">$ bin/nodetool decommission -h 192.168.1.7</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">명령을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">발행한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">후에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정된대로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">얼마간</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기다린다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디폴트로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> 30</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">초이다</span><span lang="EN-US">. Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이상</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않는다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그러나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">서버</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">로그는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">우리의</span><span lang="EN-US"> 1.5 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">우리는</span><span lang="EN-US"> decommission </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명령을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">발행한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">후에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아래와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">출력을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보게된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 13:59:00,488 Disseminating load info ...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 13:59:40,010 Node /192.168.1.7 state leaving, token</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">41654880048427970483049687892424207188</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 13:59:40,022 Pending ranges:</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">/192.168.1.5:</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(134439585115453215112331952664863163581,41654880048427970483049687892424207188]</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:00:00,488 Disseminating load info ...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:00:10,184 Running on default stage</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:00:10,184 StreamInitiateVerbeHandler.doVerb STREAM_INITIATE 4084</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:00:10,187 no data needed from /192.168.1.7</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:00:10,551 Node /192.168.1.7 state left, token</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">41654880048427970483049687892424207188</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">DEBUG 14:00:10,552 No bootstrapping or leaving nodes -> empty pending ranges for</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Keyspace1</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 14:00:18,049 InetAddress /192.168.1.7 is now dead.</span></p> <p class="MsoNormal"><span lang="EN-US">Gossiper</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span><span lang="EN-US"> 1.5</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">떠나는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상태에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있음을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">말해준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">특별한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">케이스에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그것은</span><span lang="EN-US"> 1.7</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로부터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스트림하지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않아도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">되는데</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이미</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">밸런스가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맞기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span><span lang="EN-US"> 1.5</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">소식을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">듣게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. 1.7</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">죽었다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만약</span><span lang="EN-US"> nodetool –h <ip> ring </ip></span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시점에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실행한다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리의</span><span lang="EN-US"> 1.7 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정말로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리스트에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">빠진다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동안에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해체하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서버</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로그에서는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아래와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">본다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 13:37:36,299 InetAddress /192.168.1.5 is now UP</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 13:59:40,929 Leaving: sleeping 30000 for pending range setup</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 14:00:11,286 Leaving: streaming data to other nodes</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 14:00:11,318 Flushing memtables for Keyspace1...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 14:00:11,318 Performing anticompaction ...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 14:00:11,333 AntiCompacting [org.apache.cassandra.io.SSTableReader(path='c</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">:\var\lib\cassandra\data\Keyspace1\Standard2-2-Data.db'),org.apache.cassandra.io</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">.SSTableReader(path='c:\var\lib\cassandra\data\Keyspace1\Standard2-1-Data.db')]</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 14:00:11,349 AntiCompacting []</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 14:00:11,364 AntiCompacting []</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 14:00:11,411 Stream context metadata</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 14:00:11,427 Sending a stream initiate message to /192.168.1.5 ...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 14:00:13,455 Shutting down MessageService...</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 14:00:13,455 Shutdown complete (no further commands will be processed)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 14:00:13,470 Decommissioned</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INFO 14:00:13,470 MessagingService shutting down server thread.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">노드는</span><span lang="EN-US"> 1.5</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">안</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상태에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시작한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span><span lang="EN-US"> decommission </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명령을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">받는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">떠나는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상태로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되고</span><span lang="EN-US"> 30</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">초를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">잠든다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">범위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정보를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모으기에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">충분한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간이라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">확인한다</span><span lang="EN-US">. Memtable</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리에서</span><span lang="EN-US"> SSTable</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">디스크로</span><span lang="EN-US"> flush </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터에대해</span><span lang="EN-US"> anti-compaction </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요한대로</span><span lang="EN-US"> 1.5</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전송하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">스트림을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시작한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">마지막으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">셧</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다운된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span><span lang="EN-US"> decommission</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span><span lang="EN-US"> decommission </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">없는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">호출하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에러</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메시지를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. Decommission </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동안</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기본적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행되는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">과정은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다음과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Gossiper</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이상의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">받지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">셧</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다운된다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노드를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메시징</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">서비스는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">셧</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다운된다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">3.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">SEDA </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스테이지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매니저는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">셧</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다운된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">왜냐하면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">스테이지간에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">옮기기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이상의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">받지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">4.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모드는</span> <span lang="EN-US">“decommissioned” </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">셋팅된다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">5.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">스토리지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">서비스는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전송되어야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">범위에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">노드가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">적당한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">받을지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결정하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스트림된다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">6.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일단</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">받는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">노드가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">성공적인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전송을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">알게되고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이상의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전송이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">없으면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">서버는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">링을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">떠나게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.7.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">노드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">업데이트하기</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.7.1 </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"; background:silver;mso-highlight:silver">토큰을</span><span style="background:silver; mso-highlight:silver"> </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman";background:silver; mso-highlight:silver">제거하기</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">토큰을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제거하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원한다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span><span lang="EN-US"> Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단순하게</span><span lang="EN-US"> removetoken </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">인자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제거하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">원하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">토큰이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">명령을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실행하라</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US" style="background:#D9D9D9;mso-shading-themecolor: background1;mso-shading-themeshade:217">$ bin/nodetool -h 127.0.0.1 removetoken 42218023250148343019074760608074740927</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클라이언트는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">성공했다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">커멘트가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">없이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">반환된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">노드의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">토큰을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제거할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">없다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기억하라</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">온전함을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파괴한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span><span lang="EN-US"> node1</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">연결할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주어진</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">토큰을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지우도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는데</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">링안에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어디서든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.7.2 </span><span lang="EN-US">Compaction Threshold</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">Compaction Threshold </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span><span lang="EN-US"> SSTable</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">숫자를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">참조한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">마이너한</span><span lang="EN-US"> compaction </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">큐에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디폴트로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">미니멈</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">숫자는</span><span lang="EN-US"> 4</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">맥시멈은</span><span lang="EN-US"> 32 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">숫자가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">너무</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작게를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">원하지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않거나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">빈번하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요없는</span><span lang="EN-US"> compaction</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">리소스가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행하지는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">클라이언트와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">싸움을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">벌인다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그래서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">또한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">숫자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">너무</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">크기를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원하지는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아니면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">많은</span><span lang="EN-US"> compaction</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">번에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수행하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">리소스를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그래서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">클라이언트에게는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">리소스만이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가용하다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주어진</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">노드에서</span><span lang="EN-US"> compaction threshold</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">찾기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서는</span><span lang="EN-US"> Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">과</span><span lang="EN-US"> getcompactionthreshold </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">명령을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">eben@morpheus$ <b>bin/nodetool -h 192.168.1.5 getcompactionthreshold<o:p></o:p></b></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Current compaction threshold: Min=4, Max=32</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h3 style="mso-list:none;tab-stops:40.0pt"><span lang="EN-US" style="background: silver;mso-highlight:silver">10.7.2 </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작동중인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클러스터에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼군을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">변경하기</span></h3> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요하다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">당신은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">추가하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제거하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컬럼군의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이름을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">바꾸는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">등</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작동하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카산드라</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">클러스터에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">여기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">실행해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">과정이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level1 lfo3"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Nodetool</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span><span lang="EN-US"> drain</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비우기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행하라</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level1 lfo3"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">카산드라를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">셧</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다운하고</span><span lang="EN-US"> commit log</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아무</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">남아있지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">확인한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level1 lfo3"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">3.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">SSTable </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">삭제한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파일들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디렉토리에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있고</span><span lang="EN-US"> <cf>-Data.db, <cf>-Index.db, </cf></cf></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span><span lang="EN-US"> <cf>-Filter.db </cf></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이름지어져있으며</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">변경하려고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬럼군의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이름으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">앞부분이름이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되어있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파일들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">찾는다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파일들을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적당하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">맞는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방식으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이름을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">변경하라</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-40494128542529774152011-07-10T20:05:00.000-07:002011-07-10T20:10:21.764-07:00Enyo<a href="http://3.bp.blogspot.com/-4_CPTL-ooco/ThpplNmKskI/AAAAAAAAC6U/WbPC0ySCP6E/s1600/%25EC%25A0%259C%25EB%25AA%25A9%2B%25EC%2597%2586%25EC%259D%258C.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 276px;" src="http://3.bp.blogspot.com/-4_CPTL-ooco/ThpplNmKskI/AAAAAAAAC6U/WbPC0ySCP6E/s320/%25EC%25A0%259C%25EB%25AA%25A9%2B%25EC%2597%2586%25EC%259D%258C.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5627926772378677826" /></a><br />* Linux 2.6 kernel 기반<br />* combination of open source and Palm components<br />* 직접 core OS 와 interaction은 없고, Mojo를 통한다.<br /><br /><br />Core OS<br />* ext3 filesystem for the internal (private) file partitions<br />* fat32 for the media file partition<br />* The Wireless Comms system : connection management that automatically attaches to WAN and WiFi networks<br />* The media server is based upon gstreamer<br /><br /><br />주요 feature로 말하고 있는 것들<br />Support for multiple form factors/aspect ratios<br />Faster performance<br />Modern, modular design - easier to maintain and reuse code<br />Will work great with Ares (Palm's UI builder tool, named after the Greek god of war) - it's built by the same team and has common roots.<br />Hardware acceleration built-in<br />Browser-based development<br /><br /><br />Stacks<br /><br />Experience the next-generation of multi-tasking<br />Just Type<br /><br />Let users “just type” to search or act within your app<br />Exhibition<br /><br />Deliver all-new experiences for the HP Touchstone Charging Dock<br />HP Synergy<br /><br />Connect with webOS Contacts, Calendar, and Messaging<br />JavaScript Services<br /><br />Roll your own services with Node.js<br />PDK Plug-ins<br /><br />Mix web technologies and C/C++ components in a single app<br />HTML5 Enhancements<br /><br />Tap in to new capabilities for your apps and sitesAnonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-74276198663174286092011-07-07T23:04:00.000-07:002011-07-07T23:07:50.732-07:00HP webOS 3.0HP webOS 3.0<br />sjinpark@samsung.com<br />박성진<br /><br /><br />webOS는 리눅스 커널위에서 작동하는 mobile operation system 이름이다. 처음에는 Palm에 의해서 개발이 되었고 후에 HP에 들어갔다. <br /><br />SDK를 설치하면 webOS PDK, HP webOS SDK 두 개의 디렉토리가 생성되었다.<br />JavaScript development 와 C/C++ development 를 할 수 있다고 하는데, PDK는 GCC compiler, SDL and OpenGL code libraries, project templates, sample source code, scripts, utilities, documents 를 포함한 Plug-in Development Kit 라고 한다.<br /><br />초기 설정<br /><br />RSS를 읽어들이는 간단한 애플리케이션을 제작해 본다.<br />FeedReader라는 디렉토리를 생성하여 시작한다. index.html이라는 파일을 만들어주는데 내용은 아래와 같다.<br /><br /><br /><br /><br /><br /><br /><br /><br /> new MyApps.FeedReader().renderInto(document.body);<br /><br /><br /><br /><br /> 는 애플리케이션 이름과 함께 이라는 태그를 포함하고 있다. 태그는 Enyo 프레임워크 파일의 위치이다. <br />안에는 새로운 FeedReader object를 초기화하기 위한 호출이다. 애플리케이션을 시작하기 전에 생성해야 할 몇가지 다른 파일들이 있다. index.html에 더해서 JSON 포맷의 애플리케이션 프로퍼티의 리스트를 FeedReader 디렉토리가 가지고 있어야 한다. (appinfo.json). framework 설정 셋팅은 (framework_config.json) 그리고 애플리케이션을 구성하는 모든 파일들의 리스트는 (depends.js)<br /><br />appinfo.json 의 내용은 아래와 같다.<br />{<br /> "id": "com.palm.feedreader",<br /> "version": "1.0.0",<br /> "vendor": "HP",<br /> "type": "web",<br /> "main": "index.html",<br /> "title": "Enyo FeedReader",<br /> "uiRevision": "2"<br />}<br /><br />uiRevision 프로퍼티를 2로 셋팅했기 때문에 우리의 앱은 풀스크린 해상도로 TouchPad Emulator와 실제 하드웨어에서 작동할 것이다. 아래것은 framework_config.json 이다.<br />{<br /> "logLevel": 99<br />}<br /><br />logLeven을 99로 설정함으로써. enyo.log에서 가장 높은 로그를 하라고 할 수 있는데, 이것이 애플리케이션 개발시에는 적당하다. 릴리즈 할 때는 logLevel이 0이 되는것이 좋다.<br />마지막으로 이것은 depends.js의 내용이다.<br />enyo.depends(<br /> "source/FeedReader.js",<br /> "css/FeedReader.css"<br />);<br /><br />여기서 depends.js 는 상당히 여유분인것 같다. 메인 애플리케이션 오브젝트(source/FeedReader.js)로의 패스와 애플리케이션 주 스타일 시트(css/FeedReader.css)로의 패스만을 담고 있다. 우리가 애플리케이션에 파일을 추가하면서 depends.js에 추가를 해주어야 한다.<br />enyo.kind({<br /> name: "MyApps.FeedReader",<br /> kind: enyo.VFlexBox,<br /> components: [<br /> ]<br />});<br /><br />FeedReader.js 는 MyApps.FeedReader 라는 것을 정의한다. 이것은 새로운 FeedReader 오브젝트들을 생성하기 위한 안내를 담고 있다. 프로퍼티는 FeedReader 오브젝트가 enyo.VFlexBox 로부터 상속되는 view라는 것을 말해준다. componentsproperty 는 우리가 FeedReader를 새롭게 초기화할 때 보여주고 싶은 UI 요소들을 담고 있다.<br /><br />기본 UI<br /><br />우리의 애플리케이션에 FeedReader 생성자의 컴포넌트 프로퍼티를 만들어서 UI 를 추가해 보자. FeedReader.js에서 header(PageHeader의 일종) 와 text 입력 상자를 만들어보자.<br />enyo.kind({<br /> name: "MyApps.FeedReader",<br /> kind: enyo.VFlexBox,<br /> components: [<br /> {kind: "PageHeader", content: "Enyo FeedReader"},<br /> {kind: "RowGroup", caption: "Feed URL", components: [<br /> {kind: "Input", components: [<br /> {kind: "Button", caption: "Get Feed", onclick: "btnClick"},<br /> ]}<br /> ]}<br /> ],<br /> btnClick: function() {<br /> // handle the button click<br /> }<br />});<br /><br />Enyo의 좋은 점은 애플리케이션 개발 프로세스가 모두 웹브라우저 안에서 일어나도록 해준다는 것이다. 예를 들어, index.html 파일을 WebKit기반 브라우저에서 열어봄으로써 애플리케이션의 모양을 확인할 수 있다. 이것은 애플리케이션을 실제 기기나 에뮬레이터에 올려보지 않고서도 할 수 있는 것이다.<br />시큐리티 제한 때문에 튜토리얼 앱을 크롬에서 개발하기로 했다면 "--allow-file-access-from-files” 라는 커맨드 라인 스위치를 해서 브라우저를 런치해야 한다.<br />윈도우에서 chrome.exe로의 바로가기를 만들어서 이것을 할 수 있고 바로가기의 Target property에 스위치를 추가한다. 그리고 나서 브라우저를 띄울 때 마다 바로가기를 사용한다. Mac이나 Linux에서도 비슷하다. <br />여기에 현재 우리의 애플리케이션 상태가 보인다.<br />소스 코드를 보면 텍스트 입력 상자가 입력 오브젝트이고 Button 오브젝트를 컴포넌트로 가진다는 것을 볼 수 있다. RowGroup 안에 입력을 가져서 FEED URL 텍스트와 함께 좋은 테두리를 보여준다.<br />실행시에 사용자가 URL을 입력하고 Get Feed button을 입력하면 우리는 특정한 행동이 실행되기를 바란다. Enyo에서 button을 누르는 것은 클릭 이벤트를 만들고 우리가 이벤트를 다루기 위한 기능을 정의해야 한다. 기능의 이름은 Buttonobject의 “onclick”에 명시되어 있고 기능 자체는 이름, 종류, 컴포넌트등과 같은 레벨로 FeedReader의 프로퍼티로 정의되어 있다.<br />이제 실제 feed date를 받도록 해보자.<br /><br />서비스 사용하기<br /><br />RSS데이터를 원격에 있는 서버로부터 가져오기 위해서 우리는 우리의 고유 서비스를 정의하겠다. webOS에서 서비스는 비동기적인 요청을 로컬이나 원격 서버에 보내기 위해 만들어진다.<br />샘플 애플리케이션에서 우리는 WebService를 사용할 것이다. 우리는 우리의 서비스를 FeedReader.js의 컴포넌트 블럭으로 선언한다. <br />components: [<br /> {name: "getFeed", kind: "WebService",<br /> onSuccess: "gotFeed",<br /> onFailure: "gotFeedFailure"},<br /> {kind: "PageHeader", content: "Enyo FeedReader"},<br /> {kind: "RowGroup", caption: "Feed URL", components: [<br /> {kind: "Input",<br /> components: [<br /> {kind: "Button", caption: "Get Feed", onclick: "btnClick"}<br /> ],<br /> value: "http://feeds.bbci.co.uk/news/rss.xml"<br /> }<br /> ]} <br />],<br />선언은 서비스의 이름을 포함하고 종류, 메서드 이름 등 불릴것이 선언되어 있어서 우리의 비동기적인 요청이 성공하거나 실패한다. <br />우리가 Get Feed 버튼을 누르기 원해서 비동기 요청을 보내고 요청은 btnClick 안에 코드가 있을것이다.<br />btnClick: function() {<br /> var url = "http://query.yahooapis.com/v1/public/yql?q=select"<br /> + "%20title%2C%20description%20from%20rss%20where%20url%3D%22"<br /> + this.$.input.getValue() + "%22&format=json&callback=";<br /> this.$.getFeed.setUrl(url);<br /> this.$.getFeed.call();<br />},<br />getFeed WebService 는 URL 프로퍼티를 셋팅해야 한다. 이 케이스에서 URL값은 실제로 공개 Yahoo API의 위치이고 RSS 서버를 쿼리하고 타이틀과 데이터를 JSON 포맷으로 반환한다.<br />달러 사인은 여기있는 모든 컴포넌트들의 해쉬를 나타낸다. 각 컴포넌트는 이름으로 접근할 수 있다.<br />텍스트 입력 상자는 theInput의 이름을 할당하지 않아도 this.$.input 으로 접근할 수 있다. 입력값은 Enyo에 의해서 자동으로 생성이된다. “mySuperInput” 이라는 입력에 대한 이름을 주면 this.$.mySuperInput 으로 가용해진다. <br />여기서 우리의 비동기 요청을 보내기 위한 것을 추가한다. 궁극적으로 물론 반환된 데이터를 파싱하고 보여주어야 한다. 그러나 요청이 성공했는지 실패했는지 검사한다.<br />우리가 우리의 입력에 값 프로퍼티를 추가했다는 것을 보라.<br />value: "http://feeds.bbci.co.uk/news/rss.xml"<br /><br />이것은 BBC로부터 뉴스를 가져옴으로써 우리의 테스트를 URL과 함께 처리한다. 우리는 여기서 빠른 WebService 호출의 성공 실패를 defininggotFeed 와 gotFeedFailure를 통해서 볼 수 있다.<br />gotFeed: function(inSender, inResponse) {<br /> this.$.button.setCaption("Success");<br />},<br />gotFeedFailure: function(inSender, inResponse) {<br /> this.$.button.setCaption("Failure");<br />}<br /><br />캡션은 Button 종류의 공개된 프로퍼티이므로 Enyo는 자동으로 getter와 setter 메서드를 그것을 위해 생성한다. 그래서 우리는 setCaption을 메서드 선언 없이 부를수 있다. 이제 service 호출이 완료되었을때 Get Feed 버튼의 텍스트는 "성공"이나 "실패"를 읽기 위해 업데이트된다. 당신은 브라우저에서 요청이 성공했는지 볼 수 있다. 여기서 우리의 FeedReader가 반환된 값을 보여주기 위한 UI가 없어서 그것이 우리의 다음 주제이다.<br /><br />데이터 보여주기<br /><br />RSS 요청을 보여주기 위해서 반환된 데이터를 두기 위한 곳이 필요하다. FeedReader.js에 생성 메서드를 두어 VFlexBox에서 상속된 createmethod의 동작을 오버라이드 한다.<br />create: function() {<br /> this.inherited(arguments);<br /> this.results = [];<br />}<br />this.inherited(arguments) 호출은 우리 superkind, VFlexBox의 메서드를 생성한다. 우리는 여기서 결과를 담을 비어있는 array를 생성한다. 생성자 메서드가 오브젝트가 초기화 될 때마다 호출 되어서 new FeedReader 오브젝트의 this.result 에 접근할수 있다. 이제 gotFeed를 변경하여 this.result에 실제 결과 데이터를 담도록 한다. gotFeedFailure 를 변경하여 실패했을때 사려깊게 행동하도록 한다.<br />gotFeed: function(inSender, inResponse) {<br /> this.results = inResponse.query.results.item;<br />},<br />gotFeedFailure: function(inSender, inResponse) {<br /> enyo.log("got failure from getFeed");<br />}<br /><br />실제 데이터의 보여주기는 새로운 UI 컴포넌트에 의한다. FeedReader의 컴포넌트 블럭에 이것을 추가하고 이것과 같을 것이다.<br />components: [<br /> {name: "getFeed", kind: "WebService",<br /> onSuccess: "gotFeed",<br /> onFailure: "gotFeedFailure"},<br /> {kind: "PageHeader", content: "Enyo FeedReader"},<br /> {kind: "RowGroup", caption: "Feed URL", components: [<br /> {kind: "Input",<br /> components: [<br /> {kind: "Button", caption: "Get Feed", onclick: "btnClick"}<br /> ],<br /> value: "http://feeds.bbci.co.uk/news/rss.xml"<br /> }<br /> ]},<br /> {kind: "Scroller", flex: 1, components: [<br /> {name: "list", kind: "VirtualRepeater", onSetupRow: "getListItem",<br /> components: [<br /> {kind: "Item", layoutKind: "VFlexLayout", components: [<br /> {name: "title", kind: "Divider"},<br /> {name: "description"}<br /> ]}<br /> ]<br /> }<br /> ]} <br />]<br />우리 새 Scroller 컨트롤의 핵심은 VirtualRepeater이고 이것은 Itemobjects의 값을 가지고 있다. 우리가 데이터를 보일때 Item 정의는 간단한 포맷으로 보여진다. 새 Item 오브젝트가 VirtualRepeater에 추가될 때 newgetListItem을 호출할 수 있다. 이것은 타이틀과 값의 묘사를 채운다.<br />getListItem: function(inSender, inIndex) {<br /> var r = this.results[inIndex];<br /> if (r) {<br /> this.$.title.setCaption(r.title);<br /> this.$.description.setContent(r.description);<br /> return true;<br /> }<br />}<br /><br />기술적인 용어로 Scroller는 높이가 고정된 viewpoint를 가지고 넓은 범위를 보여준다. 실제적으로 말하면 Scroller는 당신이 예상하는 것을 한다. Scroller 콘트롤러의 스크린 높이에 너무 많은 것을 나타낼때는 ourVirtualRepeater에 스크롤을 할 수 있게 한다. flexproperty는 FeedReaderVFlexBox의 아래까지 가능한 공간을 Scroller가 채워야 하는지 보여준다.<br />우리의 UI에 결과 데이터를 보여주기 위해 마지막으로 해야할것있다. theVirtualRepeater를 모든 아이템을 거기 추가한 후에 다시 그린다. 여기서 해야 할 것은 gotFeed아래에 새로운 한줄의 코드추가 이다.<br />gotFeed: function(inSender, inResponse) {<br /> this.results = inResponse.query.results.item;<br /> this.$.list.render();<br />}<br /><br />이제 우리가 해온 것을 본다.<br /><br />여러개의 View 로 일하기<br /><br />오늘날 전형적인 RSS 피드 스토리는 전체 기사를 읽기 위한 헤드라인이나 한 두줄 짜리 기사만 담고 있어서 웹사이트를 방문해야 한다. 여기서 원래의 전체 기사를 읽게 하기 위하여 사용자가 클릭 가능하게 함으로써 우리의 애플리케이션을 더 유용하게 만들어보자. 이것을 하기 위해 두번째 view를 사용한다. 우리의 이미 존재하는 view에 이어 원래 기사를 보여주는 view. 그리고 검색 상자와 검색 결과도 보여준다. 우리는 또한 이 기회를 빌어 검색 관련 코드를 FeedReader.js에서 리팩터링한다. 이 리팩터링은 우리의 코드를 읽고 이해하기 쉽게 할 뿐만아니라 Enyo 의 디자인 골을 구현한다. 그것은 데이터의 인캡슐레이션이다. 인캡슐레이션에 의해서 애플리케이션 오브젝트가 처리해야 할 데이터의 자세한 것을 알 필요없이 데이터 처리 오브젝트의 코디네이터로 작동하게 한다. <br />Search.js<br /><br />Here are the contents of the new file, Search.js:<br />enyo.kind({<br /> name: "MyApps.Search",<br /> kind: enyo.VFlexBox,<br /> events: { <br /> onLinkClick: "",<br /> onSelect: ""<br /> },<br /> components: [<br /> {name: "getFeed", kind: "WebService",<br /> onSuccess: "gotFeed",<br /> onFailure: "gotFeedFailure"},<br /> {kind: "RowGroup", caption: "Feed URL", components: [<br /> {kind: "Input",<br /> components: [<br /> {kind: "Button", caption: "Get Feed", onclick: "btnClick"}<br /> ],<br /> value: "http://feeds.bbci.co.uk/news/rss.xml"<br /> }<br /> ]},<br /> {kind: "Scroller", flex: 1, components: [<br /> {name: "list", kind: "VirtualRepeater", onSetupRow: "getListItem",<br /> components: [<br /> {kind: "Item", layoutKind: "VFlexLayout",<br /> components: [<br /> {name: "title", kind: "Divider"},<br /> {name: "description", kind: "HtmlContent",<br /> onLinkClick: "doLinkClick"}<br /> ],<br /> onclick: "listItemClick"<br /> }<br /> ]<br /> }<br /> ]}<br /> ],<br /> create: function() {<br /> this.inherited(arguments);<br /> this.results = [];<br /> },<br /> btnClick: function() {<br /> var url = "http://query.yahooapis.com/v1/public/yql?q=select%20"<br /> + "title%2C%20description%2C%20link%20from%20rss%20where%20url%3D%22"<br /> + this.$.input.getValue() + "%22&format=json&callback=";<br /> this.$.getFeed.setUrl(url);<br /> this.$.getFeed.call();<br /> },<br /> getListItem: function(inSender, inIndex) {<br /> var r = this.results[inIndex];<br /> if (r) {<br /> this.$.title.setCaption(r.title);<br /> this.$.description.setContent(r.description);<br /> return true;<br /> }<br /> },<br /> gotFeed: function(inSender, inResponse) {<br /> this.results = inResponse.query.results.item;<br /> this.$.list.render();<br /> },<br /> gotFeedFailure: function(inSender, inResponse) {<br /> enyo.log("got failure from getFeed");<br /> },<br /> listItemClick: function(inSender, inEvent) {<br /> var feed = this.results[inEvent.rowIndex];<br /> this.doSelect(feed);<br /> }<br />});<br /><br />익순한 사람은 이것이 말그대로 이전 버전의 FeedReader.js에서 온 것임을 알것이다. 새로운 기능을 위해서 바뀐 부분을 살펴본다.<br />추가적인 feed데이터를 가져오기 위해 변경이 되었다. btnClick에서 Yahoo API 쿼리를 확장하였다.<br />둘째로 이벤트 관련 코드를 추가하였다. Item 오브젝트를 예로 들면 onclick 핸들러가 있다. Item과 클릭 이벤트가 일어나면 listItemClick 메서드를 부른다.<br />다음으로 Item 컴포넌트 블럭에서 몇가지 변경을 RSS피드가 늘어나고 하이퍼링크를 내장하기 때문에 바뀌었다. 이제 그 기술은 HtmlContent의 오브젝트로 정의되고 onLinkClick이벤트에 핸들러에 할당하였다.<br />onLinkClick 문장 : "doLinkClick”은 onLinkClick을 HtmlContent의 주인에게 포워딩하는 빠른 길이다.<br />마지막으로 onLinkClick과 onSelect가 이벤트 블럭에 정의되어 있다. onSelect이벤트는 this.doSelect 으로 쏘아진다.<br />FeedReader.js<br />New event-related code can also be found in FeedReader.js, which now looks like this:<br />enyo.kind({<br /> name: "MyApps.FeedReader",<br /> kind: enyo.VFlexBox,<br /> components: [<br /> {kind: "PageHeader", components: [<br /> {kind: enyo.VFlexBox, content: "Enyo FeedReader", flex: 1},<br /> {name: "backButton", kind: "Button", content: "Back", onclick: "goBack"}<br /> ]},<br /> {name: "pane", kind: "Pane", flex: 1, onSelectView: "viewSelected",<br /> components: [<br /> {name: "search", className: "enyo-bg", kind: "MyApps.Search",<br /> onSelect: "feedSelected", onLinkClick: "linkClicked"},<br /> {name: "detail", className: "enyo-bg", kind: "Scroller",<br /> components: [<br /> {name: "webView", kind: "WebView", className: "enyo-view"}<br /> ]<br /> }<br /> ]<br /> }<br /> ],<br /> create: function() {<br /> this.inherited(arguments);<br /> this.$.pane.selectViewByName("search");<br /> },<br /> feedSelected: function(inSender, inFeed) {<br /> this.$.pane.selectViewByName("detail");<br /> this.$.webView.setUrl(inFeed.link);<br /> },<br /> linkClicked: function(inSender, inUrl) {<br /> this.$.webView.setUrl(inUrl);<br /> this.$.pane.selectViewByName("detail");<br /> },<br /> viewSelected: function(inSender, inView) {<br /> if (inView == this.$.search) {<br /> this.$.webView.setUrl("");<br /> this.$.backButton.hide();<br /> } else if (inView == this.$.detail) {<br /> this.$.backButton.show();<br /> }<br /> },<br /> goBack: function(inSender, inEvent) {<br /> this.$.pane.back(inEvent);<br /> }<br />});<br />검색 view는 이제 Pane 오브젝트의 view가 되었다. 우리의 두번째 view 같은 pane의 컴포넌트로 정의되었다. CSS 클래스 “enyo-bg” 안의 view와 styled는 어떤 것이 현재 보이는지 this.$.pane.selectViewByName 으로 조정된다. FeedReader가 초기화 되었을 때 검색 view가 골라진다. 사용자가 이야기를 클릭했을 때 자세한 view가 선택된다. 사용자가 자세한 view에서 검색 view로 옮기도록 하기위해 Backbutton을 추가하였다. 이것이 눌려졌을때 goBack을 호출한다.<br />FeedReader.js에 있는 많은 코드가 Search.js로 옮겨졌다. FeedReader가 view 관리를 위해 새로운 네가지 메서드를 얻었다.<br />The goBack method, as we've just seen, responds to clicks of the Back button.<br />The feedSelected method is called when FeedReader receives an onSelect event from the search view. The overall sequence of events is as follows:<br />In the search view, a list item (feed story) is clicked, triggering a call to Search.listItemClick.<br />Search.listItemClick generates an onSelect event.<br />FeedReader detects the onSelect event and calls FeedReader.feedSelected.<br />FeedReader.feedSelected makes the detail view active and sets the URL for the WebView (named"webView") inside the detail view.<br />Similarly, the linkClicked method sets the URL for webView in response to onLinkClick events. (With respect to encapsulation, note that while FeedReader receives object data from both onSelect andonLinkClick events, those objects are not processed here, but are passed right back to the detail view.)<br />The viewSelected method is the handler for onSelectView events generated by this.$.pane. If we're navigating to the search view, viewSelected clears the contents of webView in preparation for the next time the detail view is displayed. It also hides the Back button, since that button isn't needed in this view. If we're navigating to the detail view, viewSelected makes the Back button visible<br /><br /><br />depends.js<br />There's one more thing we need to do to get this all to work--update depends.js to reflect the presence of the new Search.js file:<br />enyo.depends(<br /> "source/FeedReader.js",<br /> "source/Search.js",<br /> "css/FeedReader.css"<br />);<br /><br /><br /><br /><br /><br /><br /><br />Enyo Platform<br />Enyo의 기본이 되는 오브젝트는 Control이다. 이것은 DOM 노드처럼 동작한다. 사실은 각 control은 노드들로 바로 변환된다.<br />작은 control을 만들고 문서 바디에 뿌려주는 코드이다.<br />enyo.create({<br /> content: "Hello World"<br />}).renderInto(document.body);<br /><br />이것은 아래 HTML을 생성한다.<br /><div id="control">Hello World</div><br />control에 소스 작업을 하는것이 HTML을 다루는 것보다 이득이다. 더 간단하고 직관적임.<br />enyo.create({<br /> components: [<br /> // button with custom graphics<br /> {kind: "Button"},<br /> // input box with special features like hinting and graphic fx<br /> {kind: "FancyInput"},<br /> // one-of-many selector with custom graphics<br /> {kind: "RadioGroup", components: [<br /> {label: "Alpha"},<br /> {label: "Beta"},<br /> {label: "Gamma"}<br /> ]}<br /> ]<br />}).renderInto(document.body);<br /><br />기본적인 자바 스크립트 사용예다.<br />// an object constructor<br />MyObject = function() {<br /> this.data = [];<br />};<br /><br />MyObject.prototype.toString = function() {<br /> return this.data.join(", ");<br />};<br /><br />// another object constructor, built on the first one<br />MySpecialObject = function() {<br /> MyObject.apply(this, arguments);<br />};<br /><br />MySpecialObject.prototype = new MyObject();<br /><br />MySpecialObject.prototype.toNumber = function() {<br /> return this.data.length;<br />};<br /><br />// Make an instance<br />mso = new MySpecialObject();<br /><br />객체 지향에 맞추기 위해 Enyo는 constructor를 만드는 메서드를 제공한다. constructor는 어떤 특별한 kinds 라는 것을 가지고 있다. kind를 생성하기 위한 메서드는 enyo.kind이다. 여기 enyo.kind의 예이다.<br /><br />// a kind<br />enyo.kind({<br /> name: "MyKind",<br /> constructor: function() {<br /> this.data = [];<br /> },<br /> toString: function() {<br /> return this.data.join(", ");<br /> }<br />});<br /><br />// another kind, built on the first one<br />enyo.kind({<br /> name: "MySpecialKind",<br /> kind: "MyKind",<br /> toNumber: function() {<br /> return this.data.length;<br /> }<br />});<br /><br />// Make an instance<br />msk = new MySpecialKind();<br /><br />이 예제에서 주의할 몇 가지이다.<br />The name of the kind is specified inside of the property block. This name will become a global variable that references the kind. Putting the name inside the block gives you an easy way to use namespacing. For example, say you write:<br />enyo.kind({name: "Super.Special.Kind"});<br /><br />The namespaces Super and Super.Special will be created for you, and Super.Special.Kind will reference the new constructor.<br />Initialization code is placed in a special method called constructor. This is very similar to the body of theMyObject function in the first example. The main difference is that the constructor method is not called when inheriting from a kind (if you look closely at the first example, you can see that MyObject is called to create the prototype for MySpecialObject, which ends up creating an extraneous data array in theMySpecialObject prototype.)<br />To make a new kind that inherits from an old one, specify the old one's name in the new one's kindproperty. In the example, MySpecialKind is based on MyKind.<br /><br />All these kinds may start to sound confusing, but it all boils down to one simple idea: whenever we make something, whether a constructor or an instance, we say what kind it's based on. When creating an instance, for example, we might do this:<br />enyo.create({kind: "aKind"});<br /><br />(Note: The input for enyo.create is a JavaScript object that describes the object to create. This kind of input is sometimes called a "property block" or "property bag".)<br />Similarly, to make a new kind based on an existing kind, we could do this:<br />enyo.kind({kind: "aKind"});<br /><br />This consistency makes the syntax easy to remember. It's turtles all the way down.Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-36356640111151870222011-07-07T23:00:00.000-07:002011-07-07T23:01:38.283-07:00Cassandra (6/12)6. 카산드라 설정하기<br /><br />이 챕터에서 카산드라를 어떻게 설정하는지 살펴본다. 우리는 keyspace, 복사본 셋업을 생성해보고 적당한 복사본 거치 전략을 살펴본다.<br />카산드라는 설정을 하지 않아도 잘 작동한다. 단지 다운로드하고 압축을 풀고 그리고 디폴트 설정으로 작동하도록 프로그램을 돌려 서버를 시작하면 된다.<br />우리는 클러스터 안의 노드의 행동에 영향을 미치는 면을 살펴본다. 그것은 퍼포먼스 그리고 복사, 파티셔닝, 고발과 같은 메타 동작이다. 퍼포먼스 튜닝은 11장에서 별개의 주제로 자세히 살펴본다.<br /><br />6.1. Keyspaces<br /><br />키스페이스는 XML 설정화일에 정적으로 설정이 되기는 하였으나 0.7 버전에 오면서 API를 사용하여 키스페이스와 컬럼군을 생성할 수 있다.<br />카산드라 0.6과 그 이전 버전에서 당신의 클러스터와 컬럼군을 위한 설정은 storage-conf.xml이라는 파일에 저장이 되었다. 그리고 XML에서 YAML로 변환되었다. 그래서 storage-conf.xml과 Cassandra.yaml 로의 참조를 볼 수 있다. 그러나 버전 0.7 은 다이나믹 로딩이 되면서 키스페이스와 컬럼군 정의의 모든 생성과 수정은 Thrift API을 통하거나 command line interface (CLI)를 통하게 되었다.<br />버전 0.7 카산드라에서부터 당신은 당신의 스키마에 변경을 하기 위해서 API를 사용할 수 있다. 이것은 당신이 SQL 에서 CREATE TABLE, ALTER TABLE 과 같은 Data Definition Language (DDL) 을 쓰던것과 매우 유사하다.<br />일단 당신의 스키마가 당신 시스템의 키스페이스에 로드되면 스키마에 대한 모든 변경은 Thrift 인터페이스를 통해야 한다. 이 메서드들은 모두 system에 의해 앞에 이름이 붙는다. 이것은 당신에게 이것들이 매우 영향력이 강한 스키마 변경 동작으로서 시스템 키스페이스를 수정한다는 것을 상기시킨다.<br />- System_add_keyspace<br />키스페이스를 생성한다.<br />- System_rename_keyspace<br />키스페이스의 이름을 변경한다. 이 메서드는 모두 끝날때까지 블록한다는 것을 주의한다.<br />- System_drop_keyspace<br />모든 키스페이스를 지운다.<br />- System_add_column_family<br />컬럼군을 생성한다.<br />- System_drop_column_family<br />컬럼군을 지운다.<br />- System_rename_column_family<br />컬럼군의 이름을 바꾼다. 이 메서드는 완료될 때까지 블록된다는 것을 주의한다.<br />예를 들어 0.7 버전의 CLI를 사용하여 새로운 키스페이스를 만들 때 당신은 아래와 같은 command-line 클라이언트를 런치할 수 있다.<br />[default@unknown] connect 127.0.0.1/9160<br />Connected to: "Test Cluster" on 127.0.0.1/9160<br />[default@unknown] create keyspace Test1 with replication_factor=0<br />610d06ed-a8d8-11df-93db-e700f669bcfc<br />[default@unknown] describe keyspace Test1<br />Keyspace: Test1<br /><br />default@unknown 이라는 것은 MySQL과 비슷하다. 이것은 username을 인증하고 현재 사용하는 키스페이스 이름이 프롬프트 처럼 행동하게 한다. 그래서 우리는 키스페이스 커맨드를 사용하여 다른 키스페이스로 스윗치 할 수 있다.<br />use <keyspace> [<username> 'password']<br />이제 CLI에서 다른 새 키스페이스로 스윗치했으니 컬럼군을 추가할 수 있다.<br />[default@Test1] create column family MyCF<br />4105a82f-ad51-11df-93db-e700f669bcfc<br />당신은 with flag를 이용해 키스페이스와 컬럼군을 생성할 때나 and flag를 사용해 더 많은 셋팅을 만들 때 추가 적인 설정을 지정할 수 있다.<br />[default@MyKeyspace] create keyspace NewKs with replication_factor=1<br />당신이 필요에따라 쓸 수 있는 다른 키스페이스 관련 CLI 커맨드도 있다.<br />drop keyspace <keyspace><br />drop column family <cf><br />rename keyspace <keyspace> <keyspace_new_name><br />rename column family <cf> <new_name><br />API를 사용해 이것을 할 수 도 있는데 아래와 같다.<br />package com.cassandraguide.config;<br />import java.util.ArrayList;<br />import java.util.List;<br />import org.apache.cassandra.thrift.Cassandra;<br />import org.apache.cassandra.thrift.CfDef;<br />import org.apache.cassandra.thrift.KsDef;<br />import org.apache.thrift.protocol.TBinaryProtocol;<br />import org.apache.thrift.protocol.TProtocol;<br />import org.apache.thrift.transport.TFramedTransport;<br />import org.apache.thrift.transport.TSocket;<br />import org.apache.thrift.transport.TTransport;<br />public class ConfigAPI {<br />private static final String HOST = "localhost";<br />private static final int PORT = 9160;<br />/**<br />* Creates a new keyspace and CF.<br />*/<br />public static void main(String... args) throws Exception {<br />String keyspaceName = "DynamicKeyspace";<br />System.out.println("Creating new keyspace: "+ keyspaceName);<br />//Create Keyspace<br />KsDef k = new KsDef();<br />k.setName(keyspaceName);<br />k.setReplication_factor(1);<br />k.setStrategy_class("org.apache.cassandra.locator.RackUnawareStrategy");<br />List<CfDef> cfDefs = new ArrayList<CfDef>();<br />k.setCf_defs(cfDefs);<br />//Connect to Server<br />TTransport tr = new TSocket(HOST, PORT);<br />TFramedTransport tf = new TFramedTransport(tr);<br />TProtocol proto = new TBinaryProtocol(tf);<br />Cassandra.Client client = new Cassandra.Client(proto);<br />tr.open();<br />//Add the new keyspace<br />client.system_add_keyspace(k);<br />Keyspaces | 101<br />System.out.println("Added keyspace: "+ keyspaceName);<br />}<br />}<br />당신이 새로운 키스페이스를 생성하기 위해 해야 할 것은 이름을 정하고, 복사 거치 전략, 그리고 복사본 팩터, 그리고 한정된 컬럼 군을 만들어 그 키스페이스를 정한다. 이제 당신은 새 MyCF 컬럼군에 값을 입력할 준비가 되었다.<br /><br />6.2. 컬럼 군 만들기<br /><br />컬럼군을 만들기 위해서는 CLI나 API를 사용해야 한다. 여기 컬럼군을 만들 때 사용가능한 옵션들이 있다.<br />- Column_type<br />Super 이거나 Standard<br />- Clock_type<br />오직 가능한 값은 Timestamp<br />- comparator<br />가능한 옵션은 AsciiType, BytesType, LexicalUUIDType, LongType, TimeUUIDType, UTF8Type 이다.<br />- Subcomparator<br />column type이 super일 때 subcolumn에 사용되는 비교자의 이름이다. 가능한 옵션은 비교자(comparator)와 같다.<br />- Reconciler<br />컬럼 버전이 충돌하는 것을 해결해주는 클래스의 이름이다. 오직 가능한 값은 Timestamp이다.<br />- Comment<br />스트링으로 표시되는 사람이 읽기 가능한 커멘트이다.<br />- Row_cached<br />캐쉬하기 위한 행의 수이다.<br />- Preload_row_cache<br />행 캐쉬를 자동으로 로드하기 위해 이 값을 true로 셋팅한다.<br />- Key_cache_size<br />캐쉬로 끌어들여오기 위한 키의 개수<br />- Read_repair_chance<br />가능한 값은 0.0과 1.0 사이의 값이다<br />[default@Keyspace1] create column family MyRadCF with<br />column_type='Standard' and comparator='UTF8Type' and rows_cached=40000<br />3ae948aa-ae14-11df-a254-e700f669bcfc<br /><br />6.3. 0.6에서 0.7로의 전환<br /><br />conf디렉토리의 Cassandra.yaml 파일은 storage-conf.xml 파일의 대체로 보인다. 이것은 0.6 이전 버전의 설정화일이다. 그러나 이 YAML 파일은 XML에서 YAML로 자신들의 설정파일을 업그레이드 하려는 사용자들을 위해 있다. 이전에 보여진 것처럼 대신Thrift API를 system_ prefix가 붙은 것들을 호출해서 사용할 수도 있다.<br />만약 당신이 0.6 버전을 사용하여 storage-conf.xml 이 있다면, 이것을 bin/config-converter를 써서 YAML로 변환할 필요가 있다. 이것은 storage-conf.xml에서 Cassandra.yaml 을 만들어 낸다. Org.apache.cassandra.service.StorageServiceMBean 에는 loadSchemaFromYAML 이라는 것이 있어서 JMX를 통해 노출되는 동작이다. 이것은 당신의 seed 노드에서 Cassandra.yaml 에서 당신의 스키마 변경을 로드하도록 카산드라에게 시킬수 있다. 당신 클러스터의 새로운 노드는 시작하자마자 스키마 업데이트를 가져올 것이다. Seed 노드도 다르지는 않다. 당신은 이 메서드를 어느 한 노드에 실행할 수 있고 모든 노드는 스키마 변경을 받고 그것에 대해서 알려줄 것이다. 이것은 카산드라 시스템의 키스페이스의 정의를 저장하는 동작이다. 당신은 이것을 실행한 후에 YAML을 변경하기 원치 않게 된다. 이후의 변경에 대해서는 당신은 API나 CLI를 사용할 필요가 있다. 이 동작은 변환이 완료된 후에는 필요없게 된다.<br />디폴트를 사용하는 것은 간단한 테스팅이 되지만 복사 거치 전략, 복사본 factor, end point snitch 등을 설정하는 것을 살펴본다. 이 설정들은 키스페이스 안에서 설정가능하다. 그래서 다른 키스페이스는 다른 설정을 각각 가질 수 있다.<br /><br />6.4. 복사본<br /><br />복사본 거치 전략은 당신이 클러스터에 노드를 추가할수록 더욱 중요해지고 있다. 카산드라에서 노드라는 용어는 가장 일반적인 케이스를 지칭한다. 그것은 카산드라 소프트웨어를 구동시키는 서버를 말한다. 그리고 한 개나 그 이상의 카산드라 서버들의 링에 참여하여 움직인다.<br />모든 카산드라 노드는 무언가의 복사본이다. 주어진 키의 범위에서 그 범위내의 복사본이 아닌 카산드라 노드가 있을 수도 있다. 만약 replication factor가 1로 셋팅되어 있으면 한 싱글노드로만 쓰여지게 되어있다. 만약 그 노드가 다운되면 그 노드에 저장되어 있는 값은 접근할 수 없게 된다. Replication factor가 2로 셋팅되어 있으면 당신 클러스터의 두 개 노드가 그 값을 가지고 각각 서로의 복사본이 되게 된다. 그래서 당신의 replication factor가 N으로 설정되어 있으면 각 노드는 N 범위의 복사본처럼 행동하게 되고 N이 1로 셋팅되어 있어도 마찬가지 이다.<br />카산드라 클러스터, 즉 호스트들의 모임은 여기서 보듯이 ring 이라고 보통 불린다. 링의 각 노드들은 고유한 각 한 개의 토큰이 할당된다. 각 노드는 이전 노드의 토큰으로부터 또다시 토큰을 갖고 값의 범위 만큼 주도권을 주장한다. Org.apache.cassandra.dht.Range 클래스에 이것들이 담겨있다. 정확히 한 토큰이 어떻게 표현되는지는 당신이 사용하는 partitioner에 달려있다. (partitioner에 대한 정보는 이장의 후에나오는 partitioner 를 참조한다.)<br />복사본을 만들 때 첫 복사본은 그 토큰의 key 범위를 주장하는 노드에게 거치된다. 모든 남아있는 복사본은 설정가능한 복사본 전략에 따라서 분산된다. 우리는 이것에 대해서 지금 살펴보겠다.<br /><br />6.5. 복사본 거치 전략<br /><br />가장 간단한 용어로서 설정 파일에 대한 복사본 거치 전략을 만족하기 위해서는 당신은 단지 org.apache.cassandra.locator.AbstractReplicationStrategy 를 확장하는 자바 클래스 이름을 제공하기만 하면 된다. 이 설정의 목적은 node picker가 작동하는 방식을 셋팅하기 위한 것이다.<br />인터페이스는 구현을 해야하는 11개의 public 메서드를 제공한다. 만약 당신의 전략이 추상적인 부모가 제공할 수 있는 메서드 구현을 사용할 수 있다면 당신은 당신이 원하는 메서드만을 오버라이드 할 수 있다. 당연히 당신은 이것을 당신이 직접 구현해야 하지는 않는다. 카산드라는 이 인터페이스의 세가지 구현을 제공한다. Rack-Aware 전략, Rack-Unaware 전략, Data Center Shard 전략.<br />올바른 복사 전략을 고르는 것은 전략이 어느 노드가 어느 키 범위에 대하여 책임이 있는지 결정하기 때문에 중요하다. 여기서 의미하는 바는 당신은 어느 쓰기 동작이 어느 노드에 받아져야 하는지 결정하는 것이며 각 다른 시나리오에 대우 큰 영향을 가지고 있다. 당신이 만약 당신의 클러스터를 모든 쓰기가 두 개의 데이터 센터에 가도록 한다면 퍼포먼스가 떨어질 것이다. 다양한 전략은 더 큰 유연성을 주어 카산드라를 당신의 네트워크 토팔러지나 필요에 따라 튜닝할 수 있게 해준다.<br />첫번째 복사본은 항상 토큰이 해당하는 범위를 주장하는 노드이지만 복사본의 나머지는 당신이 사용하는 복사본 거치 전략에 따라 위치될 것이다.<br /><br />6.6. 간단한 전략<br /><br />간단한 전략은 Rack-Unware 전략의 새로운 이름이다.<br />설정 파일에서 디폴트로 쓰이는 전략은 org.apache.cassandra.locator.RackUnawareStrategy 이다. 이 전략은 단지 추상 부모 구현에서calculateNaturalEndpoints 메서드를 오버라이드한다. 이 전략은 데이터 센터에서 자신의 위치를 모르는 방식으로 한 데이터 센터의 복사를 위치한다. 이것은 구현이 이론적으로 빠르다는 것을 의미하고 주어진 키를 가진 다음 노드가 다른 랙에 위치한다는 것을 의미한다. 이것은 아래 그림에 보여졌다.<br /> <br />그림6-1. 간단한 전략은 토팔러지에 상관없이 한 데이터센터에 복사본을 둔다.<br />여기서 링의 다음 N 노드는 복사본을 갖도록 선택되어 지고 전략은 데이터 센터에 대한 것이 없다는 것을 본다. 두번째 데이터 센터는 다이어그램에서 전략은 그것을 모른다는 것을 강조한다. <br /><br />6.7. 오래된 네트워크 토팔러지 전략<br /><br />카산드라가 제공하는 두번째 복사본 거치 전략은 org.apache.cassandra.locator.RackAwareStrategy 로서 현재 Old Network Topology Strategy라고 불린다. 이것은 같은 데이터 센터에서 다른 랙에 데이터를 분산시키기 위해서 쓰였던 것이다. RackUnawareStrategy처럼 calculateNaturalEndpoints 의 추상 부모 구현을 단지 오버라이드 하는 것이다. 이 클래스는 원래의 이름이 말하듯이 정말 데이터 센터 랙의 거치를 알고있다.<br />당신이 두개의 데이터 센터를 가지고 있다고 해보자. DC1 과 DC2이다. 둘 다 카산드라 서버이다. 이 전략은 DC1에 복사본을 두고 각각 다른 가용한 랙에 둔다. 이것은 마찬가지로 다른 랙 DC2 에는 다른 복사본을 둔다. Rack-Aware 전략은 특히 당신이 같은 카산드라 클러스터에 노드들을 가지고 두 개의 데이터 센터가 있으며 복사본 factor 3을 쓰는 것이다. 이 전략은 그림 6-2에 표현되어 있다.<br />이 전략은 당신이 대체할 데이터 센터의 세번째 노드가 접근 될 때 추가적인 latency 의 잠재적 가격에도 더 높게 보장하고 싶을 때 사용한다. 당신이 단지 한 데이터 센터에서 카산드라를 운영한다면 Rack-Aware 전략을 사용하는 것은 의미가 없다. 카산드라는 다른 데이터 센터에서 운영하는데 최적화 되어 있다. 그러나 그 높은 가용성을 사용하는 것도 당신에게는 중요한 고려사항일 것이다. 만약 당신의 카산드라 클러스터가 여러 개의 데이터 센터에 걸쳐있다면 이 전략을 사용하는 것을 고려해보라.<br /> 그림6-2. Old Network Topology Strategy 가 두번째 복사본을 다른 데이터 센터에 두고 다른 것은 같은 데이터 센터의 다른 랙에 둔다.<br /><br />당신이 Rack-Aware 전략을 사용한다면 Rack-Aware Snitch도 사용해야 하는데 Snitch는 뒤에 설명되어 있다.<br /><br /><br />6.8. 네트워크 토팔러지 전략<br /><br />이 전략은 카산드라의 0.7 버전부터 포함되었다. RackAwareStrategy보다 데이터 센터에서 복사본들이 어떻게 거치될지 더 공정하게 보여주게 된다. 이것을 사용하기 위해서는 각 데이터 센터에서 복사본 전략을 어떻게 할지 정해주는 파라미터를 넣으면 된다. 이 파일은 org.apache.cassandra.locator.DataCenterShardStrategy 클래스에 의해서 읽혀지고 수행된다. 그래서 구현은 좀 유동적이다. 데이터 센터의 조각 전략은 그림 6-3에서 볼 수 있다.<br />이 전략은 datacenter.properties라는 파일을 사용했었다. 그러나 0.7버전에서 이 메타데이터는 키스페이스와 설정 옵션이라고 할 전략에 직접 붙었다.<br /> <br />그림6-3. 네트워크 토팔러지 전략은 복사본을 다른 데이터센터에 둔다. 그리고 나머지는 첫번째 데이터 센터의 다른 랙에 지정했듯이 둔다.<br /><br /><br />6.9. Replication Factor<br /><br />Replication Factor는 카산드라 클러스터에서 얼마나 많은 각 데이터의 복사본이 저장되고 분산되는지 지정한다. Replication_factor 라는 셋팅에서 지정된다.<br />아마 클러스터에서 더 많은 노드를 가지고 있을수록 replication factor를 늘리고 싶은 것은 직관적일 것이다. 그러나 무조건 이 법칙을 따르지는 않는다. 그 대신 당신이 요구하는 서비스 레벨을 맞추기 위해서 replication factor를 증가시킬 것이다.<br />Replication factor를 1로 했을 때 당신의 데이터는 클러스터 안의 한 노드에서만 존재할 것이다. 그 노드가 이상이 있다면 데이터가 가용하지 않게 되는것이다. 이것은 카산드라가 노드들간에 조정을 하기 위해 더 많은 일을 한다는 것을 의미한다. 만약 주어진 키에 대해 모든 데이터가 노드 B에 있다면 모든 클라이언트는 그 키에 대해서 요청하고 노드 A는 재전송 되기를 필요로 할 것이다.<br />당신은 이 값을 당신 클러스터안 노드개수보다 크게 잡아서는 안된다. 이것은 아무 의미가 없기 때문이다. 그러나 당신은 이 셋팅으로 카산드라는 튜닝하기를 원치않는다. 카산드라는 읽는 복사본 카운트와 쓰는 복사본 카운트가 replication factor보다 커야 높은 일관성을 보여준다.<br />그래서 당신이 클러스터 안에 10개의 노드를 가지고 있다면 당신은 맥시멈으로 10을 replication factor로 정해줄 수 있다. 하지만 그렇게 하기를 원치 않을 수 있다. 그것이 카산드라가 그 가용성을 방해하지 못하도록 하기 때문인데 왜냐하면 한 개의 노드가 다운되면 높은 일관성을 갖지 못하기 때문이다. 그 대신 replication factor를 적당한 값으로 정해준후에 일관성 레벨을 높였다 낮추었다 하며 튜닝을 한다. 일관성 레벨은 당신이 replication factor에 의해서 정의된 노드의 개수보다 더 쓰게 하지는 않을 것이다. 여기서 적당한 숫자란 상당히 낮을 것이다. 1이란 가장 낮은 숫자이다. 그러나 ANY는 1과 비슷하거나 오히려 일관성이 없다. 이것은 당신이 쓰고 긴시간 후에 쓰여진 값을 보지 못하기 때문이다. 만약 클러스터의 어느 노드가 살아있다면 ANY는 성공할 것이다.<br /><br />6.10. Replication Factor 증가하기<br /><br />Replication factor는 서버가 실행중에 바뀌기를 원하지는 않고 시작하기 전에 정해지기 바란다. 그러나 당신의 애플리케이션이 커지고 노드를 증가할 필요가 생기면 replication factor를 증가 시켜야 한다. 이것을 할 때 따라야 할 간단한 가이드라인이 있다. 첫째로 replication factor 값을 증가시킨 후에는 노드를 재시작 시켜주어야 한다. 카산드라는 이것을 재시작한 후에 데이터를 재분배하는 등 고치는 동작을 한다. 이 고치는 과정동안에 어떤 클라이언트들은 데이터를 아직 가지지 않은 복사본에 연결이 되었다면 데이터가 존재하지 않는다는 통지를 받는다. <br />Replication factor 를 1에서 2로 증가시키는 더 빠른 방법은 노드 툴을 사용하는 것이다. 첫째로 원래의 노드에 빨아들이는 동작을 하여 모든 데이터가 SSTable에 배출되었는지 확실히 한다. 그리고 더 이상의 쓰기 동작을 받아들이지 않게 노드를 멈춘다. 다음으로 키스페이스로부터 데이터 파일을 복사한다. 카산드라 내부 키스페이스의 값들을 복사하지는 않게한다. 그 데이터 파일들을 새 노드에 붙인다. Replication factor가 2가 되도록 양쪽 노드의 설정을 바꾼다. Autobootstrap 이 양쪽 노드에서 false로 설정되게 한다. 양쪽 노드를 재시작한 후에 노드 툴을 실행한다. 이 과정들은 클라이언트가 잠재적인 그른 빈 읽기를 하지 않도록 보장한다. <br />이것을 보여주기 위해 IP주소가 1.5, 1.7 그리고 1.8로 끝나는 세 개의 노드를 가지고 replication factor는 1로 설정했다. 노드 1.5에 연결하고 이전에 존재하지 않던 컬럼에 쓰기를 한다. <br />cassandra> connect 192.168.1.5/9160<br />Connected to: "TDG Cluster" on 192.168.1.5/9160<br />cassandra> set Keyspace1.Standard2['mykey']['rf']='1'<br />Value inserted.<br />이제 노드 1.5를 닫고 1.7에 연결한후 여기 설정한 값을 읽어오도록 한다.<br />cassandra> connect 192.168.1.7/9160<br />Connected to: "TDG Cluster" on 192.168.1.7/9160<br />cassandra> get Keyspace1.Standard2['mykey']['rf']<br />Exception null<br />나는 replication factor가 1이어서 1.5 노드에만 값이 씌어졌고 그 노드를 잃어버렸을 때 클러스터의 다른 노드들은 값을 가지지 못했다. 아무 클라이언트도 1.5가 다시 온라인이 될 때까지 rf컬럼에서 값을 읽어오지 못했다.<br />그러나 replication factor를 업데이트하는 영향을 알아보자. 우리는 노드 1.5와 1.7에서 1에서 2로 바꾸고 재시작하였다. 우리는 노드 1.7에서 rf 컬럼에 새 값을 넣어보자. <br />cassandra> connect 192.168.1.7/9160<br />Connected to: "TDG Cluster" on 192.168.1.7/9160<br />cassandra> get Keyspace1.Standard2['mykey']['rf']<br />Exception null<br />cassandra> set Keyspace1.Standard2['mykey']['rf']='2'<br />Value inserted.<br />Exception null 응답이 예제 중에 나오는 것은 값이 1.7 노드에 이전에는 존재하지 않았다는 것을 알려준다. 1.7 노드를 닫고 1.5에 연결하여 값을 보자. 왜냐하면 우리의 replication factor때문에 1.7에 값을 쓰고 1.5로 복사되었다.<br />cassandra> connect 192.168.1.5/9160<br />Connected to: "TDG Cluster" on 192.168.1.5/9160<br />cassandra> get Keyspace1.Standard2['mykey']['rf']<br />=> (column=rf, value=2, timestamp=1279491483449000)<br />일반적인 가이드라인으로써 당신은 쓰기 능력은 노드의 숫자를 replication factor로 나눈 값이라고 예상할 수 있다. 10개 노드를 가진 클러스터에서 일반적으로 10000 의 초당 쓰기는 replication factor 1이다. 당신이 replication factor를 2로 증가하면 초당 5000 쓰기를 예상할 수 있다.<br /><br />6.11. Partitioners<br /><br />Partinioner의 목적은 행 키가 어떻게 정렬될지 정하게 하는 것이고 이것은 데이터가 어떻게 노드들 간에 분산이 되는지에 큰 영향이 있다. 그것은 또한 행의 범위에 대해서 쿼리하는 옵션에 대해서도 영향이 있다. 거기에는 몇 가지 다른 partinioner가 있고 우리가 여기서 살펴본다.<br />당신은 설정파일의 Partitioner 요소의 값을 업데이트 하거나 API를 통해서 Partitioner를 설정할 수 있다. Org.apache.cassandra.dht.IPartitioner 인터페이스를 구현하는 클래스의 이름으로 값을 처리한다. 카산드라는 세 가지를 제공한다. Random partitioner 는 디폴트이고, order-preserving partitioner와 collating order-preserving partitioner이다. 카산드라의 플러거블한 디자인 때문에 당신의 고유의 partitioner를 org.apache.cassandra.dht.IPartitioner 클래스를 구현해서 만들수도 있고 그것을 카산드라 클래스패스에 두어야 한다.<br /><br />6.12. Random Partitioner<br /><br />랜덤 partitioner는 org.apache.cassandra.dht.RandomPartitioner에 의해 구현되고 카산드라의 디폴트이다. BigIntegerToken을 사용하고 MD5 해쉬가 적용되며 노드 링에서 어디에 키를 두어야 할 지 결정한다. 이것은 당신의 키를 클러스터 전반에 고르게 뿌리는 장점이 있고 분산이 랜덤이기 때문에 그렇다. 이것은 효율적이지 않은 범위 쿼리라는 단점이 있는데 특정한 범위에서 키는 다양한 위치에 링안에서 위치될 수 있기 때문이다. 키 범위 쿼리는 근본적으로 랜덤 순서로 데이터를 반환한다.<br /><br />6.13. Order-Preserving Partitioner<br /><br />Order preserving partitioner 는 org.apache.cassandra.dht.OrderPreservingPartitioner에 의해 구현되고 IPartitioner<StringToken>을 구현한다. 이런 타입의 partitioner를 사용하면 토큰은 키에 기반한 UTF-8 스트링이다. 행은 그래서 키 순서에 따라 저장되고 정렬 순서와 함께 물리적 데이터의 구조로 정렬된다.<br />Order-preserving partitioning(OPP)를 사용하기 위해 당신의 컬럼군을 설정하는 것은 범위 분할을 수행하게 한다.<br />OPP가 random partitioning보다 범위 쿼리에 더 효과적이지는 않다는 것을 알아둘 필요가 있다. 단지 순서를 정할 뿐이다. 그것은 현실 세계에서 데이터는 일반적으로 고르게만 쓰여지지 않기 때문에 잠재적으로 균형이 매우 균형이 안잡힌 링을 만들수 있다는 단점이 있다. 예를 들면 스크래블 게임에서 글자에 할당된 값을 고려해보자. Q와 Z는 잘 이용되지 않는다. 그래서 높은 값을 가지고 있다. OPP로는 어떤 노드에서 많은 데이터 그리고 다른 노드에는 적은 데이터를 가지고 끝날 수 있다. 많은 데이터가 저장된 노드에는 링이 균형이 안잡히게 하고 hot spot으로 종종 불린다. 순서정렬 면 때문에 사용자는 OPP에 사로잡히게 된다. 그러나 OPP사용은 당신의 동작 팀이 노드툴의 loadbalance와 move 동작을 써서 노드를 주기적으로 수동적 재균등화를 해주어야 한다는 것을 의미한다.<br />만약 당신이 당신의 클라이언트에서 범위 쿼리를 수행하기 원한다면 order-preserving partitioner를 사용해야 하거나 order-preserving partitioner 를 순서대로 모아야 한다.<br /><br />6.14. Order-Preserving Partitioner를 모으기<br /><br />이 partitioner 순서 키는 United States English locale (EN_US) 을 따른다. OPP처럼 키가 UTF-8인 것을 요구한다. 이름으로는 OPP를 확장하는 것처럼 보이지만 그렇지 않다. 그 대신 이 클래스는 AbstractByteOrderedPartitioner 를 확장한다. 이 partitioner는 사용성이 제한되어 잘 사용되지 않는다.<br /><br />6.15. Byte-Ordered Partitioner<br /><br />0.7 버전에서 새롭게 ByteOrderedPartitioner가 추가되었다. 이것은 order-preserving partitiner 이고 데이터를 로우 byte로 다룬다. 그대신 order-preserving partitioner와 collating order-preserving partitioner가 하는 것처럼 그것을 스트링으로 변환한다. 당신이 당신의 키가 스트링이 되고 검사하지 않는 order-preserving partitioner를 필요로 한다면 BOP 가 퍼포먼스 향상을 위해서 추천하고 싶다.<br /><br />6.16. Snitches<br /><br />Snitch의 일은 관련 호스트의 근접성을 단순히 결정하는 것이다. Snitch는 당신 네트워크 토팔러지의 어떤 정보들을 모아 카산드라가 효과적으로 요청을 전달할 수 있게 한다. Snitch는 어떤 노드가 다른 노드와 어떻게 위치상 관계가 있는지 알아낸다. 데이터 센터를 추론하는 것은 replication strategy의 할일 이다.<br /><br />6.17. 간단한 Snitch<br /><br />디폴트로 카산드라는 org.apache.cassandra.locator.EndPointSnitch를 사용한다. 이것은 단지 각 노드의 IP주소의 다른 octet을 비교함으로써 작동한다. 만약 두 개의 호스트가 IP주소의 두번째 octet에서 같은 값을 가진다면 같은 데이터 센터에 있는 것으로 된다. 만약 두개의 호스트가 IP주소의 세번째 octet에서 같은 값을 가진다면 그들은 같은 랙에 있는것으로 된다. “Determined to be” 는 카산드라가 당신의 서버가 다른 VLAN 이나 subnet에 위치해 있다는 가정에 기반한다.<br />당신은 설정 파일에서 <EndPointSnitch> 요소의 값을 업데이트 함으로써 endpoint snitch 구현을 사용할 지 설정하게 된다. 다른 선택은 PropertyFileSnitch 이다.<br /><br />6.18. PropertyFileSnitch<br /><br />Org.apache.cassandra.locator.PropertyFileSnitch 는 contrib. 안에 있었다 그러나 0.7에 오면서 메인 코드 베이스로 옮겨졌다. 이 snitch는 당신이 cassandra-rack.properties라고 불리는 파일에 표준 키/값 프로퍼티의 위치를 명시하여 Rack-Aware Strategy 를 사용하는데 콘트롤 할 수 있게 해준다. <br />이 snitch는 Digg에 의해서 공헌이 있었다. 그것은 카산드라를 사용하고 정기적으로 그 개발에 공헌해왔다. 이 snitch는 카산드라가 두개의 IP가 같은 데이터센터 혹은 같은 랙에 있는지 확실하게 알게 해준다. 왜냐하면 당신이 거기에 있다고 말해주기 때문이다. 이것은 아마도 당신이 서버를 많이 옮긴다면 가장 유용할 것이다. 동작이 그렇듯이 당신이 상속된 IP scheme을 가지고 있다면 그렇다.<br />Cassandra-rack.properties의 디폴트 설정은 아래와 같다.<br /># Cassandra Node IP=Data Center:Rack<br />10.0.0.10=DC1:RAC1<br />10.0.0.11=DC1:RAC1<br />10.0.0.12=DC1:RAC2<br />10.20.114.10=DC2:RAC1<br />10.20.114.11=DC2:RAC1<br />10.20.114.15=DC2:RAC2<br /># default for unknown nodes<br />default=DC1:r1<br /><br />여기서 두 개의 랙에 두개의 데이터 센터가 있는 것을 볼 수 있다. 카산드라는 좋은 퍼포먼스로 동등한 배분을 결정할 수 있다.<br />어떤 랙이 그 IP의 노드를 가지고 있고 어떤 데이터 센터에 있는지 명시하기 위해 이 파일안의 클러스터안 각 노드의 값을 기록하여 업데이트 하라. 만약 당신이 노드를 추가하고 제거하는 것을 자주한다면 이것은 관리하기 어렵게 느껴질수 있지만 이것은 하나의 차선책이라는 것을 기억하라. 이것은 당신에게 좀더 많은 컨트롤과 좋은 실행시의 퍼포먼스를 위해 작은 유연성과 관리의 용이함은 없앤것이다. 대신에 당신은 그것들이 어디에 있는지 말해준다.<br /><br />6.19. 클러스터 생성<br /><br />당신은 카산드라를 한 개의 기기에서 실행할 수도 있다. 이것은 읽기와 쓰기 등 어떻게 하는지 배우기 위해서는 좋다. 그러나 카산드라는 여러 개의 기기의 클러스터에서 동작하도록 만들어졌다. 이 섹션에서 링에서 여러 개의 카산드라 객체가 어떻게 서로 통신하는지 등을 보게 될 것이다.<br />여기서 하려는 것은 링에서 여러 개의 기기를 가지고 샘클 키스페이스를 가지고 해보는 것이다. 그래서 디폴트 설정파일로 시작하며 키스페이스 정의 등 간단한 클러스터를 만들기 위하여 설정을 조금 바꾸어 본다.<br />이것을 위해서 우리는 192.168.1.5 그리고 192.168.1.7 두개의 카산드라를 가지고 클러스터를 만들어본다. 카산드라를 시작할 때 설정파일을 읽어 현재 노드가 어떻게 브로드캐스트하기 원하는 지 결정한다. 어떤 호스트에 어떤 IP 주소를 쓰고 어떤 포트를 사용할 것인지 등등.<br />당신은 현재 노드에게 다른 노드를과 어떻게 참여하여 함께 링을 만들지를 말해주어야 한다. 이것은 설정 파일을 텍스트 에디터에서 열어서 여기서 보듯이 몇 개의 설정을 조정해주는 간단한 일이다. <br />클러스터에 추가된 새 노드는 seed node라는 것이 필요하다. 만약 노드 A가 노드 B를 위한seed node로 작동하면 노드 B가 온라인 되면 노드 A를 데이터를 가져오기 위한 참조 포인트로 사용할 것이다. Seed node는 AutoBootstrap설정을 무시하는데 이는 그것이 클러스터의 첫번째 노드라고 가정하기 때문이다.<br /><br />6.20. 클러스터 이름 변경<br /><br />카산드라 클러스터는 한 기기가 다른 클러스터에 가입하지 않도록 하기 위해 이름이 주어진다. 디폴트 클러스터의 이름은 설정파일에 “Test Cluster”이다. 당신은 그 이름을 바꿀수 있는데 <ClusterName>을 업데이트하면 된다. 당신이 클러스터에 참여시킬 각 노드에 이것을 하면된다. <br /><br />6.21. 클러스터에 노드를 추가하기<br /><br />설정파일에는 디폴트로 false로 설정되어 있는 값들이 있다. 당신이 클러스터를 한 개의 노드로 운영을 하고 있다가 데이터를 추가하고 더 많은 노드를 추가한다고 하자. 이것은 autobootstrap 요소를 사용함으로써 할 수 있다. 나는 1.5로 끝나는 IP주소를 가진 한 개의 카산드라 서버를 NodeTool에서 본대로 가지고 있다.<br />$ bin/nodetool -h 192.168.1.5 ring<br />Address Status Load Range Ring<br />192.168.1.5 Up 433.43 MB 126804671661649450065809810549633334036 |<--|<br />이 서버는 자신의 주소를 seed로 가지고 있다. 이 노드가 seed로 행동하기 때문에 우리는 설정에서 autobootstrap을 false로 놔둔다. Seed에 새로운 노드를 추가하고 싶으면 autobootstrap을 우선 해야하고 seed로 변경해야 한다. 노드 B가 노드 A를 seed로 사용하려면 노드 B는 노드A를 설정파일에서 seed로 참조하도록 해야한다. 그러나 노드A는 스스로 seed로 선언하지 않아도 된다. <br />이제 업무를 나누기 위해 다른 노드를 추가하겠다. 이 노드의 주소는 1.7 로 끝난다. 우선 새로운 노드가 데이터를 받아들일수 있도록 클러스터에서 모든 노드가 같은 이름과 같은 키스페이스 정의를 가지고 있는지 확인한다. 두번째 노드의 설정 파일을 에디트해서 첫번째것이 seed로 행동한다고 기록한다. 그리고 autobootstrap을 true로 설정한다.<br />두번째 노드가 시작했을 때 이것은 바로 첫번째 노드를 감지한다. 그러나 90초 동안 잠들면서 노드들이 얼마나 많은 데이터를 로컬로 저장하고 있는지 정보를 gossip하게 만든다. 그리고 첫번째 노드에서 bootstrap 토큰을 가져오고 어떤 섹션의 데이터를 가져와야 하는지 안다. Bootstrap 토큰은 가장 부하가 걸린 노드의 부하를 반으로 나누는 것이다. 다시 두번째 노드는 30초를 잠들고 bootstrapping을 시작한다.<br />INFO 11:45:43,652 Starting up server gossip<br />INFO 11:45:43,886 Joining: getting load information<br />INFO 11:45:43,901 Sleeping 90000 ms to wait for load information...<br />INFO 11:45:45,742 Node /192.168.1.5 is now part of the cluster<br />INFO 11:45:46,818 InetAddress /192.168.1.5 is now UP<br />INFO 11:45:46,818 Started hinted handoff for endPoint /192.168.1.5<br />INFO 11:45:46,865 Finished hinted handoff of 0 rows to endpoint /192.168.1.5<br />INFO 11:47:13,913 Joining: getting bootstrap token<br />INFO 11:47:16,004 New token will be 41707658470746813056713124104091156313 to a<br />ssume load from /192.168.1.5<br />INFO 11:47:16,019 Joining: sleeping 30000 ms for pending range setup<br />INFO 11:47:46,034 Bootstrapping<br />당신이 얼마나 많은 데이터를 가졌는지에 따라서 당신은 새로운 노드를 보게된다. Nodetool의 streams명령을 사용하여 bootstrap을 위하여 전환되는 데이터를 볼수 있다. Logfile을 보는것은 노드가 bootstrap을 끝내는 것을 결정하는 좋은 방법이다. 그러나 그것이 실제 일어나는 동안에 보는것이다. 마지막으로 새로운 노드는 첫번째 노드로부터 받아들이고 새로운 노드가 시작하였다는 성공적인 표시를 보게된다.<br />INFO 11:52:29,361 Sampling index for /var/lib/cassandra/data\Keyspace1\Standard<br />1-1-Data.db<br />INFO 11:52:34,073 Streaming added /var/lib/cassandra/data\Keyspace1\Standard1-1<br />-Data.db<br />INFO 11:52:34,088 Bootstrap/move completed! Now serving reads.<br />INFO 11:52:34,354 Binding thrift service to /192.168.1.7:9160<br />INFO 11:52:34,432 Cassandra starting up...<br />당신이 볼수 있듯이 전환하는데 4분 정도 걸린다.<br />Bootstrapping 동안 첫번째 seed노드는 이것과 같다.<br />INFO 11:48:12,955 Sending a stream initiate message to /192.168.1.7 ...<br />INFO 11:48:12,955 Waiting for transfer to /192.168.1.7 to complete<br />INFO 11:52:28,903 Done with transfer to /192.168.1.7<br />이제 다시 node tool을 작동하여 모든 것이 제대로 셋업이 되었는지 확실히 한다.<br />$ bin/nodetool -h 192.168.1.5 ring<br />Address Status Load Range Ring<br />126804671661649450065809810549633334036<br />192.168.1.7 Up 229.56 MB 41707658470746813056713124104091156313 |<--|<br />192.168.1.5 Up 459.26 MB 126804671661649450065809810549633334036 |-->|<br />카산드라는 이전 노드(1.5)로부터 절반의 데이터를 보냄으로써 1.7 노드의 자동 bootstrapping을 한다. 우리는 이제 클러스터에 두개의 노드를 가졌다. 잘 돌아가는지 보기위해 1.5 노드에 값을 추가해보자.<br />cassandra> connect 192.168.1.5/9160<br />Connected to: "TDG Cluster" on 192.168.1.5/9160<br />cassandra> set Keyspace1.Standard2['mykey']['col0']='value0'<br />Value inserted.<br />이제 두번째 CLI 클라이언트를 열어서 1.7 노드에서 그 값을 읽어본다.<br />cassandra> connect 192.168.1.7/9160<br />Connected to: "TDG Cluster" on 192.168.1.7/9160<br />cassandra> get Keyspace1.Standard2['mykey']['col0']<br />=> (column=col0, value=value0, timestamp=1278878907805000<br />당신은 추가적인 노드를 클러스터에 더하기 위해 이 과정을 반복할 수 있다.<br />만약 클러스터에서 한 개의 노드가 이상이 있다면 node tool에서 ?를 볼수있다.<br />$ bin/nodetool -h 192.168.1.5 ring<br />Address Status Load Range Ring<br />112711146095673746066359353163476425700<br />192.168.1.5 Up 459.26 MB 27647275353297313886547808446514704912 |<--|<br />192.168.1.7 ? 229.53 MB 112711146095673746066359353163476425700 |-->|<br /><br />6.22. 여러 개의 seed node<br />카산드라는 당신이 여러 개의 seed node를 정할수 있게 해준다. Seed node는 다른 노드와의 컨택트 포인트 역할로 사용되고 카산드라는 어떤 호스트가 어떤 범위를 가지는지 알수 있도록 클러스터의 토팔러지를 배우게 된다. <br />디폴트로 설정파일은 한 개의 seed 값을 가진다.<br />seeds:<br />- 127.0.0.1<br />당신의 링에 더많은 seed node를 추가하기 위해서는 다른 seed 엘레먼트를 추가하면 된다. 두 개의 서버를 시드로 추가하려면 IP주소와 호스트 이름을 적어주고 두번째 인스턴스를 추가하면 된다.<br />seeds:<br />- 192.168.1.5<br />- 192.168.1.7<br />다음으로 이 기기의 듣는 주소를 업데이트 해야한다. 듣는 주소는 노드들이 서로를 어떻게 인지하는지이며 내부적인 커뮤니케이션에 사용된다.<br />listen_address: 192.168.1.5<br />마지막으로 RPC클라이언트가 어느 주소에 브로드캐스트하는지 변경해야 하는데 이는 다른 노드들이 이것을 어떻게 바라보는지 이다. 디폴트로 설정 파일은 rpc_address 를 가지고 있어서 로컬 호스트를 사용한다. 이 값을 각 기기의 실제 IP주소로 바꾸어 준다.<br />rpc_address: 192.168.1.5<br />rpc_address 셋팅은 클라이언트가 카산드라 노드들과 맺는 연결을 위해서만 쓰인다.<br />이제 카산드라를 재시작해서 다른 기기들에서 인스톨을 시작할수 있다. 당신의 클러스터에 여러 개의 노드를 추가했다면 이것과 비슷한 출력을 볼 것이다.<br />INFO 15:45:15,629 Starting up server gossip<br />INFO 15:45:15,677 Binding thrift service to /192.168.1.5:9160<br />INFO 15:45:15,681 Cassandra starting up...<br />DEBUG 15:45:16,636 GC for ParNew: 13 ms, 12879912 reclaimed leaving 11233080 used;<br />max is 1177812992<br />DEBUG 15:45:16,647 attempting to connect to /192.168.1.7<br />DEBUG 15:45:17,638 Disseminating load info ...<br />INFO 15:45:19,744 Node /192.168.1.7 is now part of the cluster<br />DEBUG 15:45:19,746 Node /192.168.1.7 state normal, token<br />41654880048427970483049687892424207188<br />DEBUG 15:45:19,746 No bootstrapping or leaving nodes -> empty pending ranges<br />for Keyspace1<br />INFO 15:45:20,789 InetAddress /192.168.1.7 is now UP<br />DEBUG 15:45:20,789 Started hinted handoff for endPoint /192.168.1.7<br />DEBUG 15:45:20,800 Finished hinted handoff for endpoint /192.168.1.7<br />DEBUG 15:46:17,638 Disseminating load info ...<br />이 출력은 내가 클러스터에서 두개의 노드를 가지고 있다는 것을 보여준다. 내가 지금 시작한 노드는 192.168.1.5를 듣고 있고 이미 시작하여 동작하고 있는 것은 192.168.1.7을 듣고 있다.<br /><br />6.23. 다이나믹 링 참가<br /><br />카산드라 클러스터에서 노드들은 다른 것들에게 방해를 주지 않고 다운되었다가 다시 돌려질 수도 있다. 우리가 이전에 설명했듯이 두개의 노드를 가지고 클러스터를 시작하였다고 하자. 우리는 둘 중의 한 노드가 다운되도록 에러를 유발할수 있다. 그리고 클러스터의 나머지가 아무이상 없다는 것을 확인한다.<br />INFO 15:34:18,953 Starting up server gossip<br />INFO 15:34:19,281 Binding thrift service to /192.168.1.7:9160<br />INFO 15:34:19,343 Cassandra starting up...<br />INFO 15:45:19,396 Node /192.168.1.5 is now part of the cluster<br />INFO 15:45:20,176 InetAddress /192.168.1.5 is now UP<br />INFO 16:13:36,476 error writing to /192.168.1.5<br />INFO 16:13:40,517 InetAddress /192.168.1.5 is now dead.<br />INFO 16:21:02,466 error writing to /192.168.1.5<br />INFO 16:21:02,497 error writing to /192.168.1.5<br />에러 메시지는 1.5 노드가 되돌아 올때까지 되풀이 된다. Nodetool을 동작해보면 한 노드가 다운되었고 다른 것은 아직 이상없음을 볼 수 있다.<br />그래서 우리는 다시 되돌리고 1.7 에서 로그를 확인한다. 분명히도 카산드라는 자동적으로 다른 참여자는 클러스터로 되돌아와서 다시 비즈니스를 열었다.<br />INFO 16:33:48,193 error writing to /192.168.1.5<br />INFO 16:33:51,235 error writing to /192.168.1.5<br />INFO 16:34:20,126 Standard2 has reached its threshold; switching in a fresh Mem<br />table at CommitLogContext(file='/var/lib/cassandra/commitlog\CommitLog-127759165<br />782.log', position=752)<br />INFO 16:34:20,173 Enqueuing flush of Memtable(Standard2)@7481705<br />INFO 16:34:20,251 Writing Memtable(Standard2)@7481705<br />INFO 16:34:20,282 LocationInfo has reached its threshold; switching in a fresh<br />Memtable at CommitLogContext(file='/var/lib/cassandra/commitlog\CommitLog-127759<br />658782.log', position=752)<br />INFO 16:34:20,298 Enqueuing flush of Memtable(LocationInfo)@24804063<br />INFO 16:34:20,579 Completed flushing c:\var\lib\cassandra\data\Keyspace1\Standa<br />d2-1-Data.db<br />INFO 16:34:20,594 Writing Memtable(LocationInfo)@24804063<br />INFO 16:34:20,797 Completed flushing c:\var\lib\cassandra\data\system\LocationI<br />fo-2-Data.db<br />INFO 16:34:58,159 Node /192.168.1.5 has restarted, now UP again<br />INFO 16:34:58,159 Node /192.168.1.5 state jump to normal<br />상태는 1.5 노드에 대해서 다시 정상으로 돌아오고 그것이 클러스터의 일부라고 다시 나타낸다. <br />eben@morpheus$ bin/nodetool -host 192.168.1.5 ring<br />Address Status Load Range Ring<br />41654880048427970483049687892424207188<br />192.168.1.5 Up 1.71 KB 20846671262289044293293447172905883342 |<--|<br />192.168.1.7 Up 2 KB 41654880048427970483049687892424207188 |-->|<br /><br />6.24. 시큐리티<br /><br />디폴트로 카산드라는 네트워크상의 어느 클라이언트도 당신의 클러스터에 연결할 수 있게한다. 이것은 아무 시큐리티가 설정이 되어있지 않는 것을 의미한다기 보다는 카산드라가 아무에게도 credential을 요청하지 않고 연결되는 인증방식으로 설정이 되어 있는 상태라고 봐야한다. 시큐리티 매커니즘은 플러그인 식으로 사용할수 있고 이는 인증메커니즘이 다른 것으로 사용할 수도 있고 당신 고유의 것을 작성할수도 있음을 말한다.<br />디폴트로 플러그인 되어있는 인증방식은 org.apache.cassandra.auth.AllowAllAuthenticator 이다. 만약 당신이 클라이언트가 credential을 제공하도록 하고 싶다면 카산드라에서 다른 방법은 org.apache.cassandra.auth.SimpleAuthenticator 이다. 이 섹션에서 이 두번째 인증을 어떻게 쓰는지 살펴본다.<br /><br />6.24.1. SimpleAuthenticator 사용하기<br /><br />Config 디렉토리에 두개의 파일이 있다. Access.properties와 passwd.properties이다. access파일은 키/값 쌍을 어떤 사용자가 어떤 키스페이스에 접근이 허용되었는지 알려주고 comma-separated 리스트에 기록되어있다. 예는 아래와 같다.<br />Keyspace1=jsmith,Elvis Presley,dilbert<br />이것은 세명의 사용자가 Keyspace1에 접근이 가능하도록 되어있고 사용자 이름으로 키스페이스에 접근허가 되어있다. <br />Passwd.properties 파일은 이 사용자의 리스트를 가지고 있고 각 사용자의 패스워드를 담고있다. 여기 passwd.properties 파일의 예이다.<br />jsmith=havebadpass<br />Elvis\ Presley=graceland4evar<br />dilbert=nomoovertime<br />사용자 Elvis Presley에는 사용자이름에 스페이스가 있기 때문에 백슬래쉬로 표시되었음에 유의하라.<br />Simple Authentiucator를 사용하기 위해서 Cassandra.yaml에 있는 authenticator 요소의 값을 다른 것으로 대치하라. Org.apache.cassandra.auth.AllowAllAuthenticator로부터 변경하여 로그인이 필요한 구현 클래스의 이름으로 바꾸라. Org.apache.cassandra.auth.SimpleAuthenticator.<br />만약 인증 파일을 적당히 설정하지 않았다면 아래와 같은 에러를 보게된다.<br />ERROR 10:44:27,928 Fatal error: When using org.apache.cassandra.auth.SimpleAuth<br />enticator<br />access.properties and passwd.properties properties must be defined.<br />그것은 거기 한가지 과정이 더 있기 때문이다. 우리는 스크립트가 있는 bin/Cassandra.in.sh 파일을 사용하여 카산드라에게 access와 password 파일의 위치를 말해주어야 한다. 우리는 이파일의 밑에 아래 코드를 붙여넣어서 JVM에 그 파일 위치들을 넘긴다. 나의 인크루드 파일은 이제 아래와 같이 보이며 파일 풀 패스를 나타낸다.<br />JVM_OPTS="<br />-Dpasswd.properties=/home/eben/books/cassandra/dist/<br />apache-cassandra-0.7.0-beta1/<br />conf/passwd.properties<br />-Daccess.properties=/home/eben/books/cassandra/dist/<br />apache-cassandra-0.7.0-beta1/<br />conf/access.properties"<br />만약 당신이 이 파일들의 잘못된 위치나 이름을 썼을 경우에 서버 로그가 알게해준다.<br />ERROR 11:13:55,755 Internal error processing login<br />java.lang.RuntimeException: Authentication table file given by property<br />passwd.properties<br />could not be found: /somebadpath/my.properties (No such file or directory)<br />이제 우리는 사용자이름과 패스워드를 가지고 command-line interface로 로그인한다.<br />[default@unknown] connect localhost/9160<br />Connected to: "Test Cluster" on localhost/9160<br />[default@unknown] use Keyspace1 jsmith 'havebadpass'<br />Authenticated to keyspace: Keyspace1<br />[jsmith@Keyspace1]<br />만약 당신이 잘못된 패스워드를 입력하면 CLI가 말해준다.<br />[default@unknown] use Keyspace1 jsmith 'havebadpassfdfdfd'<br />Exception during authentication to the cassandra node: verify keyspace exists,<br />and you are using correct credentials.<br />만약 당신이 존재하지 않는 사용자 이름을 입력하거나 허가되지 않은 키스페이스에 인증하려고 하면 아래와 같은 메시지를 볼 것이다.<br />[default@unknown] use Keyspace1 dude 'dude'<br />Login failure. Did you specify 'keyspace', 'username' and 'password'?<br />[default@unknown]<br />약간 혼동되게도 당신이 단지 접근 권한이 없는 키스페이스를 사용하려고 하면 당신은 인증 메시지를 보게될 것이다. 하지만 그리고 어떤 동작을 수행할 수는 없다. 아래의 예에서 우리는 인증이 필요한 키스페이스로 갈 것이다. CLI가 우리가 그것을 하게 하지만 우리는 컬럼을 읽을 수 없다.<br />[default@Keyspace1] get Standard1['user123']['name']<br />Your credentials are not sufficient to perform READONLY operations<br />[default@Keyspace1]<br />우리가 이 사용자에게 ‘name’ 값을 설정했다면 적당한 credential을 주면 동작을 수행할 수 있다.<br />[default@Keyspace1] use Keyspace1 eben 'pass'<br />Authenticated to keyspace: Keyspace1<br />[eben@Keyspace1] get Standard1['user123']['name']<br />=> (column=6e616d65, value=bootsy, timestamp=1284316537496000)<br />[eben@Keyspace1]<br />우리는 또한 사용자이름, 패스워드 조합을 우리가 CLI에서 접속할 때 보여줄수있다.<br />eben@morpheus:~/books/cassandra/dist/apache-cassandra-0.7.0-beta1$<br />bin/cassandra-cli --host localhost --port 9160<br />--username jsmith --password havebadpass --keyspace Keyspace1<br />Connected to: "Test Cluster" on localhost/9160<br />Welcome to cassandra CLI.<br />Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.<br />[jsmith@Keyspace1] get Standard1['user123']['name']<br />=> (column=6e616d65, value=bootsy, timestamp=1284316537496000)<br />[jsmith@Keyspace1]<br />쿼리를 실행시키면 이제 우리에게 결과를 반환할 것이다.<br /><br />6.25. Programmatic Authentication<br /><br />당신이 당신의 키스페이스에 인증을 하였다면 당신의 클라이언트 애플리케이션 코드는 로그인 할 필요가 있다. 아래 예를 가이드로 삼을 수 있다.<br />package com.cassandraguide.config;<br />import java.util.HashMap;<br />import java.util.Map;<br />import org.apache.cassandra.thrift.AccessLevel;<br />import org.apache.cassandra.thrift.AuthenticationRequest;<br />import org.apache.cassandra.thrift.Cassandra;<br />import org.apache.thrift.protocol.TBinaryProtocol;<br />import org.apache.thrift.protocol.TProtocol;<br />import org.apache.thrift.transport.TFramedTransport;<br />import org.apache.thrift.transport.TSocket;<br />import org.apache.thrift.transport.TTransport;<br />/**<br />* How to connect if you've set up SimpleAuthenticator<br />*/<br />public class AuthExample {<br />public static void main(String[] args) throws Exception {<br />TTransport tr = new TSocket("localhost", 9160);<br />TFramedTransport tf = new TFramedTransport(tr);<br />TProtocol proto = new TBinaryProtocol(tf);<br />Cassandra.Client client = new Cassandra.Client(proto);<br />tr.open();<br />AuthenticationRequest authRequest = new AuthenticationRequest();<br />Map<String, String> credentials = new HashMap<String, String>();<br />credentials.put("username", "jsmith");<br />credentials.put("password", "havebadpass");<br />authRequest.setCredentials(credentials);<br />client.set_keyspace("Keyspace1");<br />AccessLevel access = client.login(authRequest);<br />System.out.println("ACCESS LEVEL: " + access);<br />tr.close();<br />}<br />}<br />이 케이스에서 프로그램은 FULL을 프린트 아웃하는데 이것은 사용자의 접근 레벨이다.<br />여기 몇가지 주의해야 할 점있다. 첫째, credential 맵은 username과 password를 키로서 사용하고 username 은 키가 아니고 password는 값이 아니다. 둘째, 당신은 set_keyspace를 불러야 하는데 어떤 키스페이스를 인증하려고 하는지 말해주어야 하기 때문이다.<br /><br />6.26. MD5 Encryption 사용하기<br /><br />SimpleAuthentication 클래스는 패스워드를 명시하기 위한 두가지 모드를 가지고 있다. 평이한 텍스트와 MD5 암호화이다. 여태까지 우리는 디폴트를 이용했으며 그것은 평이한 텍스트이다. 이제 MD5를 사용해서 시큐리티를 향상 시켜보자. MD5는 “Message-Digest algorithm version5” 라는 암호화 알고리즘이다. 이것은 널리쓰이는 입력으로 128bit 해쉬 값을 만들어내는 일방향 해쉬 펑션이다. <br />당신은 Cassandra.in.sh에서 MD5를 활성화 시키는데 passwd.mode 를 전환하여 JVM에 넘김으로써다.<br />JVM_OPTS=" \<br />-da \<br />//other stuff...<br />-Dpasswd.mode=MD5"<br />이제 만약 암호화되지 않은 암호를 인증하려한다면 아래와 같은 에러를 보게된다.<br />Exception during authentication to the cassandra node, verify you are using correct<br />credentials.<br />당신은 일방향 해쉬로 평이한 텍스트의 사용자 이름과 암호를 MD5 버전으로 만들어내려면 다양한 도구들을 사용할 수 있다. 여기 짧은 Python 프로그램이 있어 MD5 해쉬를 평이한 스트링에서 만들수 있다.<br />$ python<br />Python 2.6.5 ...<br />>>> from hashlib import md5<br />>>> p = "havebadpass"<br />>>> h = md5(p).hexdigest()<br />>>> print h<br />e1a31eee2136eb73e8e47f9e9d13ab0d<br />이제 jsmith를 위한 암호를 passwd.properties 파일에서 암호화된 값으로 대치할 수 있다.<br /><br />6.27. 당신 고유의 인증을 제공하기<br /><br />당신은 Keberos ticket이나 암호화 아니면 암호를 LDAP 디렉토리 같은 다른 곳에 저장하고 싶거나 하면 당신 고유의 인증을 카산드라에 제공할 수 있다. 당신의 인증을 만들기 위하여는 단지 IAuthenticator를 구현하면 된다. 이 인터페이스는 두 개의 메서드를 요구하는데 아래와 같다.<br />public AccessLevel login(String keyspace, AuthenticationRequest authRequest)<br />throws AuthenticationException, AuthorizationException;<br />public void validateConfiguration() throws ConfigurationException;<br />로그인 메서드는 Thrift AccessLevel 객체를 반환해야 한다. 이는 사용자가 어느 정도 레벨의 인증을 받았는지 알려준다. validateConfiguration 메서드는 단순히 인증 메커니즘이 제대로 셋업되었는지 확인한다. 예를 들어 SimpleAuthenticator 와 그것은 단지 필요한 access와 passwd 파일이 명시되었는지 검사한다.<br /><br />6.28. 그밖의 셋팅<br /><br />일반적인 셋팅이지만 여타 특정 카테고리에 속하지 않는 셋팅들이 있다. 그래서 여기에 따로 모아 놓았다.<br />- Column_index_size_in_kb<br />이것은 컬럼이 인덱스되기 전에 행이 커질수 있는 킬로바이트 사이즈를 명시한다. 당신이 만약 매우 큰 컬럼 값을 가진다면 이 값을 증가시키기 원할 것이다. 수퍼 컬럼은 인덱스되지 않는다. 그래서 이 셋팅은 오직 인덱스된 컬럼을 참조한다. 당신은 모든 읽는 인덱스 데이터가 읽는 억세스를 위한 것이기에 이 셋팅이 매우 크지는 않기를 원한다. 그래서 필요한 이상을 읽는다면 카산드라가 느려지게 된다. 이것은 만약 당신이 부분적인 행을 자주 읽는다면 특별히 중요할 수 있다.<br />- In_memory_compaction_limit_in_mb<br />이 값은 메모리안에 압축되어야 하는 행의 사이즈 제한을 표시한다. 만약 행이 이보다 크면 디스크에 옮겨지고 느린 두단계에 의해서 압축된다. 셋팅 값은 64MB가 디폴트이다. 카산드라 0.7 이전에는 이것은 row_warning_threshold_in_mb 라고 불렸다.<br />- Gc_grace_seconds<br />이것은 garbage collecting 이 되기위해 기다리는 시간을 초로 나타낸다. Tombstone은 값이 지워졌다는 것을 나타내며 쓰레쉬 홀드 값을 만날 때까지 기다린다. 디폴트로 864,000으로 셋팅되어 있고 이것은 10일이다. 이것은 비정상적으로 긴시간같지만 tombstone이 클러스터의 모든 복사본으로 퍼져가도록 충분한 시간이 필요하다. 이것은 아직도 긴 시간 같기는 하지만 당신은 하드웨어 오류가 있을 수도 있고 tombstone이 이들이 다시 돌아오고 작동가능해져서 복사가 되어야 한다는 것이다. 만약 다운된 노드가 tombstone이 실제로 지워진 후에 tombstone 노티피케이션을 받지 못했다면 read repair는 지워지지 않은 데이터가 클러스터에 천천히 다시 받아들여지도록 할 것이다. 물론 만약 당신이 많은 지우기를 한다면 당신은 이 설정을 깔끔하게 하기위하여 다시 돌릴수는 있지만 아마도 큰 차이가 나지는 않을 것이다.<br />- Phi_convict_threshold<br />이것은 서버가 다운되었다는 최종 판결을 내릴수 있도록 카산드라가 도달해야 하는 Phi 값을 나타낸다. 디폴트로 8로 셋팅되어 있다. 일반적으로 이 값을 바꾸지는 않는다. 그러나 네트워크가 최적화되어 동작하고 있지 못하고 카산드라가 잘못된 읽기를 한다면 값을 증가시켜 노드가 실제로 다운되었는지 결정하는 latency를 더할 수 있다. <br /><br />6.29. 추가적인 도구들<br /><br />이 섹션에서 카산드라가 설정하도록 돕는 그밖의 도구들을 논의해 보자.<br /><br /><br />6.29.1. 키를 보여주기<br /><br />당신은 sstablekeys 라는 스크립트를 사용하여 어떤 키가 당신의 SSTables에 있는지 볼 수 있다. 이것을 실행하기 위해 키를 보기 위한 SSTable의 위치를 사용한다. 아래와 같다.<br />eben@morpheus$ bin/sstablekeys /var/lib/cassandra/data/Hotelier/Hotel-1-Data.db<br />WARN 10:56:05,928 Schema definitions were defined both locally and in cassandra.yaml.<br />Definitions in cassandra.yaml were ignored.<br />415a435f303433<br />415a535f303131<br />4341535f303231<br />4e594e5f303432<br /><br />6.29.2. 이전 설정을 받아들이기<br /><br />만약 당신이 0.6 버전에서 설정파일에 정의된 키스페이스를 0.7 이나 그 이상에서 임포트하기 원한다면 JMX 동작, StorageService.loadSchemaFromYaml()을 사용할 수 있다. 이것은 두가지 중요한 경고를 가지고 있다. 첫째, 오직 한 번만 사용이 된다. 둘째, 버전 0.8에서는 없어질 것이다.<br />0.7 버전부터 시작하여 사용자 키스페이스는 Cassandra.yaml에 정의되어 있고 서비스가 시작할때 디폴트로 로드되지 않는다. 그래서 카산드라가 처음으로 시작할 때 아래와 같은 메시지를 보게 될 것이다.<br />INFO config.DatabaseDescriptor: Found table data in data directories.<br />Consider using JMX to call org.apache.cassandra.service.StorageService.<br />loadSchemaFromYaml().<br />로드하기 위하여 loadSchemaFromYaml 이라는 JMX 동작을 해야한다. 그러나 이명령을 하기 위하여 당신은 몇 가지를 해야한다. 첫째, mx4j-tools.jar를 Sourceforge.net에서 받아라. ZIP 파일을 받아서 압축을 아무 디렉토리에 풀어라. 그리고 mx4j-tools.jar라는 JAR파일을 카산드라 lib 디렉토리에 푼다. 이는 카산드라와 통신하기 위하여 JMX 연결을 만들게 해준다. 우리는 카산드라와 함께 JMX를 사용하는 것을 후에 보겠지만 지금은 키스페이스를 테스트하기 원한다. JAR를 추가한 후에 카산드라를 재시작한다.<br />다음으로 터미널을 새로 연후에 jconsole 명령을 친다. GUI가 시작되고 JConsole 도구를 로드하여 자바를 장착한다. 이 도구는 Java Virtual Machine을 보고 실행시 데이터를 보고 JMX로 나타내진 동작들을 수행하게 한다. <br />Cassandra.yaml에 정의된 키스페이스를 로드하기 위해 JConsole GUI에 있는 MBeans탭을 클릭한다. Org.apache.cassandra.service 빈을 펼쳐서 StorageService 그리고 동작이다. loadSchemaFromYaml을 클릭하고 버튼을 클릭한다. 이것은 카산드라 서비스에서 명령을 실행하고 Cassandra.yaml파일에서 당신의 스키마를 로드한다. <br />한번만 가능한 동작을 0.6 설정을 0.7으로 임포트하려면 loadSchemaFromYaml 동작을 StorageService MBean에 실행한다. 이것은 그림 6-4에 보여진다.<br />이제 당신의 로그에서 아래와 같은 출력을 보게된다.<br />17:35:47 INFO thrift.CassandraDaemon: Cassandra starting up...<br />17:35:48 INFO utils.Mx4jTool: mx4j successfuly loaded<br />HttpAdaptor version 3.0.2 started on port 8081<br />17:40:43 INFO config.DatabaseDescriptor: UTF8Type<br />17:40:43 INFO config.DatabaseDescriptor: BytesType<br />17:40:43 INFO config.DatabaseDescriptor: UTF8Type<br />17:40:43 INFO config.DatabaseDescriptor: TimeUUIDType<br />17:40:43 INFO config.DatabaseDescriptor: BytesType<br />17:40:43 INFO config.DatabaseDescriptor: BytesType<br />17:40:43 INFO config.DatabaseDescriptor:<br />데이터베이스 로그는 동작이 스키마를 잘 로드했는지 보여주는 좋은 것이다.<br /> <br />그림6-4. jconsole도구를 사용하여 Cassandra.yaml에 정의된 오래된 키스페이스를 로드한다.<br /><br />당신은 org.apache.cassandra.config.Converter클래스를 사용하여 storage-conf.xml을 Cassandra.yaml로 변환할 수 있다. 만약 0.6에서 0.7로 업그레이드 한다면 이것이 첫번째 단계일것이다. 변환기를 실행하기 위하여 config-converter 스크립트를 bin 디렉토리에서 사용한다. 이것은 오래된 파일을 읽어서 변환하고 내용을 덤프한다.Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-86465199103192115132011-06-30T22:14:00.001-07:002011-06-30T22:14:42.450-07:00Cassandra (5/12)5. 카산드라 구조<br /><br />이 장에서 우리는 카산드라가 어떻게 일하는지 이해하기 위해 그 디자인의 여러가지 면을 살펴보겠다. 우리는 peer-to-peer 디자인과 그 프로토콜을 고려하고 카산드라가 읽기, 쓰기 요청에 대해 어떻게 반응하는지 보고 확장성, 내구성, 유용성, 관리성 등의 구조적인 고려사항이 어떻게 영향을 받는지 살펴보겠다. 카산드라의 플랫폼 요청의 위임자로 동작하는Staged Event-Driven Architecture 의 채용도 논의한다. <br />카산드라의 구조는 정교하고 몇 가지 이론적인 구조에 의지하고 있다. 아직 알지 못하는 몇가지 용어를 참조하지 않고 또 새로운 용어 한 개를 논하는 것이 어렵다. 이는 조금 당황스러울수도 있기 때문에 후반에 Glossary를 넣었다.<br /><br />5.1. 시스템 키스페이스<br /><br />카산드라에는 system이라고 불리는 내부적 키스페이스가 있어서 클러스터가 동작에 도움을 주는 메타데이터를 저장하고 있다. Microsoft의 SQL서버에서 두 개의 메타 데이터베이스가 유지되는데 그것은 master와 tempdb이다. Master는 디스크 공간, 사용, 시스템 셋팅, 일반적인 서버 설치 노트 등의 정보가 저장된다. Tempdb는 중간 결과물들이나 일반적인 일들을 저장하는 워크스페이스이다. Oracle 데이터베이스는 항상 SYSTEM이라는 테이블 공간을 가지고 있으며 비슷한 목적으로 쓰인다. 카산드라 시스템의 키스페이스는 이것들과 유사하다.<br />특별히 시스템 키스페이스는 로컬 노드를 위한 메타데이터를 저장한다. 메타데이터는 다음을 포함한다.<br /> 노드의 토큰<br /> 클러스터의 이름<br /> 키스페이스와 다이나믹 로딩을 지원하기 위한 스키마 정의<br /> 마이그레이션 데이터<br /> 노드가 bootstrapped 되었는지 여부<br />스키마 정의는 두개의 컬럼군에 저장된다. Schema 컬럼군은 사용자 키스페이스와 스키마 정의를 가지고 있고, Migrations 컬럼군은 키스페이스에 변경사항을 기록한다.<br />당신은 시스템 키스페이스를 변경하거나 쓸수는 없다.<br /><br />5.2. Peer-to-Peer<br /><br />전통적인 데이터베이스에서 MySQL처럼 다수의 기기에 배포될 수 있었다. 새로운 모델인 Google’s Bigtable 등도 마찬가지 였는데 어떤 노드들은 master로 어떤 것들은 slave로 설정되었다. 이것들은 클러스터 상에서 각각 다른 역할을 가지고 있었다. Master는 데이터의 소스이고 slave는 데이터들의 싱크를 master와 맞추었다. master에게 변경이 가해지면 slave에게도 전달이 되었다. 이러한 모델은 데이터를 읽는데 최적화되어있어서 어떤 slave로부터도 데이터를 읽을 수 있었다. 하지만 복사는 일방향으로서 master로부터 slave에게로 였다. 이것은 중요한 영향이 있는데 모든 쓰기는 master에게 보내져야 하며, 그것은 한 지점이 실패할 경우 위험하다는 것을 의미한다. Master/slave 셋팅에서 master 노드는 만약 오프라인이 된다면 많은 영향이 있을 수 밖에 없다.<br />반면에 카산드라는 peer-to-peer 분산 모델이어서 어느 노드이던지 동등하다. 그래서 master 노드가 별개로 존재하지는 않는다. 카산드라 디자인의 목적은 모든 시스템이 확장성이 쉽고 유용성이다. 만약 어떤 카산드라 노드를 오프라인 시킨다면 잠재적으로 모든 성능에 영향은 있겠지만 서비스를 불가능하게 하지는 않는다. 당신이 적당한 복사 전략을 쓰고 있다고 생각하면 어떤 노드에 문제가 생겼어도 그 데이터는 읽고 쓰기가 가능하다.<br />그리고 이 디자인은 카산드라에 새로운 노드를 추가하여 확장하기 쉽게한다. 각 노드의 동작은 같기 때문에 새로운 서버를 추가하기 위해서는 그냥 클러스터에 추가하면 된다. 처음에는 데이터를 받아들이고 링의 토폴로지를 배우기 위한 시간이 있어서 추가된 서버는 처음부터 모든 요청에 응답하는 것은 아니다. 이 과정을 마친후에는 링에 조인하고 요청을 받아들이게 된다. 이것은 설정은 최소로 필요로 하고 자동으로 이루어 진다. 이러한 이유 때문에 P2P 디자인은 확장 또는 축소하는 것을 master/slave 구조에서 보다 쉽게 만든다.<br /><br />5.3. 소문과 실패 검출<br /><br />비중앙화와 파티션 내구성을 지원하기 위해 카산드라는 gossip protocol 을 써서 링안에서의 통신과 각 노드들이 다른 노드들의 상태 정보를 갖고 있게 한다. Gossiper는 매우 바쁘게 움직인다. Anti-entropy 는 수동의 프로세스이어서 gossip에 의해 작동하지는 않는다.<br />Gossip 프로토콜(“epidemic protocol”로 불리기도 한다.)은 일반적으로 오류가 많은 네트워크를 가정하여 복사하는 분산 데이터베이스 환경에서 자동 메커니즘을 쓴다. 그것은 peer간에 필요한 정보를 교환하고 통신하기 때문에 그것에서 이름을 따왔다.<br />카산드라의 gossip 프로토콜은 org.apache.cassandra.gms.Gossiper 에 주로 구현되어 있으며 로컬 노드들간의 gossip을 관리하는게 주요임무이다. 서버 노드가 시작되었을 때 gossiper에 등록하여 각 종단의 상태 정보를 받아볼수 있게한다.<br />카산드라 gossip이 실패를 검출하는데 사용되기 때문에 Gossiper 클래스는 살아있고 죽은 노드들의 리스트를 관리하게 된다.<br />여기 gossiper가 작동하는 방식이 있다.<br />1. 주기적으로 (TimerTask에 설정한대로) G=gossiper 는 무작위로 링안의 노드를 골라서 gossip 세션을 초기화한다. 각 gossip의 주기는 세 개 메시지를 필요로 한다.<br />2. Gossio 초기화하는 것은 그 고른 친구에게 GossipDigestSynMessage를 보낸다.<br />3. 친구가 이 메시지를 받았을 때 GossipDigestAckMessage를 반환한다.<br />4. Ack 메시지를 받으면 GossipDigestAck2Message를 다시 보내서 종료한다.<br />Gossiper가 다른 종단이 죽었다고 결정되면 그것의 로컬 리스트에 죽었다고 선언하고 로깅한다. <br />카산드라는 분산컴퓨팅을 위한 유명한 알고리즘인 Phi Accrual Failure Detection으로 실패 검출을 잘 지원한다. 이 실패 검출 방법은 2004년 일본의 Advanced Institute of Science and Technology에 의한 것이다.<br />Accrual 실패 검출은 두 가지 주된 아이디어에 기반하였다. 첫번째 일반적인 아이디어는 실패 검출은 모니터링하는 애플리케이션에 decoupling 되어 유연해야 한다는 것이다. 두번째로 더욱 참신한 아이디어는 간단히 heartbeat 이라는 것을 두어 그에 따라 노드가 살았는지 죽었는지 판단할 수 있는것으로써 전통적인 실패 검출을 뒤집은 것이다. Accrual 실패 검출은 이 접근방법이 순진하고 죽었다는 것과 살아있다는 것 사이에 suspicion level 이라는 것을 두어 접근한다.<br />그러므로 실패 모니터링 시스템은 suspicion 레벨을 끊임없이 나타내어 노드가 죽었는지 잘 나타낸다. 이것은 네트워크 환경에서 계정의 변동을 나타내서 바람직하다. 예를 들어 한 개의 연결이 이상이 있다고 해서 전체 노드가 죽었다고 할 필요는 없는것이다. 이것은 단순한 두 가지 상태변화로 보는것보다 heartbeat의 샘플링을 통해 전체적으로 더 강하고 더 약한 실패의 가능성을 따져봄으로써 더 좋다.<br />실패 검출은 카산드라에서 org.apache.cassandra.gms.FailureDetector 클래스에 구현되어있고 이것은 org.apache.cassandra.gms.IFailureDetector 인터페이스를 구현한다. 이것들은 함께 아래 동작을 지원한다.<br />isAlive(InetAddress)<br /> 주어진 노드가 살아있는지 보고한다.<br />Interpret(InetAddress)<br /> Suspicion 레벨에 근거해서 gossiper가 어떤 노드가 살았는지 죽었는지 결정하도록 한다.<br />Report(InetAddress)<br /> 어떤 노드가 heartbeat를 받았을 때 이 메서드를 부른다.<br /><br />5.4. Anti-Entropy 와 Read Repair<br /><br />당신이 gossip 프로토콜을 볼때는 종종 그에 카운터파트인 컴퓨팅의 유행성의 이론에 역시 기반한 anti-entropy 라는 이론을 보게될 것이다. Anti-entropy 는 카산드라에서 각 다른 노드들의 데이터가 최신으로 업데이트 되도록 하는 복사본 싱크 메커니즘이다.<br />여기 어떻게 작동하는지 본다. 주된 작동동안 서버는 Merkle 트리를 이웃 노드들과 교환하기 위해서 TreeRequest/TreeResponse 대화를 초기화한다. Merkle 트리는 컬럼 군에서 데이터를 표현하는 해쉬이다. 다른 노드의 트리와 맞지 않으면 그것이 셋팅되어야 하는 가장 최근의 데이터 값으로 repair 혹은 reconcile 하게 된다. 이 트리 비교는 org.apache.cassandra.service.AntiEntropyService 클래스가 하게 된다. AntiEntropyService 는 싱글톤 패턴을 구현하며 Differencer 클래스도 정의하는데 이것은 두 트리를 비교하여 무슨 차이점을 발견하면 repair를 시작하게 된다.<br />Anti-entropy 는 Amazon의 Dynamo에도 사용되며 카산드라 구현은 이를 모델링한다.<br />Dynamo는 Merkle 트리를 anti-entropy 를 위해 사용한다. 카산드라가 그것들을 역시 사용하며 하지만 구현은 조금 다르다. 카산드라에서 각 컬럼군은 각 고유의 Merkle 트리를 가진다. 트리는 각 비교 동작시에 snapshot 처럼 생성된다. 그리고 링에서 이웃하는 노드에게 보내져야 할 때 까지는 보관된다. 이 구현의 장점은 disk I/O를 줄인다는데 있다.<br />각 업데이트 후에 anti-entropy 알고리즘이 작동한다. 이것은 데이터베이스에 대하여 checksum을 수행하고 peer간 checksum을 비교한다. 만약 checksum이 다르면 데이터가 교환된다. 이것은 시스템이 불필요한 anti-entropy를 수행하지 않도록 peer들이 가장 최근의 업데이트를 받도록 시간 창을 사용하는 것이 필요하다. 동작을 빠르게 하기 위해 노드는 내부적으로 타임스탬프에 의한 변환된 인덱스를 유지하고 가장 최근의 업데이트만을 교환한다.<br />카산드라에서 클러스터를 이루기 위해 당신은 여러 개의 노드를 가지고 있고 한 개나 그 이상의 여러 개의 노드는 주어진 데이터의 복사본 처럼 작동한다. 이 데이터를 읽기 위해서 클라이언트는 클러스터 안의 어느 노드든과 연결하고 클라이언트에 의해 보여진 일관성 레벨에 따라 몇 개의 노드를 읽는다. 클라인언트의 일관성 레벨이 맞을 때까지 읽기 동작은 블록되어있다. 만약 어떤 노드가 기간이 지난 값으로 대답을 하면 카산드라는 클라이언트에게 가장 최근의 값을 돌려주게 된다. 반환한 후에는 카산드라는 read repair 라는 것을 백그라운드로 실행하게 된다. 이 동작은 값을 가장 최근의 값으로 유지한다.<br />카산드라에 의해 수행되는 이 디자인은 Project Voldemort 와 Riak 같은 straight key/value 를 저장한다. 이것은 클라이언트가 모든 노드가 읽혀질때까지 블록하지는 않지만 read repair 가 데이터를 신선하게 유지하는일을 백그라운드로 실행하기 때문에 퍼포먼스를 더 좋게하는 역할을 한다. 만약 클라이언트가 많다면 정족수로부터 읽어오는 것은 적어도 하나는 가장 최근의 값을 가지고 있다는 점을 분명히 하기 위해서 중요하다.<br />만약 클라이언트가 약한 일관성 레벨을 보여준다면 read repair는 클라이언트로 돌아온 후에 백그라운드로 실행하게 된다. 만약 당신이 더 강한 일관성 레벨을 사용한다면 read repair는 데이터가 클라이언트에게 반환되기 전에 실행된다.<br />만약 읽기 동작이 같은 타임스탬프에 저장이 되었으나 다른 값을 보여준다면 카산드라는 tie-breaking 메커니즘으로 값을 직접 비교하여 그 읽기가 무한 루프에 빠지지 않도록 해준다. 이런 케이스는 매우 드물다.<br /><br />5.5. Memtables, SSTables, and Commit Logs<br /><br />쓰기 동작을 수행할 때 이것은 바로 commit log에 기록된다. Commit log는 카산드라의 내구성 목표를 지원하기 위한 crash-recovery 메커니즘이다. 쓰기는 commit log에 기록될 때까지 성공했다고 여겨지지 않는다. 쓰기가 메모리 저장이 아직 안되었다는 것을 확실히 하여 아직 데이터를 복구할 수 있다.<br />Commit log에 쓰여진 후 값은 memtable이라고 불리는 메모리 데이터 구조에 저장된다. Memtable에 여러 개의 오브젝트가 저장되어 쓰레쉬 홀드를 넘어가면 memtable은 SSTable이라고 불리는 디스크의 한 파일로 배출된다. 새로운 memtable은 생성된다. 이 배출은 블록블럭 않는 동작이다. 한 컬럼군에 대해 여러 개의 memtable이 존재할 수 있다. 하나는 현재 동작하고 나머지는 배출되기를 기다린다. 이것은 보통은 과부하가 걸리지 않은 이상 노드가 그것을 빨리 배출하기 때문에 크게 오래 기다리지는 않는다.<br />각 commit log는 내부적으로 비트 플래그 가지고 있어서 배출이 필요한지 아닌지 나타낸다. 처음 쓰기 동작이 받아들여 졌을 때 commit log에 쓰여지고 비트 플래그는 1로 셋팅된다. 컬럼군에는 한 개의 비트 플래그가 있다. 왜냐하면 모든 서버에 대하여 한 개의 commit log가 쓰여지기 때문이다. 모든 컬럼군에의 쓰기동작은 같은 commit log로 간다. 그래서 비트 플래그는 특정한 commit log가 특정한 컬럼군에 대해서 배출되지 않았는지의 여부를 담고 있다. 한 번 memtable이 디스크로 잘 배출되면 해당하는 commit log의 비트 플래그는 0으로 셋팅된다. 이것은 commit log가 내구성을 위하여 더 이상 그 데이터를 보관하지 않아도 됨을 말한다. 일반적인 logfile처럼 commit log는 설정가능한 쓰레쉬 홀드를 가지며 한번 이 쓰레쉬 홀드가 도달하면 없어지도 다시 시작한다. <br />SSTable은 구글의 Bigtable에서 빌려온 개념이다. Memtable이 SSTable로 디스크에 배출되면 애플리케이션에 의해서 바뀔 수가 없다. SSTable이 꽉 압축되었다는 사실에도 불구하고 이 압축은 디스크상의 표현을 바꿀 뿐이다. 이것은 근본적으로 합치는 단계를 거쳐서 새파일을 만들고 기존에 성공했던 예전 파일을 지운다.<br />각 SSTable은 관련된 Bloom filter를 가진다. 이것은 추가적인 퍼포먼스 향상을 위해 쓰인다. 모든 쓰기 동작은 순차적이어서 카산드라에서 쓰기가 잘 동작되는 이유이다. 카산드라에서 모든 쓰기동작은 추가적인 동작이어서 다른 읽기 찾기 동작은 값을 쓰기 위해서 필요하지 않다. 이것은 한가지 디스크상의 속도 퍼포먼스에 제한사항을 가진다. 압축은 데이터의 재정렬을 분할상환하는데 순차적인 IO를 사용한다. 그래서 퍼포먼스 이득은 각 각 나누는 데서 생긴다. 쓰기 동작은 즉각적인 추가이다 그래서 압축은 차후 읽기의 퍼포먼스를 좋게한다. 카산드라가 값은 최종적으로 속한 곳에 삽입한다면 쓰기 클라이언트는 추후에 찾을 것이다.<br />읽기 동작에서 카산드라는 값을 찾기위해 memtable을 처음 찾을 것이다. Memtable은 org.apache.cassandra.db.Memtable 클래스에 의해 구현된다.<br /><br />5.6. Hinted Handoff<br />다음의 시나리오를 고려해보자. 쓰기 요청이 카산드라에게 보내졌다. 그러나 네트워크 파티션이나 하드웨어 문제 등 이유로 해당하는 노드가 가용하지 않다. 이런 상황에서 일반적으로 가용성을 확실히 하기 위해서 카산드라는 hinted handoff라는 것을 구현했다. 당신은 hint라는 것이 쓰기 동작에서 어떤 정보를 담은 작은 노트정도로 생각할 수 있다. 쓰기가 되어야 할 노드가 실패한다면 쓰기를 받은 카산드라 노드는 hint를 만든다. 이것은 “나는 노드 B에 해당하는 쓰기 정보를 가지고 있다. 나는 노드 B가 온라인으로 돌아오면 쓰기 요청을 다시 보낼것이다.” 라는 리마인더와 같다. 이것은 노드 A가 노드B에게 쓰기에 대해서 hint를 준것이다.<br />이것은 카산드라가 항상 쓰기 가능하게 해준다. 그리고 실패한 노드가 온라인으로 되돌아 온 후에 일관성없는 시간을 줄여준다. 우리는 이전에 일관성 레벨에 관해서 논했다. 그리고 일관성 레벨 ANY 는 0.6 버전에서 추가되었고 hinted handoff 가 쓰기 동작의 성공에 대해 충분하다는 것을 기억할 것이다. 이것은 hint가 기록될 수 있어도 쓰기는 여전히 성공적이라고 보이는 것이다.<br />Hinted handoff에 대한 걱정이 카산드라 커뮤니티 멤버사이에 있었다. 처음에는 전체적인 내구성을 위해서 좋은 디자인이라고 보였다. 그리고 Java Message Service(JMS) 같은 많은 분산형 컴퓨팅 패러다임에 익숙했기 때문에 문제가 없다고 보였다. 배달이 보장된 JMS 큐에서 만약 메시지가 받는 이에게 전달이 되지 못하면 JMS는 잠시의 인터벌 동안 기다리고 받을 때까지 다시 보낸다. 하지만 JMS와 카산드라 hinted handoff 양쪽에는 실제적인 문제점이 있다. 만약 노드가 일정 시간동안 오프라인으로 되면 hint는 다른 노드에 많이 쌓이게 된다. 그리고 다른 노드가 실패한 노드가 다시 온라인으로 돌아온 것을 통보하면 그 노드는 많은 요청의 홍수에 둘러싸이고 위험한 상태가 된다.<br />이 걱정에 대하여 지금은 hinted handoff를 끌수도 있거나 좀 더 극적이지는 않게 프라이어리티를 줄여서 새로운 쓰기 요청보다 낮게 할 수 있다.<br /><br />5.7. 압축<br /><br />카산드라에서 압축 동작은 SSTable을 합치기 위해서 한다. 압축하는 동안 SSTable에 있는 데이터는 합쳐진다. Key도 합쳐진다. 컬럼도 합쳐지고 tombstone은 버려진다. 그리고 새로운 인덱스가 만들어진다.<br />압축은 많은 축적된 데이터를 합쳐줌으로써 빈 공간을 만드는 과정이다. 이것은 관계형 세상에서 table을 새로 만드는 과정과 대략 비슷하다. 그러나 Stu Hood가 지적했듯이 카산드라의 주된 다른점은 서버의 생명주기동안 분할 상환될 투명한 동작이다.<br />압축에서 합쳐진 데이터는 정렬된다. 새로운 인덱스는 정렬된 데이터에 대해 만들어진다. 새로 합쳐지고 정렬되고 인덱스가 만들어진 데이터는 한 개의 SSTable에 쓰여진다. 각 SSTable은 데이터, 인덱스, filter로 이루어 진다. 이 과정은 클래스 org.apache.cassandra.db.CompactionManager에 의해 관리된다. CompactionManager는 MBean을 구현한다.<br />압축의 또 다른 중요한 기능은 필요한 찾기의 수를 줄여서 퍼포먼스를 향상시키는 것이다. 주어진 key에 대해서 컬럼 데이터를 찾기 위해서는 일정 수의 SSTable을 찾아야 한다. Key가 자주 변형된다면 그 변형은 배출된 SSTable에서 종료될 것이다. 이것은 압축하는 것은 데이터베이스가 찾기를 실행해서 각 SSTable로부터 데이터를 가져올 필요가 없게 해준다.<br />카산드라에는 여러가지 다른 타입의 압축이 있다. 주된 압축은 한 두가지 방법에 의해 시작된다. 노드 탐색에 의하거나 자동으로 이루어지는것이다. 노드 탐색은 TreeRequest메시지를 타겟 주변의 노드에게 보낸다. 노드가 TreeRequest를 받았을 때 곧바로 read-only 압축을 실행하여 컬럼군을 검사한다.<br />Read-only 압축은 아래의 단계를 거친다.<br />1. 컬럼군에서 key 배분을 가져온다.<br />2. 행이 검사항목에 더해지면 만약 컬럼군이 검사되어야 하면 Merkle tree를 만들어 이웃한 노드들에게 브로드캐스팅한다.<br />3. Merkle tree가 Differences의 리스트와 함께 가져온다.<br />4. 비교가 StageManager에 의해서 실행되고 이것은 일을 실행하는데 동시성을 다루는데 책임이 있다. 이 케이스에서 StageManager는 Anti-Entropy Stage를 사용한다. 이것은 org.apache.cassadra.concurrent.JMXEnabledThreadPoolExecutor클래스를 사용하며 한 쓰레드안에서 압축을 실행하여 MBean 에서 처럼 동작이 가능하게 만든다.<br />당신은 압축 쓰레드의 priority를 줄여서 전반적인 퍼포먼스를 향상할 수 있다.<br />이것을 하기 위해서는 아래의 플래그를 사용한다.<br /> -Dcassandra.compaction.priority=1<br />이것은 IO가 아니라 CPU 사용에 영향을 미친다.<br /><br />5.8. Bloom Filters<br /><br />Bloom filter는 퍼포먼스 향상기 처럼 사용된다. 그것을 발명한 Burton Bloom의 이름을 따서 이름지어 졌다. Bloom filter는 매우 빠르고 결정적이지 않은 알고리즘으로서 어떤 요소가 셋의 멤버인지 아닌지 테스트할 수 있다. 그것이 결정적이지 않다는 것은 Bloom filter로부터 false-positive 를 읽어올 수 있고 이것은 false-negative가 아니다. Bloom filter는 데이터의 값을 비트 어레이에 매핑하고 큰 데이터셋을 digest string에 매핑한다. Digest는 정의대로 원래의 데이터가 사용하는 것보다 적은 메모리를 쓴다. Filter는 메모리에 저장되며 key 를 찾을 때 데이터 접근을 줄임으로서 퍼포먼스를 향상시키는데 쓰인다. 디스크 접근은 일반적으로 메모리 접근보다 느리다. 그래서 Bloom filter는 cache의 특별한 한 종류이다. 쿼리가 실행될 때 Bloom filter는 디스크를 접근하기 전에 처음 체크된다. False-negative가 나오지 않기 때문에 filter가 그 인자가 셋안에 존재하지 않는다고 하면 그것은 확실히 없다. 그러나 필터가 엘리먼트가 셋안에 있다고 하면 디스크는 꼭 접근된다.<br />새로운 JMX MBean 이 Nodetool에 추가되어 false-positive의 수를 체크할수 있게 되면 당신의 Bloom filter는 반환된다. 이 동작은 getBloomFilterFalsePositives라고 불리운다.<br /><br />5.9. Tombstones<br /><br />관계형 세상에서 soft delete라는 아이디어에 익숙할 것이다. 실제 delete SQL문을 실행하는 대신에 애플리케이션은 delete라고 불리게 값을 업데이트 한다. 예를 들면 프로그래머는 때로 audit trail을 지원하기 위해 이것을 한다.<br />카산드라에는 tombstone이라는 비슷한 개념이 있다. 이것은 모든 delete가 일하는 방식이고 그래서 당신을 위해 자동으로 이루어질 것이다. 당신이 delete 동작을 실행할 때 데이터는 즉시 지워지지는 않는다. 그 대신 값에 tombstone을 놓는 업데이트 처럼 작동할 것이다. Tombstone은 지우기를 표시한 마크와 같은데 압축이 실행될 때까지 SSTable의 오래된 데이터를 억누를 필요가 있다.<br />Garbage Collection Grace Seconds라는 관련된 셋팅이 있다. 이것은 서버가 tombstone을 garbage collect 하기까지 기다리는 시간이다. 디폴트로 이것은 864,000초 즉 10일이다. 카산드라는 tombstone의 나이를 따라간다. 그리고 tombstone이 GCGraceSeconds보다 오래되면 garbage collect가 일어난다. 이 딜레이의 목적은 가용하지 않았던 노드에게 깨어날 시간을 주고 만약 노드가 이 시간보다 오래 다운되면 실패로 간주되고 교체된다.<br />0.7 버전에서 이 셋팅은 컬럼군당 설정이 가능하다.<br /><br />5.10. Staged Event-Driven Architecture (SEDA)<br /><br />카산드라는 Staged Event-Driven Architecture를 구현한다. SEDA는 매우 동시적인 인터넷 서비스를 위한 일반적인 구조이다. 원래는 2001년 “SEDA: An Architecture for Well-Conditioned, Scalable Internet Services”라는 논문에서 Matt Welsh, David Culler, Eric Brewer에 의해서 제안되었다. <br />일반적인 애플리케이션에서 한 가지의 일은 한 쓰레드안에서 이루어진다. 예를 들면 쓰기 동작은 같은 쓰레드 안에서 이루어진다. 그러나 카산드라는 다르다. 이것의 동시성 모델은 SEDA에 기반했다. 그래서 한 동작은 한 쓰레드에서 시작하여 다른 쓰레드로 그 일을 넘겨줄수도 있다. 하지만 현재 수행중인 쓰레드에게 그 책임이 달린 것은 아니고 일은 stage라고 불리는 것으로 나누어졌고 쓰레드 풀 (java.util.concurrent.ExecutorService) 에 의해 결정이 된다. Stage는 기본적인 일의 단위이다. 그리고 한 일은 내부적으로 한 stage에서 다른 것으로 넘어가게 된다. 다른 stage는 다른 쓰레드에 의해서 다루어 질수 있기 때문에, 카산드라는 퍼포먼스에 향상을 보게 되었다. SEDA 디자인은 그 자신의 리소스를 카산드라가 관리할 수 있다는 것을 의미한다. 왜냐하면 다른 동작은 디스크 IO, 혹은 CPU 제약, 네트워크 동작 등을 필요로 할 수 있기 때문에 풀은 자신의 일을 사용가능한 리소스에 따라 관리한다.<br />Stage는 들어오는 이벤트 큐와 이벤트 핸들러로 이루어 지며 관련된 쓰레드 풀이 있다. Stage는 스케줄링과 쓰레드 배분을 결정하는 콘트롤러에의해 관리된다. 카산드라는 일종의 동시성 모델을 구현하며 쓰레드 풀인 java.util.concurrent.ExecutorService를 사용한다. 이것이 어떻게 일하는 지 보기위해 org.apache.cassandra.concurrent.StageManager 클래스를 보라.<br />아래의 동작은 카산드라에서 stage로 표현된다.<br /> Read<br /> Mutation<br /> Gossip<br /> Response<br /> Anti-Entropy<br /> Load Balance<br /> Migration<br /> Streaming<br />몇 개의 추가적인 동작이 stage로 구현되어 있다. Memtable에 수행이 되는 일들의 단위를 위한 stage가 있고 Consistency Manager는 StorageService의 stage이다.<br />Stage는 IVerbHandler인터페이스를 구현하여 주어진 동사에 대한 기능을 지원한다. Mutation의 아이디어도 stage로 표현이 되므로 insert와 delete 양쪽 동작에서 역할이 있다.<br />SEDA 는 강력한 구조이다. 이벤트 드리븐 이기 때문에 이름이 말하듯이 업무들이 매우 뛰어난 동시성을 가지고 수행될 수 있다.<br /><br />5.11. Manager 와 Service 들<br />카산드라의 기본 내부적 콘트롤 메커니즘을 구성하는 클래스들이 있다. 나는 여기서 그것들의 간단한 오버뷰를 보여주어 당신이 더 중요한 것들에 익숙해 질 수 있도록 할 것이다. 고려해야할 첫번째 것은 org.apache.cassandra.thrift.CassandraServer 클래스이다. 이 클래스는 Thrift 인터페이스로의 호출을 구현하고 org.apache.cassandra.service.StorageProxy 로 실행하기 위한 쿼리들의 노력을 대리한다.<br /><br />5.11.1. 카산드라 데몬<br /><br />Org.apache.cassandra.service.CassandraDaemon인터페이스는 한 노드에서 수행되는 카산드라 서비스의 라이프 사이클을 표현한다. 이것은 당신이 예상할수 있는 일반적인 라이프 사이클로서 start, stop, activate, deactivate, destroy 등이다.<br /><br />5.11.2. 스토리지 서비스<br /><br />카산드라 데이터베이스 서비스는 org.apache.cassandra.service.StorageService에 의해 표현된다. 스토리지 서비스는 노드의 토큰을 담고 있는데 그것은 노드가 책임이 있는 데이터의 범위를 나타내준다.<br />서버는 이 클래스의 initServer 메서드에 호출을 하면서 시작된다. 이때 서버는 SEDA 에 등록을 하고 state에 관한 몇 결정을 하게 된다. 그리고 그 자신을 JMXServer에 MBean으로 등록한다.<br /><br />5.11.3. 메시징 서비스<br /><br />Org.apache.cassandra.net.MessagingService 의 목적은 메시지 교환, 서비스의 인바운드 아웃바운드 메시지를 듣는 소켓을 만드는 것이다. MessagingService.listen 메서드는 쓰레드를 만든다. 각 들어오는 연결은 org.apache.cassandra.net.IncomingTcpConnection을 사용하여 ExecutorService 쓰레드를 접근한다. 메시지는 검사되고 이것이 스트리밍 메시지인지 아닌지 결정하게 된다. 메시지 스트리밍은 카산드라가 이 노드에서 다른 노드로 SSTable 파일을 보내기위한 최적화된 길이다. 다른 모든 노드들간의 커뮤니케이션은 직렬화된 메시지를 통해 일어난다. 그것이 만약 스트리밍이면 메시지는 IncomingStreamReader 으로 전달된다. 그것이 스트리밍이 아니면 메시지는 MessagingService 비직렬화 수행기에 의해 다루어진다. 그것은 메시지를 Runnable을 구현한 일의 형태로 다룬다. 이 서버가 많은 stage의 사용을 하고 풀은 MBean으로 쌓여있기 때문에 이 서비스가 어떻게 일하는지 발견할 수 있다.<br /><br />5.11.4. Hinted Handoff 매니저<br /><br />이름이 말하듯이 org.apache.cassandra.db.HintedHandoffManager는 hinted handoff를 내부적으로 관리하는 클래스이다. 그렇게 하기위해 쓰레드 풀을 가지고 있으며 그것은 JMX monitoring이 HINTED-HANDOFF-POOL 로 가능하다.Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-82090381815487050352011-06-28T00:26:00.001-07:002011-06-28T00:26:56.036-07:00Cassandra, JPA, Spring인터넷 상에서 많은 카산드라용 JPA 라이브러리 내지는 클라이언트를 발견할 수 있었다. 이에 그 내용을 어느 정도 정리하려고 한다. 대부분의 솔루션들이 기존 카산드라에서 단점으로 지적될 만한 사항을 기술하고 이를 해결하려고 본 소스들이 추가되었다고 주장한다.<br />먼저 살펴볼 것이 Kundera 라는 것이다. Kundera의 아이디어는 카산드라와 함께 간단하게 작동하게 하는것이라고 한다. 어떤 클라이언트 라이브러리를 새로 만든다기 보다 기존에 존재하는 라이브러리, 빌드들을 래핑하고 필요없는 코드들을 쓰지 않게 하여 더 깔끔하고 깨끗한 만들어서 프로그램의 질을 높인다고 한다. 그리고 물론 생산성을 높이는 것이다.<br />목적을 살펴보자면<br /> 불필요한 디테일을 제거하는데, 그것은 컬럼 리스트, 수퍼 컬럼리스트, 바이트 어레이, 데이터 인코딩 등이라고 한다.<br /> 어노테이션의 도움으로 도메인 모델과 직접적으로 일하게 한다.<br /> 데이터 프로세싱의 흐름을 깨끗하고 분명하게 하기위해 “code plumbing”을 제거한다.<br /> 카산드라와 애플리케이션 레벨의 로직을 분리하여 애플리케이션 개발을 편하게한다.<br /> 비즈니스 레이어에서 기존의 것을 망치지 않은채 카산드라의 가장 최신 개발 사항을 포함시키려고 한다.<br /><br />- 카산드라 데이터 모델<br />가장 기본적인 사항으로 카산드라는 당신의 데이터를 저장하기 위해 컬럼과 수퍼 컬럼을 가지고 있다. 컬럼은 이름들 그리고 타임스탬프의 값이다. 수퍼컬럼은 컬럼의 컬럼이다. 컬럼은 컬럼군에 저장되며, 수퍼 컬럼은 수퍼컬럼군에 저장된다. 가장 중요한 점은 카산드라는 기존의 관계형 데이터베이스가 아니어서 평평한 시스템이다. Join, 외래키가 없다. 당신이 저장하는 모든 것은 100% 비정규화되어있다.<br /><br />- Kundera 사용하기<br />Kundera는 현재 JPA 1.0 과 호환된다. 다양한 어노테이션을 JPA 어노테이션위에 빌드하고 그것의 필요성을 만족시킨다.<br /><br />- 기본 법칙<br />엔터티 클래스는 디폴트로 인자없는 생성자를 가진다.<br />엔터티 클래스는 @Entity 어노테이션을 보여야한다.<br />컬럼군의 엔터티 클래스는 @ColumnFamily 어노테이션이다.<br />수퍼컬럼군의 엔터티 클래스는 @SuperColumnFamily 이다.<br />각각 엔터티는 @ld 라는 필드 어노테이션을 가져야한다. @ld 필드는 스트링 타입이다. 엔터티당 한 개의 @ld 만 있어야 한다.<br />Kundera는 현재 프라퍼티 레벨에서 작동하므로 모든 메서드 레벨 어노테이션은 무시된다.<br /><br />- 컬럼군의 법칙<br />1. @ColumnFamily 에서 컬럼군의 이름을 정의해야 한다. 예를 들면 @ColumnFamily(“Authors”) . Kundera는 이 엔터티 클래스를 “Authors” 컬럼군과 링크한다.<br />2. @ColumnFamily 로 어노테이션된 엔터티는 프라퍼티를 위해 스캔되며 @Column 어노테이션 때문이다.<br />3. 각 필드는 카산드라 컬럼이 되기 위해 분별된다.<br />4. 컬럼의 이름은 디폴트로 프로퍼티의 이름이다. 그러나 이름을 바꿀때는 오버라이드 할 수 있다.<br />5. Integer, String, Long, Date 타입의 프로퍼티는 지원되며, 나머지는 저장되기 전에 직렬화되고 읽히기 전에 비직렬화된다. 직렬화는 제한사항이 있는데 Kundera가 당신이 카산드라 컬럼 프로퍼티로 커스텀 오브젝트를 쓰는 것을 막는 이유이다. 그러나 당신은 당신이 원하는 대로 할 수는 있다. <br />6. Kundera 는 Collection과 Map 프로퍼티를 지원한다. 몇 가지 주의해야할 것이 있는데 <br />* Collection과 Map 프로퍼티를 다음과 같이 초기화 해주어야한다.<br /> List<String> list = new ArrayList<String>();<br /> Set<String> set = new HashSet<String>();<br /> Map<String, String> map = new HashMap <String, String>();<br />* 타입 파라터는 5번에서 설명한 규칙을 지켜야한다.<br />* 타입 파라미터를 명시적으로 정의하지 않으면 엘레먼트는 직렬화되며 저장 및 복구되기전에 비직렬화된다.<br />* Collection 엘레먼트 순서가 유지된다는 보장은 없다.<br />* Collection과 Map은 그가 가진 엘레먼트의 숫자만큼 컬럼을 생성한다.<br />* Collection은 Name~0은 인덱스 0의 엘레먼트 Name~1은 인덱스1의 엘레먼트 이런 식으로 된다.<br />* Map 은 Name~key1 : key1의 엘레먼트 Name~key2: key2의 엘레먼트 등이다.<br /><br />- SuperColumnFamily 의 법칙<br />1. @SuperColumnFamily에 수퍼컬럼군의 이름을 정의한다. <br />2. @SuperColumnFamily로 어노테이션된 엔터티는 @Column, @SuperColumn 의 두개 어노테이션을 위해 스캔된다.<br />3. 양쪽 어노테이션에 의해 어노테이션된 것만 선별되어 Column과 SuperColumn이 되도록 검사된다.<br />4. Column군에서 했던것처럼 이름을 정의할 수 있다.<br />5. 그러나 SuperColumn의 이름을 지정해야한다.<br />6. 나머지는 위와 같다.<br /><br />- 5분내에 작동시키기<br />예제로서 배워보자. 간단한 Blog 애플리케이션을 만들어본다. 여기에는 Post, Tag, Author가 있다.<br />“Author”를 위한 카산드라 데이터모델은 아래와 같다.<br />01 ColumnFamily: Authors = {<br />02 “Eric Long”:{ // row 1<br />03 “email”:{<br />04 name:“email”,<br />05 value:“eric (at) long.com”<br />06 },<br />07 “country”:{<br />08 name:“country”,<br />09 value:“United Kingdom”<br />10 },<br />11 “registeredSince”:{<br />12 name:“registeredSince”,<br />13 value:“01/01/2002”<br />14 }<br />15 },<br />16 ...<br />17 }<br />“Posts”를 위한 데이터 모델은 다음과 같다.<br />01 SuperColumnFamily: Posts = {<br />02 “cats-are-funny-animals”:{ // row 1<br />03 “post” :{ // super-column<br />04 “title”:{<br />05 “Cats are funny animals”<br />06 },<br />07 “body”:{<br />08 “Bla bla bla… long story…”<br />09 }<br />10 “author”:{<br />11 “Ronald Mathies”<br />12 }<br />13 “created”:{<br />14 “01/02/2010"<br />15 }<br />16 },<br />17 “tags” :{<br />18 “0”:{<br />19 “cats”<br />20 }<br />21 “1”:{<br />22 “animals”<br />23 }<br />24 }<br />25 },<br />26 // row 2<br />27 }<br /><br />카산드라 키스페이스 “Blog” 만들기<br />1 <Keyspace Name="Blog"><br />2 <!—family definitions--><br />3 <br />4 <!-- Necessary for Cassandra --><br />5 <ReplicaPlacementStrategy>org.apache.cassandra.locator.RackUnawareStrategy</ReplicaPlacementStrategy><br />6 <ReplicationFactor>1</ReplicationFactor><br />7 <EndPointSnitch>org.apache.cassandra.locator.EndPointSnitch</EndPointSnitch><br />8 </Keyspace><br /><br />“Posts”를 위한 SuperColumnFamily 와 “Authors”를 위한 ColumnFamily 만들기<br />01 <Keyspace Name="Blog"><br />02 <!—family definitions--><br />03 <ColumnFamily CompareWith="UTF8Type" Name="Authors"/><br />04 <ColumnFamily ColumnType="Super" CompareWith="UTF8Type" CompareSubcolumnsWith="UTF8Type" Name="Posts"/><br />05 <br />06 <!-- Necessary for Cassandra --><br />07 <ReplicaPlacementStrategy>org.apache.cassandra.locator.RackUnawareStrategy</ReplicaPlacementStrategy><br />08 <ReplicationFactor>1</ReplicationFactor><br />09 <EndPointSnitch>org.apache.cassandra.locator.EndPointSnitch</EndPointSnitch><br />10 </Keyspace><br /><br /><br /><br />엔터티 클래스 만들기<br />Author.java<br />01 @Entity // makes it an entity class<br />02 @ColumnFamily ("Authors") // assign ColumnFamily type and name<br />03 public class Author {<br />04 <br />05 @Id // row identifier<br />06 String username;<br />07 <br />08 @Column (name="email") // override column-name<br />09 String emailAddress;<br />10 <br />11 @Column<br />12 String country;<br />13 <br />14 @Column (name="registeredSince")<br />15 Date registered;<br />16 <br />17 String name;<br />18 <br />19 public Author () { // must have a default constructor<br />20 }<br />21 <br />22 ... // getters/setters etc.<br />23 }<br /><br />Post.java<br />01 @Entity // makes it an entity class<br />02 @SuperColumnFamily("Posts") // assign column-family type and name<br />03 public class Post {<br />04 <br />05 @Id // row identifier<br />06 String permalink;<br />07 <br />08 @Column<br />09 @SuperColumn(column = "post") // column 'title' will be stored under super-column 'post'<br />10 String title;<br />11 <br />12 @Column<br />13 @SuperColumn(column = "post")<br />14 String body;<br />15 <br />16 @Column<br />17 @SuperColumn(column = "post")<br />18 String author;<br />19 <br />20 @Column<br />21 @SuperColumn(column = "post")<br />22 Date created;<br />23 <br />24 @Column<br />25 @SuperColumn(column = "tags") // column 'tag' will be stored under super-column 'tags'<br />26 List<String> tags = new ArrayList<String>();<br />27 <br />28 public Post () { // must have a default constructor<br />29 }<br />30 <br />31 ... // getters/setters etc.<br />32 }<br /><br />“tags” 프로퍼티가 어떻게 초기화 되었는지 보자. 이것은 매우 중요한데 Kundera가 Java Reflection을 사용하여 읽고 엔터티 클래스를 만든다. <br /><br />- 엔터티매니저 초기화하기<br />Kundera 는 이제 JPA 프로바이더처럼 작동하고 엔터티메니저를 초기화하는 방법을 보자.<br />http://anismiles.wordpress.com/2010/07/14/kundera-now-jpa-1-0-compatible/#entity-manager<br />- 지원되는 동작<br />Kundera는 JPA 엔터티메니저 동작을 지원한다. JPA 쿼리를 비롯해서 아래를 보자.<br />http://anismiles.wordpress.com/2010/07/14/kundera-now-jpa-1-0-compatible/#entity-operations<br /><br />- Kundera 와 Spring을 사용하기<br />우리는 여기서 Kundera와 Spring을 이용하는 법을 본다. Spring과 Hibernate는 적은 자바 코드로서도 데이터베이스 코드를 접근하는 아주 강력한 프레임워크이다. Spring을 사용하는것은 또한 당신의 데이터베이스 동작을 위해서 간단히 unit test 를 쓸 수 있게 해준다.<br /><br />- 컴포넌트들<br />1. Spring 3.0 호환 : applicationContext.xml<br />우리는 Kundera와 동작하기 위해서 최소한의 FactoryBean을 정의해야 한다. JPA interface와 호환하기 때문에 Kundera는 LocalContainerEntityManagerFactoryBean과 직접 사용할 수 있다.<br /><빈의 정의><br /><bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><br /> <property name="persistenceUnitName" value="myPersistenceUnit"/><br /> </bean><br />제공하여야할 유일한 프로퍼티는 퍼시스턴스 유닛 이름이다. 이것은 persistence.xml에 정의되어 있다. Hibernate와 작동하는 것처럼 Spring 컨테이너는 Kundera 엔터티 매니저를 LocalContainerEntityManagerFactoryBean 을 통해서 생성, 관리할 것이다.<br />1. JPA 설정 : persistence.xml<br />Kundera에는 퍼시스턴스 설정을 쓰는 몇 가지 방법이 있다. 여기서 JPA 퍼시스턴스 선언을 META-INF에 있는 persistence.xml을 통해서 해본다. 가장 장점은 투명한 설정을 가지고 있다는 것이다.<br /><persistence xmlns="http://java.sun.com/xml/ns/persistence"<br /> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br /> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"<br /> version="1.0"><br /> <persistence-unit name="myPersistenceUnit"><br /> <provider>com.impetus.kundera.ejb.KunderaPersistence</provider><br /> <properties><br /> <!-- 2nd level cache --><br /> <property name="kundera.nodes" value="localhost" /><br /> <property name="kundera.port" value="9160" /><br /> <property name="kundera.keyspace" value="Keyspace1" /><br /> <property name="sessionless" value="false" /><br /> <property name="kundera.client" value="com.impetus.kundera.client.PelopsClient" /><br /> <property name="kundera.annotations.scan.package" value="com.mypackage" /> <br /> </properties><br /> </persistence-unit><br /></persistence><br />여기서 중요한 것은 제공자 클래스를 com.impetus.kundera.ejb.KunderaPersistence에서 준다는 것이다. 다른 프로퍼티 값은 카산드라에게 연결 파라미터를 준다. Kundera.annotations.scan.package 라는 프로퍼티는 JPA 어노테이션을 찾기위해 어느 패키지를 스캔해야 하는지 보여준다.<br />1. 엔터티 자바 클래스<br />여기서 우리는 우리의 엔터티를 JPA에서 데이터베이스를 위해 했듯이 정의해야 한다. 그러나 Kundera를 사용하는 것은 카산드라에게 더 많은 부가 정보를 준다.<br />package com.wix.model;<br /><br />import com.impetus.kundera.api.ColumnFamily;<br /><br />import javax.persistence.Column;<br />import javax.persistence.Entity;<br />import javax.persistence.Id;<br />import javax.xml.bind.annotation.XmlRootElement;<br /><br />@Entity<br />@ColumnFamily(keyspace = "Keyspace1", family = "SimpleComment")<br />@XmlRootElement(name = "SimpleComment")<br />public class SimpleComment {<br /><br /> @Id<br /> private String id;<br /><br /> @Column(name = "userId")<br /> private String userId;<br /><br /> @Column(name = "comment")<br /> private String commentText;<br /><br /> public SimpleComment() {<br /> }<br /><br /> ...... <br />}<br />1. Kundera를 사용한 DAO 서비스<br />여기서 우리는 우리의 엔터티를 정의한다. @PersistenceContext라는 스프링 어노테이션을 간단히 사용할수 있으며 퍼시스턴스 엔터티를 삽입한다.<br />package com.wix.cassandra;<br /><br />import com.wix.model.SimpleComment;<br />import org.springframework.stereotype.Service;<br /><br />import javax.persistence.EntityManager;<br />import javax.persistence.PersistenceContext;<br />import javax.persistence.Query;<br />import java.util.List;<br /><br />@Service<br />public class KuneraService {<br /> <br /> @PersistenceContext(type = PersistenceContextType.EXTENDED)<br /> private EntityManager entityManager;<br /><br /> public SimpleComment addComment(String id, String userId, String commentText) {<br /> SimpleComment simpleComment = new SimpleComment();<br /> simpleComment.setId(id);<br /> simpleComment.setUserId(userId);<br /> simpleComment.setCommentText(commentText);<br /><br /> entityManager.persist(simpleComment);<br /> return simpleComment;<br /> }<br /><br /> public SimpleComment getCommentById(String Id) {<br /> SimpleComment simpleComment = entityManager.find(SimpleComment.class, Id);<br /> return simpleComment;<br /> }<br /><br /> public List<SimpleComment> getAllComments() {<br /> Query query = entityManager.createQuery("SELECT c from SimpleComment c");<br /> List<SimpleComment> list = query.getResultList();<br /><br /> return list;<br /> }<br /><br />}<br /><br />@PersistenceContext를 선언하는 것은 매우 중요하며 이것은 스프링이 카산드라 클라이언트를 각 트랜잭션마다 닫는 것을 막는다. 이제 클라이언트를 직접 닫고 매니지하는 것이 필요하다.Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-27220683620746460892011-06-26T22:49:00.000-07:002011-06-26T22:53:31.295-07:00Cassandra (4/12)4. Sample 애플리케이션<br /><br />이 장에서는 완전한 샘플 애플리케이션을 만들어서 모든 파트가 잘 맞는 것을 볼것이다. 데이터를 입력하고, 배치 업데이트를 실행하고 컬럼군과 super 컬럼군을 검색하는 등 API의 다양한 면을 실행하여 어떻게 동작하는지도 볼 것이다.<br />예제를 만들기 위하여, 다양한 데이터 구조와 기본 API의 동작들을 보여줄 만큼 복잡한 것들을 사용하기 원한다. 하지만 너무 자세한 것까지 다루어 당신을 지치게 하지는 않을 것이다. 데이터베이스에서 충분한 데이터를 갖기 위해서 우리의 검색을 제대로 돌아가게 할것이다. 데이터베이스의 밀도 때문에 거기는 조금 중복이 있을 것이다. 그리고 또 나는 카산드라가 어떻게 동작하는지에 집중할 수 있도록 익숙한 도메인을 사용해서 애플리케이션 도메인에 관해서 신경쓰지 않도록 할 것이다.<br /><br />4.1. 데이터 디자인<br /><br />당신이 관계형 데이터베이스를 사용하는 새 데이터 드리븐 애플리케이션을 빌드하려고 할 때, 당신은 적당히 정규화된 테이블과 같이 도메인을 모델링하거나 다른 테이블의 관계형 데이터를 참조하기위해 외래 키를 사용함으로써 시작할 수 있다. 이제 카산드라가 어떻게 데이터를 저장하는지 알므로 관계형 세상에서도 이해하기 쉬운 작은 도메인 모델을 만든다. 그리고 카산드라에서 관계형에서 분산 해쉬테이블 모델로 어떻게 매핑하는지 본다.<br />관계형 모델링은 간단히 말해서 당신이 개념적인 도메인에서 시작해서 도메인에 있는 명사들을 테이블에 표현하는 것이다. 당신은 primary key와 외래키를 모델 관계에 할당한다. 당신이 다대다 관계를 가졌을 때 그 키들을 표현할 join table을 만든다. Join table은 실제 세계에는 존재하지 않는다. 그리고 관계형 모델들이 작동하는데 필요한 영향을 미친다. 당신이 모든 테이블들을 만들어 놓은 후에 키에 의해 정의된 관계를 사용하는 흩어진 데이터를 소집하는 쿼리를 쓸 수 있다. 관계형 세상에서의 쿼리는 부차적이다. 테이블이 옳게 모델이 되어있다면 당신이 원하는 데이터를 언제나 가져올 수 있다고 가정한다. 당신이 여러 개의 복잡한 서브쿼리나 join statement를 사용해도 이것은 진실이다.<br />반면에 카산드라에서 당신은 데이터 모델로부터 시작하지는 않고 쿼리 모델로부터 시작한다.<br />이 예를 위해 쉽게 이해되고 모두 관계될 수 있는 도메인을 사용해보자. 어떤 호텔이 있고 손님이 예약을 할 수 있도록 하는 예이다.<br />우리의 개념적인 도메인은 호텔과 거기에 묵는 손님, 각 호텔의 방들, 어떤 방에 어떤 손님이 얼마기간 동안 묵는다는 예약 기록 등이있다. 호텔은 일반적으로 흥미있는 지역을 모아 유지하고 있다. 이것은 공원, 박물관, 쇼핑 갤러리, 기념물, 다른 장소 등 호텔 근처의 손님들이 그들이 머무는 동안 방문해 볼 만한 곳이다. 호텔과 이 장소들은 모두 지정학 위치 데이터를 가지고 지도 상에서 매쉬업, 거리 측정등을 통해 발견되기를 바란다.<br />여기서 카산드라의 애플리케이션 디자인을 해보겠다. 첫째, 당신의 쿼리를 정한다. 아래와 같은 것들이 있을 것이다.<br /> 주어진 지역의 호텔을 찾는다.<br /> 이름, 위치 등 호텔에 대한 정보를 찾는다.<br /> 주어진 호텔 근처에 흥미로운 장소를 찾는다.<br /> 생각하고 있는 기간 동안에 사용가능한 방이 있는지 찾는다.<br /> 방의 가격과 편의 시설 등을 찾는다.<br /> 손님 정보란에 들어가서 선택한 방을 예약한다.<br /><br />4.2. 호텔 애플리케이션 RDBMS 디자인<br />그림 4-1은 우리가 어떻게 간단히 호텔 예약 시스템을 관계형 데이터베이스 모델을 사용하여 만들수 있는지 보여준다. 관계형 모델은 몇 개의 “join” 테이블을 포함한다. 이는 다대다 관계들 해결하기 위함인데 이는 호텔 대 흥미로운 장소, 방 대 편의 시설 등이다.<br /> <br />그림4-1. RDBMS를 사용한 간단한 호텔 검색 시스템<br /><br />4.3. 호텔 애플리케이션 카산드라 디자인<br /><br />여러가지 방법이 있겠지만, 우리는 여기서 그림 4-2에 보여진 피지컬한 카산드라 모델을 사용하여 논리적인 데이터 모델을 나타내 본다.<br />이 디자인에서 우리는 관계형 디자인에서 했던것처럼 해본다. 호텔, 손님 같은 테이블들을 컬럼군으로 변환해본다. PointOfInterest 같은 다른 테이블은 super 컬럼군으로 비정규화되었다. 관계형 모델에서 SQL 문장을 이용해서 도시 이름을 사용하여 호텔을 찾아볼 수 있다. 그러나 카산드라에 SQL 없기 때문에 HotelByCity 컬럼군 형태로 인덱스를 만들었다.<br />우리는 방과 편의시설을 합쳐서 Room이라는 하나의 컬럼군으로 만들었다. 타입, 요금 등의 컬럼은 해당하는 값을 가지고 있다. 뜨거운 욕조 등의 컬럼은 단지 컬럼이름 자체의 존재만을 사용할 것이며, 안그러면 비어있다.<br /> <br />그림4-2. 카산드라 모델로 표현된 호텔 검색<br /><br />4.4. 호텔 애플리케이션 코드<br />이 섹션에서는 우리는 코드를 살펴보고 주어진 디자인을 어떻게 구현할지 본다. 여러가지 다른 API의 동작을 보여주기 때문에 이것은 유용하다.<br />우리가 만드는 애플리케이션은 아래와 같은 일을 수행할 것이다.<br />1. 데이터베이스 구조를 만든다.<br />2. 호텔과 흥미로운 장소 등의 데이터를 가지고 데이터베이스를 미리 만든다. 호텔은 표준 컬럼군에 저장이 될 것이고 다른 흥미로운 장소는 super 컬럼군에 저장된다.<br />3. 주어진 도시에서 호텔의 리스트를 검색한다. 이것은 두번째 인덱스를 사용한다.<br />4. 검색에서 반환된 호텔을 고른다. 그리고 고른 호텔 주변의 흥미로운 장소의 리스트를 검색한다.<br />5. Reservation 컬럼에 삽입 동작을 해서 예약을 한다.<br />모든 애플리케이션을 구현하기에는 공간이 모자란다. 그러나 주된 부분만 하고 나머지는 같은 것의 반복일 뿐인 구현은 놔둔다.<br /><br />4.5. 데이터베이스 만들기<br /><br />첫번째 단계는 스키마 정의를 만드는것이다. 이 예제에서 우리는 클라이언트 코드를 정의하기 위해 사용할 수도 있지만 스키마를 YAML로 정의하고 로드한다.<br />YAML 파일은 아래 Example 4-1에 보여지며 필요한 키공간과 컬럼군을 정의했다.<br /><br />Example 4-1. Cassandra.yaml 스키마 정의<br />keyspaces:<br />- name: Hotelier<br />replica_placement_strategy: org.apache.cassandra.locator.RackUnawareStrategy<br />replication_factor: 1<br />column_families:<br />- name: Hotel<br />compare_with: UTF8Type<br />- name: HotelByCity<br />compare_with: UTF8Type<br />- name: Guest<br />compare_with: BytesType<br />- name: Reservation<br />compare_with: TimeUUIDType<br />- name: PointOfInterest<br />column_type: Super<br />compare_with: UTF8Type<br />compare_subcolumns_with: UTF8Type<br />- name: Room<br />column_type: Super<br />compare_with: BytesType<br />compare_subcolumns_with: BytesType<br />- name: RoomAvailability<br />column_type: Super<br />compare_with: BytesType<br />compare_subcolumns_with: BytesType<br /><br />이 정의는 예제를 작동하기 위한 모든 컬럼군을 제공한다. 그리고 RDBMS에서 변환되었기 때문에 애플리케이션 코드에서 직접적으로 참조하지는 않는것도 있다.<br /><br />4.5.1. 스키마 로딩하기<br /><br />YAML에 스키마가 정의되면 로드를 해야한다. 이것을 하기위해서는 console을 열고 jconsole 애플리케이션을 실행한다. 그리고 카산드라에 JMX를 통해 연결한다. 그리고 loadSchemaFromYAML 이라는 동작을 실행한다. 이것은 org.apache.cassandra.service.StorageService MBean 의 일부이다. 이제 카산드라는 당신의 스키마를 알고 그것을 사용하기 시작한다. 당신은 또한 API를 사용하고 키스페이스와 컬럼군을 만들수 있다.<br /><br />4.6. 데이터 구조<br /><br />애플리케이션은 단지 변환 오브젝트처럼 우리를 위해 작동할 표준 데이터 구조를 필요로 한다. 이것은 특별히 흥미롭지는 않지만 이것저것이 잘 정돈되어 있기 위해 필요하다. Hotel 데이터 구조를 사용하여 모든 호텔관련 정보를 보관하여 다음에 보여준다.<br />package com.cassandraguide.hotel;<br />//data transfer object<br />public class Hotel {<br />public String id;<br />public String name;<br />public String phone;<br />public String address;<br />public String city;<br />public String state;<br />public String zip;<br />}<br /><br />이 구조는 애플리케이션의 편리함을 위하여 컬럼 정보만을 가지고 있다. <br />흥미로운 장소 정보를 갖기 위하여 POI 데이터 구조도 가지고 있다. 다음에 보여준다.<br />package com.cassandraguide.hotel;<br />//data transfer object for a Point of Interest<br />public class POI {<br />public String name;<br />public String desc;<br />public String phone;<br />}<br /><br />Constants 클래스도 가지고 있고 이는 변경하기 쉬운 장소에 공통으로 사용되는 스트링을 보관한다. 다음에 보여준다.<br />package com.cassandraguide.hotel;<br />import org.apache.cassandra.thrift.ConsistencyLevel;<br />public class Constants {<br />public static final String CAMBRIA_NAME = "Cambria Suites Hayden";<br />public static final String CLARION_NAME= "Clarion Scottsdale Peak";<br />public static final String W_NAME = "The W SF";<br />public static final String WALDORF_NAME = "The Waldorf=Astoria";<br />public static final String UTF8 = "UTF8";<br />public static final String KEYSPACE = "Hotelier";<br />public static final ConsistencyLevel CL = ConsistencyLevel.ONE;<br />public static final String HOST = "localhost";<br />public static final int PORT = 9160;<br />}<br /><br />공통 사용 스트링을 이렇게 보관하는 것은 코드를 더 깨끗하고 간결하게 해주고 당신의 환경에서 의미가 있도록 값들을 변경하는 것이 쉽게 한다.<br /><br />4.7. 커넥션 맺기<br /><br />우리는 너무 많이 쓸데없이 반복하는 것을 피하고 편리를 위해 커넥션 코드를 한 클래스에 넣고 이를 Connector라고 부른다. 다음에 보여준다.<br />package com.cassandraguide.hotel;<br />import static com.cassandraguide.hotel.Constants.KEYSPACE;<br />import org.apache.cassandra.thrift.Cassandra;<br />import org.apache.cassandra.thrift.InvalidRequestException;<br />import org.apache.thrift.TException;<br />import org.apache.thrift.protocol.TBinaryProtocol;<br />import org.apache.thrift.protocol.TProtocol;<br />import org.apache.thrift.transport.TFramedTransport;<br />import org.apache.thrift.transport.TSocket;<br />import org.apache.thrift.transport.TTransport;<br />import org.apache.thrift.transport.TTransportException;<br />//simple convenience class to wrap connections, just to reduce repeat code<br />public class Connector {<br />TTransport tr = new TSocket("localhost", 9160);<br />// returns a new connection to our keyspace<br />public Cassandra.Client connect() throws TTransportException,<br />TException, InvalidRequestException {<br />TFramedTransport tf = new TFramedTransport(tr);<br />TProtocol proto = new TBinaryProtocol(tf);<br />Cassandra.Client client = new Cassandra.Client(proto);<br />tr.open();<br />client.set_keyspace(KEYSPACE);<br />return client;<br />}<br />public void close() {<br />tr.close();<br />}<br />}<br /><br />데이터 베이스 동작을 수행할 필요가 있을 때 우리는 커넥션을 맺고 끊기 위해서 이 클래스를 사용할 수 있다.<br /><br />4.8. 데이터베이스 만들기<br /><br />Prepopulate 클래스는 다음에 보여지며 사용자가 검색할 호텔, 흥미로운 장소 정보를 데이터베이스에 미리 만들기위해서 insert, batch_mutates 등을 수행한다.<br />package com.cassandraguide.hotel;<br />import static com.cassandraguide.hotel.Constants.CAMBRIA_NAME;<br />import static com.cassandraguide.hotel.Constants.CL;<br />import static com.cassandraguide.hotel.Constants.CLARION_NAME;<br />import static com.cassandraguide.hotel.Constants.UTF8;<br />import static com.cassandraguide.hotel.Constants.WALDORF_NAME;<br />import static com.cassandraguide.hotel.Constants.W_NAME;<br />import java.io.UnsupportedEncodingException;<br />import java.util.ArrayList;<br />import java.util.HashMap;<br />import java.util.List;<br />import java.util.Map;<br />import org.apache.cassandra.thrift.Cassandra;<br />import org.apache.cassandra.thrift.Clock;<br />import org.apache.cassandra.thrift.Column;<br />import org.apache.cassandra.thrift.ColumnOrSuperColumn;<br />import org.apache.cassandra.thrift.ColumnParent;<br />import org.apache.cassandra.thrift.ColumnPath;<br />import org.apache.cassandra.thrift.Mutation;<br />import org.apache.cassandra.thrift.SuperColumn;<br />import org.apache.log4j.Logger;<br />/**<br />* Performs the initial population of the database.<br />* Fills the CFs and SCFs with Hotel, Point of Interest, and index data.<br />* Shows batch_mutate and insert for Column Families and Super Column Families.<br />*<br />* I am totally ignoring exceptions to save space.<br />*/<br />public class Prepopulate {<br />private static final Logger LOG = Logger.getLogger(Prepopulate.class);<br />private Cassandra.Client client;<br />private Connector connector;<br />//constructor opens a connection so we don't have to<br />//constantly recreate it<br />public Prepopulate() throws Exception {<br />connector = new Connector();<br />client = connector.connect();<br />}<br />void prepopulate() throws Exception {<br />//pre-populate the DB with Hotels<br />insertAllHotels();<br />//also add all hotels to index to help searches<br />insertByCityIndexes();<br />//pre-populate the DB with POIs<br />insertAllPointsOfInterest();<br />connector.close();<br />}<br />//also add hotels to lookup by city index<br />public void insertByCityIndexes() throws Exception {<br />String scottsdaleKey = "Scottsdale:AZ";<br />String sfKey = "San Francisco:CA";<br />String newYorkKey = "New York:NY";<br />insertByCityIndex(scottsdaleKey, CAMBRIA_NAME);<br />insertByCityIndex(scottsdaleKey, CLARION_NAME);<br />insertByCityIndex(sfKey, W_NAME);<br />insertByCityIndex(newYorkKey, WALDORF_NAME);<br />}<br />//use Valueless Column pattern<br />private void insertByCityIndex(String rowKey, String hotelName)<br />throws Exception {<br />Clock clock = new Clock(System.nanoTime());<br />Column nameCol = new Column(hotelName.getBytes(UTF8),<br />new byte[0], clock);<br />ColumnOrSuperColumn nameCosc = new ColumnOrSuperColumn();<br />nameCosc.column = nameCol;<br />Mutation nameMut = new Mutation();<br />nameMut.column_or_supercolumn = nameCosc;<br />//set up the batch<br /><br /><br />List<Mutation> cols = new ArrayList<Mutation>();<br />cols.add(nameMut);<br />String columnFamily = "HotelByCity";<br />muts.put(columnFamily, cols);<br />//outer map key is a row key<br />//inner map key is the column family name<br />mutationMap.put(rowKey, muts);<br />//create representation of the column<br />ColumnPath cp = new ColumnPath(columnFamily);<br />cp.setColumn(hotelName.getBytes(UTF8));<br />ColumnParent parent = new ColumnParent(columnFamily);<br />//here, the column name IS the value (there's no value)<br />Column col = new Column(hotelName.getBytes(UTF8), new byte[0], clock);<br />client.insert(rowKey.getBytes(), parent, col, CL);<br />LOG.debug("Inserted HotelByCity index for " + hotelName);<br />} //end inserting ByCity index<br />//POI<br />public void insertAllPointsOfInterest() throws Exception {<br />LOG.debug("Inserting POIs.");<br />insertPOIEmpireState();<br />insertPOICentralPark();<br />insertPOIPhoenixZoo();<br />insertPOISpringTraining();<br />LOG.debug("Done inserting POIs.");<br />}<br />private void insertPOISpringTraining() throws Exception {<br /><br /><br />List<Mutation> columnsToAdd = new ArrayList<Mutation>();<br />Clock clock = new Clock(System.nanoTime());<br />String keyName = "Spring Training";<br />Column descCol = new Column("desc".getBytes(UTF8),<br />"Fun for baseball fans.".getBytes("UTF-8"), clock);<br />Column phoneCol = new Column("phone".getBytes(UTF8),<br />"623-333-3333".getBytes(UTF8), clock);<br />List<Column> cols = new ArrayList<Column>();<br />cols.add(descCol);<br />cols.add(phoneCol);<br /><br />Mutation columns = new Mutation();<br />ColumnOrSuperColumn descCosc = new ColumnOrSuperColumn();<br />SuperColumn sc = new SuperColumn();<br />sc.name = CAMBRIA_NAME.getBytes();<br />sc.columns = cols;<br />descCosc.super_column = sc;<br />columns.setColumn_or_supercolumn(descCosc);<br />columnsToAdd.add(columns);<br />String superCFName = "PointOfInterest";<br />ColumnPath cp = new ColumnPath();<br />cp.column_family = superCFName;<br />cp.setSuper_column(CAMBRIA_NAME.getBytes());<br />cp.setSuper_columnIsSet(true);<br />innerMap.put(superCFName, columnsToAdd);<br />outerMap.put(keyName.getBytes(), innerMap);<br />client.batch_mutate(outerMap, CL);<br />LOG.debug("Done inserting Spring Training.");<br />}<br />private void insertPOIPhoenixZoo() throws Exception {<br /><br />List<Mutation> columnsToAdd = new ArrayList<Mutation>();<br />long ts = System.currentTimeMillis();<br />String keyName = "Phoenix Zoo";<br />Column descCol = new Column("desc".getBytes(UTF8),<br />"They have animals here.".getBytes("UTF-8"), new Clock(ts));<br />Column phoneCol = new Column("phone".getBytes(UTF8),<br />"480-555-9999".getBytes(UTF8), new Clock(ts));<br />List<Column> cols = new ArrayList<Column>();<br />cols.add(descCol);<br />cols.add(phoneCol);<br /><br />String cambriaName = "Cambria Suites Hayden";<br />Mutation columns = new Mutation();<br />ColumnOrSuperColumn descCosc = new ColumnOrSuperColumn();<br />SuperColumn sc = new SuperColumn();<br />sc.name = cambriaName.getBytes();<br />sc.columns = cols;<br />descCosc.super_column = sc;<br />columns.setColumn_or_supercolumn(descCosc);<br />columnsToAdd.add(columns);<br />String superCFName = "PointOfInterest";<br />ColumnPath cp = new ColumnPath();<br />cp.column_family = superCFName;<br />cp.setSuper_column(cambriaName.getBytes());<br />cp.setSuper_columnIsSet(true);<br />innerMap.put(superCFName, columnsToAdd);<br />outerMap.put(keyName.getBytes(), innerMap);<br />client.batch_mutate(outerMap, CL);<br />LOG.debug("Done inserting Phoenix Zoo.");<br />}<br />private void insertPOICentralPark() throws Exception {<br /><br />List<Mutation> columnsToAdd = new ArrayList<Mutation>();<br />Clock clock = new Clock(System.nanoTime());<br />String keyName = "Central Park";<br />Column descCol = new Column("desc".getBytes(UTF8),<br />"Walk around in the park. It's pretty.".getBytes("UTF-8"), clock);<br />//no phone column for park<br />List<Column> cols = new ArrayList<Column>();<br />cols.add(descCol);<br /><br />Mutation columns = new Mutation();<br />ColumnOrSuperColumn descCosc = new ColumnOrSuperColumn();<br />SuperColumn waldorfSC = new SuperColumn();<br />waldorfSC.name = WALDORF_NAME.getBytes();<br />waldorfSC.columns = cols;<br />descCosc.super_column = waldorfSC;<br />columns.setColumn_or_supercolumn(descCosc);<br />columnsToAdd.add(columns);<br />String superCFName = "PointOfInterest";<br />ColumnPath cp = new ColumnPath();<br />cp.column_family = superCFName;<br />cp.setSuper_column(WALDORF_NAME.getBytes());<br />cp.setSuper_columnIsSet(true);<br />innerMap.put(superCFName, columnsToAdd);<br />outerMap.put(keyName.getBytes(), innerMap);<br />client.batch_mutate(outerMap, CL);<br />LOG.debug("Done inserting Central Park.");<br />}<br />private void insertPOIEmpireState() throws Exception {<br /><br />List<Mutation> columnsToAdd = new ArrayList<Mutation>();<br />Clock clock = new Clock(System.nanoTime());<br />String esbName = "Empire State Building";<br />Column descCol = new Column("desc".getBytes(UTF8),<br />"Great view from 102nd floor.".getBytes("UTF-8"), clock);<br />Column phoneCol = new Column("phone".getBytes(UTF8),<br />"212-777-7777".getBytes(UTF8), clock);<br />List<Column> esbCols = new ArrayList<Column>();<br />esbCols.add(descCol);<br />esbCols.add(phoneCol);<br /><br />Mutation columns = new Mutation();<br />ColumnOrSuperColumn descCosc = new ColumnOrSuperColumn();<br />SuperColumn waldorfSC = new SuperColumn();<br />waldorfSC.name = WALDORF_NAME.getBytes();<br />waldorfSC.columns = esbCols;<br />descCosc.super_column = waldorfSC;<br />columns.setColumn_or_supercolumn(descCosc);<br />columnsToAdd.add(columns);<br />String superCFName = "PointOfInterest";<br />ColumnPath cp = new ColumnPath();<br />cp.column_family = superCFName;<br />cp.setSuper_column(WALDORF_NAME.getBytes());<br />cp.setSuper_columnIsSet(true);<br />innerMap.put(superCFName, columnsToAdd);<br />outerMap.put(esbName.getBytes(), innerMap);<br />client.batch_mutate(outerMap, CL);<br />LOG.debug("Done inserting Empire State.");<br />}<br />//convenience method runs all of the individual inserts<br />public void insertAllHotels() throws Exception {<br />String columnFamily = "Hotel";<br />//row keys<br />String cambriaKey = "AZC_043";<br />String clarionKey = "AZS_011";<br />String wKey = "CAS_021";<br />String waldorfKey = "NYN_042";<br />//conveniences<br /><br />createWMutation(columnFamily, wKey);<br />client.batch_mutate(cambriaMutationMap, CL);<br />LOG.debug("Inserted " + cambriaKey);<br />client.batch_mutate(clarionMutationMap, CL);<br />LOG.debug("Inserted " + clarionKey);<br />client.batch_mutate(wMutationMap, CL);<br />LOG.debug("Inserted " + wKey);<br />client.batch_mutate(waldorfMutationMap, CL);<br />LOG.debug("Inserted " + waldorfKey);<br />LOG.debug("Done inserting at " + System.nanoTime());<br />}<br />//set up columns to insert for W<br /><br />String columnFamily, String rowKey)<br />throws UnsupportedEncodingException {<br />Clock clock = new Clock(System.nanoTime());<br />Column nameCol = new Column("name".getBytes(UTF8),<br />W_NAME.getBytes("UTF-8"), clock);<br />Column phoneCol = new Column("phone".getBytes(UTF8),<br />"415-222-2222".getBytes(UTF8), clock);<br />Column addressCol = new Column("address".getBytes(UTF8),<br />"181 3rd Street".getBytes(UTF8), clock);<br />Column cityCol = new Column("city".getBytes(UTF8),<br />"San Francisco".getBytes(UTF8), clock);<br />Column stateCol = new Column("state".getBytes(UTF8),<br />"CA".getBytes("UTF-8"), clock);<br />Column zipCol = new Column("zip".getBytes(UTF8),<br />"94103".getBytes(UTF8), clock);<br />ColumnOrSuperColumn nameCosc = new ColumnOrSuperColumn();<br />nameCosc.column = nameCol;<br />ColumnOrSuperColumn phoneCosc = new ColumnOrSuperColumn();<br />phoneCosc.column = phoneCol;<br />ColumnOrSuperColumn addressCosc = new ColumnOrSuperColumn();<br />addressCosc.column = addressCol;<br />ColumnOrSuperColumn cityCosc = new ColumnOrSuperColumn();<br />cityCosc.column = cityCol;<br />ColumnOrSuperColumn stateCosc = new ColumnOrSuperColumn();<br />stateCosc.column = stateCol;<br />ColumnOrSuperColumn zipCosc = new ColumnOrSuperColumn();<br />zipCosc.column = zipCol;<br />Mutation nameMut = new Mutation();<br />nameMut.column_or_supercolumn = nameCosc;<br />Mutation phoneMut = new Mutation();<br />phoneMut.column_or_supercolumn = phoneCosc;<br />Mutation addressMut = new Mutation();<br />addressMut.column_or_supercolumn = addressCosc;<br />Mutation cityMut = new Mutation();<br />cityMut.column_or_supercolumn = cityCosc;<br />Mutation stateMut = new Mutation();<br />stateMut.column_or_supercolumn = stateCosc;<br />Mutation zipMut = new Mutation();<br />zipMut.column_or_supercolumn = zipCosc;<br />//set up the batch<br /><br />List<Mutation> cols = new ArrayList<Mutation>();<br />cols.add(nameMut);<br />cols.add(phoneMut);<br />cols.add(addressMut);<br />cols.add(cityMut);<br />cols.add(stateMut);<br />cols.add(zipMut);<br />muts.put(columnFamily, cols);<br />//outer map key is a row key<br />//inner map key is the column family name<br />mutationMap.put(rowKey.getBytes(), muts);<br />return mutationMap;<br />}<br />//add Waldorf hotel to Hotel CF<br />createWaldorfMutation(<br />String columnFamily, String rowKey)<br />throws UnsupportedEncodingException {<br />Clock clock = new Clock(System.nanoTime());<br />Column nameCol = new Column("name".getBytes(UTF8),<br />WALDORF_NAME.getBytes("UTF-8"), clock);<br />Column phoneCol = new Column("phone".getBytes(UTF8),<br />"212-555-5555".getBytes(UTF8), clock);<br />Column addressCol = new Column("address".getBytes(UTF8),<br />"301 Park Ave".getBytes(UTF8), clock);<br />Column cityCol = new Column("city".getBytes(UTF8),<br />"New York".getBytes(UTF8), clock);<br />Column stateCol = new Column("state".getBytes(UTF8),<br />"NY".getBytes("UTF-8"), clock);<br />Column zipCol = new Column("zip".getBytes(UTF8),<br />"10019".getBytes(UTF8), clock);<br />ColumnOrSuperColumn nameCosc = new ColumnOrSuperColumn();<br />nameCosc.column = nameCol;<br />ColumnOrSuperColumn phoneCosc = new ColumnOrSuperColumn();<br />phoneCosc.column = phoneCol;<br />ColumnOrSuperColumn addressCosc = new ColumnOrSuperColumn();<br />addressCosc.column = addressCol;<br />ColumnOrSuperColumn cityCosc = new ColumnOrSuperColumn();<br />cityCosc.column = cityCol;<br />ColumnOrSuperColumn stateCosc = new ColumnOrSuperColumn();<br />stateCosc.column = stateCol;<br />ColumnOrSuperColumn zipCosc = new ColumnOrSuperColumn();<br />zipCosc.column = zipCol;<br />Mutation nameMut = new Mutation();<br />nameMut.column_or_supercolumn = nameCosc;<br />Mutation phoneMut = new Mutation();<br />phoneMut.column_or_supercolumn = phoneCosc;<br />Mutation addressMut = new Mutation();<br />addressMut.column_or_supercolumn = addressCosc;<br />Mutation cityMut = new Mutation();<br />cityMut.column_or_supercolumn = cityCosc;<br />Mutation stateMut = new Mutation();<br />stateMut.column_or_supercolumn = stateCosc;<br />Mutation zipMut = new Mutation();<br />zipMut.column_or_supercolumn = zipCosc;<br />//set up the batch<br /><br />List<Mutation> cols = new ArrayList<Mutation>();<br />cols.add(nameMut);<br />cols.add(phoneMut);<br />cols.add(addressMut);<br />cols.add(cityMut);<br />cols.add(stateMut);<br />cols.add(zipMut);<br />muts.put(columnFamily, cols);<br />//outer map key is a row key<br />//inner map key is the column family name<br />mutationMap.put(rowKey.getBytes(), muts);<br />return mutationMap;<br />}<br />//set up columns to insert for Clarion<br />createClarionMutation(<br />String columnFamily, String rowKey)<br />throws UnsupportedEncodingException {<br />Clock clock = new Clock(System.nanoTime());<br />Column nameCol = new Column("name".getBytes(UTF8),<br />CLARION_NAME.getBytes("UTF-8"), clock);<br />Column phoneCol = new Column("phone".getBytes(UTF8),<br />"480-333-3333".getBytes(UTF8), clock);<br />Column addressCol = new Column("address".getBytes(UTF8),<br />"3000 N. Scottsdale Rd".getBytes(UTF8), clock);<br />Column cityCol = new Column("city".getBytes(UTF8),<br />"Scottsdale".getBytes(UTF8), clock);<br />Column stateCol = new Column("state".getBytes(UTF8),<br />"AZ".getBytes("UTF-8"), clock);<br />Column zipCol = new Column("zip".getBytes(UTF8),<br />"85255".getBytes(UTF8), clock);<br />ColumnOrSuperColumn nameCosc = new ColumnOrSuperColumn();<br />nameCosc.column = nameCol;<br />ColumnOrSuperColumn phoneCosc = new ColumnOrSuperColumn();<br />phoneCosc.column = phoneCol;<br />ColumnOrSuperColumn addressCosc = new ColumnOrSuperColumn();<br />addressCosc.column = addressCol;<br />ColumnOrSuperColumn cityCosc = new ColumnOrSuperColumn();<br />cityCosc.column = cityCol;<br />ColumnOrSuperColumn stateCosc = new ColumnOrSuperColumn();<br />stateCosc.column = stateCol;<br />ColumnOrSuperColumn zipCosc = new ColumnOrSuperColumn();<br />zipCosc.column = zipCol;<br />Mutation nameMut = new Mutation();<br />nameMut.column_or_supercolumn = nameCosc;<br />Mutation phoneMut = new Mutation();<br />phoneMut.column_or_supercolumn = phoneCosc;<br />Mutation addressMut = new Mutation();<br />addressMut.column_or_supercolumn = addressCosc;<br />Mutation cityMut = new Mutation();<br />cityMut.column_or_supercolumn = cityCosc;<br />Mutation stateMut = new Mutation();<br />stateMut.column_or_supercolumn = stateCosc;<br />Mutation zipMut = new Mutation();<br />zipMut.column_or_supercolumn = zipCosc;<br />//set up the batch<br /><br />List<Mutation> cols = new ArrayList<Mutation>();<br />cols.add(nameMut);<br />cols.add(phoneMut);<br />cols.add(addressMut);<br />cols.add(cityMut);<br />cols.add(stateMut);<br />cols.add(zipMut);<br />muts.put(columnFamily, cols);<br />//outer map key is a row key<br />//inner map key is the column family name<br />mutationMap.put(rowKey.getBytes(), muts);<br />return mutationMap;<br />}<br />//set up columns to insert for Cambria<br />createCambriaMutation(<br />String columnFamily, String cambriaKey)<br />throws UnsupportedEncodingException {<br />//set up columns for Cambria<br />Clock clock = new Clock(System.nanoTime());<br />Column cambriaNameCol = new Column("name".getBytes(UTF8),<br />"Cambria Suites Hayden".getBytes("UTF-8"), clock);<br />Column cambriaPhoneCol = new Column("phone".getBytes(UTF8),<br />"480-444-4444".getBytes(UTF8), clock);<br />Column cambriaAddressCol = new Column("address".getBytes(UTF8),<br />"400 N. Hayden".getBytes(UTF8), clock);<br />Column cambriaCityCol = new Column("city".getBytes(UTF8),<br />"Scottsdale".getBytes(UTF8), clock);<br />Column cambriaStateCol = new Column("state".getBytes(UTF8),<br />"AZ".getBytes("UTF-8"), clock);<br />Column cambriaZipCol = new Column("zip".getBytes(UTF8),<br />"85255".getBytes(UTF8), clock);<br />ColumnOrSuperColumn nameCosc = new ColumnOrSuperColumn();<br />nameCosc.column = cambriaNameCol;<br />ColumnOrSuperColumn phoneCosc = new ColumnOrSuperColumn();<br />phoneCosc.column = cambriaPhoneCol;<br />ColumnOrSuperColumn addressCosc = new ColumnOrSuperColumn();<br />addressCosc.column = cambriaAddressCol;<br />ColumnOrSuperColumn cityCosc = new ColumnOrSuperColumn();<br />cityCosc.column = cambriaCityCol;<br />ColumnOrSuperColumn stateCosc = new ColumnOrSuperColumn();<br />stateCosc.column = cambriaStateCol;<br />ColumnOrSuperColumn zipCosc = new ColumnOrSuperColumn();<br />zipCosc.column = cambriaZipCol;<br />Mutation nameMut = new Mutation();<br />nameMut.column_or_supercolumn = nameCosc;<br />Mutation phoneMut = new Mutation();<br />phoneMut.column_or_supercolumn = phoneCosc;<br />Mutation addressMut = new Mutation();<br />addressMut.column_or_supercolumn = addressCosc;<br />Mutation cityMut = new Mutation();<br />cityMut.column_or_supercolumn = cityCosc;<br />Mutation stateMut = new Mutation();<br />stateMut.column_or_supercolumn = stateCosc;<br />Mutation zipMut = new Mutation();<br />zipMut.column_or_supercolumn = zipCosc;<br />//set up the batch<br /><br />List<Mutation> cambriaCols = new ArrayList<Mutation>();<br />cambriaCols.add(nameMut);<br />cambriaCols.add(phoneMut);<br />cambriaCols.add(addressMut);<br />cambriaCols.add(cityMut);<br />cambriaCols.add(stateMut);<br />cambriaCols.add(zipMut);<br />cambriaMuts.put(columnFamily, cambriaCols);<br />//outer map key is a row key<br />//inner map key is the column family name<br />cambriaMutationMap.put(cambriaKey.getBytes(), cambriaMuts);<br />return cambriaMutationMap;<br />}<br />}<br /><br />이것은 꽤 긴 예제이지만 “hello world” 보다는 더 많은 걸 보여주려고 노력한다. 많은 수의 insert와 batch_mutate 동작이 있다. 이것은 표준 컬럼군과 super 컬럼군이다. 또한 많은 수의 행을 포함하여 정교한 쿼리가 필요하도록 했다.<br />이 클래스는 우리의 예제를 실행하기 위한 첫번째이다. Prepopulate 방법이 완료되면 당신의 데이버베이스는 검색을 수행하기 위한 모든 데이터를 갖게 된다.<br /><br />4.9. 검색 애플리케이션<br /><br />다음은 main 메소드를 가진 자바 클래스이며 당신이 수행해야 한다. Log4J에 의존하기 때문에 당신의 log4j.properties 파일에 맞추어 실행할 것이다. 당신이 할 일은 이 클래스를 실행하는것 뿐이며, 그러면 자동으로 모든 호텔과 흥미로운 장소 정보를 만들고 사용자가 주어진 도시에 대해서 검색할 수 있도록 해준다. 사용자는 한 호텔을 택하고 애플리케이션은 주변의 흥미로운 장소를 검색한다. 그리고 당신은 애플리케이션의 나머지 부분을 구현하여 예약을 마칠 수 있다.<br />package com.cassandraguide.hotel;<br />import static com.cassandraguide.hotel.Constants.CL;<br />import static com.cassandraguide.hotel.Constants.UTF8;<br />import java.util.ArrayList;<br />import java.util.List;<br />import org.apache.cassandra.thrift.Cassandra;<br />import org.apache.cassandra.thrift.Column;<br />import org.apache.cassandra.thrift.ColumnOrSuperColumn;<br />import org.apache.cassandra.thrift.ColumnParent;<br />import org.apache.cassandra.thrift.KeyRange;<br />import org.apache.cassandra.thrift.KeySlice;<br />import org.apache.cassandra.thrift.SlicePredicate;<br />import org.apache.cassandra.thrift.SliceRange;<br />import org.apache.cassandra.thrift.SuperColumn;<br />import org.apache.log4j.Logger;<br />/**<br />* Runs the hotel application. After the database is pre-populated,<br />* this class mocks a user interaction to perform a hotel search based on<br />* city, selects one, then looks at some surrounding points of interest for<br />* that hotel.<br />*<br />* Shows using Materialized View pattern, get, get_range_slices, key slices.<br />*<br />* These exceptions are thrown out of main to reduce code size:<br />* UnsupportedEncodingException,<br />InvalidRequestException, UnavailableException, TimedOutException,<br />TException, NotFoundException, InterruptedException<br />Uses the Constants class for some commonly used strings.<br />*/<br />public class HotelApp {<br />private static final Logger LOG = Logger.getLogger(HotelApp.class);<br />public static void main(String[] args) throws Exception {<br />//first put all of the data in the database<br />new Prepopulate().prepopulate();<br />LOG.debug("** Database filled. **");<br />//now run our client<br />LOG.debug("** Starting hotel reservation app. **");<br />HotelApp app = new HotelApp();<br />//find a hotel by city--try Scottsdale or New York...<br />List<Hotel> hotels = app.findHotelByCity("Scottsdale", "AZ");<br />//List<Hotel> hotels = app.findHotelByCity("New York", "NY");<br />LOG.debug("Found hotels in city. Results: " + hotels.size());<br />//choose one<br />Hotel h = hotels.get(0);<br />LOG.debug("You picked " + h.name);<br />//find Points of Interest for selected hotel<br />LOG.debug("Finding Points of Interest near " + h.name);<br />List<POI> points = app.findPOIByHotel(h.name);<br />//choose one<br />POI poi = points.get(0);<br />LOG.debug("Hm... " + poi.name + ". " + poi.desc + "--Sounds fun!");<br />LOG.debug("Now to book a room...");<br />//show availability for a date<br />//left as an exercise...<br />//create reservation<br />//left as an exercise...<br />LOG.debug("All done.");<br />}<br />//use column slice to get from Super Column<br />public List<POI> findPOIByHotel(String hotel) throws Exception {<br />///query<br />SlicePredicate predicate = new SlicePredicate();<br />SliceRange sliceRange = new SliceRange();<br />sliceRange.setStart(hotel.getBytes());<br />sliceRange.setFinish(hotel.getBytes());<br />predicate.setSlice_range(sliceRange);<br />// read all columns in the row<br />String scFamily = "PointOfInterest";<br />ColumnParent parent = new ColumnParent(scFamily);<br />KeyRange keyRange = new KeyRange();<br />keyRange.start_key = "".getBytes();<br />keyRange.end_key = "".getBytes();<br />List<POI> pois = new ArrayList<POI>();<br />//instead of a simple list, we get a map whose keys are row keys<br />//and the values the list of columns returned for each<br />//only row key + first column are indexed<br />Connector cl = new Connector();<br />Cassandra.Client client = cl.connect();<br />List<KeySlice> slices = client.get_range_slices(<br />parent, predicate, keyRange, CL);<br />for (KeySlice slice : slices) {<br />List<ColumnOrSuperColumn> cols = slice.columns;<br />POI poi = new POI();<br />poi.name = new String(slice.key);<br />for (ColumnOrSuperColumn cosc : cols) {<br />SuperColumn sc = cosc.super_column;<br />List<Column> colsInSc = sc.columns;<br />for (Column c : colsInSc) {<br />String colName = new String(c.name, UTF8);<br />if (colName.equals("desc")) {<br />poi.desc = new String(c.value, UTF8);<br />}<br />if (colName.equals("phone")) {<br />poi.phone = new String(c.value, UTF8);<br />}<br />}<br />LOG.debug("Found something neat nearby: " + poi.name +<br />". \nDesc: " + poi.desc +<br />". \nPhone: " + poi.phone);<br />pois.add(poi);<br />}<br />}<br />cl.close();<br />return pois;<br />}<br />//uses key range<br />public List<Hotel> findHotelByCity(String city, String state)<br />throws Exception {<br />LOG.debug("Seaching for hotels in " + city + ", " + state);<br />String key = city + ":" + state.toUpperCase();<br />///query<br />SlicePredicate predicate = new SlicePredicate();<br />SliceRange sliceRange = new SliceRange();<br />sliceRange.setStart(new byte[0]);<br />sliceRange.setFinish(new byte[0]);<br />predicate.setSlice_range(sliceRange);<br />// read all columns in the row<br />String columnFamily = "HotelByCity";<br />ColumnParent parent = new ColumnParent(columnFamily);<br />KeyRange keyRange = new KeyRange();<br />keyRange.setStart_key(key.getBytes());<br />keyRange.setEnd_key((key+1).getBytes()); //just outside lexical range<br />keyRange.count = 5;<br />Connector cl = new Connector();<br />Cassandra.Client client = cl.connect();<br />List<KeySlice> keySlices =<br />client.get_range_slices(parent, predicate, keyRange, CL);<br />List<Hotel> results = new ArrayList<Hotel>();<br />for (KeySlice ks : keySlices) {<br />List<ColumnOrSuperColumn> coscs = ks.columns;<br />LOG.debug(new String("Using key " + ks.key));<br />for (ColumnOrSuperColumn cs : coscs) {<br />Hotel hotel = new Hotel();<br />hotel.name = new String(cs.column.name, UTF8);<br />hotel.city = city;<br />hotel.state = state;<br />results.add(hotel);<br />LOG.debug("Found hotel result for " + hotel.name);<br />}<br />}<br />///end query<br />cl.close();<br />return results;<br />}<br />}<br /><br />각기 다른 문장들의 의도를 설명하기 위해 곳곳에 커멘트를 배치하였다.<br />애플리케이션을 실행시킨 결과를 다음에 보여준다.<br />DEBUG 09:49:50,858 Inserted AZC_043<br />DEBUG 09:49:50,861 Inserted AZS_011<br />DEBUG 09:49:50,863 Inserted CAS_021<br />DEBUG 09:49:50,864 Inserted NYN_042<br />DEBUG 09:49:50,864 Done inserting at 6902368219815217<br />DEBUG 09:49:50,873 Inserted HotelByCity index for Cambria Suites Hayden<br />DEBUG 09:49:50,874 Inserted HotelByCity index for Clarion Scottsdale Peak<br />DEBUG 09:49:50,875 Inserted HotelByCity index for The W SF<br />DEBUG 09:49:50,877 Inserted HotelByCity index for The Waldorf=Astoria<br />DEBUG 09:49:50,877 Inserting POIs.<br />DEBUG 09:49:50,880 Done inserting Empire State.<br />DEBUG 09:49:50,881 Done inserting Central Park.<br />DEBUG 09:49:50,885 Done inserting Phoenix Zoo.<br />DEBUG 09:49:50,887 Done inserting Spring Training.<br />DEBUG 09:49:50,887 Done inserting POIs.<br />DEBUG 09:49:50,887 ** Database filled. **<br />DEBUG 09:49:50,889 ** Starting hotel reservation app. **<br />DEBUG 09:49:50,889 Seaching for hotels in Scottsdale, AZ<br />DEBUG 09:49:50,902 Using key [B@15e9756<br />DEBUG 09:49:50,903 Found hotel result for Cambria Suites Hayden<br />DEBUG 09:49:50,903 Found hotel result for Clarion Scottsdale Peak<br />DEBUG 09:49:50,904 Found hotels in city. Results: 2<br />DEBUG 09:49:50,904 You picked Cambria Suites Hayden<br />DEBUG 09:49:50,904 Finding Points of Interest near Cambria Suites Hayden<br />DEBUG 09:49:50,911 Found something neat nearby: Phoenix Zoo.<br />Desc: They have animals here..<br />Phone: 480-555-9999<br />DEBUG 09:49:50,911 Found something neat nearby: Spring Training.<br />Desc: Fun for baseball fans..<br />Phone: 623-333-3333<br />DEBUG 09:49:50,911 Hm... Phoenix Zoo. They have animals here.--Sounds fun!<br />DEBUG 09:49:50,911 Now to book a room...<br />DEBUG 09:49:50,912 All done.<br /><br />다시한 번 당신은 Thrift나 Avro에 반해서 쓰기를 원치 않아서 대신 8장에 리스트된 클라이언트를 사용하게 될 것이다. 여기서 목적은 당신이 이것이 어떻게 작동하는지 보여주고 완전한 작동 애플리케이션을 보여주어 insert 와 많은 검색들이 일하는 것을 보고 실제로 어떻게 작동하는지 보여주는 것이다.<br /><br />4.10. Twissandra<br /><br />당신이 카산드라를 어떻게 디자인하는지 궁금해하기 시작할 때 Eric Florenzano에 의해 쓰여진 Twissandra를 살펴보자. http://www.twissandra.com을 방문하여 다운로드하여 써볼수 있는 트위터 클론을 보자. 소스는 Phthon 이며 정렬하기 위해서 Django와 JSON 라이브러리에 좀 의존하고 있지만 시작하기 좋은 장소이다. 당신은 트위터와 같은 익숙한 데이터 모델을 사용할 수 있고 사용자, 타임라인, 트윗 등이 간단한 카산드라 데이터 모델에 작동하는 것을 볼 수 있다.<br />Eric Evans의 Twitssandra를 사용하는데 필요한 글도 있는데, 그것은 http://www.rackspacecloud.com/blog/2010/05/12/cassandra-by-example 이다.Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-36635498547163597032011-06-23T21:49:00.000-07:002011-06-23T21:50:17.846-07:00Cassandra (3/12)3. 카산드라 데이터 모델<br /><br />이 장에서 카산드라의 디자인 목표, 데이터 모델, 그리고 일반적인 동작의 성질들을 알아보겠다. <br />관계형 세상에서 온 개발자들과 관리자들은 처음에는 카산드라의 데이터 모델은 매우 이해하기 어려울 것이다. Keyspace와 같은 용어는 완전히 새로운 것이고 column 같은 것은 양쪽에서 사용은 하고 있는 말이지만 그 의미는 양쪽에서 다르다. Dynamo나 Bigtable과 같은 것에 대한 문서를 보고 있어도 혼동이 될 수있는데 그것은 카산드라가 그것들에 기반을 두고는 있지만 자신만의 독특한 모델을 가지고 있기 때문이다.<br />그래서 여기서는 공통된 기반에서 시작하여 익숙하지 않은 용어들로 이동한다. 그리고 카산드라의 세상과 관계형의 세상의 사이 간극을 메우기 위해서 다리를 놓도록 한다.<br /><br />3.1. 관계형 데이터 모델<br /><br />관계형 데이터베이스에서 우리는 한 개의 애플리케이션에 응답하는 어떤 컨테이너가 되는 데이터베이스를 가지고 있다. 데이터베이스는 테이블을 가지고 있다. 테이블은 이름과 몇 개의 컬럼을 가지고 있다. 이 또한 이름을 가지고 있다. 우리는 여기 테이블에 데이터를 추가한다. 그리고 각 컬럼에 값을 지정한다. 어떤 칼럼에 값이 없으면 null을 사용한다. 이는 새로운 행을 테이블에 추가한다. 이후에 우리가 이의 primary key 라는 고유의 식별자를 알면 읽어볼 수 있다. 테이블 안의 값을 업데이트하고 싶으면 행 전체를 업데이트하거나 일부분만 할 수도 있다. 이것은 우리가 SQL 문의 where절에 사용하는 filter 에 따라서다.<br />카산드라를 배우기 위해 관계형 세상에서 알던 것은 잠시 접어두는 것이 유용할 것이다.<br /><br />3.2. 간단한 소개<br /><br />이 섹션에서 카산드라의 데이터 모델을 이해하기 위해 바텀 업 방식을 쓴다.<br />당신이 지금 필요한 가장 간단한 데이터 저장은 array나 list이며 다음과 같이 보인다.<br /> <br />그림3-1. 값들의 list<br />당신이 추후에 쿼리해볼 수 있는 이 리스트의 값들이지만 당신은 각 값이 무엇을 표현하는지 알기 위해 자세히 보아야하며 외부적으로 문서 같은 것을 통해 어떤 셀이 어떤 값을 가지고 있는지 등을 참조할 수 있다. 이는 옵셔널한 값들이 없을 때 채우지는 않고 null을 사용함으로써 크기는 유지할 수 있다. Array는 매우 유용한 데이터 구조이지만 문법적으로 아주 풍부하지는 않다.<br />우리는 값과 이름을 맞추기 위해 두번째 차원을 추가한다. 우리는 각 셀에 이름을 추가하고 지도 같은 구조를 가지며 아래 그림과 같다.<br /> <br />그림3-2. 이름/값 쌍의 지도<br />우리가 각 값의 이름을 알 수 있기 때문에 분명한 발전이다. 만약 사용자 정보를 가진다면 컬럼이름을 first Name, lastName, phone, email 등등 으로 가질 수 있다. 이것은 처리하고 다루기에 약간 더 풍부한 정보이다.<br />그러나 우리가 여태까지 살펴본 구조는 한 엔티티당 한 인스턴스를 가지고 있을 때만 작동한다. 이것은 마치 한 사람이나 사용자 혹은 호텔이나 트윗과 같다. 이것이 같은 구조에 여러개의 엔티티를 저장하고자 하면 잘 되지 않는다. 이름/값의 짝의 모임을 통일하거나 같은 컬럼의 이름을 되풀이 하는 방법은 없다. 그래서 우리는 컬럼값을 모으고 다른 주소들로 매길수 있는 것이 필요하다. 우리는 다같이 set으로 다루어 질수 있는 컬럼의 그룹을 레퍼런스할 수 있는 key가 필요하다. 우리는 행이 필요하다. 그리고 우리가 한 행을 갖는다면 우리는 모든 이름/값 쌍을 한 엔티티에서 가질수 있고 이름에 대한 값만 가질 수 있다. 우리는 이 이름/값 쌍을 column이라고 부를수 있다. 우리는 각 colum 행을 가지고 각 별개의 엔티티를 row라고 부를수 있다. 그리고 고유한 식별자를 row key라고 부른다.<br />카산드라는 비슷한 데이터를 관계짓는 논리적인 차원을 컬럼군이라고 정의한다. 예를 들어 User 라는 컬럼군을 가질수 있고 Hotel, Address Book 등등을 가질 수 있다. 이런 식으로 컬럼군은 관계형 세상의 테이블과 비슷하다.<br />모두 볼 때, 컬럼이라는 카산드라 데이터 구조의 기본을 보았으며 이름/값 쌍이며, 컬럼 군 즉 비슷한 하지만 같지는 않은 컬럼 셋을 가진 것이다.<br />관계형 데이터베이스에서는 컬럼 이름을 스트링으로만 가질 수 있었다. 하지만 카산드라는 그런 제한 사항이 없다. 행의 키와 컬럼의 이름 다 스트링이 될 수 있다 하지만 long integer나 UUID 등 어떤 형태의 바이트 array가 될 수 있다. 그래서 키 이름을 정하는데 좀 더 다양성을 둘 수 있다.<br />이것은 카산드라의 컬럼의 흥미로운 특징을 보여준다. 미리 정한 이름/값 쌍처럼 간단할 필요도 없고 값에 뿐 아니라 키에다가 직접 어떤 유용한 값을 저장할 수 있다. 이는 카산드라에서 인덱스를 만들 때 일반적이다. 여기서는 자세히 보지 않는다.<br />우리는 모든 새로운 엔티티를 저장할 때 마다 모든 컬럼의 값을 모두 저장할 필요는 없다. 아마 주어진 엔티티에 대해서 모든 컬럼의 값을 알지도 못한다. 예를 들어 어떤 사람들은 두번째 전화번호를 가지고 있고 어떤 사람들은 그렇지 않다 그리고 카산드라에 의해 지지되는 온라인 폼에서 어떤 것은 옵셔날이고 어떤 것은 필수이다. 좋다. 공간의 낭비처럼 우리가 모르는 값에 대해 null 값을 채우는 것 대신에 지금 당장은 그 컬럼을 저장하지 않는다. 그래서 여러 차원의 array 구조를 다음과 같이 가지고 있다.<br /> <br />그림3-3. 컬럼 군<br />이것을 그림으로만 보지 않고 JavaScript Object Notation (JSON) 의 용어로 생각하는 것도 도움이 된다. <br />Musician: ColumnFamily 1<br />bootsy: RowKey<br />email: bootsy@pfunk.com, ColumnName:Value<br />instrument: bass ColumnName:Value<br />george: RowKey<br />email: george@pfunk.com ColumnName:Value<br />Band: ColumnFamily 2<br />george: RowKey<br />pfunk: 1968-2010 ColumnName:Value<br />우리는 여기 두개의 컬럼군이 있다. Musician과 Band이다. Musician 컬럼은 두개의 행이 있다. “bootsy”와 “George”이다. 이 두개의 행은 관련한 두개의 컬럼이 있다. Bootsy 기록은 두개의 컬럼(email과 instrument)을 가지고 George 컬럼은 한 개의 컬럼을 가지고 있다. 카산드라에서 이것은 좋다. 두번째 컬럼군은 Band이다. 마찬가지로 George 행과 “pfunk”라는 이름의 컬럼을 가지고 있다.<br />컬럼은 카산드라에서 세번째 측면을 가지고 있다. 타임스탬프, 컬럼이 마지막으로 업데이트된 시간을 기록한다. 이것은 자동적인 메타데이터 프로퍼티가 아니라 클라이언트는 쓰기를 실행할때마다 타임스탬프를 제공해야 한다. 타임스탬프로 퀴리를 할 수는 없지만 서버에서 순수하게 conflict resolution하기 위해 사용된다.<br />행은 타임스탬프를 가지지 않고, 각 컬럼만 가지고 있다.<br />만약 우리가 새로운 차원을 추가하는 관련 컬럼끼리의 그룹을 만든다면 어떻겠는가? 카산드라는 super column family 라고 불리는 것을 가지고 우리가 이것을 할 수 있게 한다. Super colomn family 지도의 지도라고 생각할 수 있다. Super column family가 그림 3-4에 있다.<br /> <br />그림3-4. A super column family<br />컬럼 군에서의 행은 이름/값 쌍의 모음들을 가지고 있고, super column family는 부컬럼을 가지고 있으며, 부컬럼은 컬럼들의 모임이다. 그래서 일반적인 컬럼군에서 값의 주소는 값을 가르키고 있는 컬럼 이름을 가리키고 있는 row key 이다. Super로 분류되는 컬럼군에서 값의 주소는 값을 가리키는 부컬럼을 가리키는 컬럼 이름을 가리키는 row key이다. 조금 다르게 보아서, super column family에서 행은 컬럼을 가지고 있고 각각은 부컬럼을 가지고 있다.<br />그래서 이것은 카산드라 데이터 모델을 보는 버텀 업 접근 방법이다. 이제 기본적인 이해를 가지고 있는 상태에서 좀 넓게 보아 좀 더 상위 레벨을 보고 탑 다운 접근 방법을 가져보자. 완전히 이해하기 위해서 여러 번 다시 말해야 할만큼 이 주제에 대해서는 여러가지 혼란 사항이 있다.<br /><br />3.3. 클러스터<br /><br />카산드라는 한 개의 노드만을 운영한다면 좋은 해결책은 아니다. 이미 언급되었듯이 카산드라 데이터베이스는 사용자에게는 한 개의 기기처럼 보이게 여러 개의 기기를 분산 환경에서 운영할수 있도록 특별히 디자인 되어 있다. 그래서 가장 바깥에서 보이는 카산드라의 구조는 클러스터이다. ring이라고 불리기도 한다. 이는 카산드라가 ring에 어레인지하여 데이터를 노드들에 배분하기 때문이다.<br />노드는 다른 데이터들의 복사를 가진다. 첫번째 노드가 다운되면 복사본이 대신 쿼리에 대한 대답을 할 수 있다. Peer-to-peer 프로토콜이 사용자에게 투명하게 노드들 상에 복사되도록 하고 replication factor는 클러스터 상에서 같은 데이터의 복사본을 받게 되는 기기의 숫자이다. 6장에서 자세히 살펴볼 것이다.<br /><br />3.4. Keyspaces<br />클러스터는 keyspace를 담고 있고 보통은 한 개를 담고 있다. Keyspace는 카산드라에서 가장 바깥쪽의 데이터 저장소이며 관계형 데이터베이스에게 잘 응답한다. 관계형 데이터베이스처럼 keyspace는 여러가지 행동을 정의하는 이름과 어트리뷰트 모음들을 가지고 있다. 애클리케이션당 한 개의 keyspace를 가지는 것이 좋다고 사람들이 조언하지만 실제적인 기반이 있는 사실은 아닌것같다. 실제적으로 받아들일 만한 조언이지만 애플리케이션이 필요로 하는 만큼 keyspace를 만들어도 된다. 하지만 애플리케이션 당 수천개의 keyspace를 만든다면 문제가 생길 것이다. <br />당신의 시큐리티 제한에 따라 한 클러스터에 여러 개의 keyspace를 돌리는 것이 가능하다. 예를 들어 당신의 애플리케이션이 Twitter라고 불린다면 당신은 Twitter-Cluster라고 불리는 클러스터를 가지고 Twitter라고 불리는 keyspace를 갖게 될 것이다. 내가 아는한은 카산드라에는 그런 것을 위한 naming 컨벤션이 없다.<br />카산드라에서 keyspace 당 설정할 수 있는 기본 어트리뷰트는 <br />- Replication factor<br />가장 간단하게 말해서 replication factor는 각 데이터에대해 몇 개의 복사본이 되는지 노드의 개수다. 만약 당신의 replication factor가 3이라면 링안에 3개의 노드가 복사본을 모두 가지고 있다는 것이다. <br />replication factor 는 더 많은 일관성을 얻기위해 당신이 퍼포먼스에는 어느 정도 희생하는지 결정할 수 있도록 해준다. 그것은 당신의 읽기와 쓰기에서의 일관성은 replication factor에 기반을 둠을 의미한다.<br />- Replica placement strategy<br />replica placement 는 링안에서 어떻게 복사본들이 위치될 것인지를 말한다. 카산드라에 어떤 노드가 어떤 key의 복사본을 가질것인지 다른 전략이 있다. 이것들은 SimpleStrategy(예전에는 RackUnawareStrategy로 알려졌다.) OldNetworkTopologyStrategy(예전에는 RackAwareStrategy로 알려졌다.) 그리고 NetworkTopologyStrategy(예전에는 DatacenterShardStrategy로 알려졌다.)가 있다.<br />- Column families<br />데이터베이스가 테이블의 저장소인 것 처럼 keyspace는 한 개나 그 이상의 컬럼군의 리스트의 저장소이다. 컬럼 군은 대략 관계형 모델의 테이블과 비슷하다. 그리고 행들의 집합의 저장소이다. 각 행은 정렬된 컬럼을 가지고 있다. 컬럼군은 데이터의 구조를 나타낸다. 각 keyspace는 적어도 한 개 그리고 종종 많은 수의 컬럼군을 가진다.<br />나는 replication factor와 replica placement strategy 를 언급했는데 왜냐하면 keyspace당 셋이기 때문이다. 그러나 데이터 모델에 당장 직접적인 영향을 가지고 있지는 않다.<br />애플리케이션당 많은 수의 keyspace를 생성하는 것은 가능은 하지만 일반적으로 추천사항은 아니다. 애플리케이션을 여러 개의 keyspace로 나누는 것은 다른 replication factor나 replica placement strategy 를 어떤 컬럼 군에 원할 때 뿐이다. 예를 들어 만약 당신이 중요도가 낮은 데이터를 가지고 있다면 카산드라가 복사를 위해 열심히 일하지 않도록 이것을 고유한 keyspace에 낮은 replication factor를 가지고 둘 수 있다. 그러나 이것은 많이 복잡할 수도 있다. 아마도 한 개의 keyspace로 시작해서 모든 레벨에 조정이 필요한지 보는 것이 더 나은 아이디어일것이다.<br /><br />3.5. 컬럼 군<br />컬럼 군은 행들의 정렬된 집합의 저장소이고 그것은 각각 정렬된 컬럼들의 집합이다. 관계형 세상에서 당신이 물리적으로 모델로부터 데이터베이스를 만들 때 데이터베이스(keyspace)의 이름을 정하고 테이블의 이름을 정하고 (컬럼 군과 테이블은 같지 않다.) 그리고 각 테이블에 있는 컬럼의 이름을 정의한다. <br />컬럼군이 관계형 테이블과 같다는 생각을 너무 깊게 가지지 말아야 할 이유들이 있다. 첫째로 카산드라는 스키마에 자유롭게 여겨지는데 그것은 컬럼군이 정의되었더라도 컬럼은 아니기 때문이다. 당신은 당신의 필요에 따라서 컬럼군에 컬럼을 언제든 추가 할 수 있다. 둘 째로 컬럼군은 두개의 이름과 비교자라는 애트리뷰트를 가지고 있다. 비교자는 컬럼이 쿼리에서 반환되었을 때 어떻게 소트되는지 long, byte, UTF8 이나 다른 순서에 따라 보여준다.<br />관계형 데이터베이스에서 테이블이 디스크에 어떻게 저장되는지는 사용자에게 자주 투명하게 보여지며 RDBMS 가 디스크에 테이블을 저장하는지 데이터 모델링은 그에 대한 추천사항을 듣기 어렵다. 이는 컬럼군이 테이블이 것을 기억해야할 또 다른 이유이다. 컬럼 군이 각각 다른 파일로 디스크에 저장되는 때문에 같은 컬럼군에서 저장되는 관련있는 컬럼은 같이 정의하는 것이 중요하다. <br />컬럼군이 관계형 테이블과 다른 점은 관계형 테이블은 컬럼만을 정의하고 사용자는 행의 값만을 제공한다는 것이다. 하지만 카산드라에서는 테이블은 컬럼을 가지거나 super 컬럼 군으로 정의 될 수 있다. Super 컬럼군을 사용하는 이점은 nesting 할 수 있는 것이다.<br />디폴트인 표준 컬럼군에서는 표준을 정하고 super 컬럼군에서는 super를 정한다.<br />당신이 카산드라에서 컬럼군에 데이터를 쓸 때, 한 개나 그 이상의 컬럼에 값을 정해준다. 그 고유한 식별자를 가진 값들의 모임을 행이라고 부른다. 행은 row key라고 불리는 고유한 key를 가지며 그것은 primary key 처럼 작동한다. 그래서 column-oriented 또는 columnar 라고 부르는 것이 틀리지는 않으며 행을 컬럼의 컨테이너로 생각하는 것이 모델을 이해하기 쉬운 방법이다. 이것이 사람들이 카산드라 컬럼 군을 사차원 해쉬와 비슷하다고 하는 이유이기도 하다. <br />[Keyspace][ColumnFamily][Key][Column]<br />우리는 아래에 보는바와 같이 Hotel 컬럼군을 나타내기위해 JSON 같은 노테이션을 쓸 수 있다.<br />Hotel {<br />key: AZC_043 { name: Cambria Suites Hayden, phone: 480-444-4444,<br />address: 400 N. Hayden Rd., city: Scottsdale, state: AZ, zip: 85255}<br />key: AZS_011 { name: Clarion Scottsdale Peak, phone: 480-333-3333,<br />address: 3000 N. Scottsdale Rd, city: Scottsdale, state: AZ, zip: 85255}<br />key: CAS_021 { name: W Hotel, phone: 415-222-2222,<br />address: 181 3rd Street, city: San Francisco, state: CA, zip: 94103}<br />key: NYN_042 { name: Waldorf Hotel, phone: 212-555-5555,<br />address: 301 Park Ave, city: New York, state: NY, zip: 10019}<br />}<br />이 예에서 행의 key는 hotal의 고유한 primary key이고 컬럼은 이름, 전화번호, 주소, 도시, 주, 우편번호 이다. 행이 우연히 모든 같은 컬럼의 값을 정의해도 당신은 쉽게 4개 컬럼의 한 행을 가질수 있고 같은 컬럼군에서 400컬럼짜리 다른 행을 가질수도 있으며 아무것도 오버랩되지는 않을 것이다.<br />우리는 CLI를 사용해서 아래처럼 한 컬럼군을 쿼리할 수 있다.<br />cassandra> get Hotelier.Hotel['NYN_042']<br />=> (column=zip, value=10019, timestamp=3894166157031651)<br />=> (column=state, value=NY, timestamp=3894166157031651)<br />=> (column=phone, value=212-555-5555, timestamp=3894166157031651)<br />=> (column=name, value=The Waldorf=Astoria, timestamp=3894166157031651)<br />=> (column=city, value=New York, timestamp=3894166157031651)<br />=> (column=address, value=301 Park Ave, timestamp=3894166157031651)<br />Returned 6 results.<br />이것은 컬럼군에서 6개의 컬럼이 있고 결과는 column-oriented 여서 6개의 결과를 보며 New York에 한 개의 hotel을 가졌음을 보여준다. 그 행에 6개의 컬럼을 가졌지만 다른 행에는 더 적거나 더 많은 컬럼을 가질 수 있다.<br /><br />3.6. 컬럼 군 옵션<br />각 컬럼 군을 정의할 수 있는 몇 개 더 추가적인 파라미터가 있다. 이것은 :<br />- keys_cached<br />SSTable 당 캐쉬하는 위치의 개수다. 이것은 컬럼의 이름과 값은 참조하지 않고 key의 숫자를 컬럼군당 행의 위치로 참조하며 가장 최근에 사용된 순서로 메모리에 저장된다.<br />- rows_cached<br />행의 모든 컨텐츠가 메모리에 캐쉬된다.<br />- comment<br />당신의 컬럼 군의 정의에 필요한 중요한 사항을 기억할 수 있도록 해주는 표준 커멘트이다.<br />- Read_repair_chance<br />이것은 0과 1사이의 값으로서 특정값을 지정하지 않은채 쿼리를 수행해서 두 개나 더 많은 복사본을 같은 행에서 반환하고 한 개 이상의 복사본이 시간이 너무 지난 것이거나 해서 read repair 동작이 수행이 될 확률이다. 쓰기보다 읽기 동작을 많이 수행한다면 이 값을 낮추고 싶을 수 있다.<br />- Preload_row_cache<br />서버 시작시에 행 캐쉬를 미리 이동시킬지 말지 정해준다.<br />나는 이것들이 데이터 모델에 대한 것이기 보다는 설정과 서버 행동에 대한 것이기 때문에 이것을 최대한 단순화 시키려고 하였다. 6장에서 더 자세히 다룬다.<br /><br />3.7. 컬럼<br />컬럼은 카산드라의 데이터 모델에서 가장 기본적인 단위이다. 컬럼은 이름,값,시간의 세 쌍이며 여기서 타임 스탬프를 생각할 수 있다. 다시 한 번 관계형 세계에서 우리는 컬럼이라는 용어에 익숙하지만 카산드라에서는 좀 다르므로 혼돈될 수 있다. 무엇보다 관계형 데이터베이스를 설계할 때 테이블 이름에서 모든 컬럼의 이름을 정해서 테이블의 구조를 정하고 후에 데이터를 쓸때는 단지 미리 정의된 구조에 값을 제공한다.<br />하지만 카산드라에서는 컬럼을 미리 정의하지 않고 keyspace의 컬럼군을 정의하고 컬럼을 정의하지 않은채 데이터를 아무곳에나 쓸 수 있다. 그것은 카산드라에서 모든 컬럼의 이름은 클라이언트에 의해서 제공되기 때문이다. 이는 당신의 애플리케이션의 데이터 와의 동작에 상당한 유연함을 더하여 시간이 지남에 따라 발전하게 한다.<br />이름과 값을 위한 데이터 타입은 종종 스트링처럼 제공되는 자바 바이트 array이다. 이름과 값이 바이트 타입이라서 그 길이는 자유롭다. 시간을 위한 데이터 타입은 org.apache.cassandra.db.IClock 이다. 하지만 0.7 버전에서 타임 스탬프는 백워드 컴패터빌리티가 있다. 이 컬럼의 구조는 그림 3-5에 보여진다.<br /> <br />그림3-5. 컬럼의 구조<br />여기에 당신이 정의할 만한 컬럼의 예제가 구조의 깨끗한 정리를 위해 JSON 노테이션으로 나타내져 있다.<br />{<br />"name": "email",<br />"value: "me@example.com",<br />"timestamp": 1274654183103300<br />}<br />이 예제에서 컬럼은 email 이라고 정해져 있는데 좀 더 정확히 이름의 이라는 애트리뷰트의 값이 email이다. 한 개의 컬럼군은 여러 개의 key를 가지고 있으며 그것은 이 컬럼을 가지고 있을 수도 있는 다른 행을 나타낸다. 이는 관계형 테이블이 모든 행에 같은 셋의 컬럼을 가지고 있다고 생각하기 때문에 관계형 모델에서 나오기 힘든 것이다. 그러나 카산드라에서 컬럼군은 많은 행을 가지고 있고 각각 같거나 다른 셋의 컬럼을 가질 수 있다.<br />서버 측에서 컬럼은 멀티 스레딩 이슈를 피하기 위해 변화불가능하다. 컬럼은 카산드라에서 org.apache.cassandra.db.IColumn 인터페이스에 의해서 정의되며 super 컬럼의 경우에 그 서브 컬럼의 값을 Collection<IColumn> 으로 가져오고 가장 최근의 변화를 가져오는 등 컬럼의 값을 바이트 array로 가져오는 동작을 포함하여 여러 동작을 가능하게 한다. <br />관계형 데이터베이스에서 행은 함께 저장된다. 이것은 카산드라의 초기 버전에서는 이렇지 않았다. 0.6버전에서 행은 같은 컬럼군과 함께 디스트에 저장된다.<br /><br />3.8. 넓은 행, 좁은 행<br /><br />전통적인 관계형 데이터베이스에서 테이블을 디자인할 때 당신은 보통 엔티티를 다루게 되거나 Hotel, User, Product 등 특정한 명사를 묘사하기 위해 애트리뷰트들을 다루게 된다. 당신의 테이블이 어떤 명사를 나타내는지 결정한 후에는 행의 크기는 조절할 수 없기 때문에 행의 크기 자체는 별로 고려대상이 아니다. 그러나 카산드라를 다룰때는 행의 크기를 결정해야 한다. 행이 가지고 있는 컬럼의 개수에 따라 넓거나 좁을 수도 있다.<br />넓은 행은 아마 몇 천이나 몇 백만의 컬럼을 가진 행을 의미한다. 보통은 많은 수의 컬럼을 가지는 불과 몇 개의 행이 있을 수 있다. 반대로 관계형 모델과 비슷하게 적은 수의 컬럼을 가진 많은 행을 정의할 수 있는데 이것은 좁은 모델이다.<br />넓은 행은 보통 자동으로 생성된 이름 (즉, UUID나 타임스탬프) 같은 것을 담고 있고 이것은 어떤 것들의 리스트를 저장하는데 사용된다. 모니터링 애플리케이션을 예로서 고려해보면 당신은 행의 key에 수정된 타임스탬프를 사용하는 시간을 잘게 나눈 것을 행으로 가질 수도 있고 인터벌 사이에 당신의 애플리케이션에 접근하는 IP 주소를 가진 컬럼을 저장할 수도 있다. 시간이 지나면 새로운 행의 key를 만들수 있다.<br />좁은 행은 좀 더 전통적인 RDBMS의 행과 같아서 각 행은 비슷한 컬럼 이름을 가진 셋이다. RDBMS 행과는 다르지만 모든 컬럼은 근본적으로 옵셔날하다.<br />넓은 행과 좁은 행의 다른 차이점은 넓은 행만이 컬럼 이름의 소팅 순서에 신경을 쓴다는 것이다. 다음 절에서 보자.<br /><br />3.9. 컬럼 정렬<br /><br />컬럼은 그 정의에서 다른 면이 있다. 카산드라에서 결과값이 클라이언트에게 반환 되었을 때 컬럼의 이름이 어떻게 정렬 순서와 비교되는지 정하게 된다. 컬럼은 닫히는 컬럼군에 정의된 대로 “Compare With” 타입대로 정렬된다. :AsciiType, BytesType, LexicalUUIDType, IntegerType, LongType, TimeUUIDType, 이나 UTF8Type이다.<br />- AsciiType<br />이것은 입력값이 US-ASCII로 파싱될 수 있다는 것을 검증하며 직접적으로 바이트값을 비교하는 것이다. US_ASCII는 영어 알파벳 순서에 기반한 문자 인코딩 메커니즘이다. 128 문자를 정의하고 94문자는 프린트 할 수 있다.<br />- BytesType<br />이것은 디폴트로서 직접적인 바이트값 비교에 의한 정렬이다. 하지만 검증하는 단계는 넘어간다. BytesType은 디폴트인 이유가 있는데 이는 거의 모든 타입의 데이터에 올바른 정렬방식을 제공한다. (UTF-8과 ASCII를 포함한다.)<br />- LexicalUUIDType<br />16바이트(128비트) Universally Unique Identifier (UUID) 문자적으로 비교된다.<br />- LongType<br />이 정렬은 8 바이트 (64 비트) 긴 숫자형이다.<br />- IntegerType<br />0.7 버전에서 소개되었는데 이것은 LongType보다 빠르고 LongType에서 제공되는 64비트의 수보다 더 작거나 더 큰 정수값을 허가한다.<br />- TimeUUIDType<br />이것은 16바이트의 타임스탬프값으로 정렬한다. 공통적인 버전을 타임스탬프 UUID로 생성하는 방법은 5가지가 있다. 카산드라가 사용하는 스키마는 버전 첫번째의 UUID로서 컴퓨터의 MAC주소에 기반하고 Gregorian 달력의 시작점에서 100 나노초의 인터벌로 수를 매긴 것이다.<br />- UTF8Type<br /> UTF-8 을 캐릭터 인코더로 사용한 스트링이다. 이것이 좋은 디폴트 값으로 보일지몰라도 그것은 아마 XML이나 다른 데이터 교환 메커니즘을 사용하는 개발자들은 공동 인코딩을 사용하는데 더 편안함을 느끼기 때문일 것이다. 카산드라에서는 그러나 당신은 UTF8Type을 당신의 데이터가 검증되기 바라면 사용해야 한다.<br />- Custom<br />만약 당신이 원한다면 당신의 고유한 컬럼 정렬 방식을 만들수 있다. 카산드라의 많은 것들처럼 pluggable 하다. 당신이 해야 하는 일은 org.apache.cassandra.db.marshal.AbstractType 을 확장하고 클래스 이름을 정하는 것이다.<br />컬럼 이름은 compare_with 값에 따라 정렬된다. 행은 한 편, partitioner에 의해 정의된 대로 정렬된다 (예를 들면 RandomPartitioner 는 무작위 정렬순서 이다). 6장에서 partitioner를 살펴본다.<br />카산드라에서는 관계형 데이터베이스에서 했던 것처럼 값으로 정렬할 수는 없다. 이것은 좀 이상한 제한처럼 보이지만 카산드라는 모든 행을 메모리에 넣지 않은 채 많은 행을 각각의 컬럼에 펫칭하지 않도록 각 컬럼의 이름으로 정렬해야 한다. 퍼포먼스는 카산드라의 중요한 장점이어서 읽는 시점에 정렬하는 것은 퍼포먼스에 중요한 안좋은 영향을 미친다는 점은 주목할 만하다.<br /><br />3.10. Super 컬럼들<br />Super 컬럼은 컬럼의 한 특별한 종류이다. 양 종류의 컬럼은 이름 값 쌍이고 보통의 일반적인 컬럼은 바이트 array를 저장하며 super 컬럼의 값은 서브컬럼의 지도이어서 바이트 array를 저장한다. 이것은 단지 컬럼의 지도를 저장한다는 것을 기억하고 다른 super컬럼의 지도를 저장하는 super 컬럼을 정의할 수는 없다. 그래서 super 컬럼의 개념은 한 레벨의 깊이만 갈수 있고, 제한없는 수의 컬럼은 가질 수 있다.<br />기본적인 구조의 super 컬럼은 이름이고 바이트 array이다. (보통 컬럼과 같다). 그 컬럼은 그 key는 컬럼 이름 그리고 값은 컬럼과 같은 지도와 같이 담겨져 있다.<br /> <br />그림3-6. Super 컬럼의 기본적 구조<br />각 컬럼 군은 각 고유한 파일들로 디스크에 저장이 된다. 그래서 퍼포먼스를 최적화 하기위해서 같이 쿼리할 것 같은 것은 같은 컬럼 군에 두는 것이 중요하고 super 컬럼은 이것을 위해 유용할 수 있다. <br />SuperColumn 클래스는 IColumn 과 IColumnContainer 를 구현하며 둘 다 org.apache.cassandra.db 패키지에 있다. Thrift API 는 카산드라에 원격 동작을 할 수 있는 기반 RPC 메커니즘이다. Thrift API가 상속 개념이 없어서 가끔은 데이터 구조가 이 타입을 사용할 때 기반이 되는 컬럼 군이 Super 나 Standard 타입인지 아닌지 알기를 예상하며 ColumnOrSupercolumn 으로의 API 참조를 보게된다. <br />여기서 데이터 모델에서의 좀 더 풍부한 점을 보게된다. 일반적인 컬럼을 사용할 때 앞에서 보았듯이 카산드라는 4차원 해쉬테이블 처럼 보이게 된다. 그러나 super 컬럼에서는 5차원 해쉬같이 된다.<br />[Keyspace][ColumnFamily][Key][SuperColumn][SubColumn]<br />Super 컬럼을 사용하기 위해 당신의 컬럼 군을 타입 Super로 정의한다. 그리고 나서 당신은 일반적인 컬럼 군에서 하듯이 행의 key를 가지고 있다. 그러나 Super 컬럼을 참조하고 있고 이는 단순히 일반적인 컬럼들의 지도의 리스트를 가리키는 이름이다. (때때로 서브컬럼이라고 불린다).<br />여기 PointOfInterest 라고 불리는 super 컬럼 군 정의의 예가 있다. 호텔 관련 도메인에서 “point of interest” 는 여행자들이 방문하고 싶은 공원, 박물관, 동물원 등과 같은 호텔 근처의 위치이다.<br />PointOfInterest (SCF)<br />SCkey: Cambria Suites Hayden<br />{<br />key: Phoenix Zoo<br />{<br />phone: 480-555-9999,<br />desc: They have animals here.<br />},<br />key: Spring Training<br />{<br />phone: 623-333-3333,<br />desc: Fun for baseball fans.<br />},<br />}, //end of Cambria row<br />SCkey: (UTF8) Waldorf=Astoria<br />{<br />key: Central Park<br />desc: Walk around. It's pretty.<br />},<br />key: Empire State Building<br />{<br />phone: 212-777-7777,<br />desc: Great view from the 102nd floor.<br />}<br />}<br />}<br />PointOfInterest라는 super 컬럼 군은 두 개의 super 컬럼을 가지고 있으며 각각은 Cambria Suites Hayden과 Waldorf=Astoria 라는 이름을 가진 다른 호텔이다. 행의 key는 각각 다른 point of interest의 이름으로서 “Phoenix Zoo” 그리고 “Central Park” 같은 것이다. 각 행은 묘사를 하기 위한 컬럼들을 가지고 있으며 (“desc” 컬럼이다.) 어떤 행은 전화번호를 자기고 어떤 것은 그렇지 않다. 같은 구조의 행을 묶는 관계형 테이블 같지 않게, 컬럼군과 super 컬럼군은 단지 비슷한 기록들을 묶는다.<br />CLI를 사용하여 우리는 super 컬럼 군을 다음과 같이 쿼리할 수 있다.<br />cassandra> get PointOfInterest['Central Park']['The Waldorf=Astoria']['desc']<br />=> (column=desc, value=Walk around in the park. It's pretty., timestamp=1281301988847)<br />이 쿼리는 어쩌다 Super 타입으로 정의된 PointOfInterest 컬럼군에서 행의 key “Central Park”라는 행의 key를 사용하며 묻고 있다. “Waldorf=Astoria” 라는 super 컬럼에서 “desc” 컬럼의 값을 가져다 준다. (이는 point of interest를 묘사하는 단순한 언어 텍스트이다).<br /><br />3.11. 종합적 Keys<br />Super 컬럼을 모델링할 때 중요하게 고려해야 할 것이 있다. 카산드라는 서브컬럼을 인덱스 하지 않는다. 그래서 super 컬럼을 메모리로 로드할 때 그 모든 컬럼도 로드된다.<br />당신은 당신의 고유한 디자인에서 종합적인 key를 사용하여 쿼리를 할 때 도움이 될 수 있다. 종합적인 key는 <userid:lastupdate> 과 같은 것이다.<br />이것은 당신이 모델링을 할 때 고려하는 것이 될 수 있으며, 이후에 하드웨어 크기를 정할 때 다시 확인 해야 할 것이다. 그러나 당신의 데이터 모델이 몇 천개의 서브컬럼을 필요로 한다면 당신은 다른 접근 방법을 택해서 super 컬럼을 사용하지 않을수도 있다. 대안으로는 종합적 key를 만드는 것이있다. Super 컬럼으로 컬럼을 나타내는 대신 종합적 key 접근방법은 당신이 보통 컬럼군을 보통 컬럼과 사용하여 custom delimiter를 키 이름에 사용하고 클라인언트 정보검색에 파싱하도록 하는 것이다.<br />여기 종합적인 key 패턴의 예가 있다. 카산드라 디자인 패턴의 예와 함께 사용되어 나는 Materialized View 라고 부르며 공통 카산드라 디자인 패턴과 함께 Valueless 컬럼이라고 부른다. <br />HotelByCity (CF) Key: city:state {<br />key: Phoenix:AZ {AZC_043: -, AZS_011: -}<br />key: San Francisco:CA {CAS_021: -}<br />key: New York:NY {NYN_042: -}<br />}<br />여기서 세가지 일이 발생한다. 첫째로 우리는 Hotel 이라는 다른 컬럼 군에 이미 호텔 정보를 정의하였다. 그러나 호텔 데이터를 정규화하지 않은 HotelByCity 라는 두번째 컬럼군을 만들수 있다. 우리는 이미 가지고 있는 정보를 되풀이 하게 되는데 그러나 그것을 RDBMS의 view 와 유사하게 저장을 한다. 이는 그것이 빠르고 직접적인 퀴리 쓰기를 하게 해주기 때문이다. 우리가 호텔을 도시로 찾는다는 것을 알았을 때 우리는 그 검색을 위한 행의 key를 정의하는 테이블을 만들 수 있다. 그러나 같은 이름의 도시를 가진 많은 주가 있기 때문에 단지 도시 만으로 행의 key를 이름짓지 않고 주와 함께 해야한다.<br />그리고 우리는 Valueless Column 이라고 불리는 다른 패턴을 사용한다. 우리가 알아야 할 것은 도시안에 어떤 호텔들이 있는가 이다. 그리고 더 이상 비정규화 할 필요는 없다. 그래서 컬럼의 이름을 값으로 사용한다. 그리고 컬럼은 해당하는 값을 갖지 않는다. 컬럼이 삽입되어지면 우리는 단지 비어있는 바이트 array를 저장한다.<br /><br />3.12. RDBMS와 카산드라의 차이점을 디자인하기<br /><br />카산드라의 모델과 RDBMS에서 가능한 쿼리 방법간에는 몇 가지 다른점이 있어서 이를 알아두는 것이 중요하다.<br /><br />3.12.1. No Query 언어<br />SQL은 관계형 데이터베이스에서 쓰이는 표준 Query 언어이다. 카산드라는 쿼리 언어가 없다. RPC 직렬화 메커니즘을 통해 접근할 수 있는 Thrift API가 있을 뿐이다.<br /><br />3.12.2. 비참고용의 진실성<br />카산드라는 참고용 진실성이라는 개념이 없어서 join이라는 개념도 없다. 관계형 데이터베이스에서 다른 테이블의 기록의 primary key를 테이블안의 외래 key로서 명시할 수 있다. 그러나 카산드라에서는 이런 것을 할 수 없다. 테이블에서 다른 엔티티에 관련된 ID를 저장하는 것이 아직 공통적인 디자인 요구사항이라해도 순차적 삭제가 아직 가능하지 않다.<br /><br />3.12.3. 두번째 Index<br /><br />여기서 당신이 호텔 프라퍼티를 위한 고유한 ID를 찾기 원한다고 할 때 두번째 인덱스가 왜 필요한지 살펴보자. 관계형 데이터베이스에서 아래와 같은 쿼리를 사용할 수 있다.<br />SELECT hotelID FROM Hotel WHERE name = 'Clarion Midtown';<br />이것은 당신이 찾는 호텔의 이름은 알지만 고유한 ID는 모를 때 사용해야할 쿼리이다. 이러한 퀴리를 전달받았을 때 관계형 데이터베이스는 당신이 찾는 값을 찾기 위해 각 행 열을 뒤지며 전체 테이블 스캔을 할 것이다. 하지만 이것은 당신의 테이블이 매우 크다면 매우 느릴 수 있다. 그래서 관계형 에서 이에대한 해결은 name 컬럼에 인덱스를 만들어 관계형 데이터베이스가 빠르게 찾아볼 수 있는 데이터의 복사본을 만드는 것이다. hotelID가 이미 고유한 primary key이기 때문에 자동으로 인덱스되고 그것이 primary index이다. 이름 컬럼에 또 다른 인덱스를 만드는 것은 두번째 인덱스를 만든다. 카산드라는 현재 이것을 지원하지 않는다.<br />카산드라에서 같은 것을 수행하기 위해서는 찾는 데이터를 가지고 있는 두번째 컬럼군을 만드는 것이다. 호텔 이름을 저장하기 위해 한 개의 컬럼군을 만들고 각 ID에 매핑한다. 두번째 컬럼군은 분명한 두번째 인덱스처럼 동작할 것이다.<br />두번째 인덱스를 지원하는 것은 카산드라 7.0에 추가되었다. 이것은 당신이 컬럼 값에 인덱스를 만드는 것을 허용한다. 그래서 만약 당신이 주어진 도시에 사는 사용자를 모두 보고 싶다면 두번째 인덱스 지원은 처음부터 다 하는 일을 하지 않도록 해줄것이다.<br /><br />3.12.4. 정렬은 디자인 결정사항<br />RDBMS에서는 당신의 쿼리에서 ORDER BY 를 사용하므로써 기록이 반환되는 순서를 쉽게 바꿀수 있었다. 디폴트 정렬 순서는 설정할수 없다. 디폴트로 기록은 그것들이 쓰여진 순서대로 반환된다. 당신이 그 순서를 바꾸고 싶으면 쿼리를 바꾸어 어느 컬럼의 리스트이던지 정렬할 수 있다. 카산드라에서는 그러나 정렬은 다르게 다루어진다. 그것은 디자인 결정사항이다. 컬럼군 정의는 CompareWith 인자를 포함한다. 그것은 읽기에서 당신의 행을 정렬하는 순서를 말해주지만 쿼리당 설정가능한 것은 아니다.<br />RDBMS가 당신이 컬럼에 저장된 데이터 타입에 따라 정렬하는 것을 제한하는 반면, 카산드라는 바이트 array만을 저장하여 접근방법가 의미가 없게한다. 하지만 당신이 할 수 있는것은 컬럼이 몇가지 다른 타입(ASCII, Longinteger, TimestampUUID, lexicographically, etc.) 의 하나인것 처럼 정렬하는 것이다. 당신 자신의 플러그인할수 있는 비교자를 써서 정렬을 할수도 있다.<br />그밖에 SQL에 있는 것처럼 ORDER BY나 GROUP BY 같은 문장의 지원은 없다. SliceRange라고 하는 쿼리 타입이 있어서 4장에서 자세히 보겠지만 반전을 가능하게 한다는 점에서 ORDER BY 와 유사하다.<br /><br />3.12.5. 비정규화<br />관계형 데이터베이스 디자인에서 정규화의 중요성을 가르침받는다. 이는 카산드라로 할 때는 데이터 모델이 비정규화 되었을 때 가장 좋은 퍼포먼스를 내므로 별로 장점이 아니다. 관계형 데이터베이스에서 어떤 회사가 비정규화된 데이터 상태로 끝내는 것은 자주 있는 일이다. 여기에는 두가지 공통적인 이유가 있다. 하나는 퍼포먼스이다. 회사들은 많은 join를 일년동안 수행하므로써만 그들이 원하는 퍼포먼스를 얻을 수는 없다. 그래서 알고 있는 쿼리에서 비정규화를 한다. 이것은 작동하게 된다. 하지만 관계형 데이터베이스가 디자인 되었던 것처럼 세밀한 동작은 하지 못한다. 그래서 궁극적으로는 관계형 데이터베이스를 사용하는 것이 이러한 환경에서 가장 좋은 것이 아닐까 질문하게 된다.<br />관계형 데이터베이스가 의도적으로 비정규화되는 두번째 이유는 비즈니스 문서구조가 기억을 필요로 하기 때문이다. 그것은 당신이 데이터가 시간이 지남에 따라 변할 수 있는 외부의 많은 테이블을 참조하는 둘러싸는 테이블을 가지고 있기 때문이다. 그러나 당신은 둘러싸는 문서들을 역사속의 스냅샷으로 보존할 필요가 있다. 여기서 공통적인 예로는 인보이스가 있다. 당신은 이미 고객과 제품 테이블이 있다. 그래서 그 테이블들을 참조하는 인보이스를 만들수 있다고 생각한다. 그러나 이것은 실제로는 안된다. 고객이나 가격 정보는 바뀔 수 있다. 그리고 당신은 인보이스의 진실성을 잊어버리게 된다.<br />관계형 세상에서 비정규화는 Codd의 정규화 폼을 위반한다. 그리고 우리는 그것을 피하려고 노력한다. 그러나 카산드라에서는 비정규화는 정상적인 것이다. 만약 데이터 모델이 간단하다면 필요하지도 않다. 그러나 그것을 두려워하지는 말라.<br />중요한 점은 데이터를 모델링하고 나서 쿼리를 쓰는 대신에 카산드라에서는 당신은 쿼리를 모델하고 데이터가 그 주위에서 정돈되도록 한다. 당신의 애플리케이션이 사용할 가장 공통적인 쿼리 패스를 생각하자. 그리고 그것을 지원하기 위한 컬럼 군을 만들자.<br />비방하는 사람들은 이것이 문제라고 한다. 그러나 당신이 관계형 도메인에서 그랬던 것처럼 당신의 애플리케이션에서 쿼리에 대해 열심히 생각하는 것은 너무 당연한 일이다. 당신이 잘못해서 양쪽 세계에서 문제를 가질 수 있다. 혹은 당신의 쿼리가 시간이 지남에 따라 바뀌고 당신의 데이터 셋을 업데이트 하기위해 일해야 할 것이다. 하지만 이것은 잘못된 테이블을 정하거나 RDBMS에서 추가적인 테이블을 원하는 것과 아무 다를게 없다.<br />Cloudkick이 카산드라에서 저장하고 데이터를 모니터링하는 흥미로운 기사를 보려면 http://www.cloudkick.com/blog/2010/mar/02/4_months_with_cassandra 를 보라.<br /><br />3.13. 디자인 패턴<br /><br />사람들이 카산드라를 디자인 패턴이라고 묘사되어질 말로 카산드라를 사용하는 공통적인 경우가 몇 가지 있다. 나는 이 공통적 패턴에 이름을 붙이겠다. Materialized View, Valueless Column, and Aggregate Key.<br /><br />3.13.1. Materialized View<br /><br />추가적인 쿼리를 나타내는 두번째 인덱스를 만드는 것은 일반적이다. SQL의 WHERE 문이 없기 때문에 당신의 데이터를 두번째 컬럼군에 씀으로써 그 쿼리를 나타내어 같은 효과를 볼 수 있다. <br />예를 들어 당신이 User 컬럼군을 가지고 있고 어떤 특정한 시에서 사용자를 찾고자 한다면 당신은 UserCity라는 두번째 컬럼군을 만들수 있고 거기에 사용자 데이터와 더불어 시를 key(사용자 이름 대신) 그리고 그 시에사는 사용자이름을 딴 컬럼을 가질 수 있다. 이것은 비정규화 테크닉이며 쿼리의 속도를 향상시키고 특별히 당신의 쿼리 주위에 데이터를 디자인하는 예이다. 이러한 사용법은 카산드라 세계에서는 일반적인 것이다. 당신이 어떤 한 도시의 사용자를 위하여 쿼리를 하려고 할 때, 당신은 User컬럼군을 쿼리하여 클라이언트에 많은 데이터 작업을 하지 않고 단지 UserCity 컬럼군을 쿼리하면 된다. <br />여기서 “materialized” 는 당신이 쿼리에 대답하기위해 필요한 것이 거기에 있고 원래 데이터를 찾아보지 않게 원래 데이터의 모든 복사본을 저장하는 것을 의미한다. 당신이 사용중인 컬럼 이름을 저장하기 위해 두번째 쿼리를 수행한다면 그것은 두번째 인덱스이다.<br />0.7 버전에서 카산드라는 두번째 인덱스를 위한 네이티브를 지원한다.<br /><br />3.13.2. Valueless Column<br /><br />우리의 User/UserCity 예제에 더 추가해보자. 우리가 User 컬럼군에 참조 데이터를 저장하기 때문에 두가지 일이 일어난다. 첫째, 당신은 고유하고 사려깊은 key를 가져야 할 필요가 있다. 그것은 참조적 진실성을 더하게 한다. 둘째, UserCity 컬럼군안의 컬럼 값을 필요로 하지는 않는다. 만약 당신이 Boise의 행의 key를 가진다면 컬럼 이름은 그 도시의 사용자의 이름이 될 수 있다. 당신의 참조 데이터가 User 컬럼군에 있어서 컬럼은 아무런 의미있는 값을 갖지 않는다. 당신은 단지 조립식의 리스트와 같이 그것을 사용할 뿐이며 하지만 당신은 참조 컬럼군에서 추가적인 데이터를 그 리스트에서 얻기 원할 수도 있다.<br /><br />3.13.3. Aggregate Key<br /><br />당신이 Valueless Column 패턴을 사용할 때, Aggregate Key 패턴을 또한 필요로 할 수도 있다. 이 패턴은 두개의 스칼라 값을 모으기 위한 구분자와 함께 함께 융합한다. 우리의 예제를 더 진행하기 위해, 도시 이름은 일반적으로 고유하지 않다. US안의 많은 주가 Springfield라는 도시가 있고, Paris, Texas, Paris, Tenessee가 있다. 그래서 여기서는 우리의 Materialized View 에서 사용될Aggregate Kye를 만들기 위해 주이름과 도시이름을 융합하는 것이 좋다. 이 키는 TX:Paris나 TN:Paris 같은 모양일 것이다. 많은 카산드라 사용자는 colon을 보통 구분자로 사용한다. 그러나 키에서 의미가 없는 다른 문자를 사용해도 된다.<br />3.14. 명심해야 할 것들<br />당신이 관계형 정신세계에서 카산드라 데이터 모델로 옮겨오기 위해서 노력할 때는 몇 가지 주의해야 할 것이 있다. 당신이 관계형 데이터베이스와 오랜 기간 일했다면 그리 쉬운 일은 아니다. 여기 몇 가지 포인트가 있다.<br /> 당신의 쿼리를 시작하라. 당신의 애플리케이션이 어떤 쿼리를 필요로 하는지 묻고 당신이 관계형 세상에서 그랬던 것 처럼 데이터 모델링을 처음으로 하지 말고 그 주위의 데이터를 먼저 모델하라. 이것은 어떤 사람들에게는 충격적이다. 어떤 스마트한 사람들은 새로운 쿼리를 할 때 이 접근 방법은 문제를 일으키기도 한다고 말했다. 나의 대답은 그들이 왜 그들의 데이터 타입이 그들의 쿼리보다 더 고정되어 있다고 가정하는가 질문하는 것이다.<br /> 당신은 매 쿼리에 타임스탬프를 제공해야 하기 때문에 많은 클라이언트와 싱크를 하는 전략이 필요하다. 이것은 카산드라가 가장 최근에 쓰기한 값을 결정하기 위해 타임스탬프를 사용하는 것이 중요하다. 여기서 Network Time Protocol (NPT) 서버를 사용하는 것이 한 개의 좋은 방법이다. 다시 한 번, 어떤 스마트한 사람들이 내게 물었다. 왜 서버가 시간을 관리하게 하지 않느냐고. 나의 대답은 대칭적인 분산 데이터베이스에서 서버측은 같은 문제를 가지고 있다는 것이다.Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-79523734893936329432011-06-21T22:42:00.000-07:002011-06-21T22:43:04.820-07:00Cassandra (2/12)2. Cassandra의 설치<br /><br />카산드라가 새로운 용어들을 좀 정의하기 때문에 앞으로 나아가면서 좀 익숙하지 않은 용어들이 눈에 띨수 있다. 그러나 괜찮다. 여기서 원하는 것은 간단한 설정으로 빠르게 셋업을 하여 모든 것이 실행이 되는지 확인하는 것이다. 초반 소개 작업처럼 진행이 될 것이다. 그러고난 후에 한 발짝 물러나서 더 이해하도록 하자.<br /><br />2.1. 바이너리를 설치하기<br />카산드라는 http://cassandra.apache.org 에서 다운로드 가능하다. 가장 최신버전을 링크를 통해서 다운받도록 하자. 바이너리의 이름은 apache-cassandra-x.x.x-bin.tar.gz이다. x.x.x 는 버전 번호를 뜻한다. 다운로드는 약 10메가 근처의 크기이다.<br /><br />2.1.1. 다운로드 압축풀기<br /><br />가장 쉬운 출발점은 바이너리를 다운로드 받는것이다. 일반적인 ZIP 유틸리티를 써서 압축을 풀수있다. 리눅스에서는 GZip 압축풀기 유틸리티가 미리 설치되어 있어야 한다. 윈도우즈에서는 WinZip이나 7-Zip 같은 상용화 애플리케이션이나 프리웨어를 사용한다. 7-Zip의 프리웨어는 http://www.7-zip.org 에서 받을 수 있다.<br />압축풀기 프로그램을 연다. ZIP 파일과 TAR 파일을 각 단계별로 압축해제해야 한다. Apache-cassandra-x.x.x 같은 폴더가 생기고 나면 카산드라를 실행할 준비가 끝났다.<br /><br />2.1.2. 그 안에 무엇이 있는가?<br /><br />Tarball을 압축해제하고 나면 서너개의 디렉토리를 포함하여 카산드라 배포본을 볼 수 있다. <br />- Bin<br />이 디렉토리는 카산드라를 실행하기 위한 실행파일과 커맨드라인 인터페이스(CLI) 클라이언트가 있다. 클러스터가 제대로 설정이 되어있는지 또 다른 유지보수 어플래케이션이 잘 실행하기 위한Nodetool을 실행하기 위한 스크립트도 있다. Nodetool에 대해서는 뒤에서 더 자세히 본다. SSTable (데이터파일)을 JSON으로 컨버팅하기 위한 스크립트도 있다.<br />- Conf<br />팩키지 루트아래에 있는 이 디렉토리는 설정을 위한 파일들이 들어있다. Storage-conf.xml에는 키스페이스와 컬럼군을 설정함으로써 당신의 데이터 저장소를 만들수 있는 곳이다. Log4j 프로퍼티를 통해 로깅 레벨을 설정할 수 있다. 6장에서 설정을 알아볼 때 더 자세히 논할 것이다.<br />- Interface<br />0.6 버전과 그 이전에는 이 디렉토리에는 Cassandra.thrift 라는 파일 하나만 존재했었다. 이 파일은 Remote Procedure Call (RPC) 클라이언트 API를 표현했다. 인터페이스는 Thrift 문법을 이용해 정의되어있고 클라이언트를 만들기위한 쉬운 방법을 제공한다. 카산드라가 지원하는 모든 기능을 보기위해 이 파일을 일반적인 텍스트 에디터로 열어본다. 카산드라가 Java, C++, PHP, Ruby, Python, Perl, C#과 같은 언어의 인터페이스를 이 인터페이스를 통해 클라이언트 지원함을 볼 수 있다.<br />- Javadoc<br />이 디렉토리에는 Java의 JavaDoc을 이용하여 만들어진 각종 문서와 웹사이트가 들어있다. JavaDoc은 자바코드에 직접 들어있는 커멘트들만을 보여주는 것이지 모든 문서가 들어있는 것은 아니다. 코드가 어떻게 구성되어있는지 보려면 유용할 것이다. 카산드라는 매우 훌륭한 프로젝트이지만 코드안의 커멘트는 제한적이다. 만약 자바에 익숙하다면 단순히 클래스 파일들을 직접 보는 것이 유용할 것이다. JavaDoc 파일을 읽기 위해서는 javadoc/index.html 파일을 브라우저에서 열어본다.<br />- Lib<br />이 디렉토리는 카산드라가 작동하기 위한 모든 외부 라이브러리들을 담고있다. 예를 들면 두개의 다른 JSON 라이브러리를 담고있고 구글 프로젝트와 몇 개의 아파치 라이브러리가 있다. 카산드라와 상호작용하기위해 Thrift 와 Avro RPC 도 포함하고 있다.<br /><br />2.2. 소스로부터 빌드하기<br /><br />카산드라는 빌드 스크립트로 Apache Ant를 사용하고 상호의존관계 관리를 위해서는 Ivy 플러그인을 사용한다. <br />Ant는 http://ant.apache.org에서 받을수 있다. 카산드라 빌드를 위해서 Ivy를 별도로 받을 필요는 없다.<br />Ivy는 Ant를 필요로한다. 소스에서 빌드를 하기위해 JDK 1.6.0_20 이나 그 이후 버전으로서 단지 JRE가 아니다. Ant가 tools.jar를 가지고 있지 않다는 메시지가 나오면 JDK가 모두 있지 않거나 패스를 틀린것이다.<br />만약 모든 소스를 받고 싶다면 Hudson 에서 받을 수 있다. http://hudson.zones.apache.org/hudson/job/Cassandra/ 위치이다.<br />만약 당신이 Git 팬이라면 읽기전용의 카산드라 버전을 아래 명령어를 통해서 받을 수 있다.<br />>git clone git://git.apache.org/Cassandra.git<br />Git는 리누스 토발즈가 만든 소스 코드 관리 시스템이다. 지금은 유명해졌고 Android, Fedora, Ruby, Perl 와 많은 카산드라 클라이언트에의해 사용되어진다. Ubuntu와 같은 리눅스 시스템에 있다면 Git을 이용하기 쉽다. 콘솔에서 그냥 >apt-get install git 을 치면 설치된다. 더 많은 정보를 위해서는 http://git-scm.com/ 을 방문하라.<br />Ivy가 모든 상관관계를 관리하기 때문에 소스코드가 있다면 빌드하기가 쉽다. 단지 당신이 루트 디렉토리에 있고 소스가 다운로드되어서 ant 프로그램을 실행하기만 하면 된다. 그것은 build.xml을 현재 디렉토리에서 찾아서 디폴트 빌드를 할 것이다. Ant와 Ivy가 나머지를 알아서 처리한다. Ant를 실행하고 소스 컴파일을 하기 위해서는 >ant 라고 타이프한다.<br />이제 모두 끝났다. Ivy가 모든 상관관계를 처리하고 Ant가 350개 정도되는 소스 파일을 빌드하고 테스트를 수행할 것이다. 만약 잘 된다면 BUILD SUCCESSFUL이라는 메시지를 보게된다. 잘 안되면 패스 설정이 모두 올바른지 확인한다. 당신이 다운로드 받은 소스가 컴파일 되는지 Hudson 보고서를 확인할 수 있다.<br />만약 빌드되면서 자세한 정보를 보고 싶으면 -v 로 Ant에 옵션을 켜주면 된다.<br /><br />2.2.1. 추가적인 빌드 타겟<br /><br />서버를 컴파일하기 위해 ant를 위에서 본 것 처럼 실행해주면 된다. 하지만 빌드 파일에서 당신이 흥미를 가질 만한 다른 사항들이 있다.<br />- Test<br />유닛 테스트들을 실행하기 때문에 사용자가에게 가장 유용할 것이다. 카산드라와 상호작용하는 좋은 예제로서 소스파일들을 볼 수도 있다.<br />- Get-thrift-java<br />자바 데이터베이스와 상호작용하기위해 아파치 Thrift 클라이언트 인터페이스를 생성한다.<br />- Gen-thrift-py<br />파이선 사용자를 위한 Thrift 클라이언트 인터페이스를 생성한다.<br />- Build-jar<br />Java Archive (JAR)를 배포하기위해 >ant jar를 실행한다. 이것은 빌드를 완전히 몇 가지 실행하고 빌드 디렉토리 apache-cassandra-x.x.x.jar 에 아웃풋 파일을 생성한다.<br /><br />2.2.2. Maven으로 빌드하기<br /><br />초기 카산드라를 만든 사람들은 Maven에 대해서 많은 신경을 쓰지 않은 것 같다. 이른 버전의 카산드라는 Maven POM 파일을 포함하고 있지 않다. 하지만 많은 자바 개발자들이 Ant보다 Maven을 사용하기 하고 IDE에서 Maven을 지원하자 pom.xml 파일이 생겨서 이제 원하면 Maven으로 빌드할 수 있다.<br />Maven에서 빌드하기 위해서는 <Cassandra-home>/contrib./maven으로 이동하여 아래 명령을 수행한다.<br />$mvn clean install<br />Maven으로 빌드하는데 어려움이 있다면 필요한 JAR파일을 수동으로 얻을 수도 있다. 버전 0.6.3 에서는 libthrift.jar와 같은 리파지토리에 존재하지 않는 파일에 대한 의존성 때문에 Maven POM이 제대로 작동하지 않을수 있다.<br /><br />2.3. Cassandra 실행하기<br /><br />카산드라의 이전 버전에서는 실제로 서버를 실행하기 전에 Ivy에서 몇 가지 일을 하고 설정 변수를 몇 개 맞추어 주어야 했다. 하지만 개발자들이 노력하여 이제 시작하는 것을 매우 쉽게 해 놓았다.<br /><br /><br />2.3.1. Windows 에서<br /><br />당신이 바이너리를 가지고 있거나 소스를 다운로드해서 컴파일했다면 이제 데이터베이스 서버를 시작할 준비가 되어있다.<br />JAVA_HOME 환경 변수를 또 설정해야 할 필요가 있을 것이다. Windows 7에서 이것을 하기 위해서 시작 버튼을 누르고 컴퓨터를 오른쪽 클릭한다. 그리고 Advanced System Settings 를 클릭하고 환경 변수를 클릭한다. 새로 만들기 버튼을 클릭하여 새로운 시스템 환경 변수를 만든다. 변수 이름에 JAVA_HOME을 쓴다. 그리고 값에는 JDK 가 설치된 위치를 넣는다. 이것은 C:\Program Files\Java\jdk1.6.0_20과 같은 것일 것이다. 환경 변수를 새로 설정했을때는 열려있는 터미널 등도 다시 열어서 환경 변수가 제대로 인식되는지 검사해 본다. 제대로 설정이 되었는지 보기위해서 >echo %JAVA_HOME% 를 터미널에서 실행해본다. 이것은 당신의 환경변수의 내용을 프린트할 것이다.<br />카산드라를 처음 실행하면 시스템에 디렉토리 두개를 추가할 것이다. 첫번째는 C:\var\lib\cassandra 인데 commitlog라고 불리는 데이터 파일을 저장하는 곳이다. 다른 것은 c:\var\log\cassandra 인데 system.log 라는 파일에 로그를 기록할 것이다. 만약 무슨 어려움을 만난다면 이 디렉토리에 있는 파일들을 참조하여 무슨 일이 생기는지 알수있다. <br /><br />2.3.2. Linux 에서<br /><br />리눅스에서도 윈도우즈에서와 비슷하다. JAVA_HOME이 1.6.0_20 이상 버전에 잘 설정되어 있는지 확인한다. 그리고 Cassandra 압축을 gunzip을 사용하여 풀어준다. 그리고 데이터와 로그를 저장하는 몇 개 디렉토리를 만들어 준다. <br />ehewitt@morpheus$ cd /home/eben/books/cassandra/dist/apache-cassandra-0.7.0-beta1<br />ehewitt@morpheus$ sudo mkdir -p /var/log/cassandra<br />ehewitt@morpheus$ sudo chown -R ehewitt /var/log/cassandra<br />ehewitt@morpheus$ sudo mkdir -p /var/lib/cassandra<br />ehewitt@morpheus$ sudo chown -R ehewitt /var/lib/cassandra<br />물론 ehewitt 대신에 당신의 사용자 이름을 넣어준다.<br /><br />2.3.3. 서버 시작하기<br />어떤 OS에서든 카산드라를 시작하기 위해 터미널에 커맨드를 열고 <Cassandra-directory>/bin으로 이동한다. 그리고 아래 커맨드를 시작하기 위해 입력한다. 제대로 설정되었으면 아래와 같은 로그를 보게된다.<br />eben@morpheus$ bin/cassandra -f<br />INFO 13:23:22,367 DiskAccessMode 'auto' determined to be standard, indexAccessMode<br />is standard<br />INFO 13:23:22,475 Couldn't detect any schema definitions in local storage.<br />INFO 13:23:22,476 Found table data in data directories.<br />Consider using JMX to call org.apache.cassandra.service.StorageService<br />.loadSchemaFromYaml().<br />INFO 13:23:22,497 Cassandra version: 0.7.0-beta1<br />INFO 13:23:22,497 Thrift API version: 10.0.0<br />INFO 13:23:22,498 Saved Token not found. Using qFABQw5XJMvs47lg<br />INFO 13:23:22,498 Saved ClusterName not found. Using Test Cluster<br />INFO 13:23:22,502 Creating new commitlog segment /var/lib/cassandra/commitlog/<br />CommitLog-1282508602502.log<br />INFO 13:23:22,507 switching in a fresh Memtable for LocationInfo at CommitLogContext(<br />file='/var/lib/cassandra/commitlog/CommitLog-1282508602502.log', position=276)<br />INFO 13:23:22,510 Enqueuing flush of Memtable-LocationInfo@29857804(178 bytes,<br />4 operations)<br />INFO 13:23:22,511 Writing Memtable-LocationInfo@29857804(178 bytes, 4 operations)<br />INFO 13:23:22,691 Completed flushing /var/lib/cassandra/data/system/<br />LocationInfo-e-1-Data.db<br />INFO 13:23:22,701 Starting up server gossip<br />INFO 13:23:22,750 Binding thrift service to localhost/127.0.0.1:9160<br />INFO 13:23:22,752 Using TFramedTransport with a max frame size of 15728640 bytes.<br />INFO 13:23:22,753 Listening for thrift clients...<br />INFO 13:23:22,792 mx4j successfuly loaded<br />HttpAdaptor version 3.0.2 started on port 8081<br /><br />-f 옵션을 켜면 카산드라에게 백그라운드 프로세스로 실행하지 않고, 포어그라운드에 머물러서 표준 출력에게 모든 로그를 출력한다.<br />축하한다. 당신의 카산드라 서버는 Test Cluster라는 한 개의 노드로 9160 포트를 열고 실행이 되었다.<br /><br />2.4. Command-Line 클라이언트 인터페이스 실행하기<br /><br />카산드라 설정을 한 개 실행시켰다. 모든 것이 잘 설정이 되었는지 확인해보자. 리눅스에서 커맨드 라인 인터페이스는 잘 작동할 것이다. 윈도우즈에서는 몇 가지 더 해줄일이 있다.<br />윈도우즈에서 카산드라 홈 디렉토리로 이동해서 터미널을 새로 연후 다음을 실행해준다.<br />>bin\cassandra-cli<br />윈도우즈에서는 클라이언트를 시작할 때 아래와 같은 에러를 볼 수 있다.<br />Starting Cassandra Client<br />Exception in thread "main" java.lang.NoClassDefFoundError:<br />org/apache/cassandra/cli/CliMain<br />이는 당신이 카산드라를 bin 디렉토리에서 곧바로 실행했음을 의미한다. 그리고 Java 클래스패스를 잘 설정하지 못하여 CliMain을 찾지 못하는 것이다. CASSANDRA_HOME이라는 환경변수를 카산드라를 설치한 최상위 디렉토리로 설정하여 카산드라를 어디서 시작하든지 신경을 별로 쓰지 않도록 한다.<br />리눅스에서 커맨드 라인 인터페이스를 실행하기 위해서 카산드라 홈으로 이동하고 Cassandra-cli 를 bin 디렉토리에서 실행한다.<br />>bin/Cassandra-cli<br />카산드라 클라이언트가 시작한다.<br />eben@morpheus$ bin/cassandra-cli<br />Welcome to cassandra CLI.<br />Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.<br />[default@unknown]<br />이제 커맨드를 실행할 수 있는 상호작용 쉘이 열린것이다.<br />하지만 당신이 Oracle SQL Plus에 익숙해 있다면 당황할 것이다. 카산드라 CLI는 개발에 적합한 것이다. 그래서 카산드라를 시작하기에는 적당하다.<br /><br />2.5. 기본 CLI 명령들<br /><br />카산드라에 대해서 더 깊이 공부하기전에 클라이언트 API의 오버뷰를 통해서 당신이 서버에게 보낼수 있는 명령어 들에 대해 알아본다. 우리는 기본 환경 커맨드를 보고 데이터를 집어넣고 빼고 하는 것을 본다.<br /><br />2.5.1. Help<br /><br />커맨드 라인 인터페이스에서 도움말을 받기 위해서는 help 나 ?를 타이핑하여 쓸수 있는 명령어들의 목록을 본다. 아래 목록은 메타데이터와 설정에 관한 것을 보여준다. 다른 명령어들도 있어서 값들을 설정하거나 읽을 수 있으며 그것은 나중에 보도록 한다.<br />[default@Keyspace1] help<br />List of all CLI commands:<br />? Display this message.<br />help Display this help.<br />help <command> Display detailed, command-specific help.<br />connect <hostname>/<port> Connect to thrift service.<br />use <keyspace> [<username> 'password'] Switch to a keyspace.<br />describe keyspace <keyspacename> Describe keyspace.<br />exit Exit CLI.<br />quit Exit CLI.<br />show cluster name Display cluster name.<br />show keyspaces Show list of keyspaces.<br />show api version Show server API version.<br />create keyspace <keyspace> [with <att1>=<value1> [and <att2>=<value2> ...]]<br />Add a new keyspace with the specified attribute and value(s).<br />create column family <cf> [with <att1>=<value1> [and <att2>=<value2> ...]]<br />Create a new column family with the specified attribute and value(s).<br />drop keyspace <keyspace> Delete a keyspace.<br />drop column family <cf> Delete a column family.<br />rename keyspace <keyspace> <keyspace_new_name> Rename a keyspace.<br />rename column family <cf> <new_name> Rename a column family.<br /><br />2.5.2. 서버에 연결하기<br /><br />클라이언트를 이렇게 시작하는 것이 카산드라 서버에 자동으로 연결을 해주는 것은 아니다. 카산드라를 시작한 후에 특정 서버에 연결하기 위해서는 connect 명령을 사용한다.<br />eben@morpheus:~/books/cassandra/dist/apache-cassandra-0.7.0-beta1$ bin/cassandra-cli<br />Welcome to cassandra CLI.<br />Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.<br />[default@unknown] connect localhost/9160<br />Connected to: "Test Cluster" on localhost/9160<br />[default@unknown]<br />간략하게 클라이언트를 시작하고 특정서버에 호스트와 포트 등 파라미터를 넘겨줌으로써 연결할 수 있다. 다음과 같다.<br />eben@morpheus:~/books/cassandra/dist/apache-cassandra-0.7.0-beta1$ bin/<br />cassandra-cli localhost/9160<br />Welcome to cassandra CLI.<br />Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.<br />[default@unknown]<br />CLI가 Test Cluster라는 카산드라 서버에 연결되었다고 보여준다. localhost라는 한 개의 노드가 있는 클러스터가 디폴트로 설정되어 있기 때문이다.<br /><br />2.5.3. 환경을 기술하기<br /><br />Test Cluster라는 카산드라에 접속하고 바이너리 배포판을 사용한다면 비어있는 keyspace 나 카산드라 데이터베이스가 테스트하기 위해 설정되어 있을 것이다.<br />현재 사용중인 클러스터의 이름을 보고싶다면 다음과 같이 타이프한다.<br />[default@unknown] show cluster name<br />Test Cluster<br />클러스터에서 어떤 keyspace가 쓸 수 있는지 보려면 다음을 친다.<br />[default@unknown] show keyspaces<br />system<br />만약 당신이 당신만의 keyspace를 만들었다면 그것도 역시 보여질 것이다. System keyspace는 카산드라에 의해서 내부적으로 쓰여질 것이고 우리가 데이터를 쓸수는 없다. Microsoft SQL 서버의 마스터와 임시 데이터베이스와 같다. 이 keyspace는 스키마 정의를 담고있고 런타임시에 수정되는 스키마에 대한 모든 사항을 알고 있다. 이것은 타임스탬프에 따라 한 개의 노드에 만들어진 변경사항을 클러스터 전체에 알려지게 한다. 당신이 사용하는 API의 버전을 보기위해서는 다음과 같이 타이핑한다.<br />[default@Keyspace1] show api version<br />10.0.0<br />실험해 볼 다른 명령어 들도 있다. 지금은 데이터베이스에 데이터를 추가해보고 다시 얻어보자.<br /><br />2.5.4. Keyspace 와 컬럼군을 만들기<br /><br />카산드라의 keyspace는 관계형 데이터베이스와 유사하다. 한 개나 두개의 컬럼군을 정의하여 관계형 세상에서와 대강 유사한 테이블을 만든다. 당신이 특별한 keyspace를 설정하지 않고 CLI 클라이언트를 시작하면 출력은 다음과 같을 것이다.<br />>bin/cassandra-cli --host localhost --port 9160<br />Starting Cassandra Client<br />Connected to: "Test Cluster" on localhost/9160<br />Welcome to cassandra CLI.<br />Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.<br />[default@unknown]<br />당신이 키스페이스와 특정 사용자를 정의하지 않았기 때문에 쉘 프롬프트는 default@unknown 이다. (6장에서 방법을 살펴볼 것이다.)<br />우리의 keyspace를 만들어보자.<br />[default@unknown] create keyspace MyKeyspace with replication_factor=1<br />ab67bad0-ae2c-11df-b642-e700f669bcfc<br />replication_factor에 대해서는 현재로서는 신경을 쓰지 말자. 그것은 차후에 자세히 볼 사항에 대해서 설정한다. 당신의 keyspace를 만든후에 쉘에서 다음을 타이핑하여 전환할 수 있다.<br />[default@unknown] use MyKeyspace<br />Authenticated to keyspace: MyKeyspace<br />[default@MyKeyspace]<br />MyKeyspace는 어떤 크리덴셜을 필요로 하지 않으므로 이것을 사용할 수 있게 인증되어 있는 상태이다.<br />우리는 이제 우리의 keyspace에 컬럼군을 만들수 있다. CLI에서 이것을 하기위해 아래의 명령을 사용한다.<br />[default@MyKeyspace] create column family User<br />991590d3-ae2e-11df-b642-e700f669bcfc<br />[default@MyKeyspace]<br />이것은 User 라는 컬럼군을 우리의 keyspace에 만든다. 그리고 컬럼군 셋팅의 디폴트값을 갖는다. 우리는 CLI에서 describe keyspace 명령을 통해서 keyspace 정보를 보고 우리가 원하는 keyspace를 가지고 있는지 본다. 다음과 같다.<br />[default@MyKeyspace] describe keyspace MyKeyspace<br />Keyspace: MyKeyspace<br />Column Family Name: User<br />Column Family Type: Standard<br />Column Sorted By: org.apache.cassandra.db.marshal.BytesType<br />flush period: null minutes<br />------<br />[default@MyKeyspace]<br />Type, Sorted By, flush period 에 대해서는 이후에 본다. 당장은 시작하는데 충분하다.<br /><br />2.5.5. 데이터를 쓰고 읽기<br /><br />이제 keyspace와 컬럼군을 가지고 있다. 이제 데이터를 쓰고 다시 읽어보겠다. 현재 여기서는 어떻게 되어가는지 자세히 알 필요는 없다. 카산드라의 데이터 모델에 관해서는 차후에 살펴본다. 당신은 현재 컬럼군을 가진 keyspace(데이터베이스) 를 가지고 있다. 여기서는 컬럼군을 다차원의 지도와 같이 생각하고 미리 정의할 필요는 없다. 컬럼군은 컬럼을 가지고 있고 컬럼은 데이터 저장할 수 있는 한 개의 유닛이다.<br />어떤 값을 쓰기위해서 set 명령을 사용한다.<br />[default@MyKeyspace] set User['ehewitt']['fname']='Eben'<br />Value inserted.<br />[default@MyKeyspace] set User['ehewitt']['email']='me@example.com'<br />Value inserted.<br />[default@MyKeyspace]<br />여기 ehewitt 라는 키를 위한 두 개의 컬럼을 만들었다. 컬럼의 이름은 fname과 email이다. Count 명령을 사용하여 한 개의 키에 두개의 컬럼을 썼는지 볼수 있다.<br />[default@MyKeyspace] count User['ehewitt']<br />2 columns<br />Get 명령을 사용하여 데이터를 읽어보자.<br />[default@MyKeyspace] get User['ehewitt']<br />=> (column=666e616d65, value=Eben, timestamp=1282510290343000)<br />=> (column=656d61696c, value=me@example.com, timestamp=1282510313429000)<br />Returned 2 results.<br />Del 명령을 사용하여 컬럼을 지울수도 있다. 여기서 ehewitt의 email 컬럼을 지워본다.<br />[default@MyKeyspace] del User['ehewitt']['email']<br />column removed.<br />여기서는 모든 로우를 지워본다. 명령은 같지만 컬럼 이름을 지정하지 않는다.<br />[default@MyKeyspace] del User['ehewitt']<br />row removed.<br />지워진 것을 확인하기 위해서 다음과 같이 쿼리해볼수 있다.<br />[default@Keyspace1] get User['ehewitt']<br />Returned 0 results.Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-32231553197559137692011-06-20T01:50:00.000-07:002011-06-20T01:52:01.334-07:00Cassandra (1/12)1. Cassandra의 소개<br /><br />본 문서의 목적은 개발자들과 데이터 베이스 관리자들이 새로운 데이터 베이스의 중요성을 이해하고 기존 관계형 데이터 베이스와의 차이점을 이해하여 각자의 환경에서 최대한 유용하게 이용할 수 있도록 하는 것이다.<br /><br />1.1. 관계형 데이터 베이스의 문제점은 무엇인가?<br /><br />어떤 데이터 모델을 고려해보자. TCP/IP 인터페이스에 의해 접근 가능하고 자바와 웹 서비스 등 다양한 언어가 사용가능하다. 이 모델은 처음에는 가장 출중한 컴퓨터 싸이언티스트들에게도 이해하기 어려웠지만 점점 더 넓은 분야에 적용되면서 개념이 더 분명해졌다. 이 모델에 데이터 베이스를 사용하기위해서는 새로운 용어들을 배우고 데이터 저장소에 대한 다른 생각들이 필요했다. 하지만 이것에 의해 생산물이 많아질수록 더 많은 비즈니스와 정부 에이전시들이 이것을 더욱 빠르고 많이 사용하게 되었다. 이에 따른 세입도 매우 많아졌다.<br />그리고 나서 새로운 모델이 나타났다.<br />새로운 모델은 두가지 이유에서 위협적이었다. 첫째로, 새로운 모델은 논란을 불러일으킬 만큼 이전의 모델과는 매우 달랐다. 다르고 새로운 것을 이해한다는 것은 어렵기 때문에 위협적이었던 것이다. 토론이 잇따랐지만 기존에 사람들이 일하던 환경에서 배우던 기술들과 관점에 더욱 고착화 될 뿐이었다. 둘째로, 아마 더욱 중요한 것은 기존 모델에서 비즈니스들은 많은 투자를 하였고 이미 많은 수익을 얻고 있었기 때문에 새로운 모델은 위협이 될 수 있었다. 새로운 방식으로 바꾸는 것은 좀 우습거나 아예 불가능해 보였다.<br />나는 IMS (Information Management System) 에 관하여 말하고 있다. 이는 1966년 IBM에 의해 고안되었다.<br />IMS는 Saturn V 라는 달탐사 로켓에 사용되었다. Vern Watts 라는 사람이 이것을 설계하는데 모든 것을 바쳤다. 우리는 IBM의 데이터베이스 DB2에 익숙하다. IBM의 유명한 DB2 데이터 베이스는 IMS의 계층적인 데이터모델에 기반한 DB1의 후계자로 유명하다. IMS는 1968년 Customer Information Control System (CICS)과 다른 애플리케이션들의 성공에 기반하여 나타났다. 그리고 현재까지도 아직 이용되고 있다.<br />그리고 그 이듬해 나타난 것이 새롭고 위협적인 관계형 데이터베이스이다.<br />IBM의 Edgar F. Codd 박사는 산호세 연구소에 일하면서 관계형 데이터 모델을 논문 “다수의 공통된 데이터 열과 관계형 데이터 모델” 이라는 논문을 통해 발전시켰다. 이 논문은 http://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf 에서 볼 수 있으며 관계형 데이터베이스 관리 시스템의 기본이되고 있다.<br />Codd의 업적은 IMS의 계층화된 구조와 상반되는 것이었다. 관계형 데이터 베이스를 이해하고 그에 대하여 일하는 것은 IMS사용자들에게는 새로운 용어들을 배우고 매우 친숙하지 않은 것들과 익숙해져야 하는 일이었다. 그것은 이전것에 비하여 어떤 장점들을 가지고 있었다.<br />이 아이디어들과 애플리케이션은 이후 40년 동안 발전하면서 관계형 데이터베이스는 현재 역사상 가장 성공적인 소프트웨어 어플리케이션으로 평가받고 있다. 한 회사의 소유권있는 소프트웨어로는 Microsoft의 Access 형태로도 쓰이고 있고 그 외 정말 수 테라바이트의 데이터를 다루는 곳에도 각 나라에서 쓰이고 있다. 관계형 데이터베이스는 인보이스, 고객의 기록, 제품 카탈로그, 등등 세계전체를 저장하고 있다. 관계형 데이터베이스가 현대 기술과 비즈니스 영역에서 핵심적인 역할을 할 것이라는 것은 의심의 여지가 없다. 관계형 모델은 IMS에 대하여 각각 그 대치되는 점을 가지고 있고 각각 쓰임새가 있었다.<br />그래서 “관계형 데이터베이스의 문제점은 무엇인가?” 라는 질문에 대한 짧은 대답은 “없다”일것이다.<br />하지만 여기서 고려해보고자 하는 긴 대답은 있다. 이 대답은 모든 표면적으로는 모든 것을 변화시킨다는 점에서 좀 더 긴 관점으로 보고자 한다. 그리고 한편으로는 이러한 변화 혁명들이 구조적인 관점에서 비즈니스의 역사에서 흔한 것이라고 볼 수 있다. IMS, RDBMS, NoSQL. 말, 고양이, 비행기. 각각은 이전의 뭔가에 더해서 만들어졌고 각각의 문제점을 해결하고 있으며 각각 어떤 점에서는 장점이 있고 어떤점에서는 그렇지 못하다. 현재까지도 모두 공존하고 있다.<br />여기서 우리는 Codd가 사십년전에 Information Management System 에 대해 그랬던 것처럼 현재 한 번 관계형 데이터 베이스의 대체될 만한 방안을 생각해 본다면 그것으로 의미가 있을 것이다.<br />우리는 관계형 애플리케이션이 더 성공적이고 많이 쓰일수록 확장성 문제를 당면하게 된다. 데이터베이스가 일관성을 얻는 방법은 일정부분을 락킹함으로써 다른 클라이언트에게는 해당부분이 유휴하지 않게하는 트랜잭션을 사용함으로써이다. 여기서 락이라함은 사용자가 데이터를 읽고 쓰기등을 하기위해 차례를 기다려야하는 것을 의미하므로 큰 사용자 로드가 있있을 때는 문제가 있기는 하다.<br />일반적으로 그 문제점을 아래와 같이 정리한다.<br /> 메모리 추가, 프로세서 추가, 디스트 업그레이드 등의 문제에 대하여 하드웨어를 던져버려라. 이것은 vertical scaling 이라는 이름으로 알려져있다.<br /> 문제가 다시 발생했을 때 해답은 거의 비슷한 것 같다. 한 개의 데이터베이스 클러스터의 장비가 꽉 찼으니 더 추가한다. 일반적 사용이나 대체 작동의 시나리오에서 데이터 복제와 일관성의 문제가 있을 수 있다. 당신이 이전에는 가지고 있지 않던 문제이다.<br /> 이제 데이터베이스 관리시스템의 설정을 업데이트해야 한다. 기반이 되는 파일 시스템에 쓰기 동작을 하기 위한 데이터 베이스 채널을 최적화하는 것을 의미한다. 자주 유용하지 않은 로깅이나 저널링을 끈다.<br /> 데이터 베이스 시스템에 대한 것 외에 애플리케이션 쪽에도 눈을 돌려본다. 인덱스들을 더욱 개선하기 위해 노력한다. 쿼리를 최적화 한다. 이때 아마도 짐작컨대 인덱스나 쿼리 최적화에 대해서 모르지는 않는다. 그래서 데이터 접근 코드에서 세밀한 튜닝을 하기 위한 기회를 발견하는 것은 고통스런 작업이 된다. 자원이 드는 저장 프로시저의 XML 처리 등 연결을 줄이고 재조합하는 과정을 포함할 수 있다. 물론 짐작컨대 우리는 이유가 있어서 XML 을 사용할 것이고 어디선가 그것을 더 사용해야 한다면 그 문제를 다른 것들을 망치지 않고 애플리케이션 레이어에서 해결할 수 있기를 바랄것이다.<br /> 우리는 캐싱 레이어를 사용한다. 좀 더 큰 시스템에서 이는 memcached, EHCache, Oracle Coherence 나 다른 관련 제품들과 같은 분산 캐시를 포함한다. 이는 각 클러스터에서 더 악화된 캐시상의 업데이트, 데이터 베이스상의 업데이트 사이의 일관성 문제를 일으킨다.<br /> 이제 어떤 데이터들이 이 데이터들을 접근하는 어떤 쿼리들과 더 비슷하게 보이도록 하는것과 애플리케이션과 쿼리의 경로를 결정하도록 데이터 베이스에 관심을 가져보자. 비정규화라고 불리는 이 프로세스는 관계형 모델을 정의하는 다섯가지 정규 폼과 Codd의 관계형 데이터에 관한 12가지 법칙에 위배된다. 우리는 더 이상 순수하지 않더라도 우리는 어떤 이론적인 클라우드 상에 살지 않고 우리가 받아들일 만한 레벨에서 애플리케이션이 다시 응답하도록 만들기 위해 현실 세계 상에 산다는 것을 상기해야 한다.<br />이것은 당신에게 좀 친숙하게 들릴것이라고 예상한다. 웹 스케일 상에서 엔지니어들은 이것이 단지 더 빠른 말에 대한 Henry Ford의 문제와 비슷한 문제인지 아닌지 고민하기 시작했다. 그리고 그들은 좀 인상적이고 흥미로운 일들을 해냈다.<br />우리는 여기서 관계형 모델은 단지 하나의 모델이라는 것을 유념해야 한다. 어떤 문제를 해결하기 위해 세상을 바라보는 한 개의 유용한 관점일 뿐이다. 데이터를 표현하기 위한 유일한 방법인 것은 아니다. 역사를 돌리켜보면 Codd 박사의 모델도 그 시대에는 방해되는 것이었을 뿐이다. “tuples” 같은 새로운 용어를 쓰며 기존의 익숙한 용어도 새로운 방법으로 쓰였다. 관계형 모델은 의심속에서 가치를 깎아내리는 사람들에게 공격받았다. Codd 박사의 고용자인 IBM 자체도 IMS 관련하여 이미 이득을 보고 있었기 때문에 새로운 건방진 놈의 출현을 원치 않았던 것이다.<br />하지만 관계형 모델은 이제 주장하건대 데이터 세상에서 가장 좋은 위치를 차지하고 있다. SQL은 폭넓게 지원되고 잘 이해되고 있다. 대학교의 소개 강좌에서도 가르쳐지고 있다. 월 $4.95의 호스팅 요금만 내면 인스톨되어 사용할 수 있게 제공되는 공짜 데이터베이스도 있다. 우리가 사용한 데이터베이스는 종종 우리에게 우리 기관내의 구조적 표준에 의해 기술되어 종용된다. 그러한 표준이 없더라도 우리 기관들이 데이터베이스 플랫폼에 어떠한 것을 가지고 있는지 배우는 것이 현명한 일이다. 우리가 개발이나 인트라스트럭처에 가지고 있는 동료들도 상당히 어렵게 얻는 지식원이다. <br />관성이나 타성에 의하지 않더라도 우리는 몇 년이 지나면 관계형 데이터베이스가 모든 것을 해결해주는 솔루션이라는 것을 알게된다.<br />그러므로 우리가 진짜 질문해야 하는 질문은 “관계형 데이터가 무엇이 문제인가?” 가 아니라 “어떤 문제를 가졌는가?” 이다.<br />우리는 우리가 가진 문제에 대하여 적당한 솔루션을 찾았다는 사실을 확인하고 싶다.<br />관계형 데이터베이스가 잘 해결할수 있는 문제들이 있다. 카산드라 시스템과 같은 비교적 복잡한 시스템에서도 유연한 확장성이 문제가 되는 것은 아닐수도 있다. 어떤 카산드라의 지지자도 그동안 관계형 데이터에 대하여 배웠던 모든 것을 던져버리고 열심히 얻는 그동안의 시스템 관련 지식들을 위협에 처하게 하지는 않는다.<br />관계형 데이터는 모든 개발자들과 DBA를 지원한다. 그러나 웹의 폭발, 특히 소셜 네트워크의 폭발은 우리가 거기에 해당 하는 어떤 데이터 볼륨들을 다뤄야 한다는 것을 의미한다. 맨 처음 Tim Berners-Lee가 1990년에 웹을 창안할때는 물리 실험실안에서 박사들이 과학 문서를 교환하는 목적이었다. 지금은 물론 모든 사람들이 사용할만큼 웹은 유비쿼터스 해졌다. 그것은 일정부분은 방대한 양의 데이터를 지원해야한다는 것을 의미한다.<br />그러나 일부 인프라스트럭처는 무게를 버티지 못하기 시작한다.<br />1966년, IBM과 같은 회사는 사람들에게 자신들의 개혁을 듣게 하는 위치에 있었다. 그들은 문제를 가지고 있었고, 그것을 해결할 수 있는 브레인 파워를 가지고 있었다. 21세기의 두번째 10년차를 들어가는 이 시점에서 비슷한 개혁을 보기 시작했으며 그것은 Facebook, Twitter 같은 젊은 회사들에게서다.<br />그러므로 진짜 질문은 “어떤 문제를 가졌는가?” 가 아니라 “만약 데이터들이 문제가 아니라면 내가 무엇을 할수 있는가?”이다. 만약 여러분이 쉽게 수백 테라바이트의 데이터 선터에서 오류를 견디고 어려 데이터 센터에 이용가능 하며 일관성과 확장성을 선택한 한 가지 언어에서 가능하다고 하면, 아마 여러분은 그 정도의 확장성과 유용성은 필요없다고 할 것이다. 그리고 현재 상황에서 가장 필요로 하는 조건은 당신이 잘 알기 때문에 최선을 알 것이다.<br />지금 카산드라와 같은 비 관계형 데이터베이스를 당신에게 사용하도록 하려는 것은 아니다. 다만 카산드라가 어떤 일을 할수 있고 어떻게 작동하는지 등을 알려주려는 것이다. 오직 당신만이 당신의 데이터가 필요로 하는 것을 알수 있다. 지금 당신의 데이터 베이스를 재고려하라는 것은 아니다. 만약 그 데이터 잘 작동하지 않지만 않는다면. 당신의 데이터 베이스를 고려하라는 것이 아니라 당신의 조직을 고려하며 그 미래에 대한 희망과 문제들을 고려하라는 말이다. 만약 가능하다면 당신 비즈니스에 대해 더 많은 정보를 모으겠는가?<br />카산드라를 현재 당신의 환경에 어떻게 맞출지 묻지마라. 현재 당신이 당신이 가지고 있는 데이터 문제보다 어떤 다른 문제들을 가지고 싶은지 질문하라. 어떤 새로운 데이터들을 가지고 싶은가 질문하라. 당신의 조직에 관해서 어떤 점이 더 알고 이해하고 싶은가?<br /><br />1.2. 관계형 데이터베이스의 검토<br />당신이 이미 익숙하다고 해도 관계형 데이터 베이스의 기본 컨셉을 생각해보자. 이렇게함으로써 우리는 웹 스케일에서 필요한 매우 큰 분산 데이터 시스템 그리고 거기에 따라 생긴 트레이드 오프들에 대한 생각들을 고려할 수 있는 기본을 갖게 된다.<br /><br />1.2.1. RDBMS : 굉장한 것과 그렇지 않은 것들<br />지난 40년간 관계형 데이터베이스가 그렇게 인기가 많았던 많은 이유가 있다. 중요한 한가지는 기능이 많고 간단한 선언문을 사용하는 SQL이다. SQL은 1986년에 처음 공식적으로 ANSI 표준으로 채용되었다. 그 이후 Microsoft T-SQL, Oracle의 PL/SQL 과 같이 각 회사별 확장을 통해 더 많은 feature 들을 제공하였고 몇 번의 리비전이 있었다.<br />SQL은 여러가지 이유에서 파워풀하다. 사용자에게 insert, select, update, delete, truncate, merge 등의 데이터 명령을 사용하는 DML (Data Manipulation Language) 를 사용하여 복잡한 데이터 간의 관계도 표현할 수 있게 한다. 당신은 관계형 대수를 통하여 많은 기능도 수행할 수 있다. SQL 은 실행시 DDL(Data Definition Language)를 사용하여 문장 구조를 직접적으로 만들고 바꾸고 할 수도 있다. SQL은 또한 같은 문장을 사용하여 사용자나 사용자 그룹에게 권한을 주거나 삭제할 수도 있다.<br />SQL은 사용하기 쉽다. 기반 문법은 배우기 쉽고 SQL과 RDBMS는 개념적으로 볼 때 처음 시작하기 어렵지 않다. 새 개발자들도 쉽게 익힐 수 있다. 그리고 문법만이 쉬운 것이 아니라 당신의 데이터 베이스와 일할 수 있는 많은 직관적인 그래픽 툴도 제공한다.<br />어느 정도는 그것이 표준이라는 이유로, SQL을 통하여 많은 시스템과 RDBMS를 통합할 수 있다. 단지 원하는 애플리케이션 언어의 드라이버만 가지고 잘 동작할 수 있다. 만약 당신이 애플리케이션 언어를 바꾸기로 결정하거나 RDBMS 벤더를 바꾸기로 결심하면 비교적 쉽게 할 수 있다.<br /><br />1.2.2. 트랜잭션, ACID-ity, 그리고 두가지 단계의 커밋<br /><br />이미 언급된 기능들에 더하여 RDBMS와 SQL은 트랜잭션을 지원한다. 데이터베이스의 트랜잭션은 Jim Gray가 ACID 프로퍼티를 가진 “상태의 변화” 라고 했다. (http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf 를 보라). 트랜잭션의 핵심 기능은 수행중에 했던 모든 것을 ROLLBACK을 이용하여 되돌릴 수 있다는 점이다. <br />ACID 는 트랜잭션이 제대로 수행되었는지 판단 할 수 있는 요소들, Atomic, Consistent, Isolated, Durable의 약자이다.<br /> Atomic<br />Atimic은 어떤 문장이 수행되었을 때 한 트랜잭션 안의 모든 업데이트는 이 트랜잭션이 성공했다고 불려지기 위해서는 성공해야 하는 것처럼, 모두 혹은 아무것도 아닌 것을 의미한다. 일부분은 성공하고 일부분은 실패하는 업데이트는 없다. 예를 들면 ATM에서 돈을 전송하는 것이있다. 이것이 성공하면 한 계좌에서 돈이 줄어들고 다른 계좌에 돈이 추가 되어야 하는 것이다. 둘 다 성공해야지 나누어 지면 안된다.<br /> Consistent<br />Consistent 는 데이터가 한 올바른 상태에서 다른 올바른 상태로 이동하면서 읽는 사람은 다른 값을 보지 않는 것이다. 예를 들면 트랜잭션이 고객과 그 기록들을 지우려고 할 때 고객의 primary key를 참조하는 주문 정보를 빠뜨릴 수 없다. 그렇게하면 주문 기록을 읽으려 하는 누군가에게는 inconsistent 한 에러이다.<br /> Isolated<br />Isolated 는 트랜잭션이 동시에 일어나도 다른 것과 뒤얽히지 않는 것이다. 그러므로 어떤 두 개의 트랜잭션이 동시에 같은 데이터를 수정하려고 한다면, 하나는 다른 것이 끝날 때까지 기다리게 된다.<br /> Durable<br />트랜잭션이 성공하면 그 수정사항은 없어지지 않는다. 이는 또 다른 트랜잭션이 같은 데이터를 이후에 수정하면 안된다는 것은 아니다. 단지 이것은 쓰는 사람이 다음 트랜잭션을 할 때에 수정사항이 효력이 있다는 것을 장담할 뿐이다.<br /><br />겉으로 보면 이 사항들은 분명히 바람직한 것들로 보인다. 아마 어느 누구도 데이터 업데이트가 일정 시간동안 다른 사람들이 읽을 수 있도록 견뎌야 하지 않는다고 하지 않을 것이다. 그러나 좀 더 정교하게 관찰한다면 이 프로퍼티를 좀 더 조정하고 컨트롤 하고 싶게 만들것이다. 그리고 무엇보다 인터넷에 공짜는 없고 트랜잭션을 하기 위해 우리가 치르는 대가를 생각한다면 대신할 무엇이 없는지 궁금해질 것이다.<br />트랜잭션은 로드가 커지면 좀 어려워진다. 뭔가 한곳에서 한 데이터베이스에서 일어나는 것이 아니고 여러 개의 시스템에서 일어나는 분산된 트랜잭션을 관계형 데이터베이스에서 실행하려고 하면 분산 트랜잭션이 무엇인지 설명해야 할것이다. ACID 라는 프로퍼티를 트랜잭션에서 계속 추구하려면 여러 개의 노드에서 작동하도록 트랜잭션 매니저가 필요할 것이다.<br />여러 개의 호스트에서 잘 작동하도록 하려면 두 단계에 나누어 커밋 (일반적으로 2PC라고 불린다.) 이 필요해진다. 그러나 2PC가 관련된 리소스를 모두 점거하기 때문에 빠른 작동이 필요하다. 일초안에 모든 분산 동작이 끝나기도 하지만 항상 그런 것은 아니다. 어떤 유즈 케이스에서는 여러분이 직접 작동시키지 않는 여러 개의 호스트간의 협업이 필요하다. 여러개의 협업이 필요한 일은 때로는 시간이 걸리기도 한다.<br />두 단계의 커밋은 멈춘다. 다시 말하면 클라이언트 이전의 트랜잭션이 어떤 자원을 점거하다가 동작을 다하여 반환할때까지 기다려야 하는 것을 말한다. 프로토콜은 죽더라도 노드가 대답할 때까지 기다린다. 트랜잭션 협업 노드에서 타임아웃을 셋팅하여 이것이 더 이상 대답을 안할것이라는 것을 판단할 수는 있다. 그러나 2PC에서는 아직도 무한 루프가 있을 수 있는데 그 이유는 협업 노드에게 트랜잭션을 커밋해도 좋다는 메시지를 보낼 수 있기 때문이다. 그러면 노드는 대답을 보내도록 기다린다. 만약 협업자가 다운되면 이 시나리오에서 노드는 계속 영원히 기다리게 된다. <br />그래서 이 단점을 해결하기 위해 데이터 베이스 세계는 compensation 이라는 아이디어를 내었다. Compensation 이란 간단히 말해서 웹 서비스에서 어떤 동작이 커밋되어 에러가 발생하면 새로운 동작이 실행되어 올바른 상태로 복귀시키는 것이다.<br />두 단계의 커밋에 대해 대체 될 수 있는 방법으로 고려되어야 하는 몇 가지 기본이 있다. 이는 트랜잭션이 실패했을 때 에러있는 트랜잭션을 없애고 후에 복구하기 위해 그것을 써내려가는 것을 포함한다. 다른 방법은 통보를 받고 실패한 동작을 이후에 다시 시도하는 것이다. 예약 시스템이나 주식 판매 틱커에서는 이것이 당신의 요구사항을 만족시키지는 못할 것이다. 티켓 판매나 다른 애플리케이션에서는 이것이 받아들일 만 하다.<br />2PC가 애플리케이션 개발자에게 일으키는 문제점은 부분적 실표시에 큰 latency와 availability의 상실이다. 둘 다 모두 바람직하지는 않다. 그래서 한 기계에서 성공을 볼 만큼 운이 좋았다면 다음으로 여러 대의 기계를 다루고 ACID 프로퍼티를 적용할 수 있도록 해보아야 한다. 당신이 10 혹은 100 혹은 1000대의 데이터베이스 기계를 가지고 있다고 해도, 일관성은 한 노드에서 일하고 있는 것처럼 필요하다. 하지만 쉬운 문제는 아니다.<br /><br />1.2.3. 스키마<br /><br />관계형 데이터베이스에 대해 자주 아주 좋은 평가를 받는 것이 그것이 지원하는 풍부한 스키마이다. 당신의 도메인 오브젝트를 관계형 모델로 표현할수 있다. Data Modeler 의 CA ERW 같은 비싼 도구들이 이런 노력을 도와줄 수 있다. 잘 정규화된 스키마를 만들기 위해서 도메인에 존재하지 않던 비즈니스 오브젝트의 테이블들을 만들어야 한다. 예를 들면, 대학교의 데이터베이스는 학생 테이블과 수강목록 테이블 등을 필요로 한다. 그러나 동시에 한 학생이 여러 수강을 하는것도 가능하고 한 수강과목이 여러 학생을 가지고 있을 수 있는 상황 때문에 join 테이블을 만들어야 한다. 이것은 처음에 학생과 수강목록만 가지고 있으려 했던 모델을 변하게 한다. 이 테이블들에 동시에 join 하기 위해서 더 복잡한 SQL 구문을 만들수 밖에 없다. 그래서 join 구문은 더 느려질 수 있다.<br />적당한 크기의 시스템에서는 이것은 큰 문제가 되지는 않는다. 그러나 복잡한 쿼리와 다수개의 join은 많은 테이블에서 많은 열을 다루다보면 좀 부담스러울 만큼 느려질 수 있다.<br />모든 관계형 모델이 이 스키마에 다 잘 들어 맞지는 않는다. 지난 10년 동안 좀 인기가 있었던 것은 매우 빠른 스트림에서도 상태 변화를 잘 나타낸 복잡한 이벤트 프로세싱 시스템이다. 어떤 비즈니스 결정을 가능하게 하기위해 관계된 이벤트들 끼리 맥락화 하는 것은 유용하기도 하다. 이벤트 스트림들을 관계형 데이터 베이스의 용어들로 표현할 수도 있지만 이것은 좀 불편한 동작이다.<br />그리고 만약 당신이 애플리케이션 개발자라면 애플리케이션 오브젝트를 관계형 모델에 매핑하는 많은 ORM 프레임워크와 익숙할 것이다. 작은 시스템에서는 ORM은 아주 유용하다. 하지만 그 자체로서 메모리 확장 필요성이나 여러 가지 매핑코드를 확장해야 하는 애플리케이션 등 그 나름대로의 문제점들은 가지고 있다. 여기 하이버네이트를 사용하여 SQL 코드를 쓰는 방안을 더 쉽게 하는 자바 코드가 있다.<br />@CollectionOfElements<br />@JoinTable(name="store_description",<br />joinColumns = @JoinColumn(name="store_code"))<br />@MapKey(columns={@Column(name="for_store",length=3)})<br />@Column(name="description")<br />private Map<String, String> getMap() {<br />return this.map;<br />}<br />//... etc.<br /><br />물론, 서비스나 XML 기반 애플리케이션들의 확장문서들을 교환하는 것에 항상 관계형 데이터베이스에 매핑하는 것이 분명하지만은 않다. 이것은 문제를 악화시킨다.<br /><br />1.2.4. 아무것도 공유하지 않는 구조<br /><br />관계형 데이터베이스를 스케일하는 다른 방법은 당신의 구조를 조각화 하는 것이다. 다른 Web 2.0 애플리케이션과 같이 하루에 수천만 이상의 SQL 쿼리를 다루는 eBay 같은 곳에서 사용되어 좋은 효과를 보였다. 여기서 아이디어는 데이터를 쪼개서 분산시켜서 한 서버에서 모든 데이터를 다루거나 모든 데이터를 복사해서 각 시스템들에 모두 적재시키지는 않는것이다.<br />예를 들어 관계형 데이터베이스에서 큰 고객테이블을 생각하자. 만약 여러분이 메모리를 추가하고 더 빠른 하드드라이브를 장착하고 계속 성공적인 하여 고객들이 더 많아 졌다면 언젠가는 새 기계들을 추가하는 것을 고려해야 할것이다. 그래야 할 때 당신은 그냥 모든 데이터들을 복사하여 각 기계에 추가할 것인가? 아니면 대신 고객 테이블을 나누어 각각이 각자 자기의 데이터만 갖게 할 것인가? 그래서 클라이언트가 쿼리를 수행할 때 필요한 기계에만 로드가 걸리도록 , 즉 다른 기계에는 로드가 걸리지 않도록 한다.<br />이렇게 조각화 하기 위해서 당신은 기록들을 정렬하기 위해 좋은 키를 찾아야 한다. 예를 들어, 알파벳 글자에 맞추어 26대의 기계에 기록들을 나누어 담을 수 있다. 이것은 좋은 방법은 아닐 수 있다. Q, Z 와 같은 글자로 시작하는 고객 이름은 별로 없어서 J, M, S 등을 담은 기계들에 비해 그냥 놀고 있을 수 있는 것이다. 어떤 번호에 따라 즉 전화 번호, 아니면 멤버가 된 날짜, 고객이 살고 있는 주 이름 같은 것에 따라 조각화 할 수도 있다. 이것은 모두 당신이 어떤 데이터를 가지고 분산화 할 것인가에 달려있다.<br />여기 조각화 구조를 이루기 위한 세가지 법칙이 있다.<br />- 기능에 기반한 조각화<br />이것은 2006년 이래 eBay에서 Randy Shop에 의해 구별된 구조라는 이름으로 지원되어 점차 성숙한 접근 방법이다. 이것은 한 테이블에 있는 데이터들을 조각으로 나누는 것이 아니라, 별로 관련이 없는 것들을 별도의 데이터베이스에 들어가도록 나누는 것이다. 예를 들어, eBay에서는 고객에 관한 사항은 한 조각에 두고, 상품에 관한 것은 다른 곳에 두었다. 영화 관련 Flixster에서 영화 등급관련은 한곳에 커멘트는 다른곳에 두었다. 이 접근 방법은 깨끗하게 데이터 세그먼트를 나누기 위해 당신의 도메인을 잘 이해하는 것이 필요하다.<br />- 키에 기반한 조각화<br />이 접근 방법에서 당신은 데이터에서 그것을 바르게 분산시킬 수 있기 위하여 키를 찾아야 한다. 앞의 예제에서와 같이 한 알파벳의 관련 정보를 한 데이터 베이스에 저장하는 것이아니라 데이터 키의 해쉬를 사용해서 여러 개의 기계에 해쉬에 따라 저장을 한다. 여기서 시간 기반의 해쉬나 숫자값 기반 키를 찾아 해슁하는 것이 일반적이다.<br />- 룩업 테이블<br />이 접근 방법에서 클러스터상의 한 노드는 전화 번호부처럼 작동을 해서 내가 억세스하려는 데이터가 어느 노드에 있는지 찾아보게 된다. 이는 두 가지 단점을 가지고 있다. 첫째로 룩업 테이블을 들여다볼 때 마다 퍼포먼스 체크를 해야한다. 둘 째로, 룩업 테이블은 아예 실패하는 지점이 되거나 방해가 되는 지점이 된다는 것이다.<br /> 데이터 조각화 전략을 어떻게 사용하고 퍼포먼스도 향상시킬수 있는가 하는 것은 http://lsvp.wordpress.com/2008/06/20 을 참조한다.<br /><br />조각화는 당신의 전략에 따라서 수평적으로 스케일할 수 있게 해줄 뿐 아니라 더 세밀하게 특정한 조각에 파워를 실을 수 있는 능력을 배양한다.<br />조각화는 일종의 “아무것도 공유하지 않는” 데이터 베이스라고 할 수도 있다. 아무것도 공하지 않는 구조는 어떤 중앙집중화된 상태가 존재하지 않고 각 노드가 여러 시스템에 분산되어 존재한다. 이 용어는 1986년 버클리 대학에서 Michel Stonebraker가 쓴 “아무것도 공유하지 않는 케이스” 라는 논문에 처음 사용되었다.<br />아무것도 공유하지 않는 것은 최근에 Bigtable데이터 베이스나 MapReduce에서 아무것도 공유하지 않아 거의 무한하게 확장이 가능한 구조를 사용한 Google에 의해서 발전되었다. 카산드라 데이터베이스는 중앙의 제어장치나 마스터/슬레이브 구조가 있지 않아 모든 노드가 동등한 아무것도 공유하지 않은 구조이다.<br /> “The Case for Shared Nothing” 이라는 논문은 http://db.cs.berkeley.edu/papers/hpts85-nothing.pdf 에서 참조할 수 있다. 페이지 수가 많지는 않다. 카산드라가 사용하는 것과 같은 구조를 볼 수 있을 것이다.<br />MongoDB 는 또 각 노드간의 동등한 배분과 자동 조각화 능력을 제공한다. 이 비 관계형 데이터베이스들은 많은 능력을 제공한다. 자동으로 데이터 배분 등 기능을 하기 때문에 카산드라 서버를 이해하는 것이 도움이 된다.<br /><br />1.2.5. 요약<br />마지막 요약으로 관계형 데이터 베이스는 어떤 일정한 데이터 저장 문제를 해결하는 데는 유용하다. 그러나 종종 스케일 할때는 또 자신 나름대로 문제점들을 안고 있다. 애플리케이션과 데이터베이스에서 비정규화하는 데이터 즉 데이터의 여러 개 복사본을 저장하는 문제등을 해결할 수 있어야 한다. 거기에더해, 금방 문제가 되는 분산화된 트랜잭션 관련 문제도 해결할 방법을 찾아야 한다. 이 문제는 어떤 그리고 고가의 RDBMS에서 직접적으로 해결해 주지 않는다. <br />그리고 더 중요하게는 RDBMS의 몇몇 약점들이 있어서 스케일링 이슈를 위해서 기능,구조들이 필요하다. 그래서 NoSQL 해결책들이 더 많은 데이터베이스들을 다룰수 있도록 덜 무섭게 보인다.<br /><br />1.3. 웹 스케일<br /><br />타고난 디자인 때문에 RDBMS는 스케일하기가 쉽지않으며 웹을 고려사항에 넣었을 때도 쉽지 않다. 더 많은 데이터가 이용가능 해질수록 우리의 기관들은 고객들에게 가까운 시일 내에 더 많은 결정이나 다른 좋은 능력들을 고객에게 줄 수 있기 때문에 우리가 여기서 고려해야 할 것은 웹의 구조뿐 만이 아니다.<br />우리 모두는 웹이 성장하고 있다는 것을 안다. 하지만 IDC 논문 “확장하는 디지털 세상” 에서 제안하는 숫자들을 고려해보자. (완전한 논문은 http://www.emc.com/collateral/analyst-reports/expanding-digital-idc-white-paper.pdf 에서 볼 수 있다.)<br /> YouTube는 매일 1억개의 비디오를 서비스한다.<br /> Chevron 은 매일 2TB의 데이터를 소비한다.<br /> 2006년 인터넷 상의 데이터는 대략 166 exabyte 이다. 2010년, 그 수는 1000 exabyte에 달했다. Exabyte는 1 quintillion byte 즉, 1.1 백만 terabyte이다. 이 숫자들을 좀 현실에 와닿게 보려고 다시 이야기하면, 1EB는 대략 DVD 화질 비디오를 50000 년 동안보여준 데이터양이다. 166EB 는 대략 여태까지 쓰여진 모든 책들의 정보내용에 300만 배정도 한 것이다.<br /> 월 마트의 고객 트랜잭션데이터는 2000년 현재110 테라바이트 정도 데이터베이스에 쓰여졌다고 말해진다. 이는 하루에 수천만 트랜잭션이다. 2004년까지 이는 patebyte의 반까지 성장했다.<br /> 영화 Avatar는 1PB의 저장 공간을 필요로 했다. 만약 MP3 하나가 32년간 플레이될 길이라면 이와 비슷한 용량이다.<br /> 2010년 3월, 구글은 100,000 개의 인터넷 기능을 기본으로 가지고 있는 안드로이드 폰을 생산한다.<br /> 이메일 계정은 1998년 현재, 약 2억 5천 3백만개 이다. 2010년 까지 이 숫자는 20억에 가까워 질 것이다.<br />당신이 볼 수 있듯이 저장되고, 처리되고, 쿼리 되어야 할 데이터의 종류는 그것을 사용하는 비즈니스 만큼이나 다양해진다. 단지 소지점등에 익숙한 고객 데이터나 디지털 비디오 등만 생각하지 말고, 디지털 텔레비전과 폭발적 성장세의 이메일, 메시징, 모바일 폰, RFID, VOIP 등을 고려해보아라. 우리는 이제 지금 영화와 음악을 스트리밍 해주는 Blu-ray 플레이어도 가지고 있다. 우리가 단지 물리적인 소비자 매체 미디어 저장 공간과 그것을 제공하는 컨텐츠 회사 그리고 서드파티 비즈니스만 생각하지 않더라도 매우 확장가능한 데이터 해결책을 필요로 한다. 일반적인 비즈니스 애플리케이션 개발자나 데이터베이스 관리자를 고려해도 우리는 관계형 데이터베이스를 어떤 세계의 중심에 놓고 생각할 것이다. 그리고 어떤 회사내에서도 80%의 데이터가 구조화 되어 있지 않다는 사실에 놀라게 될 것이다.<br />카산드라와 같은 NoSQL 해결책이 지원하는 스케일의 종류가 여러분에게는 해당되지 않는다고 생각할 것이다. 당신이 카산드라가 해결해 줄만한 문제점을 가지고 있지는 않을 수 있다. 지금 당신에게 카산드라로 변경하는 길을 찾고 데이터가 현재 데이터베이스에 존재하는 방법에 대해 재고려할것을 요구하는 것은 아니다. 그것은 살펴보기 어려운 대가를 가진 힘든 일일 수도 있다. 지금 당신이 가지고 있는 애플리케이션에게 지금 현재의 데이터 베이스가 딱 맞는것이라고 생각하는 것은 매우 분석적인 일이다. 그러나 현재 보다 더 많은 데이터를 다루어야 한다면 데이터베이스에서 어떤 점을 찾겠는가? 그 질문은 내구성, 확장성, 큰 저장공간, 빠른 쓰기 등이 문제가 되지 않는다면 어떤 종류의 애플리케이션을 갖기를 원하는가 하는 것이 될 것이다. <br />현재 웹 스케일로 동작하고 미래를 바라보는 세상에서 아파치 카산드라는 좋은 대답중 일부가 될 것이다.<br /><br />1.4. 카산드라 상승 효과<br />할리우드의 극작가들과 소프트웨어 창업자들은 흔히 각자의 상승 효과를 가지라고 충고를 받는다. 이것은 그들의 상품이 무엇인지에 대한 명확하고 간결한 그리고 몇 분안에 배달가능한 요약이라고 할 수 있다. 카산드라는 당신이 매니저나 동료들에게 보여줄 수 있도록 흥미 진진한 이야기를 가지고 있다.<br /><br />1.4.1. 카산드라를 50 단어로 말하기<br />“아파치 카산드라는 그 분산화 디자인을 아마존 Dynamo에 두고 그 데이터 모델은 Google의 Bigtable에 둔 오픈 소스, 분산화된, 중앙집권화 되지 않은, 유연한게 확장가능한, 매우 유용하고, 오류에 적응성이 있으며, 일관적인, 컬럼화된 데이터베이스이다. 페이스북에서 시작되어 지금은 많은 유명한 사이트에 쓰이고 있다.” 정확히 50단어이다.<br />물론 당신이 당신의 상사에게 이것을 엘리베이터 같은 곳에서 중얼거렸다간 이상한 시선만 받을 것같다. 그래서 아래에서 중요점을 찬찬히 살펴보자.<br /><br />1.4.2. 분산화된 그리고 중앙집권적이지 않은<br /><br />카산드라는 사용자에게는 통합된 하나의 환경처럼 보이면서 여러 개의 기기에 분산화 되어서 작동한다. 사실 하나의 카산드라 노드를 실행시키는 데는 한가지 주의할 점이 있다. 그것을 할 수는 있으나 여러 개의 기기들이 카산드라를 실행시키는 이점을 알아야 한다. 그 디자인과 기본 코드는 여러 개의 기기에서 동작하도록 한 것 뿐만 아니라 여러 개의 데이터 센터에서 최적화된 퍼포먼스를 낼 수 있게 되어있다. 당신이 데이터를 클러스터의 어디에 쓰더라도 카산드라는 그것을 확실히 받아들이게 되어있다.<br />당신이 MySQL 이나 Bigtable 같은 다른 어떤 데이터 저장소를 스케일 하기 시작하더라도 어떤 노드는 다른 슬레이브로 설정된 노드들을 잘 조직화 하기 위해서 마스터 설정이 되어야 한다. 하지만 카산드라는 중앙화 되지 않은 서버라서 모든 노드가 동일하다. 어떤 카산드라 노드도 다른 것과 달리 자신을 집중화는 중앙 기기가 되지 않는다. 그 대신 카산드라는 살이있고 죽은 노드들을 리스팅하는 peer-to-peer 프로토콜 방식을 설정한다.<br />카산드라가 중앙화 되지 않았다는 말은 어떤 한 지점이 실패의 원인이 되지 않는다는 것이다. 모든 카산드라 노드들은 동일하게 작동한다. 이것은 서버 대칭화 라는 말로 표현되기도 한다. 모든 것들이 같은 동작을 하기 때문에 정의에 의해서 어떤 특별한 호스트가 MySQL이나 Bigtable 등등 처럼 마스터/슬레이브 셋팅을 하면서 조직화하는 활동을 하지는 않는다. <br />RDBMS와 같은 분산화된 데이터 해결책에서 당신은 퍼포먼스를 향상 시키고 동시에 일어나는 동작을 수행하기 위해서 여러 개의 기기에 데이터들을 복사하여 저장할 것이다. 이 동작은 마스터/슬레이브 관계를 통해서 이루어진다. 이 말은 모든 서버가 같은 방식으로 작동하지는 않는다는 말이다. 당신은 당신의 클러스터에서 한 서버는 마스터 한 서브는 슬레이브 관계로 설정하게 된다. 마스터는 데이터의 소스 역할을 하면서 일방향으로 데이터의 복사본을 동기화해야 하는 슬레이브 노드와 작동한다. 만약 마스터 노드가 오류를 일으키면 전체 데이터 베이스가 위험해진다. 중앙화 되지 않은 디자인은 그래서 카산드라의 핵심 기능이다. RDBMS 세계에서의 마스터/슬레이브 복사 동작을 이해하면서 MongoDB와 같은 NoSQL 데이터베이스들은 마스터/슬레이브 구조를 따라한다.<br />비중앙집중화는 그래서 두가지 장점을 가진다. 마스터/슬레이브 작동보다 더 간단하다. 모든 노드가 동일하기 때문에 작동시키고 유지하는 것이 더 쉽다. 그래서 특별한 지식이 필요하지 않다. 한 개를 설정하는 것이 50개를 설정하는 것과 크게 다르지 않기 때문이다. 지원하기 위해서 별다른 설정이 필요하지 않다. 게다가 마스터/슬레이브 설정에서는 마스터가 실패의 원인이 될 수 있다. 이것을 피하기 위해서 종종 복잡하게 여러 개의 마스터를 설정해야 한다. 카산드라에서는 모든 복사본이 동일하기 때문에 어떤 한 개 노드의 오류가 서비스 전체를 망치지는 않는다.<br />요약하면 카산드라는 분산화되고 비중앙화되어 있기 때문에 어떤 한 지점이 오류의 원인이 되지는 않고 높은 유용성을 보인다.<br /><br />1.4.3. 유연한 확장성<br /><br />확장성은 퍼포먼스에 큰 나쁜 영향이 없이 더 많은 수의 요청을 처리할 수 있도록 구조적으로 만들어진 시스템의 성능이다. 수직적인 확장성 – 단순히 더 많은 하드웨어와 메모리를 추가하는 것 – 이 가장 쉬운 방법이다. 수평적인 확장성은 모든 요청을 한 기기 받아들일 필요가 없도록 데이터의 전부나 일부를 복사하여 추가하는 것이다. 그러나 소프트웨어는 클러스터 안의 다른 노드들과 데이터들의 싱크를 맞추기 위해 내부적인 메커니즘을 가지고 있어야 한다.<br />유연한 확장성은 수평적 확장성의 한 특별한 성질로 불릴 수 있다. 당신의 클러스터가 끊김없이 확장하였다가 반대로 축소될 수도 있음을 의미한다. 이것은 중요한 장애나 전체 클러스터의 재설정없이 클러스터가 새로운 노드의 추가를 데이터의 일부나 전체 복사를 받아서 시작할 수 있어야 한다. 당신의 프로세스를 재 시작할 필요가 없다. 애플리케이션 쿼리를 변화할 필요가 없다. 수동적으로 데이터의 밸런스를 다시 맞출 필요도 없다. 그냥 새로운 기기를 추가하면 카산드라가 새기기를 발견하고 작동하도록 할 것이다. <br />축소한다는 것은 물론 당신의 클러스터에서 어떤 프로세싱 능력을 없애는 것을 의미한다. 당신이 당신의 애플리케이션의 일부를 다른 플랫폼으로 이동시키거나 당신의 애플리케이션이 사용자를 잃고 하드웨어를 없애버리는 일을 할 때 이것을 할 필요가 있을지 모른다. 이러한 상황이 발생하지 않기를 바라자. 그러나 만약 필요해 진다면 전체를 축소하도록 다 뒤집을 필요는 없다.<br /><br />1.4.4. 높은 사용성과 오류 내구성<br /><br />일반적으로 구조적인 용어에서 사용성이란 어떤 시스템이 요구에 부합하도록 하는 능력을 말한다. 하지만 컴퓨터는 하드웨어 컴포넌트의 오류에서부터 네트워크 상의 오류까지 여러가지 실패를 경험할 수 있다. 어떤 컴퓨터라도 이런 오류를 겪을 수 있다. 물론 어떤 정교하고 비교적 가격이 높은 컴퓨터는 이런 내부적인 하드웨어 적체나 오류로 인한 통보로 일부 컴포넌트를 교환해야 하는 경우도 있다. 그러나 어떤 천재지변적인 일이나 누구도 이더넷 케이블을 사고로 끊어먹거나 할 수 있고 이로인해 한 데이터 센터가 망가진다. 그래서 일반적으로 유용성이 높은 시스템은 네트워크 된 컴퓨터들에 의해 작동해야 하고 그 소프트웨어도 클러스터 상에 동작하여 오류도 보고 받을 수 있는 능력과 요청을 시스템의 다른 부분에서 수행할 수 있는 능력이 있어야 한다.<br />카산드라는 상당히 유용하다. 한 데이터 센터가 화재, 홍수 같은 재난을 당하더라도 다운 타임이 거의 없이 다수의 데이터 센터에 데이터를 복제하고 좋은 퍼포먼스를 낼 수 있다.<br /><br />1.4.5. 조정 가능한 일관성<br /><br />일관성이라 핵심적으로 읽는 동작이 가장 최근에 쓰여진 것을 읽는 것을 의미한다. 두 고객이 이 커머스 사이트에서 같은 아이템을 쇼핑 카트에 추가 하는 것을 고려해보자. 만약 어떤 사람이 한 물품을 카트에 추가한 후라면 나는 더 이상 그것이 가능하지 않다고 통보를 받아야 한다. 이것은 그 물품의 상태가 모든 노드에서 일관성이 있다면 꼭 일어나야 하는 동작이다. <br />하지만 공짜는 없고, 이것은 이후에 보게되겠지만 축소,확장 한다는 의미는 데이터의 일관성, 노드의 유용성, 파티션의 내구성 등과 같은 트레이드 오프가 있다. 카산드라는 약간 잘못 의미가 받아들여질수 있지만 결국에는 일관성이 있다고 불려진다. 카산드라는 전체적인 유용성을 보장하기 위하여 약간의 일관성을 희생시킨다. 하지만 카산드라는 좀 더 정확하게 말하면 조정가능한 일관성있다고 말해지는데 이것은 필요한 일관성의 정도를 유용성과 균형을 맞추어 조정할 수 있다는 것을 의미한다. <br />최종적으로 일관성이있다는 말은 문제가 있다. 어떤 사용자들은 최종적 일관성이 있는 시스템은 사용하기를 주저한다. <br />최종적 일관성을 깎아내리는 사람에게는 논란은 이런식으로 진행이 된다. 최종적 일관성은 데이터가 정말 중요하지는 않은 소셜 웹 애플리케이션에게는 좋을 수도 있다. 만약 Billy가 아침에 무엇을 먹었다 하는 정보를 엄마에게 보내는 것과 같은 동작은 그렇게 크게 중요하지 않을지도 모른다. 그렇지만 내가 가지고 있는 데이터는 중요하다. 그래서 최종 일관성을 나의 모델에서 제공하기만 한다는 것은 우스울수도 있는 말이다.<br />Amazon, Facebook, Google, Twitter 같은 모든 유명한 웹 상의 애플리케이션이 이 모델을 사용한다는 것을 별도로 두더라도 거기에는 무언가가 있다. 아마도 이러한 데이터들도 많은 사용자들과 많은 회사들이 사용한다면 이것은 그들의 주상품이기 때문에 중요할 것이다. 보장되고 바로 당장의 완벽한 일관성을 매우 트래픽이 많은 시스템상에서 병렬적으로 운영하며 가능하다고 해도 클라이언트는 그 결과를 원할수 있기 때문에 이것은 어려운 문제이다.<br />이를 깎아내리는 사람들은 카산드라와 같은 Big Data 데이터베이스들은 최종적 일관성만을 지원하며 다른 분산형 시스템들은 매우 치밀하고 완벽한 일관성을 제공한다고 주장한다. 그러나 세상에 있는 많은 것처럼 이것은 흑백논리로 설명되지는 않는다. 일관성에는 그대신 어느 정도의 단계를이 있으며 진짜 세계에서는 외부 환경에 매우 종속적이다.<br />최종적 일관성은 여러 개의 일관성에 관한 모델중의 하나일 뿐이다. 그래서 그 트레이드 오프를 이해하기 위해서는 이들을 살펴보자.<br />- 엄격한 일관성<br />이는 때때로 순차적인 일관성이라고 불리기도 하며 일관성의 정도중에 가장 엄격한 것이다. 모든 읽기 동작은 가장 최근에 쓰여진 것을 읽는다. 이것은 가장 완벽해보이고 가장 우리가 필요로 하는 것으로 보인다. 이것을 쓰고싶다. 하지만 좀더 세밀하게 들여다보면 어떤 점이 있을까? 가장 최근에 쓰여진 값이라는 점은 좀 더 분명하게 무엇을 의미하는가? 가장 최근에 누구에게? 하나의 프로세서가 있는 기기에서 한 클럭안에 벌어지는 일이어서 별로 문제되는 것은 없어보인다. 그러나 지형적으로 각각 멀리 떨어진 데이터 센터를 운영하는 시스템에서는 이것은 좀 다르다. 이것을 하려면 글로벌한 시계가 얼마나 많은 요청이 어떤 위치에서 얼마나 많은 대답을 원하면서 일어나더라도 모든 동작에 타임스탬프를 찍어야 한다. <br />- 인과관계의 일관성<br />이것은 엄격한 일관성의 조금 약한 형태이다. 이것은 한 개의 클럭이 마법적으로 모든 동작을 싱크하고 아무 장애도 일어나지 않는 환상을 그만둔다. 타임 스탬프에 <br />의존하는 대신 인과관계의 일관성은 의미론적인 접근 방법을 택하는데 그것은 어떤 이벤트의 원인을 결정하고 그것이 일관성의 순서를 정하는 것이다. 이것은 읽는 동작이 순서대로 일어난다는 것을 의미한다. 그래서 두 개의 전혀 상관이 없는 동작이 같은 필드에다가 쓰기를 한다면 인과관계상 관계가 없다는 것을 의미한다. 그러나 한 개의 쓰기 동작이 다른 쓰기 동작후에 일어난다면 인과관계상 관련이 있다고 본다. 인과관계의 일관성은 인과관계있는 쓰기동작은 반드시 읽기 동작도 순서대로 일어난다는 것을 의미한다.<br />- 약한 (최종적인) 일관성<br />최종적인 일관성은 표면적으로 모든 업데이트가 분산된 모든 시스템에서 퍼져나간다는 것을 의미한다. 그러나 그것이 좀 시간이 걸랄 수 있다는 것을 말한다. 최종적으로 모든 복사본은 일관성을 갖게된다.<br />일관성, 유용성, 파티션의 내구성을 분산 시스템에서 고려할 때 우리는 단지 두 개의 목표를 추구할 수 있다. (CAP 논리를 19페이지에서 살펴본다). 이 문제의 중심에는 데이터 업데이트의 복사가 있다. 엄격한 일관성을 보장하기 위해서 모든 업데이트는 동작이 복사본을 블락하고 락을 하며 싱크가 맞게 동작하며 각 클라이언트가 기다리게 한다. 이런 디자인의 사이드 이펙트는 오류 동안에 어떤 데이터는 완전히 접근할 수 없다는 것이다. Amazon CTO인 Werner Vogels 가 말했듯이 “대답이 확실치 않은 것을 다루는 대신 데이터는 완전한 대답을 얻을 때 까지는 접근 가능하지 않게 된다.” (Dynamo : 아마존의 매우 분산화된 핵심 가게 http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html, 207).<br />우리는 클라이언트 동작을 망치지 않기 위해 각 복사본으로 업데이트를 점차적으로 확대시키는 긍정적인 방법을 택할 수 있다. 여기서 좀 어려운점은 우리가 모든 충돌 같은 것들을 미리 탐지하고 해결해야 한다는데 있다. 이것은 디자인 접근 방법에 의해 우리가 이 충돌을 읽기 또는 쓰기 동작시에 해결해야 하는 점을 결정해야 한다. 이것은 분산화 데이터베이스의 디자인자가 시스템을 항상 읽기가능 혹은 쓰기가능하게 만들기 위해서 택해야 하는 방법이다. <br />Dynamo 와 카산드라는 항상 쓰기 가능한 방법을 선택했다. 퍼포먼스에 이득을 취하기 위해 읽기 동작은 뒤로 미루어준다. 또다른 방법으로는 네트워크나 서버에 오류가 있을 동안에는 업데이트 동작을 하지 않는것이다.<br />카산드라에서 일관성은 모두 가능하거나 아니면 아예 모두 실행하지 않는 옵션은 아니다. 그래서 클라이언트는 업데이트를 할지 말지 그 복사본의 숫자를 결정할수 있기 때문에 좀 더 정확하게는 “조절가능한 일관성” 이라고 명명한다. 이는 일관성의 레벨을 셋팅해서 정한다.<br />복사본 요소는 당신이 퍼포먼스를 얼마나 희생하며 일관성을 얻을 수 있는지 결정하게 해준다. 당신은 복사본 요소를 당신의 업데이트가 전달되기 원하는 클러스터 상의 노드의 갯수만큼 셋팅을 해주게된다.<br />일관성의 레벨은 클라이언트가 모든 동작에 반응하는 것과 얼마나 많은 복사본이 클러스터 안에서 쓰기와 읽기에 대한 반응을 성공적이라고 인식할 수 있도록 결정할 수있게 해준다. 그것이 카산드라가 클라이언트에 대한 일관성을 결정할 수 있게 해주는 곳이다.<br />그래서 당신이 원한다면 당신의 일관성 레벨을 복사본 요소에 맞추어 주거나 모든 노드가 블록되어서 싱크가 맞게 기다리더라도 일관성을 더 많이 얻게 할 수도 있다. 실제로 이것이 카산드라에서 많이 수행되는 방식은 아니다. 그래서 만약 클라이언트가 일관성 레벨을 복사본 요소보다 낮게 설정했을 경우 몇 개노드가 다운되더라도 업데이트는 성공적으로 보인다.<br /><br />1.4.6. Brewer의 CAP 이론<br /><br />우리가 카산드라의 디자인을 이해하고 최종적 일관성있는 데이터베이스라는 개념을 이해하려면 CAP 이론을 이해할 필요가 있다. CAP 이론은 때때로 그 저자인 Eric Brewer의 이름을 따서 Brewer의 이론이라고도 불린다.<br />버클리 대학에서 일하면서 Eric Brewer는 2000년 분산 컴퓨팅 이론에 대한 ACM 심포지움에서 CAP 이론을 내었다. 이 이론은 많은 수의 분산화 데이터 시스템에서 거기에는 일관성, 유용성, 파티션 내구성이라는 세가지 요구 사항이 있음을 말한다.<br />- Consistency<br />모든 데이터베이스 클라이언트는 같은 쿼리의 같이 일어나는 업데이트에서도 같은 값을 읽어야 한다.<br />- Availability<br />모든 데이터베이스 클라이언트는 항상 데이터를 읽고 쓸수 있어야 한다.<br />- Partition Tolerance<br />데이터베이스는 여러 개의 기기로 나누어 질수 있다. 네트웍상 나누어져서도 그 기능을 다할 수 있어야 한다.<br />Brewer의 이론은 어떤 주어진 시스템에서 이 세가지 중에서 두 가지는 강하게 지원을 한다. 이것은 소프트웨어 개발에 있어서 당신이 들어봤을만한 “잘 할수있거나, 빠르게 할수 있거나, 싸게 할 수 있거나, 이중에 두가지를 골라라” 라는 말과 비슷하다고 할 수 있다.<br />서로 간의 의존 관계 때문에 당신은 그 중에 선택을 해야 한다. 당신이 당신의 시스템에서 더 높은 일관성을 필요로 할수록 파티션 내구성은 당신이 유용성을 어느 정도 감수하면서 더 줄어들 수밖에 없다. <br />CAP 이론은 MIT의 Seth Gilbert과 Nancy Lynch 에 의해 그 후 옳다고 밝혀졌다. 그러나 분산 시스템에서 당신은 네트웍 파티션을 가지고 그것은 어떤 시점에서는 오류가 있고 다른 지점들간 통신을 못하도록 할것이다. 거의 피할 수 없는 패킷 손실도 있다. 이는 우리가 분산 시스템은 네트워크 파티션에서 제대로 동작하기 위해서는 최선을 다해야 한다는 결론에 도달하게 한고 이는 오직 유용성과 일관성이라는 두 가지 옵션만 고를 수 있게 만든다.<br />다음 그림은 세 가지 모두가 가능한 교차점은 없다는 것을 보여준다.<br /> <br />그림 1 1. CAP 이론은 이 중에 오직 한 번에는 두가지만 가능하다는 것을 보여줌<br /><br />CAP 스펙트럼에서 비관계형 데이터 저장소가 각각 어떻게 되어 있는지 보는 것이 유용할 수 있다. 그림 1-2는 MongoDB의 CEO이자 설립자인 Dwight Merriman의 2009년 뉴욕 강연에서 영향을 받았다. (http://bit.ly/7r6kRg에서 볼 수 있다.) 내 연구에따라서 조금 변경되었다. <br />그림 1-2는 여기에서 논하는 몇 가지 다른 데이터베이스들의 일반적인 중점 사항을 다루었다. 이 차트에서의 데이터베이스들의 위치는 설정에 따라서 바뀔 수 있다. Stu Hood가 지적했듯이 분산화된 MySQL 데이터베이스는 구글의 동기화 복사 팻치를 받아야만 일관성있는 시스템이라고 할 수 있다.<br />CAP 위치에 의한 시스템 디자인은 데이터 저장소 메커니즘의 근원에 독립적이라는 것도 흥미롭다. 예를 들면 CP 변은 그래프 데이터베이스와 문서 기반의 데이터베이스 양쪽에 기반하여 다양화 된다.<br /> <br />그림 1 2. 각각 다른 데이터베이스들이 CAP연속체 상에서 보여주는 모양<br />이 그림에서 관계형 데이터베이스는 일관성과 유용성 선의 사이에 있고 그것은 네트워크 오류가 있을 때는 실패할 수 있다는 것을 의미한다. <br />Neo4J 같은 그래프 데이터베이스는 그리고 MongoDB, HBase, Hypertable, Redis 같은 구글의 Bigtable 데이터베이스 디자인이 기반이 된 데이터베이스는 모두 유용성에는 조금 덜 그리고 일관성과 파티션 내구성에는 좀 더 무게를 두었다.<br />마지막으로 Amazon의 Dynamo의 디자인에 기반을 둔 것은 카산드라, Project Voldemort, CouchDB, Riak 이다. 이것들은 유용성과 파티션 내구성에 더 기반을 두었다. 그러나 이것은 Bigtable이 유용성을 무시했듯이 일관성을 중요하지 않게 처리한 것은 아니다. Bigtable의 관련 문서에 따르면 평균 적으로 어떤 데이터가 쓸 수 없게 되는 퍼센티지는 0.0047% 이다. 이것은 우리가 말한 대로 비교적 매우 강건한 시스템이다. <br />CAP 이 세가지에서 두가지만을 지원하는 것은 실제적으로 어떤 의미가 있을까?<br />- CA<br />주로 일관성과 유용성만을 지원하는 것은 분산화된 트랜잭션에서 두단계 커밋을 한다는 의미가 될 수 있다. 네트워크 파티션이 일어났을 때 시스템이 블록되는것을 의미하며 이것을 완화시키려 할 때 당신의 시스템은 한 개의 데이터 클러스터에 제한된다. 만약 당신의 애플리케이션이 이 정도의 스케일만을 원한다면 관리하기 쉽고 익숙하고 간단한 스트럭처에 의지할 수 있게 할 것이다.<br />- CP<br />주로 일관성과 파티션 내구성만을 지원하는 위해서는 당신의 아키텍처를 발전시키기 위해서 데이터 조각을 설정할 수 있다. 당신의 데이터는 일관적일 것이다. 그러나 어떤 노드가 실패하면 데이터 일부가 쓸수없게 되는 위험은 감수해야한다.<br />- AP<br />주로 유용성과 파티션 내구성을 지원하기 위해서 당신의 시스템은 가끔 정확하지 않은 데이터를 반환할 수 있다 하지만 네트워크 파티션이 일어나도 항상 시스템은 가용할 것이다. DNS 는 넓게 스케일가능하고, 유용성높고, 파티션 내구성이 있는 시스템의 예가 될 수 있다.<br />이 그림은 좀 더 폭넚게 이해하는데 도움을 주기 위함이므로 매우 정확하지는 않다. 예를 들어 이러한 연속체속에 구글 Bigtable이 어디에 속하는지 매우 확실하지는 않다. 구글의 논문 등에서는 Bigtable은 매우 유용성높은 것으로 묘사되지만 좀 비대한것으로 보여서 네트워크 이슈등에서는 가용하지 않게된다. 데이터 가독에 대해서는 논문에서 “우리는 같은 데이터의 많은 복사본에 대해서는 고려하지 않았다” 고 되어있다. 마지막으로 그 논문에서는 “중앙화된 컨트롤은 Bigtable의 목표는 아니다” 라고 되어있다. <br /><br />1.4.7. Row-Oriented<br /><br />카산드라는 흔히 “column-oriented” 한 데이터베이스라고 불려진다. 그것은 관계형적이지 않고 흔하지 않은 많은 차원의 해쉬테이블상 데이터 구조를 나타낸다. 흔하지 않다는 것은 어떤 주어진 row에 대해서 당신은 한 개나 그 이상개의 column을 가질 수 있다는 것을 의미한다. 하지만 관계형 모델처럼 모든 row가 같은 column을 가질 필요는 없다. 각 row는 고유한 key를 가지며 그것에 따라 데이터가 접근가능하게 한다. 그래서 column-oriented 되었다는 말이 카산드라에 틀리지는 않더라도 3장에서 더 자세히 보겠지만 인덱스된 row-oriented 저장소라고 생각하는 것이 도움이 된다. <br />카산드라는 다중 차원의 해쉬테이블과 같은 것에 데이터를 저장한다. 그것은 당신이 사전에 미리 데이터 구조가 어떻게 보일지 또 저장하기 위해 어떤 필드가 필요한지 결정하지 않아않 되는 것을 의미한다. 이것은 당신이 처음 시작하고 자주 데이터를 추가하고 바꾼다면 유용하다. 만약 당신이 애자일 개발 방법론을 사용하고 있다면 매력적으로 보일것이다. 만약 당신의 비즈니스가 변화하고 새로운 필드를 추가 또는 제거해야 한다면 카산드라가 그렇게 해줄것이다.<br />그것이 데이터에 대해 전혀 생각하지 않아도 된다는 것은 아니다. 반대로 카산드라는 그것에 대해 어떻게 생각하는 어떤 전환을 필요로 한다. RDBMS에서처럼 완전히 새로운 데이터 모델을 디자인하고 쿼리를 디자인하는 대신에 쿼리를 처음먼저 생각할수 있고 후에 데이터를 제공하면 된다.<br /><br />1.4.8. Schema-Free<br /><br />카산드라는 당신이 키스페이스라고 불리는 외부의 콘테이너를 정의하게 하고 그것은 컬럼 군을 포함하고 있다. 키스페이스는 컬럼군과 어떤 설정들을 가리키는 논리적인 공간일 뿐이다. 컬럼 군은 관련된 데이터들과 정렬방식의 이름이다. 당신은 데이터를 추가하면 되지 미리 컬럼을 정의할 필요는 없다. 비싼 데이터 모델링 툴로 데이터를 모델링하고 복잡한 쿼리를 정의하는 대신에 카산드라는 당신이 원하는 쿼리 모델을 묻고 그 데이터들을 제공할 것이다.<br /><br />1.4.9. 높은 퍼포먼스<br /><br />카산드라는 멀티프로세서 멀티코어 기기를 지원하고 이런 여러대의 기기에 만들어진 데이터 센터를 지원하기 위해 디자인 되어있다. 일관적이고 끊김없는 많은 테라바이트의 데이터를 다룬다. 카산드라는 큰 부하가 걸려도 잘 작동하는 것을 보여주었다. 일반적인 워크 스테이션에서도 초당 쓰기 속도의 매우 좋은 결과를 보여주었다. 당신이 더 서버를 추가할수록 퍼포먼스에 지장이 없이 더 좋은 카산드라의 성능을 즐기게 될 것이다.<br /><br />1.5. 카산드라는 어떻게 생기게 되었는가?<br /><br />카산드라 데이터 저장소는 아파치의 오픈 소스 프로젝트이며 http://cassandra.apache.org에서 참조할수 있다. 카산드라는 기존의 방법으로는 해결하기가 힘들었던 Facebook의 2007년 인박스 찾기에서부터 시작되었다. 특별히 팀은 메시지 복사 형태의 많은 양의 데이터를 다루고 많은 수의 무작위 읽기와 쓰기에 대한 요구사항이 있었다.<br />그 팀은 Jeff Hammerbacher에 의해서 Avinash Lakshman, Karthik Ranganathan 등 페이스북 엔지니어들과 검색 팀인 Prashant Malik 등 핵심 엔지니어들에 의해 리드되고 있었다. 그 코드는 구글 코드에 오픈 소스 프로젝트로 2008년 7월에 발표되었다. 처음에는 소수의 페이스북 엔지니어들에 의해서는 업데이트 되었다. 그러나 2009년 3월 아파치로 이동되었고 2010년 2월 17일 탑 레벨 프로젝트로 선정되었다.<br />Facebook의 Lakshman과 Malik에 의한 “비중앙화된 구조화 저장 시스템” 이라는 논문은 http://www.cs.cornell.edu/projects/ladis2009/papers/lakshman-ladis2009.pdf 에서 참조할 수 있다.<br />카산드라는 오늘날 어떤 일종의 역설을 나타낸다. 새롭고 급진적이지만 많은 표준과 전통적인 컴퓨터 과학과 컨셉에 의지하고 있다. 카산드라는 실현적인 종류의 데이터베이스이다. 관계형 데이터 모델을 무시하지는 않는다. 기존에 존재하던 툴들이 풀지 못하던 문제들을 해결하기 위해 창조되었다. 이전의 방법들의 제한점을 알고 더 큰 데이터들을 다루기 위해 나타났다.<br /> 카산드라라는 이름은 어떻게 생겼을까?<br />나는 사람들이 자주 이름이 어디서 온거냐고 묻는데 조금 놀란다. 이것은 내가 어떤 프로젝프로 들었을 때 처음으로 궁금해하던 사항은 아니다. 그러나 흥미롭다. 이 데이터베이스에서는 그것은 나름 의미가 있다.<br />그리스 신화에서 카산드라는 Troy의 Priam 왕과 Hecuba 여왕의 딸이다. 카산드라는 너무 아름다와서 Apollo신이 그녀에게 미래를 볼 수 있는 능력을 주었다. 하지만 그의 접근을 카산카산드 거부했을 때 신은 그녀에게 미래의 모든 것을 정확히 보더라도 아무도 그녀의 말을 믿지 않도록 저주를 내렸다. 카산드라는 트로이가 멸망하는 것을 보았으나 어쩔수가 없었다. 카산드라 분산 데이터베이스는 그녀의 이름을 땄다. 나는 추측컨대 Oracle의 Delphi도 다른 예언자의 이름을 따서 지었다고 생각한다.<br /><br />1.6. 카산드라의 유즈 케이스<br /><br />우리는 지금 카산드라의 장점에 대해서 이해하고 있다. 카산드라가 잘 디자인되고 기능이 많지만 모든 일에 대한 적당한 툴은 아니다. 그래서 여기서는 카산드라가 필요한 프로젝트는 어떤 것일지 알아보자.<br /><br />1.6.1. 많은 디플로이먼트<br /><br />당신의 드라이 크리닝을 픽업하기 위해 트럭을 몰아보지는 않았을 것이다. 트럭은 그런일에 적당하지 않다. 많은 세밀한 엔지니어링이 카산드라의 높은 유용성, 조절가능한 일관성, 프로토콜, 끊김없는 확장성 등 주요 장점에 집중했다. 이것들중 어떤 성질들도 한 개의 노드만 있는 곳에서는 의미가 없다.<br />그러나 한 개의 노드만 있는 관계형 데이터베이스가 우리가 필요로 하는 것인 상황도 있다. 그래서 우리가 필요로 하는 것을 미리 가늠해보자. 하지만 몇 개의 관계형 데이터베이스만 가지고도 우리가 원하는 것을 지원할 수 있다면 RDBMS가 한 개의 기기에서는 운영하기 더 좋고 더 익숙하여서 그것이 더 좋은 해결책일 수도 있는것이다.<br />만약 당신이 몇 개의 노드가 필요하다면 카산드라가 알맞을 것이다. 만약 애플리케이션이 많은 수의 노드를 필요로하면 카산드라는 더 좋은 방법이다.<br /><br />1.6.2. 많은 쓰기와 통계, 분석<br /><br />당신의 애플리케이션을 읽기 쓰기의 비율에서 생각해보자. 카산드라는 많은 쓰기에 최적화되어 만들어져 있다.<br />카산드라의 초기 많은 제품들은 사용자 업데이트, 소셜네트워크 사용, 추천, 애플리케이션 통계 등을 포함한다. 이것들은 카산드라의 좋은 유즈케이스이며 적은 읽기에 비해 많은 쓰기를 포함하고 있다. 사실 애플리케이션의 많은 쓰기에서 좋은 퍼포먼스를 보장하는 것은 카산드라의 주요 장점중의 하나이다.<br />프로젝트 wiki에 따르면 카산드라는 인덱스화 된 문서와 분산화된 업무 등에 맞는 애플리케이션을 만들기위해 사용되어왔다.<br /><br />1.6.3. 지정학적인 분산<br />카산드라는 데이터의 지정학적인 분산를 지원한다. 많은 데이터센터에 데이터를 복사하기도 하는등 설정이 쉽다. 당신이 만약 글로벌하게 분산된 서버환경에 데이터만 사용자 가까이에 두어 많은 퍼포먼스 이득을 보고 싶다면 카산드라가 매우 잘 맞을것이다.<br /><br />1.6.4. 진화하는 애플리케이션<br /><br />만약 당신의 애플리케이션이 빠르게 진화하고 당신은 이제 시작하는 중이라면 카산드라는 스키마에 종속적이지 않은 데이터 모델 때문에 잘 맞을 것이다. 이것은 당신이 빠르게 디플로이하는 애플리케이션과 데이터베이스의 보조를 맞추게 해준다.<br /><br /><br />1.7. 누가 카산드라를 사용하는가?<br />카산드라는 이 책이 쓰여지는 시점에서 아직도 1.0 릴리즈가 나오지 않은 초기단계이다. 그래픽 툴 같은 편한 도구도 없고 많은 내부적 외부적 디자인에서도 정착되지 않은 점들이 있다. 하지만 그 편리함과 안정성등 때문에 많이 쓰이고 있다.<br />카산드라를 사용하고 있는 회사들의 리스트는 다음과 같다.<br /> Twitter 는 분석을 위해서 카산드라를 사용한다. 발표된 블로그에서 (http://engineering.twitter.com/2010/07/cassandra-at-twitter-today.html) 트위터의 주 카산드라 엔지니어 Ryan King은 초기 처럼 카산드라를 tweet을 저장하는데만 사용하는 것이 아니라 실시간 분석과 데이터 마이닝등 모든 사용자 기반에 사용한다고 했다.<br /> Mahalo 는 주요 실시간 데이터 저장에 사용한다.<br /> Facebook 은 아직도 나름대로의 방법도 쓰지만 인박스 검색에 쓰고있다.<br /> Digg 주요 실시간 데이터 저장에 사용한다.<br /> Rackspace 는 클라우드 서비스, 모니터링, 로깅에 사용한다.<br /> Reddit은 캐쉬를 위해 사용한다.<br /> Cloudkick은 모니터링과 분석을 위해서 사용한다.<br /> Ooyala는 저장과 거의 실시간 비디오의 분석 데이터를 위해 사용한다.<br /> SimpleGeo는 주 데이터 저장소와 실시간 위치를 위해 사용한다.<br /> Onespot은 주 데이터 저장소의 일부로서 사용한다.<br />카산드라는 또한 Cisco와 Platform64에 의해서도 사용된다. 그리고 Comcast와 bee.tv 도 개인화된 TV 스트리밍과 웹 그리고 모바일 디바이스를 위해 사용하려고 하고 있다. 많은 다양한 회사들이 카산드라의 유즈케이스가 되고 있고 잘 성공하고 있다. 이 책이 쓰여지는 시점에 가장 많이 사용하는 곳은 Facebook 이며 그들은 150TB 이상의 데이터를 100대 이상의 기기에서 사용하고 있다.<br />아파치 프로젝트를 설립한 Jonathan Ellis의 Riptano 같은 더 많은 회사들이 카산드라를 여러 가지 프로젝트에서 실제 제품 레벨에 사용하고 있다. 더 많은 기능이 추가되고 편리한 지원 도구들이 생기면 더 많이 사용이 되어질 것으로 보인다.Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-78522801532128640622011-06-09T22:42:00.000-07:002011-06-09T22:46:02.493-07:00iBATIS in Action (14/14)14. 모두 종합해서 보기<br /><br />14.1. 설계 컨셉<br />애플리케이션을 작성할 때는 몇 가지 방향을 사전에 정의하고 시작하는 것이 좋다. 애플리케이션으로 무엇을 하고자 하는지 총체적으로 살펴봐야 한다. 다시 말하면 ‘요구사항’을 정리해 보는 것을 뜻한다. 장바구니는 많은 책에서 다루어졌었기 때문에 요구사항을 정리하기가 쉽다. 지겹긴 하겠지만 이번에도 역시 장바구니를 할 것이다. (이봐, 최소한 애완동물 가게는 아니라고!)<br />우리는 장바구니의 설계를 단순하게 유지하면서 네 가지 주요 부분에 집중할 것이다. 여기서 말하는 네 가지 부분은 계정(account), 카탈로그(catalog), 장바구니(cart) 그리고 주문(order)이다. 관리 부분에 대해서는 그냥 넘어갈 것이다. 관리 부분은 이 책에서 그ㄷ지 핵심적인 부분은 아니면서도 많은 시간을 요하고 복잡성도 증가시킨다. 이제 애플리케이션 컴포넌트 그룹들의 역할을 알아보며, 각 요구사항의 세세한 부분들을 정하자.<br /><br />14.1.1 계정<br />계정(account)에는 사용자와 관련된 정보를 저장할 것이다. 계정은 개인의 주소와 추가정보를 포함하고 있다. 사용자는 계정을 만들고 수정할 수 있어야만 한다. 계정은 또한 고객의 로그인을 위한 보안 관련 부분을 처리한다.<br /><br />14.1.2 카탈로그<br />우리가 코딩해야 하는 많은 부분들이 카탈로그(catalog)에 포함된다. 카테고리(category), 제품(product), 항목(item) 등을 여기서 사용할 것이다. 카테고리, 제품, 항목들은 오직 1차 레벨만 있으며, 카테고리는 제품들을 자식으로 소유한다. 그리고 제품은 항목들을 소유한다. 항목은 제품의 변종이다. 예를 들어 Action이라는 카테고리에는 Doom과 같은 게임/제품이 있을 것이다. 게임/제품에는 PC, PlayStation, Xbox 그리고 이와 유사한 변형 항목들이 있을것이다.<br /><br />14.1.3 장바구니<br />장바구니(cart)를 통해서 사용자가 선택한 제품을 관리한다. 장바구니는 현재 장바구니에 들어있는 항목들을 기록하여 주문을 준비할 때 사용할 수 있도록 한다.<br /><br />14.1.4 주문<br />애플리케이션의 주문(order) 영역은 계산할 때 사용한다. 고객이 모든 항목을 선택하고서 장바구니에서 선택한 항목을 구매하고자 한다면, 장바구니에서 주문을 선택한다. 장바구니는 주문할 항목들을 확인, 지불, 계산서 작성, 배송, 최종 확인의 절차를 통해 처리할 것이다. 일단 주문이 완료되면 사용자는 주문 내역에서 이를 확인할 수 있을 것이다.<br /><br />14.2. 기술 선택<br />이제 몇 가지 측면의 요구사항을 이끌어냈으니, 이떤 기술을 사용하여 필요한 기능을 구현할지를 결정할 때가 되었다. 우리가 만들고자 하는 것이 웹 애플리케이션이기 때문에, 각 계층별로 어떤 것을 선택할 수 있는지 살펴볼 것이다. 표준 웹 애플리케이션은 몇 가지로 나눠서 볼 수 있다.<br /> 프레젠테이션(Presentation) 계층 – 웹에 한정되는 애플리케이션의 영역<br /> 서비스(Service) 계층 – 대부분의 비즈니스 규칙들이 있는 곳<br /> 퍼시스턴스(Persistence) 계층 – 데이터베이스 접근에 한정된 요소들만 다루는 곳.<br /><br />14.2.1 프레젠테이션<br />프레젠테이션 계층에서는 선택 사양이 다양하다. 가장 유명한 프레임워크로는 스트럿츠(Struts), JSF, Spring과 WebWork 등이 있다. 이 모든 프레임워크들은 각각 지지층을 확보하고 있으며 다른 것에 의존하지 않고 잘 작동하는 것으로 알려져 있다. 여기서는 이 프레임워크들 중에서 스트럿츠를 사용한다. 스트럿츠는 매우 안정적이고 범용적이며 계속해서 점진적으로 발전하고 새로운 애플리케이션이나 기존 애플리케이션 모두에 충분히 사용 가능하다. 여기서는 스트럿츠 프레임워크에 대해 적당히 이해 하고 있다고 가정할 것이다. 혹시나 그렇지 않다면 테드 N. 허스테드, 세드릭 듀몰린, 조지 프랜시스커스와 데이비드 윈터펠트의 Struts In Action 책(Manning, 2002)을 구매해서 읽어보길 권한다.<br /><br />14.2.2 서비스<br />서비스 계층은 선택하기가 다소 간단하다. 이 책은 iBATIS에 대한 것이기 때문에 서비스 클래스 내부에서는 iBATIS DAO를 사용할 것이다. iBATIS DAO를 통해서 데이터 접근 객체를 가져와서 이를 서비스 클래스의 인스턴스 변수로 저장할 것이다. 이렇게 하면 DAO 구현체를 서비스 클래스로부터 숨겨 둘 수 있다. iBATIS DAO를 사용하여 트랜잭션을 구분하고, 세세한 메서드 호출은 퍼시스턴스 계층에 모을 것이다.<br /><br />14.2.3 퍼시스턴스<br />퍼시스턴스 계층에서 당연히 iBATIS SQL Maps를 사용할 것이다. iBATIS SQL Maps는 SQL, 퍼시스턴스 캐시를 관리하고 데이터베이스에 대한 호출을 책임진다. 이 책이 바로 그런 주제를 다루기 때문에 여기서 다시 상세하게 다루지는 않을 것이다.<br /><br />14.3. 스트럿츠 최적화하기 : BeanAction<br />최근 웹 애플리케이션 프레임워크들은 약간의 변화를 겪고 있다. 상태 관리, 빈즈 기반의 프레젠테이션 클래스, 고급 GUI 컴포넌트 그리고 정교한 이벤트 모델과 같은 기능이 도입되어 개발이 좀 더 쉬워졌다. 이러한 차세대 프레임워크들의 한 가운데서도 스트럿츠는 여젼히 계속해서 강력한 위용을 과시하고 있다. JGameStore 애플리케이션의 가장 훌륭한 접근 방법이 무엇일까 평가해본 결과, 스트럿츠를 사용하면서 신세대 프레임워크들과의 앞으로의 관계도 유지하기로 결정하였다. 이러한 생각으로 우리가 BeanAction이라고 이름 붙인 접근 방법을 사용하기로 결정하였다. BeanAction을 사용하면 표준 스트럿츠 애플리케이션 개발자들이 쉽게 iBATIS를 표준 스트럿츠 애플리케이션에 통합할 수 있게 된다. 동시에 JSF, Wicket, 그리고 Tapestry 같은 차세대 프레임워크를 사용하는 개발자들도 BeanAction의 의미를 이해할 수 있을 것이다. 마지막으로 스트럿츠를 변형하려 들지는 않을 것이다. 우리는 단지 우리 애플리케이션을 더 많은 사람들에게 의미 있도록 만들고자 할 뿐이다.<br />BeanAction은 Action과 ActionForm의 역할을 한 개의 클래스에 성공적으로 집약시킨다. 이는 또한 세션(session)이나 요청(request)같은 웹에 종속적인 컴포넌트들에 직접적으로 접근하지 않도록 추상화 시켜준다. 이런 형태의 아키텍처는 WebWork나 JSF와 유사하다. 스트럿츠의 Action 클래스를 상속한 BeanAction과 BaseBean 그리고 ActionContext라는 몇 가지 핵심 컴포넌트들을 통해서 이러한 일을 할 수 있다. 이 컴포넌트들은 BeanAction이 어떻게 작동하는지 이해하는 데 매우 중요하다. 이들은 그림에서 볼 수 있다.<br /> <br />그림 14 1. BeanAction 아키텍처의 UML 다이어그램<br /><br />14.3.1 BaseBean<br />ActionContext 와 BeanAction을 보기 전에 먼저 BaseBean의 목적을 이해하고 있어야 한다. BaseBean은 스트럿츠에서 유효성 검사에 사용하는 ValidatorActionForm을 확장한다. 그래서 ActionForm을 직접 상속하는 것 대신에 BaseBean을 상속한다. BaseBean은 ActionForm이 갖고 있는 일반적인 프로퍼티를 모두 포함한다. 게다가 BaseBean은 그 자체가 ActionForm이기 때문에 스트럿츠가 ActionForm을 만드는 것과 동일한 방식으로 만들어진다. 유일한 차이점은 상속받은 BaseBean이 public String methodName()라는 간략한 시그너처를 가진 행위 메서드를 포함한다는 것이다.<br /><br />14.3.2 BeanAction<br />퍼즐의 다음 조각은 BeanAction이다. BeanAction은 두 가지 역할을 한다. 먼저 BeanAction은 ActionContext를 생성한다. 그 다음은 상속받은 BaseBean의 행위 메서드를 호출하고 행위 메서드가 반환한 문자열을 스트럿츠의 ActionForward로 변환한다. 이 덕분에 BaseBean은 행위 메서드를 스트럿츠에 종속적인 컴포넌트들이 하나도 없는 깔끔한 상태로 유지할 수 있다. BeanAction 클래스는 상속받은 BaseBean의 행위 메서드 중에서 무엇을 호출할지 결정할 때 서로 다른 두 곳을 살펴본다. 먼저 액션 매핑에 파라미터가 지정돼 있고, 명시적으로 어떤 메서드를 호출하라고 지정하고 있는지 확인한다. 파라미터가 *로 지정돼 있다면 메서드를 호출하지 않고 success(성공) 액션 포워드를 대신 사용한다. 만약 액션 매핑 파라미터 속성이 지정돼 있지 않거나 비어 있다면 ActionBean이 경로를 확인하고 확장자를 뺀 파일 이름을 메서드 이름으로 간주해서 메서드를 호출한다. 따라서 표준 .do 매핑을 사용하고 호출 경로가 /myMethod.do로 끝났다면 BaseBean을 상속받은 클래스의 myMethod라는 행위 메서드를 호출할 것이다.<br /><br />14.3.3 ActionContext<br />마지막으로 ActionContext는 특정 웹 관련 정보를 추상화한다. 이를 사용하여 요청(request), 파라미터(parameter), 쿠키(cookie), 세션(session), 애플리케이션(application) 등 모든 스코프를 Map 인터페이스를 통해 접근할 수 있다. 이를 통해 웹 계층에 대한 직접적인 의존성을 줄일 수 있게 된다. 대부분의 경우 ActionContext는 개발자가 스트럿츠와 Servlet API에 신경 쓰지 않아도 되게 해준다. 하지만 ActionContext는 여전히 개발자가 꼭 필요한 경우에 대비해서 HttpServletRequest와 HttpServletResponse에 직접 접근할 수도 있도록 하고 있다.<br />이러한 접근 방법은 여러 가지 장점을 가지고 있다. 무엇보다도 ActionForm 객체를 ActionForm을 상속받은 타입으로 형 변환하느라 시간과 코드를 낭비할 필요가 없어진다. Action이 곧 ActionForm이기 때문에 그러한 일은 발생하지 않는다. 개발자는 오로지 BaseBean을 상속받은 빈즈 객체의 프로퍼티에 직접 접근하면 된다. 둘째로 행위메서드를 호출함으로써 복잡성을 줄일 수 있다. 일반적으로는 HttpServletRequest나 HttpServletResponse, ActionForm 그리고 ActionMapping을 받는 메서드 시그너처가 필요하다. 또한 Action의 수행 메서드는 ActionForward를 반환해야 한다. BeanAction은 이런 것들을 모두 줄여서 간단하게 시그너처는 비워두고 반환 값으로는 String만 있으면 된다. 셋째로 간단한 빈즈를 단위 테스트하는 것이 ActionForm이나 Action을 단위 테스트하는 것보다 훨씬 더 쉽다. MockObjects와 StrutsTestCase를 통해서 스트럿츠의 Action 클래스를 완벽하게 테스트할 수 있다. 하지만 간단한 빈즈를 테스트하는 것이 훨씬 더 쉽다. 마지막으로 BeanAction 아키텍처는 기존 스트럿츠 애플리케이션들과도 부드럽게 작동한다. 이 때문에 기존에 열심히 작업한 것들을 없애지 않고도 기존 애플리케이션 아키텍처를 현대적인 접근 방식을 사용하도록 이전할 수 있다.<br /><br />14.4. 기초 닦기<br />이제 개발 환경을 구축해보자. iBATIS를 사용하는 애플리케이션을 개발하기 위해서 특정 개발 도구에 초점을 맞추지는 않을 것이다. 대신 우리에게 유용했던 기반 구조를 살펴보는데 시간을 할애할 것이다. 소스 트리를 조직화하는 것은 훌륭하고 깔끔하고 간결한 코드를 작성함에 있어서 매우 중요한 부분이다. 원한다면 iBATIS JGameStore 애플리케이션의 소스를 사용해서 14장의 나머지 부분을 따라 해도 된다. 앞어서 정한 모든 요구사항을 다 다루지는 못할 것이다. 하지만 iBATIS JGameStore 애플리케이션의 소스를 살펴보면 여기서 다루지 않은 코드를 보고 어떻게 작동하는지 이해할 수 있을 것이다.<br />jgamestore라는 기본 폴더를 만드는 것으로 시작해보자. 이 폴더는 프로젝트 폴더가 될 것이고 소스 트리를 포함하고 있다. 여러분이 선호하는 IDE에서 이 폴더를 구성하고 프로젝트 이름을 jgamestore라고 지어도 되고 혹은 간단히 운영체제에서 수작업으로 해도 된다.<br />프로젝트 폴더 하위에 src, test, web, build, devlib 그리고 lib라는 폴더를 생성한다.<br />/jgamestore<br />/src<br />/test<br />/web<br />/build<br />/devlib<br />/lib<br /><br />각각의 폴더를 좀 더 자세히 살펴보자.<br /><br />14.4.1 src<br />src라는 이름은 source의 줄임말이다. src폴더에 모든 자바 소스 코드와 클래스패스에 위치해야만 하는 property 및 xml 파일을 저장한다. 이 파일들은 분산 애플리케이션에서 사용될 것이다. 이 폴더는 단위 테스트와 같은 테스트 코드를 포함해서는 안 된다.<br />모든 소스는 org.apache.ibatis.jgamestore 라는 기본 패키지에 포함될 것이다. 기본 패키지 아래의 각각의 패키지는 애플리케이션 컴포넌트를 분류한다.<br />하위 패키지는 다음처럼 될 것이다.<br /> Domain – 이 패키지에는 애플리케이션에서 투명한 객체인 DTO/POJO 클래스들이 들어간다. 이 객체들은 애플리케이션의 각 계층 사이에서 전달/사용된다.<br /> Persistence – 데이터 접근 인터페이스와 구현체가 SQL Map xml 파일들과 함께 위치하는 곳이다. 데이터 접근 구현체는 iBATIS SQL Maps API를 사용할 것이다.<br /> Presentation – 이 패키지에는 프레젠테이션 빈즈들이 들어간다. 이 클래스들은 웹 애플리케이션의 서로 다른 화면들에 관련된 프로퍼티와 행위를 포함한다.<br /> Service – 이 패키지에는 비즈니스 로직이 들어간다. 이 포괄적인(coarse-grained) 클래스는 퍼시스턴스 계층의 세부적인 (fine-grained) 호출들을 함께 묶는 역할을 한다.<br /><br />14.4.2 test<br />Test 디렉터리에는 모든 단위 테스트 코드를 저장한다. 패키지 구조는 src 디렉터리의 패키지 구조와 동일할 것이다. 각각의 패키지는 단위 테스트들을 저장한다. 단위 테스트는 src 디렉터리의 동일한 패키지에 있는 클래스들을 테스트한다. 이런 식으로 하는 데는 여러 가지 이유가 있는데 대부분의 이유는 코드를 안전하고 테스트 가능하게 관리하기 위해서이다.<br /><br />14.4.3 web<br />Web 폴더에는 JSP, 이미지, 스트럿츠 설정 그리고 그 외의 유사한 파일 등 웹에 관련된 산출물을 모두 포함할 것이다.<br />Web 폴더의 구조는 다음과 같다.<br /> JSP 디렉터리들 – account, cart, catalog, common, order 디렉터리에는 애플리케이션에서 디렉터리 이름과 관련된 부분을 위한 JSP 파일들을 저장한다. 각각의 디렉터리 명은 해당 디렉터리 안의 JSP가 무엇을 위한 것인지 단어 자체가 설명하기 때문에 별도의 설명이 필요 없다.<br /> Css – 이 디렉터리에는 스타일 시트(CSS)를 저장한다. 스타일 시트에 친숙하지 않다면 웹 검색을 통해 많은 자료를 찾을 수 있다.<br /> Images – 이 디렉터리에는 사이트에 관련된 모든 이미지를 저장한다.<br /> WEB-INF – WEB-INF 디렉터리에는 서블릿과 스트럿츠 관련 설정 파일을 저장한다.<br /><br />14.4.4 build<br />Build 디렉터리에는 빌드를 쉽게 실행할 수 있도록 하는 셸 스크립트와 윈도우 배치 파일 그리고 Ant 스크립트를 저장한다.<br /><br />14.4.5 devlib<br />Devlib는 컴파일에 필요한 jar파일을 포함하지만 WAR에 포함되어 배포되지는 않는다.<br />개발을 위해 필요한 라이브러리(devlib)에는 다음이 있다 :<br /> Ant.jar<br /> Ant-junit.jar<br /> Ant-launcher.jar<br /> Cgilib-nodep-2.1.3.jar<br /> Emma_ant.jar<br /> Emma.jar<br /> Jmock-1.0.1.jar<br /> Jmock-cglib-1.0.1.jar<br /> Junit.jar<br /> Servlet.jar<br /><br />14.4.6 lib<br />Lib 디렉터리는 컴파일에 필요한 모든 jar 파일을 포함하고, WAR에도 포함되어 배포된다.<br />실행과 배포를 위해 필요한 라이브러리(lib)는 다음과 같다 :<br /> Antlr.jar<br /> Beanaction.jar<br /> Commons-beanutils.jar<br /> Commons-digester.jar<br /> Commons-fileupload.jar<br /> Commons-logging.jar<br /> Commons-validator.jar<br /> Hsqldb.jar<br /> Ibatis-common-2.jar<br /> Ibatis-dao-2.jar<br /> Ibatis-sqlmap-2.jar<br /> Jakarta-oro.jar<br /> Struts.jar<br /><br />이 기본적인 소스 트리 구조를 가지고, 실제로 작동하는 애플리케이션 코딩을 시작해보자. 애플리케이션의 카탈로그 부분이 고객이 처음으로 보게 되는 곳이기 때문에 그것에 집중해서 개발해보자.<br />14.5. Web.xml 설정하기<br />Web.xml을 설정하는 것은 지극히 간단하다. JSP 페이지에 직접 접근하는 것을 막는 간단한 보안 설정과 스트럿츠 ActionServlet 구성을 할 것이다.<br /><servlet><br /><servlet-name>action</servlet-name><br /><servlet-class><br />org.apache.struts.action.ActionServlet</servlet-class><br /><init-param><br /><param-name>config</param-name><br /><param-value>/WEB-INF/struts-config.xml</param-value><br /></init-param><br /><init-param><br /><param-name>debug</param-name><br /><param-value>2</param-value><br /></init-param><br /><init-param><br /><param-name>detail</param-name><br /><param-value>2</param-value><br /></init-param><br /><load-on-startup>2</load-on-startup><br /></servlet><br /><servlet-mapping><br /><servlet-name>action</servlet-name><br /><url-pattern>*.shtml</url-pattern><br /></servlet-mapping><br /><br /><servlet> 요소를 사용하여 요청을 처리하는 ActionServlet을 설정한다. ActionServlet을 위한 설정은 기본적인 스트럿츠 설정에서와 다를 바 없으며 특별한 것은 없다. <servlet-class> 요소에 명시된 ActionServlet은 표준 ActionServlet이다. 우리는 표준 struts-config.xml 파일의 위치, debug 레벨로 2, detail 레벨을 2, 그리고 load-on-startup 값을 2로 지정하였다.<br /><servlet-mapping> 요소를 주의하라. 똑똑해 보이고 싶어서 ActionServlet에 요청을 매핑하는 확장자를 표준인 .do 말고 다른 것을 사용하기로 결정했다. 그래서 표준 .do 대신에 .shtml을 사용한다. 이렇게 하는 단 한가지 이유는 장난삼아 오래된 기술을 사용하는 것처럼 보이도록 하기 위해서이다. 누가 알겠는가? 이 때문에 사이트를 해킹(어림도 없다네!)하려던 사람들이 지쳐 포기하게 될지.<br />스트럿츠를 사용할 때는 JSP 페이지에 대한 직접적인 접근을 막는 것이 중요하다. JGameStore가 사용하는 모든 JSP 페이지는 pages 디렉터리 아래에 위치한다. 모든 JSP 페이지가 디렉터리 아래에 있기 때문에 그 디렉터리에 대한 직접 접근을 간단히 막을 수 있다. 아래 설정은 JSP 페이지에 대한 모든 접근이 스트럿츠 ActionServlet을 통해서 이루어짐을 보장한다.<br /><security-constraint><br /><web-resource-collection><br /><web-resource-name><br />Restrict access to JSP pages<br /></web-resource-name><br /><url-pattern>/pages/*</url-pattern><br /></web-resource-collection><br /><auth-constraint><br /><description><br />With no roles defined, no access granted<br /></description><br /></auth-constraint><br /></security-constraint><br /><br />Web.xml 을 다 설정하면 이제 우리는 스트럿츠의 프레젠테이션 계층에서 사용할 클래스와 설정을 만드는 데 집중할 수 있게 된다. 스트럿츠의 BeanAction 방식의 장점에 대해 좀 더 자세히 이야기해보자.<br /><br />14.6. 프레젠테이션 설정하기<br />카탈로그는 애플리케이션에서 장바구니 사용자들이 가장 먼저 사용하는 부분이기 때문에 카탈로그의 프레젠테이션 부분 설정을 집중해서 알아보자.<br /><br />14.6.1 첫 번째 단계<br />방문자들이 JGameStore에 방문하면 초기 페이지를 만나게 된다. 스트럿츠를 사용할 때는 항상 스트럿츠 컨트롤러 (ActionServlet)을 통과하도록 요청을 포워딩해야 한다는 것은 우리 웹 애플리케이션의 중요한 규칙이다. 스트럿츠 프레임워크를 통과해서 방문자들을 초기 페이지로 보내려면, 간단하게 포워딩을 수행하는 index.jsp 페이지를 만들고 struts-config.xml에서 포워딩 할 URL을 정의하고, titles-defs.xml 파일에서 타일을 정의하며 그러고 나서 우리의 방문자들이 보게 될 초기 JSP 페이지를 생성한다.<br />JSP 포워딩이 작동하려면 방문자들이 보게 될 초기 페이지를 구축해야 한다.<br />이 페이지는 소스 트리에서 web/catalog/ 디렉터리에 위치하게 되고 이름은 Main.jsp로 저장한다. 방문자들이 카탈로그를 제일 처음 보게 되기 때문에 우리는 메인 페이지를 카탈로그 디렉터리에 둘 것이다.<br />추가로 tiles-defs.xml 파일에서 이 페이지를 위한 정의를 살펴볼 필요가 있다. Tiles를 사용하면 공통 템플릿을 생성하고 재사용하는 것이 쉬워져서 JSP의 include를 중복해서 사용하지 않아도 된다. Tiles에 대해 더 배우고 싶다면 Struts in Action을 참조하라.<br /><tiles-definitions><br />…<br /><definition name="layout.main" path="/pages/main.jsp" ><br /><put name="header"<br />value="/pages/common/header.jsp" /><br /><put name="footer"<br />value="/pages/common/footer.jsp" /><br /><put name="left"<br />value="/pages/common/left-blank.jsp" /><br /></definition><br /><definition name="layout.catalog"<br />extends="layout.main" ><br /><put name="header"<br />value="/pages/common/header.jsp" /><br /><put name="footer"<br />value="/pages/common/footer.jsp" /><br /><put name="left"<br />value="/pages/common/left.jsp" /><br /></definition><br /><definition name="index.tiles"<br />extends="layout.catalog" ><br /><put name="body"<br />value="/pages/catalog/Main.jsp" /><br /></definition><br />…<br /><tiles-definitions><br /><br />Tiles-defs.xml 파일에서는 index.tiles를 정의하기 전에 layout.main과 layout.catalog를 정의해야 한다. Index.tiles 정의는 layout.catalog 정의를 상속한다. 또한 layout.catalog도 layout.main 정의를 상속한다. Layout.main은 소스 트리에서 web/pages/main.jsp 에 위치해 있는 기본 템플릿을 정의한다.<br />일단 메인 페이지를 구축하고 나면, 그 페이지로의 포워딩을 정의해서 우리의 index.jsp 파일의 포워드가 작동할 수 있게 만들어야 한다. 매핑 설정에서 parameter 속성의 값을 index로 정의했음을 주의해서 보라. 결과적으로 /catalog/Main.jsp로 포워딩 되기 전에 catalogBean의 index() 메서드를 먼저 호출할 것이다.<br /><action-mappings><br /><action path="/index"<br />type="org.apache.struts.beanaction.BeanAction"<br />name="catalogBean" parameter="index"<br />validate="false"><br /><forward name="success" path="index.tiles"/><br /></action><br /></action-mappings><br /><br />JGameStore 애플리케이션에서 CatalogBean의 index() 메서드는 CatalogService를 호출하여 각 카테고리의 신규 제품의 List를 생성한다. 조금 뒤에 이에 관하여 좀 더 나은 예제를 살펴볼 것이기 때문에, 설명은 이것으로 마친다. 지금 이 시점에서는 index() 메서드가 “success” 문자열을 반환하고 장바구니의 첫 번째 페이지로 포워딩되는 것을 확인하기만 하면 된다.<br />public String index() {<br />…<br />return SUCCESS;<br />}<br /><br />다음으로 index.jsp 를 사용하여 스트럿츠 컨트롤러를 통해 메인 페이지에 성공적으로 포워딩을 할 수 있다. Index.jsp 페이지에서는 포워딩만 해 주면 된다. 포워딩 URL에 .shtml 확장자를 꼭 써야 됨을 명심하라. 그래야 서블릿 컨테이너가 요청을 스트럿츠 컨트롤러를 통해서 처리한다.<br /><jsp:forward page="/index.shtml"/><br /><br />다음으로 프레젠테이션 빈즈를 구성하고 호출할 행위 메서드를 생성할 것이다.<br /><br />14.6.2 프레젠테이션 빈즈 이용하기<br />방문자가 장바구니에 방문해서 확인하고 싶은 카테고리를 선택한다. 우리는 그 카테고리를 확인하고 그 다음 페이지에서 제품의 목록을 출력해준다. 이렇게 하려면 다음과 같이 만들어야 한다.<br /> Tiles-defs.xml 파일의 tiles 정의<br /> Category 도메인 객체<br /> Product 도메인 객체<br /> 프로퍼티와 행위 메서드를 가지고 있고 사용자의 입력을 받아들이는 프레젠테이션 빈즈<br /> 카테고리 제품을 나열하는 JSP 페이지<br />그러고 나서 스트럿츠 설정에 액션 매핑을 추가한다.<br />카테고리 사용에 관한 코드에 대해 이야기하고 있으니 org.apache.ibatis.jgamestore.domain 패키지에 Category 라는 이름으로 이 객체의 클래스를 생성하자. Category 도메인 객체는 간단한 객체로 오직 categoryId 와 name, description 그리고 image로만 구성돼 있다. 우리의 카테고리가 한 단계 이상의 깊이를 가지는 경우는 결코 없기 때문에, 부모 카테고리에 관한 사항은 고려하지 않을 것이다.<br />…<br />public class Category implements Serializable {<br />private String categoryId;<br />private String name;<br />private String description;<br />private String image;<br />// simple setters and getters<br />…<br /><br />우리가 작성할 코드는 Product(제품) 도메인 객체의 사용과도 관련돼 있다. 제품 객체는 JSP 페이지에서 출력할 때 List에 저장하여 읽어 들일 것이다. 이는 현 시점에서는 어떤 자바 코드도 제품에 직접적으로 접근하지는 않을 것이라는 뜻이다. 어쨌든 철저하게 코딩하는 것이 현명할 것이다. 이 코드를 org.apache.ibatis.jgamestore.domain 패키지에 Product.java 파일로 추가하자. Product 객체는 productId, categoryId, name, description, image 로 구성된다. Product는 Product 도메인 객체가 관련된 categoryId를 포함하고 있다는 점만 빼고는 Category 도메인 객체와 별로 크게 다르지 않다.<br />…<br />public class Product implements Serializable {<br />private String productId;<br />private String categoryId;<br />private String name;<br />private String description;<br />private String image;<br />// simple setters and getters<br />…<br /><br />이제 도메인 클래스를 모두 구성하였으니, 프레젠테이션 빈즈에 대해 알아보자. CatalogBean 프레젠테이션 클래스를 살펴보면 실세계에서 BeanAction이 어떻게 작동하는지 처음으로 슬쩍 확인할 수 있다. CatalogBean을 만들면서 viewCategory행위 메서드도 함께 만들어야 한다. 이 행위 메서드는 public String <행위이름>()와 같은 BeanAction 형태의 행위 메서드 시그너처를 사용한다. viewCategory 행위 메서드는 상당히 단순하다. 이것의 역할은 선택한 카테고리에 관련된 제품의 목록을 가져와서 완전한 Category 객체를 생성하고 그 다음에 뷰 페이지로 포워딩한다. viewCategory 메서드 안에서는 CatalogService 클래스를 호출하여 productList와 categoryList 객체를 생성한다. 서비스 클래스는 나중에 살펴볼 것이다. 지금 현재는 서비스 클래스가 객체들을 올바로 반환한다고 가정하는 것만으로도 족하다.<br />…<br />private String categoryId;<br />private Category category;<br />…<br />private PaginatedList productList;<br />…<br />public String viewCategory() {<br />if (categoryId != null) {<br />productList =<br />catalogService.getProductListByCategory(categoryId);<br />category = catalogService.getCategory(categoryId);<br />}<br />return SUCCESS;<br />}<br />…<br />// category setter/getter<br />…<br />// productList setter/getter<br />…<br /><br />CatalogBean을 컴파일하기 위해 org.apache.ibatis.jgamestore.service 패키지에 CatalogService 인터페이스를 만들 것이다. 인터페이스에 public List getProductListByCategory(Integer categoryId)와 public Category getCategory(Integer categoryId) 라는 두 개의 메서드를 추가할 것이다. 이후에는 구현에 대해서는 걱정할 필요 없이 코딩을 계속적으로 진행할 수 있다.<br />viewCategory 메서드가 완료되면 SUCCESS라고 부르는 public static String을 반환 값으로 사용한다. SUCCESS 변수의 실제 값은 “success”이다. 반환된 String은 BeanAction에게 다음으로 호출할 액션 포워드의 이름을 제공해준다. 그 결과로 JSP 페이지가 출력된다.<br />…<br /><c:set var="category"<br />value="${catalogBean.category}"/><br /><c:set var="productList"<br />value="${catalogBean.productList}"/><br /><br /><tr><br /><td colspan="2" class="PageHeader" align="left"><br /><c:out value="${category.name}"/><br /></td><br /></tr><br /><tr><br /><td colspan="2" align="left"><br /><br />Return to Main Page<br /><br /></td><br /></tr><br /><c:forEach var="product" items="${productList}"><br /><tr><br /><td width="128" align="center"<br />style="border-bottom: 1px solid #ccc"><br /><br />paramName="product"<br />paramProperty="productId"<br />page="/viewProduct.shtml"><br /><c:out value="${product.image}"<br />escapeXml="false"/><br /><br /><br />paramName="product"<br />paramProperty="productId"<br />page="/viewProduct.shtml"><br />View Items<br /><br /></td><br /><td align="left"<br />style="border-bottom: 1px solid #ccc"><br /><br />paramId="productId"<br />paramName="product"<br />paramProperty="productId"<br />page="/viewProduct.shtml"><br /><c:out value="${product.name}"/><br /><br /></td><br /></tr><br /></c:forEach><br />…<br /><br /><c:set> 태그를 처음 부분에서 사용하여 Category 객체와 productList를 page 스코프에 저장한다. 일단 이 객체들을 page 스코프에 저장하면, 그 이후의 태그에서 그 객체들을 사용할 수 있다. JSTL core 태그와 스트럿츠 태그는 product와 category의 List를 사용하여 객체들을 출력한다. <c:out> 태그를 사용하여 Category 객체의 name 프로퍼티를 표시한다. <c:forEach> 태그를 사용하여 product의 List를 순회하여 List에 있는 각각의 product를 이 태그의 내용으로 노출시킨다. 그러면 가 노출된 product를 사용하여 제품을 보여주는 페이지에 대한 링크를 생성해낸다. 태그의 내부에서는 <c:out> 태그를 사용하여 제품의 이름을 보여준다.<br />스트럿츠의 태그들은 공통적인 명명 방법을 사용하여 객체를 처리한다. Name 속성은 특정 스코프에 노출된 객체를 가리키는 키의 역할을 한다. 예를 들어 page 스코프에 category라는 이름으로 객체를 저장했다고 하자. Name 속성은 바로 이 category를 참조하게 된다. Name 속성에 대응하는 속성으로 property 속성이 있다. 스트럿츠 태그는 이 속성을 통해서 name이 가리키는 객체의 특정 프로퍼티에 접근한다.<br />이와는 달리 JSTL 태그에는 스트럿츠 태그의 name과 property 속성보다 훨씬 더 강력한 EL(Expression Language, 표현식) 이라는 것이 있다. EL을 사용하여 스코프 안의 객체를 특정 JSTL속성의 값으로 지정할 수 있다. EL에 대해서는 더 이상 자세히 다루지 않을 것이다. 하지만 좀 더 공부해 보고 싶다면 숀 바이에른(Shawn Bayern)의 JSTL in Action(Manning, 2002)를 보라고 추천하겠다.<br />필요한 모든 컴포넌트들을 코딩하였다면, struts-config.xml에 액션 매핑을 추가하여 애플리케이션이 그 컴포넌트들을 사용할 수 있게 된 것이다. 우리는 먼저 CatalogBean을 catalogBean이라 이름 짓고 CatalogBean의 완전한 클래스 이름을 타입으로 제공하여 폼 빈으로 지정할 것이다. 이제 액션 매핑이 사용할 수 있는 폼 빈을 갖추게 되었다.<br /><form-bean<br />name="catalogBean"<br />type=<br />"org.apache.ibatis.jgamestore.presentation.CatalogBean"/><br />…<br /><action<br />path="/viewCategory"<br />type="org.apache.struts.beanaction.BeanAction"<br />name="catalogBean" scope="session" validate="false"><br /><forward name="success" path="/catalog/Category.jsp"/><br /></action><br /><br />마무리로 위에서 볼 수 있는 것처럼 액션 매핑을 설정해보자. 액션 매핑은 path를 명시해야만 하고, 위의 경우에는 /viewCategory 이다. Type 속성에는 요청을 처리하기 위해 사용될 Action 클래스의 패키지 경로를 포함한 클래스명을 지정해준다. 이 예제에서는 type이 BeanAction이다. BeanAction은 액션 매핑이 사용하는 폼 빈에 있는 행위 메서드에 요청을 전달한다. 이는 액션 매핑의 name 속성에 지정된 폼 빈 이름에 기초하여 판단된다. 우리의 경우 앞서 설정한 catalogBean을 사용할 것이다. 그 다음에는 scope 속성을 사용하여 폼 빈을 세션 스코프에 저장하라고 지정하였다. 이 경우 유효성을 검사할 입력 값이 없기 때문에 validate 속성은 false로 지정한다.<br />마지막으로 <forward> 태그를 사용하여 포워드될 페이지를 결정한다. Name 속성은 프레젠테이션 빈즈의 행위 메서드에 의해 반환되는 값으로 매핑된다. 우리의 경우에는 항상 success라는 반환 값을 가져오고 따라서 /catalog/Category.jsp로 포워딩한다.<br />이제부터는 서비스 계층을 만들어 보자.<br /><br />14.7. 서비스 작성하기<br />서비스 계층은 서비스 인터페이스와 그 구현체, 단 두 개의 부분으로 구성할 것이다. 서비스 클래스는 좀 더 잘게 나뉜 데이터 접근 호출들을 포괄적으로 모아서 처리하는 클래스로 만들 것이다. 듣기에는 간단할 것 같지만, 실제로는 서비스 클래스의 구현은 몇 가지 어려운 문제로 우리를 괴롭힐 것이다. 서비스 클래스에 어떠한 데이터 베이스 종속적인 정보도 들어가서는 안 되기 때문에, 적절히 추상화할 수 있는 추가적인 대책을 마련해야 한다.<br />서비스 계층은 데이터 접근 계층을 호출하고 트랜잭션 구분을 처리해야 하기 때문에 간단히 데이터베이스 커넥션을 가져와서 그 커넥션을 가지고 트랜잭션 구분을 관리하는 것은 쉽게 할 수 있다. 하지만 이렇게 하면 JDBC 에 종속적인 내용들을 서비스 계층에 노출시키게 된다. 이는 서비스 계층이 우리가 사용할 데이터 저장 구현체를 인지하게 됨을 의미한다. 서비스 계층에 우리가 사용하는 데이터 저장 형태가 노출되는 순간 서비스 계층의 근본적인 목적을 손상시키게 된다.<br />10장에서 배웠듯이, iBATIS는 이러한 상황에서 사용할 수 있는 iBATIS DAO라는 작은 프레임워크를 제공한다. iBATIS DAO는 몇 가지 중요한 역할을 수행해 줄 것이다. 첫째로 데이터 접근 객체의 팩토리 역할을 할 것이다. 둘째로 iBATIS DAO를 사용하여 트랜잭션을 구분할 것이고, 따라서 서비스 계층이 내부적인 데이터 접근 기법에 의존하는 것을 줄여준다. 이번 절에서는 앞에서 본 예제를 계속 살펴보고 iBATIS DAO를 사용하여 서비스 계층을 어떻게 구축하는지 공부해 볼 것이다.<br /><br />14.7.1 dao.xml 설정하기<br />프레젠테이션 계층에서와는 다르게, 먼저 iBATIS DAO 프레임워크를 설정하는 것으로 서비스 계층을 살펴보기로 한다. 이렇게 하면 서비스 계층에 관련된 컴포넌트들을 이해하기가 더 쉬워진다. iBATIS DAO 프레임워크를 사용하면 설정을 통해 필수적인 추상화를 관리할 수 있기 때문에 이것부터 살펴보는 것이 적절하다.<br />iBATIS DAO에서 처음으로 설정한 컴포넌트는 트랜잭션 관리자이다. 트랜잭션 관리자를 사용하여 데이터 접근 계층을 호출하면서 트랜잭션 구분 짓기를 처리한다. 우리의 예제에서는 SQLMAP 타입의 트랜잭션 관리자를 사용할 것이다. SQLMAP은 iBATIS SQL Maps 프레임워크와 통합시켜주는 타입이다. iBATIS DAO와 iBATIS SQL Maps를 구분하는 것이 어렵긴 하지만, 이 둘은 확실히 서로 다른 프레임워크이다. SQLMAP 트랜잭션 관리자는 뛰어나며 사용하기도 쉽다. 만약 iBATIS DAO 프레임워크를 다른 퍼시스턴스 계층과 함께 사용하지 않는다면, 대부분의 경우에 SQLMAP이 가장 적합한 트랜잭션 관리자일 것이다. SQLMAP 트랜잭션 관리자를 사용할 때는 SqlMapConfigResource 프로퍼티 단 하나만 지정해주면 된다. 이 프로퍼티는 <transactionManager> 태그 안에서 <property> 태그를 사용하여 지정해주면 된다. SqlMapConfigResource 프로퍼티에는 간단히 모든 필수적인 데이터베이스 접속 정보를 포함하고 있는 SQL Maps 설정 파일을 값으로 지정해주면 된다. 트랜잭션을 시작하고 커밋하고 종료하는 호출이 일어날 때마다, 필요한 요청을 SQL Maps 설정 파일에서 지정한 숨겨진 커넥션 객체에 투명하게 전달할 것이다.<br /><transactionManager type="SQLMAP"><br /><property name="SqlMapConfigResource"<br />value=<br />"org/apache/ibatis/jgamestore/persistence/sqlmapdao/sql/sql -mapconfig.<br />xml"/><br /></transactionManager><br /><br />Dao.xml 설정의 다음 단계는 인터페이스를 구현체에 매핑하는 것이다. 이는 상당히 쉽게 할 수 있다. <dao> 요소의 interface 속성에 완전한 패키지 명을 포함하는 인터페이스 이름만 지정해주면 된다. Implementation 속성에는 해당 인터페이스의 완전한 패키지 명을 포함한 구현체 이름을 지정해주면 된다. 만약 지정된 인터페이스를 사용하지 않는 구현체를 설정하였다면, iBATIS DAO가 실행시간에 이에 관해 확실히 알려 줄 것이다.<br /><dao<br />interface=<br />"org.apache.ibatis.jgamestore.persistence.iface.ProductDao"<br />implementation=<br />"org.apache.ibatis.jgamestore.persistence.sqlmapdao.ProductSqlMapDao"/><br /><br />14.7.2 트랜잭션 구분하기<br />iBATIS DAO 프레임워크에서 SQLMAP 타입을 사용하면 암묵적인 트랜잭션 관리자와 명시적인 트랜잭션 관리자를 사용하게 된다. 기본적으로 트랜잭션을 명시적으로 지정하지 않으면 자동으로 트랜잭션이 시작될 것이다. 이를 피하는 방법이 여러 가지가 있는데 4장과 10장에서 이에 관해 읽어 볼 수 있다.<br />SQLMAP 타입에서 암묵적인 트랜잭션 관리는 간단하다. 우리가 해야 할 것이라고는 데이터 접근 객체의 메서드를 호출하는 것뿐이다. 트랜잭션 관리자는 자동으로 수행된다. Select 구문의 경우에는 트랜잭션이 꼭 필요한 것은 아니지만, 트랜잭션을 사용한다고 해서 나쁠 것도 없다.<br />public PaginatedList getProductListByCategory(<br />String categoryId<br />) {<br />return productDao.getProductListByCategory(categoryId);<br />}<br /><br />명시적인 트랜잭션 관리는 좀 더 복잡하다. 이는 데이터 접근 객체에 하나 이상의 호출을 수행할 때만 필요하다. Try 블록 안에서 daoManager.startTransaction();을 처음으로 호출하고, 그 이후에 하나 혹은 그 이상의 데이터 접근 객체 호출을 수행한다. 데이터 접근 객체 호출이 모두 끝나면, daoManager.commitTransaction()을 호출하여 커밋한다. 만약 어떠한 이유에서라도 호출이 실패하면 finally 블록에 있는 daoManager.endTransaction()이 호출된 것이다. 이는 트랜잭션을 롤백하고 데이터 지장에 손상이 없도록 보호해준다. 예제에서 수행할 간단한 select 구문 처리는 이러한 수준의 트랜잭션 관리까지는 필요가 없다. 어쨌든 그래도 원한다면 이러한 방법을 사용할 수도 있다.<br />public PaginatedList getProductListByCategory(<br />String categoryId<br />) {<br />PaginatedList retVal = null;<br />try {<br />// Get the next id within a separate transaction<br />daoManager.startTransaction();<br />retVal = productDao<br />.getProductListByCategory(categoryId);<br />daoManager.commitTransaction();<br />} finally {<br />daoManager.endTransaction();<br />}<br />return retVal;<br />}<br /><br />자 이제 간단한 카테고리 보기 예제에서 서비스 계층을 모두 살펴보았다. DAO계층의 나머지 조각들을 모두 조합하여 완성해보자.<br /><br />14.8. DAO 작성하기<br /><br />데이터 접근 계층은 데이터베이스를 호출하는 자바 코드가 있는 곳이다. SQL을 더 쉽게 처리하기 위해 iBATIS SQL Maps 프레임워크를 사용한다. iBATIS SQL Maps를 사용하는 데이터 접근 계층은 SQL Maps 설정파일, SQL Maps 파일들의 묶음, 그리고 데이터 접근 객체의 세 가지 기본적인 부분으로 나눌 수 있다.<br />카테고리 보기 예제에 이들을 어떻게 적용해서 제품 목록을 가져오는지 살펴보자.<br /><br />14.8.1 SQL Maps 설정<br /><br />Sql-map-config.xml 파일을 사용하여 데이터베이스 프로퍼티들을 지정하고 트랜잭션 관리자를 구성하고 SQL Map 파일들을 함께 묶을 것이다. <properties> 태그는 database.properties 파일을 가리킬 것이다. 이 파일에는 키/값 쌍이 저장돼 있는데, ${…}로 작성된 항목들을 이 파일에 있는 값으로 대체할 것이다. Database.properties 파일에는 사용할 데이터베이스에 적합한 드라이버와 URL, 사용자명 그리고 비밀번호 등이 확실하게 들어가 있어야 한다.<br /><sqlMapConfig><br /><properties resource="properties/database.properties"/><br /><transactionManager type="JDBC"><br /><dataSource type="SIMPLE"><br /><property value="${driver}" name="JDBC.Driver"/><br /><property value="${url}" name="JDBC.ConnectionURL"/><br /><property value="${username}" name="JDBC.Username"/><br /><property value="${password}" name="JDBC.Password"/><br /></dataSource><br /></transactionManager><br /><sqlMap resource= ~CCC<br />"org/apache/ibatis/jgamestore/persistence/sqlmapdao/sql/Product.xml"/><br /></sqlMapConfig><br /><br />다음으로 트랜잭션 관리자를 설정하자. 우리의 목적에 따라, 가장 쉬운 트랜잭션 관리자인 JDBC 타입을 사용할 것이다. JDBC 타입을 사용한다는 것은 SQL Maps가 표준 Connection 객체의 commit 과 rollback 메서드를 사용한다는 의미이다. 트랜잭션 구분은 서비스 계층에서 처리할 것이기 때문에 이 설정 파일이 더 중요해진다. 어쨌든 iBATIS DAO에서 트랜잭션 관리자를 제대로 작동시키려면 이 트랜잭션 관리자를 설정해야 한다.<br />transactionManager 안의 데이터 소스는 트랜잭션 관리자가 커넥션을 가져올 때 사용할 JDBC 데이터 소스를 정의한다. iBATIS가 데이터 소스 커넥션 풀을 처리하도록 할 것이기 때문에, SIMPLE 타입으로 지정하였다. 그 다음에 <property> 태그를 사용하여 드라이버와 접속 URL, 사용자명 그리고 비밀번호를 지정하였다. 각각의 <property> 태그는 ${…} 표기법을 사용하여 database.properties 파일에서 값을 가져다 쓴다.<br />마지막으로 설정할 요소는 <sqlMap> 요소이다. 이 요소로 SQL Map 파일들의 위치를 지정한다. iBATIS가 처음으로 호출될 때마다, 설정한 SQL Map 파일들과 그 내용을 메모리에 적재하여 필요할 때 SQL 구문을 실행할 수 있도록 한다.<br /><br />14.8.2 SQL Map<br />카테고리 제품 목록을 가져오는 SQL 호출 구문을 저장하는 SQL Map 파일을 만들어야 한다. 이름은 Product.xml 이라고 짓고, Product 객체를 위한 typeAlias, 결과를 캐싱할 캐시 모델 그리고 실행할 select SQL을 저장하는 select 매핑 구문을 정의해야 한다.<br /><sqlMap namespace="Product"><br /><typeAlias<br />alias="product"<br />type="org.apache.ibatis.jgamestore.domain.Product"/><br /><cacheModel id="productCache" type="LRU"><br /><flushInterval hours="24"/><br /><property name="size" value="100"/><br /></cacheModel><br />…<br /><select<br />id="getProductListByCategory" resultClass="product"<br />parameterClass="string" cacheModel="productCache"><br />SELECT<br />PRODUCTID,<br />NAME,<br />DESCRIPTION,<br />IMAGE,<br />CATEGORYID<br />FROM PRODUCT<br />WHERE CATEGORYID = #value#<br /></select><br />…<br /></sqlMap><br />typeAlias 요소는 Product 도메인 클래스의 완전한 클래스 이름에 대한 별칭을 지정한다. 여기서 지정한 별칭은 product 이다. 이를 사용하면 Product 도메인 객체를 참조할 때마다 완전한 클래스 이름을 기입할 필요가 없어져서 타이핑이 줄어든다.<br />예제 캐시 모델은 간단하게 만들 것이다. 캐시 타입은 LRU이고 이름은 productCache라고 설정할 것이다. LRU 캐시는 잠재적으로 오랫동안 지속될 수 있기 때문에 <flushInterval> 요소를 사용하여 24시간 이상은 절대로 붙들려 있지 않게 하였다. 이렇게 하면 애플리케이션에서 상대적으로 새로운 데이터를 유지하게 할 수 있다. LRU의 크기는 productCache 캐시 모델이 100개의 서로 다른 결과를 저장할 수 있을 만큼으로 지정하였다. 사이트의 트래픽이 높아지면, 최소한 하루 한 번의 의무적인 캐시 비우기로 성능을 계속 유지할 수 있을 거라고 확신한다.<br />그 다음으로 select 요소가 나온다. Select 요소에 SQL 이 하는 일을 나타낼 만한 이름으로 id 속성값을 지정해주었다. Id가 길어지는 것을 두려워할 필요는 없다. 길면 select요소 내의 SQL이 하는 역할을 더욱 명확하게 나타낼 수 있다. 이번 경우에는 id 값으로 getProductListByCategory(“카테고리에 따라 제품의 목록을 가져오라”는 의미)를 지정하였다. 이 SQL은 틀림없이 지정된 카테고리를 기반으로 해서 List를 반환할 것이다.<br />위에서 정의한 typeAlias를 사용하여, select 구문의 resultClass를 product로 지정하였다. 비록 데이터 접근 객체에서 이 select 구문을 실행하여 목록을 얻어오지만, 반환 결과로 List를 지정하지는 않는다는 점에 주의하라. 이렇게 하는 이유는 동일한 select구문을 사용하여 한 개의 Product 객체를 반환받을 수도 있기 때문이다. 이름을 getProductListByCategory라고 지었기 때문에 이렇게 하는 것이 불합리하게 느껴질수 도 있다. 하지만 select 구문이 여러 목적을 가지고 단일 객체나 객체의 List를 반환하는 상황도 있을 수 있다.<br />이 select 구문의 parameterClass는 string 별칭(기본적으로 정의돼 있는 것이다)을 사용한다. 이미 예상했겠지만, 이 별칭은 String 객체를 나타낸다. 또한 사용자 정의 별칭을 사용해서 parameterClass 속성을 지정할 수도 있다.<br />Select 구문에서 사용한 마지막 속성은 cacheModel 이다. 이 속성은 앞에서 정의한 productCache 캐시 모델을 참조한다. cacheModel을 명시하여 쿼리 결과로 가져온 모든 카테고리 제품 목록이 캐싱될 것임을 보장할 수 있다. 이를 통해 속도 향상과 불필요한 데이터베이스 접근을 줄여주는 효과를 얻을 수 있다.<br />다음 단계는 SQL 문장으로 select 요소의 내용을 채우는 것이다. 예제의 select 구문은 select 요소에 설정한 대로 product 테이블에서 레코드의 결과섯을 가져다가 Product 객체의 목록에 매핑한다.<br />일단 sql-map-config.xml 파일, 별칭과 캐시 모델, select 구문 설정을 모두 마치고 나면 이제는 자바 코드에서 iBATIS API를 사용할 준비가 다 된 것이다. SQL Map을 사용하여 ProductDao 인터페이스의 구현체를 작성할 것이다.<br /><br />14.8.3 인터페이스와 구현체<br />애플리케이션에서 계층 간의 작업을 할 때는 인터페이스를 기반으로 코딩하는 것이 좋은 방법이다. 이 예제에서는 서비스 계층과 데이터 접근 계층 사이에서 작업을 하고 있다. 서비스 계층은 항상 DAO 인터페이스와만 소통하고 DAO 구현체에 대해서는 몰라야 한다. 이 경우는 아래에서 보다시피 아무런 차이가 없다.<br />public interface ProductDao {<br />PaginatedList getProductListByCategory(<br />String categoryId);<br />…<br />}<br /><br />CatalogService 클래스에서 사용할 ProductDao 인터페이스를 만들었다. CatalogService는 ProductDao 인터페이스와 소통하기 때문에, 실제 구현체가 어떤지에 관해서는 신경쓰지 않는다. ProductDao에서는 CatalogService가 사용할 수 있는 getProductListByCategory 메서드를 정의해야 한다. 반환타입은 PaginatedList이고 메서드의 시그너처는 String 타입의 categoryId로 구성돼 있다.<br />public class ProductSqlMapDao<br />extends BaseSqlMapDao<br />implements ProductDao {<br />…<br />public ProductSqlMapDao(DaoManager daoManager) {<br />super(daoManager);<br />}<br />…<br />public PaginatedList getProductListByCategory(<br />String categoryId<br />) {<br />return queryForPaginatedList(<br />"Product.getProductListByCategory",<br />categoryId, PAGE_SIZE);<br />}<br />…<br />}<br /><br />Org.apache.ibatis.jgamestore.persistence.sqlmapdao 패키지의 ProductSqlMapDao가 ProductDao의 구현체이다. ProductSqlMapDao는 BaseSqlMapDao를 상속받고, BaseSqlMapDao는 SqlMapDaoTemplate을 상속받는다. SqlMapDaoTemplate은 iBATIS SQL Map의 기반 클래스이다. 이 클래스는 SQL Map XML 파일에 정의된 SQL을 호출할 때 사용하는 메서드들을 포함하고 있다. ProductSqlMapDao 클래스의 getProductListByCategory 메서드 구현에서 queryForPaginatedList 메서드를 사용한다. queryForPagenatedList를 호출할 때는 명명공간과 실행하고자 매핑 구문의 이름(예를 들어 Product.getProductListByCategory), 결과를 가져오고자 하는 카테고리의 categoryId, 반환 받아서 화면에 출력할 목록의 페이지 크기를 파라미터로 넘겨준다.Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-38985733872541336722011-06-08T23:48:00.000-07:002011-06-08T23:49:34.102-07:00iBATIS in Action (13/14)13. iBATIS 최적 활용 기법<br /><br /><br />13.1. iBATIS 에서 단위 테스트하기<br />단위 테스트는 현대 소프트웨어 개발 방법에서 매우 중요한 사항이 되었다. 비록 여러분이 익스트림 프로그래밍 혹은 그 외의 다른 애자일 개발 방법론의 장점에 대해 동의하지 않더라도 단위 테스트는 소프트웨어 개발 생명주기에서 주춧돌이 되는 기법으로 사용해야 한다.<br />개념적으로 퍼시스턴스 단(tier)은 세 개의 계층으로 분리된다. 그림에서 보듯이 iBATIS는 각 계층들에서 단위 테스트를 쉽게 할 수 있게 해준다.<br /> <br />그림 13 1. 퍼시스턴스에 직접적으로 관련된 전형적인 계층들을 보여준다(퍼시스턴스와 관련 없는 계층은 이 그림에 없다).<br />iBATIS는 각 계층에서 최소한 세 가지 방법으로 테스트를 용이하게 해준다.<br /> 매핑과 SQL 구문 그리고 매핑된 도메인 객체를 포함한 매핑 계층 자체를 테스트한다.<br /> DAO 계층을 테스트하여 DAO에 있을 수 있는 퍼시스턴스 고유의 로직을 테스트하도록 한다.<br /> DAO 의 소비 계층 내부에서 테스트한다.<br /><br />12.5.2 매핑 계층 단위 테스트<br />이 테스트는 일반적으로 대부분의 애플리케이션에 존재하는 단위 테스트의 최하위 수준이다. 이 과정에서 SQL 구문과 이 구문에 매핑된 도메인 객체를 테스트한다. 이것은 테스트를 하려면 데이터베이스의 인스턴스가 필요함을 의미한다.<br /><br />- 테스트용 데이터베이스 인스턴스<br />테스트용 데이터베이스 인스턴스는 Oracle 이나 마이크로소프트 SQL Server와 같이, 개발자가 실제로 사용하는 데이터베이스에서 실행되는 인스턴스일 것이다. 개발자의 환경이 단위 테스트에 적합하다면 준비하고 실행하는 것은 간단히 끝날 것이다. 저장 프로시저 같은 비표준 데이터베이스 기능을 사용할 경우에는 실제 데이터베이스를 사용할 필요가 있다. 저장 프로시저나 다른 데이터베이스로 이식 가능하지 않은 데이터베이스 설계를 선택하면, 실제 데이터베이스 인스턴스를 사용하는 것을 제외한 다른 방식으로는 데이터베이스 단위 테스트를 수행하기가 어려워진다.<br />실제 데이터베이스 인스턴스를 사용할 때의 단점은 단위 테스트가 네트워크에 연결돼 있을 때만 실행할 수 있다는 점이다. 대신, 로컬에 데이터베이스 인스턴스를 설치해서 사용할수도 있지만 단위 테스트를 실행하기 전에 추가적인 로컬 환경 설정 작업이 필요하게 된다. 어떤 방식을 선택하든지 간에 실제 데이터베이스를 사용하는 것은 테스트 스위트(suite)나 각각의 단위 테스트 사이 사이에서 테스트 데이터 혹은 스키마까지도 재구축해야 하는 문제에 직면할 수밖에 없다. 이렇게 작업하면 비록 대용량의 기업용 데이터베이스 서버를 사용하더라도 굉장히 느리게 수행된다. 다른 문제점으로, 중앙 집중적인 데이터베이스의 경우 여러 개발자들이 동시에 단위 테스트를 실행하면 충돌이 발생할 수도 있다. 그러므로 개발자별로 스키마를 분리해서 각각의 테스트가 서로 영향을 끼치지 않아야 할 것이다. 보다시피 이 방식의 일반적인 문제점은 단위 테스트가 꽤 큰 규모의 인프라스트럭처의 일부분에 의존한다는 점에 있다. 이것은 경험 많은 테스트 주도 개발자들이 보기에는 이상적이지 않다.<br />자바 개발자들은 운 좋게도, 상대적으로 표준적인 데이터베이스 설계의 단위 테스트를 매우 쉽게 실행할 수 있는 훌륭한 메모리 기반 데이터베이스를 최소한 한 개는 가지고 있다. HSQLDB는 전적으로 자바로 작성된 메모리 기반 데이터베이스이다. 이 데이터베이스를 작동시키기 위해서는 디스크상에 어떠한 파일도 만들 필요가 없고 네트워크 접속도 불필요하다. 게다가 Oracle이나 마이크로소프트 SQL Server 같은 전형적이 데이터베이스에서 대부분의 데이터베이스 설계를 그대로 가져다가 생성해서 쓸 수 있다. 비록 설계가 복잡하여(저장 프로시져처럼) 전체 데이터베이스를 다시 생성할 수는 없더라도 거의 대부분을 재생성하는 것이 가능하다. HSQLDB를 사용하면 스키마와 테스트 데이터를 포함하는 데이터베이스 재구축을 매우 빠르게 수행할 수 있다. iBATIS 자체를 위한 단위 테스트는 HSQLDB를 사용하고 각각의 개별적인 테스트마다 스키마와 테스트 데이터를 다시 생성한다. 우리는 개인적으로 데이터베이스에 의존적인 1,000개 정도되는 테스트들의 테스트 스위트를 HSQLDB를 사용하여 30초 이내에 테스트하였다. HSQLDB에 대한 자세한 정보는 http://hsqldb.sourceforge.net 에서 볼 수 있다. 마이크로소프트 .NET 개발자들도 대안으로 메모리 기반 데이터베이스 제품을 만드는 것뿐만 아니라 HSQLDB를 포팅하려는 시도가 이뤄지고 있음을 안다면 행복해 할 것 같다.<br />- 데이터베이스 스크립트<br />이제 데이터베이스 인스턴스는 해결되었으니, 스키마와 테스트 데이터에 관해서는 뭘 해줘야 할까? 개발자들은 아마도 데이터베이스 스키마와 테스트데이터를 생성하는 스크립트들을 만들 것이다. 스크립트들을 버전 관리 시스템(CVS나 서브버전 등)에 등록해 두었다면 더 좋다. 스크립트들은 애플리케이션에서 여느 다른 코드들처럼 다루어진다. 비록 개발자가 데이터베이스에 대한 제어 권한이 없다 하더라도 권한이 있는 누군가가 정기적으로 수정을 하고 있어야 한다. 애플리케이션의 소스 코드와 데이터베이스 스크립트는 항상 동기화가 되어 있어야 하고, 거기에 있는 단위 테스트들도 확실히 동기화를 시켜야 한다. 단위 테스트 스위트를 실행할 때마다 스크립트를 실행하여 데이터베이스 스키마를 생성해야 한다. 이 방법을 사용하면 버전 관리 시스템에 새로운 데이터베이스 생성 스크립트들을 커밋하고서 변경된 사항들이 애플리케이션에 문제를 일으키지는 않는지 테스트해 볼 수 있다. 이게 이상적인 상황이다. 테스트를 실행하기 위해 HSQLDB 같은 메모리 기반 데이터베이스를 사용하면 스키마를 변환하는 추가 작업이 필요할 수도 있다. 수작업에 의한 오류를 피하고 통합 작업시간을 줄이려면 이 변환 작업을 자동화하도록 하라.<br />- iBATIS 설정파일 (SqlMapConfig.xml)<br />단위 테스트를 하려는 목적으로, 여러분은 iBATIS 설정 파일을 분리해서 사용하고자 할 것이다. 이 설정 파일은 데이터 소스와 트랜잭션 관리자를 다룬다. 이 설정은 테스트 환경과 운영 환경에서 매우 크게 차이가 나는 부분이다. 예를 들어 운영할 때는 J2EE 애플리케이션 서버 같은 관리 시스템 환경하에 놓이게 된다. 운영 환경에서는 아마도 JNDI에서 DataSource 인스턴스를 가져올 것이다. 또한 운영시에는 글로벌 트랜잭션을 사용할 수도 있다. 하지만 테스트 환경에서는 서버상에서 실행하지 않을 것이고 DataSource 설정도 간단하며 로컬 트랜잭션을 사용할 것이다. 테스트와 운영 환경의 설정 정보를 독립적으로 설정하는 가장 쉬운 방법은, 운영 설정 파일과 동일한 모든 SQL 매핑 파일을 참조하는 또 하나의 iBATIS 설정 파일을 사용하는 것이다.<br />- iBATIS SqlMapClient 단위 테스트<br />이제 데이터베이스 인스턴스, 자동화된 데이터베이스 빌드 스크립트 그리고 테스트용 설정 파일을 포함하여 미리 준비해야 할 것들을 모두 마련했으니 단위 테스트를 작성할 준비가 다 됐다. 다음은 JUnit을 사용하여 간단한 단위 테스트를 만드는 예를 보여준다.<br />public class PersonMapTest extends TestCase {<br />private SqlMapClient sqlMapClient;<br />public void setup () {<br />sqlMapClient = SqlMapClientBuilder.<br />build("maps/TestSqlMapConfig.xml");<br />runSqlScript("scripts/drop-person-schema.sql");<br />runSqlScript("scripts/create-person-schema.sql");<br />runSqlScript("scripts/create-person-test-data.sql");<br />}<br />public void testShouldGetPersonWithIdOfOne() {<br />Person person = (Person) sqlMapClient.<br />queryForObject("getPerson", new Integer(1));<br />assertNotNull("Expected to find a person.", person);<br />assertEquals("Expected person ID to be 1.",<br />new Integer(1), person.getId());<br />}<br />}<br /><br />위의 예제는 자바용 단위 테스트 프레임워크인 JUnit 을 사용한다.(JUnit에 관해서는 www.junit.org 에서 더 많은 정보를 얻을 수 있다. .NET 프레임워크용으로 유사한 도구가 있는데 그 중 하나로 NUnit이 있고 www.nunit.org 에서 관련 정보를 찾을 수 있다). Setup 메서드에서 데이터베이스 테이블을 삭제한 뒤 다시 생성하고서 데이터를 재구축하였다. 테스트별로 모든 것을 재구축함으로써 다른 테스트의 영향을 받지 않도록 보장할 수 있다. 하지만 이 접근 방식은 Oracle이나 SQL Server 같은 RDBMS에서 사용하기엔 너무 느리다. 속도가 문제가 되는 경우에는 HSQLDB 같은 RDBMS에서 사용하기엔 너무 느리다. 속도가 문제가 되는 경우에는 HSQLDB 같은 메모리 기반 데이터베이스를 고려하라. 실제 테스트 케이스에서 레코드 하나를 가져와서 빈즈에 매핑하고 빈즈에 들어 있는 값이 우리가 기대했던 값과 같은지 확인한다.<br />이상이 매핑 계층을 테스트하는데 필요한 모든 것이다. 테스트할 필요가 있는 다음 계층은 DAO계층이다. 여기서는 애플리케이션이 DAO 계층을 포함하고 있다고 가정한다.<br /><br />13.1.2 데이터 접근 객체(DAO) 단위 테스트하기<br />데이터 접근 객체 계층은 추상 계층이다. 추상 계층의 특성 때문에 DAO는 테스트하기 쉬울 것이다. DAO 는 또한 DAO 계층을 사용하는 부분의 테스트도 쉽게 만든다. 이번 절에서는 DAO 자체의 테스트에 대해 공부할 것이다. DAO는 일반적으로 인터페이스와 구현체로 분리돼 있다. DAO를 직접 테스트할 것이기 때문에 여기서 인터페이스의 역할은 없다. 테스트 목적으로 DAO 구현체를 사용해서 직접 작업할 것이다. 이렇게 하면 DAO 디자인 패턴의 사용법을 거스르는 것처럼 보이겠지만, 이게 바로 단위 테스트의 멋진점이다. 우리가 시스템 밖에서 나쁜 짓을 해도 그냥 내버려 둘 것이다!<br />DAO 레벨에서 테스트할 때는 가능하면 데이터베이스나 하부 인프라스트럭처를 사용하지 말아야 한다. DAO 계층은 퍼시스턴스 구현체를 위한 인터페이스이다. 하지만 DAO를 테스트할 때는 DAO 내부에 무엇이 있는지 테스트하는 것이지, DAO 외부에 있는 것을 테스트하려는 것이 아니다.<br />DAO 테스트의 복잡도는 오로지 DAO 구현체에 전적으로 달려 있다. 예를 들어 JDBC DAO를 테스트하는 것은 상당히 힘이 든다. Connection, ResultSet, PreparedStatement 등과 같은 전형적인 JDBC 컴포넘트들을 대체할 훌륭한 모의 객체 프레임워크가 필요한 것이다. 모의 객체 프레임워크가 있다고 하더라도 모의 객체의 복잡한 API를 관리하려면 많은 노력이 들어간다. iBATIS의 SqlMapClient 인터페이스의 모의 객체가 더 쉽다. 자, 한번 시도해보자.<br /><br />- 모의 객체로 DAO 단위 테스트하기<br />모의 객체란 단위 테스트를 목적으로 실제 구현체를 대신해 사용하는 객체이다. 모의 객체는 일반적으로 많은 기능을 가지고 있지 않다. 모의 객체는 한 가지 경우만을 만족시킴으로써 단위 테스트가 추가적인 복잡성에 대한 걱정 없이 몇 가지 다른 영역에 집중할 수 있도록 해준다. 우리는 이번 예제에서 모의 객체를 사용하여 DAO 계층을 테스트하는 방법을 보여줄 것이다.<br />이 예제에서는 간단한 DAO를 사용한다. 트랜잭션 같은 것에 대해 신경쓰지 않도록 하기 위해서, 여기서는 iBATIS의 DAO 프레임워크를 사용하지 않을 것이다. 이 예제의 목적은 개발자가 어떤 종류의 DAO 프레임워크를 사용하는지에 관계 없이, DAO 계층을 테스트하는 것을 보여주려는 것이다.<br />첫째로 테스트하려는 DAO를 생각해보자. 다음은 13.1.1 절의 예제와 유사한 SQL Map을 호출하는 SqlMapPersonDao 구현체를 보여준다.<br />public class SqlMapPersonDao implements PersonDao {<br />private SqlMapClient sqlMapClient;<br />public SqlMapPersonDao(SqlMapClient sqlMapClient) {<br />this.sqlMapClient = sqlMapClient;<br />}<br />public Person getPerson (int id) {<br />try {<br />return (Person)<br />sqlMapClient.queryForObject("getPerson", id);<br />} catch (SQLException e) {<br />throw new DaoRuntimeException(<br />"Error getting person. Cause: " + e, e);<br />}<br />}<br />}<br />위에서 어떻게 SqlMapClient를 DAO의 생성자에 넣었는지 주의해서 보라. 이 방식은 DAO의 단위 테스트를 쉽게 할 수 있게 해준다. SqlMapClient 인터페이스의 모의 객체를 넘겨주면 되기 때문이다. 분명히 이 예제는 간단하고 별로 테스트할 것도 없어 보인다. 하지만 모든 테스트에는 의미가 있다. 다음에서 SqlMapClient의 모의 객체를 생성하고 getPerson() 메서드를 테스트하는 단위 테스트를 볼 수 있다.<br />public void testShouldGetPersonFromDaoWithIDofOne() {<br />final Integer PERSON_ID = new Integer(1);<br />Mock mock = new Mock(SqlMapClient.class);<br />mock.expects(once())<br />.method("queryForObject")<br />.with(eq("getPerson"),eq(PERSON_ID))<br />.will(returnValue(new Person (PERSON_ID)));<br />PersonDao daoSqlMap =<br />new SqlMapPersonDao((SqlMapClient) mock.proxy());<br />Person person = daoSqlMap.getPerson(PERSON_ID);<br />assertNotNull("Expected non-null person instance.",<br />person);<br />assertEquals("Expected ID to be " + PERSON_ID,<br />PERSON_ID, person.getId());<br />}<br /><br />위의 예제는 JUnit 과 자바용 모의 객체 프레임워크인 jMock을 사용한다. 굵은 글씨체 부분에서 볼 수 있듯이 jMock으로 SqlMapClient 인터페이스의 모의 객체를 생성하면, 실제 SqlMapClient 나 함께 사용할 SQL XML 그리고 데이터베이스 등에 대한 걱정없이 DAO의 행위를 테스트 할 수 있게 된다. jMock은 편리한 도구로 www.jmock.org에서 더 많이 배울 수 있다. 이미 예상했겠지만 NMock이라고 불리는 .NET용 모의 객체 프레임워크도 있으며 http://nmock.org에서 찾아볼 수 있다.<br /><br />13.1.3 DAO 소비자 계층 단위 테스트 하기<br />애플리케이션에서 DAO를 사용하는 또 다른 계층을 소비자(consumer)라고 부른다. DAO 디자인 패턴을 사용하면 퍼시스턴스 계층의 모든 기능을 구현할 필요 없이 이 소비자의 기능을 테스트할 수 있게 된다. 좋은 DAO 구현체는 사용 가능한 기능을 설명해줄 수 있는 인터페이스를 가지고 있다. 소비자 계층을 테스트할 수 있는 열쇠가 바로 이 인터페이스의 존재이다. 다음의 인터페이스를 살펴보자. 윗 절에 나왔던 getPerson() 메서드를 알아 볼 수 있을 것이다.<br />public interface PersonDao extends Dao {<br />Person getPerson(Integer id);<br />}<br /><br />위의 인터페이스가 DAO 계층의 소비자 테스트를 시작하는 데 필요한 전부이다. 인터페이스의 완전한 구현체는 필요 없다. jMock을 사용하면 getPerson() 메서드의 행동을 쉽게 예측한 대로 흉내낼 수 있다. PersonDao 인터페이스를 사용하는 서비스를 살펴보자.<br />public class PersonService {<br />private PersonDao personDao;<br />public PersonService(PersonDao personDao) {<br />this.personDao = personDao;<br />}<br />public Person getValidatedPerson(Integer personId) {<br />Person person = personDao.getPerson(personId);<br />validateAgainstPublicSystems(person);<br />validateAgainstPrivateSystems(person);<br />validateAgainstInternalSystems(person);<br />return person;<br />}<br />}<br /><br />단위 테스트의 대상은 DAO가 아니라 getValidatedPerson() 메서드가 수행하는 다양한 유효성 검사 같은 로직이다. 각 유효성 검사 메서드는 아마도 private 일 것이고, 논지를 벗어나지 않기 위해 여기서는 그냥 private 인터페이스만을 테스트한다고 치자.<br />좀 전에 살펴본 PersonDao 인터페이스 덕분에 데이터페이스 없어도 이 로직을 테스트하는 것은 쉬울 것이다. 우리가 해야 하는 것은 PersonDao의 모의 객체를 만들어서 서비스의 생성자에 넘겨 주고 getValidatedPerson() 메서드만 호출하는 것뿐이다. 다음에서는 앞에서 설명한 그대로 처리하는 단위 테스트를 볼 수 있다.<br />public void testShouldRetrieveAValidatedPerson (){<br />final Integer PERSON_ID = new Integer(1);<br />Mock mock = new Mock(PersonDao.class);<br />mock.expects(once())<br />.method("getPerson")<br />.with(eq(PERSON_ID))<br />.will(returnValue(new Person(PERSON_ID)));<br />PersonService service =<br />new PersonService((PersonDao)mock.proxy());<br />service.isPersonalInformationValid(<br />new Person(new Integer(1)), new Integer(1));<br />assertNotNull("Expected non-null person instance.",<br />person);<br />assertEquals("Expected ID to be " + PERSON_ID,<br />PERSON_ID, person.getId());<br />assertTrue("Expected valid person.",<br />person.isValid());<br />}<br /><br />다시 JUnit과 jMock을 사용하였다. 위에서 보듯이 테스트 방식은 애플리케이션의 각 계층에서 일관적이다. 이렇게 하면 간단하고 관리하기 쉬운 단위 테스트에 집중하게 되어서 좋은 현상이라 할 수 있다.<br />여기까지 iBATIS에서의 단위 테스트에 대해 알아볼 만큼 알아보았다. 단위 테스트에 대한 일반적인 논의는 여러 곳에서 찾아볼 수 있다. 구글에서 “단위 테스트”로 검색해 봐라. 당신의 단위 테스트 스킬을 높여 줄 수 있는 많은 정보를 찾을 수 있으며, 아마도 여기서 설명한 것보다 더 나은 것도 발견할 수 있을 것이다.<br /><br />13.2. iBATIS 설정 파일 관리하기<br />지금쯤이면 iBATIS가 설정과 SQL 구문 매핑을 위해 XML을 사용한다는 것이 명확하게 기억 속에 있을 것이다. 이 XML 파일들은 순식간에 커져서 다루기가 어렵게 될 수 있다. 이번 절에서는 SQL 매핑 파일들을 다루는 몇가지 좋은 방법들을 공부해 볼 것이다.<br />13.2.1 클래스패스 안에 두기<br />위치 투명성(Location Transparency)은 애플리케이션의 유지 보수성 측면에서 매우 중요하다. 이 위치 투명성을 통해 애플리케이션의 테스트와 배포를 간단하게 할 수 있다. /usr/local/myapp/config/ 나 C:\myapp\ 같은 고정적인 파일 위치에서 애플리케이션을 자유롭게 유지하게 하는 것도 위치 투명성의 한 가지이다. iBATIS에서 특정 파일 위치를 사용할 수 있다고 하더라도, 클래스패스를 사용하는 것이 더 낫다. 자바 클래스패스는 애플리케이션을 어떤 특정한 파일 경로에 얽매이지 않게 해준다. 클래스패스를 애플리케이션에서 클래스로더를 사용하여 참조할 수 있는 작은 파일 시스템이라고 생각해도 된다.<br />클래스로더는 클래스패스에서 클래스와 다른 파일들 같은 리소스를 읽어들일 수 있다. 예제를 살펴보자. 클래스패스에 아래와 같은 파일 구조가 있다고 상상해보자.<br />/org<br />/example<br />/myapp<br />/domain<br />/persistence<br />/presentation<br />/service<br /><br />이 구조에서 완전한 클래스패스인 org/example/myapp/persistence를 사용하여 persistence 패키지를 참조할 수 있다. 매핑 파일을 둘만한 좋은 장소로 org/example/myapp/persistence/sqlmaps가 있겠다. 이것은 파일 구조에서 다음과 같이 보일 것이다.<br />/org<br />/example<br />/myapp<br />/domain<br />/persistence<br />/sqlmaps<br />SqlMapConfig.xml<br />Person.xml<br />Department.xml<br />/presentation<br />/service<br /><br />위 구조 대신에 설정 파일들을 좀 더 단순한 구조에 두길 원한다면 설정파일들만 별도로 둘 수 있다. 예를 들어 config/sqlmaps를 사용할 수 있겠다. 그러면 아래와 같은 형태가 될 것이다.<br />/config<br />/sqlmaps<br />SqlMapConfig.xml<br />Person.xml<br />Department.xml<br />/org<br />/example<br />/myapp<br />/domain<br />/persistence<br />/presentation<br />/service<br /><br />매핑 파일들을 클래스패스에 두면 iBATIS가 내장된 Resources 유틸리티 클래스를 이용해서 이 파일들을 쉽게 읽어들인다. Resources 클래스는 SqlMapBuilder와 호환되는 getResourceAsReader() 같은 메서드를 포함하고 있다. 위와 같은 형태의 클래스패스를 사용할 경우에는 다음과 같이 SqlMapConfig.xml 파일을 적재할 수 있다.<br />Reader reader = Resources<br />.getResourceAsReader("config/maps/SqlMapConfig.xml");<br /><br />만약 데이터베이스 리소스 설정을 고정된 파일 경로처럼 한 곳에서 관리하는 위치에 둬야 할 필요가 있는 환경이라 하더라도, 여전히 매핑 파일은 클래스패스에 두어야 할 것이다.<br />이 방법은 SqlMapConfig.xml은 고정된 경로에 두지만 매핑 파일들은 여전히 클래스패스에 두는 복합적인 접근 방식을 사용하라는 의미이다. 예를 들어 아래 구조를 생각해보자.<br />C:\common\config\<br />/sqlmaps<br />SqlMapConfig.xml<br />/config<br />/sqlmaps<br />Person.xml<br />Department.xml<br />/org<br />/example<br />/myapp<br />/domain<br />/persistence<br />/presentation<br />/service<br /><br />SqlMapConfig.xml 파일이 고정된 경로에 있다고 하더라도 내부적으로는 클래스패스의 XML 매핑 파일을 참조할 수 있다. 이로 인해 대부분의 리소스를 원하는 곳에 두고 부적절한 매핑 파일이 애플리케이션과 함께 배포될 가능성을 낮춰준다.<br /><br /><br />13.2.2 파일들을 함께 두자<br />매핑 파일들을 함께 둬라. 파일들을 클래스패스가 아닌 다른 곳에 이리저리 두는 행위를 삼가해라. 사용하는 클래스가 위치한 곳이나 다른 패키지에 별도로 매핑 파일을 두지 말라. 그렇게 하면 설정이 복잡해지고 어떤 매핑 파일들을 사용해야 할지 알기 어렵게 된다. 매핑 파일이 내부적으로 구조화되어 있기 때문에 추가적으로 분류하는 작업은 필요하지 않다. 파일 이름을 현명하게 짓고 XML 파일들을 한 디렉터리에 두도록 하라. 클래스를 매핑 파일과 같은 디렉터리(예를 들면 같은 패키지)에 두지말고 다른 XML 파일들과 섞이게 하지말라.<br />이렇게 하는 것은 일반적으로 매핑 파일과 프로젝트를 찾아보기 수월하게 해준다. 파일을 어디에 두더라도 iBATIS 프레임워크에게는 아무 상관이 없다. 하지만 동료 개발자에게는 많은 영향을 끼칠 것이다.<br /><br />13.2.3 리턴타입 별로 정리하라<br />매핑 파일을 어떻게 정리하는가에 대한 가장 일반적인 질문으로, 무엇을 기준으로 정리하는가 하는 문제가 있다. 데이터베이스 테이블을 기준으로 정리할까? 클래스를 기준으로 하는 것은 어떨까? 어쩌면 SQL 구문 타입별로 정리하는 것은?<br />답은 “개발환경에 따라 다르다” 이다. 비록 ‘정확한’ 답이 없긴 하지만 그렇다고 맘대로 하지는 말라. iBATIS는 매우 유연해서 나중에 언제든지 SQL 구문을 이동시킬 수 있다.<br />처음에는 매핑 구문의 리턴타입과 매핑 구문의 파라미터를 기준으로 정리해 보는 게 가장 좋다. 이 방법으로 대개 개발자가 찾고자 하는 것을 기준으로 잘 찾을수 있게 매핑을 정리할 수 있다. 예를들어 Person.xml 매핑 파일에서는 Person 객체(혹은 Person 객체의 컬렉션)를 반환하는 매핑 구문이나 Person 객체를 파라미터로 받는 매핑 구문(insertPerson 혹은 updatePerson 처럼)이 있을 거라 예상할 수 있다.<br /><br />13.3. 명명 규칙<br />iBATIS에는 이름을 지어줘야 하는 것이 매우 많을 수 있다. 매핑 구문, 결과 맵, 파라미터 맵, SQL Maps와 XML 파일들이 모두 이름을 필요로 한다. 따라서 이름을 짓는 데 특별한 규칙을 정해 놓는 것이 좋다. 여기서 한 가지 규칙을 논의할 것이지만 개발자 스스로가 규칙을 만드는 것에 주저하지 말라. 애플리케이션 내부에서 일관성 있게 사용하기만 한다면 문제될 것은 없다.<br /><br />13.3.1 매핑 구문의 이름 짓기<br />일반적으로 매핑 구문은 사용하는 프로그래밍 언어의 메서드 명명 규칙을 그대로 따른다. 따라서 자바 애플리케이션에서라면 loadPerson 혹은 getPerson 과 같은 매핑 구문명을 사용한다. C#에서라면 SavePerson 혹은 UpdatePerson과 같은 매핑 구문명을 사용한다. 이러한 규칙을 따르면 일관성 있게 유지보수할 수 있을 뿐만 아니라 메서드 바인딩 기능이나 코드 생성 도구들을 사용할 수 있게 해준다.<br /><br />13.3.2 파라미터 맵의 이름 짓기<br />대부분의 경우 파라미터 맵은 이름을 필요로 하지 않는다. 왜냐하면 명시적으로 파라미터 맵을 선언하는 것보다는 인라인 파라미터 맵을 사용하는 것이 훨씬 더 일반적이기 때문이다. SQL 구문의 특성상 파라미터 맵은 재사용할 가능성이 별로 없다. 일반적으로는 INSERT 구문과 UPDATE 구문에 동일한 파라미터 맵을 사용할 수 있다. 이러한 이유로 명시적으로 선언한 파라미터 맵을 사용한다면 Param 이라는 접미사를 파라미터 맵 이름 뒤에 붙여주기를 권한다. 예를 들어보자.<br /><br /><br />13.3.3 결과 맵 이름 짓기<br />결과 맵은 단일 클래스 타입과 결합되고 매우 빈번하게 재사용된다. 이러한 이유로 결과 맵은 결합되는 클래스 타입에 따라서 이름을 지으라고 권하고 있다. 또한 끝에 Result를 붙여준다. 예를 들어보자.<br /><resultMap id="PersonResult" type="com.domain.Person"><br /><br />13.3.4 XML 파일들<br />iBATIS에는 두 가지 종류의 XML 파일이 있다. 하나는 주 설정 파일이고 다른 하나는 SQL 매핑 파일이 있다.<br /><br />- 주 설정 파일<br />주 설정 파일은 원하는 어떤 이름이라도 붙일 수 있다. 그렇지만 우리는 SqlMapConfig.xml 이라고 짓기를 권장한다. 애플리케이션의 서로 다른 부분들에 대해 여러 개의 설정 파일을 만들고 싶다면 애플리케이션 모듈 이름을 접두사로 주어서 설정 파일 이름을 지으면 된다. 따라서 애플리케이션이 서로 다른 설정 파일을 사용하는 웹 클라이언트와 GUI 클라이언트로 구성돼 있다면 WebSqlMapConfig.xml 과 GUISqlMapConfig.xml 을 이름으로 사용할 수 있겠다. 또한 운영 환경이나 테스트 환경 처럼 어디에 배포를 하느냐에 따라서 다중 환경 설정을 가질 수도 있다. 이럴 경우에는 어떤 환경인지를 접두사로 지정하여 파일명을 정한다. 앞의 예제를 이어서 보자면 ProductionWebSqlMapConfig.xml과 TestWebSqlMapConfig.xml로 이름을 지을 수 있겠다. 이 이름들은 그 자체로 설명적이고 이러한 일관성 덕분에 여러 상이한 환경에서도 자동 빌드 기능을 구축하는 것이 가능해진다.<br /><br />- SQL 매핑 파일<br />SQL 매핑 파일의 이름을 어떻게 짓는가 하는 것은 매핑 구문을 어떻게 구성하느냐에 달려있다. 이 책의 초반에 매핑 구문을 리턴 타입과 파라미터에 따라서 서로 다른 XML 파일로 구성하기를 추천했었다. 그렇게 했다면 파일 이름을 지을 때 리턴 타입과 파라미터 이름을 따라서 지으면 효과적이다. 예를 들면 한 개의 XML 매핑 파일이 Person 클래스와 관련된 SQL 구문을 포함하고 있다면 매핑 파일 이름을 Person.xml 이라고 짓는 것이 적절할 것이다. 이 방법은 대부분의 애플리케이션에서 효과적인 명명법일 것이다. 하지만 고려사항 몇 가지가 더 있다.<br />반환하는 결과는 동일하지만 서로 다른 데이터베이스용으로 사용하는 여러가지 형태의 SQL 구문이 필요할 수도 있다. 대부분의 경우 SQL은 이식 가능한 방법으로 작성할 수 있다. 예를 들어 iBATIS를 이용해 작성된 초기의 JPetStore 애플리케이션은 11개의 서로 다른 데이터베이스에서 작동할 수 있다. 하지만 때로는 이식할 수는 없지만 문제 해결에 가장 적합한 데이터베이스 전용 기능을 구현해야 할 경우도 있다. 이러한 경우에는 매핑 파일의 이름에 해당 매핑 파일이 사용하는 데이터베이스의 이름도 포함시켜 지어도 되고 때로는 데이터베이스의 이름을 포함시켜 짓는 것이 매우 중요한 경우도 있다. 예를 들어 Person을 위한 Oracle 전용 파일을 가지고 있다면 이 파일의 이름을 OraclePerson.xml 이라고 지을 것이다. 또 다른 방법으로 각 데이터베이스별로 데이터베이스의 이름을 딴 별도의 디렉터리를 만드는 방법이 있다. 하지만 이런 방법에 너무 집착하지는 말라. 파일이나 디렉터리 이름을 명확하게 짓고 그 이름에 적합하게 Oracle에 특화된 기능을 가진 매핑 파일이 되도록 하면 된다. Oracle에 의존적인 SQL 구문이 단 한 개 뿐이라면 해당 구문이 Oracle 이라는 단어를 포함하도록 이름을 짓는 것이 나을 것이다.<br /><br />13.4. 빈즈, Map 혹은 XML?<br />iBATIS는 다양한 형태의 파라미터나 결과 매핑을 지원하다. 자바빈즈, Map(HashMap같은), XML 그리고 물론 원시 타입까지도 지원한다. 그럼 매핑 구문을 어디에 매핑해야 좋을까? 우리는 기본적으로 자바빈즈를 권장한다.<br /><br />13.4.1 자바빈즈<br />자바빈즈는 최고의 성능, 최대의 유연성 그리고 타입 안정성을 제공해준다. 자바빈즈는 프로퍼티 매핑을 할 때 간단한 저수준 메서드 호출을 사용하기 때문에 빠르다. 자바빈즈에 프로퍼티를 추가한다고 해서 성능이 저하되지 않으며 다른 것들보다 메모리도 효율적으로 사용한다. 자바빈즈를 선택하게 만드는 더욱 중요한 점은 타입 안정성 때문이다. 이 타입 안정성 덕분에 iBATIS가 데이터베이스에서 반환받는 값에 적절한 타입을 부여하고 정확하게 바인딩할 수 있게 된다. Map이나 XML을 사용하여 겪게 되는 추측에 의한 바인딩이 없어진다. 또한 자바빈즈를 사용하면 더 큰 유연성을 확보하게 되는데 이는 자바빈즈의 getter와 setter 메서드를 직접 작성하여 데이터를 세밀하게 조정할 수 있기 때문이다.<br /><br />13.4.2 Map<br />iBATIS에서는 두 가지 목적으로 Map을 지원하다. 첫째로 iBATIS는 Map을 사용하여 매핑 구문에 다양하고 복잡한 파라미터를 전송한다. 둘째로 가끔씩 데이터베이스에 있는 테이블이 단순히 Map-키와 값의 쌍-을 나타내기 때문이다.<br />하지만 Map은 형편없는 도메인 모델이다. 그러므로 비즈니스 객체를 표현하기 위해 Map을 사용해서는 안된다. 이것은 단지 iBATIS에 국한된 문제가 아니다. 어떤 퍼시스턴스 계층을 사용하든 간에 Map을 사용해서 도메인 모델을 나타내서는 안 된다. Map은 느리고 타입 안정성을 보장하지 않으며 자바빈즈보다 더 많은 메모리를 사용한다. 그리고 예측할 수 없는 행동을 하고 유지보수하기도 어렵다. 현명하게 판단해서 Map을 사용하라.<br /><br />13.4.3 XML<br />iBATIS는 데이터베이스로 보낼 때나 혹은 그로부터 값을 반환받을 때 문서 객체 모델(DOM)혹은 단순한 문자열 형태로 XML을 직접 사용할 수 있다. XML을 사용할 때는 다소 값에 제한이 있지만 데이터를 이식 가능하고 파싱 가능한 형태로 빨리 바꾸고자 하는 대체로 간단한 애플리케이션에서는 유용하게 사용할 수 있다.<br />하지만 Map과 마찬가지로 도메인 모델을 나타내는데 XML을 우선 순위로 고려해서는 안된다. XML은 모든 형태들 중에서 가장 느리고 타입 안정성도 가장 낮으며 메모리도 가장 많이 사용한다. XML은 데이터를 표현하는 가장 최종 상태(예를 들면 보통은 HTML)에 가장 가깝다. 하지만 그런 이점은 다루기 힘들고 시간이 지남에 따라 유지보수하기 어렵다는 대가를 치루게 한다. Map과 마찬가지로 현명하게 판단해서 XML을 사용하라.<br /><br />13.4.4 원시 타입 (primitives)<br />원시 타입은 iBATIS에서 직접적으로 파라미터나 결과 타입으로 사용할 수 있다. 두 경우 모두 원시타입을 사용하는 데 특별히 문제될 것은 없다. 원시타입은 빠르고 타입 안정성을 갖추고 있다. 당연히 데이터가 얼마나 복잡하냐에 따라 다소 제약을 받는다. 하지만 주어진 쿼리에 결과 행 수가 얼마인지를 세는 간단한 요구사항이 있을 때 정수 원시 타입은 좋은 선택이 될 수 있다. 요구사항만 만족시킨다면 원시 타입을 사용하는 데 주저할 것은 없다.Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-70847266575223422842011-06-07T23:18:00.001-07:002011-06-07T23:18:28.467-07:00iBATIS in Action (12/14)12. iBATIS 확장하기<br /><br />12.1. 플러그인 가능한 컴포넌트 설계 이해하기<br />플러그인 가능한 컴포넌트의 설계는 일반적으로 3개의 부분으로 구성된다.<br /> 인터페이스<br /> 구현체<br /> 팩토리(Factory)<br />인터페이스는 어떤 기능을 원하는지 설명하며, 모든 구현체가 따라야 하는 계약서와 같은 것이다. 다시 말해서 인터페이스는 수행할 기능이 ‘무엇’인지 설명한다.<br />구현체는 기능들을 어떻게 수행하는지 묘사하는 특정한 행위이다. 이는 써드파티 프레임워크나 혹은 고급 캐싱 시스템이나 애플리케이션 서버와 같은 대규모 인프라스트럭처에 의존할 수도 있다.<br />팩토리는 몇몇 설정을 기반으로 해서 인터페이스에 구현체를 바인딩하는 역할을 한다. 이것의 기본적인 개념은 애플리케이션이 프레임워크에 대해 단 하나의 일관섬있는 인터페이스 이외의 다른 것에는 의존하지 않는다는 점을 명확히 하는 것이다. 애플리케이션이 세부적으로 봤을 때 다른 구현체에 많이 의존한다면 프레임워크가 자신의 소명을 제대로 하지 못한다는 것을 의미한다.<br /> <br /><br />그림은 이 개념을 설명하고 있다. 화살표는 “~에 의존한다(depends upon)” 또는 적어도 “~를 알고 있다.(knows about)” 정도의 의미를 나타낸다.<br />앞에서 말했듯이, iBATIS는 iBATIS의 수많은 기능들을 확장할 수 있도록 플러그인 할 수 있는 컴포넌트 설계 방식을 지원한다. 하지만 이게 정확히 무슨 뜻일까? 보통 ‘플러그인’은 이전에 존재하지 않은 새로운 기능을 추가하거나 존재하는 기능을 다른 기능으로 대체하는 애플리케이션이나 프레임워크의 확장 기능이다. 대부분의 경우에 iBATIS의 확장은 이미 존재하는 기능을 대체하는 것과 관련돼 있다.<br />iBATIS는 계층적으로 설계되었으며, iBATIS는 모든 계층에 걸쳐서 개발자 스스로 기능을 확장할 수 있도록 지원하고 있다. 표에서는 iBATIS의 각 계층을 설명하고, 고수준의 관점에서 어떻게 확장할 수 있는지 간단히 설명했다.<br />확장 가능한 기능 확장 개요<br />TypeHandlerCallback 비표준 데이터베이스, 드라이버 그리고/또는 데이터 타입을 다루기 위한 사용자 정의 처리 로직을 구현한다.<br />CacheController 개발자가 만든 캐시 코드 또는 써드파티 캐싱 솔루션을 지원하기 위한 사용자 정의 CacheController를 구현한다.<br />DataSourceFactory 모든 표준적인 JDBC DataSource 구현체를 대체한다.<br />TransactionConfig 사용자의 환경에서 가장 잘 작동하는 사용자 정의 트랜잭션 관리자를 구현한다.<br />다음 절에서는 가장 일반적인 확장 타입인 TypeHandlerCallback을 시작으로 각각에 대해 좀 더 상세하게 알아볼 것이다.<br /><br />12.2. 사용자 정의 타입 핸들러로 작업하기<br />우리 모두가 관계형 데이터 베이스 관리 시스템이 표준화되길 바라지만, 운 나쁘게도 표준화가 안 돼 있다. 모든 RDBMS 시스템들은 자체적인 SQL 확장 기능을 구현하고, 자신만의 데이터 타입을 가지고 있다. 비록 대부분의 관계형 데이터베이스가 BLOB이나 CLOB같은 좀 더 공통적인 데이터 타입을 지원하긴 하지만, 각각의 드라이버는 서로 다른 방법으로 이를 처리한다. 따라서 iBATIS가 단 하나의 타입 핸들러 구현체만을 사용하여 모든 데이터베이스를 지원하기는 어렵다. 이러한 문제를 해결하기 위해, iBATIS는 특정 타입을 다루는 방법을 사용자가 정의하도록 허용하는 사용자 정의 타입 핸들러를 지원한다. 사용자 정의 타입 핸들러를 사용하면 iBATIS가 관계형 데이터베이스 타입을 자바 타입으로 매핑하는 방법을 직접 지정할 수 있다. 또한 개발자는 iBATIS 내장 타입 핸들러조차도 오버라이드할 수 있다. 이번 절에서 그 방법을 알아보자.<br /><br />12.2.1 사용자 정의타입 핸들러 구현하기<br />사용자 정의 타입 핸들러를 구현할 때는, 오직 기능의 일부분만 구현하면 된다. 이 기능은 TypeHandlerCallback이라고 불리는 매우 간단한 인터페이스에 정의돼 있다. 다음에서 인터페이스의 정의를 볼 수 있다.<br />public interface TypeHandlerCallback {<br />public void setParameter(<br />ParameterSetter setter, Object parameter)<br />throws SQLException;<br />public Object getResult(ResultGetter getter)<br />throws SQLException;<br />public Object valueOf(String s);<br />}<br /><br />TypeHandlerCallback의 구현체를 순서대로 살펴보자. 예제를 살펴보기 위해서, Boolean 값을 ‘YES’ 와 ‘NO’(각각 true와 false를 나타낸다.) 두 단어로 나타내는 데이터베이스가 있다고 가정하자. 다음 표에서 이 예제를 볼 수 있다.<br />UserID Username PasswordHashcode Enabled<br />1 Asmith 1190B32A35FACBEF YES<br />2 Brobertson 35FACBEFAF35FAC2 YES<br />3 cjohnson AF35FAC21190B32A NO<br /><br />이 테이블을 다음과 같은 클래스에 매핑한다고 생각해보자.<br />public class User {<br />private int id;<br />private String username;<br />private String passwordHashcode;<br />private boolean enabled;<br />// assume compliant JavaBeans properties<br />// (getters/setters) below<br />}<br /><br />여기서 데이터 타입이 서로 일치하지 않는 것에 주목하라. Enabled 칼럼이 자바 클래스에서는 Boolean 타입이지만 데이터베이스에서 YES 와 NO 값을 저장하는 VARCHAR이다. Boolean 타입에 YES나 NO 값을 직접 지정할 수는 없다. 그러므로 이것을 변환할 필요가 있다. 사실 JDBC드라이버도 변환을 자동으로 수행하지만, 이 경우는 못한다고 가정해보자.<br />TypeHandlerCallback의 목적은 이러한 상황을 다루는 것이다. 이제 이를 수행하는 구현체를 작성해보자.<br /><br />12.2.2 TypeHandlerCallback 생성하기<br />이미 본 것처럼, TypeHandlerCallback 인터페이스는 매우 간단하다. 우리가 할 일은 오직 인터페이스를 구현하는 클래스를 생성하는 것뿐이다. 멋지게 자신을 잘 나타내도록 클래스 이름을 지어주고 몇 가지 private 상수들도 생성하였다.<br />public class YesNoTypeHandlerCallback<br />implements TypeHandlerCallback {<br />private static final String YES = "YES";<br />private static final String NO = "NO";<br />public void setParameter(<br />ParameterSetter setter, Object parameter)<br />throws SQLException {<br />}<br />public Object getResult(ResultGetter getter)<br />throws SQLException {<br />}<br />public Object valueOf(String s) {<br />}<br />}<br /><br />이것은 타입 핸들러의 골격만 가진 구현체다. 다음 절에서 살을 붙여 나갈 것이다.<br />- 파라미터를 설정하기<br />데이터베이스에 값을 보낼 때는 값이 YES나 NO여야 한다. 이 경우 null은 유효하지 않다. 자바 클래스에서 true나 false라는 강력한 타입의 boolean값을 가져올 것이다. 따라서 true를 YES값으로 false를 NO 값으로 변환할 필요가 있다. 이를 위해 다음처럼 간단한 메서드를 사용할 수 있다.<br />private String booleanToYesNo(Boolean b) {<br />if (b == null) {<br />throw new IllegalArgumentException (<br />"Could not convert null to a boolean value. " +<br />"Valid arguments are 'true' and 'false'.");<br />} else if (b.booleanValue()) {<br />return YES;<br />} else {<br />return NO;<br />}<br />}<br />이제 파라미터 값을 지정하기 전에 이 메서드를 사용하여 변환할 수 있다. 파라미터 지정은 쉽게 할 수 있다. TypeHandlerCallback 인터페이스의 setParameter() 메서드는 두 개의 파라미터를 받아들인다. 첫 번째로 받는 ParameterSetter를 사용하여 다양한 setter 메서드에 접근할 수 있다. 각각의 setter 메서드는 서로 다른 데이터 타입에 대한 처리를 한다. 예를 들면 setString() 메서드, setInt() 메서드, setDate()메서드 등이 있다. 여기서 이를 모두 나열하려면 목록이 너무 길다. 하지만 개발자들이 알고 있는 거의 모든 자바 데이터 타입들이 그에 관련된 set 메서드를 가지고 있다고 생각하면 된다. 이번 경우에는 데이터베이스 테이블의 데이터 타입이 VARCHAR이기 때문에 ParameterSetter의 setString() 메서드를 사용할 것이다.<br />두번째 파라미터는 데이터베이스에 전달하는 변환될 필요가 있는 값이다. 우리의 경우, User 클래스의 enabled 프로퍼티로부터 Boolean 값을 가져올 것이다. 다음은 위에서 작성한 편리한 booleanToYesNo() 메서드를 사용하는 setParameter()메서드의 코드이다.<br />public void setParameter(<br />ParameterSetter setter, Object parameter<br />) throws SQLException {<br />setter.setString(booleanToYesNo((Boolean) parameter));<br />}<br />메서드의 내용은 단순히 ParameterSetter를 사용하여 변환 메서드를 통해 변환한 문자 값을 파라미터로 지정한다. TypeHandlerCallback이 모든 타입을 지원하는 인터페이스이기 때문에 파라미터로 받은 값을 boolean으로 형 변환해야 한다.<br />참 간단하게 끝났다. 그렇지 않을가? 다음 절에서 살펴보겠지만, 결과를 가져오는 것도 이만큼 쉽다.<br />- 결과 가져오기<br />데이터베이스로부터 ‘YES’ 나 ‘NO’ 값을 가져올 때는 이 값을 true나 false의 Boolean 타입의 값으로 변환해야 한다. 이것은 파라미터를 지정하는 것과 정확히 반대로 하는 것이다. 그렇다면 같은 방식으로 접근해보자. 다음과 같이 문자열 타입을 Boolean 타입으로 변환하는 메서드를 만들어보자.<br />private Boolean yesNoToBoolean(String s) {<br />if (YES.equalsIgnoreCase(s)) {<br />return Boolean.TRUE;<br />} else if (NO.equalsIgnoreCase(s)) {<br />return Boolean.FALSE;<br />} else {<br />throw new IllegalArgumentException (<br />"Could not convert " + s +<br />" to a boolean value. " +<br />"Valid arguments are 'YES' and 'NO'.");<br />}<br />}<br />이제는 이 메서드를 사용하여 데이터베이스에서 가져온 String 타입의 결과를 Boolean 타입의 값으로 변환할 수 있게 되었다. TypeHandlerCallback의 getResult() 메서드에서 새로운 변환 메서드를 호출하면 된다. getResult() 메서드는 ResultGetter라는 오직 하나의 파라미터만 받는다. ResultGetter는 서로 다른 타입의 값을 가져오는 메서드를 포함하고 있다. 우리의 경우, String 타입의 값을 가져올 필요가 있다. 다음은 getResult() 구현체의 코드이다.<br />public Object getResult(ResultGetter getter)<br />throws SQLException {<br />return yesNoToBoolean(getter.getString());<br />}<br /><br />이 경우 간단히 ResultGetter의 getString()을 호출해서 데이터베이스에서 문자열 값을 받는다. 그러고 나서는 그 반환받는 값을 간편한 변환 메서드(yesNoToBoolean())에 전달하면 이 메서드는 User 클래스의 enabled 프로퍼티에 값으로 지정할 수 있는 Boolean 값으로 변환해준다.<br /><br />- Null 다루기 – valueOf() 메서드는 왜 존재할까?<br />iBATIS는 null 값 변환 기능을 통해서 객체 모델에서 null이 가능한 타입(nullable type)을 사용하지 않고도 데이터베이스의 null값이 가능한 칼럼을 처리할 수있다. 이는 개발자에게 객체 모델이나 데이터베이스에 대한 완전한 설계 결정권이 없을 때 유용하다. 하지만 데이터베이스와 객체 모델을 매핑해야만 한다. 예를 들어 자바 클래스에 int 타입의 프로퍼티가 있다면 int는 null 값을 허용하지 않는다. 이 프로퍼티를 nullable 타입의 데이터베이스 칼럼에 매핑해야만 한다면, 그 때 null 값을 대신해서 상수 값을 사용해야 한다. 때로 이를 ‘매직 넘버’라고 부르기도 한다. 그리고 일반적으로 그다지 좋지 못한 방법이기도 하다. 하지만 가끔 이 방법 외의 다른 해결책이 없을 때도 있다. 그리고 때로는 이 방법이 가장 알맞을 경우도 있다.<br />iBATIS는 XML 파일을 사용해서 설정하기 때문에 null 값 대체는 문자열로 지정한다. 다음 예를 보자.<br /><result property=”enabled” column=”Enabled” nullValue=”NO”/><br />이러한 이유로, 실제 값으로 변환하는 일을 무언가가 수행해 줘야만 한다. iBATIS는 TypeHandlerCallback의 valueOf() 메서드에 이 변환 작업을 맡긴다. 위의 경우에서는 NO값을 boolean값 false로 변환해야 한다. 운 좋게도 이 작업은 보통 결과를 가져올 때 하는 변환과 매우 유사하다. 실제로 YesNoTypeHandlerCallback의 경우에는 두 가지가 완전히 동일하다. 따라서 이를 구현하면 다음과 같이 될 것이다.<br />public Object valueOf(String s) {<br />return yesNoToBoolean(s);<br />}<br />이게 전부다! 우리가 원하는 사용자 정의 타입 핸들러를 모두 완성했다! 다음에서 완전한 소스를 볼 수 있다.<br />public class YesNoTypeHandlerCallback<br />implements TypeHandlerCallback {<br />public static final String YES = "YES";<br />public static final String NO = "NO";<br />public void setParameter(<br />ParameterSetter setter, Object parameter<br />)<br />throws SQLException {<br />setter.setString(booleanToYesNo((Boolean)parameter));<br />}<br />public Object getResult(ResultGetter getter)<br />throws SQLException {<br />return yesNoToBoolean(getter.getString());<br />}<br />public Object valueOf(String s) {<br />return yesNoToBoolean(s);<br />}<br />private Boolean yesNoToBoolean(String s) {<br />if (YES.equalsIgnoreCase(s)) {<br />return Boolean.TRUE;<br />} else if (NO.equalsIgnoreCase(s)) {<br />return Boolean.FALSE;<br />} else {<br />throw new IllegalArgumentException (<br />"Could not convert " + s +<br />" to a boolean value. " +<br />"Valid arguments are 'YES' and 'NO'.");<br />}<br />}<br />private String booleanToYesNo(Boolean b) {<br />if (b == null) {<br />throw new IllegalArgumentException (<br />"Could not convert null to a boolean value. " +<br />"Valid arguments are 'true' and 'false'.");<br />} else if (b.booleanValue()) {<br />return YES;<br />} else {<br />return NO;<br />}<br />}<br />}<br /><br />이제 TypeHandlerCallback 을 모두 완성하였다. 이를 사용하려면 등록을 해줘야 한다. 다음 절에서는 등록을 다룰 것이다.<br /><br />12.2.3 TypeHandlerCallback을 등록해서 사용하기<br />TypeHandlerCallback을 사용하려면, 몇 가지 방법으로 사용할 위치와 시점을 명시해줘야 한다. 아래 세 가지 중에서 선택할 수 있다.<br />1. SqlMapConfig.xml 파일에 전역적으로 등록하기<br />2. 간단히 SqlMap.xml 파일에 지역적으로 등록하기<br />3. 단일 결과 매핑 혹은 파라미터 매핑에 등록하기<br />TypeHandlerCallback 을 전역으로 등록하려면 SqlMapConfig.xml 파일에 간단히 <typeHandler> 요소를 추가하면 된다. 다음은 <typeHandler> 요소의 완전한 예제이다.<br /><typeHandler<br />callback="com.domain.package.YesNoTypeHandlerCallback"<br />javaType="boolean" jdbcType="VARCHAR" /><br /><br /><typeHandler> 요소는 2개 또는 3개의 속성을 가지고 있다. 첫 번째는 TypeHandlerCallback 클래스 자체이다. 패키지 경로를 포함한 완전한 클래스 명을 간단히 명시하거나, 원한다면 타입 별칭을 사용하여 설정 파일을 좀 더 읽기 쉽게 할 수 있다. 두 번째는 TypeHandlerCallback이 다루어야 하는 자바 타입을 명시하는 javaType 속성이다. 마지막으로 세 번째 속성은 선택사항으로 TypeHandlerCallback 이 적용되는 JDBC (이를 테면 데이터베이스) 타입을 명시한다. 따라서 위의 경우에는, 자바 타입은 boolean이고 JDBC 타입은 VARCHAR로 지정하여 작업한다. 데이터 타입을 명시하지 않는다면 이 타입 핸들러는 기본적으로 모든 Boolean 타입에 적용될 것이다. 하지만 좀 더 상세하게 정의하면 어떤 타입 핸들러도 오버라이드 하지 않게 된다. 따라서 자바 타입과 JDBC 타입 모두에 가장 명확하게 일치하는 타입 핸들러 등록이 사용된다.<br />사용자 정의 타입 핸들러는 iBATIS의 확장 중에서 가장 일반적인 형태이다. 이는 대개 관계형 데이터베이스 시스템들이 폭넓게 비표준 기능과 데이터 타입을 지원하기 때문이다. 나머지 절에서는 많이는 안 쓰이지만 여전히 알아두면 유용한 다른 확장 기능 형태들을 공부할 것이다.<br /><br />12.3. CacheController 다루기<br />iBATIS는 많은 수의 내장 캐싱 구현체를 포함하고 있다. 이전 장에서 이미 다루었지만 다시 기억을 되살리기 위해 표에서 다양한 캐시 구현체를 요약해 보았다.<br />클래스 상세 설명<br />LruCacheController Least Recently Used(LRU) 캐시는 캐시된 항목들을 언제 마지막으로 접근했는지를 기준으로 감시한다. 새로운 항목을 캐싱하기 위해 공간이 필요하면 최근에 가장 오랫동안 사용하지 않은 캐시 항목을 삭제한다.<br />FifoCacheController First-In, First-Out (FIFO) 캐시는 캐시에서 가장 오래된 항목을 삭제해서 새로운 항목을 위한 공간을 만든다.<br />MemoryCacheController Memory 캐시는 자바 메모리 모델과 가비지 컬렉터를 사용하여 캐시된 항목을 삭제할지 여부를 결정한다.<br />OSCacheController OpenSymphony 캐시를 통해 OSCache라는 매우 고급 써드파티 캐싱 솔루션을 사용할 수 있다. OSCache 는 그 자체에서 다양한 캐시 모델을 제공해 주며 분산 캐싱 같은 고급 기능들도 제공한다.<br /><br />iBATIS는 CacheController라는 인터페이스를 제공하여 사용자 정의 캐싱 솔루션이나 기존에 존재하는 써드파티 캐싱 솔루션을 플러그인으로 만들 수 있도록 하고 있다.<br />CacheController 인터페이스는 상당히 단순하며 다음과 같다.<br />public interface CacheController {<br />public void configure(Properties props);<br />public void putObject(CacheModel cacheModel,<br />Object key, Object object);<br />public Object getObject(CacheModel cacheModel,<br />Object key);<br />public Object removeObject(CacheModel cacheModel,<br />Object key);<br />public void flush(CacheModel cacheModel);<br />}<br /><br />아래 몇 절에서 캐시를 구현하는 예제를 살펴볼 것이다. 이 예제는 전사적인 애플리케이션에서 사용할 수 있는 캐시 컨트롤러 작성법을 가르치려는 것이 아니다. 그저 Map을 사용한 간단한 캐싱 방법을 살펴볼 것이다. 고급 기능을 가진 써드파티 캐시를 플러그인 하는 것을 만드는 것이 좀 더 일반적일 것이다. 여기서 예로 든 캐시를 실제 애플리케이션의 캐싱 기법으로 사용하는 것은 추천하지 않는다.<br /><br />12.3.1 CacheController 생성하기<br />CacheController 구현은 설정으로 시작한다. 설정은 configure() 메서드를 구현해서 처리한다. 이 메서드는 자바의 Properties 인스턴스를 파리미터로 받는다. Properties 인스턴스에는 관련 설정 정보를 저장한다. 예제 캐시에서는 설정 프로퍼티는 필요없다. 하지만 객체를 저장할 Map은 필요할 것이다. 이제 예제 CacheController 의 구현을 시작해보자.<br />public class MapCacheController {<br />private Map cache = new HashMap();<br />public void configure(Properties props) {<br />// There is no configuration necessary, and therefore<br />// this cache will depend upon external<br />// flush policies (e.g. time interval)<br />}<br />// other methods implied …<br />}<br /><br />좋다. 이제 캐시 모델의 골격을 완성했으니, 나머지를 채워보자.<br /><br />12.3.2 CacheController의 저장, 가져오기, 삭제하기<br />현 시점에서는 캐시에 객체를 어떻게 추가할지에 대해 생각해 볼 수 있다. iBATIS Cache Model이 모든 키를 관리하고 다양한 매핑 구문 호출과 결과셋을 어떻게 구분할지를 결정한다. 따라서 캐시에 객체를 저장할 때는 키와 객체를 선택한 캐시 구현체에 전달하는 것만 해주면 된다.<br />여기 저장, 가져오기 그리고 삭제를 처리하는 메서드의 예가 있다.<br />public void putObject(CacheModel cacheModel, Object key,<br />Object object) {<br />cache.put (key, object);<br />}<br />public Object getObject(CacheModel cacheModel,<br />Object key) {<br />return cache.get(key);<br />}<br />public Object removeObject(CacheModel cacheModel,<br />Object key) {<br />return cache.remove(key);<br />}<br /><br />어떻게 각 메서드들에서 캐시를 제어하는 CacheModel 인스턴스에 접근할 수 있는지 주의해서 보라. 이를 통해 CacheModel 에 있는 필요한 모든 프로퍼티에 접근할 수 있다. Key 파라미터는 매핑 구문에 전달된 파라미터들을 비교하는 iBATIS의 특별한 클래스인 CacheKey의 인스턴스이다. 거의 모든 부분에서 key 객체를 어떤 방식으로도 관리할 필요는 없다. putObject()의 경우에는 object 파라미터가 캐싱할 객체의 컬렉션을 저장하고 있다.<br />CacheModel 에 필요한 마지막 메서드는 flush() 메서드이다. 이 메서드는 간단히 전체 캐시를 지워버린다.<br />public void flush(CacheModel cacheModel) {<br />cache.clear();<br />}<br /><br />바로 이것이, 한 마디로 말하자면 완전한 CacheController 구현체이다.<br />이제 CacheController를 어떻게 사용하는지 공부할 차례다.<br /><br />12.3.3 CacheController를 등록해서 사용하기<br />다른 모든 iBATIS 설정들과 마찬가지로 CacheModel 과 CacheController도 XML 설정 파일에서 설정한다. CacheModel 사용을 시작하는 가장 쉬운 방법은, 먼저 새로운 클래스에 대한 타입 별칭을 선언하는 것이다. 이를 통해 나중에 타이핑 횟수를 줄일 수 있다.<br /><typeAlias alias="MapCacheController"<br />type="com.domain.package.MapCacheController"/><br /><br />이제 타이핑 횟수를 줄였으니, 다른 캐시 모델 타입에서 했던 것처럼, 캐시 컨트롤러 타입을 <cacheModel> 정의에 적용할 수 있다. 예를 보자.<br /><cacheModel id="PersonCache" type="MapCacheController" ><br /><flushInterval hours="24"/><br /><flushOnExecute statement="updatePerson"/><br /><flushOnExecute statement="insertPerson"/><br /><flushOnExecute statement="deletePerson"/><br /></cacheModel><br /><br />이로써 사용자 정의 캐시 구현체를 완성했다. 하지만 이것이 단순히 예제임을 기억하라.<br />만약 스스로 캐시 구현체를 작성하면 실제 애플리케이션을 작성하는 것보다 더 많은 시간을 들여야 할 것이다. 되도록 다른 캐시 구현체를 iBATIS에 플러그인 하는 것이 좋다.<br /><br />12.4. 지원되지 않는 DataSource 설정하기<br />iBATIS는 JNDI(애플리케이션 서버에서 관리하는 DataSource), Apache DBCP 그리고 SimpleDataSource 라고 부르는 내장 DataSource 구현체를 포함하여 거의 대부분의 일반적인 DataSource 대체재들을 지원한다. 하지만 개발자들이 DataSource 구현을 추가할 수도 있는 기능을 지원한다.<br />새로운 DataSource 구현체를 설정하고자 한다면, iBATIS에 DataSource 인스턴스를 iBATIS 프레임워크에 공급해 주는 팩토리를 만들어줘야 한다. 이 팩토리 클래스는 DataSourceFactory 인터페이스를 구현해야 하며, 이는 아래와 같다.<br />public interface DataSourceFactory {<br />public void initialize(Map map);<br />public DataSource getDataSource();<br />}<br /><br />DataSourceFactory 는 하나의 DataSource를 초기화하고 다른 하나는 DataSource에 접근하는 오직 두 개의 메서드만을 가지고 있다. Initialize() 메서드는 JDBC 드라이버 이름, 데이터베이스 URL, 사용자명과 비밀번호와 같은 설정 정보들을 포함하는 Map 인스턴스를 제공한다.<br />getDataSource() 메서드는 간단히 설정된 DataSource를 반환하면 된다. 이는 매우 간단한 인터페이스이며, 이를 구현할 때의 복잡도는 개발자가 제공하는 DataSource 구현체의 복잡도에 달려 있다. 아래는 iBATIS 소스 코드에서 가져온 예제이다. 이는 SimpleDataSource 구현체의 DataSourceFactory 이다. 보다시피, 정말로 ‘간단’하다.<br />public class SimpleDataSourceFactory<br />implements DataSourceFactory {<br />private DataSource dataSource;<br />public void initialize(Map map) {<br />dataSource = new SimpleDataSource(map);<br />}<br />public DataSource getDataSource() {<br />return dataSource;<br />}<br />}<br /><br />전에 말했다시피, 더 복잡한 DataSource 의 구현은 더 많은 작업을 필요로 한다. 하지만 지나치게 걱정할 정도까지는 아니다.<br />iBATIS 확장하기에서 마지막으로 다룰 주제는 사용자 정의 트랜잭션 관리이다.<br /><br />12.5. 사용자 정의 트랜잭션 관리<br />iBATIS 는 앞의 장들에서 보았듯이, 여러 가지 트랜잭션을 제공한다. 하지만 요즘에는 애플리케이션 서버가 매우 다양하고 트랜잭션 관리방법도 다양하기 때문에 항상 사용자 정의 구현을 할 수 있도록 하고 있다. 외부에서 보기엔 트랜잭션이 간단하고 시작, 커밋, 롤백, 종료라는 몇 안되는 기능만 제공하는 것 같다. 하지만 내부를 들여다 보면 트랜잭션은 매우 복잡하고 표준을 어기기 쉬운 애플리케이션 서버의 기능들 중 하나이다. 따라서 iBATIS는 개발자가 스스로 사용자 정의 트랜잭션 관리 시스템을 만들 수 있도록 하고 있다. 만약 트랜잭션 관리 시스템을 만들어 본 경험이 있다면, 이 말을 듣고 나서 등골이 오싹해졌을것이다. 트랜잭션 관리자를 제대로 구현하는 것은 굉장히 어려운 일이다. 그런 까닭에 우리는 여기서 실제 구현에 착수하는 수고는 하지 않을 것이다. 대신, 인터페이스에 대해 자세히 공부해서 머리를 쥐어짜며 구현해야 할 것을 약간이나마 쉽게 시작할 수 있도록 할 것이다. 예제를 원한다면 iBATIS가 세가지 구현체 – JDBC, JTA, EXTERNAL 을 제공해 주니 그것을 보라. 혹시나 이전 장에서 다룬 내용을 잊었을까 하여 표에 이에 관해 요약해 두었다.<br />구현체 설명<br />JdbcTransactionConfig JDBC Connection API 가 제공하는 트랜잭션 기능을 사용<br />JtaTransactionConfig 전역 트랜잭션을 시작하거나 이미 존재하는 것에 합류<br />ExternalTransactionConfig 커밋과 롤백을 수행하지 않는 구현체, 다른 외부 트랜잭션 관리자가 커밋과 롤백을 하도록 한다.<br /><br />대부분의 경우에는 표의 관리자 중 하나로 문제가 해결될 것이다. 어쨌든 애플리케이션 서버나 트랜잭션 관리자가 비표준일 경우(또는 버그가 많을 경우) 에 대비해, iBATIS는 자체적인 트랜잭션 관리 어댑터를 구축할 수 있는 인터페이스-TransactionConfig와 Transaction을 제공한다. 다른 구현체들 중 하나의 Transaction 클래스를 재사용할 수 있는 상황이 아니라면, 일반적으로 두 인터페이스를 모두 구현해야만 완전한 구현체를 얻을 수 있다.<br /><br />12.5.1 TransactionConfig 인터페이스 이해하기<br />TransactionConfig 인터페이스는 일종의 팩토리이다. 하지만 대부분은 구현체의 트랜잭션 기능을 설정하는 역할을 한다. 이 인터페이스는 아래와 같다.<br />public interface TransactionConfig {<br />public void initialize(Properties props)<br />throws SQLException, TransactionException;<br />public Transaction newTransaction(int<br />transactionIsolation)<br />throws SQLException, TransactionException;<br />public int getMaximumConcurrentTransactions();<br />public void setMaximumConcurrentTransactions(int max);<br />public DataSource getDataSource();<br />public void setDataSource(DataSource ds);<br />}<br /><br />첫 번째 메서드는 initialize() 이다. 프레임워크의 다른 확장 가능한 부분에서 보았듯이, 이 메서드는 트랜잭션 기능을 설정하는 데 사용한다. 이 메서드는 유일한 파라미터로 Properties 인스턴스를 받는다. 이 인스턴스는 설정 옵션을 몇 개라도 포함하고 있을 수 있다. 예를 들면 JTA 구현체는 JNDI 트리에서 가져오는 UserTransaction 인스턴스를 필요로 한다. 따라서 JTA 구현체에 전달되는 프로퍼티 중 하나는 이 구현체가 필요로 하는 UserTransaction의 JNDI 경로를 나타낸다.<br />다음은 newTransaction() 메서드이다. 이것은 트랜잭션의 새로운 인스턴스를 생성하는 팩토리 메서드이다. 이 메서드는 트랜잭션이 취해야 하는 트랜잭션 격리 레벨을 나타내는 int 파라미터를 받는다. (운 나쁘게도 타입이 안전한 열거형 이어야만 한다.). 사용 가능한 격리 레벨은 JDBC Connection 클래스에 상수로 정의돼 있으며 다음과 같다.<br /> TRANSACTION_READ_UNCOMMITTED<br /> TRANSACTION_READ_COMMITTED<br /> TRANSACTION_REPEATABLE_READ<br /> TRANSACTION_SERIALIZABLE<br /> TRANSACTION_NONE<br />이 각각은 JDBC Connection API에 문서화돼 있다. 그리고 7장에서 더 상세히 알아볼 수 있다. 여기서 꼭 알아둬야 할 점은 여러분이 만든 트랜잭션 관리자 구현이 격리 레벨을 하나 혹은 그 이상 지원하지 못한다면, 개발자가 알 수 있도록 예외를 확실하게 던져야 한다는 것이다. 그렇지 않으면 예기치 않은 결과가 발생하여 개발자들이 디버깅하기 힘들어지게 될 수도 있다.<br />다음에 볼 메서드 쌍은 getDataSource() 와 setDataSource() 이다. 이 두 메서드는 TransactionConfig 인스턴스와 DataSource 에 관련된 자바빈즈 프로퍼티를 묘사한다. 보통은 DataSource 에 무슨 특별한 일을 할 필요는 없다. 하지만 이 메서드들을 제공함으로써 만일 필요한 경우에 추가적인 행위로 꾸며주는 것이 가능해진다. 많은 트랜잭션 관리자 구현체들은 자기가 제공하는 DataSource와 Connection 객체를 감싸서 그 각각에 트랜잭션 관련 기능을 추가한다.<br />마지막으로 알아볼 두 개의 메서드는 프레임워크가 동시에 지원할 수 있는 트랜잭션의 최대 개수를 설정할 수 있는 자바빈즈 프로퍼티를 구성한다. 여러분이 만든 구현체는 설정이 가능할 수도 불가능할 수도 있다. 하지만 하나 확실히 해야 할 점은, 시스템이 처리할 수 있는 것보다 더 큰 숫자를 설정하면 적절한 예외를 던져야 한다는 것이다.<br /><br />12.5.2 Transaction 인터페이스 이해하기<br />이전 절에서 언급된 TransactionConfig 클래스의 newTransaction() 이라는 팩토리 메서드를 다시 살펴보자. 이 메서드가 반환하는 값은 Transaction 인스턴스이다. Transaction 인터페이스는 iBATIS 프레임워크 내에서 트랜잭션을 지원하는 데 필요한 기능들을 나타낸다. 상당히 전형적인 기능들이며 예전에 트랜잭션 관련 작업을 해봤다면 모두다 익숙한 것들이다. Transaction 인터페이스는 다음과 같다.<br />public interface Transaction {<br />public void commit() throws SQLException,<br />TransactionException;<br />public void rollback() throws SQLException,<br />TransactionException;<br />public void close() throws SQLException,<br />TransactionException;<br />public Connection getConnection()<br />throws SQLException, TransactionException;<br />}<br /><br />이 인터페이스에는 특별한 것이 없다. 만약 트랜잭션에 대한 경험이 있다면 친숙하게 느껴질 것이다. 예상했겠지만 commit() 메서드는 작업 단위에 포함된 모든 변경 사항을 영구적으로 반영하는 수단이다. 반면에 rollback() 메서드는 마지막 커밋 이후 작업 단위에 발생한 모든 변경 사항을 취소하고 되돌리는 수단이다. Close() 메서드는 트랜잭션에 할당되거나 예약된 모든 자원을 해제하는 역할을 담당한다.<br />마지막 메서드인 getConnection()은 아마도 뜻밖일 것이다. 설계에 따르면 iBATIS는 JDBC API에 비해 상위 레벨의 프레임워크이다. 대충 말하자면 JDBC에서 Connection은 곧 트랜잭션이다. 좀 더 정확히 말하면, JDBC 커넥션 차원에서 트랜잭션을 관리하고 제어하고 이해해야 한다. 이러한 까닭에 대부분의 트랜잭션 구현체는 Connection 인스턴스에 묶여 있다. 이는 유용한 것이다. 왜냐하면 iBATIS는 트랜잭션에 관련해서 현재 커넥션에 접근해야 하기 때문이다.Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-25299438778059046772011-06-07T02:36:00.000-07:002011-06-07T02:40:13.431-07:00iBATIS in Action (11/14)11. DAO 더 살펴보기<br /><br />11.1. SQL Maps 가 아닌 DAO 구현체<br />10장에서 DAO의 인터페이스를 정의했고 그 인터페이스의 구현체를 기반으로 하여 SQL Map을 구성하였다. 다음 두 절에서는 그 인터페이스를 하이버네이트와 JDBC를 이용하여 구현할 것이다. 이를 통해 DAO 패턴을 사용하면 애플리케이션에서 iBATIS가 아닌 다른 데이터 접근 방식을 사용하도록 변경하는 것이 얼마나 쉬운지 보여줄 것이다.<br /><br />11.1.1 하이버네이트 DAO 구현체<br />하이버네이트 DAO 구현체는 SQL Maps 로 구현하는 것과 상당히 다르지만 DAO 인터페이스 덕분에 DAO 인터페이스를 사용하는 애플리케이션 코드의 입장에서는 완전히 동일한 방식으로 구현체를 사용할 수 있다.<br /><br />- DAO 컨텍스트 정의하기<br />다음은 dao.xml 파일에서 하이버네이트를 사용하는 DAO 컨텍스트를 설정하는 XML의 코드 조각이다.<br /><context id="hibernate"><br /><transactionManager type="HIBERNATE"><br /><property name="hibernate.connection.driver_class"<br />value="org.postgresql.Driver" /><br /><property name="hibernate.connection.url"<br />value="jdbc:postgresql:ibatisdemo" /><br /><property name="hibernate.connection.username"<br />value="ibatis" /><br /><property name="hibernate.connection.password"<br />value="ibatis" /><br /><property name="hibernate.connection.pool_size"<br />value="5" /><br /><property name="hibernate.dialect"<br />value=<br />"net.sf.hibernate.dialect.PostgreSQLDialect" /><br /><br />value=<br />"${DaoHomeRes}/hibernate/Account.hbm.xml" /><br /></transactionManager><br /><dao interface="${DaoHome}.AccountDao"<br />implementation=<br />"${DaoHome}.hibernate.AccountDaoImpl"/><br /></context><br />10장 (10.2.2 절)에서 이야기했듯이 HIBERNATE 트랜잭션 관리자를 사용하려면 보통 때는 hibernate.properties 파일에 작성하는 프로퍼티들을 <transactionManager> 요소에서 프로퍼티로 등록해야 한다.<br />우리는 우리의 소스 트리를 명확하게 유지하고 싶었기 때문에, Account 빈즈용 하이버네이트 매핑 파일(Account.hbm.xml)을 Account 빈즈와 동일한 패키지에 두지 않았다. 대신 매핑 파일의 위치를 “map.” 프로퍼티를 사용하여 설정하고, 이 프로퍼티들을 하이버네이트 설정 정보에 추가하였다. 기억하라 DAO 의 핵심은 데이터 접근에 관한 구현을 인터페이스로부터 분리하는 것이다.<br /><br />- Account 테이블 매핑하기<br />다음의 매핑 파일은 매우 간단하다. 왜냐하면 빈즈의 프로퍼티를 프로퍼티와 동일한 이름의 테이블 칼럼에 직접 매핑하고, 연관된 엔티티도 없기 때문이다.<br /><?xml version="1.0"?><br /><!DOCTYPE hibernate-mapping<br />PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"<br />"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"><br /><hibernate-mapping><br /><class<br />name="org.apache.mapper2.examples.bean.Account"<br />table="Account"><br /><id name="accountId" type="int" column="accountid"><br /><generator class="sequence"><br /><param<br />name="sequence">account_accountid_seq</param><br /></generator><br /></id><br /><property name="username" /><br /><property name="password" /><br /><property name="firstName" /><br /><property name="lastName" /><br /><property name="address1" /><br /><property name="address2" /><br /><property name="city" /><br /><property name="state" /><br /><property name="postalCode" /><br /><property name="country" /><br /></class><br /></hibernate-mapping><br />하이버네이트를 사용해 본 경험이 있다면, 위의 내용이 상당히 간단한 테이블 매핑이라서 명확하게 이해될 것이다. 예전에 하이버네이트를 사용해본 적이 없다면 그렇게 쉽게 이해되지는 않을 것이다. 이 설정 파일은 Account 빈즈의 프로퍼티를 데이터베이스의 Account 테이블에 있는 칼럼에 매핑한다. 또한 하이버네이트가 새로 삽입할 데이터베이스 레코드의 빈즈에 사용할 id 프로퍼티를 어떻게 생성해야 하는지도 설정한다.<br /><br />실제 DAO 구현체<br />Account 테이블을 여러 서로 다른 클래스의 객체에 매핑하기 때문에, DAO 구현체의 자바 소스 코드가 조금 더 장황하다. 다음에서 보듯이 하이버네이트에서는 이게 조금 더 어렵다.<br />public class AccountDaoImpl<br />extends HibernateDaoTemplate<br />implements AccountDao {<br />private static final Log log =<br />LogFactory.getLog(AccountDaoImpl.class);<br />public AccountDaoImpl(DaoManager daoManager) {<br />super(daoManager);<br />if(log.isDebugEnabled()){<br />log.debug("Creating instance of " + getClass());<br />}<br />}<br />public Integer insert(Account account) {<br />try {<br />getSession().save(account);<br />} catch (HibernateException e) {<br />log.error(e);<br />throw new DaoException(e);<br />}<br />return account.getAccountId();<br />}<br />public int update(Account account) {<br />try {<br />getSession().save(account);<br />} catch (HibernateException e) {<br />log.error(e);<br />throw new DaoException(e);<br />}<br />return 1;<br />}<br />public int delete(Account account) {<br />try {<br />getSession().delete(account);<br />} catch (HibernateException e) {<br />log.error(e);<br />throw new DaoException(e);<br />}<br />return 1;<br />}<br />public int delete(Integer accountId) {<br />Account account = new Account();<br />account.setAccountId(accountId);<br />return delete(account);<br />}<br />public List<Account> getAccountListByExample(<br />Account acct) {<br />List accountList;<br />Session session = this.getSession();<br />Criteria criteria =<br />session.createCriteria(Account.class);<br />if (!nullOrEmpty(acct.getCity())) {<br />criteria.add(<br />Expression.like("city", acct.getCity())<br />);<br />}<br />If (!nullOrEmpty(acct.getAccountId())) {<br />criteria.add(<br />Expression.eq("accountId", acct.getAccountId())<br />);<br />}<br />try {<br />accountList = criteria.list();<br />} catch (HibernateException e) {<br />log.error(<br />"Exception getting list: " +<br />e.getLocalizedMessage(), e);<br />throw new DaoException(e);<br />}<br />return (List<Account>)accountList;<br />}<br /><br />Account account<br />)<br />{<br />List<Account> accountList =<br />getAccountListByExample(account);<br /><br /><br />for (Account acctToAdd : accountList) {<br /><br /><br />map.put("accountId", acctToAdd.getAccountId());<br />map.put("address1", acctToAdd.getAddress1());<br />map.put("address2", acctToAdd.getAddress2());<br />map.put("city", acctToAdd.getCity());<br />map.put("country", acctToAdd.getCountry());<br />map.put("firstName", acctToAdd.getFirstName());<br />map.put("lastName", acctToAdd.getLastName());<br />map.put("password", acctToAdd.getPassword());<br />map.put("postalCode", acctToAdd.getPostalCode());<br />map.put("state", acctToAdd.getState());<br />map.put("username", acctToAdd.getUsername());<br />mapList.add(map);<br />}<br />return mapList;<br />}<br />public List<IdDescription> getIdDescriptionListByExample(<br />Account exAcct<br />) {<br />List<Account> acctList =<br />getAccountListByExample(exAcct);<br />List<IdDescription> idDescriptionList =<br />new ArrayList<IdDescription>();<br />for (Account acct : acctList) {<br />idDescriptionList.add(<br />new IdDescription(<br />acct.getAccountId(),<br />acct.getFirstName() + " " + acct.getLastName()<br />)<br />);<br />}<br />return idDescriptionList;<br />}<br />public Account getById(Integer accountId) {<br />Session session = this.getSession();<br />try {<br />return (Account) session.get(<br />Account.class, accountId);<br />} catch (HibernateException e) {<br />log.error(e);<br />throw new DaoException(e);<br />}<br />}<br />public Account getById(Account account) {<br />return getById(account.getAccountId());<br />}<br />}<br /><br />SQL Map 구현체에서보다 양이 더 많다. Map 객체나 IdDescription 객체의 List를 반환하는 것을 살펴보기 시작하면 좀 흥미가 생길 것이다. 하이버네이트는 데이터베이스 테이블을 자바 클래스로 매핑하도록 설계되었기 때문에 동일한 테이블을 다른 클래스에 매핑하는 것은 약간 어려워진다.<br />다음에 볼 DAO 구현체 예제에서는 어떠한 매핑 툴도 사용하지 않고 JDBC를 직접 사용하여 DAO를 구성해 볼 것이다.<br /><br />11.1.2 JDBC DAO 구현체<br />지금까지 사용한 인터페이스로 구축하는 마지막 DAO 구현체는 JDBC를 직접 사용할 것이다. 단순히 JDBC를 기반으로 구현할 때의 가장 큰 장점은 설정을 (하이버네이트나 iBATIS에 비해) 가장 적게 하고 유연성은 높아진다는 점이다.<br />다음에서 dao.xml 설정 파일을 볼 수 있다.<br /><context id="jdbc"><br /><transactionManager type="JDBC"><br /><property name="DataSource"<br />value="SIMPLE"/><br /><property name="JDBC.Driver"<br />value="org.postgresql.Driver" /><br /><property name="JDBC.ConnectionURL"<br />value="jdbc:postgresql:ibatisdemo" /><br /><property name="JDBC.Username"<br />value="ibatis" /><br /><property name="JDBC.Password"<br />value="ibatis" /><br /><property name="JDBC.DefaultAutoCommit"<br />value="true" /><br /></transactionManager><br /><dao interface="${DaoHome}.AccountDao"<br />implementation="${DaoHome}.jdbc.AccountDaoImpl"/><br /></context><br /><br />이 정도면 설정이 끝난다. 나머지는 모두 다음에 나오는 소스 코드에 있다. DAO의 JDBC 구현체의 코드 줄 수는 하이버네이트 코드에 비해 두 배가 넘고 SQL Maps 에 비해서는 거의 일곱 배에 달한다. 설정 파일을 포함한다면, ‘코드 줄 수’의 통계는 아래 표처럼 될 것이다. 결과적으로 설정 정보를 제거했지만, 전체 코드 줄 수로는 결국 두 배 정도되는 노력을 더 들여야 한다. JDBC를 이용한 애플리케이션 개발이 어리석은 방법이라고 말하는 것은 아니다. 여기서는 단지 유연성과 최소한의 설정을 원한다면 더 많은 코드를 작성해야 한다는 점을 말하고자 하는 것이다.<br />구현방식 설정 코드 합계<br />iBATIS 118+8=126 53 179<br />하이버네이트 23+20=43 141 184<br />JDBC 18 370 388<br /><br />- JDBC DAO 구현체 살펴보기<br />JDBC DAO 구현체는 양이 많기 때문에, 여기서 클래스의 전체 내용을 보지는 않을 것이다. 대신 DAO를 구축할 때 사용할 수 있는 몇 가지 요령들을 중심으로 다룰 것이다.<br />처음으로 할 일은 iBATIS가 제공하는 JdbcDaoTemplate 클래스를 상속하여 DAO를 구성하는 것이다. 그렇게 하면 조금은 여유를 부려도 괜찮다. 이 클래스가 커넥션을 관리해주기 때문에 우리가 작성할 코드에서 커넥션을 닫아줄 필요가 없다.<br />이게 사소해 보이는가? 대규모 시스템에서 커넥션 관리에 실패하면 몇 시간 안에(혹은 몇 분 안에라도) 시스템을 운영 불가능한 상태로 만들어버릴 수 있다. 이 때문에 다음에 볼 팁을 통해 코드량을 줄이면서, 리소스를 안전하게 사용할 수 있도록 도와주는 메서드를 만들었다.<br />private boolean closeStatement(Statement statement) {<br />boolean returnValue = true;<br />if(null != statement){<br />try {<br />statement.close();<br />} catch (SQLException e) {<br />log.error("Exception closing statement", e);<br />returnValue = false;<br />}<br />}<br />return returnValue;<br />}<br />Statement 를 닫을 때 SQLException 예외가 발생할 수 있기 때문에, 이 메서드는 Statement를 닫고 SQLException을 DaoException으로 포장한다. 그래서 위 코드를 모두 쓰지 않고 closeStatement()를 간단히 호출하고 원래의 예외를 기록한 뒤 DaoException을 던진다. 위와 동일한 이유로 ResultSet 객체를 닫는 위와 유사한 메서드를 하나 더 만든다.<br />아래에 작성한 메서드들을 사용하면 ResultSet 객체에서 데이터 구조를 손쉽게 가져올 수 있다.<br />private Account extractAccount(ResultSet rs<br />) throws SQLException {<br />Account accountToAdd = new Account();<br />accountToAdd.setAccountId(rs.getInt("accountId"));<br />accountToAdd.setAddress1(rs.getString("address1"));<br />accountToAdd.setAddress2(rs.getString("address2"));<br />accountToAdd.setCity(rs.getString("city"));<br />accountToAdd.setCountry(rs.getString("country"));<br />accountToAdd.setFirstName(rs.getString("firstname"));<br />accountToAdd.setLastName(rs.getString("lastname"));<br />accountToAdd.setPassword(rs.getString("password"));<br />accountToAdd.setPostalCode(rs.getString("postalcode"));<br />accountToAdd.setState(rs.getString("state"));<br />accountToAdd.setUsername(rs.getString("username"));<br />return accountToAdd;<br />}<br /><br />) throws SQLException {<br /><br /><br />acct.put("accountId", rs.getInt("accountId"));<br />acct.put("address1", rs.getString("address1"));<br />acct.put("address2", rs.getString("address2"));<br />acct.put("city", rs.getString("city"));<br />acct.put("country", rs.getString("country"));<br />acct.put("firstName", rs.getString("firstname"));<br />acct.put("lastName", rs.getString("lastname"));<br />acct.put("password", rs.getString("password"));<br />acct.put("postalCode", rs.getString("postalcode"));<br />acct.put("state", rs.getString("state"));<br />acct.put("username", rs.getString("username"));<br />return acct;<br />}<br />private IdDescription accountAsIdDesc(ResultSet rs<br />) throws SQLException {<br />return new IdDescription(<br />new Integer(rs.getInt("id")),<br />rs.getString("description"));<br />}<br /><br />위의 작업을 다양한 곳에서 수행하기 때문에, 매핑을 단순화하는 메서드를 만들면 나중에 실제 메서드를 생성할 때 오류 발생과 시간 낭비를 줄일 수 있다.<br />다음 메서드는 DAO 인터페이스에서 “query-by-example” 메서드에서 사용할 PreparedStatement 를 생성한다. 아래에 나오는 코드는 여기에서 가장 복잡한 부분이다. 이것을 보고 나면 SQL Maps 구현체가 훨씬 더 매력적으로 보이기 시작할 것이다. 다른 도우미 메서드들은 간단하지만 코드가 긴 반면, 아래 메서드는 코드도 길며 오류를 발생시키기 일쑤이고 테스트하기도 어렵다. 꼭 만들어야 하지만 짜맞추기 좋진 않은 코드이다.<br />private PreparedStatement prepareQBEStatement(<br />Account account,<br />Connection connection,<br />PreparedStatement ps,<br />String baseSql<br />) throws SQLException {<br />StringBuffer sqlBase = new StringBuffer(baseSql);<br />StringBuffer sqlWhere = new StringBuffer("");<br /><br />String city = account.getCity();<br />if (!nullOrEmpty(city)) {<br />sqlWhere.append(" city like ?");<br />params.add(account.getCity());<br />}<br />Integer accountId = account.getAccountId();<br />if (!nullOrZero(accountId)) {<br />if sqlWhere.length() > 0) {<br />sqlWhere.append(" and");<br />}<br />sqlWhere.append(" accountId = ?");<br />params.add(account.getAccountId());<br />}<br />if (sqlWhere.length() > 0) {<br />sqlWhere.insert(0, " where");<br />sqlBase.append(sqlWhere);<br />}<br />ps = connection.prepareStatement(sqlBase.toString());<br />for (int i = 0; i < params.size(); i++) {<br />ps.setObject(i+1, params.get(i));<br />}<br />return ps;<br />}<br /><br />이제 모든 도우미 메서드를 적당히 살펴보았다. 이제부터는 public 인터페이스 구축을 시작 할 수 있다. Insert 메서드가 가장 복잡한데, 데이터를 가져오는 쿼리와 삽입 작업 둘 다 필요하기 때문이다.<br />public Integer insert(Account account) {<br />Connection connection = this.getConnection();<br />Statement statement = null;<br />PreparedStatement ps = null;<br />ResultSet rs = null;<br />Integer key = null;<br />if (null != connection) {<br />try{<br />statement = connection.createStatement();<br />rs = statement.executeQuery(sqlGetSequenceId);<br />if (rs.next()) {<br />key = new Integer(rs.getInt(1));<br />account.setAccountId(key);<br />if (log.isDebugEnabled()) {<br />log.debug("Key for inserted record is " + key);<br />}<br />}<br />ps = connection.prepareStatement(sqlInsert);<br />int i = 1;<br />ps.setObject(i++, account.getAccountId());<br />ps.setObject(i++, account.getUsername());<br />ps.setObject(i++, account.getPassword());<br />ps.setObject(i++, account.getFirstName());<br />ps.setObject(i++, account.getLastName());<br />ps.setObject(i++, account.getAddress1());<br />ps.setObject(i++, account.getAddress2());<br />ps.setObject(i++, account.getCity());<br />ps.setObject(i++, account.getState());<br />ps.setObject(i++, account.getPostalCode());<br />ps.setObject(i++, account.getCountry());<br />ps.executeUpdate();<br />} catch (SQLException e) {<br />log.error("Error inserting data", e);<br />throw new DaoException(e);<br />} finally {<br />closeStatement(ps);<br />closeResources(statement, rs);<br />}<br />}<br />return key;<br />}<br /><br />여기서 삽입할 레코드의 새로운 id를 발급받고서 파라미터로 받은 빈즈에 그 값을 지정한다. 그리고는 이 빈즈를 데이터베이스에 삽입한다. 이 코드는 따라가면서 보기에는 매우 단순하며 단지 iBATIS나 하이버네이트 버전에 비해서 코드가 약간 길 뿐이다.<br />다른 메서드도 이것과 같이 간단하다. 따라서 더 이상 지면을 낭비하지는 않겠다.<br /><br />11.2. 다른 데이터 소스로 DAO 패턴 사용하기<br /><br />DAO 패턴은 Gateway 패턴과 매우 유사하다. Gateway 패턴은 LDAP이나 웹 서비스 등의 많은 다른 데이터 소스들에 적합한 패턴이다.<br />Gateway 패턴이란 말이 익숙지 않은가? 이 패턴은 그 하는 일 때문에 때때로 래퍼(Wrapper)라고 불리기도 한다. 이 패턴은 API를 감싸서(wrap) 그림에서 처럼 객체를 단순하게 보이도록 만들어준다.이 그림에서는 WebServiceGateway 인터페이스가 내부적인 구현을 감춰준다.<br />이 말이 익숙하게 들리는가? 아니 익숙하게 들릴 것이다. 바로 DAO 패턴의 배경이 되는 개념이기 때문이다. DAO 패턴은 트랜잭션과 커넥션 풀 그리고 다른 데이터베이스에 종속적인 사항들에 특화된 Gateway 이다.<br /> <br />11.2.1 예제: LDAP으로 DAO 사용하기<br />LDAP은 계층적인 데이터를 저장하는데 너무도 훌륭한 도구이다. 또한 네트워크 관리자들이 사용자들을 추적하고 구성원이나 다른 유사 데이터를 그룹화하는 데도 사용한다. 예를 들면 Novel Directory Services(NDS) 나 마이크로 소트트사의 ActiveDirectory 는 둘 다 LDAP을 기반으로 하며 LDAP API를 제공한다.<br />DAO 패턴을 사용하여 LDAP을 사용하는 디렉터리에 접근하는 것은 애플리케이션에서 JNDI 프로그래밍의 느낌을 계속 유지할 수 있는 훌륭한 한 방법이다. 특수 목적의 작은 클래스 집합을 만들어서 가볍고 테스트하기 좋은 JNDI 컴포넌트를 구축할 수 있다. 그러고나서는 데이터 소스는 외부에 노출시키지 않은 채로 DAO 구현체에 붙이면 된다.<br /><br />- LDAP 용어 이해하기<br />LDAP 디렉터리 기반의 DAO 구현을 구축하는 완전한 예제를 시작하기 전에, 몇 가지 용어를 먼저 알아보자. LDAP은 의도적으로 모호하게 만들어졌다. LDAP은 계층적인 구조의 데이터 저장소에 접근하는 매우 유연하고 일반화된 목적을 수행하는 프로토콜이 되도록 설계되었기 때문이다.<br />LDAP 디렉터리의 기초가 되는 요소는 엔트리(entry)라고 부른다. 엔트리는 데이터(속성이라고 부른다.)나 다른 엔트리 혹은 그 둘 다를 포함할 수 있다. 모든 엔트리는 정확히 하나의 부모를 가지고 있으며 DN(Distinguished Name)으로 유일하게 구분 지을 수 있다. DN은 전체 디렉토리에서 중복이 있을 수 없다. 엔트리의 데이터 요소들은 엔트리가 나타내는 하나 혹은 그 이상의 객체 클래스로 정의한다.<br />예를 들어 자바 애플리케이션으로 일반적인 LDAP 엔트리들을 관리하는 연락처 관리자를 만들고자 한다면, 엔트리를 나타내는 다음과 같은 형태의 빈즈를 생성할 것이다.<br />public class Contact {<br />private String userId;<br />private String mail;<br />private String description;<br />private String firstName;<br />private String lastName;<br />// Getters and Setters to make properties...<br />}<br /> 이 객체를 LDAP 디렉터리에 저장하는 한 방법으로 간단히 자바 객체를 디렉터리로 직렬화해 넣는 것이 있다. 우리의 예제에서는 두 가지 이유 때문에 그렇게 하지 않을 것이다. 하나는 우리의 디렉터리를 잠재적으로 자바가 아닌 다른 시스템과 상호 교환할 수 있게 만들기 위해서이다. 다른 이유는 LDAP 기반 쿼리의 장점을 누리기 위해서이다. 데이터베이스를 사용할 때는 원래 그 시스템이 의도된 방식으로 사용하는 것이 좋다.<br />- 자바에서 LDAP으로 매핑하기<br />전에 말한 바와 같이, 모든 LDAP 디렉터리 엔트리는 하나 혹은 그 이상의 객체 클래스를 나타낸다. 이 객체 클래스들은 속성들의 묶음을 정의한다. 이 속성과 자바의 Map 인터페이스가 유사하기 때문에 간단히 Map을 사용하여 JNDI 속성 구조를 숨겨주는 Map 기반의 DAO를 만드는 것은 정말 일도 아니다. 하지만 이번 절에서는 이전 절의 빈즈를 사용하여 이 빈즈를 표의 매핑을 통해 LDAP의 intOrgPerson 엔트리에 매핑할 것이다.<br /><br />빈즈 프로퍼티 LDAP 속성<br />userId Uid<br />Mail Mail<br />Description Description<br />lastName Sn<br />firstName givenName<br />이 매핑은 DAO 구현체 안에서 Attribute 객체로부터 빈즈를 생성하거나, 혹은 그 반대로 빈즈로부터 Attributes 객체를 생성해내는 메서드를 사용해서 이루어진다. 리플렉션을 기반으로 하여 위 매핑을 처리하는 메커니즘을 만들어내는 것도 가능하긴 하지만, 여기서는 DAO 구현을 매우 간단하게 만들 것이기 때문에 매핑 정보를 그냥 하드 코딩할 것이다. 다음은 DAO 구현체에서 매핑 작업을 수행하는 메서드 세 가지를 보여준다.<br />private Attributes getAttributes(Contact contact){<br />Attributes returnValue = new BasicAttributes();<br />returnValue.put("mail", contact.getMail());<br />returnValue.put("uid", contact.getUserId());<br />returnValue.put("objectClass", "inetOrgPerson");<br />returnValue.put(<br />"description", contact.getDescription());<br />returnValue.put("sn", contact.getLastName());<br />returnValue.put("cn", contact.getUserId());<br />returnValue.put("givenName", contact.getFirstName());<br />return returnValue;<br />}<br />private Contact getContact(Attributes attributes) {<br />Contact contact = new Contact();<br />contact.setDescription(<br />getAttributeValue(attributes, "description"));<br />contact.setLastName(<br />getAttributeValue(attributes, "sn"));<br />Table 11.1 JavaBean to LDAP attribute mapping<br />Bean property LDAP attribute<br />userId uid<br />mail mail<br />description description<br />lastName sn<br />firstName givenName<br />contact.setFirstName(<br />getAttributeValue(attributes, "givenName"));<br />contact.setMail(getAttributeValue(attributes, "mail"));<br />contact.setUserId(<br />getAttributeValue(attributes, "uid"));<br />return contact;<br />}<br />private String getAttributeValue(<br />Attributes attributes, String attrID<br />) {<br />Attribute attribute = attributes.get(attrID);<br />try {<br />return (null==attribute?"":(String)attribute.get());<br />} catch (NamingException e) {<br />throw new DaoException(e);<br />}<br />}<br />Attributes 인터페이스는 Sun 의 JDK에 포함돼 있는 JNDI 패키지의 일부이며 또한 동일한 패키지에 포함돼 있는 BasicAttributes 클래스가 이의 구현체이다. Contact 클래스는 LDAP 디렉터리에 매핑하고자 하는 빈즈이다. 마지막으로 getAttributeValue() 메서드는 도우미 메서드로써 null 값 등을 처리해 주어 매핑 과정을 단순화하고, JNDI 종속적인 예외들을 DaoException으로 변경해 주는 일을 한다.<br />다른 DAO 구현체들과 마찬가지로 데이터베이스로의 접근을 어디에서 어떻게 할지에 대한 몇 가지 결정을 내려야 한다. JNDI 컨텍스트를 제공해 주는 J2EE 컨테이너를 사용하고 있다면 JNDI 컨텍스트를 사용하는 것이 끌릴 것이다. 만약 요구사항에 적합하다면 이를 사용하지 않을 이유가 없다. 하지만 JNDI를 사용하면 몇 가지 트레이드오프가 있다. 이는 코드는 단순해지지만 테스트는 어렵게 만든다. 요구사항이 뭐냐에 따라서, 이 정도 희생은 감수할 만하다고 할 수도 있다.<br />이번 예제에서는 가능한 한 테스트하기 쉽게 만들려고 한다. 따라서 생성자 기반의 의존성 삽입 방식을 통해서 DAO 클래스의 설정을 실행시간에 할 수 있게 만들 것이다. iBATIS의 DAO는 이런 식으로 사용할 수 없기 때문에, 디폴트 값으로 지정했으면 하는 값 두 개를 사용하는 디폴트 생성자도 함께 만들 것이다. 11.3 절에서는 Spring 프레임워크로 DAO 계층을 구성해 볼 것이다. 이때는 설정 파일을 통해서 실행시간 설정을 할 수 있다. 하지만 지금 당장은 디폴트 생성자 메서드를 사용하자.<br />두 번째 생성자는 두 개의 파라미터를 받아서 디폴트 생성자에게 하드코딩한 두 가지 설정을 수행한다. 하나는 Contact 빈즈에서 사용할 LDAP DN 속성을 결정한다. 이 속성은 데이터 베이스 테이블의 기본키와 같은 역할을 한다. 하지만 테이블에서 행에 대한 기본키의 역할처럼 특정 단일 세그먼트에서만 값이 유일한 게 아니라 전체 디렉터리에서 동일한 값이 나오면 안 된다. 아래 메서드는 DAO 구현체에서 Contact 빈즈에 중복되지 않는 DN을 생성해준다.<br />private String getDn (String userId){<br /> Return MessageFormat.format(this.dnTemplate, userId);<br />}<br />두 번째로 해야 할 설정은 초기 디렉터리 컨텍스트를 가져오는 것이다. DAO의 디폴트 생성자는 하드코딩한 프로퍼티를 사용하여 LDAP 디렉터리에 접속한다. 다시 한 번 말하지만, 두 번째 생성자를 사용하면 다른 목적을 수행하는데 필요한 사용자 정의 프로퍼티를 지정할 수 있다.<br />private DirContext getInitialContext() {<br />DirContext ctx = null;<br />try {<br />ctx = new InitialDirContext(env);<br />} catch (NamingException e) {<br />log.error("Exception getting initial context", e);<br />throw new DaoException(e);<br />}<br />return ctx;<br />}<br />이제 빈즈를 매핑하고 LDAP 디렉터리에 접속하는데 필요한 모든 인프라스트럭처 코드를 구축했으니, DAO 구현체를 구성할 때가 되었다. 처음으로 볼 메서드는 이 중에서 가장 간단한 것으로 userId를 통해서 연락처를 찾는 것이다. 이 메서드를 구현하는 코드가 아래에 있다.<br />public Contact getById(String id) {<br />DirContext ctx = getInitialContext();<br />Attributes attributes;<br />try {<br />attributes = ctx.getAttributes(getDn(id));<br />} catch (NamingException e) {<br />throw new DaoException(e);<br />}<br />return getContact(attributes);<br />}<br /><br />여기서는 디렉터리 컨텍스트를 가져와서 이를 통해 userId 값으로 받은 파라미터의 DN을 기반으로 하여 연락처의 속성들을 가져온다. 일단 속성들을 가져오면 이를 Contact 빈즈로 변환해서 반환한다. LDAP에 종속적인 NamingException이 발생하면 DaoException으로 변경해서 다시 던진다. DAO 메서드의 시그너처에는 데이터 소스를 가리키는 특징이 들어가면 안 되기 때문이다.<br />삽입(insert) 작업은 LDAP 식으로 말하면 바인딩이라고 부른다. 우리 예제에서는 이것이 LDAP의 바인딩인지 절대로 알 수 없다. DAO에서 이 과정을 감싸서 처리하고 바인딩 대신 insert라고 부를 것이기 때문이다.<br />public Contact insert(Contact contact) {<br />try {<br />DirContext ctx = getInitialContext();<br />ctx.bind(getDn(<br />contact.getUserId()),<br />null,<br />getAttributes(contact));<br />} catch (Exception e) {<br />log.error("Error adding contact", e);<br />throw new DaoException(e);<br />}<br />return contact;<br />}<br /><br />유사하게, 수정(update)과 삭제(delete) 메서드도 LDAP에 종속적인 클래스를 사용해서 일을 처리하고서 예외는 위와 같은 기법을 사용해서 던진다. JNDI 용어로 수정은 리바인딩(rebinding)이고 삭제는 언바인딩(unbinding)이라고 부른다. 어쨌든 우리는 DAO 패턴을 사용하기 때문에 이런 용어들은 애플리케이션에서는 볼 수 없다. 우리가 DAO 구현체에서 만든 것이 LDAP에 종속적인지 여부는 결코 외부에서는 알 수가 없다.<br />앞으로 개발하면서 다루게 될 낯선 데이터 소스에 LDAP만 있는 것은 아니다. 그 모든 것들을 이 한 장에서 다룰 수 없기 때문에 가까운 미래에 다루게 될 확률이 높은 다른 것, 바로 웹 서비스에 대해서 살펴보자.<br /><br />11.2.2 예제: 웹 서비스로 DAO 사용하기<br />DAO 패턴을 사용하여 웹 서비스를 구축하는 것은 정말 좋은 생각이다. 추상 계층 같은 것을 통해 웹 서비스를 사용하는 이유는 웹 서비스를 사용하는 컴포넌트를 테스트하는 것이 간편해지기 때문이다. 예를 들어 사용하고자 하는 것이 신용 카드를 처리하는 서비스이거나 혹은 다른 원거리 서비스라서 접속 시간이나 실행 시간, 결과를 처리하는 시간 등이 오래 걸린다고 할 때, 만약 서비스 처리를 기다려야 한다면(그것도 여러 번) 테스트하는 것이 아주 심각하게 느려질 수 있다. 게다가 서비스가 요청 단위로 요금을 내야 하거나 혹은 (아마존, 구글, eBay처럼) 공개적인 것이어서 반환되는 데이터가 일정치 않고 계속 변한다면, 통합이나 사용자 검수 테스트(User Acceptance Test) 이외의 목적으로 사용하는 것은 하기 힘들게된다. 비용이 너무 많이 들고, 반환되는 데이터가 너무 다양하기 때문이다. 이런 문제와 더불어 시간이 지나면 결과가 바뀌는 테스트를 위해서 데이터를 준비할 필요가 정말 있을까? 대신 의미 있는 정적(혹은 쉽게 예측 가능한) 데이터를 필요로 하는 단위 테스트를 작성하는 것이 낫다.<br />그럼 여러분이 시스템을 만들고 있고 시스템 애플리케이션 안에서 사용자들이 구글 검색을 할 수 있길 바란다고 하자. 웹 서비스를 호출하는 구글 API는 매우 간단해서 쉽게 사용할 수 있다. 하지만 지금은 다른 검색 엔진들도 유사한 API를 제공하기 때문에 좀 더 (모든 검색엔진에서) 일반적으로 사용할 수 있는 검색 API를 만들어 구글 구현체를 감싸서 애플리케이션에서 그 감싸고 있는 API를 호출하도록 만들 것이다.<br />먼저 검색 인터페이스를 만들고 검색 결과를 반환 받는 구조를 정할 필요가 있다. 자, 간단한 빈즈와 인터페이스를 만드는 것으로 시작해보자.<br />public class SearchResult {<br />private String url;<br />private String summary;<br />private String title;<br />// getters and setters omitted...<br />}<br />public interface WebSearchDao {<br />List<SearchResult> getSearchResults(String text);<br />}<br /><br />여기서 우리의 빈즈에는 세 개의 프로퍼티가 있고, 인터페이스에는 List 타입을 반환하는 한 개의 메서드가 있다. 다음은 구글 API를 사용한 검색 API의 구현체다.<br />public class GoogleDaoImpl implements WebSearchDao {<br />private String googleKey;<br />public GoogleDaoImpl(){<br />this("insert-your-key-value-here");<br />}<br />public GoogleDaoImpl(String key){<br />this.googleKey = key;<br />}<br />public List<SearchResult> getSearchResults(String text){<br />List<SearchResult> returnValue = new<br />ArrayList<SearchResult>();<br />GoogleSearch s = new GoogleSearch();<br />s.setKey(googleKey);<br />s.setQueryString(text);<br />try {<br />GoogleSearchResult gsr = s.doSearch();<br />for (int i = 0; i < gsr.getResultElements().length;<br />i++){<br />GoogleSearchResultElement sre =<br />gsr.getResultElements()[i];<br />SearchResult sr = new SearchResult();<br />sr.setSummary(sre.getSummary());<br />sr.setTitle(sre.getTitle());<br />sr.setUrl(sre.getURL());<br />returnValue.add(sr);<br />}<br />return returnValue;<br />} catch (GoogleSearchFault googleSearchFault) {<br />throw new DaoException(googleSearchFault);<br />}<br />}<br />}<br /><br />구글 API는 작업을 하려면 키가 필요하다는 점만 제외하고는 DAO 인터페이스와 매우 유사하다. 우리의 예제에서는 구현체에 하드 코딩한 키를 사용하기 때문에 이것은 문제가 되지 않는다. 실제 운영할 애플리케이션에서는 여럿이 공유하는 키보다는 특정 사용자 전용키를 제공하는 것이 아마도 더 나을 것이다.<br />여기서 iBATIS DAO 계층의 또 다른 한계를 볼 수 있다. DAO 클래스의 인스턴스를 다중으로 제공할 수 없고 디폴트 생성자만을 사용하기 때문에, 이 DAO 를 우리가 원하는 방식대로 실행시키려면 몇 가지 추가적인 작업을 해줘야만 한다.<br />다음 절에서는 좀 더 고급 설정 기법을 제공해 주는 Spring 프레임워크를 사용하여 더 많은 기능을 가진 DAO 계층을 만드는 방법을 알아볼 것이다.<br /><br />11.3. Spring DAO 사용하기<br />iBATIS와는 상관없이, Spring 프레임워크를 사용하여 애플리케이션의 데이터 접근 계층을 다루는 방법은 매우 많이 있다. 이번 절에서는 Spring의 iBATIS 지원 기능을 사용하여 데이터 접근 계층을 구축하는 방법을 공부할 것이다.<br /><br />11.3.1 코드 작성하기<br />Spring 프레임워크는 데이터 접근 객체에 템플릿 패턴을 사용하여 iBATIS를 지원한다. 템플릿 패턴을 사용한다는 것은 Spring이 제공해 주는 클래스(SqlMapClientTemplate)를 개발자가 작성하는 DAO가 상속받아서 구현을 시작한다는 의미이다. Spring에서 이러한 기법을 사용해서 만든 AccountDao 구현은 다음과 같은 형태가 될 것이다.<br />public class AccountDaoImplSpring<br />extends SqlMapClientTemplate<br />implements AccountDao<br />{<br />public Integer insert(Account account) {<br />return (Integer) insert("Account.insert", account);<br />}<br />public int update(Account account) {<br />return update("Account.update", account);<br />}<br />public int delete(Account account) {<br />return delete(account.getAccountId());<br />}<br />public int delete(Integer accountId) {<br />return delete("Account.delete", accountId);<br />}<br />public List<Account> getAccountListByExample(<br />Account account) {<br />return queryForList("Account.getAccountListByExample",<br />account);<br />}<br /><br />getMapListByExample(Account account) {<br />return queryForList("Account.getMapListByExample",<br />account);<br />}<br />public List<IdDescription><br />getIdDescriptionListByExample(Account account) {<br />return<br />queryForList("Account.getIdDescriptionListByExample",<br />account);<br />}<br />public Account getById(Integer accountId) {<br />return (Account) queryForObject("Account.getById",<br />accountId);<br />}<br />public Account getById(Account account) {<br />return (Account) queryForList("Account.getById",<br />account);<br />}<br />}<br /><br />예리한 독자는 앞 장에서 본 코드와 거의 같다는 것을 알아차렸을 것이다. 하지만 여기서 알아둬야 할 것은 상속받는 클래스가 이전 코드와 다르다는 것이다. 이 클래스에서 다른 모든 점은 앞 장과 동일하다. 자 그렇다면 이제, 언제 어떤 클래스를 상속받아야 하는지 의문이 생길 것이다. 다음 절에서 알아보자.<br /><br />11.3.2 왜 iBATIS 대신에 Spring을 사용하는가?<br />이것은 당연히 물어볼 만한 질문이다. 이 책은 iBATIS에 대한 책인데 DAO 계층에 다른 것을 사용하는 방법에 대해 언급하는 이유는 무엇일까? Spring과 iBATIS는 그들만의 장점과 단점을 가지고 있고, 둘 중에 무엇을 사용할지 결정하려면 서로의 장단점에 대한 이해는 물론 개발하는 애플리케이션이 요구하는 것이 무엇인가도 이해해야 한다.<br />iBATIS DAO 계층의 장점은 빠르고 쉬운 솔루션이라는 점이다. 이미 iBATIS SQL Maps를 다운로드 하였다면, iBATIS DAO 프레임워크도 역시 사용할 수 있게 된 것이다. 필요한 것이 트랜잭션과 커넥션 관리뿐이라면 Spring보다 훨씬 더 간단하게 사용할 수 있는 프레임워크인 셈이다. 이러한 경우에는 iBATIS DAO 계층이 애플리케이션에 적합할 것이다.<br />iBATIS DAO의 간결함은 또한 가장 큰 단점이 되기도 한다. 일단 DAO 패턴을 사용하기 시작하면, 결합도가 낮아짐으로써(decoupling) 테스트하기 쉽다는 장점도 누릴 수 있게 되는것이다. 개발자는 애플리케이션의 다른 영역에서도 동일한 접근 방법을 사용하고자 할 것이다.<br />예를 들면 스트럿츠 애플리케이션에서 비즈니스 로직 클래스와 DAO 클래스 사이에서 사용하는 것과 동일한 접근 방법을 Action 클래스와 비즈니스 로직 클래스 사이에서도 사용할 것이다. Action 에서 필요한 코드의 구현을 알 필요 없이 오직 필요한 인터페이스만 알면된다. 또한 구현체는 설정을 통해 끼워 넣게 된다. 이렇게 하면 Action 클래스를 간결하게 유지하면서 모든 계층이 테스트하기 쉬워진다.<br />계층 간의 분리를 관리하는 것과 더불어, Spring 은 iBATIS DAO 계층과 마찬가지로 커넥션과 트랜잭션도 관리할 수 있다. Spring의 큰 장점은 이것이 DAO 계층에만 적용되는 것이 아니라 애플리케이션의 모든 부분에 적용된다는 점이다.<br /><br />11.4. 개발자 스스로 DAO 계층을 생성하기<br />때로는 iBATIS DAO 지원도 Spring DAO 지원도 여러분이 필요한 것을 정확히 채워주지 못할 수 있다. 이럴 때는 “스스로 만든 DAO 계층을 굴릴” 필요가 있다.<br />바닥부터 DAO 계층을 만들어가는 것은 굉장히 어려운 작업처럼 보일 것이다. 하지만, 실제로 구현하기 꽤 수월한 패턴임을 알고 나면 놀라게 될 것이다. 효율적인 DAO 계층에는 본질적으로 세 개의 티어가 존재한다.<br />1. 구현체에서 인터페이스를 분리하기<br />2. 외부에서 설정된 팩토리를 사용하여 구현체의 결합도 낮추기<br />3. 트랜잭션과 커넥션 관리기능 제공하기<br />우리의 목표에 따라서 처음 두 티어를 수행하려면 무엇이 필요한지 알아볼 것이다. 하지만 트랜잭션과 커넥션 관리는 7장을 참고하고 거기서부터 시작하라.<br /><br />11.4.1 구현체에서 인터페이스를 분리하기<br />DAO 를 인터페이스와 구현체로 분리해야 하는 이유는 두 가지가 있다. 첫째로 다른 형태의 데이터 접근을 지원해야 할 필요가 생길 경우 구현체를 바꿔 치기 할 수 있기 때문이다. 둘 째로 분리를 하면 테스트가 훨씬 쉽고 빨라진다. 실제 데이터베이스에 접근하는 객체 대신 모의 DAO 객체를 끼워 넣는 것이 가능해지기 때문이다.<br />IDE를 사용한다면 이 분리 과정을 매우 쉽게 처리할 수 있다. 대부분의 개발 환경에는 리펙터링 툴이 있어서 클래스에서 인터페이스를 분리해낼 수 있다. 하지만 이는 DAO를 구축하는 것에서는 아주 작은 일부분에 불과하다.<br />개발자가 DAO 패턴을 처음으로 접했다면, 인터페이스를 만들 때 구현 클래스를 JDBC나 iBATIS 혹은 어떤 다른 데이터베이스를 다루는 툴에 종속적인 부분에 노출시켜 버리기가 쉽다. 이것이 인터페이스를 관리할 때 더욱 어려운 부분이다. 이러한 노출은 DAO가 아닌 데이터 접근 구현체에 애플리케이션을 묶어버리기 때문에 문제가 된다. 비록 크게 어려운 일은 아니지만, 사소하게 다룰 문제도 아닌 것이다.<br />컬렉션(빈즈의 List 같은 것들)은 결과셋을 사용하는 코드를 변경하면 쉽게 사용할 수 있다. 하지만 다른 변경들과 마찬가지로 테스트를 해야 하며, 애플리케이션에서 어디에 이 코드가 위치해 있느냐에 따라서 테스트 과정이 매우 어려울 수도 있다. 예를 들면 대용량 데이터 셋에 가벼운 리포팅 기능을 제공하는 ‘Fast Lane Reader’ 패턴을 사용하는 웹 애플리케이션에서는 JDBD 코드가 뷰 계층과 직접 소통하는 경우가 있다. 이렇게 하면 테스트하기가 너무도 어려워진다. 사람의 개입을 필요로 하는 것은 무엇이든 더 많은 시간을 잡아먹기 때문이다. 게다가 원본뿐만 아니라 테스트 코드를 제대로 수행하도록 재작성하는 것도 어려울 것이다. 한 가지 해결책은 콜백을 사용해서 코드를 작성하여 데이터 접근 속도를 개선하는 것이다.(따라서 이 예제에서는 뷰가 요청한 데이터를 처리하는 RowHandler 같은 것이 있으면 좋을 것이다.)<br />SQL Maps API를 직접 사용하는 애플리케이션을 좀 더 캡슐화된 API를 사용하도록 수정하는 것은 어느 정도 쉽게 해결할 수 있다. 예를 들어 SqlMapClient 객체의 queryForList() 메서드를 호출하는 클래스를 개발하고 있다면, 이 호출을 스스로 작성한 DAO 클래스를 호출하도록 리팩터링하고 그 클래스의 메서드에서는 List 객체를 반환하게 하면 데이터 사용자 측에서는 오직 스스로 만든 DAO하고만 소통하게 된다.<br /><br />11.4.2 결합도 낮추기(decoupling)와 팩토리 생성하기<br />자 이제 인터페이스와 구현의 분리를 끝냈다. 인터페이스와 구현체 둘 다 DAO를 사용하는 클래스에 노출시키면 안 된다. 구현체에 대한 의존성을 제거하는 대신 인터페이스에 대한 의존성을 DAO를 사용하는 클래스에 추가한 것이기 때문이다.<br />내가 말하고자 하는 것은 DAO에 인터페이스를 추가하고 그 인터페이스를 구현하였다면 그 구현체를 어떻게 사용할 수 있는가 하는 것이다. 팩토리를 사용하지 않는다면 아마도 다음과 같은 방법을 사용하기 십상이다.<br />AccountDao accountDao = new AccountDaoImpl();<br />뭐가 문제인지 알겠는가? DAO를 구현에서 분리했음에도 여전히 곳곳에서 구현체를 직접 참조하고 있다. 이것은 여기서 생성한 DAO 객체를 애플리케이션 모든 곳에 전달하지 않는다면 가치가 없는 일이다. 아래와 같은 방식으로 사용하는 것이 더 나은 패턴이다.<br />AccountDao accountDao =<br /> (AccountDao)DaoFactory.get(AccountDao.class);<br /><br />이 예제에서는 무엇이 구현체일까? 개발자는 이에 대해 알지도 못하고 신경 쓸 필요도 없다. DaoFactory가 우리 대신 다 처리해 줄 것이기 때문이다. 우리가 신경 써야 할 것은 단지 이 DaoFactory가 AccountDao 인터페이스를 구현한 객체를 반환한다는 점뿐이다. 이 구현체가 일만 제대로 처리한다면 LDAP, JDBC 혹은 어떤 속임수를 사용해서 일을 처리하든 신경 쓰지 않는다.<br />추상 팩토리를 생성하는 것은 쉽고 재미있다! 그래, 어쩌면 재미는 없을지도 모르지만 여전히 쉬운 것은 사실이다. 이번 절에서는 간단한 팩토리를 만들고 우리가 직접 만든 DAO 클래스를 가져오는데 왜 팩토리를 사용해야 하는지 이야기해보자.<br />자 대체 DaoFactory는 어떻게 생긴 것일까? 놀랍게도 다음에서 볼 수 있듯이 코드가 몇 십줄밖에 안 된다.<br />public class DaoFactory {<br />private static DaoFactory instance = new DaoFactory();<br />private final String defaultConfigLocation =<br />"DaoFactory.properties";<br />private Properties daoMap;<br />private Properties instanceMap;<br />private String configLocation = System.getProperty(<br />"dao.factory.config",<br />defaultConfigLocation<br />);<br />private DaoFactory(){<br />daoMap = new Properties();<br />instanceMap = new Properties();<br />try {<br />daoMap.load(getInputStream(configLocation));<br />} catch (IOException e) {<br />throw new RuntimeException(e);<br />}<br />}<br />private InputStream getInputStream(String configLocation)<br />{<br />return Thread<br />.currentThread()<br />.getContextClassLoader()<br />.getResourceAsStream(configLocation);<br />}<br />public static DaoFactory getInstance() {<br />return instance;<br />}<br />public Object getDao(Class daoInterface){<br />if (instanceMap.containsKey(daoInterface)) {<br />return instanceMap.get(daoInterface);<br />}<br />return createDao(daoInterface);<br />}<br />private synchronized Object createDao(<br />Class daoInterface<br />) {<br />Class implementationClass;<br />try {<br />implementationClass = Class.forName((String)<br />daoMap.get(daoInterface));<br />Object implementation =<br />implementationClass.newInstance();<br />instanceMap.put(implementationClass, implementation);<br />} catch (Exception e) {<br />throw new RuntimeException(e);<br />}<br />return instanceMap.get(daoInterface);<br />}<br />}<br /><br />확실히 이것이 역사상 가장 멋진 팩토리는 아니다. 하지만 상당히 작으면서도 효율적이다. 이 팩토리의 public 인터페이스는 getInstance()와 getDao() 오직 이 두 개의 메서드만으로 이루어져 있다. Private 생성자는 설정 파일을 읽어 들인다. 이번 경우에 설정 파일은 인터페이스와 구현체의 이름을 나타내는 이름/값 쌍을 저장하는 properties 파일이다. 이 클래스는 스스로를 포함하는 (self-contained) 싱글턴이다. 따라서 getInstance() 메서드는 그저 이 클래스의 유일한 인스턴스를 반환한다. getDao() 메서드는 인터페이스의 구현체를 반환한다. DAO는 나중에 DAO에 대한 실제 요청이 발생할 때 createDao() 메서드에서 생성된다.Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-27453254797702349442011-06-06T21:58:00.000-07:002011-06-06T22:02:13.990-07:00iBATIS in Action (10/14)10. iBATIS 데이터 접근 객체 (DAO)
<br />
<br />10.1. 상세한 구현 숨기기
<br />
<br />객체지향 프로그래밍의 핵심 원리 중 하나는 구현과 public 인터페이스의 분리를 나타내는 캡슐화이다. DAO 패턴은 애플리케이션의 캡슐화를 도와주는 또 하나의 도구이다. DAO 패턴을 더 자세히 알아보기 전에 그림에서 DAO의 한 형태를 보자.
<br />
<br />그림 10 1. 간단하게 만든 DAO
<br />앞의 그림을 DAO보다는 JDBC 같다고 생각했다면 절반만 맞다. 이것은 JDBC 이지만 자바의 JDBC API는 DAO 패턴의 훌륭하고 실용적인 예제이기도 하다.
<br />가장 상위에 Connection 인터페이스를 구현한 객체의 인스턴스를 생성하는 팩토리(DataSource 인터페이스)가 있다. 일단 Connection을 획득하면 PreparedStatement나 CallableStatement 객체도 생성할 수 있게 되고, 그 다음으로 ResultSet 객체를 제공받게 된다. DataSource가 커넥션을 생성하는 방법, Connection이 PreparedStatement를 생성하는 방법, PreparedStatement가 쿼리에 파라미터를 바인딩하는 방법, ResultSet이 생성되는 방법 등을 개발자가 알아야 할 필요는 없다. Connection의 prepareStatement() 메서드를 호출하면 PreparedStatement 를 반환 받을 수 있다는 것만 알고 있다면, 그 외의 세세한 사항들은 알 필요가 없다.
<br />
<br />10.1.1 왜 분리하는가?
<br />
<br />데이터 접근 인터페이스로부터 데이터 접근 구현체를 분리하면, 다양한 데이터에 대해 동일한 인터페이스를 제공할 수 있다. 애플리케이션은 하나의 일관성 있는 데이터 접근 API를 사용하여 내부적으로는 서로 다른 데이터 접근 기법을 사용하는 여러 데이터베이스의 데이터에 접근할 수 있다.
<br />JDBC API는 DAO 패턴의 한 형태이다. JDBC API 영역에서 개발자는 인터페이스들을 사용할 수 있고, 데이터 베이스 벤더들은 상호 교환하여 사용할 수 있도록 이 인터페이스들을 구현한다. 가끔씩 벤더가 생각하기에 인터페이스가 충분한 기능을 제공하지 못한다면, 인터페이스와 상관없이 별도로 구현하기도 한다.
<br />JDBC 드라이버의 구현체를 살펴보면서 JDBC API의 DAO 패턴 덕분에 얼마나 JDBC 를 사용하기가 쉬워졌는지를 확인해 보라. 예를 들면 어떤 대형 데이터베이스 벤더가 그림 10.1의 5개의 인터페이스들의 기능을 구현했는데, 5 개의 JDBC API 인터페이스를 구현하기 전에는 9개 더 많은 (벤더에 종속적인) 인터페이스들로 구성돼 있었다. (이는 실질적인 JDBC 구현 클래스들의 영역 밖에 있는 것은 계산에 포함시키지 않은 것이다.). 사실은 이 책의 저자들 중 한 명이 이 구현체에 대한 UML을 그려서 이 부분에 예제로 넣으려고 했었는데, 이번 장의 내용이 이미 너무 많고 다른 내용들도 추가해야 하기 때문에 하지 않았다. 그렇다. DAO를 사용하지 않으면 그만큼 복잡했었다.
<br />DAO 패턴이 있기 때문에 iBATIS SQL Maps 와 ORM 과 같은 툴이 존재할 수 있다. 모든 데이터베이스 업체들이 JDBC API를 매우 정확하게 구현하기 때문에, 이러한 툴을 작성할 때 내부적인 구현에 신경 쓰지 않고 이러한 인터페이스만 참조하면 된다. 대부분의 경우 이러한 툴은 거의 모든 벤더들이 제공하는 구현체들과 문제없이 작동하며, 개발자는 오직 DataSource 를 생성할 때만 벤더가 제공하는 소프트웨어를 참조하면 된다. 그 이후부터는 공통 API로만 작업해도 된다.
<br />바로 이러한, 즉 데이터에 접근하는 내부적인 상세 구현을 숨기고 인터페이스만을 제공하여 애플리케이션을 작성할 수 있도록 도와 주는 것이 iBATIS DAO의 목표 중의 하나이기도 하다. 따라서 하이버네이트 기반 애플리케이션을 DAO 패턴을 사용하여 작성하였다면, 이를 전체 애플리케이션을 다시 작성할 필요 없이 SQL Maps 가반의 구현이나 혹은 JDBC 기반 구현으로 바꿔 치기 하는 것도 가능하다. 대신 바꿔야 할 부분은 단지 애플리케이션이 사용하는 인터페이스의 구현체뿐이다. DAO 인터페이스를 제대로 구현만 했다면, 이 애플리케이션은 문제없이 작동할 것이다.
<br />DAO는 java.sql 혹은 javax.sql 패키지에 관련된 인터페이스나 객체를 외부로 드러내면 안된다는 규칙을 지켜야 한다. 이는 DAO가 애플리케이션에서 데이터 소스를 통합하는 계층이며, 이 DAO에 접근하는 계층은 저수준의 상세한 구현은 고려하지 않아도 됨을 의미한다. 이는 또한 추가적으로 데이터 접근 메커니즘(예를 들어 SQL Maps, 하이버네이트, JDBC, 기타 등등…)을 변경하는 것이 가능해짐을 의미한다. DAO 패턴을 사용하면 비슷한 방식으로 데이터 소스를 변경할 수 있다. 왜냐하면 인터페이스를 만들 때 데이터 소스 관련 정보를 감추도록 작성하기 때문에 애플리케이션은 데이터가 Oracle이나 PostgreSQL 혹은 SQL을 기반으로 하지 않은 데이터베이스에서 오는지 여부 등은 전혀 알 필요가 없다. 애플리케이션은 단지 자바빈즈만 신경쓰면 된다. 이 빈즈가 어디에서 생성되었는지는 애플리케이션 입장에서는 아무 의미도 없다.
<br />이런 방식의 분리를 통해 얻을 수 있는 추가적인 이점 하나가 더 있는데, 테스트가 훨씬 더 쉬워진다는 점이다. 개발자는 DAO가 사용하는 특정 데이터 접근 방식에 국한된 인터페이스를 사용하지 않고, List나 Map 같은 더 일반적인 객체는 혹은 애플리케이션에 국한된 자바빈즈만 사용해서 작업하기 때문이다.
<br />
<br />10.1.2 간단한 예제
<br />iBATIS DAO를 설정하고 사용하는 간단한 예제로 시작해보자. 그 전에 우리가 설정할 DAO를 먼저보자. 이 (JDBC 예제보다는 훨씬 더 단순한) DAO는 한 개의 인터페이스(AccountDao)와 그 구현(AccountDaoImpl) 으로 이뤄져 있다. 다른 두 클래스 중 하나는 인터페이스를 사용하는 것(AccountService)이고 DaoManager 클래스는 iBATIS가 DAO를 생성할 때 사용하는 팩토리 클래스이다. DaoManager 클래스는 dao.xml 설정 파일을 사용하여 설정한다.
<br />- Dao.xml 설정파일
<br />DaoManager는 보통 dao.xml 이라는 이름의 XML 파일로 설정한다. 이 파일에는 iBATIS가 DAO를 어떻게 조직화할지 설정하는 데 필요한 정보가 들어간다.다음은 SQL Maps에 기반한 DAO 계층을 구성하는 XML 설정 파일의 예제이다.
<br /><?xml version="1.0" encoding="UTF-8" ?>
<br /><!DOCTYPE daoConfig
<br />PUBLIC
<br />"-//ibatis.apache.org//DTD DAO Configuration 2.0//EN"
<br />"http://ibatis.apache.org/dtd/dao-2.dtd">
<br /><daoConfig>
<br /><context id="example">
<br />
<br /><property
<br />name="SqlMapConfigResource"
<br />value="examples/SqlMapConfig.xml"/>
<br /></transactionManager>
<br /><dao
<br />interface="examples.dao.AccountDao"
<br />implementation="examples.dao.impl.AccountDao"/>
<br /></context>
<br /></daoConfig>
<br />위에서 example 이라는 이름의 DAO 컨텍스트를 생성하고 트랜잭션은 SQL Maps가 관리하도록 설정한다. 그리고 Account 라는 한 개의 DAO 만을 설정했다. 다음절에서 이 설정 파일의 내용을 좀 더 자세히 알아볼 것이다. 그러니 지금은 잘 이해가 안되더라도 괜찮다.
<br />
<br />DaoManager 생성하기
<br />다음은 (JDBC의 DataSource 처름 데이터 접근 계층의 시작점 역할을 하는) DaoManager 인스턴스를 생성할 차례이다. 개발자는 DaoManager에서 DAO를 가져온다. DAO 관리자를 구성하는데 약간은 시간이 걸리기 때문에 이 객체를 생성하고 나서 나중에 재사용할수 있는 위치에 저장해두는 것이 좋다. 10.4 절에서 이에 대해 다시 알아볼 예정이고, 지금 당장은 간단한 DaoService라는 클래스를 만들어서 DaoManager 인스턴스를 생성하고 저장하게 하자.
<br />package org.apache.mapper2.examples.chapter10.dao;
<br />import com.ibatis.dao.client.DaoManager;
<br />import com.ibatis.dao.client.DaoManagerBuilder;
<br />import com.ibatis.common.resources.Resources;
<br />import java.io.Reader;
<br />import java.io.IOException;
<br />public class DaoService {
<br />private static DaoManager daoManager;
<br />public static synchronized DaoManager getDaoManager(){
<br />String daoXmlResource = "dao.xml";
<br />Reader reader;
<br />if (null == daoManager){
<br />try {
<br />reader =
<br />Resources.getResourceAsReader(daoXmlResource);
<br />daoManager =
<br />DaoManagerBuilder.buildDaoManager(reader);
<br />return daoManager;
<br />} catch (IOException e) {
<br />throw new RuntimeException(
<br />"Unable to create DAO manager.", e);
<br />}
<br />} else {
<br />return daoManager;
<br />}
<br />}
<br />public static Dao getDao(Class interfaceClass){
<br />return getDaoManager().getDao(interfaceClass);
<br />}
<br />}
<br />나중에 관련사항이 또 나오기 때문에, 지금은 이것을 간략하게만 살펴보자. 첫 번째 중요한 점은 위에서 본 dao.xml 파일의 위치를 가리키는 daoXmlResource 변수이다. 이것이 중요한 이유는 파일 경로가 아니라 클래스패스의 리소스 위치를 의미하기 때문이다. 예를 들어 웹 애플리케이션에서 작동한다면, 이 파일은 WEB-INF/classed 디렉터리에 있을 것이다. Resources 클래스는 그 파일을 클래스 패스에서 찾아서 Reader로 만들어서 DaoManagerBuilder 클래스에 전달한다.
<br />DaoManagerBuilder는 DaoManager 인스턴스를 생성한다. 이제는 다음과 같은 간단한 호출만으로 DAO 객체를 가져올 수 있다.
<br />AccountDao accoutDao = (AccountDao) DaoService.getDao (AccountDao.class);
<br /> 자, Dao 패턴 사용의 강점에 대한 예제를 보았다면 이제는 이것을 어떻게 사용할지에 대한 의문을 품게 될 것이다. 첫째로 바로 다음에 알아볼 주제인 설정을 해야 한다.
<br />
<br />10.2. DAO 설정하기
<br />
<br />Dao.xml 파일은 iBATIS DAO 프레임워크를 사용할 때 필요한 유일한 설정 파일이다. 이것은 매우 단순한 파일로 , DAO 클래스의 트랜잭션 관리에 필요한 정보와 개발자가 만든 인터페이스에 맞는 DAO 구현체를 가져오는 방법을 DAO 관리자에게 제공하기 위해 사용한다.
<br />먼저 설정 요소들을 살펴보고 일반적인 문제들을 해결하는 데 이를 어떻게 사용할지 몇 가지 방법을 알아보자.
<br />
<br />10.2.1 <properties> 요소
<br />
<br />Properties 요소는 SqlMapConfig.xml 파일에 있는 요소와 같은 방법으로 사용한다. 이 요소에 프로퍼티 파일을 지정하면 그 프로퍼티 파일에 있는 모든 프로퍼티를 DAO 계층 설정에서 ${name} 문법을 통해 사용할 수 있다.
<br />이러한 접근 방식은 개발과 운영(그리고 어쩌면 이관 및 서버 테스팅)을 위해 서버를 분리하는 경우에 매우 유용하다. 이러한 경우, 모든 DAO 클래스를 설정하고서 환경에 따라 다른 항목들만 properties 파일에 둘 수 있다. 그러고 나서 각각의 환경에 배포할 때 properties 파일만 변경하면 된다.
<br />
<br />10.2.2 <context> 요소
<br />
<br />DAO 컨텍스트는 서로 관련된 설정 정보와 DAO 구현체를 묶어주는 역할을 한다.
<br /><context id=”example”>
<br />컨텍스트는 언제나 관계형 데이터베이스나 일반적인 파일과 같은 한 개의 데이터 소스와 엮이게 된다. 다중 컨텍스트를 설정하여, 다중 데이터베이스에 대한 접근 설정을 손쉽게 중앙 집중화할 수도 있다.
<br />10.3 절에서는 서로 다른 데이터 접근 모델, 즉 하나는 SQL Maps를 사용하고 다른 하나는 하이버네이트, 그리고 마지막은 일반적인 JDBC를 사용하여 다중 DAO 그룹 생성하는 컨텍스트 사용 예를 볼 것이다.
<br />각각의 컨텍스트에는 자체적인 트랜잭션 관리자와 DAO 구현체들이 있다. 다음의 두 절에서, 각각의 항목을 설정하는 방법을 살펴볼 것이다.
<br />
<br />10.2.3 <transactionManager> 요소
<br />
<br />이름이 암시하는 것처럼, 트랜잭션 관리자는 DAO 클래스의 트랜잭션(7장에서 상세히 다루었다.)을 관리한다. <transactionManager> 요소의 type 속성에 사용하고자 하는 DaoTransactionManager 구현체의 이름을 명시한다. iBATIS DAO 프레임워크는 기본적으로 각각 서로 다른 데이터 접근 툴을 지원하는 일곱 가지의 서로 다른 트랜잭션 관리자를 제공해준다. 표에서 살펴보자.
<br />타입 별칭 트랜잭션 관리자/프로퍼티 설명
<br />EXTERNAL ExternalDaoTransactionManager iBATIS DAO 프레임워크 외부에서 개발자가 자체적으로 트랜잭션을 관리하도록 하는 “아무것도 하지 않는 트랜잭션
<br />HIBERNATE HibernateDaoTransactionManager 하이버네이트의 트랜잭션 관리 기능에 위임
<br />JDBC JdbcDaoTransactionManager
<br />* DataSource
<br />* JDBC.Driver
<br />* JDBC.ConnectionURL
<br />* JDBC.Username
<br />* JDBC.Password
<br />* JDBC.DefaultAutoCommit Datasource API 를 통해 커넥션 풀링을 처리하고자 할 때 JDBC 타입을 사용한다. SIMPLE, DBCP 그리고 JNDI 이렇게 세개의 DataSource 구현체가 지원된다.
<br />SIMPLE은 iBATIS의 SimpleDataSource의 구현체로 부하와 의존성이 가장 적은 독립적인 구현체이다.
<br />DBCP는 Jakarta DBCP DataSource 를 사용하는 구현체이다.
<br />마지막으로, JNDI는 DataSource 참조를 JNDI 디렉터리에서 가져오는 구현체이다. 이는 가장 일반적이고 유연한 설정 방식이다. DataSource 설정을 애플리케이션 서버에서 중앙 집중적으로 해줄 수 있기 때문이다.
<br />JTA JtaDaoTransactionManager
<br />* DBJndiContext
<br />* UserTransaction Java Transaction Architecture (JTA) API를 사용하여 트랜잭션을 관리.
<br />DataSource 구현체를 JNDI 를 통해 가져오고 또한 UserTransaction 인스턴스도 JNDI를 통해 접근 가능해야 한다.
<br />OJB OjbBrokerTransactionManager OJB 트랜잭션 관리 기능으로 위임
<br />SQLMAP SqlMapDaoTransactionManager SQL Maps 트랜잭션 관리 기능으로 위임
<br />TOPLINK ToplinkDaoTransactionManager TopLink 트랜잭션 관리 기능으로 위임
<br />
<br />이제는 무슨 옵션이 있는지 알았을 것이다. 각각을 좀 더 자세히 살펴보고 무엇 때문에 이들이 필요한지 알아보자.
<br />
<br />- EXTERNAL 트랜잭션 관리자
<br />EXTERNAL 트랜잭션 관리자는 설정하기가 가장 쉽지만(프로퍼티가 없으며 전달된 프로퍼티는 무시된다.) 애플리케이션에서 모든 트랜잭션 관리를 스스로 해야 하기 때문에 잠재적으로는 사용하기 가장 어렵다.
<br />- HIBERNATE 트랜잭션 관리자
<br />이 트랜잭션 관리자는 설정이 매우 간단하다. 전달되는 모든 프로퍼티를 가지고 하이버네이트 세션 팩토리에 그 프로퍼티들을 전달한다. 또 “class.”로 시작하는 이름을 가진 프로퍼티는 하이버네이트가 관리하는 클래스가 된다고 가정하고 세션 팩토리를 구축하는 데 사용할 설정 객체에 추가한다. 그리고 “map.”으로 시작하는 이름으로 전달되는 프로퍼티는 매핑 파일로 가정하고 설정 객체에 전달한다.
<br />- JDBC 트랜잭션 관리자
<br />이 트랜잭션 관리자는 아마도 설정하기가 가장 까다로울 것이다. 이 트랜잭션 관리자는 DataSource 프로퍼티가 꼭 있어야 하며 “SIMPLE”, “DBCP”, 또는 “JNDI”중에 하나로 지정해줘야 한다.
<br />- SIMPLE 데이터 소스
<br />최소한의 부하와 의존성을 위한 독립적인 구현체인 SIMPLE 데이터소스는 iBATIS SimpleDataSource의 구현체다. 이것은 5개의 프로퍼티를 필요로 한다.
<br />* JDBC.Driver – 이 DAO 컨텍스트의 트랜잭션을 관리하는 데 사용할 JDBC 드라이버의 완전한 패키지 경로를 포함한 클래스명.
<br />* JDBC.ConnectionURL – 데이터베이스에 접속할 때 사용하는 JDBC URL
<br />*JDBC.Username – 데이터베이스에 접속할 때 사용하는 사용자명
<br />*JDBC.Password – 데이터베이스에 접속할 때 사용하는 비밀번호
<br />*JDBC.DefaultAutoCommit – “true”(또는 자바의 Boolean 클래스가 true로 간주하는 모든 표현식)로 설정한다면, 데이터 소스가 반환하는 커넥션의 autoCommit 프로퍼티도 DAO 컨텍스트에서 true로 설정될 것이다.
<br />이러한 필수 프로퍼티에 추가적으로, 커넥션 풀을 설정하기 위한 여덟개의 선택적인 프로퍼티가 있다.
<br />* Pool.MaximumActiveConnections – 커넥션 풀이 동시에 활성화(active)할 수 있는 커넥션의 개수. 디폴트 값은 10개의 커넥션이다.
<br />* Pool.MaximumIdleConnections – 커넥션 풀이 동시에 유휴상태(idle)로 둘 수 있는 커넥션의 개수. 디폴트 값은 5개의 커넥션이다.
<br />* Pool.MaximumCheckoutTime – 커넥션을 요청하고서 획득할 때까지 기다리는 최대시간. 디폴트 값은 20,000 밀리초, 즉 20초이다.
<br />* Pool.TimeToWati – 사용 불가능한 커넥션을 요청했을 때 기다리는 최대 시간을 밀리초로 지정한다. 디폴트 값은 20,000 밀리초 즉, 20초이다.
<br />* Pool.PingEnabled – 만약 true(또는 자바의 Boolean 클래스가 true로 간주하는 모든 표현식)라면, (시간이 오래되어) 커넥션이 닫힐 수 있는 상태가 되면 Pool.PingQuery 프로퍼티에 지정된 쿼리를 이용해 커넥션을 테스트한다. 디폴트 값은 false이며 이는 커넥션을 사용하기 전에는 테스트하지 않음을 의미한다. 아래의 세가지 프로퍼티로 커넥션 핑 테스트의 행동 방식을 결정한다.
<br />* PoolPingQuery – 커넥션이 아직 살아 있는지 테스트할 필요가 있을 때 실행하는 쿼리를 지정한다. 값을 매우 빨리 반환하는 쿼리로 지정해야 한다. 예를 들면 Oracle 에서는 ‘select 0 from dual’ 같은 쿼리로 지정하면 좋다.
<br />* Pool.PingConnectionOlderThan – 어떤 커넥션이 닫힐 수 있는 상태가 되었는지 판단하는 기준 시간(밀리초)을 지정한다. 디폴트 값은 0이며 이는 PingEnabled가 true 일 때 커넥션을 사용 할 때마다 검사한다는 의미이다. 트랜잭션이 많은 환경에서는 성능에 심각하게 악영향을 줄 수 있다.
<br />* Pool.PingConnectionsNotUsedFor – 커넥션이 얼마동안 유휴 상태이면 닫힐 수 있는 상태가 되었다고 간주하는지를 밀리초로 지정한다.
<br />- DBCP 데이터 소스
<br />DBCP 데이터 소소는 Jakarta Commons Database Connection Pooling(DBCP) 프로젝트의 데이터 소스 구현체에 대한 래퍼이다. Jar 파일과 추가 설정이 필요하지만 이를 통해 좀 더 견고한 구현체를 사용할 수 있다. 이 트랜잭션 관리자의 프로퍼티는 어떤 프로퍼티를 사용할 수 있느냐에 따라 다르게 다루어진다. DBCP 트랜잭션 관리자를 설정하는 기존의 방법(여전히 지원된다.) 은 다음의 여덟 개의 프로퍼티를 설정하는 것이다.
<br />* JDBC.Driver – DAO 컨텍스트가 사용할 JDBC 드라이버를 지정한다.
<br />* JDBC.ConnectionURL – DAO 컨텍스트의 데이터베이스 접속 JDBC URL이다.
<br />* JDBC.Username – 데이터 베이스에 연결할 때 사용할 사용자명
<br />* JDBC.Password – 데이터베이스에 연결할 때 사용할 비밀번호
<br />* Pool.ValidationQuery – 데이터베이스 연결이 유효한지 검사하는 데 사용하는 쿼리
<br />* Pool.MaximumActiveConnections – 커넥션 풀에서 유휴 상태로 존재할 수 있는 커넥션의 최대 개수를 지정한다.
<br />* Pool.MaximumWait – 커넥션을 요청하고서 기다릴 최대 시간(밀리초)을 지정한다. 해당 시간이 지나도 못 가져오면 그 커넥션은 포기한다.
<br />DBCP 데이터 소스를 설정하는 새로운 방법은 이를 간단히 자바 빈즈로 여기고 처리하기 때문에 좀 더 유연하다. 따라서 모든 프로퍼티는 iBATIS에서 사용 가능한 get/set 메서드로 나타낸다. 예를 들어 데이터 소스에 “driverClassName”을 설정하려면 다음과 같이 하면 된다.
<br /><property
<br />name=”draverClassName”
<br />value=”com.mysql.jdbc.Driver” />
<br />[참고] DBCP 데이터 소스를 사용하고 설정하는 것에 대해 좀 더 공부해 보고자 한다면, Jakarta 프로젝트의 공식 사이트 http://jakarta.apache.org/commons/dbcp/ 를 방문해 보길 바란다.
<br />- JNDI 데이터 소스
<br />JNDI 데이터 소스는 애플리케이션 컨테이너에서 제공하는 모든 JNDI 컨텍스트를 사용하려고 나온 것이다. 아마도 설정은 이것이 가장 간단할 것이다. 이는 DBJndiContext 라는 단 한 개의 프로퍼티만 있으면 되며, 이 프로퍼티에 데이터 소스를 포함하고 있는 JNDI 컨텍스트 이름을 지정한다.
<br />이 데이터 소스 요소의 “context”로 시작하는 자식 <properties> 요소를 사용하여 InitialContext 생성자에 다른 프로퍼티를 넘겨주는 것도 가능하다.
<br />예를 들어 “someProperty” 라는 이름의 프로퍼티를 전달하려면 다음 구문을 사용하면 된다.
<br /><property name=”context.someProperty” value=”someValue”/>
<br />
<br />- JTA 트랜잭션 관리자
<br />Java Transaction API (JTA) 트랜잭션 관리자를 통해서 여러 데이터 베이스간의 분산 트랜잭션을 사용할 수 있다. 이것은 마치 한 개의 데이터베이스로 작업하는 것처럼 쉽게 다중 데이터베이스의 데이터에 가해진 변경을 커밋이나 롤백 할 수 있다는 것을 의미한다.
<br />대부분의 설정 작업이 JNDI에서 이뤄지기 때문에 이 트랜잭션 관리자를 설정하는 데는 두 개의 프로퍼티만 지정하면 된다. 첫 번째 프로퍼티는 DBJndiContext로 트랜잭션 관리자에서 사용할 데이터 소스를 포함하고 있는 JNDI 컨텍스트의 이름을 지정한다. 다른 프로퍼티는 UserTransaction 으로 사용자 트랜잭션을 포함하고 있는 컨텍스트의 이름을 지정한다.
<br />- QJB 트랜잭션 관리자
<br />ObJectRelationalBridge(OJB)는 또 다른 객체 관계 매핑 툴로 관계형 데이터베이스를 사용하여 자바 객체를 영구 저장하는 기능을 제공한다. OJB 트랜잭션 관리자는 OJB 가 제공하는 트랜잭션 관리자 인터페이스의 래퍼이다.
<br />모든 OJB 트랜잭션 관리자의 설정은 iBATIS DAO 를 사용하지 않을 경우와 동일하게 하면 된다.
<br />[참고] OJB 툴에 대한 좀 더 다양한 정보와 이 트랜잭션 관리자를 설정하는 방법을 보려면 http://db.apache.org/ojb/ 를 방문해 보길 바란다.
<br />- SQLMAP 트랜잭션 관리자
<br />SQLMAP은 iBATIS DAO를 사용할 때 가장 일반적으로 사용하게 될 트랜잭션 관리자일 것이다. SQLMAP 트랜잭션 관리자는 “SqlMapConfigURL” 이나 “SqlMapConfigResource” 프로퍼티 중 하나를 필요로 한다. 이것은 iBATIS SQL Maps가 트랜잭션 관리에 사용하는 것과 동일한 트랜잭션 관리자를 사용한다.
<br />SqlMapConfigURL 프로퍼티는 java.net.URL 클래스가 파싱해서 리소스를 가져올 수 있는 문자열로 지정한다. http: 혹은 file: 프로토콜 등이 이에 해당한다. SqlMapConfigResource 프로퍼티는 현재 클래스패스에 존재하는 자원을 참조하고자 할 때 사용한다.
<br />- TOPLINK 트랜잭션 관리자
<br />Oracle 의 제품인 Toplink는 또다른 ORM 툴이다. TOPLINK 트랜잭션 관리자에 필요한 프로퍼티는 “session.name” 프로퍼티 하나뿐이다. 이 값을 사용하여 DAO 컨텍스트에서 사용할 세션을 가져온다.
<br />- 자체적으로 생성한 트랜잭션 관리자나 다른 트랜잭션 관리자를 사용하기
<br />위의 트랜잭션 관리자 구현체들과 더불어, DaoTransactionManager는 개발자가 직접 구현할 수 있는 인터페이스이다. 구현체의 완전한 클래스 이름을 트랜잭션 관리자 설정 요소의 type 속성에 지정해서 DAO 설정에 넣으면 된다. <transactionManager> 요소에 포함된 모든 프로퍼티는 트랜잭션 관리자 클래스의 configure() 메서드에 전달된다.
<br /><transactionManager>
<br /> type=”com.mycompany.MyNiftyTransactionManager”>
<br /> <property name=”someProp” value=”aValue” />
<br /> <property name=”someOtherProp” value=”anotherValue” />
<br /></transactionManager>
<br />위 예에서 iBATIS DAO 프레임워크는 MyNiftyTransactionManager 클래스의 인스턴스를 생성하고, someProp과 someOtherProp 프로퍼티를 포함하고 있는 Properties 객체를 파라미터로 넘긴다. 11장에서 기존 DaoTransactionManager의 구현체들에 대해 상세히 공부해 볼 것이다.
<br />10.2.4 DAO 요소
<br />일단 트랜잭션 관리자를 선택하고 설정하고 나면, DAO 컨텍스트에 DAO 요소를 추가할 수 있다. 이를 통해 DAO 인터페이스를 정의하고 구현한다. DAO 컨텍스트는 이 인터페이스와 구현체를 애플리케이션에서 사용할 수 있게 만들어 준다.
<br /><dao> 요소는 오직 두 가지 프로퍼티만을 가지고 있다. 바로 interface와 implementation 이다.
<br />[참고] 속성 명인 “interface”는 DAO 구현체를 구분하는 역할을 할 뿐이다. 따라서 실제로는 인터페이스를 사용할 필요는 없다. 위의 경우, 두 속성 (interface와 implementation)은 구현체의 패키지 경로를 포함한 클래스명을 지정하면 된다. 이것이 (인터페이스를 사용하지 않는 것) 코드를 약간 줄여줄 수는 있다. 하지만 결코 권장하지는 않는다. 인터페이스를 사용하지 않으면 DAO 계층을 추가함으로써 얻게 되는 이점이 사라지기 때문이다. 바로 인터페이스와 구현의 분리라는 이점 말이다. 코드의 양이 줄어드는 것에 관해서는, 최근 거의 모든 IDE들이 구현체로부터 인터페이스를 분리해 내는 리팩터링 툴을 제공하기 때문에, 인터페이스를 만들기 전에 먼저 DAO 구현체를 작성하고 테스트 한 뒤에 나중에 몇 번의 마우스 클릭만으로도 인터페이스를 생성해 낼 수 있다.
<br />Interface 프로퍼티는 DAO 맵 안의 DAO를 구분하기 위해 사용하고 대개 다음과 같은 방식으로 사용한다.
<br /><dao interface=”com.mycompany.system.dao.AccountDao”
<br /> Implementation=”com.mycompany.system.dao.impl.AccountDaoImpl”/>
<br />
<br />이 예제를 살펴보자. 클래스의 관계가 앞의 10.1.2 에서 묘사했던 것과 같다고 가정하다. 여기서는 AccountDao 인터페이스가 있고 AccountDaoImpl 클래스가 이 인터페이스를 구현하고 있다. DaoManager를 사용하여 DAO를 가져오려면 다음의 코드를 사용하면 된다.
<br />AccountDao accountDao = (AccountDao)
<br /> daoManager.getDao(AccountDao.class);
<br />이 코드에서는 AccountDao 변수를 선언하고 DaoManager 인스턴스에서 인터페이스 이름을 이용하여 변수 값을 요청한다. 그리고는 DaoManager는 단지 Object 형으로 값을 반환하기 때문에 그 값을 AccountDao 인터페이스로 형 변환한다.
<br />이전 버전의 DAO 에서는 인터페이스 클래스 대신에 String 타입으로 파라미터를 전달하는 것도 가능했었다. 하지만 이 기능이 잠재적으로 오류가 발생해야 하는 부분에서도 오류가 발생하지 않게 막아버리기 때문에 2.x 버전에서는 이를 제거하였다. DAO 구현체를 구분하기 위해 클래스 명을 강제로 사용하게 하여, 자바 환경에서 오타를 피할 수 있게 된다. 이는 인터페이스 명을 잘못 쓴다면 코드가 컴파일조차도 되지 않을 것이기 때문이다. 오류는 일찍 발생해서 알아챌수록 좋다.
<br />자 이제 iBATIS DAO 프레임워크로 무엇을 할 수 있는지에 대한 기본 이해를 다졌으니, 좀 더 고급 사용 기법들을 살펴볼 시간이 되었다.
<br />
<br />10.3. 설정 팁들
<br />DAO 설정이 표면적으로는 매우 간단하게 보이지만, 그럼에도 상당한 유연성을 제공해준다. DAO 관리자를 독창적으로 설정하면, 일반적인 문제들을 꽤 세련된 접근법을 사용하여 해결할 수 있다. 그런 몇 가지 접근법을 보자.
<br />10.3.1 다중 서버
<br />앞에서 이야기했듯이 개발 업체들이 개발, QC 테스트(Quality Control Test), UA 테스트 (User Acceptance Test) 그리고 운영 환경에서 서로 다른 여러 서버를 사용하는 것은 흔히 볼 수 있는 일이다.
<br />이러한 경우, dao.xml 파일에서 환경 정보를 제거하고 외부 파일에 정보를 둘 수 있다는 점이 매우 유용하게 작용한다. 바로 그러한 역할을 하기 위해 properties 요소를 만들어 두었다. 다음은 JDBC 설정 정보를 dao.xml 파일 외부에 두는 예제 dao.xml 파일이다.
<br /><?xml version="1.0" encoding="UTF-8" ?>
<br /><!DOCTYPE daoConfig
<br />PUBLIC
<br />"-//ibatis.apache.org//DTD DAO Configuration 2.0//EN"
<br />"http://ibatis.apache.org/dtd/dao-2.dtd">
<br /><daoConfig>
<br /><properties resource="server.properties"/>
<br /><context>
<br /><transactionManager type="JDBC">
<br /><property name="DataSource" value="SIMPLE"/>
<br /><property name="JDBC.Driver" value="${jdbcDriver}" />
<br /><property name="JDBC.ConnectionURL"
<br />value="${jdbcUrl}" />
<br /><property name="JDBC.Username" value="${jdbcUser}" />
<br /><property name="JDBC.Password"
<br />value="${jdbcPassword}" />
<br /><property name="JDBC.DefaultAutoCommit"
<br />value="${jdbcAutoCommit}" />
<br /></transactionManager>
<br /><dao interface="..." implementation="..."/>
<br /></context>
<br /></daoConfig>
<br />
<br />이 예제에서 모든 프로퍼티 값은 클래스패스의 가장 상위에서 적재되는 “server.properties” 파일에 저장돼 있다.
<br />이것이 우리가 선호하는 방식이다. 왜냐하면 모든 파일을 (CVS, Subversion 등을 이용하여) 버전 관리할 수 있고, 프로퍼티 파일의 서로 다른 버전들을 환경에 따라 서로 다른 이름(예를 들어 server-production.properties, server-user.properties, 기타 등등)을 주어 구분하여 (Ant 나 셸 스크립트 등을 이용한) 빌드 처리기가 자동으로 올바른 위치에 올바른 버전의 파일을 복사할 수 있게 되기 때문이다.
<br />이 접근 방식은 설정 파일에 보안을 엄격히 적용하여 버전 관리하에 파일을 두지 않는 훨씬 민감한 환경에서도 잘 작동한다. 그런 환경에서 이 방식을 사용하면 수작업을 통한 설정이 훨씬 단순해진다. 환경에 따라 변경되는 설정 파일이 항상 동일하기 때문이다.
<br />10.3.2 다중 데이터베이스의 방언(dialect)
<br />만약 서로 다른 코드를 사용해야 할 만큼 서로 상이한 여러 데이터베이스 플랫폼(예를 들면, MySQL 을 저장 프로시저 없이 사용하고 Oracle 을 저장 프로시저와 함께 사용할 때)을 지원하기 위해서 DAO 패턴을 사용한다면, JDBC 설정에서 했던 것과 유사한 방식으로 처리하고 패키지 이름을 프로퍼티 파일에 지정해 줄 수 있다. (다음을 보라.)
<br /><?xml version="1.0" encoding="UTF-8" ?>
<br /><!DOCTYPE daoConfig
<br />PUBLIC
<br />"-//ibatis.apache.org//DTD DAO Configuration 2.0//EN"
<br />"http://ibatis.apache.org/dtd/dao-2.dtd">
<br /><daoConfig>
<br /><properties resource="config.properties"/>
<br /><context>
<br /><transactionManager type="JDBC">
<br /><property name="DataSource" value="SIMPLE"/>
<br /><property name="JDBC.Driver" value="${jdbcDriver}" />
<br /><property name="JDBC.ConnectionURL"
<br />value="${jdbcUrl}" />
<br /><property name="JDBC.Username" value="${jdbcUser}" />
<br /><property name="JDBC.Password"
<br />value="${jdbcPassword}" />
<br /><property name="JDBC.DefaultAutoCommit"
<br />value="${jdbcAutoCommit}" />
<br /></transactionManager>
<br /><dao interface="com.company.system.dao.AccountDao"
<br />implementation="${impl}.AccountDaoImpl"/>
<br /></context>
<br /></daoConfig>
<br />
<br />위에서는 모든 서버 설정과 데이터 접근 구현체들이 주 설정 파일 외부에 빠져있다.
<br />
<br />10.3.3 실행시에 설정 변경하기
<br />지금까지 본 것만으로는 충분히 유연하지 못한 것인 양, DAO 관리자는 실행시에 값이 결정되는 프로퍼티를 DAO 관리자가 생성될 때 전달하는 기능도 제공한다.
<br />10.1.2 절에서 살펴 본 코드의 두 번째 형태는 실행시에 설정 정보를 전달할 수 있도록 다음과 같은 메서드를 제공해준다.
<br />public static DaoManager getDaoManager(Properties props)
<br />{
<br />String daoXml = "/org/apache/mapper2/examples/Dao.xml";
<br />Reader reader;
<br />DaoManager localDaoManager;
<br />try {
<br />reader = Resources.getResourceAsReader(daoXml);
<br />localDaoManager =
<br />DaoManagerBuilder.buildDaoManager(reader, props);
<br />} catch (IOException e) {
<br />throw new RuntimeException(
<br />"Unable to create DAO manager.", e);
<br />}
<br />return localDaoManager;
<br />}
<br />
<br />위의 코드는 평소처럼 애플리케이션 전체적으로 공유하는 DAO 관리자를 반환하는 대신, 실행시간에 프로퍼티를 넘겨주어 동적으로 설정되는 DAO 관리자를 생성한다. 비록 이 기능이 훨씬 더 유연하긴 하지만, 이는 또한 DAO 관리자가 필요할 때마다 매번 생성하는 대신(객체를 매번 생성하면 성능 저하가 오기 때문에) 이를 사용하는 사람이 직접 스스로 DAO 관리자 객체의 사본을 저장해놓고 재사용해야만 한다.
<br />지금까지 iBATIS DAO 프레임워크를 설정하는 방법의 예를 보았다. 다음 단계로 가서 실제로 사용하는 방법을 살펴보고 프레임워크가 우리 대신 관리해줄 DAO 클래스 몇 개를 생성해보자.
<br />
<br />10.4. SQL Maps DAO 구현체 예제
<br />DAO 패턴이란 인터페이스 뒤에 데이터 접근에 관한 구현을 숨기는 것이 거의 전부이다. 하지만 여전히 내부적으로 구현체를 만들어야 한다는 점에는 변함이 없다. 이번 절에서는 DAO 인터페이스의 구현체를 SQL Maps로 구현해 볼 것이다. DAO 패턴의 자세한 사용법은 11장에서 더 배울 것이다. 11장에서는 이번과 동일한 인터페이스를 하이버네이트와 JDBC를 직접 이용하는 방식으로 구현해 볼 것이다.
<br />구현체를 작성하기 전에 DAO 인터페이스를 먼저 구축해보자.
<br />package org.apache.mapper2.examples.chapter10.dao;
<br />import org.apache.mapper2.examples.bean.Account;
<br />import org.apache.mapper2.examples.bean.IdDescription;
<br />import java.util.List;
<br />import java.util.Map;
<br />public interface AccountDao {
<br />public void insert(Account account);
<br />public void update(Account account);
<br />public int delete(Account account);
<br />public int delete(Integer accountId);
<br />public List<Account> getAccountListByExample(
<br />Account account);
<br />
<br />getMapListByExample(Account account);
<br />public List<IdDescription>
<br />getIdDescriptionListByExample(Account account);
<br />public Account getById(Integer accountId);
<br />public Account getById(Account account);
<br />}
<br />
<br />이 인터페이스는 account 테이블에서 사용하기에 적합한 것 같다. 모든 기본적인 CRUD 인터페이스를 포함하고 있으며, API를 좀 더 편하게 사용할 수 있게 해주는 메서드도 몇 개 추가하였다. iBATIS 를 중심으로 이야기를 할 것이기 때문에 위에서 정의한 인터페이스를 SQL Maps 기반의 버전으로 구현해보자. 첫째로, iBATIS를 사용할 수 있게 설정하는 dao.xml을 살펴보자.
<br />
<br />10.4.1 iBATIS를 사용하는 DAO 설정
<br />다음은 한 개의 SQL Map 기반 DAO를 사용하는 DAO 설정을 보여준다. sqlmap이라는 컨텍스트를 정의하였다. 이 컨텍스트는 클래스패스상에 존재하는 SqlMapConfig.xml 파일을 사용한다(예를 들어 웹 애플리케이션이라면 이 파일은 /WEB-INF/classes/ 디렉터리에 있을 것이다).
<br /><?xml version="1.0" encoding="UTF-8" ?>
<br /><!DOCTYPE daoConfig
<br />PUBLIC
<br />"-//ibatis.apache.org//DTD DAO Configuration 2.0//EN"
<br />"http://ibatis.apache.org/dtd/dao-2.dtd">
<br /><daoConfig>
<br />
<br />
<br /><property name="SqlMapConfigResource"
<br />value="SqlMapConfig.xml"/>
<br /></transactionManager>
<br /><dao interface="com.mycompany.system.dao.AccountDao"
<br />implementation=
<br />"com.mycompany.system.dao.sqlmap.AccountDaoImpl"/>
<br /></context>
<br /></daoConfig><?xml version="1.0" encoding="UTF-8" ?>
<br /><!DOCTYPE daoConfig
<br />PUBLIC
<br />"-//ibatis.apache.org//DTD DAO Configuration 2.0//EN"
<br />"http://ibatis.apache.org/dtd/dao-2.dtd">
<br /><daoConfig>
<br /><context id="sqlmap">
<br />
<br /><property name="SqlMapConfigResource"
<br />value="SqlMapConfig.xml"/>
<br /></transactionManager>
<br /><dao interface="com.mycompany.system.dao.AccountDao"
<br />implementation=
<br />"com.mycompany.system.dao.sqlmap.AccountDaoImpl"/>
<br /></context>
<br /></daoConfig>
<br />
<br />DaoManagerBuilder는 dao.xml 파일을 사용하여 DaoManager 인스턴스를 생성한다. 다음을 살펴보자.
<br />
<br />10.4.2 DaoManager 인스턴스 생성하기
<br />방금 정의한 DAO 관리자를 사용하려면 DaoManagerBuilder를 사용하여 이것의 인스턴스를 생성해야 한다. 다음에서 DaoManager 인스턴스를 생성할 때 사용하는 코드 조각을 볼 수 있다.
<br />private DaoManager getDaoManager() {
<br />DaoManager tempDaoManager = null;
<br />Reader reader;
<br />try {
<br />reader = Resources.getResourceAsReader("Dao.xml");
<br />tempDaoManager =
<br />DaoManagerBuilder.buildDaoManager(reader);
<br />} catch (Exception e) {
<br />e.printStackTrace();
<br />fail("Cannot load dao.xml file.");
<br />}
<br />return tempDaoManager;
<br />}
<br />
<br />이제 약간의 코드와 설정 요소들을 갖추었으니, 이것들이 뭘 하는 것인지 좀 더 자세히 살펴보자.
<br />이 코드는 클래스로더가 탐색하는 몇몇 클래스패스 경로의 가장 상위에 있는 Dao.xml 이라는 리소스를 찾는다. 예를 들어, 톰캣에서는 웹 애플리케이션의 WEB-INF/classes 디렉터리나 WEB-INF/lib 디렉터리 안의 JAR 파일(JAR 파일의 최상위에 있다면)에 있을 것이다.
<br />일단 설정 파일을 읽어 들이면, DaoManagerBuilder 에 파일의 데이터를 전달하고 DaoManager 인스턴스를 생성하라는 요청을 보낸다.
<br />이 코드는 우리가 보고 있는 DAO 구현체를 구성하고 테스트하는 데 사용하는 JUnit 테스트에서 따온 것이다. 그래서 예외 처리가 다소 빈약하다. 실제 제품이 되는 애플리케이션에서는 이런 식으로 예외를 다루어서는 안 된다.
<br />
<br />10.4.3 트랜잭션 관리자 설정하기
<br />다음으로 트랜잭션 관리자를 정의하였다. 이 트랜잭션 관리자는 <transactionManager> 요소의 SqlMapConfigResource 프로퍼티에서 지정한 SQL Maps 설정 파일의 트랜잭션 관리자 정의를 기반으로 하고 있다. SQL Maps 를 직접 사용할 때 사용 가능한 모든 트랜잭션 관리 기능은 여전히 우리의 DAO 구현체에서도 사용 가능하다. 다음은 이 예제에서 사용하는 SQLMapConfig.xml 이다.
<br /><?xml version="1.0" encoding="UTF-8" ?>
<br /><!DOCTYPE sqlMapConfig
<br />PUBLIC
<br />"-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
<br />"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<br /><sqlMapConfig>
<br /><properties resource="SqlMapConfig.properties" />
<br /><settings
<br />errorTracingEnabled="true"
<br />cacheModelsEnabled="true"
<br />enhancementEnabled="true"
<br />lazyLoadingEnabled="true"
<br />maxRequests="32"
<br />maxSessions="10"
<br />maxTransactions="5"
<br />useStatementNamespaces="true"
<br />/>
<br /><transactionManager type="JDBC" >
<br /><dataSource type="SIMPLE">
<br /><property name="JDBC.Driver" value="${driver}"/>
<br /><property name="JDBC.ConnectionURL"
<br />value="${connectionUrl}"/>
<br /><property name="JDBC.Username" value="${username}"/>
<br /><property name="JDBC.Password" value="${password}"/>
<br /></dataSource>
<br /></transactionManager>
<br />
<br />
<br />
<br />이 파일 설정에 관해서는 4장에서 자세히 다루었으므로 여기서는 다시 다루지 않겠다.
<br />
<br />10.4.4 맵 읽어들이기
<br />트랜잭션 관리를 정의함과 동시에, SQL Maps 설정 파일에 정의된 모든 맵을 읽어 들인다. 이 예제에서는 간단히 Account.xml 파일만을 사용하며, 이 파일에서 DAO 클래스에 필요한 모든 매핑 구문을 정의한다. 다음에서 볼 수 있다.
<br /><?xml version="1.0" encoding="UTF-8" ?>
<br /><!DOCTYPE sqlMap
<br />PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
<br />"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<br /><sqlMap namespace="Account">
<br /><typeAlias alias="Account"
<br />type="${BeanPackage}.Account" />
<br /><typeAlias alias="IdDescription"
<br />type="${BeanPackage}.IdDescription" />
<br /><insert id="insert" parameterClass="Account">
<br /><selectKey keyProperty="accountId" resultClass="int">
<br />SELECT nextVal('account_accountid_seq')
<br /></selectKey>
<br />INSERT INTO Account (
<br />accountId,
<br />username,
<br />password,
<br />firstName,
<br />lastName,
<br />address1,
<br />address2,
<br />city,
<br />state,
<br />postalCode,
<br />country
<br />) VALUES(
<br />#accountId#,
<br />#username:varchar#,
<br />#password:varchar#,
<br />#firstName:varchar#,
<br />#lastName:varchar#,
<br />#address1:varchar#,
<br />#address2:varchar#,
<br />#city:varchar#,
<br />#state:varchar#,
<br />#postalCode:varchar#,
<br />#country:varchar#
<br />)
<br /></insert>
<br /><update id="update">
<br />update Account set
<br />username = #username:varchar#,
<br />password = #password:varchar#,
<br />firstName = #firstName:varchar#,
<br />lastName = #lastName:varchar#,
<br />address1 = #address1:varchar#,
<br />address2 = #address2:varchar#,
<br />city = #city:varchar#,
<br />state = #state:varchar#,
<br />postalCode = #postalCode:varchar#,
<br />country = #country:varchar#
<br />where accountId = #accountId#
<br /></update>
<br /><delete id="delete">
<br />delete from Account
<br />where accountId = #accountId#
<br /></delete>
<br /><sql id="allFields">
<br />accountId as "accountId",
<br />username,
<br />password,
<br />firstName as "firstName",
<br />lastName as "lastName",
<br />address1,
<br />address2,
<br />city,
<br />state,
<br />postalCode as "postalCode",
<br />country
<br /></sql>
<br /><sql id="whereByExample">
<br /><dynamic prepend=" where ">
<br /><isNotEmpty property="city">
<br />city like #city#
<br /></isNotEmpty>
<br /><isNotNull property="accountId" prepend=" and ">
<br />accountId = #accountId#
<br /></isNotNull>
<br /></dynamic>
<br /></sql>
<br /><sql id="getByExample">
<br />select
<br /><include refid="allFields" />
<br />from Account
<br /><include refid="whereByExample" />
<br /></sql>
<br /><select id="getAccountListByExample"
<br />resultClass="Account">
<br /><include refid="getByExample" />
<br /></select>
<br /><select id="getMapListByExample" resultClass="hashmap">
<br /><include refid="getByExample" />
<br /></select>
<br /><select id="getIdDescriptionListByExample"
<br />resultClass="IdDescription">
<br />select
<br />accountId as id,
<br />COALESCE(firstname, '(no first name)')
<br />|| ' '
<br />|| COALESCE(lastname, '(no last name)')
<br />as description
<br />from Account
<br /><include refid="whereByExample" />
<br /></select>
<br /><select id="getById" resultClass="Account">
<br />select
<br /><include refid="allFields" />
<br />from Account
<br />where accountId = #value#
<br /></select>
<br /></sqlMap>
<br />
<br />이 SQL Map에서는 모든 필드를 나열하고 있는 SQL 조각을 정의하고 있다. 이런 경우, JDBC 드라이버가 칼럼 이름의 대소문자를 혼동하는 경우가 생길 수 있기 때문에, 자동 결과 매핑을 올바르게 수행할 수 있도록 칼럼 이름에 명시적으로 별칭을 지정한다. 그 다음 SQL 조각에서는 나중에 사용할 복잡한 WHERE 절을 정의한다. 세 번째 SQL 조각을 사용하여 다른 두개의 조각을 하나의 조각에 함께 넣고 그 결과로 나오는 SQL 조각은 서로 다른 두개의 select 구문에서 사용한다. 두 select 구문 중 하나는 자바빈즈의 List를 생성하고, 다른 하나는 Map의 List를 생성한다. getIdDescriptionListByExample 매핑 구문에서는 복잡한 WHERE 절을 다시 한 번 사용하여 서로 다른 형태의 빈즈의 List를 가져온다.
<br />
<br />10.4.5 DAO 구현체 코딩하기
<br />마침내 DAO 구현체를 만들 차례이다. 이전에 언급한 바와 같이 DAO를 생성하려면 인터페이스와 구현체 모두를 제공한다. 이 경우, 인터페이스는 “com.mycompany.system.dao.AccountDao”로 정의하고 구현체는 “com.mycompany.system.dao.sqlmap.AccountDaoImpl”로 정의한다.
<br />이미 10.3 절에서 이 인터페이스를 보았다. 그래서 여기서는 인터페이스 말고 DAO 구현 클래스를 살펴볼 것이다.
<br />package org.apache.mapper2.examples.chapter10.dao.sqlmap;
<br />import com.ibatis.dao.client.DaoManager;
<br />import com.ibatis.dao.client.template.SqlMapDaoTemplate;
<br />import org.apache.mapper2.examples.bean.Account;
<br />import org.apache.mapper2.examples.bean.IdDescription;
<br />import
<br />org.apache.mapper2.examples.chapter10.dao.AccountDao;
<br />import java.util.List;
<br />import java.util.Map;
<br />public class AccountDaoImpl extends SqlMapDaoTemplate
<br />implements AccountDao {
<br />public AccountDaoImpl(DaoManager daoManager) {
<br />super(daoManager);
<br />}
<br />public Integer insert(Account account) {
<br />return (Integer) insert("Account.insert", account);
<br />}
<br />public int update(Account account) {
<br />return update("Account.update", account);
<br />}
<br />public int delete(Account account) {
<br />return delete(account.getAccountId());
<br />}
<br />public int delete(Integer accountId) {
<br />return delete("Account.delete", accountId);
<br />}
<br />public List<Account> getAccountListByExample(
<br />Account account) {
<br />return queryForList("Account.getAccountListByExample",
<br />account);
<br />}
<br />public List<Map<String, Object>>
<br />getMapListByExample(Account account) {
<br />return queryForList("Account.getMapListByExample",
<br />account);
<br />}
<br />public List<IdDescription>
<br />getIdDescriptionListByExample(
<br />Account account) {
<br />return
<br />queryForList("Account.getIdDescriptionListByExample",
<br />account);
<br />}
<br />public Account getById(Integer accountId) {
<br />return (Account)queryForObject("Account.getById",
<br />accountId);
<br />}
<br />public Account getById(Account account) {
<br />return getById(account.getAccountId());
<br />}
<br />}
<br />
<br />표면적으로 봐서는 별로 대단해 보이지 않는다. 클래스의 선언부에서 AccountDao 인터페이스를 구현하고 SqlMapDaoTemplate 클래스를 상속받는 것을 볼 수 있다.
<br />SqlMapDaoTemplate 클래스는 하나의 작은 패키지 안에서 모든 SQL Map API의 컴포넌트들을 제공해 주는 무거운 짐을 지고 있다. 게다가 로컬 메서드를 호출하면 SqlMapExecutor를 대신 호출해 주는 기능도 제공하다. 따라서 SqlMapClient나 SqlMapExecutor의 인스턴스를 가져오지 않고도, 마치 DAO 클래스의 일부분인 양 이들의 메서드를 호출할 수 있다.
<br />비록 구현체와 DAO 클래스를 분리하는 것이 많은 작업을 필요로 하긴 하지만, 그 다음부터는 인터페이스를 생성하고, 구현하고, SQL Map을 만들고 마지막으로 Dao.xml 파일에 단 한 줄만 추가해 주면 DAO 클래스를 만들 수 있다. 11장에서는 동일한 DAO 인터페이스를 하이버네이트와 JDBC를 직접 사용하는 방식으로 구현할 것이다. 이 세 가지 구현체는 근본적으로 서로 다른 데이터베이스 접근 방식을 사용함에도 불구하고, 모두 동일한 API(AccountDao 인터페이스)를 사용한다.
<br />Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-12432813477167038542011-06-01T02:44:00.000-07:002011-06-01T02:47:01.384-07:00iBATIS in Action (9/14)<div style="mso-element:para-border-div;border-top:solid windowtext 3.0pt; border-left:none;border-bottom:solid windowtext 3.0pt;border-right:none; padding:0cm 0cm 0cm 0cm"> <h1><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">통한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">성능</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">향상</span></h1> </div> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span><span lang="EN-US"> iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예제</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">iBATIS</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">견고하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매커니즘은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">통해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이루어지며</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">직접적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관리해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부담을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">덜어준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">언제</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">왜</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떻게</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하는지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">알아보기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간단히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">흝어보자</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><cachemodel id="categoryCache" type="MEMORY"></cachemodel></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="insert"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="update"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="delete"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><property name="reference-type" value="WEAK"></property></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select< span=""></select<></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">id="getCategory" parameterClass="Category"</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">resultClass="Category" cacheModel="categoryCache"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217">FROM Category</p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">WHERE categoryId=#categoryId#</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주요</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컴포넌트</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모델과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모델은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">새로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">나온</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오래되서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퀴퀴한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">냄새가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">없애버릴지를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결정한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하려면</span><span lang="EN-US"> <select>나 요소의 cacheModel 속성에 캐시 모델을 지정해줘야 한다. 위에서 캐시 모델의 캐시 타입을 MEMORY로 지정했다. 이 타입은 쿼리 결과를 메모리에 저장하는 iBATIS의 내장 캐시이다. 이 타입이 iBATIS에서 가장 많이 사용되는 캐시 방식이다. 캐시 모델의 안을 들여다 보면 두 개의 요소를 볼 수 있다. 는 특정 캐시에 대한 접근이 있을 때 저장된 결과를 캐시에서 지우라고 지정하는 것이다. 여기서 캐시의 모든 내용이 다 사라지게 된다는 사실을 명심해야 한다. 이는 동일한 캐시 모델을 사용하는 여러 매핑 구문이 있을 때, 이 매핑 구문들의 결과 모두가 사라지게 됨을 뜻한다. 주의해서 볼 다른 요소는 요소다. 각각의 캐시 모델 타입들은 해당 캐시 모델의 사용자 정의 설정 정보를 지정할 수 있는 프로퍼티들을 가지고 있다. Name 속성은 설정될 프로퍼티의 이름이다. Value는 당연히 선언된 프로퍼티에 값을 지정하는 것이다. 보다시피 iBATIS의 캐시는 매우 단순하다. 개발자가 하게 될 일은 많아 봐야 각 캐시 모델이 가지고 있는 프로퍼티들을 공부하는 것 정도이다. 먼저 iBATIS의 캐싱 철학이 무엇인지 간단히 살펴보고 나서 어떤 캐시 모델들을 사용할 수 있는지 설명한다. 그리고 언제, 어떻게 캐시 모델을 사용해야 할지 알아본다. <!--[if !supportLists]-->1.2. <!--[endif]-->iBATIS의 캐싱에 관한 철학 개발자들이 애플리케이션에 도입하는 대부분의 캐싱은 오랜 시간동안 표면적으로는 변하지 않는 데이터를 위한 것이다. 이러한 데이터는 드롭 다운 메뉴나 선택 목록에서 흔히 사용하는 타입이다. 미국의 주, 도시, 국가 같은 데이터는 이런 형태로 캐싱하기 제일 좋은 후보들이다. 하지만 캐싱이란 오랜 시간 동안 읽기에만 사용하는 데이터뿐만 아니라 읽기/쓰기를 함께 하는 객체에도 사용할 수 있다. 여기서 어려운 점은 수작업으로 데이터가 캐시에 이미 존재하는지 여부를 확인하고 개발자 스스로 캐시에 데이터를 저장해야 한다는 것이다. 케시를 사용함에 있어 다른 어려운 점으로는 저장돼 있는 데이터가 더 이상 사용되지 않는 것인지 혹은 새로 들어온 것인지 어떻게 알아내느냐 하는 문제를 해결하는 것이다. 이는 시간별로 케시를 지우도록 하는 간단한 규칙을 이용하면 쉽게 해결할 수 있다. 하지만 여러가지 처리 과정을 거치면서 캐시의 내용을 더 이상 유효하지 못한 상태(실제 데이터와 캐싱 데이터의 불일치 상태)가 될 경우에는 그렇게 쉽게 해결되지 않는다. 일단 실행되는 코드들 간의 의존성이 캐시된 객체의 무결성을 유지하는 것보다 중요해질 경우 일이 점점 어렵게 되기 시작한다. 때로는 캐싱이 이 정도로 복잡하게 된다면 ‘노력 대비 성능’ 비율이 설득력을 잃거나 혹은 매우 짜증나는 작업으로 비칠 만큼 비율이 떨어질 수 있다. 이 때문에 iBATIS는 오로지 데이터 접근 계층만을 위한 캐싱 구현과 전략을 제공하는 데 중점을 두고있다. 데이터 접근 계층에 대해 중점을 두기 때문에 프레임워크가 손쉬운 설정을 통해 캐시를 관리할 수 있게 된다. 이 시점에서 iBATIS 캐싱 프레임워크의 철학과 다른 퍼시스턴스 계층 솔루션들과의 차이점에 대해서 알아보자. 종종 기존의 ORM 솔루션들이 캐싱을 수행하는 방법에 익숙한 몇 몇 사용자들은 이 둘 간의 차이점 때문에 걱정하기도 한다. iBATIS는 데이터베이스의 테이블을 객체에 매핑하는 것이 아니라 SQL 구문을 객체에 매핑하도록 되어있다. 이런 점으로 인해 중요한 차이가 생기게 된다. 전통적인 ORM 도구들은 주로 데이터 베이스 테이블을 객체에 매핑하는 데 중점을 두고 있는데, 이것은 캐싱 방식에도 영향을 끼치게 된다. 전통적인 ORM 캐싱 방식은 데이터베이스가 테이블의 한 레코드의 유일성을 관리하는 방식처럼, 객체 식별자(object identification, OID)를 저장한다. 이것은 거슬러 올라가면 두 개의 서로 다른 결과가 동일한 객체를 반환하면 객체는 한 번만 캐싱될 것임을 의미한다. 하지만 iBATIS의 경우에는 이러한 원리가 적용되지 않는다. iBATIS는 SQL 실행 결과에 중점을 두는 데이터 중심 프레임워크이기 때문에 객체의 유일성을 기반으로 캐시를 수행하지는 않는다. iBATIS는 반환된 전체 결과를 캐싱하며 그 결과는 식별 가능한 객체(값을 기준으로)가 다른 캐시에 존재하든 말든 상관하지 않는다. 캐시 모델에 관해 살펴보고 캐시 모델이 무엇이고 일반적인 컴포넌트들로는 무엇이 있는지 더 깊이 있게 공부해보자. 캐시 모델을 통해 어떻게 캐시 결과와 캐시의 의존성을 진부한 수작업 관리 방식에서 벗어날 수 있는지도 살펴볼 것이다. <!--[if !supportLists]-->1.3. <!--[endif]-->캐시 모델 이해하기 캐시 모델은 간단히 설명하면 캐시 설정하기이다. 좀 더 자세히 말하자면 캐시 모델은 iBATIS의 모든 캐시 구현체를 정의하는 기반이 되는 곳이다. SQL Maps 설정 안에서 케시 모델 설정을 정의하고 하나 이상의 쿼리 매핑 구문이 이를 사용할 수 있다. 캐시 설정은 요소를 통해 정의할 수 있으며 다음 표는 각각의 속성들을 설명한다. Id(필수적) 유일한 id를 지정한다. 캐시 모델에 설정된 캐시를 사용하고자 하는 쿼리 매핑 구문에서 이 ID를 참조한다. Type(필수적) 이 값은 캐시 모델이 설정하는 캐시의 타입을 의미한다. 사용 가능한 값으로 MEMORY, LRU, FIFO, OSCACHE가 있다. 이 속성은 사용자 정의 CacheController 구현체의 완전한 클래스 이름(Fully Qualified Class Name)으로 지정해도 된다. readOnly(선택적) 이 값을 true로 지정하면 캐시가 읽기 전용 캐시로 사용될 것임을 의미한다. 읽기 전용 캐시에서 가져온 객체는 객체의 프로퍼티들을 바꿀 수 없다. serialize Serialize 속성은 캐시의 내용을 가져올 때 “깊은 복사”를 할지 여부를 지정한다. Deep copy : 객체의 모든 값을 복사하여 동일 한 값을 가진 새로운 객체를 생성해서 전달하는 방식, 반대말로는 객체의 참조만 복사하는 얕은 복사 shallow copy 가 있다. Id 속성을 사용하여 캐시를 구분한다. iBATIS는 이 id 값을 통해 어떤 매핑 구문의 결과를 캐시에 저장할지 결정한다. 다른 속성들에 대해 더 자세히 알아보자. 9.3.1 type iBATIS는 네 개의 디폴트 캐시 구현체를 제공하여 캐시 모델이 이를 바로 사용할 수 있도록 하고 있다. 이 네 가지 타입은 표에서 볼 수 있다. 캐시 모델 타입 설명 MEMORY 이 모델은 단순하게 캐시된 데이터를 가비지 컬렉터가 삭제할 때까지 메모리에 저장한다. FIFO 이 모델은 고정된 크기의 모델로 ‘first in first out’ 알고리즘을 사용하여 메모리에서 캐시 항목들을 삭제한다. LRU 이 모델은 또 다른 고정된 크기의 모델로 ‘least recently used’ 알고리즘을 사용하여 메모리에서 캐시 항목들을 삭제한다. OSCACHE 이 모델은 OpenSymphony (혹은 OS) Cache를 사용한다. FIFO : 먼저 들어간 값을 캐시에서 먼저 삭제하는 방식 LRU : 최근에 가장 오랫동안 사용하지 않은 값을 캐시에서 먼저 삭제하는 방식 특정 캐시 구현체를 사용하려면 디폴트 예약어 (MEMORY, LRU, FIFO 그리고 OSCACHE) 를 요소의 type 속성에 지정하면 된다. 9.5 절에서 이 네가지 디폴트 캐시 구현체에 대해서 자세히 알아볼 것이다. 사용자가 직접 CacheController 인터페이스를 구현하여 캐시를 만들고 type 속성에 완전한 클래스 이름(FQCN)을 지정하여 사용자 정의 캐시를 제공하는 것도 가능하다. (12장을 참조하라) 9.3.2 readOnly 속성 요소는 readOnly 속성을 제공한다. readOnly 속성은 단순히 캐시 모델에게 캐시된 객체를 어떻게 가져와서 저장할지 알려주는 지시자이다. 이 속성을 true 로 설정하면 가져온 객체의 내용을 변경해도 상관 없다. 캐시를 읽기 전용으로 지정하면 캐시 모델은 캐시에 존재하는 객체에 레퍼런스를 되돌려 줄 수 있음을 의미한다. 왜냐하면 객체를 요청한 애플리케이션이 해당 객체를 변경하지 않기 때문이다. readOnly 속성이 false로 지정되면 두 명 이상의 사용자가 캐시된 참조의 동일한 인스턴스를 가져갈 수 없음을 의미한다. readOnly 속성은 serialize 속성과 함께 작동한다. 이 두 속성이 함께 작동하는 방법을 이해하는 것이 중요하다. 9.3.3 serialize 속성 Serialize 속성을 사용하여 캐시된 객체를 어떻게 반환해줄지 지정한다. Serialize 를 true 로 설정하면 캐시에서 각 객체를 가져올 때 깊은 복사 작업을 수행한다. 이는 캐시에 저장된 실제 객체는 결코 가져올 수 없음을 의미한다.(즉 복사본을 가져오게 된다.) 대부분의 사람들이 생각하는 직렬화(Serialization)와는 다르다는 사실에 주의해서 사용하는 것이 중요하다. 객체를 디스트로 직렬화하여 저장하지 않는다. 이는 메모리에 기반한 직렬화로 메모리상에 있는 캐시된 객체를 다른 객체로 깊은 복사를 하는 것이다. 9.3.4 readOnly와 serialize 조합 자 이제 각각의 속성들을 모두 이해했다. 각 속성들의 기능이 약간 겹치는 것을 볼 수 있다. 사실 이들은 매우 밀접하게 함께 작동한다. 이 속성들을 서로 다른 방식으로 조합해서 사용할 때 내부에서 어떤 일이 발생하는지 이해하고 있어야 한다. 이제 표에서 네 종류의 가능한 조합을 살펴보고 각각 어떤 장점(혹은 단점)이 있는지 분석해 볼 것이다. readOnly serialize 결과 이유 true false 좋음 캐시된 객체를 가장 빠르게 가져온다. 캐시된 객체의 공유 인스턴스를 반환하며, 잘못 사용하면 문제를 일으킬 수도 있다. false true 좋음 캐시된 객체를 빠르게 가져온다. 캐시된 객체를 깊은 복사 작업을 통해 가져온다. false false 주의요망! 캐시는 오직 호출하는 스레드의 세션이 살아 있는 동안에만 관련되고, 다른 스레드는 사용할 수는 없다. true true 나쁨 이 조합은 무의미한 설정이라는 점을 제외하고는 readOnly=false 그리고 serialize=true 와 동일하게 작동한다. 이 두 속성의 디폴트 조합은 readOnly=true 이고 serialize=false 이다. 이 조합은 캐시 내부에 포함된 객체와 동일한 참조를 되돌려 주라고 지시한다. 이 조합을 사용하면 캐시된 객체를 변경하는 게 실질적으로 가능하다. 캐시된 객체가 전역적으로 공유되기 때문에 문제를 일으킬 소지가 있다. 동일한 파라미터를 사용해 쿼리 매핑 구문을 호출하여 캐시된 객체에 접근하는 모든 사용자는, 다른 세션에서 부적절하게 변경된 객체를 가져오게 될 수도 있다. 캐시된 객체를 가져온 뒤에 변경하고자 한다면 readOnly 속성을 반드시 false로 지정해야만 한다. 그렇게 하면 캐시가 해당 세션 고유의 인스턴스만을 반환하도록 강제한다. Serialize=true 그리고 readOnly=false 조합을 사용하면, 캐시된 객체의 깊은 복사 작업의 결과를 가져올 수 있게 된다. 이는 캐시에서 가져온 객체가 값은 비록 같지만 동일한 인스턴스는 아니라는 의미이다. 이 방법을 사용하면 캐시에서 가져온 객체의 변경 사항이 호출한 세션 안에서만 적용된다. 사용 가능한 다른 조합으로 readOnly=false 로 serialize=false로 지정하는 것이다. 이 조합이 유용할지도 모르지만 사실 이런 설정이 적합한 경우는 거의 없다. 두 속성을 모두 false로 지정하면 캐시가 각 호출 스레드마다 요청 받은 객체의 유일한 인스턴스를 생성해야만 한다. Serialize 가 false 이기 때문에 깊은 복사 방법을 사용하지는 않는다. 대신 그 세션에서만 사용할 캐시를 매번 생성해야 한다. 이는 동일한 매핑 구문을 동일한 세션에서 여러 번 호출할 때는 캐시의 효과를 누릴 수 있다는 의미이다. 하지만 서로 다른 세션에서 캐시된 매핑 구문을 처음으로 호출할 때마다 데이터베이스에 접근하게 될 것이다. 두 속성의 마지막 조합은 readOnly=true이고 serialize=true 인 것이다. 이 조합은 기능적으로는 readOnly 를 false로 그리고 serialize를 true로 지정한 것과 동일하다. 여기서 문제는 이것이 나타내고자하는 의미이다. Serialize 하고자 하는 결과를 readOnly로 생성하는 것은 의미가 없는 행동이다. Serialize의 의도는 캐시에 저장된 객체가 직렬화될 것이라고 여기거나 그럴 계획이라는 의미이다. 그러므로 읽기 전용 캐시를 직렬화하는 것은 다소 불합리한 행동이다. 이제 캐시의 철학에 관해 이해를 하였으니 설정하고 사용하는 방법을 더 상세하게 보자. <!--[if !supportLists]-->1.4. <!--[endif]-->캐시 모델 내부의 요소 사용하기 우리가 사용할 수 있는 여러 타입의 캐시 모델 구현체들을 다루기 전에 요소의 내부에서 사용하는 일반적인 요소들에 익숙해져야 할 것이다. 이 요소들은 캐시를 비우는 것뿐만 아니라 특정 캐시 모델 구현체에 국한된 프로퍼티 값을 지정하는 데도 사용한다. 9.4.1 캐시 비우기 (Cache flushing) 각각의 캐시 구현체는 캐시된 내용을 지울 때 사용하는 공통적인 요소를 가지고 있다. 여러분이 캐시를 통해 생각해 볼 때, 캐시에서 객체를 언제 그리고 어떻게 삭제해야 할지 결정해 보라. 각각의 캐시 모델 타입들은 기본적으로 세부적인 수준(granular level)에서 캐시된 데이터를 관리하는 방법을 가지고 있다. 메모리나 가장 최근에 접근한 것 혹은 객체가 얼마나 오래됐는지 여부 등에 따라서 개별적인 객체를 삭제할 수 있다. 각 캐시 모델의 고유한 기능 외에도 전체 내용을 지우고자 할 때 지우도록 지시할 수 있다. Flush 요소들은 이러한 기능을 제공해준다. 다음에서 flush 관련 요소들을 보여준다. <!--[if !supportLists]-->l <!--[endif]-->캐시에서 항목을 삭제하는 규칙을 지정하는 flush 요소들 여기서 지정된 퀴리 매핑 구문이 실행되면 캐시의 내용을 지운다. 캐시의 내용을 지우는 시간 간격을 정의한다. 각 flush 요소들을 좀 더 깊게 살펴보자. 요소는 statement 속성 하나만을 가지고 있으며, 이 속성에 지정된 매핑 구문이 실행될 때 자동으로 캐시의 내용을 지운다. 이 요소는 데이터베이스에 변경이 가해지만 결과가 캐시에도 반영되어야 할 때 유용하게 사용할 수 있다. 예를 들어 카테고리 목록을 캐싱하고 있을 때 를 사용해서 새로운 카테고리가 추가될 때마다 캐시를 지우도록 할 수 있다. 전에 언급했듯이 캐시의 모든 내용을 다 지울 것이기 때문에, 데이터를 매우 자주 변경하는 매핑 구문에 의존하는 매핑 구문을 만들지 않도록 주의해야 한다. 이런 경우에는 캐시를 너무 자주 지우고 다시 값을 채우기 때문에, 캐시를 효율적으로 사용할 수 없게 만들 수 있다. 다음에서 캐시 모델을 정의하고 데이터베이스에 새로운 데이터가 추가될 때 캐시를 지워버리는 요소를 어떻게 사용하는지 예제를 볼 수 있다. … … … … id="getCategory" parameterClass="Category" resultClass="Category" cacheModel="categoryCache"> SELECT * FROM Category WHERE parentCategoryId=#categoryId# </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><insert id="insert" parameterclass="Category"></insert></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INSERT INTO Category</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(title,description,sequence)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">VALUES</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(#title#,#description#,#sequence#)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US"><flushonexecute> </flushonexecute></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하려면</span><span lang="EN-US"> statement </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지우도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지시하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이름을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정해야</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해당</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문이</span><span lang="EN-US"> namespace </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span><span lang="EN-US"> SQL Map </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">안에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">포함돼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span><span lang="EN-US"> statement </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">명명공간을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포함한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">완전한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이름을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정해야만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. Statement </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동일한</span><span lang="EN-US"> SQL Map </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">안에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우에도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">완전한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">명명공간</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">표기방식을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용해야만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span><span lang="EN-US"> SQL Map </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">존재하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때는</span><span lang="EN-US"> statement </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">참조하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">먼저</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">해당</span><span lang="EN-US"> SQL Map </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파일에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">적재되어</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상태여야만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US"><flushinterval></flushinterval></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US"><flushinterval> </flushinterval></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리하는데</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">또</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다른</span><span lang="EN-US"> flush </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소다</span><span lang="EN-US">. <flushinterval> </flushinterval></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소는</span><span lang="EN-US"> <flushonexecute> </flushonexecute></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소보다</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">약간</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">편인데</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시간을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제외한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정에는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의존하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">. <flushinterval> </flushinterval></span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">특정</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간격에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">반복적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지운다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간격은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">적용되는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동안</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시작되고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">애플리케이션이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">종료될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때까지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계속된다</span><span lang="EN-US">. <flushinterval> </flushinterval></span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보다시피</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시</span><span lang="EN-US">,</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">분</span><span lang="EN-US">,</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">초</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">밀리초를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Hours (</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">선택사항</span><span lang="EN-US">) : </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지우기까지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지나야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Minutes (</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">선택사항</span><span lang="EN-US">) : </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지우기까지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지나야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">분</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Seconds (</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">선택사항</span><span lang="EN-US">) : </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지우기까지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지나야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">초</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Milliseconds (</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">선택사항</span><span lang="EN-US">) : </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지우기까지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지나야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">밀리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">초</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">잠재적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">혼란을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방지하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span><span lang="EN-US"> <flushinterval> </flushinterval></span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지우는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">특정</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시각을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지정할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">순수하게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시간</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">간격에만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기초한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음에서</span><span lang="EN-US"> <flushinterval> </flushinterval></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수명을</span><span lang="EN-US"> 12 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제한한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><sqlmap namespace="Category"></sqlmap></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><cachemodel id="categoryCache" type="MEMORY"></cachemodel></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushinterval hours="12"></flushinterval></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select< span=""></select<></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">id="getCategory" parameterClass="Category"</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">resultClass="Category" cacheModel="categoryCache"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217">
<br /></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">FROM Category</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">WHERE parentCategoryId=#categoryId#</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US"><flushinterval> </flushinterval></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주의할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사항은</span><span lang="EN-US"> <flushinterval> </flushinterval></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소에는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성만을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">허용한다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">점이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그러므로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매</span><span lang="EN-US"> 12</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시간</span><span lang="EN-US"> 10</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">분</span><span lang="EN-US"> 10</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">초</span><span lang="EN-US"> 5</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">밀리초</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">마다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지우고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">싶다면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">밀리초로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계산해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정해야만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">9.4.2 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모델</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구현체의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정하기</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모델은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프레임워크에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">플러그인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">형태로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작동하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컴포넌트이기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컴포넌트에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">임의의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제공할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요하다</span><span lang="EN-US">. <property> </property></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">바로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">역할을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음은</span><span lang="EN-US"> <property> </property></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Name (</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필수사항</span><span lang="EN-US">) : </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이름</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">Value (</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필수사항</span><span lang="EN-US">) : </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값</span></p> <p class="MsoNormal"><span lang="EN-US">Name </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">과</span><span lang="EN-US"> value </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모두가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사항이고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모델</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">컴포넌트를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">초기화할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때</span><span lang="EN-US"> Properties </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">만들어져</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전달된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일반적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개발자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하고자</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">타입에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">달라지게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그러므로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모델이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">각각의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모델</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">따른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">옵션은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">무엇인지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이해하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있어야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.5.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모델</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입</span></h2> <p class="MsoNormal"><span lang="EN-US">9.3.1 </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">절에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">언급한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">바와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같이</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">함께</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제공되어</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모델은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">네</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가지가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun:yes"> </span>* MEMORY</span></p> <p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun:yes"> </span>* LRU</span></p> <p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun:yes"> </span>* FIFO</span></p> <p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun:yes"> </span>* OSCACHE</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">네</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">절에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모델</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타입을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알아보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">9.5.1 MEMORY</span></h2> <p class="MsoNormal"><span lang="EN-US">MEMORY </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">참조를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기반으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시이다</span><span lang="EN-US">. (java.lang.ref javadoc</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">참조하라</span><span lang="EN-US">). </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">갖게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">타입은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가비지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컬렉터에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다룰지에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">힌트를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제공해준다</span><span lang="EN-US">. Java.lang.ref </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">패키지처럼</span><span lang="EN-US"> MEMORY </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시도</span><span lang="EN-US"> WEAK </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">와</span><span lang="EN-US"> SOFT </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제공해준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">추가로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입을</span><span lang="EN-US"> WEAK </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">혹은</span><span lang="EN-US"> SOFT </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">라고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가비지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬렉터는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">용량의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">혹은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">현재</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">접근</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상태에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">따라서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">무엇이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">남아있고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">무엇을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내보낼지를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결정한다</span><span lang="EN-US">. STRONG </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비우기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시간</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">간격</span><span lang="EN-US">(flushInterval)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때까지는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">무엇을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">호출하든</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">상관없이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계속</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보관할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보장해준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">MEMORY </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모델은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방식보다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메모리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관리에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더욱</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">중점을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">둔</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적합하다</span><span lang="EN-US">. STRONG, SOFT </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span><span lang="EN-US"> WEAK </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체보다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오래</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있을지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결정해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">표는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각각의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타입이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수행하는지에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보여주며</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">얼마동안</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐싱할지를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결정하는지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none;mso-border-alt:solid black .5pt; mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt"> <tbody><tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes"> <td width="121" valign="top" style="width:90.45pt;border:solid black 1.0pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">WEAK</span></p> </td> <td width="460" valign="top" style="width:344.65pt;border:solid black 1.0pt; border-left:none;mso-border-left-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">WEAK </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타입은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">빨리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비워버린다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가비지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬렉터에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수거되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">막지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">놔둔다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가비지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컬렉터는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처음</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보자마자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">삭제해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">버릴</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">단지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">삭제되기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">접근하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방업을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제공할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">뿐이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">디폴트로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정되는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방식은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일관성있게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">접근하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">잘</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">작동한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방식은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비우는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비율이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">빠른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">편이기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메모리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제한을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">넘기지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">못하도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보장해준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방식을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">히트</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">확률이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">높아진다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:1"> <td width="121" valign="top" style="width:90.45pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">SOFT</span></p> </td> <td width="460" valign="top" style="width:344.65pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">SOFT </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타입도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">중요한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메모리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">용량</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제한에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다달았을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">삭제해도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋다</span><span lang="EN-US">. SOFT </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">용량이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">허락하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계속</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보관한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가비지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬렉터는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요하다고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">판단되기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전까지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수거하지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. SOFT </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">또한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">용량을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">넘지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보장해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주고</span><span lang="EN-US"> WEAK </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입보다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">히트</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">횟수가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">적은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">편이다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:2;mso-yfti-lastrow:yes"> <td width="121" valign="top" style="width:90.45pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">STRONG</span></p> </td> <td width="460" valign="top" style="width:344.65pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">STRONG </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타입은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">용량</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한계가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">얼마든지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관계</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">없이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계속</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보유하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. STRONG </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">저장된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비우기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시간</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">간격이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전까지는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">삭제되지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. STRONG </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정적이고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정기적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하도록</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타입은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">히트를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">줄여서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">성능을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">향상시켜준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">용량이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지나치게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">커져서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부족</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오류를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">발생시킬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위험성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">안고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> </td> </tr> </tbody></table> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <div style="mso-element:para-border-div;border:solid windowtext 1.0pt; mso-border-alt:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt"> <p class="MsoNormal" style="border:none;mso-border-alt:solid windowtext .5pt; padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt"><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">히트</span><span lang="EN-US"> : database hit, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">없기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접속해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쿼리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">행위</span></p> </div> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">MEMORY </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타입은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오직</span><span lang="EN-US"> reference-type </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하나만을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로퍼티에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타입을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지정한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음은</span><span lang="EN-US"> WEAK </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">저장하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">최대</span><span lang="EN-US"> 24</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">마다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span><span lang="EN-US"> insert, update, delete </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">마다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지우는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단한</span><span lang="EN-US"> MEMORY </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모델이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><cachemodel id="categoryCache" type="MEMORY"></cachemodel></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushinterval hours="24"></flushinterval></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="insert"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="update"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="delete"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><property name="reference-type" value="WEAK"></property></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">MEMORY </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타입은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단하지만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다루기에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">충분히</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">효과적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">9.5.2 LRU</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">LRU </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모델</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">타입은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">최근에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오랫동안</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않은</span><span lang="EN-US"> (Least Recently Used) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제거하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방식으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관리한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내부에서는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">최근에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오랫동안</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">접근하지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결정하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">용량이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">초과하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">해당</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제거한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제거하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오직</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">용량이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제한을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">넘겼을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">번만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">발생한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">용량</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제한은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보유할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개수로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정의한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">형태의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대용량</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">차지하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">넣으면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부족</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오류가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">발생할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있으니</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주의해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">LRU </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">특정</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상당히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자주</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관리할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적합한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">형태이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보통</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">페이지로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">나뉜</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과이거나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검색어로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">검색한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">애플리케이션에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이러한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방식을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><property> </property></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span><span lang="EN-US"> LRU </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">타입에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지정할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티는</span> <span lang="EN-US">size </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하나뿐이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저장될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">최대</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개수를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지정한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">최근의</span><span lang="EN-US"> 200 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">최대</span><span lang="EN-US"> 24</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간마다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span><span lang="EN-US"> insert, update, delete </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때마다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지우는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span><span lang="EN-US"> LRU </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모델이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><cachemodel id="categoryCache" type="LRU"></cachemodel></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushinterval hours="24"></flushinterval></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="insert"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="update"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="delete"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><property name="size" value="200"></property></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">LRU </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">특정</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기간동안</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">서로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일부를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유용하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">9.5.3 FIFO</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">FIFO </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모델은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">먼저</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">들어온</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">먼저</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내보내는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전략을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. FIFO </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생존</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시간</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기반의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전략으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체중</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오래된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">먼저</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">삭제한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">삭제는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">용량</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제한을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">넘었을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">번만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수행한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">용량</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제한은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보유할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개수로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정의한다</span><span lang="EN-US">. LRU </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">마친가지로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이런</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시에는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대용량</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">차지하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">넣으면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">부족</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">오류가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">발생할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있으니</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주의해야</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">FIFO</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생존</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기반을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">초기에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장되는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">순간에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">많이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">효과를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지나면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">덜</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용되겠지만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여전히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">접근할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기반한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리포팅</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이러한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유용함을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주식</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가격을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리포팅한다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대부분의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요청은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요청</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">순간에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유효하고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시간이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지남에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">중요도가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">떨어지게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><property> </property></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때</span><span lang="EN-US"> FIFO </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">오직</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하나의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티는</span><span lang="EN-US"> size </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">최대</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개수를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지정한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">최근의</span><span lang="EN-US"> 200</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">저장하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">최대</span><span lang="EN-US"> 24</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간마다</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span><span lang="EN-US"> insert, update, delete </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실행될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때마다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비우는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단한</span><span lang="EN-US"> FIFO </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모델이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><cachemodel id="categoryCache" type="FIFO"></cachemodel></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushinterval hours="24"></flushinterval></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="insert"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="update"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="delete"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><property name="size" value="1000"></property></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">FIFO </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">장바구니처럼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">특정</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기간에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">특정한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">형태를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">순환적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">유용하게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">9.5.4<span style="mso-spacerun:yes"> </span>OSCACHE</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">OSCACHE </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모델은</span><span lang="EN-US"> Open Symphony(<a href="http://www.opensymphony.com/oscache/)%EC%9D%98%20OSCache%202.0">http://www.opensymphony.com/oscache/)<span lang="EN-US" style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman""><span lang="EN-US">의</span></span> OSCache 2.0</a> </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. OSCache</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모델로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제공하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전략을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">견고한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프레임워크이다</span><span lang="EN-US">. OSCACHE </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모델을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때는</span><span lang="EN-US"> OSCache</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span><span lang="EN-US"> jar </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파일들이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때는</span><span lang="EN-US"> OSCache</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span><span lang="EN-US"> jar </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파일들을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로젝트</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디렉터리에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">포함시켜야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표준</span><span lang="EN-US"> OSCache </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설치와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동일한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">말은</span><span lang="EN-US"> OSCache</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">읽을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있도록</span><span lang="EN-US"> oscache.properties </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파일을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">클래스패스의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">최상위에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장해둬야</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">뜻이다</span><span lang="EN-US">. OSCache</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설치하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방법에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">싶다면</span><span lang="EN-US">, <a href="http://www.opensymphony.com/oscache/documentation.action">http://www.opensymphony.com/oscache/documentation.action</a> </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작성된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문서를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다음은</span><span lang="EN-US"> OSCACHE </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모델의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예제를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><cachemodel id="categoryCache" type="OSCACHE"></cachemodel></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushinterval hours="24"></flushinterval></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="insert"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="update"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="delete"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">9.5.5 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">스스로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만든</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모델</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">앞에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모델은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프레임워크에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">플러그인되는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">형태의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컴포넌트라고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">언급한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시모델을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만들</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">싶거나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">호기심만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오직</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기억하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하나는</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제공해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">네</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모델은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">단순히</span><span lang="EN-US"> com.ibatis.sqlmap.engine.cache.CacheController </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인터페이스를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구현한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이라는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">점이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하나는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">디폴트</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모델들의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이름은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단순히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구현체들의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">완전한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클래스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이름에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">별칭이라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">점이다</span><span lang="EN-US">.</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">계속</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나아가면서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이제는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">당신</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자신의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모델도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있으니</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이걸</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작동시키는지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방법을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알아보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.6.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전략</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수립하기</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전략을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수립할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">먼저</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요구사항을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명확하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">접근</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계층을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">앞에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설명한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전략들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제공하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제공하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전략들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">여러분이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이루고자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전략</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전반에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">걸쳐서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">원활하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작동하도록</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있으며</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">잘</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작동할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전반에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">걸쳐</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전략에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것들만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있지는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전반적인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전략을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">탐구하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">책의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">범위를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">벗어나는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">고려사항과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">논의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사항들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어쨌든</span><span lang="EN-US"> iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기능이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">여러분의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전략</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전반에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">부분을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">담당할지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결정하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">중요하다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">접근</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계층에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐싱할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해당</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전용</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">공유하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터베이스를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전용</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개발중인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">통해서만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">공유</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우에는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">접근할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수정하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가능해진다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여러가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">접근하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수정하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">애플리케이션이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">접속한다면</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터베이스에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">변경을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">원본</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">변경된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오래</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">되었다면</span><span lang="EN-US"> <flushonexecute> </flushonexecute></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">효과적인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방법이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">못한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그래도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여전히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">읽기</span><span lang="EN-US">/</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쓰기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가능한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">영향을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정적이고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">읽기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전용인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐싱하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">효과를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">변경되지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리포팅</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">장바구니</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">드롭</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다운</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">목록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">등이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그렇다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한편</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의해서만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가능한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터베이스를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱한다면</span><span lang="EN-US"> iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적극적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">도입할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전용</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션에서는</span><span lang="EN-US"> <flushonexecute></flushonexecute></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">훨씬</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">효율적으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개발자가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">특정</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실행하면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이상</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유효하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만든다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있으므로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지우기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전략을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수립할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">특정</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">항목이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해제될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">세부적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제어하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">싶거나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클러스터링된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원한다고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생각해보자</span><span lang="EN-US">. iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자체는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그런</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방식의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제공하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않는다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하지만</span><span lang="EN-US"> OSCACHE </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입</span><span lang="EN-US">(9.5.4</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">절</span><span lang="EN-US">)</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조합해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">형태의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">견고한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제공할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어쨌든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이전에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">말했던</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">규칙이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적용된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하나로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제한되어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적극적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">케시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하지만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전용</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아닌</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우에는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주의해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">나올</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몇몇</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">절에서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관련된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">스터디와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구현을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시작할지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보여주는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">코드</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조각들을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">9.6.1 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">읽기전용</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">장기간</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">읽기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전용의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">장기간</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유지되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자주</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대상이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자주</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">변경되지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시하기가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쉽다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">종류의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">집어넣고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지울</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되거나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비우도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지정된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실행될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때까지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">잊어버리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있어도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">장바구니</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다시</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보면서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">읽기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전용</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">과정을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">8</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">장에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">장바구니</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카테고리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">살펴보았기에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여기서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">장바구니</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방문자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">카테고리를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">선택하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관련된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">카테고리를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">화면에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">함께</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카테고리들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">꽤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자주</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용되며</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그다지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">변경되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">따라서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">장기간</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">유지할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">읽기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전용</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주요</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대상이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카테고리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐싱을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정할지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생각할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때는</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조회할지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">패턴에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적합한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전략은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것인지를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">고려해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하위</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카테고리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리스트를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대개</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관련된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상위</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카테고리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기반으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카테고리의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조회해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">혼다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것을</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">식</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">용어로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표현하면</span><span lang="EN-US"> WHERE </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조건이</span><span lang="EN-US"> parentCategoryID </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전달받는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동일한지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">여부에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기초를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">두고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의미이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">고려사항으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">얼마나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자주</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지워야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떠한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전략을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하는가가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용자들은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">종종</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">특정</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카테고리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카테고리보다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자주</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그래서</span><span lang="EN-US"> LRU </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전략으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하고자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">항목들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">측정한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방법을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">최근에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">접근한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">항목들을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계속</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐싱하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오랫동안</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있었던</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">삭제한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><cachemodel id="categoryCache" type="LRU"></cachemodel></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushinterval hours="24"></flushinterval></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="insert"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="update"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="delete"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><property name="size" value="50"></property></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">에서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모델을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시작하였다</span><span lang="EN-US">. Type </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성을</span><span lang="EN-US"> LRU</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정하였다</span><span lang="EN-US">. Id </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">속성의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모델의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유일한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">식별자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">역할을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. <flushinterval> </flushinterval></span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">절대로</span><span lang="EN-US"> 24</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이상</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지속되지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보장하였다</span><span lang="EN-US">. <flushinterval></flushinterval></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">은</span><span lang="EN-US"> categoryCache</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">식별되는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장돼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">삭제할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. <flushexecute></flushexecute></span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용해서</span><span lang="EN-US"> insert, update, delete</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지정된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">호출하면</span><span lang="EN-US"> id</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span><span lang="EN-US"> categoryCache</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지우도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">마지막으로</span><span lang="EN-US"> <property> </property></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소와</span><span lang="EN-US"> size </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이용해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">저장할수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">항목의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개수를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제한하도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시에</span><span lang="EN-US"> 50</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이상의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장되면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">최근에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이용되지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">항목을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">삭제하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시작한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음에서</span><span lang="EN-US"> getChildCategories </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문은</span><span lang="EN-US"> cacheModel </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관련</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시로</span><span lang="EN-US"> categoryCache </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">라는</span><span lang="EN-US"> id</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지정해서</span><span lang="EN-US"> categoryCache</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">장바구니</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어플리케이션의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카테고리를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span><span lang="EN-US"> getChildCategories </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">호출된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카테고리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">크기가</span><span lang="EN-US"> 50</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">도달하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">되면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오래된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">삭제하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시작한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이로인해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">끊임없이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카테고리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">목록이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오래</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">남아있게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">되고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자들에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">성능을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제공하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">카테고리에</span><span lang="EN-US"> insert, update, delete </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">실행하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자동으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지워지고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">처음부터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구축하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시작한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이러한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지우기와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">도태시키기</span><span lang="EN-US">(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">오랫동안</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">접근하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지우는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">작업</span><span lang="EN-US">)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">조합을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">통해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">불필요한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터베이스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">접근</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이라는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">짐을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">덜어내면서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카테고리를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유효한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">최근의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유지한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getChildCategories" parameterclass="Category" span=""> resultClass="Category" cacheModel="categoryCache"> SELECT * FROM category parentCategoryId IS NULL parentCategoryId=#categoryId:INTEGER:0# ORDER BY sequence, title </select></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">LRU </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">삭제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">처리는</span><span lang="EN-US"> size </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">증가시키거나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">감소시켜</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">많거나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">적은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">항목을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시하도록</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">세부적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조절할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. LRU </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">목표가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지속적으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">항목들만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것임을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기억하라</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">크기</span><span lang="EN-US"> (size </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티</span><span lang="EN-US">) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">너무</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">크게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">말라</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그렇게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하면</span><span lang="EN-US"> LRU </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사실상</span><span lang="EN-US"> STRONG </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">버린다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이는</span><span lang="EN-US"> LRU </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전체적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">효과를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">무용지물로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만들어버릴</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">장기간</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유지되는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">읽기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전용</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐싱하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">효과적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알아보았으니</span><span lang="EN-US">, “</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하느냐</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">마느냐</span><span lang="EN-US">” </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">라는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">고민에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자주</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">처하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">또</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">상황을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생각해보자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">바로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">읽기와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쓰기가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가능한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">9.6.2 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">읽기</span><span lang="EN-US">/</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가능한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">변경되는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">특징이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생각해보자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그렇게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하려면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주의해야만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">환경이라면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">과도하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">변경되고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사실상</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쓸모</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">없어진다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">알게될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시하려고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자주</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지워야만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">너무</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자주</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지우게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">되면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이중적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부담을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">떠안게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">첫째로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요청을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보낼때마다</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">항상</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지속적으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검사하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지우고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다시</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">채우는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상태가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">따라서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계속적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지운다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">새로운</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가져오기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계속해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">함을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의미한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">애플리케이션에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하기보다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인덱싱과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">테이블</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">피닝</span><span lang="EN-US">(table pinning, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">테이블</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">저장하기</span><span lang="EN-US">) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기술을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">성능</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">향상에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">도움이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">되리라는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">알게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">변경될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가능성이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주의할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있긴</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">변경이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">덜한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상태에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때에도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주의할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. JGameStore </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제품을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">좋은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상점</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관리자가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">새로운</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">입력하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이미</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">존재하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정보를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수정하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">품목이라고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">표시하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">외의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유사한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작업을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기능이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이런</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">종류의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작업들은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">양의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">변경을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일으킨다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">높은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요구하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">환경이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아니기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전반적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">성능을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">향상시키는데</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">역할을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구축할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시간이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">잠시</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">성능</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">향상을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제공해줄</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개발자는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">앞서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설명한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">싱크홀을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">피하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span></p> <div style="mso-element:para-border-div;border:solid windowtext 1.0pt; mso-border-alt:solid windowtext .5pt;padding:1.0pt 4.0pt 1.0pt 4.0pt"> <p class="MsoNormal" style="border:none;mso-border-alt:solid windowtext .5pt; padding:0cm;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt"><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">싱크홀</span><span lang="EN-US"> : sinkhole, </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">땅속</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지반의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">밀도가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">높지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">곳의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">땅꺼짐</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">현상을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">뜻한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">환경에서의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오히려</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">성능상에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">치명적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">역효과를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">낳는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">현상을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의미한다</span><span lang="EN-US">.</span></p> </div> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐싱하고자</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">특성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">판단할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몇몇</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사항을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">고려해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의미를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제품의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제품</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">변경</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">특성</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자주</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">접근하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제품은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">소비자의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">습관에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">따라서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하루</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">종일</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">변경될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">덜</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제한적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방법인</span><span lang="EN-US"> WEAK </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">케시를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하기로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결정하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐싱해야</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개수를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결정하려면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">특정한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수준의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예측</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가능성을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하는</span><span lang="EN-US"> LRU</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">와는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">달리</span><span lang="EN-US"> WEAK </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">미리</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결정된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인위적인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제약에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">도달하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개발자에게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">항목을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">남겨두고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">항목을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">버릴지를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결정할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">권한을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span><span lang="EN-US"> java.lang.ref.Reference </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구현체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내부적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">분석에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기초하여</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">삭제하거나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계속</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유지할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. MEMORY </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에</span><span lang="EN-US"> WEAK </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span><span lang="EN-US"> WeakReference (java.lang.ref.WeakReference) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포장해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">저장한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그러고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">나서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가비지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컬렉터가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">포장한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스스로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">판단하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처리하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제는</span><span lang="EN-US"> <cachemodel> </cachemodel></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">넘어가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보자</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이미</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">알다시피</span><span lang="EN-US"> cacheModel </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타입</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성은</span><span lang="EN-US"> MEMORY</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">읽기</span><span lang="EN-US">/</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쓰기가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가능한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">환경임에도</span><span lang="EN-US"> <cachemodel> </cachemodel></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소에</span><span lang="EN-US"> readOnly </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성을</span><span lang="EN-US"> true</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정했다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주의하라</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더욱이</span><span lang="EN-US"> serialize </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span><span lang="EN-US"> false</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">깊은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">복사를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">해야하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">부담을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제거하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">말은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가져오는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체들이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">변경될수도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있음을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의미한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방식은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러가지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이유에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">안전한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">접근법이라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">첫째로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">장바구니를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사람만이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">변경할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실제로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쇼핑을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방식으로도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">절대로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">바꿀</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">둘째로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정보가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수정될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때마다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지우게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">마지막으로</span><span lang="EN-US"> reference-type </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">속성을</span><span lang="EN-US"> WEAK</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정함으로써</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제품을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오랜기간</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동안</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가비지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컬렉터의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">재량에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">삭제하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모델</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><cachemodel id="productCache" type="MEMORY" span=""></cachemodel></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">readOnly="true" serialize="false"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="Product.add"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="Product.edit"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="Product.remove"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><property name="reference-type" value="WEAK"></property></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span lang="EN-US"><cachemodel> </cachemodel></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정의를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쿼리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되었다</span><span lang="EN-US">. cacheModel </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정해서</span><span lang="EN-US"> getProductById </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쿼리</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문이</span><span lang="EN-US"> productCache </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모델을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하도록</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션에서</span><span lang="EN-US"> getProductById </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쿼리를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때마다</span><span lang="EN-US"> productCache </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모델에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지정된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가져오게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정의한</span><span lang="EN-US"> <cachemodel></cachemodel></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하는</span><span lang="EN-US"> <select> 구문을 사용하는 방법에 대한 간단한 예제를 보여준다. </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">parameterClass="Product" cacheModel="productCache"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"> * FROM Product WHERE productId=#productId#</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">9.6.3 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">낡게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되는</span><span lang="EN-US">(aging) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정적</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐싱하기</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">마지막</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">케이스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스터디로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다소</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일반적이지는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상황을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다룰</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하지만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">재미있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">테스트</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">케이스이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지남에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용률이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">떨어지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다룰</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생기는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상황이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보통</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐싱</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시간에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기초하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">분석과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관련되어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기초한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">분석의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들자면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">콜센터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">성능</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">통계나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지난</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간</span><span lang="EN-US">/</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일</span><span lang="EN-US">/</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">월의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">통계를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제공하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">증권</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시세</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">표시기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터들의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">특징을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요약하자면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지남에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">덜</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이라고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">말할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">양의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아니지만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성시점에서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">빈번하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용되고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지남에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">차츰</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">덜</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">변경되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는데</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">달리</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">말하자면</span> <span lang="EN-US">‘</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정적</span><span lang="EN-US">’</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리의</span><span lang="EN-US"> JGameStore </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이런</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요구사항은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">장바구니</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계속</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">고객들이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간다마</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구입하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">최다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">판매</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">품목</span><span lang="EN-US"> 5</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">통계를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수집할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가정해보자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그러고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">장바구니</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">홈페이지에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">올려서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쇼핑객들에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시간별로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인기가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">높은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">상품이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">무엇인지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">알려줄</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이전</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">선택하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">드롭</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다운</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">목록을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제공해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예전</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">인기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구매</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상품을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일단</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구입이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이뤄질</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">변하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않는다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다섯</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">최신</span><span lang="EN-US"> 3D </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">블록버스터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">최근</span><span lang="EN-US"> 1</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구입했다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">앞으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">인기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상품이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐싱을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이러한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요구사항을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">만족시키면서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">성능을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">향상시킬</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">살펴보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지남에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">덜</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사실과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">점점</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">낡게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">특성</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span><span lang="EN-US"> FIFO </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">알맞게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">느껴진다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">앞에서</span><span lang="EN-US"> FIFO</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생존</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시간에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기반한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시라고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설명</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">들어가는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터라도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">크기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제한을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">넘어서면</span> <span lang="EN-US">‘</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오래된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">나가</span><span lang="EN-US">’</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그러므로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지남에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">항목들이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">추가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">됨에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">최근</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아닌</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">점점</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">덜</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매시간</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">새로운</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시됨에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">항목들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결국에는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">삭제되게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. FIFO </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">크기를</span><span lang="EN-US"> 24</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정하였다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">항목은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">최근의</span><span lang="EN-US"> 24</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시간</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동안의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의미있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">항목들만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">유지하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이며</span><span lang="EN-US">, </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이전</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">무엇이든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">삭제하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다음으로</span> <span lang="EN-US">FIFO </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요구사항들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">충족시키는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">알아보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구매</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">목록이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지나도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동일하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">남아</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간주할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. FIFO </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정적인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">잘</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">작동한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결국에는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지나면서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">퇴출되고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자연스러운</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생존</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">억지로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">바꿔가면서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지속적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지워줄</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지워야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">유일한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제품에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수정이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가해질</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">뿐이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수정은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어쩌다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">번</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">발생하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단순히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처리를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해당</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">항목을</span><span lang="EN-US"> FIFO </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">집어넣으면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간마다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다섯개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. FIFO</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">크기를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">초과해야</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지우기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대용량</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">좋지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">못하다</span><span lang="EN-US">. FIFO </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제약을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">초과해도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비우지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이고</span><span lang="EN-US"> out-of-memory (</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">초과</span><span lang="EN-US">) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예외를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">발생시킬</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제품</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예제의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">확실히</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">안전하다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐싱에서는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">높은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비율의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">접근과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">낮은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비율의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">게임의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">부분이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">번</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이상</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">접근할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사실에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">성능</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">향상이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">확실히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개발자가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경험을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상관없다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">세세하게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">크기를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">조절하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">고려할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">현재</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">인기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구매</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">품목과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">과거</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">인기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구매</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">품목에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사람이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">얼마나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많으냐에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">따라서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">크기를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적절하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요구</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사항목록을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">살펴보았고</span><span lang="EN-US"> FIFO </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요구</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사항에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">왜</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적합한지도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알았으니</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모델을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단계로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나아가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보자</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모델은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">꽤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있듯이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이미</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구입한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제품들의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정보를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">올바르게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보여주기를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">먼저</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적당한</span><span lang="EN-US"> <flushonexecute> </flushonexecute></span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지정해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">변경될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span><span lang="EN-US"> hotProductsCache</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지우도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개발자는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단지</span><span lang="EN-US"> Product.update </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span><span lang="EN-US"> Product.delete </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">명시하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지우도록</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여기서는</span><span lang="EN-US"> insert</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">포함시키지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않았는데</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이유는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">존재하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제품은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">고려하지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제품이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">추가되고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">인기구매</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">품목이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이를</span><span lang="EN-US"> hotProductCache </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">추가하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아무</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문제될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제품이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수정될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때에만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비우기를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">걱정하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이상</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">판매하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제품을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계속해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">진열하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">싶지는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않으니까</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">말이다</span><span lang="EN-US">(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">들면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">삭제된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제품</span><span lang="EN-US">). </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가격이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수정되었는데</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예전</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가격을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">붙여서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보여주는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">원치</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><cachemodel id="hotProductCache" type="FIFO"></cachemodel></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="Product.update"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><flushonexecute statement="Product.delete"></flushonexecute></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><property name="size" value="12"></property></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select< span=""></select<></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">id="getPopularProductsByPurchaseDate"</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">parameterClass="Product"</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">resultClass="Product" cacheModel="hotProductsCache"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"> count(productId) countNum, productId</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">FROM productPurchase</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">WHERE</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">purchaseDate</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">BETWEEN</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">#startDate#</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">AND</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">#endDate#</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">GROUP BY productId</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">ORDER BY countNum DESC</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">LIMIT 5</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지우는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">미뤄두고</span><span lang="EN-US"> FIFO </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시의</span><span lang="EN-US"> size </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">넘어가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보자</span><span lang="EN-US">. Size </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티를</span><span lang="EN-US"> 12</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">최대</span><span lang="EN-US"> 12</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과만을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일단</span><span lang="EN-US"> 12</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">캐시에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">저장되면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오래된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">항목이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지워지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">최근</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">항목이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시작</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">부분에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">추가되게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매시간</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이상의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간마다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">신규</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저장할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐시는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적절한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시간동안만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보유하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">최신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쿼리</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">항상</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">캐시의</span> <span lang="EN-US">‘</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">앞</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">부분</span><span lang="EN-US">’</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저장되고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오래된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">삭제될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p>Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-83917261797104525552011-05-31T01:04:00.000-07:002011-05-31T01:05:23.000-07:00iBATIS in Action (8/14)<div style="mso-element:para-border-div;border-top:solid windowtext 3.0pt; border-left:none;border-bottom:solid windowtext 3.0pt;border-right:none; padding:0cm 0cm 0cm 0cm"> <h1><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적인</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하기</span></h1> </div> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적인</span><span lang="EN-US"> WHERE </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">조건절</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다루기</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">장바구니</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어플리케이션의</span><span lang="EN-US"> Category </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">테이블을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조회한다</span><span lang="EN-US">. parentCategoryId </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">칼럼은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자신을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">칼럼이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">말하면</span><span lang="EN-US"> parentCategoryId</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그림에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보듯이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동일한</span><span lang="EN-US"> Category </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">테이블의</span><span lang="EN-US"> categoryId</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">참조한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-no-proof:yes"><v:shapetype id="_x0000_t75" coordsize="21600,21600" spt="75" preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"> <v:f eqn="sum @0 1 0"> <v:f eqn="sum 0 0 @1"> <v:f eqn="prod @2 1 2"> <v:f eqn="prod @3 21600 pixelWidth"> <v:f eqn="prod @3 21600 pixelHeight"> <v:f eqn="sum @0 0 1"> <v:f eqn="prod @6 1 2"> <v:f eqn="prod @7 21600 pixelWidth"> <v:f eqn="sum @8 21600 0"> <v:f eqn="prod @7 21600 pixelHeight"> <v:f eqn="sum @10 21600 0"> </v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:formulas> <v:path extrusionok="f" gradientshapeok="t" connecttype="rect"> <o:lock ext="edit" aspectratio="t"> </o:lock></v:path></v:stroke></v:shapetype><v:shape id="그림_x0020_20" spid="_x0000_i1026" type="#_x0000_t75" style="width:138pt;height:192pt;visibility:visible;mso-wrap-style:square"> <v:imagedata src="file:///C:\Users\박성진\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" title="제목 없음"> </v:imagedata></v:shape></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요구사항은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전달받은</span><span lang="EN-US"> Category</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체의</span><span lang="EN-US"> parentCategoryId </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티가</span><span lang="EN-US"> null </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">상위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">레벨의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">카테고리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조회한다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의미이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">parentCategoryId </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티가</span><span lang="EN-US"> null</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아닌</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">숫자</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값이라면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">부모</span><span lang="EN-US"> category </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자식</span><span lang="EN-US"> category </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">조회한다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">뜻한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부모</span><span lang="EN-US"> category</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">란</span><span lang="EN-US"> parentCategoryId </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의미한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">SQL </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">에서는</span><span lang="EN-US"> =</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기호를</span><span lang="EN-US"> null </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">비교에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. NULL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값인지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">여부는</span><span lang="EN-US"> IS </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">키워드로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">확인해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">우리는</span><span lang="EN-US"> NULL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span><span lang="EN-US"> NULL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아닌지를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비교하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동일한</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하고자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하나의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">처리하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">뼈대를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알아보기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getChildCategories" parameterclass="Category" span=""> resultClass="Category"> SELECT * FROM category parentCategoryId IS NULL parentCategoryId=#parentCategoryId# </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">뼈대는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">언제나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">부모</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시작한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부모</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">중</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이라도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">코드의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부모</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소로</span><span lang="EN-US"> <dynamic></dynamic></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용했다</span><span lang="EN-US">. <dynamic> </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소들과는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">달리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값이나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상태도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">평가하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">안는다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대개</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성만을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하며</span><span lang="EN-US">, prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span><span lang="EN-US"> <dynamic> </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">앞에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값인</span><span lang="EN-US"> WHERE</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내포하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">처리하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생성되는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">앞에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">붙을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부모</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몸체에는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문법이나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">온다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서</span><span lang="EN-US"> <dynamic> </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">몸체에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내포된</span><span lang="EN-US"> <isnull></isnull></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">과</span><span lang="EN-US"> <isnotnull> </isnotnull></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여기서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관심을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가져야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부분은</span><span lang="EN-US"> Category </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">클래스</span><span lang="EN-US">(parameterClass = “Category”)</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가진</span><span lang="EN-US"> parentCategoryId </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값이</span><span lang="EN-US"> null</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아닌지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">여부에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span><span lang="EN-US"> WHERE </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">조건절에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">적절한</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">넣는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시점에서</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">언제</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다른</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">앞에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">출력하게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있어야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">.<dynamic> </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">몸체에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아무런</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">텍스트도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">나오지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않으면</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">무시될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. Prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">맨</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">앞에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력되려면</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">뒤에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">붙은</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있어야만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">우리의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과</span><span lang="EN-US"> SQL</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">항상</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">존재한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아무것도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우에는</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값</span><span lang="EN-US"> WHERE</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간단히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">무시된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이점</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">중</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하나는</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">코드의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">재사용성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">높여준다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않고서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구현하려면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span><span lang="EN-US"> select </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">작성해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">했을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">게다가</span><span lang="EN-US"> DAO</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">계층에서</span><span lang="EN-US"> category </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체의</span><span lang="EN-US"> parentCategoryId </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">먼저</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">확인하고</span><span lang="EN-US">, </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span><span lang="EN-US"> parentCategoryId</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값이</span><span lang="EN-US"> null</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">인지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아닌지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여부에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적당한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">호출해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이번</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">없더라도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">별로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">불편할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">없지만</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조합으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">인해</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기하급수적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">증가할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가능성이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">진정한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가치가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">분명하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">드러난다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">재사용하도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정적인</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">작성하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">피하도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용법과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">강력함에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이해했을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상세히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">알아보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.2.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소들과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">친숙해지기</span></h2> <p class="MsoNormal"><span lang="EN-US">iBATIS</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">강력한</span><span lang="EN-US"> XML </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">통해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">문제를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처리한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">넘어온</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다양한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">조건들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">평가하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">역할을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">존재하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이해하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그것들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">올바르게</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">역할을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이해하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있어야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">절에서는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소들을</span><span lang="EN-US"> <dynamic>, </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이항연산</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단항연산</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span><span lang="EN-US"> <iterate></iterate></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span><span lang="EN-US"> 5</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카테고리로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나눈다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각각의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그룹은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">공통적인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">특성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">공유하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이상의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관련</span><span lang="EN-US"> XML</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">포함하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그룹을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알아보기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">잠시</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시간을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">할애해서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">공유하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">몇</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">공통적인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">행위를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">알아보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소는</span><span lang="EN-US"> prepend, open, close </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">포함한다</span><span lang="EN-US">. Open</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">과</span><span lang="EN-US"> close</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각각의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">똑같이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">작동한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시작이나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">끝에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">무조건</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">붙인다</span><span lang="EN-US">. Prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성은</span><span lang="EN-US"> <dynamic></dynamic></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제외하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동일하게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">작동한다</span><span lang="EN-US">. <dynamic> </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용물을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">만들어낼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">항상</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">앞에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">붙인다</span><span lang="EN-US">. <dynamic></dynamic></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소에서</span><span lang="EN-US"> prepend</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">처리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">막을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방법은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">실례를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><dynamic prepend="WHERE "><span style="mso-spacerun:yes"> </span><span style="mso-spacerun:yes"> </span>----(1)<dynamic> </dynamic></dynamic></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시작</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><isnotempty property="y"><span style="mso-spacerun:yes"> </span>----(2) </isnotempty></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단한</span><span lang="EN-US"> <isnotempty></isnotempty></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">y=#y#</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><isnotnull property="x" removefirstprepend="true" span=""><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">복잡한</span><span lang="EN-US"> <isnotempty></isnotempty></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소</span></isnotnull></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">prepend="AND" open="(" close=")"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><isnotempty property="x.a" prepend="OR"><span style="mso-spacerun:yes"> </span>----(4) </isnotempty></span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내포된</span><span lang="EN-US"> <dynamic> </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">a=#x.a#</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><isnotempty property="x.b" prepend="OR"></isnotempty></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">a=#x.b#</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><isnotempty property="x.c" prepend="OR"></isnotempty></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">a=#x.c#</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal"><span lang="EN-US">.<span style="mso-spacerun:yes"> </span>(1)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시작</span><span lang="EN-US"> <dynamic> </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자식</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">첫번째</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자동으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">무조건</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제거한다</span><span lang="EN-US">. <isnotempty> </isnotempty></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소가</span><span lang="EN-US"> true</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다면</span><span lang="EN-US"> (2) removeFirstPrepend </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기능이</span><span lang="EN-US"> <dynamic></dynamic></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자동으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작동하게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동일한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">레벨의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">뒤따라오는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소들은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">각각의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내용에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">앞에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">붙을</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가질</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. <isnotnull> </isnotnull></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소는</span><span lang="EN-US"> (3)removeFirstPrepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명시하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. Open</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">과</span><span lang="EN-US"> close </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">앞뒤를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">감싼다</span><span lang="EN-US">. (4)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">첫</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">번째</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내포된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">만드는</span><span lang="EN-US"> <isnotempty></isnotempty></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소는</span><span lang="EN-US"> removeFirstPrepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요구사항을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">처리할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처음으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력하는</span><span lang="EN-US"> <isnotempty> </isnotempty></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소는</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값</span><span lang="EN-US"> OR</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">괄호</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">안에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정확한</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">첫</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">번째</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제거</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기능은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자동으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">혹은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명시적</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">통해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. <dynamic></dynamic></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자동으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지원한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이를</span><span lang="EN-US"> removeFirstPrepend</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명시함으로써</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지원한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">첫</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">번째</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제거</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기능은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">처음으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생성하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자식</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소의</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제거해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">버린다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처음으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생성하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자식</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소가</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않다면</span><span lang="EN-US"> removeFirstPrepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행하지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간주한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그래서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이후에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생성하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자식요소들</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">중</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때까지</span><span lang="EN-US"> removeFirstPrepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제거</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기능은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">유효하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이후</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">처음으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나오는</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">작동한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">공통</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기능의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">마지막</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">부분은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">서로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">독립적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> <dynamic> </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내부에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">포함시켜</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">없다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의미이다</span><span lang="EN-US">. <iterate></iterate></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시작해서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">안에</span><span lang="EN-US"> <isnull></isnull></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">넣는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것도</span><span lang="EN-US"> <dynamic> </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">감싸는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것만큼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쉽게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이러한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제공하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이유는</span><span lang="EN-US"> <dynamic> </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소의</span><span lang="EN-US"> open, close </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">혹은</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">붙여주기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위함일</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">뿐이기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그럼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이제부터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소들의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카테고리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각각을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">분석해보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.2.1 <dynamic> </dynamic></span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US"><dynamic></dynamic></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">최상위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">레벨에서만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">즉</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">안에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들어갈</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">없다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">뜻이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이용해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">절들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구분한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">공통</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성인</span><span lang="EN-US"> prepend, open </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span><span lang="EN-US"> close </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">통해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">앞</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">뒤에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">뭔가를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">출력해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. </span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴보았다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음은</span><span lang="EN-US"> <dynamic> </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용법을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getChildCategories" parameterclass="Category" span=""> resultClass="Category"> SELECT * FROM category parentCategoryId IS NULL parentCategoryId=#parentCategoryId# </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적인</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용해서</span><span lang="EN-US">, parentCategoryId </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검사하여</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성하는</span><span lang="EN-US"> select </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문의</span><span lang="EN-US"> WHERE</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">절을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구성하였다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.2.2 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이항연산</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이항연산</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파라미터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값이나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파라미터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비교한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비교</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과가</span><span lang="EN-US"> true</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이항연산</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소는</span><span lang="EN-US"> property, compareProperty, compareValue </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">공통으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. Property </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비교할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기본값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제공한다</span><span lang="EN-US">. compareProperty </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">와</span><span lang="EN-US"> compareValue </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">비교</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대상이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제공한다</span><span lang="EN-US">. compareProperty </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기본값에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비교할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명시한다</span><span lang="EN-US">. compareValue </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기본값에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비교할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명시한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이름은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비교</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의미한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">표에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none;mso-border-alt:solid black .5pt; mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt"> <tbody><tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes"> <td width="121" valign="top" style="width:90.45pt;border:solid black 1.0pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Property (</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필수</span><span lang="EN-US">)</span></p> </td> <td width="460" valign="top" style="width:344.65pt;border:solid black 1.0pt; border-left:none;mso-border-left-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">compareValue </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">나</span><span lang="EN-US"> compareProperty </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">비교하는데</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티</span></p> </td> </tr> <tr style="mso-yfti-irow:1"> <td width="121" valign="top" style="width:90.45pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Prepend (</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="460" valign="top" style="width:344.65pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보통</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내용의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">앞에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우에는</span><span lang="EN-US"> prepend</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">무시된다</span><span lang="EN-US">. (a) </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">공백인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span><span lang="EN-US">, (b)</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">처음으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만들어</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">냈고</span><span lang="EN-US"> removeFirstPrepend </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성이</span><span lang="EN-US"> true </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내포되어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span><span lang="EN-US">, (c) <dynamic> </dynamic></span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">공백이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아닌</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처음으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력하고</span><span lang="EN-US"> prepend</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정돼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:2"> <td width="121" valign="top" style="width:90.45pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Open (</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="460" valign="top" style="width:344.65pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Open </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접두사로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">붙이기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. Open </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">공백일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">접두사로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">붙지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. Open </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값보다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">뒤에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">붙는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">들어</span><span lang="EN-US"> prepend=”OR” </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이고</span><span lang="EN-US"> open=”(“ </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">라면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조합된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과는</span> <span lang="EN-US">“OR(“</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:3"> <td width="121" valign="top" style="width:90.45pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Close(</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="460" valign="top" style="width:344.65pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Close </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내용의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">뒤에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">덧붙이는데</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">공백이라면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">덧붙여지지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:4"> <td width="121" valign="top" style="width:90.45pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">removeFirstPrepend( </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="460" valign="top" style="width:344.65pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처음으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자식</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소의</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">출력할지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">여부를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결정한다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:5"> <td width="121" valign="top" style="width:90.45pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">compareProperty(compareValue</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명시되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않았다면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필수</span><span lang="EN-US">)</span></p> </td> <td width="460" valign="top" style="width:344.65pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">compareProperty</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span><span lang="EN-US"> property </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">명명된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비교할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">명시한다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:6;mso-yfti-lastrow:yes"> <td width="121" valign="top" style="width:90.45pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">compareValue(compareProperty</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명시되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않았다면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필수</span><span lang="EN-US">)</span></p> </td> <td width="460" valign="top" style="width:344.65pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Property </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">명명된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로퍼티와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비교할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비교값</span></p> </td> </tr> </tbody></table> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이항연산</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">공유하고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이름</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자체는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다음의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none;mso-border-alt:solid black .5pt; mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt"> <tbody><tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes"> <td width="149" valign="top" style="width:111.75pt;border:solid black 1.0pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US"><isequal></isequal></span></p> </td> <td width="431" valign="top" style="width:323.35pt;border:solid black 1.0pt; border-left:none;mso-border-left-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Property </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성값이</span><span lang="EN-US"> compareProperty </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값이나</span><span lang="EN-US"> compareValue </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">같은지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">검사</span></p> </td> </tr> <tr style="mso-yfti-irow:1"> <td width="149" valign="top" style="width:111.75pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US"><isnotequal></isnotequal></span></p> </td> <td width="431" valign="top" style="width:323.35pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Property </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성값이</span><span lang="EN-US"> compareProperty </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값이나</span><span lang="EN-US"> compareValue </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">같지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않은지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검사</span></p> </td> </tr> <tr style="mso-yfti-irow:2"> <td width="149" valign="top" style="width:111.75pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US"><isgreaterthan></isgreaterthan></span></p> </td> <td width="431" valign="top" style="width:323.35pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Property </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성값이</span><span lang="EN-US"> compareProperty </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값이나</span><span lang="EN-US"> compareValue </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값보다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">큰지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">검사</span></p> </td> </tr> <tr style="mso-yfti-irow:3"> <td width="149" valign="top" style="width:111.75pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US"><isgreaterequal></isgreaterequal></span></p> </td> <td width="431" valign="top" style="width:323.35pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Property </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성값이</span><span lang="EN-US"> compareProperty </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값이나</span><span lang="EN-US"> compareValue </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값보다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">크거나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같은지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검사</span></p> </td> </tr> <tr style="mso-yfti-irow:4"> <td width="149" valign="top" style="width:111.75pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US"><islessthan></islessthan></span></p> </td> <td width="431" valign="top" style="width:323.35pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Property </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성값이</span><span lang="EN-US"> compareProperty </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값이나</span><span lang="EN-US"> compareValue </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값보다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작은지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">검사</span></p> </td> </tr> <tr style="mso-yfti-irow:5;mso-yfti-lastrow:yes"> <td width="149" valign="top" style="width:111.75pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US"><islessequal></islessequal></span></p> </td> <td width="431" valign="top" style="width:323.35pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Property </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성값이</span><span lang="EN-US"> compareProperty </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값이나</span><span lang="EN-US"> compareValue </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값보다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작거나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같은지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검사</span></p> </td> </tr> </tbody></table> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">표는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">참조가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">되겠지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">충분치</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아래에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">함께</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getShippingType" parameterclass="Cart" span=""> resultClass="Shipping"> SELECT * FROM Shipping shippingType='FREIGHT' shippingType='STANDARD' </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">에서</span><span lang="EN-US"> select </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생성하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span><span lang="EN-US"> shippingType </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값이</span><span lang="EN-US"> 100</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작은</span><span lang="EN-US"> standard </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입인지</span><span lang="EN-US">, 100</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보다</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">큰</span><span lang="EN-US"> freight </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입인지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결정하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span><span lang="EN-US"> weight </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검사한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.2.3 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">단항연산</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단항연산</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">빈즈</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로퍼티의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상태를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">검사만하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비교는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수행하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상태의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과가</span><span lang="EN-US"> true </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">라면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포함된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단항연산</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소는</span><span lang="EN-US"> property </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">공유한다</span><span lang="EN-US">. Property </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상태를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">검사할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이름을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정해준다</span><span lang="EN-US">.</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이름은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상태를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">검사할지를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의미한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">단항연산</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none;mso-border-alt:solid black .5pt; mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt"> <tbody><tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Property(</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필수</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border:solid black 1.0pt; border-left:none;mso-border-left-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상태</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비교를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파라미터의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">변수명</span></p> </td> </tr> <tr style="mso-yfti-irow:1"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Prepend(</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필수</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">앞에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다음의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우에는</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">무시된다</span><span lang="EN-US">. (a) </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">공백인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span><span lang="EN-US">, (b) </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">처음으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만들어</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">냈고</span><span lang="EN-US"> removeFirstPrepend </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성이</span><span lang="EN-US"> true </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내포되어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span><span lang="EN-US">, (c) <dynamic> </dynamic></span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">공백이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아닌</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처음으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력하고</span><span lang="EN-US"> prepend</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정돼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우</span></p> </td> </tr> <tr style="mso-yfti-irow:2"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Open(</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Open </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접두사로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">붙이기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. Open </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">공백일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">접두사로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">붙지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. open</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성값보다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">뒤에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">붙는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들어</span><span lang="EN-US">, prepend=”OR” </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이고</span><span lang="EN-US"> open=”(“ </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">라면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조합된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과는</span> <span lang="EN-US">“OR (“</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:3"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Close(</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Close </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내용의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">뒤에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">덧붙이는데</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">공백이라면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">덧붙여지지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:4;mso-yfti-lastrow:yes"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">removeFirstPrepend(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처음으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자식</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소의</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">출력할지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">여부를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결정한다</span><span lang="EN-US">.</span></p> </td> </tr> </tbody></table> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">표의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아래의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">표에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단항연산</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가능하다</span><span lang="EN-US">.</span></p> <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none;mso-border-alt:solid black .5pt; mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt"> <tbody><tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes"> <td width="149" valign="top" style="width:111.75pt;border:solid black 1.0pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US"><ispropertyavailable></ispropertyavailable></span></p> </td> <td width="431" valign="top" style="width:323.35pt;border:solid black 1.0pt; border-left:none;mso-border-left-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명시된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파라미터에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">존재하는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">검사</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">빈즈에서는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">찾고</span><span lang="EN-US"> Map</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에서는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">키를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">찾는다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:1"> <td width="149" valign="top" style="width:111.75pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US"><isnotpropertyavailable></isnotpropertyavailable></span></p> </td> <td width="431" valign="top" style="width:323.35pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명시된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파라미터에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">존재하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">검사</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">빈즈에서는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">찾고</span><span lang="EN-US"> Map</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에서는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">키를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">찾는다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:2"> <td width="149" valign="top" style="width:111.75pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US"><isnull></isnull></span></p> </td> <td width="431" valign="top" style="width:323.35pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명시된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티가</span><span lang="EN-US"> null </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검사</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">빈즈에서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로퍼티를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">찾고</span><span lang="EN-US"> Map</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에서는</span><span lang="EN-US"> key</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">찾는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">키가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">존재하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않으면</span><span lang="EN-US"> true</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">반환한다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:3"> <td width="149" valign="top" style="width:111.75pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US"><isnotnull></isnotnull></span></p> </td> <td width="431" valign="top" style="width:323.35pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명시된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티가</span><span lang="EN-US"> null</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아닌</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값인지를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">검사</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">빈즈에서는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">찾고</span><span lang="EN-US"> Map</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에서는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">키를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">찾는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">키가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">존재하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않는다면</span><span lang="EN-US"> false</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">반환한다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:4"> <td width="149" valign="top" style="width:111.75pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US"><isempty></isempty></span></p> </td> <td width="431" valign="top" style="width:323.35pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명시된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티가</span><span lang="EN-US"> null </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이거나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">빈</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">문자열</span><span lang="EN-US">(“”), </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">빈</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">컬렉션이나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">빈</span><span lang="EN-US"> String, valueOf() </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인지를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검사</span></p> </td> </tr> <tr style="mso-yfti-irow:5;mso-yfti-lastrow:yes"> <td width="149" valign="top" style="width:111.75pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US"><isnotempty></isnotempty></span></p> </td> <td width="431" valign="top" style="width:323.35pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명시된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티가</span><span lang="EN-US"> null</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아니거나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">빈</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">문자열</span><span lang="EN-US">(“”), </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">빈</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬렉션</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">빈</span><span lang="EN-US"> String, valueOf() </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아닌지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">검사</span></p> </td> </tr> </tbody></table> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아래는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단항연산</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하는지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getProducts" parameterclass="Product" span=""> resultClass="Product"> SELECT * FROM Products productType=#productType# </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span><span lang="EN-US"> select </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성하고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span><span lang="EN-US"> productType </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">선택적으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">걸러서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가져온다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.2.4 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파라미터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">없이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정의하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가능하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전달되는지를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검사하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만들어졌다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none;mso-border-alt:solid black .5pt; mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt"> <tbody><tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Prepend(</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border:solid black 1.0pt; border-left:none;mso-border-left-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">앞에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다음의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우에는</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">출력되지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">무시된다</span><span lang="EN-US">. (a) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">공백인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우</span><span lang="EN-US">, (b) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">처음으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">만들어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">냈고</span><span lang="EN-US"> removeFirstPrepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성이</span><span lang="EN-US"> true</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내포되어</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우</span><span lang="EN-US">, (c) <dynamic> </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다음에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">공백이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아닌</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">처음으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">출력하고</span><span lang="EN-US"> prepend</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정돼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소일</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span></p> </td> </tr> <tr style="mso-yfti-irow:1"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Open(</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Open </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접두사로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">붙이기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. Open </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">공백일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">접두사로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">붙지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. Open </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값보다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">뒤에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">붙는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">들어</span><span lang="EN-US"> prepend=”OR” </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이고</span><span lang="EN-US"> open=” (“ </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">라면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조합된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과는</span> <span lang="EN-US">“OR (“ </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:2"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Close(</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Close </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내용의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">뒤에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">덧붙이는데</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">공백이라면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">덧붙여지지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:3;mso-yfti-lastrow:yes"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">removeFirstPrepend(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처음으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자식</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소의</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">출력할지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">여부를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결정한다</span><span lang="EN-US">.</span></p> </td> </tr> </tbody></table> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아래에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가능하다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><isparameterpresent> : </isparameterpresent></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">존재하는지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">평가</span></p> <p class="MsoNormal"><span lang="EN-US"><isnotparameterpresent> : </isnotparameterpresent></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">존재하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않는지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">평가</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음은</span><span lang="EN-US"> select </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getProducts" resultclass="Product"> SELECT * FROM Products productType=#productType# <!-- isParameterPresent --> </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span><span lang="EN-US"> select </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생성하고</span><span lang="EN-US">, </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이번에는</span><span lang="EN-US"> productType </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기반으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">걸러내는</span><span lang="EN-US"> WHERE </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">절을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">선택적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생성해준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.2.5 <iterate> </iterate></span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span></h2> <p class="MsoNormal"><span lang="EN-US"><iterate> </iterate></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬렉션이나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">배열로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">받아서</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값들로부터</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">반복적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부분을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리스트의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값들을</span><span lang="EN-US"> conjunction </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">속성에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지정된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">문자열</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사이에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">넣는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방식으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">분리하이</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일부가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되도록</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력한다</span><span lang="EN-US">. Open </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">앞</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">부분에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">붙어서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나온다</span><span lang="EN-US">. Close </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">뒷부분에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">붙어서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">나온다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">표에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none;mso-border-alt:solid black .5pt; mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt"> <tbody><tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Property(</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필수</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border:solid black 1.0pt; border-left:none;mso-border-left-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리스트</span><span lang="EN-US">(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">컬렉션</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">배열</span><span lang="EN-US">)</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">포함하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파라미터의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티</span></p> </td> </tr> <tr style="mso-yfti-irow:1"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Prepend(</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">앞에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다음의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우에는</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">무시된다</span><span lang="EN-US">. (a) </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">공백인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span><span lang="EN-US">, (b) </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">처음으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만들어</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">냈고</span><span lang="EN-US"> removeFirstPrepend </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성이</span><span lang="EN-US"> true </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내포되어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span><span lang="EN-US">, (c) <dynamic> </dynamic></span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">공백이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아닌</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처음으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력하고</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정돼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:2"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Open(</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Open </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접두사로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">붙이기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. Open </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">공백일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">접두사로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">붙지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. Open </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성값보다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">뒤에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">붙는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들어</span><span lang="EN-US"> prepend=”OR” </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이고</span><span lang="EN-US"> open=”(“</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">라면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조합된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과는</span> <span lang="EN-US">“OR (“</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:3"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Close(</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Close </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내용의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">뒤에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">덧붙이는데</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">공백이라면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">덧붙여지지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:4"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">Conjunction(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">목록의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사이에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력되어</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">문장을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구성한다</span><span lang="EN-US">.</span></p> </td> </tr> <tr style="mso-yfti-irow:5;mso-yfti-lastrow:yes"> <td width="140" valign="top" style="width:104.65pt;border:solid black 1.0pt; border-top:none;mso-border-top-alt:solid black .5pt;mso-border-alt:solid black .5pt; padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span lang="EN-US">removeFirstPrepend(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">선택적</span><span lang="EN-US">)</span></p> </td> <td width="441" valign="top" style="width:330.45pt;border-top:none;border-left: none;border-bottom:solid black 1.0pt;border-right:solid black 1.0pt; mso-border-top-alt:solid black .5pt;mso-border-left-alt:solid black .5pt; mso-border-alt:solid black .5pt;padding:0cm 5.4pt 0cm 5.4pt"> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처음으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자식</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소의</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">출력할지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">여부를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결정한다</span><span lang="EN-US">.</span></p> </td> </tr> </tbody></table> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아래는</span><span lang="EN-US"> <iterate> </iterate></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이용해서</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">복잡한</span><span lang="EN-US"> WHERE </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조건절을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구성하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getProducts" parameterclass="Product" span=""> resultClass="Product"> SELECT * FROM Products open="(" close=")" conjunction=","> productType=#productType# </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서는</span><span lang="EN-US"> select </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만들고</span><span lang="EN-US">, </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타입</span><span lang="EN-US">(product type) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">목록을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">반복적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">돌아서</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제품</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필터링하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조건절을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.3.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">적용한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예제</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기본</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지식을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">배웠다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">검색</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구현하여</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용해보자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서는</span><span lang="EN-US"> JGameStore </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">애플리케이션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션은</span><span lang="EN-US"> 14</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">장에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정식으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">소개할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예정이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구축하면서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개념을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이해하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">조합해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하는데</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">도움이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있도록</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">간결한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">접근</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보기전에</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로세스를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴보자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로세스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자체는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상당히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">성숙해감에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">처리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">과정들은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">서로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">순서와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다양한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수준의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노력을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">초반에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해줘야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작업이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">약간</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">먼저</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기반을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다져놔야</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일단</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기반을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">무언가를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구축하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">별로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로세스는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기본적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단계로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구성된다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가져오고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">표시하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구조를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결정한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">3.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">형태로</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">작성한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level1 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">4.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정적인</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적용한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상당히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">페이지이지만</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">알다시피</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">항상</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">눈에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보이는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것보다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">뒤에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이뤄지게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">마련이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">절에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작업을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수행하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">코드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">살펴볼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.3.1 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가져오고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">표시하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정의하기</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">JGameStore </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">페이지에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">검색</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필드와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">검색</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">버튼을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구현할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검색</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필드는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">공백으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단어를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구분한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들어</span> <span lang="EN-US">‘Adventure Deus’ </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">입력했다면</span> <span lang="EN-US">‘Adventure’ </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">와</span> <span lang="EN-US">‘Deus’ </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">라는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">단어로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">분리될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각각의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단어를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">카테고리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">변호</span><span lang="EN-US"> (CategoryId), </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품명</span><span lang="EN-US">(name), </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설명</span><span lang="EN-US">(description) </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">찾을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">검사할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일단</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">검색</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">버튼을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클릭하면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나온</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품들을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">페이지당</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">네</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개씩</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.3.2 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구조</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결정하기</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">테이블</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구조를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정의할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알아보자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리는</span><span lang="EN-US"> categoryId, name, </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span><span lang="EN-US"> description</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">검색을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라서</span><span lang="EN-US"> Product </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">테이블이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이러한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요구사항을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">충족시킬</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정도가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되게끔만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">만들자</span><span lang="EN-US">. Product </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">테이블은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검색하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">출력할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정보를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포함하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.3.3 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">형태로</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작성하기</span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처음</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시작할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">검색</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">표시해줄</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가져오는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정적인</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">만든다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정보를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력하는데</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쿼리를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">SELECT<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">PRODUCTID,<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">NAME,<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">DESCRIPTION,<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">IMAGE,<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">CATEGORYID<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">FROM PRODUCT<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">WHERE<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">lower(name) like 'adventure%' OR<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">lower(categoryid) like 'adventure%' OR<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">lower(description) like 'adventure%' OR<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">lower(name) like 'Deus%' OR<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">lower(categoryid) like 'deus%' OR<o:p></o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US" style="font-size:8.0pt; font-family:Courier;mso-fareast-font-family:바탕체;mso-bidi-font-family:Courier; color:black;mso-font-kerning:0pt">lower(description) like 'deus%'</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">입력과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">베이스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">테이블을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">갖추었다</span><span lang="EN-US">. SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모형을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만들때가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">앞서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">언급한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정보를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지극히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">우리에게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제품</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">목록은</span><span lang="EN-US"> SELECT </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">통해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">받을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. Name, categoryId </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span><span lang="EN-US"> description </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제공받은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">단어를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비교하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">검색</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조건은</span><span lang="EN-US"> WHERE </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">절에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나온다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.3.4 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적인</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정적인</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적용하기</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모의</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴보면</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상세히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">분석하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어디에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결정할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. SELECT </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">절은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정적이기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">여기에선</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아무런</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">. WHERE </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">절은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">변경해줄</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="searchProductList" resultclass="product"> SELECT PRODUCTID, NAME, DESCRIPTION, IMAGE, CATEGORYID FROM PRODUCT lower(name) like lower(#keywordList[]#) OR lower(categoryid) like lower(#keywordList[]#) OR lower(description) like lower(#keywordList[]#) </select></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소들로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전달받은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">활용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">따라서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터들이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터들에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생각해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">받는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터는</span><span lang="EN-US"> String(java.lang.String) </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리스트이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">직접</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문에</span><span lang="EN-US"> <iterate> </iterate></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. <iterate> </iterate></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">문자열의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">리스트를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">반복적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">돌면서</span><span lang="EN-US"> categoryId, name, description </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">검색하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조건을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값을</span><span lang="EN-US"> OR</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정한</span><span lang="EN-US"> conjunction </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">추가해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">함을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">잊어서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">안</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. Conjunction </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">단어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검색</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">조건을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">함께</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">연결한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알아둬야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">점이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는데</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이름은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포함된</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수행하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제대로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설명해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">줄</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이름을</span><span lang="EN-US"> searchProductList </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">라고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정했다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이름을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">읽었을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">목적을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">즉시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명확하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파악할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있어야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMap.queryForPaginatedList(</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><span style="mso-spacerun:yes"> </span>“searchProductList”, parameterObject, PAGE_SIZE);</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">마지막</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요구</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사항으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">번에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">네</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드만을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">반환해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span><span lang="EN-US"> pageSize </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">받는</span><span lang="EN-US"> queryForPaginatedList() </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메서드를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">호출하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요구</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사항을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">처리할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이렇게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">반환되는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개수를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제어할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전체적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">둘러보면서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작성</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계획을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">세우고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개발하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">공부해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보았다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여러가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">선택사항이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">목적에만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기억하라</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">여러</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">목적을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">달성하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용해서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">안</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">목적은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용자가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택할지를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처리하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명심해야할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간단하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만들려고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나온</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이지</span><span lang="EN-US">, </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">복잡하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만들려고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나온</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아니라는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">점이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상세한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용법을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.4.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">고급</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기법</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.4.1 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정의하기</span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일반적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">말로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력하고자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정의해보자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">우리의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">장바구니</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">애플리케이션은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">검색</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조건에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">출력할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">목록을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력은</span><span lang="EN-US"> categories, products, </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span lang="EN-US">manufacturers </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">포함한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">선택</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조건에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기초하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결정될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">페이지당</span><span lang="EN-US"> 4</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개씩</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">표시되어야만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">페이지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">처리된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">목록을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생성하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">입력하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다양한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처리할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있어야만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-no-proof:yes"><v:shape id="그림_x0020_36" spid="_x0000_i1025" type="#_x0000_t75" style="width:393pt;height:226.5pt; visibility:visible;mso-wrap-style:square"> <v:imagedata src="file:///C:\Users\박성진\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png" title="제목 없음"> </v:imagedata></v:shape></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그렇다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">검색</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">페이지는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">식으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작동할까</span><span lang="EN-US">? </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아래에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">물음에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">답변의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일부를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">public class ProductSearchCriteria {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">private String[] categoryIds;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">private String productName;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">private String productDescription;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">private String itemName;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">private String itemDescription;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">// setters and getters</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">본래</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검색</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">페이지의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필드는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자바빈즈인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검색</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기준</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">클래스의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.4.2 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">형태로</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작성하기</span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">입력과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출력을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정의했으니</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쿼리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">툴에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">실행할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작성할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개발의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시작점이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되면서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구성하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기초가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">SELECT</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.PRODUCTID AS PRODUCTID,</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.NAME AS NAME,</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.DESCRIPTION AS DESCRIPTION,</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.IMAGE AS IMAGE,</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.CATEGORYID AS CATEGORYID</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">FROM Product p</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INNER JOIN Category c ON</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">c.categoryId=p.categoryId</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">INNER JOIN Item i ON</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">i.productId = p.productId</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">WHERE</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">c.categoryId IN ('ACTADV')</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">AND</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.name LIKE '007'</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">AND</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.description LIKE '007'</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">AND</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">i.name LIKE 'PS2'</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">AND</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">i.description LIKE 'PS2'</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">입력이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">무엇이고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">테이블이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요한지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">알고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있으므로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모의로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쿼리를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">만들어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예제에서</span><span lang="EN-US"> WHERE </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조건절이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">조합</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가능한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조건들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포함하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작성되었음을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">알</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">무엇을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만들어야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">알려면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사항을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">고려해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">말들어</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">중요하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">조합하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">부분을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.4.3 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적용하기</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모의로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만들었으니</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이제</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적용해보자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다듬에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있듯이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">조금</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡해진다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">레벨의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소로</span><span lang="EN-US"> <isequal></isequal></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용했음을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주의해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보라</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떠한</span><span lang="EN-US"> prepend, open </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이나</span><span lang="EN-US"> close </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요하지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문에</span><span lang="EN-US"> <dynamic></dynamic></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">부모</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단순히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">표시하거나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">표시하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않거나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span><span lang="EN-US"> <isequal> </isequal></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소는</span><span lang="EN-US"> LEFT JOIN</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포함할지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">여부를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결정한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="searchProductsWithProductSearch" span="" style="mso-spacerun:yes"> ------- (1) 시작 select 요소 parameterClass="productSearch" resultClass="product" > SELECT DISTINCT ------- (2) 최소한의 SQL 구문 p.PRODUCTID, p.NAME, p.DESCRIPTION, p.IMAGE, p.CATEGORYID FROM Product p ------- (3) item 검색조건에 조인이 필요한지 검사 INNER JOIN Item i ON i.productId=p.productId ------- (4) 간단한 시작 요소 -------(5) 카테고리 프로퍼티 평가 property="categoryIds" open="p.categoryId IN (" close=")" conjunction="," prepend="BOGUS"> #categoryIds[]# ------- productName 프로퍼티 평가 p.name LIKE #productName# -- productDescription 프로퍼티 평가 p.description LIKE #productDescription# -------- itemName 프로퍼티 평가 i.name LIKE #itemName# ------- itemDescription 프로퍼티 평가 i.description LIKE #itemDescription# </select></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시작</span><span lang="EN-US"> select </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소</span><span lang="EN-US"> (1)</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파라미터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">클래스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타입은</span><span lang="EN-US"> productSearch, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클래스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">타입은</span><span lang="EN-US"> product</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">별칭을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정의하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span><span lang="EN-US"> SQL </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">부분</span><span lang="EN-US"> (2)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생성할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단위의</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">들면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용자가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">반환하도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">검색하고자</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. <isequal> </isequal></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span><span lang="EN-US"> (3)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">조인이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요한지를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결정하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span><span lang="EN-US"> <dynamic> </dynamic></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부분</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">밖에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용되었다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">우리는</span> <span lang="EN-US">“WHERE”</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">라는</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시작</span><span lang="EN-US"> dynamic </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소</span><span lang="EN-US"> (4)</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용물이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">없다면</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">명시된</span> <span lang="EN-US">“WHERE” </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">무시될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기억을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상기시켜보자면</span><span lang="EN-US">, dynamic </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소안의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내용에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">처음으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">만들어내는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소의</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">무조건</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제거한다</span><span lang="EN-US">. <iterate> </iterate></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소</span><span lang="EN-US">(5)</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주의해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">봐야한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이는</span><span lang="EN-US"> <iterate> </iterate></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소</span><span lang="EN-US"> (4)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">짝을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이루어서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">작동하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">특정</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">카테고리에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">검색</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조건을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구성하는데</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요한</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">컴포넌트를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">만들어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">낸다</span><span lang="EN-US">. iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관습적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">문제</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span><span lang="EN-US">, <iterate></iterate></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">꼭</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요하다</span><span lang="EN-US">. Prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">첫번째</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자식</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소에서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내용이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성되더라도</span><span lang="EN-US"> prepend</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제거되었다고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간주하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">번에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나온</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">무시되게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">현상이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일어난다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해당</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소에</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없다</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하더라도</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">규칙에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span><span lang="EN-US"> prepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">항상</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명시해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주도록</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. <isnotempty> </isnotempty></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소는</span><span lang="EN-US"> productName, productDescription, itemName </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span><span lang="EN-US"> itemDescription </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티가</span> <span lang="EN-US">‘ ‘(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">빈값</span><span lang="EN-US">) </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span><span lang="EN-US"> NULL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">인지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여부를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결정하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">평가를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수행한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그렇다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">괴물</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">호출할까</span><span lang="EN-US">?</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">queryForPaginatedList (</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><span style="mso-spacerun:yes"> </span>“product.searchProductsWithProductSearch”,</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><span style="mso-spacerun:yes"> </span>productSearch, PAGE_SIZE);</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">앞의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">마지막</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요구사항은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">번에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">네</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드만을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">반환해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이었다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">페이지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">크기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">받는</span><span lang="EN-US"> queryForPaginatedList </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메서드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">호출한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">범위를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정하는</span><span lang="EN-US"> queryForPaginatedList </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방법에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대해서는</span><span lang="EN-US"> 8.3.4</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">절의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예제를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보라</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">복잡한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보며</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다소</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">복잡한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수행하는지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">공부하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">입력한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">검색</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기준에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제품</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">목록을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제공한다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하나의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">목적만을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수행하도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">조금</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">복잡해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보이긴</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">코드로만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작성하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">훨씬</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어렵다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">명백하다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구성할수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">준비가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되었으리라</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">믿는다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">iBATIS</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">처리하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">솔루션들과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비교하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방법을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이해하는것도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">중요하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수행하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">몇몇</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간단히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알아보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.5.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대안이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">되는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">접근법</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결코</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">새로운</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개념이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아니다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">조건에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성되는</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쿼리는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">항상</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">발생하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요구사항이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">과거에는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">효율적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수행하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로시저를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">호환성이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">없는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내부적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">접근</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">처리하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방식으로는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">견고한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로그래밍</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">언어로</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구성하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">드라이버를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">통해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쿼리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전달해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주었다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">성능을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">떨어뜨린다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모두</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">간단한</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">문자열을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구성하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">비대하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">점점</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">복잡해진다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이미</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">여러분이</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이번</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">절은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러분이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">잊고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있던</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상기시켜줄</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">처음이라면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">신선한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">비교가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당신의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">배경지식에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관계없이</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이번</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">절에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">당신의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">업무에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">몇</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">신선한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">통찰력을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제공해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러분이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">겪고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대부분을</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">줄여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">줄</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">점을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">알려주고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">싶다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자바코드</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로시저</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동일한</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">공유할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">코딩하기에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적당히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단하고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그다지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않은</span><span lang="EN-US"> select </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쿼리</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각각의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">접근</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">문제를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">해결하는지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여주고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">나서</span><span lang="EN-US">, </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법이</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다른지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간단하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요약해서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여줄</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">SELECT *</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">FROM Category</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">WHERE</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">categoryId IN ('ACTADV','SPORTS','STRATEGY') AND</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">name LIKE ('N%')</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.5.1 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">코드</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하기</span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자바로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">코드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작성하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">멋진</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하지만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자바의</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">혼합할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">명확성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">잃지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">코드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">세심하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다루어야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요구</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사항이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">점점</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">늘어남에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">코드의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">부분</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부분들이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어디</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">추적하기가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어려워진다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">조합하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해</span><span lang="EN-US"> JDBC</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전달하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다소</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">복잡한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예제를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">살펴보자</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음은</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구성하는데</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">검색</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기준을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">public class CategorySearchCriteria implements Serializable {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">private String firstLetter;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">private List categoryIds;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">// setters and getters</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다소</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡한</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문은</span><span lang="EN-US"> CategorySearchCriteris </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span><span lang="EN-US"> categoryIds </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티로부터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정확히</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개인지는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정해지지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">카테고리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아이디들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가져올</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로퍼티는</span><span lang="EN-US"> IN </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. firstLetter </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알파벳</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">문자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하나이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">카테고리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이름의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">첫</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">번째</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문자로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">검색을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수행하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">우리의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관심사는</span><span lang="EN-US"> JDBC</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상호작용과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">솔루션들간의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">비교에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그래서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관심사</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">외에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어느</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설명하지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자바코드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구성하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">public class CategorySearchDao {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">public List searchCategory(</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">CategorySearchCriteria categorySearchCriteria) {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">List retVal = new ArrayList();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">try {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Connection conn =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">ConnectionPool.getConnection("MyConnectionPool");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">PreparedStatement ps = null;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">ResultSet rs = null;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">List valueList = new ArrayList();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">StringBuffer sql = new StringBuffer("");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sql.append("SELECT * ");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sql.append("FROM Category ");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if(categorySearchCriteria.getCategoryIds() != null</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">&& categorySearchCriteria.getCategoryIds().size() > 0) {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Iterator categoryIdIt =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">categorySearchCriteria.getCategoryIds().iterator();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sql.append("WHERE ");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sql.append("categoryId IN (");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if(categoryIdIt.hasNext()) {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Object value = categoryIdIt.next();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">valueList.add(value);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sql.append("?");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">while(categoryIdIt.hasNext()) {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Object value = categoryIdIt.next();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">valueList.add(value);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sql.append(",?");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sql.append(") ");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if(categorySearchCriteria.getFirstLetter() != null</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">&&</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">!categorySearchCriteria.getFirstLetter().trim().equals(""))</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">{</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if(valueList.size() != 0) {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sql.append("AND ");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sql.append("name LIKE (?)");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">valueList.add(categorySearchCriteria.getFirstLetter()</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">+ "%");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">ps = conn.prepareStatement(sql.toString());</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Iterator valueListIt =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">valueList.iterator();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">int indexCount = 1;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">while(valueListIt.hasNext()) {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">ps.setObject(indexCount,valueListIt.next());</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">indexCount++;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">rs = ps.executeQuery();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">while(rs.next()) {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Category category = new Category();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">category.setCategoryId(rs.getInt("categoryId"));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">category.setTitle(rs.getString("title"));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">category.setDescription(rs.getString("description"));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">category.setParentCategoryId(</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">rs.getInt("parentCategoryId"));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">category.setSequence(rs.getInt("sequence"));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">retVal.add(category);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">} catch (SQLException ex) {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">logger.error(ex.getMessage(), ex.fillInStackTrace());</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">} finally {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if (rs != null)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">try { rs.close(); }</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">catch (SQLException ex)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">{logger.error(ex.getMessage(), ex.fillInStackTrace());}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if (ps != null)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">try { ps.close(); }</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">catch (SQLException ex)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">{logger.error(ex.getMessage(), ex.fillInStackTrace());}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if (conn != null)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">try { conn.close(); }</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">catch (SQLException ex)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">{logger.error(ex.getMessage(), ex.fillInStackTrace());}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">return retVal;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">…</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자바</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">코드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">커넥션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">획득</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파라미터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">준비</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">셋</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지정하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">등의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기본적이고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">반복적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작업들을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개발자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스스로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">번이고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계속해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처리해야만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">공통적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작업들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관리하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">함께</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서는</span><span lang="EN-US"> IN </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">약간의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">첨가하여</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">처리하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">처리하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터의</span><span lang="EN-US"> List</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저장하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">코드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작성하였지만</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실제로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">갖추고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아니다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아마도</span><span lang="EN-US"> PreparedStatement </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">단순히</span><span lang="EN-US"> setObject </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메서드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있음을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알아챘을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정확한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">타입을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">명시해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그렇게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">코드가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">불필요하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">너무</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">길어지게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결국에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">코드는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어릴</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">잡지에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">큰</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그림</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">안에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">꼭꼭</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">감춰둔</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">숨은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그림을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">찾는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">놀이를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">연상시킨다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">도전</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">과제는</span> <span lang="EN-US">‘</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">숨은</span><span lang="EN-US"> SQL’ </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">찾기이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제에서는</span><span lang="EN-US"> JDBC</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">직접</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">좋지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않음을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여주고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로시져를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다루는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.5.2 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로시저</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하기</span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로시저는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수많은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작업에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">진정한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구원자의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">역할을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있으며</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로시저의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">능력에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">감사해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로시저를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때에도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">코딩할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동일한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">문제를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">종종</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">겪게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오라클의</span><span lang="EN-US"> PL/SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구축을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다루는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로시저를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만드는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">create or replace package category_pkg</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">as</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">type ref_cursor is ref cursor;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">function get_category(</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">categoryid varchar default null,</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">name category.name%type default null)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">return ref_cursor;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">end;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">/</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">create or replace package body category_pkg</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">as</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">function get_category(</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">categoryid varchar default null,</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">name category.name%TYPE default null)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">return ref_cursor</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">is</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">return_cursor ref_cursor;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqltext varchar(4000);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">first char(1) default 'Y';</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">begin</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqltext :=</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">'select c.categoryid, c.title, c.description, ' ||</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">'c.sequence ' ||</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">' from category c ';</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if ( categoryid is not null ) then</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if ( first = 'Y' ) then</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqltext := sqltext ||</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">'where c.categoryid in (' ||</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">categoryid || ') ';</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">first := 'N';</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">end if;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">end if;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if ( name is not null ) then</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if ( first = 'Y' ) then</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqltext := sqltext || 'where ';</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">else</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqltext := sqltext || 'and ';</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">end if;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqltext := sqltext || 'c.name like ''' ||</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">name || '%''' ;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">first := 'N';</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">end if;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">open return_cursor for sqltext;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">return return_cursor;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">end get_category;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">end;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">/</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로시저의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유용한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">규칙을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명백하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위반하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주입을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">막고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">성능을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">향상시켜줄</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">바인딩을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">줄이기는커녕</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오히려</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">증대시켰다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의미이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">복잡성을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">줄이는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">삶에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">항상</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지켜야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">규범일까</span><span lang="EN-US">? </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">물론</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아니다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로시저에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우에는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">줄여야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">느끼게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로시저를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">중요한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이유는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보안과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">성능</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">둘</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">중</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어느</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우에는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적용되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자바나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로시저</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쪽에서</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파라미터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">서로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동등한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수준의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">성능과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">안정성을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관심사를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가독성이나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유지보수에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">둔다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">약간은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실망하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예제의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로시저는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예제보다</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가독성이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">높은데</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이는</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보안을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">강화하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않았기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유지보수성의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">복잡한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">문제가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로시저의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">유지보수성은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">배포할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span><span lang="EN-US"> DDL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스크립트를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">배포하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터베이스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관리자에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">달려있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예제의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우에는</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개발자의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">영역에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">애플리케이션의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">코드와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">함께</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">배포된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로시저는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내장된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">언어가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">복잡한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">업무에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">얼마나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">잘</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">부합하는가에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">효율이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">들쑥날쑥하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로시저를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">본</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동일한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">복잡성에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">직면하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보안성과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">성능이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">떨어지고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">배포하기도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어려워진다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알아둬야</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">또</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는데</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로시저를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">호출하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자바</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">코드는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">포함시키지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않았다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">평가를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내려보면</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자바를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">직접</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프로시저를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것만으로는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">선뜻</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해결책을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">선택하기가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어렵다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그래서</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나왔다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.5.3 iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비교하기</span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자바를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">직접</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하거나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로시저를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">처리를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴보고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">나서</span><span lang="EN-US">, </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">성능과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">안정성</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생산성을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">높여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">줄</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">무엇인가가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있으면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋겠다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생각을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">되었을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이전에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">본것과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동일한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구성에</span><span lang="EN-US"> iBATIS SQL Maps </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프레임워크를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하였다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getCategories" parameterclass="SearchClass" span=""> resultClass="CategorySearchCriteria"> SELECT * FROM Category open="(" close=")" conjunction=","> #categoryIds[]# name LIKE ( #categoryName# || '%') </select></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">바로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">호출하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">코드이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">queryForList (“getCategories”, searchObject);</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">약</span><span lang="EN-US"> 14</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">줄</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정도의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">코드를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자바나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로시저를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동일한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작업을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하는데</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">배의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">코드가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요하다</span><span lang="EN-US">. iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내부적으로</span><span lang="EN-US"> PreparedStatement</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문에</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주입을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">막아주어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보안성이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">높아지고</span><span lang="EN-US">, SQL </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">통해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">성능도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">향상된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span><span lang="EN-US"> XML </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파일에</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">넣고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">코드와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">곳에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">두기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문에</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쉬워지고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">배포할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">함께</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">배포할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자바코드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">직접</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이나</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">저장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로시저와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">비교해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">분석해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보면</span><span lang="EN-US">, iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">논리적으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">승자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">점에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이론의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">여지가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">없을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.6.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">미래</span> </h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">iBATIS</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이미</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">미래를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생각하면서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개선시켜</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나가고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이번장에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">배운</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">거의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">미래의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에서도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계속</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유효할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">함께</span><span lang="EN-US">, iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">식으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">발전시킬지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있어야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL XML </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소들의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">초창기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개념은</span><span lang="EN-US"> iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">버전</span><span lang="EN-US"> 1.x</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개발되었다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대부분</span><span lang="EN-US"> Struts(</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자세한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사항은</span><span lang="EN-US"> Ted Husted </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span><span lang="EN-US"> Struts in Action[Manning, 2002]</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개념을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">빌려와서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">커뮤니티에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표준화가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">진행됨에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">따라</span><span lang="EN-US">, iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표준에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가까운</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개념을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">빌려와서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이를</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">잘</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">융합시켜</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">탐색전을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">벌였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개선이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">영역이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">나타났는데</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간결하면서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더욱</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">강력한</span><span lang="EN-US"> XML </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소셋과</span><span lang="EN-US"> XML</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소들과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">함께</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간결한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표현식이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">바로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것이다</span><span lang="EN-US">. iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어느</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부분을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개선하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">잠시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알아보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.6.1 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간단해진</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조건</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">현재</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">강력한</span><span lang="EN-US"> 16</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span><span lang="EN-US"> XML </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동적</span><span lang="EN-US"> SQL</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구성하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자랑으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">삼고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">특별한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기능들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수행한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일반적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">목적의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조건</span><span lang="EN-US"> XML </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소들을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제공하려는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">노력의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일환으로</span><span lang="EN-US"> iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개발팀은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">현재</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">존재하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것들에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">간결한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만들려고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">새로운</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">목표는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">최종적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">옛날</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소들을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">완전히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대체하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">새로운</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소는</span><span lang="EN-US"> JSTL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모델로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">삼고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">현재</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">존재하는</span><span lang="EN-US"> 16</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단</span><span lang="EN-US"> 6</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">줄여준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">글을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쓰는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시점에는</span><span lang="EN-US"> <choose>, <when>, <otherwise>, <if>, <foreach>, <while> </while></foreach></if></otherwise></when></choose></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">새로운</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제안돼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상태이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대부분의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소들이</span><span lang="EN-US"> JSTL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이름의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">태그들과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동일한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">추가적으로</span><span lang="EN-US"> prepend, open, close </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span><span lang="EN-US"> removeFirstPrepend </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">포함한다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">점만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다르다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><span lang="EN-US">8.6.2 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">표현식</span><span lang="EN-US"> (Expression Language)</span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">새로운</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span> <span lang="EN-US">SQL XML </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더욱</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일반적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">변경되기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표현식이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요하다</span><span lang="EN-US">. iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">팀은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자바의</span> <span lang="EN-US">J2EE</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표현식</span><span lang="EN-US">(Expression Language, EL) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모델로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">표현식을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만들기로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결정하였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">번의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">평가에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조건을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">분석하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기능이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">잘</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지원된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">현재</span> <span lang="EN-US">iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소들은</span> <span lang="EN-US">“and” </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">혹은</span> <span lang="EN-US">“or” </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">논리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">연산을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지원하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">못한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일반화된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동적</span> <span lang="EN-US">SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소들과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">강력한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표현식을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">조합하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">복잡한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동적</span> <span lang="EN-US">SQL</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요구사항들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쉽게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처리할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p>Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-39702050449105459812011-05-25T00:53:00.000-07:002011-05-25T00:54:05.384-07:00iBATIS in Action (7/14)<div style="mso-element:para-border-div;border-top:solid windowtext 3.0pt; border-left:none;border-bottom:solid windowtext 3.0pt;border-right:none; padding:0cm 0cm 0cm 0cm"> <h1><a name="_Toc294105815"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span></a></h1> </div> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><a name="_Toc294105816"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션은</span> </a><span style="mso-bookmark:_Toc294105816"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">무엇인가</span><span lang="EN-US">?</span></span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">말하다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보통</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">묶음</span><span lang="EN-US">(group)</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">으로</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">성공하거나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실패해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단계들을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">포함하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작업의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단위이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단계가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실패하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단계들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">롤백해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일관성</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상태를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유지하도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc294105817"><span lang="EN-US">7.1.1 </span></a><span style="mso-bookmark: _Toc294105817"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단한</span> </span><span style="mso-bookmark:_Toc294105817"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">은행</span> </span><span style="mso-bookmark:_Toc294105817"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예제</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">왜</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">중요한지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보여주는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일반적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제로는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">은행의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자금</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이체가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">표에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것처럼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">앨리스와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">밥이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">은행</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계좌를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생각해보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-no-proof:yes"><v:shapetype id="_x0000_t75" coordsize="21600,21600" spt="75" preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"> <v:f eqn="sum @0 1 0"> <v:f eqn="sum 0 0 @1"> <v:f eqn="prod @2 1 2"> <v:f eqn="prod @3 21600 pixelWidth"> <v:f eqn="prod @3 21600 pixelHeight"> <v:f eqn="sum @0 0 1"> <v:f eqn="prod @6 1 2"> <v:f eqn="prod @7 21600 pixelWidth"> <v:f eqn="sum @8 21600 0"> <v:f eqn="prod @7 21600 pixelHeight"> <v:f eqn="sum @10 21600 0"> </v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:formulas> <v:path extrusionok="f" gradientshapeok="t" connecttype="rect"> <o:lock ext="edit" aspectratio="t"> </o:lock></v:path></v:stroke></v:shapetype><v:shape id="_x0000_i1030" type="#_x0000_t75" style="width:425.25pt; height:56.25pt;visibility:visible;mso-wrap-style:square"> <v:imagedata src="file:///C:\Users\박성진\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" title="제목 없음"> </v:imagedata></v:shape></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">앨리스가</span><span lang="EN-US"> $100000<span style="mso-spacerun:yes"> </span></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">밥에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보낸다고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">해보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-no-proof:yes"><v:shape id="그림_x0020_21" spid="_x0000_i1029" type="#_x0000_t75" style="width:424.5pt;height:120.75pt; visibility:visible;mso-wrap-style:square"> <v:imagedata src="file:///C:\Users\박성진\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png" title="제목 없음"> </v:imagedata></v:shape></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">앨리스의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계좌로부터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">출금하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">밥의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계좌로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">입금하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">항상</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하나의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이뤄져야만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그렇지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">입금이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실패하면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">앨리스의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">계좌</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">잔액은</span><span lang="EN-US"> $400000 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되지만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">밥은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">여전히</span><span lang="EN-US"> $1000000</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">갖고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. $100000 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">곳으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사라지게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-no-proof:yes"><v:shape id="그림_x0020_22" spid="_x0000_i1028" type="#_x0000_t75" style="width:422.25pt;height:116.25pt; visibility:visible;mso-wrap-style:square"> <v:imagedata src="file:///C:\Users\박성진\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png" title="제목 없음"> </v:imagedata></v:shape></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">입금이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실패하면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출금</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이전의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상태로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">돌려주는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보장해준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">롤백된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">뒤에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시작되기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이전과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동일한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상태로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">돌아가게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-no-proof:yes"><v:shape id="그림_x0020_23" spid="_x0000_i1027" type="#_x0000_t75" style="width:425.25pt;height:101.25pt; visibility:visible;mso-wrap-style:square"> <v:imagedata src="file:///C:\Users\박성진\AppData\Local\Temp\msohtmlclip1\01\clip_image004.png" title="제목 없음"> </v:imagedata></v:shape></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상당히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단순한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제였다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하지만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">실생활에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">은행</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시스템의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자금</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이체는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">훨씬</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">복잡하다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">까닭에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">종류의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">존재하며</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">훨씬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">넓은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">범위를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처리할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">iBATIS</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지원하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">네</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo3"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자동</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span lang="EN-US">– </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단순한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명시적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구분된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않는다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo3"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로컬</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span lang="EN-US">– </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">범위가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좁은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포함하지만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단일</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수행된다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo3"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">글로벌</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span lang="EN-US">– </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">복잡하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">범위가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">넓은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">잠재적으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아닌</span><span lang="EN-US"> JMS(Java Message Service)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">큐나</span><span lang="EN-US"> JCA(J2EE Connector Architecture) </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">커넥션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가능한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리소스상에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행된다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo3"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용자</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션</span> <span lang="EN-US">– iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">원하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">커넥션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제공한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc294105818"><span lang="EN-US">7.1.2 </span></a><span style="mso-bookmark: _Toc294105818"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션의</span> </span><span style="mso-bookmark:_Toc294105818"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">특성</span> </span><span style="mso-bookmark:_Toc294105818"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이해하기</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">특징은</span><span lang="EN-US"> ACID </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">라고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알려져</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.<span style="mso-spacerun:yes"> </span>ACID</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span><span lang="EN-US"> Atomity(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">원자성</span><span lang="EN-US">), Consistency(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일관성</span><span lang="EN-US">), Isolation(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">격리성</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">고립성</span><span lang="EN-US">), Durability(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">영속성</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내구성</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지속성</span><span lang="EN-US">)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">약어이다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:58.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level2 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">-<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">원자성</span><span lang="EN-US">(Atomicity)<br /></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작업</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단계가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">묶음으로써</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">성공하거나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실패하리라고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보장하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">특징을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">원자성이라고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부른다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이러한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">특징이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없다면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하나의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">단계만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실패해도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">부정확한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상태로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">남을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가능성이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생기게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:58.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level2 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">-<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일관성</span><span lang="EN-US"><br /></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스키마는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">무결성과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일관성을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보장해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제약조건들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정의한다</span><span lang="EN-US">. ACID </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기능</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">중에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일관성은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시작과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">끝에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일관성있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상태로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">남아</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요구한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일관성있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상태란</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">무결성</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제약조건</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">외래키</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단일성</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">등을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">포함한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제약조건을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">충족시키는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정의된다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:58.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level2 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">-<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">격리성</span> <span lang="EN-US"><br /></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터베이스는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">종종</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">공유하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">중앙</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">집중적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자원의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">역할을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">얼마나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용자가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상관없이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">명</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이상의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용자가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각각</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용자들간의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">충돌로부터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유지하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">중요하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. ACID </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기능은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">격리성이라고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">부른다</span><span lang="EN-US">.<br /></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">격리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단계는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같다</span><span lang="EN-US">.<br />* READ UNCOMMITTED – </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">최하위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">격리</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">단계이며</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전혀</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">격리성이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">완전히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">종료되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭년의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과라도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그대로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">테이블에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">읽어들인다</span><span lang="EN-US">.<br />* READ<span style="mso-spacerun:yes"> </span>COMMITTED – </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">격리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단계는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">커밋되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">리턴되는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">막는다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그렇지만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수행</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">중에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내부에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조회하였다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">완료되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않았다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하더라도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수정하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">무엇도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">막을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시작</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">부분과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">끝</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">부분에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동일한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">행에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각각</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">번씩</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쿼리가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동일한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">리턴하리라고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보장하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않음을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의미한다</span><span lang="EN-US">.<br />* REPEATABLE READ – </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">오직</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">커밋된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터만을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">읽고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">추가적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">읽기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">락을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쿼리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수행중인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">걸어</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">둠으로써</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">종료될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때까지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용자가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해당</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">행을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수정하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">못하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보호</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단계는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쿼리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하느냐에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의존한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쿼리가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">영역을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">나타내는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">절을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">포함하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">영역</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">락을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">확보하지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">못할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이고</span><span lang="EN-US">, </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해당</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">변경되면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또다시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동일한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">범위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퀴리가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리턴받게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.<br />*SERIALIZABLE – </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가능한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">높은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">격리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단계이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">본질적으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">순서대로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하나를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다음에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">마치</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떠한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">충돌도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것처럼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">명백히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용자가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시스템에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">현저한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">성능</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저하를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유발한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">왜냐하면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작업이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">완료되기까지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대기해야만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:58.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level2 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">-<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">영속성</span><span lang="EN-US"><br /></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">영구적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지속시킬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">없는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">차를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">운전하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">못하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">막아둔</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다리와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같다</span><span lang="EN-US">. ACID </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기능</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">중에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">영속성은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">성공적으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수행되었다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보고를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">받으면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">안전할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요구한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">종료된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">후에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시스템에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오류가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">발생해도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">안전해야만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:58.0pt;mso-para-margin-left:0gd"><span lang="EN-US"><o:p> </o:p></span></p> <h2><a name="_Toc294105819"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.2.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자동</span> </a><span style="mso-bookmark:_Toc294105819"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span></span></h2> <p class="MsoNormal"><span lang="EN-US">iBATIS</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자동</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">커밋은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지원하지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">않지만</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자동</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지원한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span><span lang="EN-US"> update </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문이나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쿼리를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메서드</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">호출로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수행하면서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구분할지에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대해서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">걱정할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">해준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해당</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여전히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">내부에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">명시적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시작하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">커밋하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">종료할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" align="left" style="text-align:left;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자동</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">내부에서</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">특별히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아무것도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그냥</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실행하기만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방법은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다음</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">절에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설명할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로컬</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동일하다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보자</span><span lang="EN-US">. queryForObject() </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">와</span><span lang="EN-US"> update() </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메서드</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">호출을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포함한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각각의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">서로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션이라는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주목하라</span><span lang="EN-US">.</span><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt"> <o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">public void runStatementsUsingAutomaticTransactions()<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">{<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">SqlMapClient sqlMapClient =<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">SqlMapClientConfig.getSqlMapClient();<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">Person p = (Person)<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">sqlMapClient.queryForObject("getPerson",<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">new Integer(9));<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">p.setLastName("Smith");<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">sqlMapClient.update("updatePerson", p);<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">}<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><a name="_Toc294105820"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.3.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로컬</span> </a><span style="mso-bookmark:_Toc294105820"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로컬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가장</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보편적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">타입이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">논한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자동</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조차도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">로컬</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">형태이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로컬</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단일</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">안에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포함된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이며</span><span lang="EN-US">, </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관계형</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터베이스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지원하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">리소스를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용한다</span><span lang="EN-US">.(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">즉</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대에터베이스에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관리한다</span><span lang="EN-US">.)</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로컬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션은</span><span lang="EN-US"> iBATIS SQL Maps XML </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파일에서</span><span lang="EN-US"> JDBC </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리자로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로컬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관리자</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">형태인지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><transactionmanager b="">type="<b>JDBC</b>"></transactionmanager></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><datasource type="SIMPLE"></datasource></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><property></property></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><property></property></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><property></property></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">Type=”JDBC” </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성으로</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">표준</span><span lang="EN-US"> JDBC </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">커넥션</span><span lang="EN-US"> API</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리하라고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정한다</span><span lang="EN-US">. SqlMapClient API </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구분짓는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정말</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쉽다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구분짓는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전형적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">패턴을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">public void runStatementsUsingLocalTransactions() {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">SqlMapClient sqlMapClient =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">SqlMapClientConfig.getSqlMapClient();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">try {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.startTransaction();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Person p =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(Person)sqlMapClient.queryForObject</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">("getPerson", new Integer(9));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.setLastName("Smith");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.update("updatePerson", p);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Department d =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(Department)sqlMapClient.queryForObject</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">("getDept", new Integer(3));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.setDepartment(d);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.update("updatePersonDept", p);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.commitTransaction();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">} finally {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.endTransaction();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두</span> <span lang="EN-US">update </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동일한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">범위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">내에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">실행될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">따라서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">둘</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">중</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하나가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실패하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">둘</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실패하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구분짓는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메서드들을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">감싸고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span><span lang="EN-US"> try/finally </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">블록을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주의해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">봐야만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이러한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">패턴의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">코딩은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오류가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">발생하더라도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적절하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">종료될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보장해준다</span><span lang="EN-US">. Try/finally </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">블록을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span><span lang="EN-US"> try/catch </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">블록을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것보다</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">간단하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">효율적이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">왜냐하면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개발자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">직접</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예외를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">잡을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어차피</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">잡아봤자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예외를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지고는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">처리할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">없을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><a name="_Toc294105821"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.4.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">글로벌</span> </a><span style="mso-bookmark:_Toc294105821"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">글로벌</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로컬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션보다</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">훨씬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">넓은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">범위를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정의한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">범위에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메시지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">큐</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션조차도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">포함될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그림은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이러한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시스템을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보여주고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">글로벌</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용되는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방법을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설명한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-no-proof:yes"><v:shape id="그림_x0020_20" spid="_x0000_i1026" type="#_x0000_t75" style="width:255.75pt;height:215.25pt; visibility:visible;mso-wrap-style:square"> <v:imagedata src="file:///C:\Users\박성진\AppData\Local\Temp\msohtmlclip1\01\clip_image005.png" title="제목 없음"> </v:imagedata></v:shape></span></p> <p class="MsoListParagraph"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그림</span> <span lang="EN-US">7‑2. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">글로벌</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">범위의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc294105822"><span lang="EN-US">7.4.1 </span></a><span style="mso-bookmark: _Toc294105822"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">능동</span><span lang="EN-US">(active) </span></span><span style="mso-bookmark:_Toc294105822"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span> </span><span style="mso-bookmark:_Toc294105822"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수동</span><span lang="EN-US">(passive) </span></span><span style="mso-bookmark:_Toc294105822"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션</span> </span><span style="mso-bookmark:_Toc294105822"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하기</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">iBATIS</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">즉</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">능동적</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">혹은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수동적</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">중</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">글로벌</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">참여할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">능동적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">참여하도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정하였다면</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">글로벌</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">컨텍스트를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">찾아서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적절하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관리하려는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시도를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">iBATIS</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">글로벌</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수동적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">참여하라고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정하면</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시작</span><span lang="EN-US">, </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">커밋</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">종료하라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">명령을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">무시해버리게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오류가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">발생하면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예외를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">던지고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예외로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">롤백될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이라고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가정하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작동한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">능동적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">참여와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수동적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">참여</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방식으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각각</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><transactionmanager type="JTA"><span style="mso-spacerun:yes"> </span>---- </transactionmanager></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">능동적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">참여</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><property name="UserTransaction" span=""></property></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">value="java:/ctx/con/someUserTransaction"/></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><datasource type="JNDI"></datasource></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><property name="DataSource" span=""></property></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">value="java:comp/env/jdbc/someDataSource"/></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><transactionmanager type="EXTERNAL"><span style="mso-spacerun:yes"> </span>---- </transactionmanager></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수동적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">참여</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><datasource type="JNDI"></datasource></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><property name="DataSource" span=""></property></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">value="java:comp/env/jdbc/someDataSource"/></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우에</span><span lang="EN-US"> JNDI </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컨텍스트로부터</span><span lang="EN-US"> DataSource</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가져오는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주목해서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보라</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개발자에게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">커넥션은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">글로벌</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관리자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">범위에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관리해야만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span><span lang="EN-US"> DataSource</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가져오는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방법이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실제</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요구사항이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. JTA</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">능동적으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">참여할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있도록</span><span lang="EN-US"> JNDI </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">컨텍스트가</span><span lang="EN-US"> UserTransaction </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인스턴스도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">. EXTERNAL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리자의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우에는</span><span lang="EN-US"> UserTransaction </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인스턴스가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">불필요하다</span><span lang="EN-US">. iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">외부</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시스템이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참여를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관리한다고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간주하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc294105823"><span lang="EN-US">7.4.2 </span></a><span style="mso-bookmark: _Toc294105823"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> </span><span style="mso-bookmark:_Toc294105823"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시작하고</span> </span><span style="mso-bookmark:_Toc294105823"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">커밋하고</span> </span><span style="mso-bookmark:_Toc294105823"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">종료하기</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">글로벌로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정의하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이유가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">첫째로</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">통해</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">커넥션과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">라른</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">리소르를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관리하게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">함으로써</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">불필요하게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터소스에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">커넥션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요청하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">커넥션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터소스로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">돌려주는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">둘째로</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떠한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">코드</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">변경도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로컬</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">글로벌</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사이를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">왔다갔다</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">해준다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로컬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제에서와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">완전히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동일한데</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로컬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션이든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">글로벌</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션이든</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에게는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떠한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">차이도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없음을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여주기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">public void runStatementsUsingGlobalTransactions() {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">SqlMapClient sqlMapClient =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">SqlMapClientConfig.getSqlMapClient();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">try {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.startTransaction();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Person p =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(Person)sqlMapClient.queryForObject</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">("getPerson", new Integer(9));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.setLastName("Smith");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.update("updatePerson", p);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Department d =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(Department)sqlMapClient.queryForObject</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">("getDept", new Integer(3));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.setDepartment(d);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.update("updatePersonDept", p);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.commitTransaction();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">} finally {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.endTransaction();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc294105824"><span lang="EN-US">7.4.3 </span></a><span style="mso-bookmark: _Toc294105824"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">글로벌</span> </span><span style="mso-bookmark:_Toc294105824"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> </span><span style="mso-bookmark:_Toc294105824"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요한가</span><span lang="EN-US">?</span></span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">즉시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대답을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하라면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이렇게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">말할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. “</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아마도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">없을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">”. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일반적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">글로벌</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위해서는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">크나큰</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">오버헤드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">감수해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대개</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">글로벌</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">분산</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">환경하에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있으며</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로컬</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">비해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">네트워크</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트래픽과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관리를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아무런</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비용도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">글로벌</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">성능</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">저하와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">함께</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단순하게도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">글로벌</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정하기가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어렵다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인프라스트럭처와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">소프트웨어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">리소스가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요하다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그러므로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컨테이너가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관리하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때조차도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">글로벌</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">꼭</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때에만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">함을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">명심하라</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대부분의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어플리케이션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">서버는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">분산</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">활성화하거나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비활성화하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">옵션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><a name="_Toc294105825"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.5.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자</span> </a><span style="mso-bookmark:_Toc294105825"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정의</span> </span><span style="mso-bookmark:_Toc294105825"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지금까지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">본</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법으로도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개발자의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수요를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">충족시키주지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">못했다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개발자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">스스로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관리할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">옵션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">첫</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">번째는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리자를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">직접</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">작성하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것으로</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인터페이스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">작성한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">코드를</span><span lang="EN-US"> SQL Map </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파일에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">끼워</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">넣으면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방법은</span><span lang="EN-US"> 12</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">장에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알아볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">번째</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">접근</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방법은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단순히</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span><span lang="EN-US"> JDBC Connection </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인스턴스를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">받아서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">통해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개발자가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">커넥션과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">완전한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제어권을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">행사하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. SqlMapClient</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span><span lang="EN-US"> Connection </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">전달하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방법은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">첫째는</span><span lang="EN-US"> setUserConnection (Connection) </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메서드로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">public void runStatementsUsingSetUserConnection() {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">SqlMapClient sqlMapClient =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">SqlMapClientConfig.getSqlMapClient();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Connection conn = null;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">try {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">conn = dataSource.getConnection();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">conn.setAutoCommit(false);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.setUserConnection(conn);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Person p =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(Person)sqlMapClient.queryForObject</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">("getPerson", new Integer(9));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.setLastName("Smith");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.update("updatePerson", p);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Department d =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(Department)sqlMapClient.queryForObject</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">("getDept", new Integer(3));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.setDepartment(d);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.update("updatePersonDept", p);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">conn.commit();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">} finally {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sqlMapClient.setUserConnection(null);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if (conn != null) conn.close();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">번째</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법으로</span><span lang="EN-US"> openSession (Connection)</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방법으로</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">리소스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">잘</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다음은</span><span lang="EN-US"> openSession()</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이용하는지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">public void runStatementsUsingSetUserConnection() {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">SqlMapClient sqlMapClient =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">SqlMapClientConfig.getSqlMapClient();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Connection conn = null;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">SqlMapSession session = null;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">try {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">conn = dataSource.getConnection();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">conn.setAutoCommit(false);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">session = sqlMapClient.openSession(conn);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Person p =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(Person)<b>session</b>.queryForObject("getPerson",</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">new Integer(9));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.setLastName("Smith");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><b><span lang="EN-US">session</span></b><span lang="EN-US">.update("updatePerson", p);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Department d =</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">(Department)<b>session</b>.queryForObject</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">("getDept", new Integer(3));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">p.setDepartment(d);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><b><span lang="EN-US">session</span></b><span lang="EN-US">.update("updatePersonDept", p);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">conn.commit();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">} finally {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if (session != null) session.close();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if (conn != null) conn.close();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">코드가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">멋지다고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보긴</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어렵다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개발자가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">스스로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관리자를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">직접</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작성하도록</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">좋은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이유가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">되기도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">게다가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여전히</span><span lang="EN-US"> EXTERNAL </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리자를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정의해야</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하며</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">최소한</span><span lang="EN-US"> SIMPLE DataSource </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제공해줘야만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그렇지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않으면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적재</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지연</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">특정한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기능들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제대로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작동하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방법은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">되도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">피하라</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">항상</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개발자</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">스스로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관리자를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작성해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하는지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여부를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">고려해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보라</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><a name="_Toc294105826"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.6.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> </a><span style="mso-bookmark:_Toc294105826"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구분하기</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경험에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나온</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">법칙을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제시한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">“</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">범위는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가능한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">넓게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만들어야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하지만</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단일</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">액션의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">범위를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">벗어나서까지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">확장되어서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">안</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.”</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">웹</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용자가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">폼을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제출하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">버튼을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클릭했을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">영역이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">즉시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시작된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용자의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">브라우저에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">응답</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">페이지가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">출력되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">순간에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">완료되어야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">리치</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">클라이언트</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">애플리케이션에서도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">규칙은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일반적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동일하게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적용된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용자</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작업에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">포함된것과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관련된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작업을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">포함한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일반적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">번의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">버튼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">클릭과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일치한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">범위를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결정하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생각해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방식으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.: </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용자가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">열어</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">두거나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">완료시키지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않고서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컴퓨터에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">절대로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">떠날</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">없게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하라</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그러면</span><span lang="EN-US"> , </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">정확히</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어디서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시작하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">종료하라는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것인가</span><span lang="EN-US">? </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이상적으로는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어디서도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시작하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">말해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컨테이너가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">스스로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관리하도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">놔두는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컨테이너에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구분지어지도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">선언적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">애플리케이션</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">서버에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">무상태</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">세션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">빈즈</span><span lang="EN-US">(stateless session beans)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하거나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">혹은</span><span lang="EN-US"> Spring </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프레임워크</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경량</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컨테이러를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용한다면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">선언적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컨테이너가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적절하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시작되고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">커밋되고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">종료될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보장해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">줄것이다</span><span lang="EN-US">. iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">통합적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로그래밍</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모델을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">제공해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주는데</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컨테이너가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">스스로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구분짓는다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하여도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개발자가</span><span lang="EN-US"> startTransaction(), commitTransaction(), endTransaction() </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">자신의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">코드에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용해야만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">함을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의미한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">통해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개발자는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자신의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼시스턴스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계층</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">코드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컨테이너</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">외부로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">포팅해도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상대적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">깔끔한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구성을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유지할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있음을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">의미한다</span><span lang="EN-US">. EXTERNAL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관리자로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정하면</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컨테이너가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">제어하도록</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">놔둘</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여러분이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컨테이너가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관리하도록</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">허가할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">직급에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않다면</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">여러분</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">스스로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계층화된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아키텍처에서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시작하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">종료하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">존재한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러분이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">무엇을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">선택하든지에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관계없이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일관성이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있어야만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">중요하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다음의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계층화된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아키텍처에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그림을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프레젠테이션</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계층</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비즈니스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">로직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계층</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼시스턴스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구분</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US" style="mso-no-proof:yes"><v:shape id="그림_x0020_33" spid="_x0000_i1025" type="#_x0000_t75" style="width:276.75pt;height:320.25pt; visibility:visible;mso-wrap-style:square"> <v:imagedata src="file:///C:\Users\박성진\AppData\Local\Temp\msohtmlclip1\01\clip_image006.png" title="제목 없음"> </v:imagedata></v:shape></span></p> <p class="MsoListParagraph"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그림</span> <span lang="EN-US">7‑3 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계층화된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아키텍처</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">세</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계층</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">각각에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구분짓는지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자세히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">알아보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc294105827"><span lang="EN-US">7.6.1</span></a><span style="mso-bookmark: _Toc294105827"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프레젠테이션</span> </span><span style="mso-bookmark:_Toc294105827"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계층에서</span> </span><span style="mso-bookmark:_Toc294105827"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> </span><span style="mso-bookmark:_Toc294105827"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구분</span> </span><span style="mso-bookmark:_Toc294105827"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">짓기</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프레젠테이션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구분짓는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">크고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">넓은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">범위로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">장시간</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지속되는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만들어</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">버린다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대단히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">안전하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">최고의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">무결성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">제공하며</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구현하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쉽다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">서블릿</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필터나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">플러그인을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프레젠테이션</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계층에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시작하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">커밋하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">종료시킬</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방식의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단점은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">장시간</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유지되는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">성능저하를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일으킬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">점이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일반적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프레젠테이션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼시스턴스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">멀리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">떨어져</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정확히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">왜</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프레젠테이션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">시작해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하는지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알기가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어렵다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과적으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">많은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션들이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">불필요하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">오랜</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">시간</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지속하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">종료하게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단점으로</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">웹</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사이트나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">웹</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">서비스</span><span lang="EN-US"> API </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">리치</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">클라이언트</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">처럼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다중</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용자</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인터페이스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">각</span><span lang="EN-US"> UI</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">마다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">범위에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구현을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">또다시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">인해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">몇</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일관성을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">깨뜨리는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생기게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프레젠테이션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼시스턴스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">너무</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">멀리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">떨어져</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">논리적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구분</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">짓는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위치로는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부적합하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그냥</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼시스턴스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">계층으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떨까</span><span lang="EN-US">?</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc294105828"><span lang="EN-US">7.6.2 </span></a><span style="mso-bookmark: _Toc294105828"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼시스턴스</span> </span><span style="mso-bookmark:_Toc294105828"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계층에서</span> </span><span style="mso-bookmark:_Toc294105828"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> </span><span style="mso-bookmark:_Toc294105828"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구분</span> </span><span style="mso-bookmark:_Toc294105828"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">짓기</span></span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대부분의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사람들이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자연스럽게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼시스턴스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계층에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구분</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지어야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생각한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의외로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이유는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">퍼시스턴스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계층은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어느</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">정도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좁은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">범위의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메서드들로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이루어져</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결합도가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">낮으며</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">베이스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작업에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">높은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">응집도를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지니고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">실제로</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">퍼시스턴스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계층</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메서드만을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">흔치</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우에는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사실상</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">별로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">몇몇</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유용한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비즈니스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수행하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">베이스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작업을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하나의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">묶음으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행해야</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일반적이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">면에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼시스턴스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">너무</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">세밀하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나뉘어져</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼시스턴스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작업들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">함께</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">묶어주는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">추가적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만드는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가능하며</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">통해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구분짓는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">괜찮을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이러한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작업은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">불필요한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해야하고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">투명성을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">완벽하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">유지하려면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설계가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">너무</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡해지게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc294105829"><span lang="EN-US">7.6.3 </span></a><span style="mso-bookmark: _Toc294105829"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비즈니스</span> </span><span style="mso-bookmark:_Toc294105829"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로직</span> </span><span style="mso-bookmark:_Toc294105829"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계층에서</span> </span><span style="mso-bookmark:_Toc294105829"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> </span><span style="mso-bookmark:_Toc294105829"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구분</span> </span><span style="mso-bookmark:_Toc294105829"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">짓기</span></span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프레젠테이션</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">퍼시스턴스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">빼고나면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">남은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아마도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그럼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맞겠거니</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예상했늘</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비즈니스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">로직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계층이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">상황에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">따라</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다르다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요구사항에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">따라서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">세</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">중</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어느</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이라도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">옳은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">선택이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경험에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비추어볼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일반적으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비즈니스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로직</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구분짓는데</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">선택임이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사실이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이는</span><span lang="EN-US"> EJB </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개발자나</span><span lang="EN-US"> Spring </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프레임워크</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">등의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개발자들에게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보편적이고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">익숙한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방식이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">무상태</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">세션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">빈즈는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비즈니스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로직의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">컴포넌트로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보통</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">빈즈를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">설정할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요구사항도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선언한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유사하게</span><span lang="EN-US"> Spring</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">거의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메서드에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">선언할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는데</span><span lang="EN-US"> DAO </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대신</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보통은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비즈니스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">로직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컴포넌트에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선언한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단순하게도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비즈니스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작업이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이상의</span><span lang="EN-US"> DAO</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그렇다</span><span lang="EN-US">.</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기술적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">글에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">따르면</span><span lang="EN-US"> , </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비즈니스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">계층에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구분</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지으면</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일관성</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모델을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유지하면서도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">인터페이스를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그럼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여러분은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생각이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">드는가</span><span lang="EN-US">? </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">비즈니스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로직에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구분</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">짓는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자연스럽게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">느껴지는가</span><span lang="EN-US">? </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">흠</span><span lang="EN-US">… </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그래야만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아키텍트</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">관리자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개발자들은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보통</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기술적인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개념으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이해한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결국</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션은</span> <span lang="EN-US">“</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수행하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것</span><span lang="EN-US">” </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이라는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그것보다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">단계의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이라고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보아야만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">범위는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비즈니스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작업이나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비즈니스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">포함한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그저</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">베이스의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">기능쯤으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간주해서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">안</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">되는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더욱이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">베이스가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">유일하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지원하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">인프라스트럭처도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아니다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">우리의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">비즈니스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작업은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">메인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프레임</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">접속기를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">통해서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수행될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메시지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">큐로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메시지를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">발송할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있으며</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">혹은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사람의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개입</span><span lang="EN-US">(</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">워크플로우를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생각해보라</span><span lang="EN-US">.) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일부로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포함할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수도</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">분명히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지원한다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">논리적으로나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기술적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모두에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비즈니스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계층은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">트랜잭션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구분</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">짓는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">완벽한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">장소이다</span><span lang="EN-US">.</span></p>Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0tag:blogger.com,1999:blog-3152900658989955066.post-58352544937494189172011-05-24T22:06:00.000-07:002011-05-24T22:07:20.685-07:00iBATIS in Action (6/14)<div style="mso-element:para-border-div;border-top:solid windowtext 3.0pt; border-left:none;border-bottom:solid windowtext 3.0pt;border-right:none; padding:0cm 0cm 0cm 0cm"> <h1><a name="_Toc293942531"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">고급</span> </a><span style="mso-bookmark:_Toc293942531"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">쿼리</span> </span><span style="mso-bookmark:_Toc293942531"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기법</span></span></h1> </div> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><a name="_Toc293942532"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.1.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">iBATIS</span></a><span style="mso-bookmark:_Toc293942532"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에서</span><span lang="EN-US"> XML </span></span><span style="mso-bookmark:_Toc293942532"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하기</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">iBATIS </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프레임워크에서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쿼리에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">전달할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">혹은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쿼리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">반환받을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span><span lang="EN-US"> XML</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">꼭</span><span lang="EN-US"> XML</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">필요도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">없으면서</span><span lang="EN-US"> XML</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그다지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">권장할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">못된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대신</span><span lang="EN-US"> POJO</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대부분의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">훨씬</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">효율적이기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때문이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc293942533"><span lang="EN-US">6.1.1 XML </span></a><span style="mso-bookmark:_Toc293942533"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터</span></span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">완전히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동일한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구조를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">갖추고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">문자열이나</span><span lang="EN-US"> DOM </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">통해서</span><span lang="EN-US"> XML</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">넘겨줄</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구조의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">형태는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">파라미터로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전달할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이름을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의미하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">감싸져</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">요소를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다시</span><span lang="EN-US"> parameter </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">요소로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">감싸고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보자</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><parameter><accountid>3</accountid></parameter></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값이</span><span lang="EN-US"> 3</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이름이</span> <span lang="EN-US">“accountId”</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">전달받게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여기</span><span lang="EN-US"> XML </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문자열을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">넘겨주는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt"><select id="getByXmlId" resultclass="Account" parameterclass="xml"> select accountId, username, password, firstName, lastName, address1, address2, city, state, postalCode, country from Account where accountId = #accountId# </select><o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">String parameter = "<parameter><accountid>3</accountid></parameter>";<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">Account account = (Account) sqlMapClient.queryForObject(<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">"Account.getByXmlId",<o:p></o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US" style="font-size:8.0pt; font-family:Courier;mso-fareast-font-family:바탕체;mso-bidi-font-family:Courier; mso-font-kerning:0pt">parameter);</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">비슷한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방식으로</span><span lang="EN-US"> DOM </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">동일한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">낼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있게</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">넘겨줄</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getByDomId" resultclass="Account" parameterclass="dom"> select accountId, username, password, firstName, lastName, address1, address2, city, state, postalCode, country from Account where accountId = #accountId# </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Document parameterDocument = DocumentBuilderFactory.newInstance()</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">.newDocumentBuilder().newDocument();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Element paramElement = parameterDocument</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">.createElement("parameterDocument");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Element accountIdElement = parameterDocument</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">.createElement("accountId");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">accountIdElement.setTextContent("3");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">paramElement.appendChild(accountIdElement);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">parameterDocument.appendChild(paramElement);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Account account = (Account) sqlMapClient.queryForObject(</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">"Account.getByXmlId", parameterDocument);</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc293942534"><span lang="EN-US">6.1.2 XML</span></a><span style="mso-bookmark:_Toc293942534"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로</span> </span><span style="mso-bookmark:_Toc293942534"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> </span><span style="mso-bookmark:_Toc293942534"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성하기</span></span></h2> <p class="MsoNormal"><span lang="EN-US">iBATIS </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">프레임워크는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구문에서</span><span lang="EN-US"> XML</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생성할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. XML</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">반환하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행하면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">각각의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">반환된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">완전한</span><span lang="EN-US"> XML </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">문서로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">얻을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">클래스를</span> <span lang="EN-US">“xml”</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getByIdValueXml" resultclass="xml" span=""> xmlResultName="account"> select accountId, username, password from Account where accountId = #value# </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">String xmlData = (String) sqlMap.queryForObject(</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">"Account.getByIdValueXml",</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">new Integer(1));</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">반환</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">받은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">같다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><!--?xml version="1.0" encoding="UTF-8"?--></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><account></account></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><accountid>1</accountid></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><username>lmeadors</username></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><password>blah</password></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">XML </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">문서로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">넘겨받은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">레코드만을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정말로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다루기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">쉽다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만일</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여러</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">받기를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">원한다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그렇게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아래에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getAllXml" resultclass="xml" xmlresultname="account"> select accountId, username, password, firstName, lastName, address1, address2, city, state, postalCode, country from Account </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">List xmlList = sqlMap.queryForList("Account.getAllXml", null);</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과는</span><span lang="EN-US"> XML </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">문서의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이렇게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span><span lang="EN-US"> XML</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문서로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">합치길</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">원할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문자열</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">처리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작업을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해야만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">최적의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아니다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">문제를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">피해가는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방법으로</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과를</span><span lang="EN-US"> XML</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">반환하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">단순한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">컬렉션을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">반환하는</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그로부터</span><span lang="EN-US"> XML</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수행하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">간단한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방법으로</span><span lang="EN-US">(</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">빈즈를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용한다면</span><span lang="EN-US">)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아래와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">같이</span><span lang="EN-US"> XML </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생성을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">도와주는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">메서드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만드는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">public String toXml(){</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">StringBuffer returnValue = new StringBuffer("");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">returnValue.append("<account>");</account></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">returnValue.append("<accountid>" + getAccountId() +"</accountid>");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">returnValue.append("<username>" + getUsername() + "</username>");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">returnValue.append("<password>" + getPassword() + "</password>");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">returnValue.append("");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">return returnValue.toString();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">문제에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">또</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">접근</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">리플렉션을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">빈즈를</span><span lang="EN-US"> XML</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">변환하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클래스를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방법은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아주</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">간단하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아래에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">작은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유틸리티가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">public class XmlReflector {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">private Class sourceClass;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">private BeanInfo beanInfo;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">private String name;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">XmlReflector(Class sourceClass, String name) throws Exception {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">this.sourceClass = sourceClass;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">this.name = name;</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">beanInfo = Introspector.getBeanInfo(sourceClass);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">public String convertToXml(Object o) throws Exception {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">StringBuffer returnValue = new StringBuffer("");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if (o.getClass().isAssignableFrom(sourceClass)) {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">PropertyDescriptor[] pd = beanInfo.getPropertyDescriptors();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if (pd.length > 0){</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">returnValue.append("<" + name + ">");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">for (int i = 0; i < pd.length; i++) {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">returnValue.append(getProp(o, pd[i]));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">returnValue.append("<!--" + name + "-->");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">} else {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">returnValue.append("<" + name + "/>");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">} else {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">throw new ClassCastException("Class " + o.getClass().getName() +</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">" is not compatible with " + sourceClass.getName());</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">return returnValue.toString();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">private String getProp(Object o, PropertyDescriptor pd)</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">throws Exception {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">StringBuffer propValue = new StringBuffer("");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Method m = pd.getReadMethod();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">Object ret = m.invoke(o);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">if(null == ret){</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">propValue.append("<" + pd.getName() + "/>");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}else{</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">propValue.append("<" + pd.getName() + ">");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">propValue.append(ret.toString());</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">propValue.append("<!--" + pd.getName() + "-->");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">return propValue.toString();</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">빈즈를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">파라미터로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">받아서</span><span lang="EN-US"> XML </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">문서가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아닌</span><span lang="EN-US"> XML </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구성</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">요소</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">조각으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">변환한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아래에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">XmlReflector xr = new XmlReflector(Account.class, "account");</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">xmlList = sqlMap.queryForList("Account.getAll", null);</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">StringBuffer sb = new StringBuffer(</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">"<!--?xml version=\"1.0\" encoding=\"UTF-8\" ?--><accounts>");</accounts></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">for (int i = 0; i < xmlList.size(); i++) {</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sb.append(xr.convertToXml(xmlList.get(i)));</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">}</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">sb.append("");</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기법을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용해서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대용량의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">레코드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">처리하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">효율면에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좋지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">못하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트와</span><span lang="EN-US"> XML </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문서를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">문자열</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">버퍼를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리상에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문이다</span><span lang="EN-US">. 6.3</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">절에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">살펴보고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대용량의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">처리하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더욱</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">효율적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방법을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알아볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><a name="_Toc293942535"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.2.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> </a><span style="mso-bookmark:_Toc293942535"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> </span><span style="mso-bookmark:_Toc293942535"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체와</span> </span><span style="mso-bookmark:_Toc293942535"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">연관시키기</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc293942536"><span lang="EN-US">6.2.1 </span></a><span style="mso-bookmark: _Toc293942536"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">복잡한</span> </span><span style="mso-bookmark:_Toc293942536"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">컬렉션</span><span lang="EN-US">(collection)</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">4</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">장에서는</span><span lang="EN-US"> SELECT </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이용해</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">베이스로부터</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가져오는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방법을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">살펴보았다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">여러</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">테이블들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">조인할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때조차도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과로는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">단일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입만을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다루었다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">복잡한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때에도</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이러한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기능은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여러분이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">만드는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">애플리케이션의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모델이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모델처럼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보였으면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유용하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">연관된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체들에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모델을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정의하고</span><span lang="EN-US">, iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한꺼번에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">읽어들일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들어</span><span lang="EN-US"> Account </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드가</span><span lang="EN-US"> Order </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">연관돼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있고</span><span lang="EN-US"> Order </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드가</span><span lang="EN-US"> OrderItem </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">연관돼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">때</span><span lang="EN-US">, </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이러한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관계를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정의하고</span><span lang="EN-US"> Account </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요청하면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span><span lang="EN-US"> Order </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모든</span><span lang="EN-US"> OrderItem </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체들</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">또한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가져올</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이러한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있게</span><span lang="EN-US"> SQL Map</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정의하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방법은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아래와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">같다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><!--?xml version="1.0" encoding="UTF-8" ?--></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">"http://ibatis.apache.org/dtd/sql-map-2.dtd"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><sqlmap namespace="Ch7"></sqlmap></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><resultmap id="ResultAccountInfoMap" span="" style="mso-spacerun:yes"> </resultmap></span>----------------------- (1)</p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">class="org.apache.mapper2.examples.bean.AccountInfo"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="account.accountId" span=""></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">column="accountId" /></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="orderList" span=""></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">select="Ch6.getOrderInfoList"</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">column="accountId" /></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><resultmap id="ResultOrderInfoMap" span="" style="mso-spacerun:yes"> </resultmap></span>----------------------- (2)</p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">class="org.apache.mapper2.examples.bean.OrderInfo"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="order.orderId" column="orderId"></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="orderItemList" column="orderId" span=""></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">select="Ch6.getOrderItemList" /></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><resultmap id="ResultOrderItemMap" span="" style="mso-spacerun:yes"> </resultmap></span>----------------------- (3)</p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">class="org.apache.mapper2.examples.bean.OrderItem"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="orderId" column="orderId"></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="orderItemId" column="orderItemId"></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getAccountInfoList" span="" style="mso-spacerun:yes"> ----------------------- (4) resultMap="ResultAccountInfoMap" > select accountId from Account </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getOrderInfoList" span="" style="mso-spacerun:yes"> ----------------------- (5) resultMap="ResultOrderInfoMap"> select orderId from orders where accountId = #value# </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getOrderItemList" span="" style="mso-spacerun:yes"> ----------------------- (6) resultMap="ResultOrderItemMap"> select orderId, orderItemId from orderItem where orderid = #value# </select></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맵</span><span lang="EN-US">(ResultAccountInfoMap (1), ResultOrderInfoMap (2), ResultOrderItemMap (3)</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">처음</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">중의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하나로</span><span lang="EN-US"> select </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용함을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하면</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티가</span><span lang="EN-US"> select </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">설정된다고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간주하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">들어</span><span lang="EN-US"> getAccountInfoList </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문</span><span lang="EN-US"> (4)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">맵</span><span lang="EN-US"> ResultAccountInfoMap</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">은</span><span lang="EN-US"> <result property="”orderList”" select="”Ch6.getOrderInfoList”" column="”accountId”"></result></span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">포함하고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">에게</span><span lang="EN-US"> orderList </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">포로퍼티의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">얻어</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">오기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해</span><span lang="EN-US"> accountId </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">칼럼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">파라미터로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">넘겨서</span> <span lang="EN-US">“Ch6.getOrderInfoList” </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행하고</span><span lang="EN-US">(5) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">반환</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span><span lang="EN-US"> orderList </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">저장하라는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의미가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">비슷한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방식으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">맵</span><span lang="EN-US"> ResultOrderInfoMap(2) </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span><span lang="EN-US"> orderItemList </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가져오기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해</span><span lang="EN-US"> getOrderItemList(6) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행하게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기능이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가진</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">편리함에도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">불구하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">접근</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방식은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문제점을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">첫째로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">방식은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">대용량의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">메모리를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">번째로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">아래에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">다룰</span> <span lang="EN-US">“N+1 Select </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문제</span><span lang="EN-US">”</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">알려진</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">현상으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터베이스</span><span lang="EN-US"> I/O </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">문제를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일으킬</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프레임워크는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">문제에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">해결책을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">문제를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한꺼번에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">해결할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">없다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoListParagraph" style="margin-left:58.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level2 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">-<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">베이스</span><span lang="EN-US"> I/O<br />iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">제공하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">캐싱</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매커니즘을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">언제</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할지는</span><span lang="EN-US"> 10</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">장에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴본다</span><span lang="EN-US">.<br /></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">연관된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">부딪히게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터베이스</span><span lang="EN-US"> I/O </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">문제를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴보기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위해</span><span lang="EN-US"> 1000</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계좌</span><span lang="EN-US">(Account)</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각각</span><span lang="EN-US"> 1000</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주문</span><span lang="EN-US">(Order)</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">있으며</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">각각의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주문이</span><span lang="EN-US"> 25</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주문</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">항목</span><span lang="EN-US">(OrderItem)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생각해보자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적재하려</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">든다면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이는</span><span lang="EN-US"> 1000000 </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">회</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이상의</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문장을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">약</span><span lang="EN-US"> 2500</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자바</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생성하게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이런</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">틀림없이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시스템</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">관리자에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">소리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">듣게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">될</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:58.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level2 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">-<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">“N+1 Select” </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">문제</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">살펴보기</span><span lang="EN-US"><br />“N+1 Select” </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문제는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">부모</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">레코드</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">연관된</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">자식</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">레코드를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">읽어들일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">발생하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">부모</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가져오기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쿼리를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">실행하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">부모가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">수</span> <span lang="EN-US">“N” </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만큼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있게되고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">부모</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">레코드에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">연관된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">자식</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">얻기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span lang="EN-US">“N”</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">번의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">쿼리를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실행해야</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">따라서</span> <span lang="EN-US">“N+1 Select” </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">라는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">얻는다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:58.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level2 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">-<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">문제에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">대한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">해결책</span><span lang="EN-US"><br /></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적재</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지연</span><span lang="EN-US">(6.2.2 </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">절에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알아볼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적재</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">과정을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관리하기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수준으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">작게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쪼갬으로써</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">메모리</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문제를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">완화시켜준다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그러나</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">여전히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">베이스</span><span lang="EN-US"> I/O </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문제가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">남아있다</span><span lang="EN-US">.<br /></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방식으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">연관</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시킬</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계좌를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주문에</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주문을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주문</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">항목에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">연관시키는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">과연</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좋은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예제일까</span><span lang="EN-US">? </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주문과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주문</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">항목을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">연관</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">짓는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적절하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하지만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계좌를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주문과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">연관시키는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">그다지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">실질적인</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">못</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.<br /></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">우리에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">친숙하고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이해할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개념을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">여기서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">배우고자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기법을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보여줄</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것이기에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">당분간은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc293942537"><span lang="EN-US">6.2.2 </span></a><span style="mso-bookmark: _Toc293942537"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적재</span> </span><span style="mso-bookmark:_Toc293942537"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지연</span><span lang="EN-US">(lazy loading)</span></span></h2> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">먼저</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">알아볼</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">해결책은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">적재</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">지연이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">적재</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지연은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">연관된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">즉시</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">필요하지는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">경우에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">유용하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">들어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">애플리케이션이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계좌를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보여주는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">웹</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">페이지에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">호출되고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">판매</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대리인이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계좌를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">클릭하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계좌의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">보게되고</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">마지막으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">특정</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주문의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">세부</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">내역을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주문을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">클릭하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하자</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이러한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">경우</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">우리에게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">필요한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">시점에서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">개의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">뿐이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이것이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적재</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지연의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적절한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적재</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지연을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하려면</span><span lang="EN-US"> SqlMapConfig.xml </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">파일을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">편집하여</span><span lang="EN-US"> <settings> </settings></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소의</span><span lang="EN-US"> lazyLoadingEnabled </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성을</span> <span lang="EN-US">‘true’ </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">바꿔</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">활성화</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">시켜야한다</span><span lang="EN-US">. cglib </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">확장판</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적재</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지연을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하고자</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한다면</span><span lang="EN-US"> cglib</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다운로드하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">애플리케이션의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">클래스패스에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">추가하고</span><span lang="EN-US"> <settings> </settings></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소의</span><span lang="EN-US"> enhancementEnabled </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성도</span> <span lang="EN-US">‘true’ </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">변경해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주면</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주의할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">점으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전역적인</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">설정이므로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">속성들을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">활성화하면</span><span lang="EN-US"> SQL Map </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문들이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적재</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지연을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">점이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc293942538"><span lang="EN-US">6.2.3 N+1 Select </span></a><span style="mso-bookmark:_Toc293942538"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">문제</span> </span><span style="mso-bookmark:_Toc293942538"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">피해가기</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">“N+1 Select” </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">문제를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">피해갈</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">방법은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지는</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span><span lang="EN-US"> groupBy </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">한가지는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">로우</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">핸들러</span><span lang="EN-US">(Row Handler) </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용자</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">컴포넌트를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US">groupBy </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">바로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">전에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">알아본</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기법과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">유사하다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">간단히</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">말해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맵을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">연관</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">관계를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">정의하고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">최상위</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">맵을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구문과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결합시키면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아래</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예제는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">위에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">나온</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">적재</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지연</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예제와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">완전히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">동일한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구조를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생성하지만</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">서버에서는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하나의</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문장만이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행된다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">세</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맵이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">연관돼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있는데</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하나는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">계좌</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">또</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하나는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주문</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그리고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나머지는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주문</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">항목을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">계좌를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맵은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">세</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo3"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">계과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체들의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo3"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">새로운</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계좌를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생성하는데</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">필요한지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알려준다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo3"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span lang="EN-US">iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">연관된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다음</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">객체</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">묶음을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떻게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑할지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">알려주는데</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">경우에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">연관된</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">묶음이란</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">해당</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">계좌에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">연관된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주문</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">묶음이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주의해야</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매우</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">중요한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사항이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있는데</span><span lang="EN-US">, groupBy </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이름을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">테이블</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">칼럼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이름을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">것이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">아니다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주문을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">위한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맵도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">동일한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">세</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기능을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo3"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주문</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주문</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo3"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">새로운</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가리키는지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지정한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l0 level1 lfo3"><!--[if !supportLists]--><span lang="EN-US" style="font-family:Wingdings;mso-fareast-font-family:Wingdings; mso-bidi-font-family:Wingdings"><span style="mso-list:Ignore">l<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자식</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">가져오기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어떤</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">맵을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용할지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">지정한다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:38.0pt;mso-para-margin-left:0gd"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">마지막으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">주문</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">항목</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">맵은</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">그냥</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일반적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">맵으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주문</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">항목을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑시키는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">역할만을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">아래는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><resultmap id="ResultAccountInfoNMap" span="" style="mso-spacerun:yes"> </resultmap></span><span lang="EN-US" style="font-family:Wingdings;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman";mso-char-type:symbol;mso-symbol-font-family: Wingdings"><span style="mso-char-type:symbol;mso-symbol-font-family:Wingdings">ß</span></span><span lang="EN-US">-------- (1) </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">계좌</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과맵</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">선언</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">class="AccountInfo"</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">groupBy="account.accountId" ></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="account.accountId" span=""></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">column="accountId" /></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="orderList" span=""></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">resultMap="Ch6.ResultOrderInfoNMap" /></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><resultmap id="ResultOrderInfoNMap" span="" style="mso-spacerun:yes"> </resultmap></span><span lang="EN-US" style="font-family:Wingdings;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman";mso-char-type:symbol;mso-symbol-font-family: Wingdings"><span style="mso-char-type:symbol;mso-symbol-font-family:Wingdings">ß</span></span><span lang="EN-US">--------(2) </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">주문</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과맵</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">선언</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">class="OrderInfo"</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">groupBy="order.orderId" ></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="order.orderId" column="orderId"></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="orderItemList" span=""></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">resultMap="Ch6.ResultOrderItemNMap" /></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><resultmap id="ResultOrderItemNMap" span="" style="mso-spacerun:yes"> </resultmap></span><span lang="EN-US" style="font-family:Wingdings;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman";mso-char-type:symbol; mso-symbol-font-family:Wingdings"><span style="mso-char-type:symbol;mso-symbol-font-family: Wingdings">ß</span></span><span lang="EN-US">--------(3) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">주문항목을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">위한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과맵</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">선언</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">class="OrderItem"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="orderId" span=""></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">column="orderId" /></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="orderItemId" span=""></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">column="orderItemId" /></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><select id="getAccountInfoListN" span="" style="mso-spacerun:yes"> ß--------(4) 결과맵을 </select> </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">요소에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">묶기</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">resultMap="ResultAccountInfoNMap"></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">select</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">account.accountId as accountid,</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">orders.orderid as orderid,</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">orderitem.orderitemid as orderitemid</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">from account</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">join orders on account.accountId = orders.accountId</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">join orderitem on orders.orderId = orderitem.orderId</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US">order by accountId, orderid, orderitemid</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US">getAccountInfoListN </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">호출하여</span><span lang="EN-US"> (4) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">앞의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">두</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">예제에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">보여준</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">동일한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">얻게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우에는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">개의</span><span lang="EN-US"> SQL </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">문만을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행하기</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">앞</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">예제보다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">훨씬</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">빠르다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이것은</span><span lang="EN-US"> getAccoutnInfoListN </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">구문</span><span lang="EN-US"> (4)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">실행되면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">그</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과는</span><span lang="EN-US"> groupBy </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하는</span><span lang="EN-US"> resultAccountInfoNMap </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">맵</span><span lang="EN-US"> (1)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">통해서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수행하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생성된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성은</span><span lang="EN-US"> iBATIS </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">에게</span><span lang="EN-US"> account.accountId </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">변경될</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때에만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">새로운</span><span lang="EN-US"> AccountInfo </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">인스턴스를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성하면</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">된다고</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">지시한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">좀</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">더</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">살펴보면</span><span lang="EN-US"> orderList </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">프로퍼티가</span><span lang="EN-US"> ResultOrderInfoNMap </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">맵</span><span lang="EN-US"> (2)</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">와</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">매핑이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">되어</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있기</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">쿼리</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">나온</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">레코드를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">처리해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가면서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">주문</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트도</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">생성하게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. ResultOrderInfoNMap </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">맵도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">또한</span><span lang="EN-US"> groupBy </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">속성을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span><span lang="EN-US"> orderItemList </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">프로퍼티의</span><span lang="EN-US"> ResultOrderItemNMap </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">맵</span><span lang="EN-US">(3)</span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이용하여</span><span lang="EN-US"> orderItemList </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">과정을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">반복할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것이다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><a name="_Toc293942539"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.3.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">상속</span></a></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc293942540"><span lang="EN-US">6.3.1 </span></a><span style="mso-bookmark: _Toc293942540"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">상속</span> </span><span style="mso-bookmark:_Toc293942540"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑하기</span></span></h2> <p class="MsoNormal"><span lang="EN-US">iBATIS</span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구별자</span><span lang="EN-US">(discriminator) </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">라고</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">불리는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">특별한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">사용하여</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">상속</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구조를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">지원한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구별자를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">기초하여</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">생성할</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클래스의</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">타입을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">판단할</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구별자는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과맵의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">일부이고</span><span lang="EN-US"> switch </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">구문처럼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">잘</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">작동한다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">예를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">들면</span><span lang="EN-US">:</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><resultmap id="document" class="testdomain.Document"></resultmap></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="id" column="DOCUMENT_ID"></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="title" column="TITLE"></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="type" column="TYPE"></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><b><span lang="EN-US"><discriminator column="TYPE" javatype="string"><o:p></o:p></discriminator></span></b></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><b><span lang="EN-US"><submap value="Book" resultmap="book"><o:p></o:p></submap></span></b></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><b><span lang="EN-US"><submap value="Newspaper" resultmap="news"><o:p></o:p></submap></span></b></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><b><span lang="EN-US"><o:p></o:p></span></b></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">위</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구별자는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이렇게</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">읽을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoListParagraph" style="margin-left:58.0pt;mso-para-margin-left:0gd; text-indent:-18.0pt;mso-list:l1 level2 lfo2"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">-<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">칼럼</span> <span lang="EN-US">“TYPE” </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span lang="EN-US">“Book” </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포함한다면</span><span lang="EN-US">, “book” </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과맵을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하라</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">반면에</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">칼럼</span> <span lang="EN-US">“TYPE”</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span lang="EN-US">“Newspaper” </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">포함한다면</span><span lang="EN-US">, “news” </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과맵을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">사용하라</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하위</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맵은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이름으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">참조하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">일반적인</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">결과맵이다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">구별자가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">맵</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">중</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하나와</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">일치하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">찾지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">못한다면</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상위</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">결과맵이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">적용된다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">하지만</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적절한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">값이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다면</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">오직</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하위</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맵만이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">적용된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">부모에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">정의된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다음</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">예제에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">보듯이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">하위</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">맵이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">부모</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">맵을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">명시적으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">확장하지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">적용되지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">않는다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><resultmap id="book" class="testdomain.Book" extends="document"></resultmap></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"><result property="pages" column="DOCUMENT_PAGENUMBER"></result></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US"></span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과맵의</span><span lang="EN-US"> extends </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">속성은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">참조하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과맵에서</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">모든</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">결과</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">효과적으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">복사한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">어쨌든</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이것은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">클래스</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">구조에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">대한</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">어떠한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">것도</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">의미하지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">않는다</span><span lang="EN-US">. iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">관계</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">매핑</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프레임워크가</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">아니라는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">기억해라</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">차이점은</span><span lang="EN-US"> iBATIS</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">클래스와</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">테이블</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">간의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">매핑을</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">알거나</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">다루지</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">않는다는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">것이다</span><span lang="EN-US">. </span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2><a name="_Toc293942541"><!--[if !supportLists]--><span lang="EN-US" style="mso-fareast-font-family:"Times New Roman""><span style="mso-list:Ignore">1.4.<span style="font:7.0pt "Times New Roman""> </span></span></span><!--[endif]--><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">잡다한</span> </a><span style="mso-bookmark:_Toc293942541"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> </span><span style="mso-bookmark:_Toc293942541"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">활용법들</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <h2 style="margin-left:0cm;text-indent:0cm;mso-list:none;tab-stops:40.0pt"><a name="_Toc293942542"><span lang="EN-US">6.4.1 statement </span></a><span style="mso-bookmark:_Toc293942542"><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">타입과</span><span lang="EN-US"> DDL </span></span><span style="mso-bookmark:_Toc293942542"><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">사용하기</span></span></h2> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="EN-US"><statement> </statement></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입은</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">다른</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">타입들</span><span lang="EN-US"> (<insert>, <update>, <delete>, <select>) 과는 달리 약간 별나서 호출할 관련 메서드가 없다. 이게 바로 힌트다. 는 되도록 사용하지 않는 것이 좋으며 어쩔 수 없는 경우의 해결책으로서만 사용하도록 한다. 데이터 정의 언어(DDL)은 SQL 문의 한 종류로 데이터베이스 스키마의 구조를 정의하는데 사용한다. DDL은 테이블과 인덱스를 정의하고 데이터는 변경하지 않지만 대신 데이터의 구조를 변경하는 다른 작업을 수행하는 데 사용한다. DDL을 사용하는 것은 공식적으로 지원되는 것은 아니지만 보통 데이터베이스는 iBATIS의 타입을 사용하여 DDL을 실행할 수 있도록 하고 있다. 예를 들어 PostgreSQL 데이터베이스는 타입을 사용하여 데이터베이스 테이블을 생성하거나 삭제할 수 있다. DROP TABLE Account CASCADE; sqlMap.update("Account.dropTable", null); 모든 데이터베이스가 이 기능을 지원하리라는 보장은 없다. 하지만 지원한다면 데이터베이스의 구조를 생성하고 수정하는 루틴을 작성하는데 유용하게 사용할 수 있을 것이다. 6.4.2 매우 큰 데이터 셋 처리하기 애플리케이션의 요구사항에 따라 대용량 데이터 셋을 사용하는 것이 올바른 선택일 경우도 있다. 대부분의 경우, 이러한 요구사항을 다른 방식으로 충족해 줄 수도 있는데, 이럴 때 몇 가지 의문점을 주의 깊게 제시해 보면 사용자의 진정한 요구사항이 무엇인지 알게 될 수도 있다. <!--[if !supportLists]-->- <!--[endif]-->더 이상 질문을 회피하지 마세요…<br />iBATIS가 대용량 데이터 셋을 다루기 위해 제공해 주는 것이 무엇인지 알아보자. 바로 RowHandler 인터페이스가 이런 경우에 대비해서 이미 만들어져 있다.<br />RowHandler 인터페이스는 매우 간단한 것으로 매핑 구문의 결과 셋을 처리하는 과정에 특정 행위를 삽입하도록 해 주며 오직 한 개의 메서드만을 포함하고 있다.<br />public interface RowHandler {<br /> void handleRow (Object valueObject);<br />}<br /><br />handleRow 메서드는 매핑 구문 결과 셋의 각 행마다 한 번씩 호출된다. 이 인터페이스를 사용하면 대용량의 데이터를 메모리에 한꺼번에 올리지 않고도 다룰 수 있게 된다. 오직 한 행의 데이터만이 메모리에 적재되며 코드(handleRow)를 호출하고 데이터 객체를 메모리에서 제거하며 모든 결과를 처리할 때까지 이 과정을 반복한다.<br />6.1.2 절에서 iBATIS에서 XML로 결과를 생성하는 기능을 살펴 봤었다. 그리고 몇 가지 부족한 기능이 있음을 발견했는데, 그 중에서도 복잡한 객체나 객체의 리스트에서 단일 XML문서를 생성하는 기능이 부족했었다. 해당 절에서, 전체 객체 리스트나 객체 그래프 그리고 모든 객체를 순회할 때보다 더 적은 메모리를 사용해서 위 작업을 어떻게 처리할지 보여주겠다고 약속했었다. 로우 핸들러를 사용해도 여전히 객체들을 순회하지만 리스트에서 한 번에 오직 한 개의 요소만을 처리한다. 다중 account 요소를 가진 단일 XML 문서를 생성하는 로우 핸들러의 예제를 보자.<br /><br />public class AccountXmlRowHandler implements RowHandler { private StringBuffer xmlDocument = new StringBuffer(""); private String returnValue = null; public void handleRow(Object valueObject) { Account account = (Account) valueObject; xmlDocument.append(""); xmlDocument.append(""); xmlDocument.append(account.getAccountId()); xmlDocument.append(""); xmlDocument.append(""); xmlDocument.append(account.getUsername()); xmlDocument.append(""); xmlDocument.append(""); xmlDocument.append(account.getPassword()); xmlDocument.append(""); xmlDocument.append(""); } public String getAccountListXml(){ if (null == returnValue){ xmlDocument.append(""); returnValue = xmlDocument.toString(); } return returnValue; } }<br />위 코드는 기존에 존재하는 Account 객체의 리스트를 반환하는 매핑 구문을 사용하며 정말로 간단하다. 매핑 구문이 반환하는 XML로 인코딩된 모든 계좌 정보를 통해 XML문서를 생성해 주는 예제가 있다. AccountXmlRowHandler rh = new AccountXmlRowHandler(); sqlMapClient.queryWithRowHandler("Account.getAll", null, rh); String xmlData = rh.getAccountListXml(); 더 흥미로운 로우 핸들러의 또 다른 사용 예<br />로우 핸들러를 어떻게 사용할지를 보여주는 다른 예제로, 다중 테이블 간의 관계를 여러 측면에서 다루는 방법이 있다. 예를 들어 예제 데이터베이스에서 계좌가 있고, 계좌는 여러 개의 주문을 가지고 있으며, 각 주문은 주문 항목을 가질 수 있고, 주문 항목은 제품 하나 가지고 있고, 각 제품은 생산자를 가지고 있다. 그림은 이 관계를 나타내는 데이터 모델이다.<br /> <br />그림 6‑<!--[if supportFields]><span style="'mso-bookmark:_Toc293942588'"></span><span style="'mso-element:field-begin'"></span><span style="'mso-bookmark:_Toc293942588'"><span lang="EN-US" style="'background:#D9D9D9;"> SEQ </span></span><span style="'mso-bookmark:_Toc293942588'"><span style="'font-family:굴림체;mso-ascii-font-family:">그림</span><span lang="EN-US" style="'background:#D9D9D9;mso-shading-themecolor:background1;"> \* ARABIC \s 1 <span style="'mso-element:field-separator'"></span></span></span><![endif]-->1<!--[if supportFields]><span style="'mso-bookmark:_Toc293942588'"></span><span style="'mso-element:field-end'"></span><![endif]-->. iBATIS가 개발 프로세스를 단순화하기 위해 끌어다 모은 몇몇 개념들 <br /><br />자, 주문한 상품의 리스트와 또 그 상품을 주문한 고객 계좌의 리스트를 제공해야 하는 요구사항이 있다고 상상해보자. 또한 계좌의 리스트와 각 계좌에 대해 주문한 상품의 생산자의 리스트도 원한다. 아마도 (id를 통해) Map 객체로 가져오면 빠르게 계좌와 상품을 찾을 수 있을 것이다.<br />이는 이미 존재하는 groupBy 속성과 queryForMap 메서드, 그리고 네 개의 매핑 구문을 이용해서 할 수 있는 일이지만 이러한 접근 방식은 네 개의 서로 다른 select 구문이 필요하고 잠재적으로 각 객체의 여러 복사본을 생성한다. 이는 첫 번째 매핑 구문에서 생성된 고객 객체가 두 번째 매핑 구문에서 생성된 고객 객체와는 별개의 객체임을 의미한다.(메모리를 더 많이 사용하게 됨을 뜻한다.) iBATIS는 이보다 더 나은 방법을 제공한다.<br />로우 핸들러를 사용하여 단일 SQL 구문으로 이러한 요구사항을 충족시키는 것이 가능하다. 결과 셋을 한 번만 처리하여 주 결과 리스트와 관련된 리스트, Map들 그리고 그 모든 것을 객체를 중복 생성하지 않고 얻어낼 수 있다. 이러한 접근법은 약간 더 많은 코딩을 필요로 하지만 더 적은 처리시간과 더 적은 데이터베이스 I/O, 그리고 더 적은 메모리 사용으로 해결할 수 있다.<br />우리가 이를 위해 하고자 하는 것은 데이터를 조인하고 각 레코드를 살펴보면서 List 와 Map 에 새로운 (상품과 계좌)항목들을 추가하는 것이다. 정말 단순한 것처럼 들린다. 그럼 코드를 살펴보자.<br />우선 매핑 구문을 생성하자. 이 매핑 구문은 테이블을 조인하고 연관된 데이터들을 가져오고 이들을 우리가 원하는 모든 객체들을 포함하고 있는 복합 객체 안의 별개의 세 객체에 매핑해서 넣는다.<br /><br /> class="org.apache.mapper2.examples.chapter6.AccountManufacturerProduct"> column="manufacturerId" /> </select><o:p></o:p></delete></update></insert></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">select distinct<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">p.productId as productId,<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">o.accountId as accountId,<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">m.manufacturerId as manufacturerId<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">from product p<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">join manufacturer m<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">on p.manufacturerId = m.manufacturerId<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">join orderitem oi<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">on oi.productId = p.productId<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">join orders o<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">on oi.orderId = o.orderId<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;mso-font-kerning:0pt">order by 1,2,3<o:p></o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US" style="font-size:8.0pt; font-family:Courier;mso-fareast-font-family:바탕체;mso-bidi-font-family:Courier; mso-font-kerning:0pt"></span><span lang="EN-US"><br />AccountManufacturerProduct </span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">클래스는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단순한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">클래스로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">세</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티</span><span lang="EN-US">(account, manufacturer, product)</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">가지고</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">있다</span><span lang="EN-US">. </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">결과</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맵</span><span lang="EN-US">(AmpRHExample)</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">은</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">데이터를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">평평하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">바라보는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">방식으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">생성할</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">처럼</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">각</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">프로퍼티의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">값을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">자동으로</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">설정해준다</span><span lang="EN-US">.<br /></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음에는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">로우</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">핸들러가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체들을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">받아서</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만날때마다</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이를</span><span lang="EN-US"> productId, accountId, manufacturerId </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">따라</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">맵</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">분류해</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">넣는다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각각의</span><span lang="EN-US"> account </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">혹은</span><span lang="EN-US"> product</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">를</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">처음으로</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">받아들일</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">해당</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체를</span><span lang="EN-US"> account</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">리스트나</span><span lang="EN-US"> product</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">리스트에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">각각</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">추가한다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">만약</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">선택된</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">이미</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">저장되어</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">있을</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">경우</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이미</span><span lang="EN-US"> (Map</span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">상에</span><span lang="EN-US">) </span><span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">존재하는</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">데이터베이스에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">방금</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">가져온</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">객체를</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">대체하게</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">.<br /></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">마지막으로</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">특정</span><span lang="EN-US"> account, manufacturer </span><span style="font-family:굴림체; mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">혹은</span><span lang="EN-US"> product</span><span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">의</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">단일</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">인스턴스를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">완전히</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">생성한</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">뒤에</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">이를</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">적합한</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">객체에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">추가하게</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">된다</span><span lang="EN-US">. </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">이는</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">다음에서</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">볼</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">있다</span><span lang="EN-US">.</span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">public class AMPRowHandler implements RowHandler {<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">private Map<integer, accountmanufacturers=""> accountMap<o:p></o:p></integer,></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">= new HashMap<integer, accountmanufacturers="">();<o:p></o:p></integer,></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">private Map<integer, manufacturer=""> manufacturerMap<o:p></o:p></integer,></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">= new HashMap<integer, manufacturer="">();<o:p></o:p></integer,></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">private Map<integer, productaccounts=""> productMap<o:p></o:p></integer,></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">= new HashMap<integer, productaccounts="">();<o:p></o:p></integer,></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">private List<productaccounts> productAccountList<o:p></o:p></productaccounts></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">= new ArrayList<productaccounts>();<o:p></o:p></productaccounts></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">private List<accountmanufacturers> accountManufacturerList<o:p></o:p></accountmanufacturers></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">= new ArrayList<accountmanufacturers>();<o:p></o:p></accountmanufacturers></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">public void handleRow(Object valueObject) {<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">AccountManufacturerProduct amp;<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">amp = (AccountManufacturerProduct)valueObject;<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">Account currentAccount = amp.getAccount();<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">Manufacturer currentMfgr = amp.getManufacturer();<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">AccountManufacturers am;<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">ProductAccounts pa;<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">Product currentProduct = amp.getProduct();<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">if (null == accountMap.get(currentAccount.getAccountId())) {<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">// this is the first time we have seen this account<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">am = new AccountManufacturers();<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">am.setAccount(currentAccount);<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">accountMap.put(currentAccount.getAccountId(), am);<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">accountManufacturerList.add(am);<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">} else {<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">// Use the accoutn from the account map<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">am = accountMap.get(currentAccount.getAccountId());<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">currentAccount = am.getAccount();<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">}<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">// am is now the current account / manufacturerlist<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">if (null ==<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">manufacturerMap.get(currentMfgr.getManufacturerId())) {<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">// we have not seen this manufacturer yet<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">manufacturerMap.put(<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">currentMfgr.getManufacturerId(),<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">currentMfgr);<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">} else {<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">// we already have this manufacturer loaded, reuse it<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">currentMfgr = manufacturerMap.get(<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">currentMfgr.getManufacturerId());<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">}<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">am.getManufacturerList().add(currentMfgr);<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">if (null == productMap.get(currentProduct.getProductId())) {<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">// this is a new product<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">pa = new ProductAccounts();<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">pa.setProduct(currentProduct);<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">productMap.put(currentProduct.getProductId(), pa);<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">productAccountList.add(pa);<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">} else {<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">// this prodcut has been loaded already<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">pa = productMap.get(currentProduct.getProductId());<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">}<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">// pa is now the current product's product / account list<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">pa.getAccountList().add(currentAccount);<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">am.getManufacturerList().add(currentMfgr);<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">}<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">public List<productaccounts> getProductAccountList() {<o:p></o:p></productaccounts></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">return productAccountList;<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">}<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">public List<accountmanufacturers> getAccountManufacturerList() {<o:p></o:p></accountmanufacturers></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">return accountManufacturerList;<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">}<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">public Map<integer, productaccounts=""> getProductMap() {<o:p></o:p></integer,></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">return productMap;<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">}<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">public Map<integer, accountmanufacturers=""> getAccountMap() {<o:p></o:p></integer,></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">return accountMap;<o:p></o:p></span></p> <p class="MsoNormal" align="left" style="text-align:left;background:#D9D9D9; mso-background-themecolor:background1;mso-background-themeshade:217;mso-layout-grid-align: none;text-autospace:none;word-break:keep-all"><span lang="EN-US" style="font-size:8.0pt;font-family:Courier;mso-fareast-font-family:바탕체; mso-bidi-font-family:Courier;color:black;mso-font-kerning:0pt">}<o:p></o:p></span></p> <p class="MsoNormal" style="background:#D9D9D9;mso-background-themecolor:background1; mso-background-themeshade:217"><span lang="EN-US" style="font-size:8.0pt; font-family:Courier;mso-fareast-font-family:바탕체;mso-bidi-font-family:Courier; color:black;mso-font-kerning:0pt">}</span><span lang="EN-US"><br /></span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">코드가</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">꽤</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">복잡해</span> <span style="font-family: 굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family:"Times New Roman"">보이긴</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"">하지만</span><span lang="EN-US">, </span><span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">이</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">코드가</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">하는</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">일</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">역시</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">굉장히</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">복잡하기</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">때문에</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">어쩔</span> <span style="font-family:굴림체;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"">수</span> <span style="font-family:굴림체;mso-ascii-font-family:"Times New Roman";mso-hansi-font-family: "Times New Roman"">없다</span><span lang="EN-US">.</span></p> <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>Anonymoushttp://www.blogger.com/profile/12141843607842756271noreply@blogger.com0