<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-845219309987183729</id><updated>2012-02-17T07:32:20.311+09:00</updated><category term='Visual Studio'/><category term='GAUCE .NET'/><category term='IIS 7.0'/><category term='InstallScript'/><category term='Jeus'/><category term='jdbc'/><category term='JAVA'/><category term='javascript'/><category term='JSP'/><category term='Remembrance'/><category term='Struts,Spring'/><category term='window.open'/><category term='HashMap'/><category term='WinDbg'/><category term='Programing'/><category term='아이콘 생성'/><category term='Emedit'/><category term='미들웨어'/><category term='인스톨실드'/><category term='응용 프로그램 오류'/><category term='Windows'/><category term='파이프라인'/><category term='date'/><category term='Oracle'/><category term='Every Day'/><category term='Crash Dump'/><category term='C++'/><category term='jeusadmin'/><category term='EJB'/><category term='dr. wtsn'/><category term='XMLHTTP'/><category term='JNDI'/><category term='파라메터'/><category term='Visual C'/><category term='공유메모리 사용'/><category term='#ifdef'/><category term='ms949'/><category term='Debugging'/><category term='3005'/><category term='디버깅'/><category term='dos'/><category term='JAD'/><category term='단축키'/><category term='bind'/><category term='WAS'/><category term='assert'/><category term='Pipeline'/><category term='Network'/><category term='setTimeout'/><category term='ODP.NET'/><category term='InstallShield'/><category term='인스톨실스'/><category term='Struts'/><category term='FCKeditor'/><category term='vi'/><category term='Linux UNIX'/><category term='Etc'/><category term='echo off'/><category term='Server'/><category term='eclipse에러'/><category term='LPCTSTR'/><category term='typecasting'/><category term='WPARAM 과 LPARAM'/><category term='날짜계산'/><category term='DataBase'/><category term='VARIANT'/><category term='Tool'/><category term='Tomcat'/><category term='psp 커펌'/><category term='ORA'/><category term='Linux'/><category term='unix'/><category term='Batch Files'/><category term='IE8'/><category term='pop3서버정보'/><category term='Eclipse'/><category term='HTML'/><category term='bstr'/><category term='TCHAR'/><category term='TUXEDO'/><category term='psp'/><category term='Log4J'/><category term='GAUCE'/><category term='J2EE'/><category term='인코딩'/><category term='ftp'/><category term='OS'/><title type='text'>김태환 팬클럽</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>80</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-3852225982446187846</id><published>2011-01-11T16:18:00.000+09:00</published><updated>2011-01-11T22:00:44.485+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='VARIANT'/><category scheme='http://www.blogger.com/atom/ns#' term='typecasting'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual C'/><category scheme='http://www.blogger.com/atom/ns#' term='bstr'/><title type='text'>BSTR CString char* CComVariant VARIANT</title><content type='html'>&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4 face=Verdana&gt;BSTR &amp;lt;-&amp;gt; CString&lt;br /&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;TABLE style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; WIDTH: 530px; FONT-FAMILY: 돋움; FONT-SIZE: 9pt; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD style="FONT-FAMILY: 994268_10; FONT-SIZE: 10pt"&gt;&lt;FONT face=Verdana&gt;&lt;FONT color=#0000ff&gt;CString&lt;/FONT&gt;&amp;nbsp;BSTRToCString(&lt;FONT color=#0000ff&gt;BSTR&lt;/FONT&gt;&amp;nbsp;bstr)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=#0000ff&gt;char&lt;/FONT&gt;* pbstr;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=#993366&gt;USES_CONVERSION;&lt;FONT color=#000000&gt;&amp;nbsp; &amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#008000&gt;// &amp;lt;atlconv.h&amp;gt;, convert를 위한 macro&lt;/FONT&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;/FONT&gt;&amp;nbsp; &amp;nbsp; pbstr = &lt;FONT color=#993366 face=Verdana&gt;OLE2A&lt;FONT color=#000000&gt;(bstr); &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// BSTR -&amp;gt; char&lt;/FONT&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=#0000ff face=Verdana&gt;return CString&lt;FONT color=#000000&gt;(bstr);&lt;/FONT&gt;&lt;br /&gt;&lt;/FONT&gt;}&lt;br /&gt;&lt;br /&gt;&lt;FONT face=Verdana&gt;&lt;FONT color=#0000ff&gt;BSTR&lt;/FONT&gt;&amp;nbsp;CStringToBSTR(&lt;FONT color=#0000ff&gt;CString&lt;/FONT&gt;&amp;nbsp;str)&lt;br /&gt;&lt;/FONT&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=#0000ff face=Verdana&gt;return&lt;/FONT&gt; str.&lt;FONT color=#993366 face=Verdana&gt;AllocSysString&lt;/FONT&gt;();&lt;FONT face=Verdana&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=#008000&gt;// CString to BSTR&lt;/FONT&gt;&lt;/FONT&gt;&lt;br /&gt;}&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT size=4 face=Verdana&gt;BSTR &amp;lt;-&amp;gt; char*&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;TABLE style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; WIDTH: 530px; FONT-FAMILY: 돋움; FONT-SIZE: 9pt; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD style="FONT-FAMILY: 994268_10; FONT-SIZE: 10pt"&gt;&lt;FONT face=verdana&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#008000&gt;// BSTR to char*&lt;/FONT&gt;&lt;br /&gt;BSTR&lt;/FONT&gt;&amp;nbsp;bstr&lt;br /&gt;&lt;FONT color=#0000ff&gt;char&lt;/FONT&gt;* pbstr;&lt;br /&gt;&lt;FONT color=#993366&gt;USES_CONVERSION;&lt;FONT color=#000000&gt;&amp;nbsp; &amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#008000&gt;// &amp;lt;atlconv.h&amp;gt;, convert를 위한 macro&lt;/FONT&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;/FONT&gt;pbstr = &lt;FONT color=#993366 face=Verdana&gt;OLE2A&lt;FONT color=#000000&gt;(bstr);&lt;SPAN style="WIDTH: 1px; FLOAT: right; HEIGHT: 1px" id=callbacknestdarkblitztistorycom1208646&gt;&lt;EMBED id=bootstrapperdarkblitztistorycom1208646 height=1 type=application/x-shockwave-flash width=1 src=http://darkblitz.tistory.com/plugin/CallBack_bootstrapperSrc?nil_profile=tistory&amp;amp;nil_type=copied_post wmode="transparent" FlashVars="&amp;amp;callbackId=darkblitztistorycom1208646&amp;amp;host=http://darkblitz.tistory.com&amp;amp;embedCodeSrc=http%3A%2F%2Fdarkblitz.tistory.com%2Fplugin%2FCallBack_bootstrapper%3F%26src%3Dhttp%3A%2F%2Fcfs.tistory.com%2Fblog%2Fplugins%2FCallBack%2Fcallback%26id%3D120%26callbackId%3Ddarkblitztistorycom1208646%26destDocId%3Dcallbacknestdarkblitztistorycom1208646%26host%3Dhttp%3A%2F%2Fdarkblitz.tistory.com%26float%3Dleft" swLiveConnect="true" AllowHtmlPopupwindow="false" enableHtmlAccess="false" allowNetworking="internal" allowScriptAccess="never" EnableContextMenu="false" invokeURLs="false" autostart="false"&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// BSTR -&amp;gt; char&lt;/FONT&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT color=#008000 face=Verdana&gt;// char to BSTR&lt;/FONT&gt;&lt;br /&gt;&lt;FONT face=Verdana&gt;&lt;FONT color=#0000ff&gt;TCHAR&lt;/FONT&gt;&lt;FONT color=#888888&gt;&amp;nbsp;szString[512];&lt;br /&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;_bstr_t&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Verdana&gt;&lt;FONT color=#000000&gt;&amp;nbsp;bstr_string = szString;&lt;br /&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BSTR&lt;/FONT&gt;&lt;FONT color=#888888&gt;&amp;nbsp;bstr&lt;/FONT&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT color=#888888&gt;*bstr = bstr_string.copy();&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT size=4 face=Verdana&gt;CString &amp;lt;-&amp;gt; CComVariant&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;TABLE style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; WIDTH: 530px; FONT-FAMILY: 돋움; FONT-SIZE: 9pt; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD style="FONT-FAMILY: 994268_10; FONT-SIZE: 10pt"&gt;&lt;FONT face=verdana&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#008000&gt;// CString -&amp;gt; CComVariant&lt;/FONT&gt;&lt;br /&gt;CString&lt;FONT color=#000000&gt;&amp;nbsp;str;&lt;/FONT&gt;&lt;br /&gt;CComVariant&lt;/FONT&gt;&amp;nbsp;out(str.&lt;FONT color=#993366&gt;AllocSysString&lt;/FONT&gt;());&lt;br /&gt;or&lt;br /&gt;&lt;FONT color=#0000ff&gt;CComVariant&lt;/FONT&gt;&amp;nbsp;out(str);&lt;br /&gt;&lt;br /&gt;&lt;FONT color=#008000&gt;// CComVariant -&amp;gt; CString &lt;/FONT&gt;&lt;br /&gt;str = out.bstrVal;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT size=4 face=Verdana&gt;VARIANT&lt;/FONT&gt;&lt;/STRONG&gt; &lt;/P&gt;&lt;P&gt;&lt;TABLE style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; WIDTH: 530px; FONT-FAMILY: 돋움; FONT-SIZE: 9pt; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD style="FONT-FAMILY: 994268_10; FONT-SIZE: 10pt"&gt;&lt;P&gt;&lt;FONT face=verdana&gt;&lt;FONT color=#0000ff&gt;VARIANT&lt;/FONT&gt;&amp;nbsp;BSTRToVARIANT(&lt;FONT color=#0000ff&gt;BSTR&lt;/FONT&gt;&amp;nbsp;bstr)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=#0000ff&gt;VARIANT&lt;/FONT&gt; var;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=#993366&gt;VariantInit&lt;/FONT&gt;&lt;/FONT&gt;(&amp;amp;var)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=#993366 face=Verdana&gt;V_BSTR&lt;FONT color=#000000 face=돋움&gt;(&amp;amp;var) = &lt;/FONT&gt;SysAllocString&lt;FONT color=#000000 face=돋움&gt;(&amp;amp;bstr);&lt;/FONT&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff face=Verdana&gt;&lt;FONT color=#993366&gt;&lt;FONT color=#000000 face=돋움&gt;&amp;nbsp; &amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#993366 face=Verdana&gt;V_VT&lt;FONT color=#000000 face=돋움&gt;(&amp;amp;var)&lt;/FONT&gt; = SysAllocString&lt;FONT color=#000000 face=돋움&gt;(&amp;amp;bstr);&lt;br /&gt;&lt;/FONT&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;&lt;FONT color=#000000 face=돋움&gt; var;&lt;/FONT&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;}&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-3852225982446187846?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/3852225982446187846/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2011/01/bstr-cstring-char-ccomvariant-variant.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/3852225982446187846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/3852225982446187846'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2011/01/bstr-cstring-char-ccomvariant-variant.html' title='BSTR CString char* CComVariant VARIANT'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-5747852412412412053</id><published>2010-11-12T10:08:00.000+09:00</published><updated>2011-01-11T22:00:43.642+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='아이콘 생성'/><title type='text'>javascript 바탕화면 아이콘 생성</title><content type='html'>&lt;div&gt;&amp;lt;HTML&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;HEAD&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;script language='Javascript'&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;var g_bSwitch = false; &amp;nbsp; &amp;nbsp;//페이지 오픈시 물어보기 설정값.[true:onload시 물어봄.]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if( g_bSwitch ) window.onload = fnIconCreate;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;function fnIconCreate() {&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if( confirm("바탕화면에 바로가기 아이콘을 만드시겠습니까?") ) {&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var WshShell &amp;nbsp; &amp;nbsp; = new ActiveXObject("WScript.Shell");&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Desktoptemp &amp;nbsp; &amp;nbsp; &amp;nbsp;= WshShell.Specialfolders("Desktop"); &amp;nbsp; &amp;nbsp;//path&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var sIconNm &amp;nbsp; &amp;nbsp; &amp;nbsp;= "TEST"; &amp;nbsp; &amp;nbsp;//바탕 화면에 생성될 아이콘 명.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var sName &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= WshShell.CreateShortcut(Desktoptemp + "\\" + sIconNm + ".URL");&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sName.TargetPath = "http://naver.co.kr";&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sName.Save();&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&amp;lt;/script&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;link rel="shortcuticon" href="images/naver.ico"&amp;gt; &amp;lt;!-- 네이버 검색어 : 파비콘 참조 --&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/HEAD&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;BODY&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/div&gt;&lt;div&gt;if( !g_bSwitch )&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;document.write("&amp;lt;input type='button' value='바탕화면 아이콘생성' onclick='fnIconCreate();'&amp;gt;");&lt;/div&gt;&lt;div&gt;&amp;lt;/script&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/BODY&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/HTML&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-5747852412412412053?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/5747852412412412053/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/11/javascript-%EB%B0%94%ED%83%95%ED%99%94%EB%A9%B4-%EC%95%84%EC%9D%B4%EC%BD%98-%EC%83%9D%EC%84%B1.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/5747852412412412053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/5747852412412412053'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/11/javascript-%EB%B0%94%ED%83%95%ED%99%94%EB%A9%B4-%EC%95%84%EC%9D%B4%EC%BD%98-%EC%83%9D%EC%84%B1.html' title='javascript 바탕화면 아이콘 생성'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-9210509011995547028</id><published>2010-09-06T14:10:00.000+09:00</published><updated>2011-01-11T22:00:42.800+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InstallShield'/><category scheme='http://www.blogger.com/atom/ns#' term='InstallScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>InstallScript 문법</title><content type='html'>&lt;div&gt;어떤 프로그램이던지 (스크립트, VB,C/C++등등) 조금이라도 해보신분은 금방 아하~ 하고 아실테지만 아니신 분들은..이게뭐지..싶을지도 모르겠습니다. &lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;사용자 함수 추가&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;스크립트에 함수를 추가 하기 위해서는 prototype을 정의 하고&lt;/div&gt;&lt;div&gt;function body를 작성합니다.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;font color="#008000"&gt;//프로토 타입 정의&lt;/font&gt;&lt;/div&gt;&lt;div&gt;protype GetPathParts(STRING, BYREF STRING, BYREF STRING, BYREF STRING);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;font color="#008000"&gt;//function block 작성&lt;/font&gt;&lt;/div&gt;&lt;div&gt;function GetPathParts(szFullPath, svDrv, svPath, svName)&lt;br /&gt;&amp;nbsp; &amp;nbsp; LONG lResult; &amp;nbsp; &lt;font color="#008000"&gt;//사용할 변수를 정의 합니다.&lt;br /&gt;&lt;/font&gt;begin &lt;font color="#008000"&gt;// 함수의 실제 내용 시작&lt;/font&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; lResult = ParsePath(svDrv, szFullPath, DISK);&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (lResult = 0) then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lResult = ParsePath(svPath, szFullPath, DIRECTORY);&lt;br /&gt;&amp;nbsp; &amp;nbsp; endif;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if (lResult = 0) then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lResult = ParsePath(svName, szFullPath, FILENAME);&lt;br /&gt;&amp;nbsp; &amp;nbsp; endif;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; return lResult;&amp;nbsp; &lt;br /&gt;end;&lt;font color="#008000"&gt; //함수의 끝&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;리턴값은 주로 함수의 에러값을 리턴하며, 숫자값이 아니거나 여러개일경우 함수에 넘겨주는 변수 값을 &lt;font color="#0000ff"&gt;BYREF&lt;/font&gt; 를 이용해서 정의 합니다.( &lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;즉 기본적으로 인스톨쉴드는 By Value방식으로 값을 전달 합니다&lt;/div&gt;&lt;div&gt;////////////////////////////////////////////////////////////////////////&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;정의방법&lt;/div&gt;&lt;div&gt;&lt;font color="#008000"&gt;// Constant definitions&lt;/font&gt;&lt;br /&gt;#define PRODUCT "InstallShield"&lt;br /&gt;#define LIMIT &amp;nbsp;&amp;nbsp; 100&lt;/div&gt;&lt;div&gt;&lt;font color="#008000"&gt;// Variable declarations&lt;/font&gt;&lt;br /&gt;CHAR&amp;nbsp; cVal;&lt;br /&gt;NUMBER nVal;&lt;br /&gt;STRING szName;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;font color="#008000"&gt;// Function declarations&lt;br /&gt;&lt;/font&gt;prototype DisplayMsg (NUMBER, STRING);&lt;br /&gt;prototype GetName (BYREF STRING);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;////////////////////////////////////////////////////////////////////////&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Data Type&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;여러가지 데이타 타입이 있는데 세가지만 설명합니다.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;숫자 데이타는 NUMBER&lt;/div&gt;&lt;div&gt;문자데이터는 STRING&lt;/div&gt;&lt;div&gt;리스트데이터는 LIST&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;가장 많이 쓰는 데이타 타입입니다. 나머지 타입은 Help를 참조해주시기 바랍니다.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;//////////////////////////////////////////////////////////////////////&lt;/div&gt;&lt;div&gt;기타 많이 쓰는 문법구문(예제는 Help에서 가져왔습니다.)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;font color="#008000"&gt;IF문&lt;/font&gt;&lt;/div&gt;&lt;div&gt;if (condition) then&lt;br /&gt;&amp;nbsp; &amp;nbsp; // statements to be executed if condition is true&lt;br /&gt;endif;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;font color="#008000"&gt;FOR문&lt;/font&gt;&lt;/div&gt;&lt;div&gt;for iCount = 1 to 10&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MessageBox ("This appears ten times.", INFORMATION);&lt;br /&gt;&amp;nbsp; &amp;nbsp; endfor;&lt;br /&gt;for iCount = 10 to 100 step 10&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MessageBox ("This appears ten times.", INFORMATION);&lt;br /&gt;&amp;nbsp; &amp;nbsp; endfor;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;font color="#008000"&gt;WHILE문&lt;br /&gt;&lt;/font&gt;nCount = 1;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; while (nCount &amp;lt; 5)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MessageBox ("This is still true.", INFORMATION);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; nCount = nCount + 1;&lt;br /&gt;&amp;nbsp; &amp;nbsp; endwhile;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;font color="#008000"&gt;SWITCH문&lt;br /&gt;&lt;/font&gt;STRING szMsg, svResult;&lt;br /&gt;&amp;nbsp; &amp;nbsp; NUMBER nvResult;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; GetSystemInfo (VIDEO, nvResult, svResult);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; switch (nvResult)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case IS_UNKNOWN: &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; szMsg = "The user's video is unknown.";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case IS_EGA:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; szMsg = "EGA resolution.";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case IS_VGA:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; szMsg = "VGA resolution.";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case IS_SVGA:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; szMsg = "Super VGA (800 x 600) resolution.";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case IS_XVGA:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; szMsg = "XVGA (1024 x 768) resolution.";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; case IS_UVGA:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; szMsg = "Greater than 1024 x 768 resolution.";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; default:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; szMsg = "Error";&lt;br /&gt;&amp;nbsp; &amp;nbsp; endswitch;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; MessageBox (szMsg, INFORMATION);&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-9210509011995547028?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/9210509011995547028/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/09/installscript-%EB%AC%B8%EB%B2%95.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/9210509011995547028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/9210509011995547028'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/09/installscript-%EB%AC%B8%EB%B2%95.html' title='InstallScript 문법'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-46224337365098326</id><published>2010-08-31T18:33:00.000+09:00</published><updated>2011-01-11T22:00:42.033+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='XMLHTTP'/><title type='text'>XMLHTTP</title><content type='html'>&lt;P&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;3.1 responseText &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;속성을&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;속성을&lt;/SPAN&gt;&lt;/SPAN&gt; 이용한 단순 문자열 다루기&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;2장에 이어 이번에는 innerHTML 속성을 이용한 샘플 코드를 살펴보자.&lt;/P&gt;&lt;P&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br /&gt;&amp;nbsp; "&lt;A class=con_link href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target=_blank&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&lt;/A&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;"&amp;gt;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;"&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp;&amp;lt;html xmlns="&lt;A class=con_link href="http://www.w3.org/1999/xhtml" target=_blank&gt;http://www.w3.org/1999/xhtml&lt;/A&gt;"&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Using responseText with innerHTML&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var xmlHttp;&lt;/P&gt;&lt;P&gt;function createXMLHttpRequest() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;if&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;if&lt;/SPAN&gt;&lt;/SPAN&gt; (window.ActiveXObject) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; } &lt;br /&gt;&amp;nbsp; &amp;nbsp; else if (window.XMLHttpRequest) {&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; xmlHttp = new XMLHttpRequest();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &lt;br /&gt;function startRequest() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; createXMLHttpRequest();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;xmlHttp.onreadystatechange&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;xmlHttp.onreadystatechange&lt;/SPAN&gt;&lt;/SPAN&gt; = handleStateChange;&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.open("GET", "innerHTML.xml", true);&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.send(null);&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;}&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;function handleStateChange() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(xmlHttp.readyState == &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;4)&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;4)&lt;/SPAN&gt;&lt;/SPAN&gt; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(xmlHttp.status == 200) {&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#333333&gt;&lt;STRONG&gt;document.getElementById("results").innerHTML = xmlHttp.responseText;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;lt;/head&amp;gt;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;lt;/head&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;form action="#"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;lt;input&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;lt;input&lt;/SPAN&gt;&lt;/SPAN&gt; type="button" value="Search for Today's Activities" onclick="startRequest();"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/form&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;lt;div id="results"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;&amp;lt;3-1 innerHTML.html &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;의&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;의&lt;/SPAN&gt;&lt;/SPAN&gt; 내용&amp;gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV align=left&gt;&amp;lt;table border="1"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;tbody&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;tr&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;th&amp;gt;Activity Name&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;th&amp;gt;Location&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;th&amp;gt;Time&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;tr&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;Waterskiing&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;Dock #1&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;9:00 AM&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/tr&amp;gt; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;tr&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;Volleyball&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;East Court&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;2:00 PM&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/tr&amp;gt; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;tr&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;Hiking&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;Trail 3&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;3:30 PM&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/tr&amp;gt; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/tbody&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;&amp;lt;3-2 innerHTML.xml 의 내용&amp;gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;2장&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;2장&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;lt;2-1&amp;gt; 와 &amp;lt;3-1&amp;gt;의 가장 큰 차이점이라면 XHR 객체의 responseText 속성값을 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;이용하여&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;이용하여&lt;/SPAN&gt;&lt;/SPAN&gt; div 엘리먼트에 문자열을 할당하는 부분이다. 아래 그림은 innerHTML.html 을 실행한 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;결과이다.&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;결과이다.&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;CENTER&gt;&lt;DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"&gt;&lt;IMG style="WIDTH: 286px; HEIGHT: 162px" alt="" src="http://fs.textcube.com/blog/1/18391/attach/XKea8FH6dc.jpg"&gt;&lt;/DIV&gt;&lt;/CENTER&gt;&lt;CENTER&gt;&lt;STRONG&gt;&amp;lt;3-3 innerHTML &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;실행&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;실행&lt;/SPAN&gt;&lt;/SPAN&gt; 결과&amp;gt;&lt;/STRONG&gt;&lt;/CENTER&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;CENTER&gt;&amp;nbsp;&lt;/CENTER&gt;&lt;CENTER&gt;&amp;nbsp;&lt;/CENTER&gt;&lt;DIV align=left&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;3.2 responseXML 속성을 이용한 DOM 시작하기&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;지금까지의 예제에서는 간단하고 단순한 문자열을 처리하는데 적합한 XHR 객체의 resonseText 속성만을 살펴보았다. 하지만 대단히 복잡한 응답데이터의 경우는 단순한 문자열로 처리할 수 없으며 XML 형식으로 처리하는 것이 훨씬 논리적이고 효율적일 것이다. 그러면 어떻게 브라우저는 서버로부터 받은 XML 형식의 데이터를 처리할 수 있는 것일까? XML 문서는 W3C 의 DOM 을 이용해서 처리된다. DOM 을 지원하는 브라우저들은 당연히 XML 문서를 다루는 많은 API 를 구현하고 있기 때문이다.&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;DOM 은 HTML 과 XML 을 다루는 API 를 제공하고 있으며, 스크립트를 통해서 다큐먼트에 접근할 수 있도록 정의되어 있다. &lt;STRONG&gt;&lt;FONT color=#333333&gt;자바스크립트는 DOM 에 접근할 수 있고 DOM 을 다룰수 있는 스크립팅 언어이다.&lt;/FONT&gt;&lt;/STRONG&gt; 다큐먼트의 모든 요소들은 DOM 의 부분들이기 때문에 요소의 속성과 메소드들은 자바스크립트로 제어가 가능하다.&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;다음은 XML 문서를 처리하기 위한 DOM 요소의 속성을 살펴보도록 하자.&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;childNodes&lt;/FONT&gt;&lt;/STRONG&gt; : 현재 요소의 자식을 배열로 표현한다.&lt;/DIV&gt;&lt;DIV align=left&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;firstChild&lt;/FONT&gt;&lt;/STRONG&gt; : 현재 요소의 첫번째 자식이다.&lt;/DIV&gt;&lt;DIV align=left&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;lastChild&lt;/FONT&gt;&lt;/STRONG&gt; : 현재 요소의 마지막 자식이다.&lt;/DIV&gt;&lt;DIV align=left&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;nextSibling&lt;/FONT&gt;&lt;/STRONG&gt; : 현재 요소와 바로 다음의 요소를 의미한다.&lt;/DIV&gt;&lt;DIV align=left&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;nodeValue&lt;/FONT&gt;&lt;/STRONG&gt; : 해당 요소의 값을 읽고 쓸 수 있는 속성을 정의한다.(&lt;STRONG&gt;=data&lt;/STRONG&gt;)&lt;/DIV&gt;&lt;DIV align=left&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;parentNode&lt;/FONT&gt;&lt;/STRONG&gt; : 해당 요소의 부모노드이다.&lt;/DIV&gt;&lt;DIV align=left&gt;&lt;FONT color=#333333&gt;&lt;STRONG&gt;previousSibling&lt;/STRONG&gt;&lt;/FONT&gt; : 현재 요소와 바로 이전의 요소를 의미한다.&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;다음은 XML 다큐먼트를 다루는 유용한 DOM 요소의 메소드를 살펴보자.&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;getElementById(id)&lt;/FONT&gt;&lt;/STRONG&gt; : 다큐먼트에서 특정한 id 속성값을 가지고 있는 요소를 반환한다.&lt;/DIV&gt;&lt;DIV align=left&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;getElementsByTagName(name)&lt;/FONT&gt;&lt;/STRONG&gt; : 특정한 태그 이름을 가지고 있는 자식 요소로 구성된 배열을 리턴한다.&lt;/DIV&gt;&lt;DIV align=left&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;hasChildNodes()&lt;/FONT&gt;&lt;/STRONG&gt; : 해당 요소가 자식 요소를 포함하고 있는지를 나타내는 Boolean 값을 리턴한다.&lt;/DIV&gt;&lt;DIV align=left&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;getAttribute(name)&lt;/FONT&gt;&lt;/STRONG&gt; : 특정한 name 에 해당하는 요소의 속성값을 리턴한다.&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;이번에는 XHR 객체의 responseXML 속성을 이용한 예제를 살펴봄으로써 XML 다큐먼트를 다루기 위한 DOM 객체의 속성과 메소드에 대해서 알아본다.&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br /&gt;&amp;nbsp; "&lt;A class=con_link href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target=_blank&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&lt;/A&gt;"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="&lt;A class=con_link href="http://www.w3.org/1999/xhtml" target=_blank&gt;http://www.w3.org/1999/xhtml&lt;/A&gt;"&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Parsing XML Responses with the W3C DOM&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var xmlHttp;&lt;br /&gt;var requestType = "";&lt;/DIV&gt;&lt;DIV align=left&gt;function createXMLHttpRequest() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (window.ActiveXObject) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;&amp;nbsp; &amp;nbsp; } &lt;br /&gt;&amp;nbsp; &amp;nbsp; else if (window.XMLHttpRequest) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xmlHttp = new XMLHttpRequest();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;function startRequest(requestedList) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; requestType = requestedList;&lt;br /&gt;&amp;nbsp; &amp;nbsp; createXMLHttpRequest();&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.onreadystatechange = handleStateChange;&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.open("GET", "parseXML.xml", true);&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.send(null);&lt;br /&gt;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;function handleStateChange() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(xmlHttp.readyState == 4) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(xmlHttp.status == 200) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(requestType == "north") {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; listNorthStates();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else if(requestType == "all") {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; listAllStates();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;function listNorthStates() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#333333&gt;var xmlDoc = xmlHttp.responseXML;&lt;br /&gt;&amp;nbsp; &amp;nbsp;var northNode = xmlDoc.getElementsByTagName("north")[0];&lt;br /&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var out = "Northern States";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#333333&gt;var northStates = northNode.getElementsByTagName("state");&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; outputList("Northern States", northStates);&lt;br /&gt;}&lt;/DIV&gt;&lt;DIV align=left&gt;function listAllStates() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=#333333&gt;&lt;STRONG&gt;var xmlDoc = xmlHttp.responseXML;&lt;br /&gt;&amp;nbsp; &amp;nbsp;var allStates = xmlDoc.getElementsByTagName("state");&lt;br /&gt;&lt;/STRONG&gt;&amp;nbsp; &amp;nbsp; &lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; outputList("All States in Document", allStates);&lt;br /&gt;}&lt;/DIV&gt;&lt;DIV align=left&gt;function outputList(title, states) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var out = title;&lt;br /&gt;&amp;nbsp; &amp;nbsp; var currentState = null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; for(var i = 0; i &amp;lt; states.length; i++) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; currentState = states[i];&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; out = out + "\n- " + &lt;STRONG&gt;&lt;FONT color=#333333&gt;currentState.childNodes[0].nodeValue;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; alert(out);&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;h1&amp;gt;Process XML Document of U.S. States&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;form action="#"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;input type="button" value="View All Listed States" onclick="startRequest('all');"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;input type="button" value="View All Listed Northern States" onclick="startRequest('north');"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/DIV&gt;&lt;DIV align=center&gt;&lt;br /&gt;&lt;STRONG&gt;&amp;lt;3-4 parseXML.html 의 내용&amp;gt;&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;states&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;north&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;state&amp;gt;Minnesota&amp;lt;/state&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;state&amp;gt;Iowa&amp;lt;/state&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;state&amp;gt;North Dakota&amp;lt;/state&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/north&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;south&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;state&amp;gt;Texas&amp;lt;/state&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;state&amp;gt;Oklahoma&amp;lt;/state&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;state&amp;gt;Louisiana&amp;lt;/state&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/south&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;east&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;state&amp;gt;New York&amp;lt;/state&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;state&amp;gt;North Carolina&amp;lt;/state&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;state&amp;gt;Massachusetts&amp;lt;/state&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/east&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;west&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;state&amp;gt;California&amp;lt;/state&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;state&amp;gt;Oregon&amp;lt;/state&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;state&amp;gt;Nevada&amp;lt;/state&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/west&amp;gt;&lt;br /&gt;&amp;lt;/states&amp;gt;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=center&gt;&lt;STRONG&gt;&amp;lt;3-5 parseXML.xml 의 내용&amp;gt;&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;일단 &amp;lt;3-4&amp;gt;의 실행결과를 살펴본 후 핵심원리를 파악해 보자&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;CENTER&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/CENTER&gt;&lt;CENTER&gt;&amp;nbsp;&lt;/CENTER&gt;&lt;CENTER&gt;&lt;DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"&gt;&lt;IMG style="WIDTH: 389px; HEIGHT: 168px" alt="" src="http://fs.textcube.com/blog/1/18391/attach/XKqbXMmFSt.jpg"&gt;&lt;/DIV&gt;&lt;/CENTER&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;CENTER&gt;&amp;nbsp;&lt;/CENTER&gt;&lt;CENTER&gt;&lt;STRONG&gt;&amp;lt;3-6 parseXML.html 을 실행했을때의 그림&amp;gt;&lt;/STRONG&gt;&lt;/CENTER&gt;&lt;CENTER&gt;&amp;nbsp;&lt;/CENTER&gt;&lt;DIV align=left&gt;그림 &amp;lt;3-6&amp;gt; 은 parseXML.html 을 실행했을 때의 화면으로 View All Listed States 버튼을 눌렀을때의 결과 및 View All Listed Northern States 버튼을 눌렀을때의 결과 화면을 아래에 표시하였다.&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;CENTER&gt;&lt;DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"&gt;&lt;IMG style="WIDTH: 215px; HEIGHT: 260px" alt="" src="http://fs.textcube.com/blog/1/18391/attach/XOOJFcj1Py.jpg"&gt;&lt;/DIV&gt;&lt;/CENTER&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;&amp;lt;3-7 View All Listed States 버튼을 눌렀을때의 결과 화면&amp;gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"&gt;&lt;IMG style="WIDTH: 215px; HEIGHT: 133px" alt="" src="http://fs.textcube.com/blog/1/18391/attach/XHA3ScCHYt.jpg"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;CENTER&gt;&lt;CENTER&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/CENTER&gt;&lt;/CENTER&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;&amp;lt;3-8 View All Listed Northern &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;States&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;States&lt;/SPAN&gt;&lt;/SPAN&gt; 버튼을 눌렀을때의 결과 화면&amp;gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;예제 3-4 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;는&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;는&lt;/SPAN&gt;&lt;/SPAN&gt; 다소 길어보이나 XHR 객체의 responseXML 속성을 이용한 DOM 객체를 다루는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;속성&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;속성&lt;/SPAN&gt;&lt;/SPAN&gt; 및 메소드를 다루고 있다는 면에서 반드시 이해하고 넘어가야만 한다. 소스 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;패턴은&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;패턴은&lt;/SPAN&gt;&lt;/SPAN&gt; 지금까지의 예제와 비슷하므로 DOM 속성 및 메소드가 사용된 주요 부분만 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;설명하겠다.&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;설명하겠다.&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;listAllStates() 메소드의 아래 라인을 주목해 보자.&lt;/P&gt;&lt;P align=left&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;var xmlDoc = xmlHttp.responseXML;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#ff3399&gt;&lt;FONT color=#333333&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&amp;gt;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt; XHR 객체는 responseXML 속성을 이용해서 서버로부터의 XML 결과 다큐먼트를 다룰수 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;있는&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;있는&lt;/SPAN&gt;&lt;/SPAN&gt; DOM 속성 및 메소드를 사용할 수 있게 해준다는 것을 알 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;수&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;수&lt;/SPAN&gt;&lt;/SPAN&gt; 있다.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#ff3399&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;var &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;allStates&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;allStates&lt;/SPAN&gt;&lt;/SPAN&gt; = xmlDoc.getElementsByTagName("state");&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=left&gt;=&amp;gt;XML 결과 다큐먼트로부터 state 자식 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;엘리먼트들로&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;엘리먼트들로&lt;/SPAN&gt;&lt;/SPAN&gt; 구성된 배열을 얻어와 allStates 변수에 할당하는 로직이다.&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;listNorthStates()&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;listNorthStates()&lt;/SPAN&gt;&lt;/SPAN&gt; 메소드를 살펴보자. &lt;/P&gt;&lt;P align=left&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;var northNode = xmlDoc.getElementsByTagName("north")[0];&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;=&amp;gt; XML 다큐먼트에서 north 앨리먼트는 유일하게 하나만 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;존재하므로&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;존재하므로&lt;/SPAN&gt;&lt;/SPAN&gt; 자식 앨리먼트로 구성된 배열중에서 첫번째(0) 배열값을 얻어와야 한다. 위 식은 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;아래와&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;아래와&lt;/SPAN&gt;&lt;/SPAN&gt; 같이 수정해도 결과는 같다.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&lt;STRONG&gt;var northNode &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&lt;/SPAN&gt;&lt;/SPAN&gt; xmlDoc.getElementsByTagName("north").item(0);&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;outputList() 메소드를 살펴보자.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;out = out + "\n- " + &lt;STRONG&gt;&lt;FONT color=#333333&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;currentState.childNodes[0].nodeValue;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;currentState.childNodes[0].nodeValue;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;=&amp;gt; 이부분은 각각의 state 앨리먼트의 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;첫번째&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;첫번째&lt;/SPAN&gt;&lt;/SPAN&gt; 자식 노드의 값을 out 변수에 계속 연결하는 부분이다. state 앨리먼트의 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;값을&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;값을&lt;/SPAN&gt;&lt;/SPAN&gt; 표현하고 있는 부분도 XML 에서는 하나의 text 엘리먼트이다. 따라서 각각의 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;state&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;state&lt;/SPAN&gt;&lt;/SPAN&gt; 엘리먼트의 첫번째 text 자식 엘리먼트를 childNodes[0] 으로 표시한 것이며 그 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;값을&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;값을&lt;/SPAN&gt;&lt;/SPAN&gt; 가져오기 위해서 nodeValue 속성이 사용된 것이다. nodeValue 는 아래와 같이 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;data&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;data&lt;/SPAN&gt;&lt;/SPAN&gt; 속성을 사용해도 같은 결과를 얻는다.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&lt;FONT color=#000000&gt;out &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&lt;/SPAN&gt;&lt;/SPAN&gt; out + "\n- " + &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;currentState.childNodes[0].data;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333 size=4&gt;&lt;STRONG&gt;3.3 Dynamic DOM 객체 다루기&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT size=4&gt;&lt;FONT size=2&gt;&lt;FONT size=1&gt;&lt;FONT size=1&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;지금까지는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;DOM&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;DOM&lt;/SPAN&gt;&lt;/SPAN&gt; 의 기초적인 속성 및 메소드들을 다루어 봤다. 이런 속성으로는 다이나믹한 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;웹페이지를&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;웹페이지를&lt;/SPAN&gt;&lt;/SPAN&gt; 구성하는데 한계가 있다. 웹페이지 전체가 리로딩 되지 않고 적절한 시점에 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;필요한&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;필요한&lt;/SPAN&gt;&lt;/SPAN&gt; 부분만 서버와 통신하여 데이터가 수정되는 동적인 웹페이지를 만들려면 더 다양한 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;DOM&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;DOM&lt;/SPAN&gt;&lt;/SPAN&gt; 의 속성을 익혀야 한다. 자, 그럼 컨텐츠를 동적으로 생성할 수 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;있게&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;있게&lt;/SPAN&gt;&lt;/SPAN&gt; 해주는 W3C DOM 의 속성과 메소드에는 어떤것들이 있는지 알아보자.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;document.createElement(tagName)&lt;/FONT&gt;&lt;/STRONG&gt; : tagName 으로된 엘리먼트를 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;생성한다.&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;생성한다.&lt;/SPAN&gt;&lt;/SPAN&gt; div 를 메소드 파라미터로 입력하면 div 엘리먼트가 생성된다.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;document.createTextNode(text)&lt;/FONT&gt;&lt;/STRONG&gt; : 정적 텍스트를 담고 있는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;노드를&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;노드를&lt;/SPAN&gt;&lt;/SPAN&gt; 생성한다.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;&amp;lt;element&amp;gt;.appendChild(childNode)&lt;/FONT&gt;&lt;/STRONG&gt; : &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;특정&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;특정&lt;/SPAN&gt;&lt;/SPAN&gt; 노드를 현재 엘리먼트의 자식 노드에 추가시킨다. (예를들어 select 엘리먼트에 option &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;엘리먼트&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;엘리먼트&lt;/SPAN&gt;&lt;/SPAN&gt; 추가)&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;&amp;lt;element&amp;gt;.getAttribute(name)&lt;/FONT&gt;&lt;/STRONG&gt; : &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;속성명이&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;속성명이&lt;/SPAN&gt;&lt;/SPAN&gt; name 인 속성값을 반환한다.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;&amp;lt;element&amp;gt;.setAttribute(name, &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;value)&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;value)&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/FONT&gt;&lt;/STRONG&gt;: 속성값 value 를 속성명이 name 인 곳에 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;저장한다.&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;저장한다.&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;&amp;lt;element&amp;gt;.insertBefore(newNode, tartgetNode)&lt;/FONT&gt;&lt;/STRONG&gt; : &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;newNode&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;newNode&lt;/SPAN&gt;&lt;/SPAN&gt; 를&amp;nbsp; tartgetNode 전에 삽입한다.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;&amp;lt;element&amp;gt;.removeAttribute(name)&lt;/FONT&gt;&lt;/STRONG&gt; : 엘리먼트에서 name 속성을 제거한다.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;&amp;lt;element&amp;gt;.removeChild(childNode)&lt;/FONT&gt;&lt;/STRONG&gt; : 자식 엘리먼트를 제거한다.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;&amp;lt;element&amp;gt;.replaceChild(newNode, oldNode)&lt;/FONT&gt;&lt;/STRONG&gt; : oldNode 를 newNode 로 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;치환한다.&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;치환한다.&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&lt;STRONG&gt;&lt;FONT color=#333333&gt;&amp;lt;element&amp;gt;.hasChildNodes()&lt;/FONT&gt;&lt;/STRONG&gt; : 자식 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;노드가&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;노드가&lt;/SPAN&gt;&lt;/SPAN&gt; 존재하는지 여부를 판단한다. 리턴형식은 Boolean 이다.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;여기서 한가지 짚고 넘어갈 부분이있다. 현재 거의 모든 브라우저는 DOM &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;을&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;을&lt;/SPAN&gt;&lt;/SPAN&gt; 지원하고 있으며 API 또한 비슷하게 동작하도록 구현되어 있다. 정확히 말하자면 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;DOM&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;DOM&lt;/SPAN&gt;&lt;/SPAN&gt; API 의 구현이 브라우저마다 다소 차이가 있다는 말이다. &lt;STRONG&gt;&lt;FONT color=#333333&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;가장&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;가장&lt;/SPAN&gt;&lt;/SPAN&gt; 호환이 안되는 브라우저는 다름아닌 인터넷 익스플로어다.&lt;/FONT&gt;&lt;/STRONG&gt; AJAX 의 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;핵심은&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;핵심은&lt;/SPAN&gt;&lt;/SPAN&gt; XMLHttpRequest 객체이고 가장 먼저 이 객체를 구현하고 제공한 브라우저가 IE5임을 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;감안할때&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;감안할때&lt;/SPAN&gt;&lt;/SPAN&gt; 상당히 아이러니컬하지 않은가? 2000년 IE 가 전세계 브라우저의 시장점유율 95% &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;차지할&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;차지할&lt;/SPAN&gt;&lt;/SPAN&gt; 즈음, IE 에 대적할 만한 브라우저는 존재하지 않았다. 마이크로소프트가 다양한 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;웹표준&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;웹표준&lt;/SPAN&gt;&lt;/SPAN&gt; 구현을 포기했던 시점이 바로 이때부터다. 이때까지 XHR 의 사용은 당연히 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;저조할&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;저조할&lt;/SPAN&gt;&lt;/SPAN&gt; 수밖에 없었다. 하지만 모질라와 사파리가 잇따라 광범위하게 지원을 시작하게 되자 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;상황은&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;상황은&lt;/SPAN&gt;&lt;/SPAN&gt; 변하기 시작했고,&amp;nbsp; 사용율이 극히 부진했던 XHR 객체는 W3C 의 표준으로까지 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;자리매김하게&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;자리매김하게&lt;/SPAN&gt;&lt;/SPAN&gt; 되었다. 더우기 구글맵, 구글 Suggest, Gmail, Flickr, Netflix 등에서 AJAX &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;를&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;를&lt;/SPAN&gt;&lt;/SPAN&gt; 사용하자 이제는 명실상부한 웹의 표준으로 거듭나게 되었다. 너무 늦었지만 Microsoft &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;쪽에서도&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;쪽에서도&lt;/SPAN&gt;&lt;/SPAN&gt; 많은 분발을 촉구한다. 그러면 IE 에서 문제가 되고 있는 DOM &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;객체의&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;객체의&lt;/SPAN&gt;&lt;/SPAN&gt; 특징을 간략히 살펴보자.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;첫째, IE 에서는 &amp;lt;table&amp;gt; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;에&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;에&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;lt;tr&amp;gt; 을 추가할때 appendChilde() 메소드를 사용하더라도 &amp;lt;tr&amp;gt; 은 나타나지 않는다. &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;따라서&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;따라서&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;lt;tr&amp;gt; 을 &amp;lt;tbody&amp;gt; 에 추가해 주는 방식을 사용해야 모든 브라우저에서 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;동작하는&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;동작하는&lt;/SPAN&gt;&lt;/SPAN&gt; 코드를 작성할 수 있다.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;둘째, IE 에서는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;setAttribute()&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;setAttribute()&lt;/SPAN&gt;&lt;/SPAN&gt; 메소드에 class 속성을 이용할 수 없다. setAttribute("class", "newClassName") 한 후에 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;다시&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;다시&lt;/SPAN&gt;&lt;/SPAN&gt; setAttribute("className", "newClassName") 을 해야 모든 브라우저의 호환성을 보장할 수 있다.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;셋째, IE 에서는 style 속성에 setAttribute() 메소드를 이용할 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;수&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;수&lt;/SPAN&gt;&lt;/SPAN&gt; 없다. &amp;lt;element&amp;gt;.setAttribute("style, font-weight:bold;") 라고 하는 대신에 &amp;lt;element&amp;gt;.style.cssText = "font-weight:bold"&amp;nbsp; 라고 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;해&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;해&lt;/SPAN&gt;&lt;/SPAN&gt; 줘야 모든 브라우저에서 제대로 작동한다.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&lt;FONT color=#333333&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;다음은&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;다음은&lt;/SPAN&gt;&lt;/SPAN&gt; DOM 의 동적 속성 및 메소드를 이용해서 다이나믹한 웹페이지를 생성하는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;예제를&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;예제를&lt;/SPAN&gt;&lt;/SPAN&gt; 다루어 보겠다.&lt;/FONT&gt;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;XHTML&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;XHTML&lt;/SPAN&gt;&lt;/SPAN&gt; 1.0 Strict//EN"&lt;br /&gt;&amp;nbsp; "&lt;A class=con_link href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target=_blank&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&lt;/A&gt;"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="&lt;A class=con_link href="http://www.w3.org/1999/xhtml" target=_blank&gt;http://www.w3.org/1999/xhtml&lt;/A&gt;"&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Dynamically &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;Editing&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;Editing&lt;/SPAN&gt;&lt;/SPAN&gt; Page Content&amp;lt;/title&amp;gt;&lt;/P&gt;&lt;P align=left&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var xmlHttp;&lt;/P&gt;&lt;P align=left&gt;function createXMLHttpRequest() &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;{&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;{&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; if (window.ActiveXObject) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xmlHttp &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&lt;/SPAN&gt;&lt;/SPAN&gt; new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;&amp;nbsp; &amp;nbsp; } &lt;br /&gt;&amp;nbsp; &amp;nbsp; else if &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;(window.XMLHttpRequest)&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;(window.XMLHttpRequest)&lt;/SPAN&gt;&lt;/SPAN&gt; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xmlHttp = new XMLHttpRequest();&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; }&lt;br /&gt;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;function doSearch() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;createXMLHttpRequest();&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;createXMLHttpRequest();&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.onreadystatechange = handleStateChange;&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.open("GET", "dynamicContent.xml", true);&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; xmlHttp.send(null);&lt;br /&gt;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;function handleStateChange() {&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; if(xmlHttp.readyState == 4) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(xmlHttp.status == &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;200)&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;200)&lt;/SPAN&gt;&lt;/SPAN&gt; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; clearPreviousResults();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; parseResults();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; }&lt;br /&gt;}&lt;/P&gt;&lt;P align=left&gt;function clearPreviousResults() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var header &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&lt;/SPAN&gt;&lt;/SPAN&gt; document.getElementById("header");&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(header.hasChildNodes()) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#333333&gt;header.removeChild(header.childNodes[0]);&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp; &amp;nbsp; var &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;tableBody&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;tableBody&lt;/SPAN&gt;&lt;/SPAN&gt; = document.getElementById("resultsBody");&lt;br /&gt;&amp;nbsp; &amp;nbsp; while(tableBody.childNodes.length &amp;gt; 0) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#333333&gt;tableBody.removeChild(tableBody.childNodes[0]);&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;/P&gt;&lt;P align=left&gt;function parseResults() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var results = xmlHttp.responseXML;&lt;/P&gt;&lt;P align=left&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; var property = null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; var address = &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;"";&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;"";&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var price = "";&lt;br /&gt;&amp;nbsp; &amp;nbsp; var comments &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&lt;/SPAN&gt;&lt;/SPAN&gt; "";&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp; &amp;nbsp; var properties = results.getElementsByTagName("property");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;for(var&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;for(var&lt;/SPAN&gt;&lt;/SPAN&gt; i = 0; i &amp;lt; properties.length; i++) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; property = properties[i];&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; address = &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;property.getElementsByTagName("address")[0].firstChild.nodeValue;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;property.getElementsByTagName("address")[0].firstChild.nodeValue;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; price = property.getElementsByTagName("price")[0].firstChild.nodeValue;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; comments = property.getElementsByTagName("comments")[0].firstChild.nodeValue;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; addTableRow(address, price, comments);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#333333&gt;var header = document.createElement("h2");&lt;br /&gt;&amp;nbsp; &amp;nbsp;var headerText &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&lt;/SPAN&gt;&lt;/SPAN&gt; document.createTextNode("Results:");&lt;br /&gt;&amp;nbsp; &amp;nbsp;header.appendChild(headerText);&lt;br /&gt;&amp;nbsp; &amp;nbsp;document.getElementById("header").appendChild(header);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp;document.getElementById("resultsTable").setAttribute("border", &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;"1");&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;"1");&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&lt;/FONT&gt;&lt;/STRONG&gt;}&lt;/P&gt;&lt;P align=left&gt;&lt;br /&gt;function addTableRow(address, price, comments) {&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &lt;FONT color=#333333&gt;&lt;STRONG&gt;var row = document.createElement("tr");&lt;br /&gt;&amp;nbsp; &amp;nbsp;var cell &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&lt;/SPAN&gt;&lt;/SPAN&gt; createCellWithText(address);&lt;br /&gt;&amp;nbsp; &amp;nbsp;row.appendChild(cell);&lt;br /&gt;&lt;/STRONG&gt;&amp;nbsp; &amp;nbsp; &lt;/FONT&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;cell&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;cell&lt;/SPAN&gt;&lt;/SPAN&gt; = createCellWithText(price);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#333333&gt;row.appendChild(cell);&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; cell = createCellWithText(comments);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#333333&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;row.appendChild(cell);&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;row.appendChild(cell);&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#333333&gt;document.getElementById("resultsBody").appendChild(row);&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;}&lt;/P&gt;&lt;P align=left&gt;function createCellWithText(text) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var cell &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&lt;/SPAN&gt;&lt;/SPAN&gt; document.createElement("td");&lt;br /&gt;&amp;nbsp; &amp;nbsp; var textNode = document.createTextNode(text);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#333333&gt;cell.appendChild(textNode);&lt;/FONT&gt;&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; return cell;&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;}&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/P&gt;&lt;P align=left&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;h1&amp;gt;Search Real Estate Listings&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;form action="#"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Show listings from &lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;lt;select&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;option &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;value="50000"&amp;gt;$50,000&amp;lt;/option&amp;gt;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;value="50000"&amp;gt;$50,000&amp;lt;/option&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;option value="100000"&amp;gt;$100,000&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;option value="150000"&amp;gt;$150,000&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/select&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; to &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;lt;select&amp;gt;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;lt;select&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;option value="100000"&amp;gt;$100,000&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;option value="150000"&amp;gt;$150,000&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;lt;option value="200000"&amp;gt;$200,000&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/select&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;lt;input&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;lt;input&lt;/SPAN&gt;&lt;/SPAN&gt; type="button" value="Search" onclick="doSearch();"/&amp;gt; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;/P&gt;&lt;P align=left&gt;&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;lt;span&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;lt;span&lt;/SPAN&gt;&lt;/SPAN&gt; id="header"&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;/span&amp;gt;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp; &amp;lt;table id="resultsTable" width="75%" &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;border="0"&amp;gt;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;border="0"&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;tbody id="resultsBody"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/tbody&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;lt;/html&amp;gt;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;lt;/html&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;&amp;lt;3-9 dynamicContent.html 의 내용&amp;gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;properties&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;lt;address&amp;gt;812 Gwyn Ave&amp;lt;/address&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;price&amp;gt;$100,000&amp;lt;/price&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;lt;comments&amp;gt;Quiet, serene neighborhood&amp;lt;/comments&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;address&amp;gt;3308 James Ave S&amp;lt;/address&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;lt;price&amp;gt;$110,000&amp;lt;/price&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;comments&amp;gt;Close to schools, &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;shopping,&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;shopping,&lt;/SPAN&gt;&lt;/SPAN&gt; entertainment&amp;lt;/comments&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;property&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;lt;address&amp;gt;98320 County Rd 113&amp;lt;/address&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;lt;price&amp;gt;$115,000&amp;lt;/price&amp;gt;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;lt;price&amp;gt;$115,000&amp;lt;/price&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;comments&amp;gt;Small acreage outside of town&amp;lt;/comments&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;lt;/property&amp;gt; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;/properties&amp;gt;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;&amp;lt;3-10 dynamicContent.xml &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;의&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;의&lt;/SPAN&gt;&lt;/SPAN&gt; 내용&amp;gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;STRONG&gt;&lt;CENTER&gt;&lt;DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"&gt;&lt;IMG style="WIDTH: 508px; HEIGHT: 265px" alt="" src="http://fs.textcube.com/blog/1/18391/attach/XOarOrUCy7.jpg"&gt;&lt;/DIV&gt;&lt;/CENTER&gt;&lt;CENTER&gt;&amp;nbsp;&lt;/CENTER&gt;&lt;CENTER&gt;&amp;lt;3-10 샘플 3-9의 실행결과 화면&amp;gt;&lt;/CENTER&gt;&lt;CENTER&gt;&amp;nbsp;&lt;/CENTER&gt;&lt;/STRONG&gt;&lt;P align=left&gt;샘플 3-9를 보면 동적 메소드가 적용된 부분은 굵게 표시를 해 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;놓았다.&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;놓았다.&lt;/SPAN&gt;&lt;/SPAN&gt; 이부분을 이전 샘플들과 비교해 가면서 보면 코드를 이해하는데 큰 어려움은 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;없으리라&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;없으리라&lt;/SPAN&gt;&lt;/SPAN&gt; 생각한다. 실행결과는 3-10 그림에 나와있다. Search 버튼을 누르면 dynamicContent.xml 의 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;내용을&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;내용을&lt;/SPAN&gt;&lt;/SPAN&gt; 테이블로 표시한다. Search 버튼을 누르면 기존에 존재하는 테이블 row 를 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;동적으로&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;동적으로&lt;/SPAN&gt;&lt;/SPAN&gt; 제거한 후에 동적으로 다시 그린다. 이번 예제는 이 부분이 핵심으므로 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;가장&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;가장&lt;/SPAN&gt;&lt;/SPAN&gt; 중요한 코드만을 설명하겠다.&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;function createCellWithText(text) {&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; var cell = document.createElement("td");&lt;br /&gt;&amp;nbsp; &amp;nbsp; var textNode = document.createTextNode(text);&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; cell.appendChild(textNode);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; return cell;&lt;br /&gt;}&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;위 메소드는 테이블 컬럼(&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;)에 해당하는 정보를 생성하는 메소드이다. &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;3-10&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;3-10&lt;/SPAN&gt;&lt;/SPAN&gt; 그림을 보면 하나의 row 에는 3개의 컬럼 요소가 있으며 동적으로 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;하나의&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;하나의&lt;/SPAN&gt;&lt;/SPAN&gt; 행을 생성하기 위해서는 address, price, comments 에 해당하는 td 요소를 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;각각&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;각각&lt;/SPAN&gt;&lt;/SPAN&gt; 생성해야 한다.&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;function addTableRow(address, price, comments) {&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; var row = document.createElement("tr");&lt;br /&gt;&amp;nbsp; &amp;nbsp; var cell = &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;createCellWithText(address);&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;createCellWithText(address);&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; row.appendChild(cell);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; cell = &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;createCellWithText(price);&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;createCellWithText(price);&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; row.appendChild(cell);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; cell = &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;createCellWithText(comments);&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;createCellWithText(comments);&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; row.appendChild(cell);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; document.getElementById("resultsBody").appendChild(row);&lt;br /&gt;}&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;위 메소드는 테이블 행(&amp;lt;tr&amp;gt;&amp;lt;/tr&amp;gt;)에 해당하는 정보를 생성해서 테이블에 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;추가하는&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;추가하는&lt;/SPAN&gt;&lt;/SPAN&gt; 메소드이다. 바로 위에서 언급했듯이 행을 구성하고있는 3개의 컬럼 요소를 각각 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;만들어서&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;만들어서&lt;/SPAN&gt;&lt;/SPAN&gt; row 변수에 추가한 후, 이 변수를 다시 tbody 속성에 추가하면 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;그림&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;그림&lt;/SPAN&gt;&lt;/SPAN&gt; 3-10과 같은 화면이 완성되는 것이다.&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P align=left&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;3.4 요청 파라미터를 서버로 보내기&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;지금까지는 ajax를 이용하여 요청을 서버로 보내는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;방법과&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;방법과&lt;/SPAN&gt;&lt;/SPAN&gt; 서버로부터 받은 결과 정보를 파싱해서 처리하는 여러 특징들에 대해서 살펴보았다. &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;하지만&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;하지만&lt;/SPAN&gt;&lt;/SPAN&gt; 이것만으로는 부족하다. xml 의 고정된 정보를 다루는 것이 실증나지 않는가? &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;요청을&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;요청을&lt;/SPAN&gt;&lt;/SPAN&gt; 보낼때 특정 파라미터를 실어서 서버에 보내고, 서버는 요청정보를 바탕으로 특화된 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;응답정보를&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;응답정보를&lt;/SPAN&gt;&lt;/SPAN&gt; 보내야만 쓸만해 진다. &lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;XMLHttpRequest(XHR) 은 고전적 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;웹의&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;웹의&lt;/SPAN&gt;&lt;/SPAN&gt; GET/POST 방식과 흡사하게 동작한다. GET 방식은 name=value 쌍의 파라마터를 url &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;에&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;에&lt;/SPAN&gt;&lt;/SPAN&gt; 실어서 서버로 전송한다. 물론 name=value 쌍은 리소스 url 의 끝을 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;의미하는&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;의미하는&lt;/SPAN&gt;&lt;/SPAN&gt; ? 이후에 구분자(&amp;amp;) 를 사이사이에 끼고 주욱 붙는다.&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;POST 방식은 GET 방식과 마찬가지로 name=value 쌍의 형태로 데이터를 전달한다. &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;물론&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;물론&lt;/SPAN&gt;&lt;/SPAN&gt; 같은 구분자 (&amp;amp;)를 사용한다. 하지만 POST 방식은 폼 요소의 데이터를 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;인코딩하여&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;인코딩하여&lt;/SPAN&gt;&lt;/SPAN&gt; Http Request 객체의 body 에 저장해서 보낸다. &lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;또 다른 차이점이 있다면 서버로 보낼 수 있는 요청정보의 크기인데, &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;GET&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;GET&lt;/SPAN&gt;&lt;/SPAN&gt; 방식으로는 name1=value1&amp;amp;name2=value2&amp;amp;name3=value3... 이런 문자열의 길이가, 브라우저마다 차이가 있지만, 대략 2000 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;byte&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;byte&lt;/SPAN&gt;&lt;/SPAN&gt; 이상이면 불가능하다. 불가능하다는 의미가 무엇이냐 하면 브라우저는 요청정보를 보내려고 시도는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;하지만&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;하지만&lt;/SPAN&gt;&lt;/SPAN&gt; 처리가 안되기 때문에 프러세스는 중단되고 만다. 따라서 서버로 보내는 파라미터가 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;많을&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;많을&lt;/SPAN&gt;&lt;/SPAN&gt; 때는 POST 방식을 사용해야 한다. 일반적으로 데이터를 fetch(검색) 할때는 GET &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;방식을&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;방식을&lt;/SPAN&gt;&lt;/SPAN&gt; 사용하고 그 이외의 작업(추가, 수정, 삭제)에는 POST 방식을 주로 사용한다. &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;예를&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;예를&lt;/SPAN&gt;&lt;/SPAN&gt; 들어 클릭해서 현재 이 글을 읽고 있는 경우는 GET 방식이 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;사용되었을&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;사용되었을&lt;/SPAN&gt;&lt;/SPAN&gt; 것이고, 이 글을 수정할때는 POST 방식이 사용될 것이다. &lt;/P&gt;&lt;P align=left&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P align=left&gt;Ajax와 관련된 차이점이라면 GET 방식은 파라미터가 인코딩되어 url 에 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;붙어가기&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;붙어가기&lt;/SPAN&gt;&lt;/SPAN&gt; 때문에 해당 url 을 통째로 재사용(bookmark) 가능하지만 ajax 특성상 이런 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;북마킹&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;북마킹&lt;/SPAN&gt;&lt;/SPAN&gt; 기능은 불가능 하다. HTML 폼 요소에는 method 속성이 있는데 개발자는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;GET&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;GET&lt;/SPAN&gt;&lt;/SPAN&gt; 또는 POST 방식을 선택할 수 있다. 요청 데이터들은 서버로 submit &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;될때&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;될때&lt;/SPAN&gt;&lt;/SPAN&gt; method속성에 알맞도록 자동으로 인코딩되지만 XHR 객체는 이런 내장 알고리즘이 없기 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;때문에&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;때문에&lt;/SPAN&gt;&lt;/SPAN&gt; 개발자가 쿼리 스트링을 작성해야 한다. 쿼리 스트링을 작성하는 방법은 GET &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;또는&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;또는&lt;/SPAN&gt;&lt;/SPAN&gt; POST 방식에 상관없이 동일하다. 유일한 차이점이 있다면 GET 방식의 쿼리 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;스트링은&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;스트링은&lt;/SPAN&gt;&lt;/SPAN&gt; 요청 url 에 붙어서 서버로 전송되지만 POST 방식의 쿼리 스트링은 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;XHR&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;XHR&lt;/SPAN&gt;&lt;/SPAN&gt; 객체의 send(쿼리 스트링) 메소드가 호출될때 파라미터로 전송된다. 샘플을 살펴보면서 ajax &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;에서&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;에서&lt;/SPAN&gt;&lt;/SPAN&gt; GET 및 POST 방식을 어떻게 사용하는지 알아보자. 이번에는 결과화면을 먼저 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;소개한다.&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;소개한다.&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;CENTER&gt;&lt;DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"&gt;&lt;IMG style="WIDTH: 479px; HEIGHT: 285px" alt="" src="http://fs.textcube.com/blog/1/18391/attach/XCC12Wi4yI.jpg"&gt;&lt;/DIV&gt;&lt;/CENTER&gt;&lt;CENTER&gt;&amp;nbsp;&lt;/CENTER&gt;&lt;CENTER&gt;&lt;STRONG&gt;&amp;lt;3-11 GET/POST 방식 샘플 화면&amp;gt;&lt;/STRONG&gt;&lt;/CENTER&gt;&lt;CENTER&gt;&amp;nbsp;&lt;/CENTER&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;위 그림 3-11 은 브라우저에서 First name, Middle name, Birthday 를 입력한 후 Send parameters using GET 버튼 혹은 Send parameters using POST 버튼을 눌렀을 때의 결과가 바로 아래 부분에 표시되는 형태의 단순한 예제이다. 위 샘플을 실행시켜 보기 위해서는 getAndPostExample.html 과 서버 프로그램인 GetAndPostExample.java 가 필요하다. 하지만 이번 예제의 주요 핵심은 서버 프로그램이 아니다. XHR 객체가 GET/POST 방식을 어떻게 사용하는지를 이해하는 것이 중요하다. 클라이언트 및 서버 프로그램 코드를 기술한 후 XHR 의 주요코드에 대해서 설명을 하겠다.&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br /&gt;&amp;nbsp; "&lt;A class=con_link href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target=_blank&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&lt;/A&gt;"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="&lt;A class=con_link href="http://www.w3.org/1999/xhtml" target=_blank&gt;http://www.w3.org/1999/xhtml&lt;/A&gt;"&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Sending Request Data Using GET and POST&amp;lt;/title&amp;gt;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var xmlHttp;&lt;/DIV&gt;&lt;DIV align=left&gt;function createXMLHttpRequest() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (window.ActiveXObject) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;&amp;nbsp; &amp;nbsp; } &lt;br /&gt;&amp;nbsp; &amp;nbsp; else if (window.XMLHttpRequest) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xmlHttp = new XMLHttpRequest();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;function createQueryString() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var firstName = document.getElementById("firstName").value;&lt;br /&gt;&amp;nbsp; &amp;nbsp; var middleName = document.getElementById("middleName").value;&lt;br /&gt;&amp;nbsp; &amp;nbsp; var birthday = document.getElementById("birthday").value;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var queryString = "firstName=" + firstName + "&amp;amp;middleName=" + middleName&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + "&amp;amp;birthday=" + birthday;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; return queryString;&lt;br /&gt;}&lt;/DIV&gt;&lt;DIV align=left&gt;function doRequestUsingGET() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; createXMLHttpRequest();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var queryString = "GetAndPostExample?";&lt;br /&gt;&amp;nbsp; &amp;nbsp; queryString = queryString + createQueryString() &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + "&amp;amp;timeStamp=" + new Date().getTime();&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.onreadystatechange = handleStateChange;&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.open("GET", queryString, true);&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.send(null);&lt;br /&gt;}&lt;/DIV&gt;&lt;DIV align=left&gt;function doRequestUsingPOST() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; createXMLHttpRequest();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var url = "GetAndPostExample?timeStamp=" + new Date().getTime();&lt;br /&gt;&amp;nbsp; &amp;nbsp; var queryString = createQueryString();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.open("POST", url, true);&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.onreadystatechange = handleStateChange;&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.send(queryString);&lt;br /&gt;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;function handleStateChange() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(xmlHttp.readyState == 4) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(xmlHttp.status == 200) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parseResults();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;/DIV&gt;&lt;DIV align=left&gt;function parseResults() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var responseDiv = document.getElementById("serverResponse");&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(responseDiv.hasChildNodes()) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; responseDiv.removeChild(responseDiv.childNodes[0]);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var responseText = document.createTextNode(xmlHttp.responseText);&lt;br /&gt;&amp;nbsp; &amp;nbsp; responseDiv.appendChild(responseText);&lt;br /&gt;}&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;h1&amp;gt;Enter your first name, middle name, and birthday:&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;table&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;tbody&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;tr&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;First name:&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;input type="text" id="firstName"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;tr&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;Middle name:&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;input type="text" id="middleName"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;tr&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;Birthday:&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;input type="text" id="birthday"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/tbody&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;/table&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;form action="#"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;input type="button" value="Send parameters using GET" onclick="doRequestUsingGET();"/&amp;gt; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;input type="button" value="Send parameters using POST" onclick="doRequestUsingPOST();"/&amp;gt; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp; &amp;lt;br/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;h2&amp;gt;Server Response:&amp;lt;/h2&amp;gt;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp; &amp;lt;div id="serverResponse"&amp;gt;&amp;lt;/div&amp;gt;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV align=center&gt;&lt;STRONG&gt;&amp;lt;3-12&amp;nbsp; getAndPostExample.html 의 전체 소스 코드&amp;gt;&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV align=center&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=center&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;package ajaxbook.chap3;&lt;/DIV&gt;&lt;DIV align=left&gt;import java.io.*;&lt;br /&gt;import javax.servlet.*;&lt;br /&gt;import javax.servlet.http.*;&lt;/DIV&gt;&lt;DIV align=left&gt;public class GetAndPostExample extends HttpServlet {&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp; &amp;nbsp; /**&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private static final long serialVersionUID = 1L;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;protected void processRequest(HttpServletRequest request,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HttpServletResponse response, String method)&lt;br /&gt;&amp;nbsp; &amp;nbsp; throws ServletException, IOException {&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Set content type of the response to text/xml&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; response.setContentType("text/xml");&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Get the user's input&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String firstName = request.getParameter("firstName");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String middleName = request.getParameter("middleName");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String birthday = request.getParameter("birthday");&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Create the response text&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String responseText = "Hello " + firstName + " " + middleName&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + ". Your birthday is " + birthday + "."&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + " [Method: " + method + "]";&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Write the response back to the browser&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PrintWriter out = response.getWriter();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; out.println(responseText);&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Close the writer&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; out.close();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp; &amp;nbsp; protected void doGet(HttpServletRequest request, HttpServletResponse response)&lt;br /&gt;&amp;nbsp; &amp;nbsp; throws ServletException, IOException {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Process the request in method processRequest&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; processRequest(request, response, "GET");&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp; &amp;nbsp; protected void doPost(HttpServletRequest request, HttpServletResponse response)&lt;br /&gt;&amp;nbsp; &amp;nbsp; throws ServletException, IOException {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Process the request in method processRequest&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; processRequest(request, response, "POST");&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV align=center&gt;&lt;STRONG&gt;&amp;lt;3-13 GetAndPostExample.java 의 전체 소스 코드&amp;gt;&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;3-12&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;3-12&lt;/SPAN&gt;&lt;/SPAN&gt; 의 샘플 코드는 이전 예제와 비교해 봤을때 크게 어려운 부분은 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;없을&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;없을&lt;/SPAN&gt;&lt;/SPAN&gt; 것이다. 3-13 의 프로그램은 단순한 에코성 문자열을 생성해서 다시 클라이언트로 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;보내는&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;보내는&lt;/SPAN&gt;&lt;/SPAN&gt; 것이므로 특별한 설명은 필요하지 않을 듯 싶다. 이번 예제의 핵심은 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;ajax&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;ajax&lt;/SPAN&gt;&lt;/SPAN&gt; 에서 GET 및 POST 방식으로 서버에 파라미터를 보내는 방법이다.&lt;/P&gt;&lt;P&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;function createQueryString() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var firstName = document.getElementById("firstName").value;&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; var middleName = document.getElementById("middleName").value;&lt;br /&gt;&amp;nbsp; &amp;nbsp; var birthday = &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;document.getElementById("birthday").value;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;document.getElementById("birthday").value;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var queryString = "firstName=" + &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;firstName&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;firstName&lt;/SPAN&gt;&lt;/SPAN&gt; + "&amp;amp;middleName=" + middleName&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + "&amp;amp;birthday=" &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;+&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;+&lt;/SPAN&gt;&lt;/SPAN&gt; birthday;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; return queryString;&lt;br /&gt;}&lt;/P&gt;&lt;P&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;먼저 위 코드는 GET 및 POST 방식에 있어서 쿼리 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;스트링을&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;스트링을&lt;/SPAN&gt;&lt;/SPAN&gt; 만들어 공통으로 사용하기 위한 메소드이다. 전에도 설명했듯이 name=value 쌍의 파라미터를 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;한줄의&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;한줄의&lt;/SPAN&gt;&lt;/SPAN&gt; String 데이터로 만들고 있다. 각 name=value 쌍은 &amp;amp; 로 구분지어야 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;한다.&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;한다.&lt;/SPAN&gt;&lt;/SPAN&gt; name=value 쌍의 순서는 상관없다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;function doRequestUsingGET() {&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; createXMLHttpRequest();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;var queryString &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&lt;/SPAN&gt;&lt;/SPAN&gt; "GetAndPostExample?";&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;queryString = queryString + createQueryString()&lt;/STRONG&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;STRONG&gt;+ "&amp;amp;timeStamp=" + new &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;Date().getTime();&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;Date().getTime();&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;xmlHttp.onreadystatechange = handleStateChange;&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;xmlHttp.open("GET", queryString, true);&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;xmlHttp.send(null);&lt;/STRONG&gt;&lt;br /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위의 코드는 ajax 를 활용하여 GET 방식으로 파라미터를 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;서버에&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;서버에&lt;/SPAN&gt;&lt;/SPAN&gt; 보내는 코드이다. XHR 객체 생성후 쿼리 스트링을 생성한다. var queryString &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&lt;/SPAN&gt;&lt;/SPAN&gt; "GetAndPostExample?"; 라인에서 GetAndPostExample 은 ajaxbook.chap3.GetAndPostExample 서브렛을 호출하기 위해서 서브렛 이름과 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;매핑된&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;매핑된&lt;/SPAN&gt;&lt;/SPAN&gt; url 이름이다. 이 부분은 해당 컨텍스트의 web.xml 에 다음과 같이 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;기술되어&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;기술되어&lt;/SPAN&gt;&lt;/SPAN&gt; 있어야 한다.&lt;/P&gt;&lt;P&gt;&amp;lt;web-app&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;servlet&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;servlet-name&amp;gt;GetAndPostExample&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;lt;servlet-class&amp;gt;ajaxbook.chap3.GetAndPostExample&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/servlet&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;servlet-name&amp;gt;GetAndPostExample&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;lt;url-pattern&amp;gt;/GetAndPostExample&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/servlet-mapping&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;/web-app&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;쿼리 스트링을 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;만들때&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;만들때&lt;/SPAN&gt;&lt;/SPAN&gt; "&amp;amp;timeStamp=" + new Date().getTime(); 부분을 넣은 이유는 다음과 같다. 몇몇 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;브라우저들은&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;브라우저들은&lt;/SPAN&gt;&lt;/SPAN&gt; 명확하지 않은 조건하에서 똑같은 url 로 XHR 멀티 요청을 보냈을때 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;서버의&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;서버의&lt;/SPAN&gt;&lt;/SPAN&gt; 결과를 캐싱하는 경향을 보인다. 비록 같은 url 이지만 응답이 다를경우엔 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;캐싱하는&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;캐싱하는&lt;/SPAN&gt;&lt;/SPAN&gt; 경향이 오히려 예상치 못한 결과의 원인이 될 수도 있기때문에 되도록이면 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;unique&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;unique&lt;/SPAN&gt;&lt;/SPAN&gt; 한 url을 생성하기 위한 방법을 택한것이다. 이렇게 생성한 쿼리 스트링을 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;open&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;open&lt;/SPAN&gt;&lt;/SPAN&gt; 메소드에 넣어주고 send 메소드에는 null 값을 설정한다. 다음은 POST 방식에 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;대해서&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;대해서&lt;/SPAN&gt;&lt;/SPAN&gt; 살펴보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;function doRequestUsingPOST() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; createXMLHttpRequest();&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;var url = "GetAndPostExample?timeStamp=" + &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;new&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;new&lt;/SPAN&gt;&lt;/SPAN&gt; Date().getTime();&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;var queryString = createQueryString();&lt;/STRONG&gt;&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;xmlHttp.open("POST", url, true);&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;STRONG&gt;xmlHttp.onreadystatechange = handleStateChange;&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");&lt;/STRONG&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;xmlHttp.send(queryString);&lt;/STRONG&gt;&lt;br /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;POST 방식도 GET 방식과 마찬가지로 같은 쿼리 스트링을 사용한다. 하지만 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;용도는&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;용도는&lt;/SPAN&gt;&lt;/SPAN&gt; 다르다. GET 방식은 url 과 쿼리 스트링을 합쳐서 open 메소드에 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;넣어서&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;넣어서&lt;/SPAN&gt;&lt;/SPAN&gt; 사용한 반면, POST 방식은 위 코드처럼 send 메소드에 파라미터로 넣어준다. &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;또&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;또&lt;/SPAN&gt;&lt;/SPAN&gt; 다른 차이점이라면 POST 방식은 HTTP Request 객체의 바디에 파라미터가 저장되는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;것이므로&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;것이므로&lt;/SPAN&gt;&lt;/SPAN&gt; 헤더에도 Content-Type 을 반드시 정의해 줘야 한다. 정의를 해주지 않으면 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;서버에서는&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;서버에서는&lt;/SPAN&gt;&lt;/SPAN&gt; 클라이언트에서 보낸 파라미터를 얻지 못한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;3.5 XML 을 요청 파라미터로 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;사용하기&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;사용하기&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;예제 3-13은 ajax를 이용하여 브라우저의 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;파라미터를&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;파라미터를&lt;/SPAN&gt;&lt;/SPAN&gt; 서버로 전송하고 그 결과를 처리하는 부분을 주로 살펴보았다. 하지만 파라미터를 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;name=value&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;name=value&lt;/SPAN&gt;&lt;/SPAN&gt; 쌍으로 보내는 것은 초보나 하는 짓으로 보일 수 있고 좀더 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;확정성과&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;확정성과&lt;/SPAN&gt;&lt;/SPAN&gt; 유연성 그리고 가독성을 높이는 방향으로 노력을 해보자. 파라미터를 xml 로 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;변환해서&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;변환해서&lt;/SPAN&gt;&lt;/SPAN&gt; 처리하도록 하는 것이다. 흥미진진하지 않은가? 그렇다고 이 방식이 완벽한 해결책이 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;되는&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;되는&lt;/SPAN&gt;&lt;/SPAN&gt; 것은 아니다. 이번 예제도 물론 실험적이고 기초적인 코드를 가지고 그 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;활용도를&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;활용도를&lt;/SPAN&gt;&lt;/SPAN&gt; 모색할 것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;1.0&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;1.0&lt;/SPAN&gt;&lt;/SPAN&gt; Strict//EN"&lt;br /&gt;&amp;nbsp; "&lt;A class=con_link href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target=_blank&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&lt;/A&gt;"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="&lt;A class=con_link href="http://www.w3.org/1999/xhtml" target=_blank&gt;http://www.w3.org/1999/xhtml&lt;/A&gt;"&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Sending an &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;XML&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;XML&lt;/SPAN&gt;&lt;/SPAN&gt; Request&amp;lt;/title&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/P&gt;&lt;P&gt;var xmlHttp;&lt;/P&gt;&lt;P&gt;function createXMLHttpRequest() &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;{&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;{&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; if (window.ActiveXObject) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xmlHttp &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&lt;/SPAN&gt;&lt;/SPAN&gt; new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;&amp;nbsp; &amp;nbsp; } &lt;br /&gt;&amp;nbsp; &amp;nbsp; else if &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;(window.XMLHttpRequest)&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;(window.XMLHttpRequest)&lt;/SPAN&gt;&lt;/SPAN&gt; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xmlHttp = new XMLHttpRequest();&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; }&lt;br /&gt;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;STRONG&gt;function createXML() {&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; var xml = "&amp;lt;pets&amp;gt;";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;options&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;options&lt;/SPAN&gt;&lt;/SPAN&gt; = document.getElementById("petTypes").childNodes;&lt;br /&gt;&amp;nbsp; &amp;nbsp; var option = null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;for(var&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;for(var&lt;/SPAN&gt;&lt;/SPAN&gt; i = 0; i &amp;lt; options.length; i++) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; option = options[i];&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(option.selected) {&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xml = xml + "&amp;lt;type&amp;gt;" &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;+&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;+&lt;/SPAN&gt;&lt;/SPAN&gt; option.value + "&amp;lt;\/type&amp;gt;";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;}&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; xml = xml + "&amp;lt;\/pets&amp;gt;";&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; return xml;&lt;br /&gt;}&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;function sendPetTypes() {&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; createXMLHttpRequest();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var xml = createXML();&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; var url = "PostingXMLExample?timeStamp=" + new Date().getTime();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;SPAN class=copyAngel_rogerrb_Callback entryid="116" host="http%3A%2F%2Frogerrb.textcube.com"&gt;&lt;EMBED style="FLOAT: right" class=copyAngel_rogerrb_Callback_remote height=197 type=application/x-shockwave-flash width=226 src=http://rogerrb.textcube.com/plugin/CopyAngel_callback_src.swf allowscriptaccess="always" wmode="transparent" EnableContextMenu="false" swLiveConnect="true" FlashVars="host=http%3A%2F%2Frogerrb.textcube.com&amp;amp;blogid=18391&amp;amp;entryid=116"&gt;&lt;/SPAN&gt; xmlHttp.open("POST", url, true);&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.onreadystatechange = handleStateChange;&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.send(xml);&lt;br /&gt;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;function handleStateChange() {&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; if(xmlHttp.readyState == 4) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(xmlHttp.status &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;==&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;==&lt;/SPAN&gt;&lt;/SPAN&gt; 200) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parseResults();&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;/P&gt;&lt;P&gt;function parseResults() &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;{&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;{&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var responseDiv = document.getElementById("serverResponse");&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(responseDiv.hasChildNodes()) {&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; responseDiv.removeChild(responseDiv.childNodes[0]);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; var responseText = document.createTextNode(xmlHttp.responseText);&lt;br /&gt;&amp;nbsp; &amp;nbsp; responseDiv.appendChild(responseText);&lt;br /&gt;}&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;h1&amp;gt;Select the types of pets &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;in&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;in&lt;/SPAN&gt;&lt;/SPAN&gt; your home:&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;form action="#"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;select &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;id="petTypes"&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;id="petTypes"&lt;/SPAN&gt;&lt;/SPAN&gt; size="6" multiple="true"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;option value="cats"&amp;gt;Cats&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;lt;option value="dogs"&amp;gt;Dogs&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;option value="fish"&amp;gt;Fish&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;lt;option value="birds"&amp;gt;Birds&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;option value="hamsters"&amp;gt;Hamsters&amp;lt;/option&amp;gt;&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;option value="rabbits"&amp;gt;Rabbits&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/select&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;input type="button" value="Submit Pets" onclick="sendPetTypes();"/&amp;gt;&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;lt;/form&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;lt;h2&amp;gt;Server Response:&amp;lt;/h2&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;lt;div id="serverResponse"&amp;gt;&amp;lt;/div&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;lt;/body&amp;gt;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;lt;/body&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;&amp;lt;3-14 postingXML.html 의 전체 소스 코드&amp;gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;package ajaxbook.chap3;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;import&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;import&lt;/SPAN&gt;&lt;/SPAN&gt; java.io.*;&lt;br /&gt;import javax.servlet.*;&lt;br /&gt;import javax.servlet.http.*;&lt;br /&gt;import javax.xml.parsers.DocumentBuilderFactory;&lt;br /&gt;import javax.xml.parsers.ParserConfigurationException;&lt;br /&gt;import &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;org.w3c.dom.Document;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;org.w3c.dom.Document;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;import org.w3c.dom.NodeList;&lt;br /&gt;import org.xml.sax.SAXException;&lt;/P&gt;&lt;P&gt;public class PostingXMLExample extends HttpServlet &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;{&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;{&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; /**&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;private static &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;final&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;final&lt;/SPAN&gt;&lt;/SPAN&gt; long serialVersionUID = 1L;&lt;/P&gt;&lt;P&gt;&amp;nbsp;protected void doPost(HttpServletRequest request, HttpServletResponse &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;response)&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;response)&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; throws ServletException, IOException {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; String xml = readXMLFromRequestBody(request);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Document xmlDoc &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&lt;/SPAN&gt;&lt;/SPAN&gt; null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; xmlDoc =&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; DocumentBuilderFactory.newInstance().newDocumentBuilder()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; .parse(new ByteArrayInputStream(xml.getBytes()));&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; catch(ParserConfigurationException e) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; System.out.println("ParserConfigurationException: " + e);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; catch(SAXException e) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; System.out.println("SAXException: " + e);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Note how the Java implementation &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;of&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;of&lt;/SPAN&gt;&lt;/SPAN&gt; the W3C DOM has the same methods&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp; &lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt; * as the JavaScript implementation, such as getElementsByTagName and&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; * getNodeValue.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; NodeList selectedPetTypes = xmlDoc.getElementsByTagName("type");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;String&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;String&lt;/SPAN&gt;&lt;/SPAN&gt; type = null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String responseText = &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;"Selected&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;"Selected&lt;/SPAN&gt;&lt;/SPAN&gt; Pets: ";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i = 0; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;i&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;i&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;lt; selectedPetTypes.getLength(); i++) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; type &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;=&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;=&lt;/SPAN&gt;&lt;/SPAN&gt; selectedPetTypes.item(i).getFirstChild().getNodeValue();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; responseText = responseText + &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;"&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt; " + type;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; response.setContentType("text/xml");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; response.getWriter().print(responseText);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;}&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; private String readXMLFromRequestBody(HttpServletRequest request){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;&amp;nbsp;&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt; StringBuffer xml = new StringBuffer();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&lt;A style="DISPLAY: inline" class=copyAngel_rogerrb_LinkUp_remote href="http://rogerrb.textcube.com/116?t=c&amp;amp;i=0"&gt;line&lt;/A&gt;&lt;SPAN style="DISPLAY: none" class=copyAngel_rogerrb_LinkUp_local&gt;line&lt;/SPAN&gt;&lt;/SPAN&gt; = null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; BufferedReader reader = request.getReader();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; while((line = reader.readLine()) != null) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xml.append(line);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; catch(Exception e) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println("Error &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;reading&lt;/SPAN&gt; XML: " + e.toString());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; return xml.toString();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;&amp;lt;3-15 PostingXMLExample.java 의 전체 소스 코드&amp;gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;3-14는 완전 html 날코딩이라 실망할 수도 있겠다. 파라미터를 담고 있는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;xml&lt;/SPAN&gt; 을 스트링 조합으로 생성해서 서버로 전송한다. 전송방식은 샘플 3-12 의 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;POST&lt;/SPAN&gt; 방식과 동일하다. 3-15 는 서브릿으로써 브라우저에서 request 객체의 body 에 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;실어보낸&lt;/SPAN&gt; xml 을 파싱해서 데이터를 추출한 후 일정한 형식의 문자열로 변환하여 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;다시&lt;/SPAN&gt; 클라이언트로 보내주는 방식이다. 이번 서버 프로그램역시 xml 을 파싱하고 정보를 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;추출하는&lt;/SPAN&gt; 부분에 대해서는 특별한 설명을 하지는 않겠다. 하지만 서블릿에서 한가지 짚고 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;넘어가자면&lt;/SPAN&gt; 클라이언트로부터 받은 xML 을 파싱할때 Document 인터페이스를 사용하는데, 이 는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;W3C&lt;/SPAN&gt; 가 구체화한 것으로 DOM 객체에 존재하는 같은 기능의 메소드인 getElementsByTagName("type") &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;을&lt;/SPAN&gt; 사용하고 있다는 점이다. 나의 주요 논점은 어디까지나 클라이언트이다. 핵심 코드는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;아래와&lt;/SPAN&gt; 같다.&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;function createXML() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;xml&lt;/SPAN&gt; = "&amp;lt;pets&amp;gt;";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var options = &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;document.getElementById("petTypes").childNodes;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var option = null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; for(var i &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;=&lt;/SPAN&gt; 0; i &amp;lt; options.length; i++) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;option&lt;/SPAN&gt; = options[i];&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(option.selected) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; xml = xml + "&amp;lt;type&amp;gt;" + option.value &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;+&lt;/SPAN&gt; "&amp;lt;\/type&amp;gt;";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; xml = xml + "&amp;lt;\/pets&amp;gt;";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;return&lt;/SPAN&gt; xml;&lt;br /&gt;}&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;핵심 로직이지만 너무 간단해서 설명할 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;것도&lt;/SPAN&gt; 없을 것 같다. 위 부분은 xml을 String 형식의 쿼리 스티링을 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;생성하는&lt;/SPAN&gt; 부분이다. petTypes 는 select box 에서 option 엘리먼트 값을 추출하여 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;문자열을&lt;/SPAN&gt; 만드는 부분이다. &lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;function sendPetTypes() {&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; createXMLHttpRequest();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var xml = createXML();&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; var url = "PostingXMLExample?timeStamp=" + new Date().getTime();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.open("POST", url, true);&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.onreadystatechange = handleStateChange;&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.send(xml);&lt;br /&gt;}&lt;/P&gt;&lt;P align=left&gt; &lt;/P&gt;&lt;P align=left&gt;위 코드 역시 이전 샘플에서 다루었기 때문에 특별하게 설명한 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;부분은&lt;/SPAN&gt; 없다. 하지만 한가지 짚고 넘어갈 부분이 있는데, send() 메소드의 파라미터에는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;문자열&lt;/SPAN&gt; 및 DOM 객체를 설정하는 것이 가능하다. 하지만 왜 이번 예제에서는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;DOM&lt;/SPAN&gt; 객체 대신에 문자열을 넣었을까? 아쉽게도 지금까지 브라우저간 DOM 객체를 생성해서 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;공통적으로&lt;/SPAN&gt; 사용할 수 있는 방법이 없기 때문이다. IE 의 경우는 ActiveXObject &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;컨트롤을&lt;/SPAN&gt; 통해서, 모질라는 native 자바스립트를 통해서 제공하며, 심지어 이런 방법조차 지원하지 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;않는&lt;/SPAN&gt; 브라우저도 존재한다. 따라서 어쩔수 없이 스트링값을 설정한 것이다.&lt;/P&gt;&lt;P align=left&gt;다음은 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;위&lt;/SPAN&gt; 프로그램을 실행한 결과 화면이다.&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;CENTER&gt;&lt;DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"&gt;&lt;IMG style="WIDTH: 394px; HEIGHT: 290px" alt="" src="http://fs.textcube.com/blog/1/18391/attach/XSlfZ93Zgs.jpg"&gt;&lt;/DIV&gt;&lt;/CENTER&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;&amp;lt;3-16 postingXML.html 의 실행 결과 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;화면&amp;gt;&lt;/SPAN&gt; &lt;/STRONG&gt;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;3.6 JSON 을 활용하여 데이터를 서버로 보내기&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;바로 이전의 3-14 샘플은 브라우저의 파라미터를 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;XML&lt;/SPAN&gt; 형식으로 변환하여 서버로 보내는 방법을 제시했었다. 데이타 포맷의 표준이 되서버린 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;XML을&lt;/SPAN&gt; 이용한다는 전체적인 맥락은 그럴싸했지만 사실 XML을 만드는 과정이 복잡한 쿼리 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;스트링&lt;/SPAN&gt; 조합작업이라면 누가 하려하겠는가 말이다. 나 자신도 이런 작업은 정말 싫어한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;XML 을 생성하기 위한 javascript 날코딩의 대안으로 JSON(Javascript &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;Object&lt;/SPAN&gt; Notation, &lt;A class=con_link href="http://www.json.org/" target=_blank&gt;www.json.org&lt;/A&gt;) 을 소개한다. JSON 은 텍스트 포맷기반의 경량 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;데이터&lt;/SPAN&gt; 변환 포맷이다. 프로그래밍 언어에 독립적며, C 언어계열에 익숙한 데이터 구조 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;형식을&lt;/SPAN&gt; 취하고 있다. JSON은 두가지 텍스트 포맷을 가지고 있는데, 첫번째는 name/value &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;쌍의&lt;/SPAN&gt; 컬렉션 데이터 구조로 프로그래밍 언어로 따지면 object, record, struct 쯤 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;되겠다.&lt;/SPAN&gt; 두번째는 정렬된 value 의 리스트형태로써 프로그래밍 언어로 비유하자면 배열이라고 보면 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;될&lt;/SPAN&gt; 것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;JSON 의 데이터 구조는 많은 프로그램 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;언어에&lt;/SPAN&gt; 의해서 지원되고 있기때문에 XML 보다는 이기종 시스템간의 이상적인 선택이 될 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;것이다.&lt;/SPAN&gt; 추가적으로 JSON 은 표준 자바스크립트의 부류이므로 모든 웹 브라우저간에도 양립할 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;수&lt;/SPAN&gt; 있는 것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;CENTER&gt;&lt;DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"&gt;&lt;IMG style="WIDTH: 522px; HEIGHT: 341px" alt="" src="http://fs.textcube.com/blog/1/18391/attach/XXahxWE1sv.jpg"&gt;&lt;/DIV&gt;&lt;DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"&gt;&lt;IMG style="WIDTH: 518px; HEIGHT: 370px" alt="" src="http://fs.textcube.com/blog/1/18391/attach/XRZzBJSpLw.jpg"&gt;&lt;/DIV&gt;&lt;/CENTER&gt;&lt;CENTER&gt;&lt;CENTER&gt;&amp;nbsp;&lt;/CENTER&gt;&lt;/CENTER&gt;&lt;CENTER&gt;&lt;STRONG&gt;&amp;lt;3-17 JSON 오브젝트구조도(출처 : &lt;A class=con_link href="http://www.json.org/" target=_blank&gt;www.json.org&lt;/A&gt;)&amp;gt;&lt;/STRONG&gt;&lt;/CENTER&gt;&lt;CENTER&gt;&amp;nbsp;&lt;/CENTER&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;위 그림은 JSON의 데이터 구조를 나타내고 있다. &lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;Object는 {} 으로 표시한다. 오브젝트에는 name/value 쌍이 콜론(:) &amp;nbsp;혹은 콤마(,) 로 구분되어져 있으며 순서는 없다.&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;Array 는 [] 으로 표시한다. 배열은 정렬된 value 가 콤마(,) 에 의해서 구분되어져 있으며, value 값은 스트링("" 으로 둘러싸야 함), 숫자, true or false, null, object , array 가 올수 있으므로 배열의 구조는 계층적이라고 할 수 있다.&lt;/DIV&gt;&lt;DIV align=left&gt;스트링은 유니코드 조합 및 백래쉬 이스케이프(\)를 사용할 수 있으며 '' 을 사용하여 character 를 표현할 수 있다. &lt;/DIV&gt;&lt;DIV align=left&gt;스트링과 숫자는 C언어 혹은 자바의 스트링과 거의 흡사하지만 8진수 및 16진수 포맷은 지원하지 않는다. 공백을 name/value 쌍 사이사이에 사용할 수 있다.&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;하나의 예를 들어보자. Employ 라는 클래스(멤버로 firstName, lastName, employeeNumber, title)의 인스턴스를 JSON 을 이용해서 아래와 같이 표현해 볼 수 있다.&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;var employee = {&lt;br /&gt;&amp;nbsp;"firstName" &amp;nbsp;&amp;nbsp; : John,&lt;br /&gt;&amp;nbsp;"lastName" &amp;nbsp; &amp;nbsp; : Doe,&lt;br /&gt;&amp;nbsp;"employNumber" : 123,&lt;br /&gt;&amp;nbsp;"title" &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; : "Manager"&lt;br /&gt;}&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV align=left&gt;그러면 위 표현을 오브젝트 속성을 이용해서 아래와 같이 다룰 수 있다.&lt;/DIV&gt;&lt;DIV align=left&gt;var lastName = employee.lastName;//lastName 에 접근&lt;/DIV&gt;&lt;DIV align=left&gt;var title = employee.title;//title 에 접근&lt;/DIV&gt;&lt;DIV align=left&gt;employee.emplyeeNumber = 456;//employeeNumber 를 456 으로 수정&lt;/DIV&gt;&lt;DIV align=left&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;JSON 의 인코딩은 확실히 XML 인코딩보다 가볍다. 따라서 네트웍을 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;통해서&lt;/SPAN&gt; 큰 데이터가 오고가는 상황에서는 많은 퍼포먼스의 차이가 발생할 것이다. JSON &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;싸이트에&lt;/SPAN&gt; 가보면 적어도 14개 이상의 서버쪽 어플리케이션을 다루는 프로그래밍언어에서 JSON 을 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;사용할&lt;/SPAN&gt; 수 있게끔 준비가 되어 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이제 3장의 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;마지막&lt;/SPAN&gt; 주제인 JSON 을 이용한 간단한 샘플을 살펴보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;lt;!DOCTYPE&lt;/SPAN&gt; html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br /&gt;&amp;nbsp; "&lt;A class=con_link href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target=_blank&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&lt;/A&gt;"&amp;gt;&lt;br /&gt;&amp;lt;html &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;xmlns="&lt;/SPAN&gt; &lt;A class=con_link href="http://www.w3.org/1999/xhtml" target=_blank&gt;http://www.w3.org/1999/xhtml&lt;/A&gt;"&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;JSON Example&amp;lt;/title&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;script type="text/javascript" src="&lt;STRONG&gt;json.js&lt;/STRONG&gt;"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;lt;script&lt;/SPAN&gt; type="text/javascript"&amp;gt;&lt;/P&gt;&lt;P&gt;var xmlHttp;&lt;/P&gt;&lt;P&gt;function createXMLHttpRequest() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;if&lt;/SPAN&gt; (window.ActiveXObject) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; } &lt;br /&gt;&amp;nbsp; &amp;nbsp; else if (window.XMLHttpRequest) {&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; xmlHttp = new XMLHttpRequest();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &lt;br /&gt;function doJSON() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var car = &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;getCarObject();&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; //Use the JSON JavaScript library &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;to&lt;/SPAN&gt; stringify the Car object&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;var carAsJSON = &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;JSON.stringify(car);&lt;/SPAN&gt; &lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; alert("Car object as JSON:\n " + carAsJSON);&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var url = "JSONExample?timeStamp=" + new &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;Date().getTime();&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; createXMLHttpRequest();&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.open("POST", url, &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;true);&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.onreadystatechange = handleStateChange;&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;xmlHttp.send(carAsJSON);&lt;/STRONG&gt;&lt;br /&gt;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;function &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;handleStateChange()&lt;/SPAN&gt; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(xmlHttp.readyState == 4) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; if(xmlHttp.status == 200) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;parseResults();&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;/P&gt;&lt;P&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;function&lt;/SPAN&gt; parseResults() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var responseDiv = document.getElementById("serverResponse");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;if(responseDiv.hasChildNodes())&lt;/SPAN&gt; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; responseDiv.removeChild(responseDiv.childNodes[0]);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var responseText = document.createTextNode(xmlHttp.responseText);&lt;br /&gt;&amp;nbsp; &amp;nbsp; responseDiv.appendChild(responseText);&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;}&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;function getCarObject() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; return new Car("Dodge", &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;"Coronet&lt;/SPAN&gt; R/T", 1968, "yellow");&lt;br /&gt;}&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;function Car(make, model, &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;year,&lt;/SPAN&gt; color) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; this.make = make;&lt;br /&gt;&amp;nbsp; &amp;nbsp; this.model &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;=&lt;/SPAN&gt; model;&lt;br /&gt;&amp;nbsp; &amp;nbsp; this.year = year;&lt;br /&gt;&amp;nbsp; &amp;nbsp; this.color = &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;color;&lt;/SPAN&gt; &lt;br /&gt;}&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;body&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;lt;form action="#"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;input type="button" value="Click here to &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;send&lt;/SPAN&gt; JSON data to the server"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; onclick="doJSON();"/&amp;gt;&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;lt;/form&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;h2&amp;gt;Server Response:&amp;lt;/h2&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;lt;div id="serverResponse"&amp;gt;&amp;lt;/div&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;&amp;lt;3-18 jsonExample.htm 의 전체 소스 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;코드&amp;gt;&lt;/SPAN&gt; &lt;/STRONG&gt;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;package ajaxbook.chap3;&lt;/P&gt;&lt;P align=left&gt;import java.io.*;&lt;br /&gt;import &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;java.net.*;&lt;/SPAN&gt; &lt;br /&gt;import java.text.ParseException;&lt;br /&gt;import javax.servlet.*;&lt;br /&gt;import javax.servlet.http.*;&lt;br /&gt;import org.json.JSONObject;&lt;/P&gt;&lt;P align=left&gt;public &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;class&lt;/SPAN&gt; JSONExample extends HttpServlet {&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp; &amp;nbsp; /**&lt;br /&gt;&amp;nbsp; *&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; */&lt;br /&gt;&amp;nbsp;private static final long serialVersionUID = 1L;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;protected &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;void&lt;/SPAN&gt; doPost(HttpServletRequest request, HttpServletResponse response)&lt;br /&gt;&amp;nbsp; &amp;nbsp; throws ServletException, IOException {&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; String json = readJSONStringFromRequestBody(request);&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; //Use the JSON-Java binding library to create a JSON &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;object&lt;/SPAN&gt; in Java&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; JSONObject jsonObject = null;&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;STRONG&gt;jsonObject = new JSONObject(json);&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;}&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; catch(ParseException pe) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; System.out.println("ParseException: " + pe.toString());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;}&lt;/SPAN&gt; &lt;/P&gt;&lt;P align=left&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;STRONG&gt;String responseText = "You &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;have&lt;/SPAN&gt; a " + jsonObject.getInt("year") + " "&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; + jsonObject.getString("make") + " " + jsonObject.getString("model")&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + " " + " that &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;is&lt;/SPAN&gt; " + jsonObject.getString("color") + " in color.";&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; response.setContentType("text/xml");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; response.getWriter().print(responseText);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;}&lt;/SPAN&gt; &lt;/P&gt;&lt;P align=left&gt;&amp;nbsp; &amp;nbsp; private String readJSONStringFromRequestBody(HttpServletRequest request){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; StringBuffer json = new StringBuffer();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;line&lt;/SPAN&gt; = null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; BufferedReader reader = request.getReader();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; while((line = reader.readLine()) != null) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; json.append(line);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; catch(Exception e) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println("Error &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;reading&lt;/SPAN&gt; JSON string: " + e.toString());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return json.toString();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;&amp;lt;3-19 JSONExample.java 의 전체 소스 코드&amp;gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;마지막 예제에서 중요한 부분을 굵게 표시하였다. 이번 예제를 실행해 보기 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;위해서는&lt;/SPAN&gt; json.js 와 자바관련 json 라이브러리가 필요하다. 관련 파일들은 json 웹싸이트에서 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;다운받으면&lt;/SPAN&gt; 된다. 우선 자바스크립트쪽 핵심코드를 먼저 살펴보자.&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;function &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;getCarObject()&lt;/SPAN&gt; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; return new Car("Dodge", "Coronet R/T", 1968, "yellow");&lt;br /&gt;&lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;}&lt;/SPAN&gt; &lt;/P&gt;&lt;P align=left&gt;function Car(make, model, year, color) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; this.make &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;=&lt;/SPAN&gt; make;&lt;br /&gt;&amp;nbsp; &amp;nbsp; this.model = model;&lt;br /&gt;&amp;nbsp; &amp;nbsp; this.year = &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;year;&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; this.color = color;&lt;br /&gt;}&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;위 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;코드는&lt;/SPAN&gt; 설명이 별로 필요치 않을 것 같다. Car 객체를 만들어 주는 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;메소드이다.&lt;/SPAN&gt; &lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;function doJSON() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var car &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;=&lt;/SPAN&gt; getCarObject();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; //Use the JSON JavaScript &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;library&lt;/SPAN&gt; to stringify the Car object&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;var carAsJSON &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;=&lt;/SPAN&gt; JSON.stringify(car);&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; alert("Car object as JSON:\n " + &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;carAsJSON);&lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; var url = "JSONExample?timeStamp=" + &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;new&lt;/SPAN&gt; Date().getTime();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; createXMLHttpRequest();&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.open("POST", &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;url,&lt;/SPAN&gt; true);&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.onreadystatechange = handleStateChange;&lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp; &lt;/SPAN&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; xmlHttp.send(carAsJSON);&lt;br /&gt;}&lt;/P&gt;&lt;P align=left&gt;위 코드를 보면 자바스크립트 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;car&lt;/SPAN&gt; 객체를 생성한 후 JSON 자바스크립트 라이브러이의 stringify 를 사용해서 JSON &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;객체로&lt;/SPAN&gt; 변환하고 있다. 나머지 로직은 POST 방식을 구현한 것이고 send(() 메소드에 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;JSON&lt;/SPAN&gt; 객체를 넣어준다.&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;이번엔 서버쪽 프로그램을 확인해 보자.&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;JSONObject jsonObject = null;&lt;br /&gt;try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;jsonObject = new JSONObject(json);&lt;/STRONG&gt;&lt;br /&gt;}&lt;br /&gt;catch(ParseException pe) {&lt;br /&gt;&amp;nbsp; &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;&amp;nbsp;&lt;/SPAN&gt; System.out.println("ParseException: " + pe.toString());&lt;br /&gt;}&lt;/P&gt;&lt;P align=left&gt;String responseText = "You &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;have&lt;/SPAN&gt; a " + &lt;STRONG&gt;jsonObject.getInt&lt;/STRONG&gt;("year") + " "&lt;br /&gt;&amp;nbsp;+ &lt;STRONG&gt;jsonObject.getString&lt;/STRONG&gt;("make") + " " + jsonObject.getString("model")&lt;br /&gt;&amp;nbsp;+ " " &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;+&lt;/SPAN&gt; " that is " + jsonObject.getString("color") + " in color.";&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;우선 서버 프로그램은 Http request 객체에서 JSON 문자열을 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;추출한다.&lt;/SPAN&gt; 이렇게 추출된 문자열을 JSON 자바 라이브러리의 JSONObject 클래스를 생성할때 생성자의 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;파라미터로&lt;/SPAN&gt; 입력된다. JSONObject 는 자동으로 JSON 문자열을 파싱하고 getXxx 메소드를 이용해서 &lt;SPAN class=copyAngel_rogerrb_LinkUp entryid="116" original="http://rogerrb.textcube.com/116"&gt;여러&lt;/SPAN&gt; 타입의 데이터를 추출할 수 있는 것이다. 정말 간단하지 않은가?&lt;/P&gt;&lt;P align=left&gt; &lt;/P&gt;&lt;P align=left&gt;다음은 3-19 샘플을 실행한 결과 화면이다.&lt;/P&gt;&lt;P align=left&gt;&lt;DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"&gt;&lt;IMG style="WIDTH: 518px; HEIGHT: 256px" alt="" src="http://fs.textcube.com/blog/1/18391/attach/XBgxw5haBc.jpg"&gt;&lt;/DIV&gt;&lt;CENTER&gt;&amp;nbsp;&lt;/CENTER&gt;&lt;DIV align=left&gt;Click here to send JSON data to the server 버튼을 클릭하면 alert 창으로 JSON object 데이터 구조를 확인할 수 있다. 그리고 서버에서 처리된 결과문자열인 You have a 1968 Dodge Coronet R/T that is yellow in color. 을 확인 할 수 있을 것이다. &lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-46224337365098326?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/46224337365098326/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/08/xmlhttp.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/46224337365098326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/46224337365098326'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/08/xmlhttp.html' title='XMLHTTP'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-646945531733962236</id><published>2010-08-31T14:30:00.000+09:00</published><updated>2011-01-11T22:00:41.294+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='날짜계산'/><category scheme='http://www.blogger.com/atom/ns#' term='date'/><title type='text'>javascript 날짜 계산</title><content type='html'>&lt;P&gt;몇일부터 몇일까지의 날짜를 계산하기 위한 스크립트&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-소스&lt;br /&gt;&lt;/P&gt;&lt;DIV style="BORDER-BOTTOM: rgb(193,193,193) 3px double; BORDER-LEFT: rgb(193,193,193) 3px double; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(238,238,238); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(193,193,193) 3px double; BORDER-RIGHT: rgb(193,193,193) 3px double; PADDING-TOP: 10px" class=txc-textbox&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var dateUtil = function() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; this.startObject = null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; this.endObject = null;&lt;br /&gt;&amp;nbsp; &amp;nbsp; this.args = null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;dateUtil.prototype.formatLen = function(str) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; return str = (""+str).length&amp;lt;2 ? "0"+str : str;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;dateUtil.prototype.formatDate = function(dateObject, delimiter) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; delimiter = delimiter || "-";&lt;br /&gt;&amp;nbsp; &amp;nbsp; return dateObject.getFullYear() + delimiter + this.formatLen(dateObject.getMonth() + 1) + delimiter + this.formatLen(dateObject.getDate());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;dateUtil.prototype.toDay = function(delimiter) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; return this.formatDate(new Date(), "-");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;dateUtil.prototype.calDate = function() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var year = this.args.year == null ? 0 : Number(this.args.year);&lt;br /&gt;&amp;nbsp; &amp;nbsp; var month = this.args.month == null ? 0 : Number(this.args.month);&lt;br /&gt;&amp;nbsp; &amp;nbsp; var day = this.args.day == null ? 0 : Number(this.args.day);&lt;br /&gt;&amp;nbsp; &amp;nbsp; var result = new Date();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; result.setYear(result.getFullYear() + year);&lt;br /&gt;&amp;nbsp; &amp;nbsp; result.setMonth(result.getMonth() + month);&lt;br /&gt;&amp;nbsp; &amp;nbsp; result.setDate(result.getDate() + day);&lt;br /&gt;&amp;nbsp; &amp;nbsp; return this.formatDate(result, "-");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;dateUtil.prototype.setDate = function(startObject, endObject, args) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; this.startObject = startObject;&lt;br /&gt;&amp;nbsp; &amp;nbsp; this.endObject = endObject;&lt;br /&gt;&amp;nbsp; &amp;nbsp; this.args = args;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; document.getElementById(this.startObject).value = this.calDate()&lt;br /&gt;&amp;nbsp; &amp;nbsp; document.getElementById(this.endObject).value = this.toDay();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var dateUtilObj = new dateUtil();&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/DIV&gt;&lt;P&gt;&lt;br /&gt;&lt;br /&gt;-사용&lt;br /&gt;&lt;/P&gt;&lt;DIV style="BORDER-BOTTOM: rgb(193,193,193) 3px double; BORDER-LEFT: rgb(193,193,193) 3px double; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(238,238,238); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(193,193,193) 3px double; BORDER-RIGHT: rgb(193,193,193) 3px double; PADDING-TOP: 10px" class=txc-textbox&gt;&amp;lt;input type="text" id="startDate" name="startDate" /&amp;gt;~&lt;br /&gt;&amp;lt;input type="text" id="endDate" name="endDate" /&amp;gt;&lt;br /&gt;&amp;lt;input type="button" value="오늘" onclick="dateUtilObj.setDate('startDate', 'endDate', {})" /&amp;gt;&lt;br /&gt;&amp;lt;input type="button" value="7일" onclick="dateUtilObj.setDate('startDate', 'endDate', {day: -7})" /&amp;gt;&lt;br /&gt;&amp;lt;input type="button" value="1달" onclick="dateUtilObj.setDate('startDate', 'endDate', {month: -1})" /&amp;gt;&lt;br /&gt;&amp;lt;input type="button" value="1년" onclick="dateUtilObj.setDate('startDate', 'endDate', {year: -1})" /&amp;gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-646945531733962236?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/646945531733962236/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/08/javascript-%EB%82%A0%EC%A7%9C-%EA%B3%84%EC%82%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/646945531733962236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/646945531733962236'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/08/javascript-%EB%82%A0%EC%A7%9C-%EA%B3%84%EC%82%B0.html' title='javascript 날짜 계산'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-5402766626822293037</id><published>2010-08-06T09:27:00.000+09:00</published><updated>2011-01-11T22:00:40.331+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='assert'/><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual C'/><title type='text'>assert의 사용</title><content type='html'>&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="font-size: 100%;"&gt;ASSERT에 대해 살펴보자.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;여러분은 얼마나 많이 ASSERT를 사용하나요? ASSERT를 얼마나 잘 사용했는지를 알아보기&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;위해서는 내 코드를 사용한 동료가 입력값을 잘못 입력했을 때, 또는 나의 모듈을 잘못 사용&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;했을 때 너무 많은 오류 메시지 상자 때문에 작업을 할 수 없다고 불평할 정도가 되어야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;그만큼 모든 것을 Debug 빌드에서 확인할 수 있을 정도가 되어야 한다. 그렇다면 결국 우리는&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;''가능한 한 많이''라는 말을 머리에 항상 염두해 두어야 하겠다. &lt;b&gt;하지만&lt;/b&gt; 말이 아무리 좋다고 &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;하더라도 사용하지 않으면 전혀 쓸모가 없는 법이다.&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;그래서 오늘은 ASSERT의 의미에 대해서 살펴보고, ASSERT를 사용하는 방법에 대해서 &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;살펴보도록 하겠다. 이번 시간에는 C#을 다루도록 하겠다. 만약 여러분이 이 ASSERT를&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;제대로 사용할 줄 안다면 다른 언어(예를 들면, C++ 또는 VB .NET)에도 동일한 ASSERT&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;개념이 적용되기 때문에 레퍼런스를 활용하여 쉽게 활용하실 수 있을 것이다. &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="font-size: 100%;"&gt;ASSERT는 무엇인가?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;ASSERT는 &lt;span style="color: rgb(212, 26, 1);"&gt;프로그래머가 의도한 대로 입력 값 또는 결과가 정확하게 존재하는지를 확인&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="color: rgb(212, 26, 1);"&gt;하기 위한 작업&lt;/span&gt;이다. 여기에서 가장 중요한 단어는 &lt;strong&gt;확인&lt;/strong&gt;이다. 뒤에서 다시 한번 언급하겠지만, &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;ASSERT는 확인을 위한 과정이지 코드를 수행하기 위한 과정은 아니다. 만약 이에 대한 개념을&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;잘못 잡고 있다면 디버그 빌드와 릴리즈 빌드가 서로 다르게 작동하는 결과를 낳을 수도 있다. &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;ASSERT는 다음과 같이 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;Debug.Assert(조건, "오류 메시지"); &lt;br /&gt;&lt;br /&gt;만약 괄호안의 조건이 거짓이면 두번째 인자에 해당하는 "오류 메시지"를 표시한다. 매우 간단&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;하다. 백명중에 한명꼴로 ASSERT가 거짓인 조건을 검사한다고 이해하는 분도 있다. 그럼 완전히&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;반대의 상황이 발생해서 잘못된 값을 넣어주면 잘했다고 칭찬하고 제대로 된 값을 넣어주면 마구&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;마구 뭐라고 하는 청개구리 코드가 되어 버린다. 그런 분들이 왜 그렇게 이해했는지 얘기를 해&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;보니 ASSERT에 대한 개념을 외우려고 하다보니 그랬다라고 한다. 우리는 그냥 상식 선에서 생각&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;하자. 당연히 그게 맞는지 확인하려고하는거지, 틀린지 확인하지는 않을 것이다. &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;자, 그럼 간단한 예를 하나 들어보자.&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;public static void MyMethod(Object object) &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; Debug.Assert(object != null, "object 매개 변수가 null입니다.");&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; /* 작업 수행 */&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;이 코드에서는 매개 변수로 객체(Object 형식)가 넘어오기 때문에 이 객체를 사용하기 전에 null&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;인지 아닌지를 확인하는 코드이다. 물론 매개 변수로 넘어온 모든 객체에 대해서 null인지 &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;확인해야 하느냐에 대한 질문에는 상황마다 다르다라고 말해줄 수 밖에 없다. 경우에 따라서&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;객체가 null이어도 전혀 문제가 없을 수 있기 때문이다. 하지만 기본적으로 매개 변수로 넘어온&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;객체를 이 메서드에서 사용한다라고 가정하고 있기 때문에, 예제와 같은 코드는 매우 흔히 볼 수&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;있는 ASSERT의 대표적인 경우라고 보면 되겠다. 자, 그럼 여러분은 이제 매개 변수로 넘어온 &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size: 100%;"&gt;객체에 대해서 null인지 아닌지를 구분해야 한다라는 것을 알게 되었다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;&lt;strong&gt;ASSERT를 어떻게 사용할 것인가?&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;앞서 말했듯이, ASSERT는 굉장히 단순한 개념이다. 프로그래머가 확인하고 싶은 조건을 걸어두고&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;그냥 실행만 하면 조건에 맞지 않는 값이 들어왔을 때, 프로그래머가 디버깅을 하지 않아도 오류가&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;발생한 위치를 정확하게 알 수 있다. 일반적으로 ASSERT는 다음과 같은 상황에서 사용한다. &lt;br /&gt;&lt;br /&gt;1. 내가 작성한 메서드에 넘어온 매개 변수를 확인하고 싶을 때 &lt;br /&gt;2. 내가 호출한 메서드에서 반환한 값을 확인하고 싶을 때 &lt;br /&gt;3. 내가 호출하는 메서드의 매개 변수를 확인하고 싶을 때 &lt;br /&gt;&lt;br /&gt;첫번째, ''내가 작성한 메서드에 넘어온 매개 변수를 확인하고 싶을 때''가 ASSERT를 사용하는 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;가장 흔한 경우이다. 앞에서 소개한 예제 코드도 바로 이런 경우에 속한다고 볼 수 있다. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;이 경우에는 대부분 메서드의 코드 시작 부분에서 오류가 발생할 수 있는 모든 상황을 검증하는&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;것이 일반적이다. 왜냐하면 시작 부분에서 완벽하게 검증하지 않고 ASSERT 코드가 분산되어 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;있다면 매개 변수로 넘어온 값이 내가 작성한 코드에 의해서 영향을 받게 되어 ASSERT가 실패할&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;수 있기 때문이다. 이런 경우에는 비록 ASSERT로 오류가 발생하는 위치를 찾았다고 하더라도&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;디버깅하기 위해서 처음부터 코드를 다시 살펴봐야 하기 때문이다. 따라서 &lt;b&gt;매개 변수는 함수 &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;&lt;b&gt;시작 부분에서 확인한다&lt;/b&gt;라고 알아두시면 되겠다. &lt;br /&gt;&lt;br /&gt;두번째 ''내가 작성한 메서드에서 반환한 값을 확인하고 싶은 경우''는 우리가 잊어버리기가 굉장히 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;쉽다. 하지만 첫번째 상황보다는 ASSERT를 해야 한다라는 인식면에서 볼때 더 많이 알려진 경우&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;라고 볼 수 있다. 사실 프로그래머가 되면서 가장 많이 듣는 말이 리턴 값을 검사해야 한다는 말이다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;리턴 값을 넘기지 않는 함수들도 많지만, 함수가 제대로 작성되어 있다면 적어도 성공 또는 실패라는&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;정도는 알려주어야 한다고 생각한다. 리턴 값이 없는 함수들(리턴 값이 void인 함수들)을 작성한 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;프로그래머는 거의 모든 상황에서 함수가 성공하며 이 함수를 사용하는 사람은 함수의 성공 여부에 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;관심을 가질 필요가 없다라고 생각하기 때문일 것이다. 하지만 그건 함수를 작성하는 사람의 생각일 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;뿐이지, 함수가 리턴값으로 성공이라고 알려준다고 해도 전혀 해가 될것이 없고 언젠가는 함수의 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;결과를 확인해야 하는 순간이 올 수 있기 때문에 될 수 있으면 리턴 값을 넘기도록 함수를 작성하는 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;것이 좋다고 생각한다. 결국 내가 호출하는 어떠한 함수도 실패할 수 있고 내가 원하는 대로 함수가 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;작동하는지 확인해야 할 필요가 있기 때문에 함수의 리턴값은 함수를 호출한 다음 곧바로 검사할 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;수 있도록 해야한다. &lt;br /&gt;&lt;br /&gt;마지막으로 ''내가 호출하는 메서드의 매개 변수를 확인하고 싶을 때''에는 일반적으로 자주 일어나는&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;경우는 아니지만, 다른 사람이 작성한 함수가 잘 작동할 수 있도록 배려하는 차원에서 확인한다고&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;보면 되겠다. 하지만 내가 아무리 정확하게 검증한다고 하더라도 해당 함수를 작성한 사람이 함수&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;안에서 내가 전달한 매개 변수를 검증하는 것보다는 확실하지 못할 것이다. 결국 첫번째 경우를 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 100%;"&gt;모두가 지켜준다면 세번째 경우는 필요가 없다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br /&gt;출처 : 네이버 지식인&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-5402766626822293037?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/5402766626822293037/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/08/assert%EC%9D%98-%EC%82%AC%EC%9A%A9.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/5402766626822293037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/5402766626822293037'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/08/assert%EC%9D%98-%EC%82%AC%EC%9A%A9.html' title='assert의 사용'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-7227625647366509967</id><published>2010-07-30T11:03:00.000+09:00</published><updated>2011-01-11T22:00:39.511+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>Visual Studio 2003 단축키</title><content type='html'>&lt;H2&gt;일반 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합은 IDE(통합 개발 환경) 내의 여러 위치에서 사용할 수 있습니다.&lt;/P&gt;&lt;TABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.복사&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+C&lt;br /&gt;Ctrl+Ins&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 선택한 항목을 시스템 클립보드에 복사합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.잘라내기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+X&lt;br /&gt;Shift+Del&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 선택한 항목을 시스템 클립보드로 잘라냅니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.클립보드링순환&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+Ins&lt;br /&gt;Ctrl+Shift+V&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;도구 상자&lt;/B&gt;의 &lt;B&gt;클립보드 링&lt;/B&gt; 탭에 있는 항목을 파일의 삽입 포인트에 붙여 넣고, 붙여 넣은 항목을 자동으로 선택합니다. 바로 가기 키를 반복해서 누르면 클립보드에 있는 각 항목을 검토할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.다음위치로이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;F8&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 다음 항목(예: &lt;B&gt;작업 목록&lt;/B&gt; 창에 있는 작업이나 &lt;B&gt;찾기 결과&lt;/B&gt; 창에 있는 검색 결과 항목)으로 이동합니다. F8 키를 누를 때마다 목록의 다음 항목으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.이전위치로이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+F8&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;작업 목록&lt;/B&gt; 창이나 &lt;B&gt;찾기 결과&lt;/B&gt; 창의 이전 항목으로 커서를 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.참조로이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+F12&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;코드에서 선택한 기호의 참조를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.파일열기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+G&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;기존 파일을 열 수 있는 파일 열기 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.붙여넣기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+V&lt;br /&gt;Shift+Ins&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;클립보드 내용을 삽입 포인트에 삽입합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.다시실행&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+Z&lt;br /&gt;Ctrl+Y&lt;br /&gt;Shift+Alt+백스페이스&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;이전에 실행 취소된 작업을 복원합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.선택취소&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Esc&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;메뉴 또는 대화 상자를 닫거나, 진행 중인 작업을 취소하거나, 현재 문서 창에 포커스를 둡니다. .NET Framework 디자이너에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.실행취소&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+백스페이스&lt;br /&gt;Ctrl+Z&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;마지막 편집 작업을 취소합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;파일.인쇄&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+P&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;프린터 설정을 변경할 수 있는 인쇄 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;파일.모두저장&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+S&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 솔루션의 모든 문서 및 외부 파일 프로젝트의 모든 파일을 저장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;파일.선택한항목저장&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+S&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 프로젝트의 선택 항목을 저장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도구.명령줄로이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+/&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;캐럿을 표준 도구 모음의 찾기/명령 상자에 놓습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.다음작업&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+F12&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;작업 목록 창의 다음 작업으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.찾아보기컨텍스트표시&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+8&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;찾아보기 동작이 마지막으로 수행된 위치로 되돌아갑니다. 개체 브라우저 또는 클래스 창에서 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.코드보기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;F7&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 항목을 편집기의 코드 뷰에 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.디자이너보기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+F7&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 항목을 편집기의 디자인 뷰에 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.웹뒤로탐색&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;보고 있는 기록의 이전 페이지를 표시합니다. &lt;B&gt;웹 브라우저&lt;/B&gt; 창에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.웹앞으로탐색&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+오른쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;보고 있는 기록의 다음 페이지를 표시합니다. &lt;B&gt;웹 브라우저&lt;/B&gt; 창에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;H2 class=dtH2&gt;HTML 디자이너 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합은 HTML 디자이너에서 편집할 때만 사용할 수 있습니다. 일부 키 조합은 해당 디자이너의 특정 뷰에서만 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.멤버목록&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+J&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;코드 편집 시 문 완성을 위해 현재 클래스의 멤버를 나열합니다. HTML 디자이너의 HTML 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.매개변수정보&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+스페이스바&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 언어에 따라 현재 매개 변수에 대한 설명이 포함된 도구 설명을 표시합니다. &lt;B&gt;HTML 편집기&lt;/B&gt;의 &lt;B&gt;HTML&lt;/B&gt; 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.뷰맨아래로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Page Down&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 문서의 맨 아래로 이동합니다. HTML 디자이너의 HTML 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.뷰맨위로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Page Up(다른 이름으로 파일 저장)&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 창의 맨 위로 이동합니다. HTML 디자이너의 HTML 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;서식.굵게&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+B&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 텍스트를 굵은 글꼴로 표시하거나 보통 글꼴로 표시합니다. &lt;B&gt;HTML 디자이너&lt;/B&gt;의 &lt;B&gt;디자인&lt;/B&gt; 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;서식.책갈피&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+L&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;즐겨찾기&lt;/B&gt; 대화 상자를 표시합니다. HTML 디자이너의 디자인 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;서식.하이퍼링크로변환&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+L&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;텍스트가 선택되어 있으면 하이퍼링크 대화 상자를 표시합니다. HTML 디자이너의 디자인 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;서식.내어쓰기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+T&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 단락을 내어쓰기 한 단위 씩 내어씁니다. &lt;B&gt;HTML 디자이너&lt;/B&gt;의 &lt;B&gt;디자인&lt;/B&gt; 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;서식.들여쓰기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+T&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 단락을 들여쓰기 단위 하나씩 들여씁니다. &lt;B&gt;HTML 디자이너&lt;/B&gt;의 &lt;B&gt;디자인&lt;/B&gt; 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;서식.기울임꼴&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+I&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 텍스트를 기울임꼴로 표시하거나 보통 글꼴로 표시합니다. &lt;B&gt;HTML 디자이너&lt;/B&gt;의 &lt;B&gt;디자인&lt;/B&gt; 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;서식.요소잠그기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+K&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;절대 위치로 배치된 요소가 실수로 옮겨지지 않도록 합니다. &lt;B&gt;HTML 디자이너&lt;/B&gt;의 &lt;B&gt;디자인&lt;/B&gt; 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;서식.모눈표시&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+G&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;모눈 표시를 전환합니다. HTML 디자이너의 디자인 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;서식.모눈에맞춤&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+G&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;보이지 않는 모눈을 사용하여 요소를 맞추도록 지정합니다. 옵션 대화 상자에 있는 HTML 디자이너 옵션의 디자인 창에서 모눈 간격을 설정할 수 있으며, 다음에 문서를 열 때 모눈이 변경됩니다. HTML 디자이너의 디자인 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;서식.밑줄&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+U&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 텍스트를 밑줄로 표시하거나 보통 글꼴로 표시합니다. &lt;B&gt;HTML 디자이너&lt;/B&gt;의 &lt;B&gt;디자인&lt;/B&gt; 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;테이블.왼쪽에열삽입&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;테이블의 현재 열 왼쪽에 열을 하나 추가합니다. HTML 디자이너의 디자인 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;테이블.오른쪽에열삽입&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+오른쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;테이블의 현재 열 오른쪽에 열을 하나 추가합니다. HTML 디자이너의 디자인 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;테이블.위에행삽입&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+위쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;테이블의 현재 행 위에 행을 하나 추가합니다. HTML 디자이너의 디자인 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;테이블.아래에행삽입&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+아래쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;테이블의 현재 행 아래에 행을 하나 추가합니다. HTML 디자이너의 디자인 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.자세히&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+Q&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;주석, 스크립트 및 절대 위치로 배치된 요소의 앵커와 같이 눈에 보이는 표시가 없는 HTML 요소의 신호 아이콘을 표시합니다. HTML 디자이너의 디자인 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.다음뷰&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Page Down&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 뷰에서 HTML 뷰로, 또는 그 반대로 전환합니다. &lt;B&gt;HTML 디자이너&lt;/B&gt;의 &lt;B&gt;디자인&lt;/B&gt; 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.테두리표시&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Q&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;테이블, 테이블 셀, 분할선과 같이 BORDER 특성을 지원하며 해당 특성이 0으로 설정된 HTML 요소의 주위에 1픽셀짜리 테두리를 표시합니다. HTML 디자이너의 디자인 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;XML 디자이너 바로 가기 키&lt;/H2&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;스키마.축소&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+(-)&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;중첩 요소를 축소합니다. XML 디자이너의 스키마 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;스키마.확장&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+(=)&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;중첩 요소를 확장합니다. XML 디자이너의 스키마 뷰에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;컨트롤 조작 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합은 디자인 화면에서 컨트롤을 이동하거나, 선택하거나, 크기를 변경할 때 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.컨트롤아래로이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+아래쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 선택한 컨트롤을 1단위씩 아래로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.모눈아래로컨트롤이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;아래쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 선택한 컨트롤을 8단위씩 아래로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.컨트롤왼쪽으로이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 컨트롤을 1단위씩 왼쪽으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.모눈왼쪽으로컨트롤이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 컨트롤을 8단위씩 왼쪽으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.컨트롤오른쪽으로이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+오른쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 컨트롤을 1단위씩 오른쪽으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.모눈오른쪽으로컨트롤이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;오른쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 컨트롤을 8단위씩 오른쪽으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.컨트롤위로이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+위쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 선택한 컨트롤을 1단위씩 위로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.모눈위로컨트롤이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;위쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 선택한 컨트롤을 8단위씩 위로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.다음컨트롤선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Tab&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;페이지의 다음 컨트롤로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.이전컨트롤선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Tab&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;페이지에서 이전에 선택한 컨트롤로 다시 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.아래로컨트롤크기조정&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+아래쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 컨트롤의 높이를 1단위씩 높입니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.모눈아래로컨트롤크기조정&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+아래쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 컨트롤의 높이를 8단위씩 높입니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.왼쪽으로컨트롤크기조정&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 컨트롤의 너비를 1단위씩 줄입니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.모눈왼쪽으로컨트롤크기조정&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 컨트롤의 너비를 8단위씩 줄입니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.오른쪽으로컨트롤크기조정&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+오른쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 컨트롤의 너비를 1단위씩 늘립니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.모눈오른쪽으로컨트롤크기조정&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 컨트롤의 너비를 8단위씩 늘립니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.위로컨트롤크기조정&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+위쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 컨트롤의 높이를 1단위씩 줄입니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.모눈위로컨트롤크기조정&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디자인 화면에서 컨트롤의 높이를 8단위씩 줄입니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;디버그 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합은 코드를 디버깅할 때 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.코드변경내용적용&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+F10&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;편집하며 계속하기를 시작하여 디버그 중인 코드에 변경 내용을 적용합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.자동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+V, A&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 프로시저에서 현재 실행되는 줄의 범위에 현재 포함된 변수의 값을 볼 수 있는 &lt;B&gt;자동&lt;/B&gt; 창을 표시합니다. &lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.모두중단&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+ Break&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디버깅 세션의 모든 프로세스 실행을 일시 중지합니다. 실행 모드에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.중단점&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+B&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;중단점을 추가하고 수정할 수 있는 &lt;B&gt;중단점&lt;/B&gt; 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.호출스택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+C&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;활성화된 모든 프로시저 목록이나 현재 실행 스레드에 대한 스택 프레임을 표시하는 &lt;B&gt;호출 스택&lt;/B&gt; 창을 표시합니다. 실행 모드에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.모든중단점지우기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+F9&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;프로젝트의 모든 중단점을 지웁니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.디스어셈블리&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+D&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;디스어셈블리&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.중단점설정&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+F9&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 코드 줄에 중단점을 설정합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.예외&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+E&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;예외&lt;/B&gt; 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.직접실행&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+I&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;식을 계산하고 개별 명령을 실행할 수 있는 &lt;B&gt;직접 실행&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.지역&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+V, L&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 스택 프레임의 각 프로시저에 대한 변수 및 각 변수의 값을 볼 수 있는 지역 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.메모리1&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+M, 1&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;조사식 창 또는 변수 창에서는 잘 표시되지 않는 큰 버퍼, 문자열, 또는 기타 데이터를 볼 수 있는 메모리1 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.메모리2&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+M, 2&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;조사식 또는 변수 창에 제대로 표시되지 않는 큰 버퍼, 문자열 및 기타 데이터를 볼 수 있는 메모리 2 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.메모리3&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+M, 3&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;조사식 또는 변수 창에 제대로 표시되지 않는 큰 버퍼, 문자열 및 기타 데이터를 볼 수 있는 메모리 3 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.메모리4&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+M, 4&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;조사식 또는 변수 창에 제대로 표시되지 않는 큰 버퍼, 문자열 및 기타 데이터를 볼 수 있는 메모리 4 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.모듈&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+U&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;프로그램에서 사용하는 .dll 또는 .exe 파일을 볼 수 있는 모듈 창을 표시합니다. 다중 프로세스 디버깅에서 마우스 오른쪽 단추로 클릭하여 모든 프로그램에 대해 모듈 표시를 선택할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.새중단점&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+B&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 코드 줄에서 중단점을 하나 삽입하거나 삭제합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.간략한조사식&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+Q&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 식의 현재 값이 포함된 간략한 조사식 대화 상자를 표시합니다. 중단 모드에서만 사용할 수 있습니다. 조사식을 아직 정의하지 않은 변수, 속성 또는 기타 식의 현재 값을 확인하려면 이 명령을 사용합니다. &lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.레지스터&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+G&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;네이티브 코드 응용 프로그램을 디버깅하기 위한 레지스터 내용을 표시하는 &lt;B&gt;레지스터&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.다시시작&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+F5&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디버깅 세션을 종료하고 다시 빌드한 다음 처음부터 다시 응용 프로그램 실행을 시작합니다. 중단 및 실행 모드에서 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.실행중인문서&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+N&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 디버깅 프로세스에 있는 문서들을 표시하는 실행 중인 문서 창을 표시합니다. 실행 모드에서 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.커서까지실행&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+F10&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;중단 모드에서는 현재 문부터 선택한 문까지 코드 실행을 다시 시작합니다. 현재 실행 중인 줄의 여백 표시기가 여백 표시줄에 나타납니다.&lt;br /&gt;디자인 모드에서는 디버거를 시작하고 커서 위치까지 코드를 실행합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.다음문설정&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+F10&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 코드 줄을 실행 지점으로 설정합니다. &lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.다음문표시&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+Num *&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;다음에 실행할 문을 강조 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.시작&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;F5&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;자동으로 디버거에 연결하고 &lt;B&gt;&amp;lt;Project&amp;gt; 속성&lt;/B&gt; 대화 상자에 지정된 시작 폼에서 응용 프로그램을 실행합니다. 중단 모드에서는 계속으로 바뀝니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.디버깅하지않고시작&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+F5&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;디버거를 호출하지 않고 코드를 실행합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.한단계씩코드실행&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;F11&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;한 번에 하나씩 코드를 실행한 다음 함수 호출을 실행합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.프로시저나가기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+F11&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 실행 지점에서 함수의 나머지 줄을 실행합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.프로시저단위실행&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;F10&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;다음 코드 줄을 실행하지만 함수 호출을 통한 실행은 제외됩니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.디버깅중지&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+F5&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;프로그램에서 현재 응용 프로그램의 실행을 중단합니다. 중단 및 실행 모드에서 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.This&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+V, T&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 메서드와 연결된 개체의 데이터 멤버를 볼 수 있는 이 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.스레드&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+H&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 프로세스의 모든 스레드와 해당 스레드에 대한 정보를 볼 수 있는 &lt;B&gt;스레드&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.중단점설정해제&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;F9&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 줄에 중단점을 설정하거나 제거합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.디스어셈블리설정해제&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+F11&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 소스 파일의 디스어셈블리 정보를 표시합니다. 중단 모드에서만 사용할 수 있습니다. &lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.조사식1&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+W, 1&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 변수 또는 조사식의 값을 볼 수 있는 조사식 1 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.조사식2&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+W, 2&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 변수 또는 조사식의 값을 볼 수 있는 조사식 2 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.조사식3&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+W, 3&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 변수 또는 조사식의 값을 볼 수 있는 조사식 3 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;디버그.조사식4&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+W, 4&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 변수 또는 조사식의 값을 볼 수 있는 조사식 4 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도구.프로세스디버그&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+P&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;한 솔루션에서 여러 프로그램을 디버깅할 수 있는 프로세스 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;찾기 및 바꾸기 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합은 찾기, 바꾸기, 파일에서 찾기, 파일에서 바꾸기 대화 상자에서 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.찾기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+F&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;찾기 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.파일에서찾기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+F&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;파일에서 찾기&lt;/B&gt; 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.다음찾기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;F3&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;이전에 검색한 텍스트를 계속 찾습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.다음찾기선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+F3&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;문서에서 현재 선택한 텍스트를 계속 찾습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.이전찾기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+F3&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;검색 텍스트를 뒤로 찾습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.이전찾기선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+F3&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 선택한 텍스트 또는 캐럿의 단어를 뒤로 찾습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.찾기콤보상자로이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+D&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;캐럿을 표준 도구 모음의 &lt;B&gt;찾기&lt;/B&gt;/&lt;B&gt;명령&lt;/B&gt; 줄에 놓습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.숨겨진텍스트&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+F3, H&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;찾기&lt;/B&gt; 대화 상자의 &lt;B&gt;숨겨진 텍스트 검색&lt;/B&gt; 옵션을 선택하거나 선택 취소합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.증분검색&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+I&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;증분 검색을 시작합니다. 증분 검색이 시작되었지만 아직 아무 문자도 입력하지 않은 경우에는 이전 패턴을 다시 호출합니다. 텍스트를 찾으면 다음 항목을 검색합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.대소문자구분&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+F3, C.&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;찾기 및 바꾸기 작업에 대해 대/소문자 구분 옵션을 선택하거나 선택 취소합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.정규식&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+F3, R&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;찾기 및 바꾸기 작업에 특수 문자를 사용할 수 있는 정규식 옵션을 선택하거나 선택 취소합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.바꾸기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+H&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;바꾸기 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.파일에서바꾸기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+H&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;파일에서 바꾸기&lt;/B&gt; 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.역방향증분검색&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+I&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;파일 맨 아래에서 시작하여 위로 검색하도록 증분 검색의 방향을 변경합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.검색중지&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+F3, S&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 &lt;B&gt;파일에서 찾기&lt;/B&gt; 작업을 중단합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.위로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+F3, B&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;찾기 및 바꾸기 작업에 대해 Search Up 옵션을 선택하거나 선택 취소합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.단어단위로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+F3, W&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;찾기 및 바꾸기 작업에 대해 단어 단위로 옵션을 선택하거나 선택 취소합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.와일드카드&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+F3, P&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;찾기 및 바꾸기 작업에 대해 와일드카드 옵션을 선택하거나 선택 취소합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;Visual Database Tools 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합은 데이터베이스 디자이너나 쿼리 디자이너에서 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;데이터베이스.실행&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+D&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 활성화된 데이터베이스 개체를 실행합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;데이터베이스.선택영역실행&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Q&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;SQL 편집기에서 현재 선택된 영역을 실행합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;데이터베이스.한단계씩코드실행&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+F5&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 활성화된 데이터베이스 개체에 대해 한 단계씩 실행하여 디버그 모드로 들어갑니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;쿼리.실행&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+R&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;쿼리를 실행합니다. 쿼리 디자이너에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.다이어그램&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+1&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;쿼리 디자이너의 다이어그램 창을 표시합니다. 쿼리 디자이너에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.모눈&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+2&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;쿼리 디자이너의 Grid 창을 표시합니다. 쿼리 디자이너에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.결과&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl +4&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;쿼리 디자이너의 결과 창을 표시합니다. 쿼리 디자이너에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.SQL&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl +3&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;쿼리 디자이너의 SQL 창을 표시합니다. 쿼리 디자이너에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;텍스트 탐색 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합은 텍스트 편집기에서 열려 있는 문서 내부를 이동할 때 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.왼쪽문자로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 왼쪽으로 한 문자 이동합니다. .NET Framework 디자이너에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.오른쪽문자로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;오른쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 오른쪽으로 한 문자 이동합니다. .NET Framework 디자이너에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.문서끝으로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+End&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트를 문서의 마지막 줄로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.문서시작으로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Home&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트를 문서의 첫 줄로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+G&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;줄 이동&lt;/B&gt; 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.중괄호로이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+]&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트를 다음 중괄호로 옮깁니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.줄아래로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;아래쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 한 줄 아래로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.줄끝으로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;End&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 현재 줄의 끝으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.줄시작으로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Home&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 줄의 처음으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.줄위로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;위쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 한 줄 위로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.다음책갈피&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+K, Ctrl+N&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;문서의 다음 책갈피로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.페이지아래로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Page Down&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;편집기 창에서 한 화면 아래로 스크롤합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.페이지위로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Page Up&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;편집기 창에서 한 화면 위로 스크롤합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.이전책갈피&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+K, Ctrl+P&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;이전 책갈피로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.요약정보&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+K, Ctrl+I&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 언어에 따라 요약 정보를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.아래로줄스크롤&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+아래쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;한 줄 아래의 텍스트로 스크롤합니다. 텍스트 편집기에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.위로줄스크롤&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+위쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;한 줄 위의 텍스트로 스크롤합니다. 텍스트 편집기에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.다음단어로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+오른쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트를 한 단어 오른쪽으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.이전단어로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트를 한 단어 왼쪽으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.다음찾아보기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+1&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;다음 정의, 선언 또는 항목 참조를 탐색합니다. 개체 브라우저 및 클래스 뷰 창에서 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.이전찾아보기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+2&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;이전 정의, 선언 또는 항목 참조를 탐색합니다. 개체 브라우저 및 클래스 뷰 창에서 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;텍스트 선택 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합은 텍스트 편집기에서 열려 있는 문서의 텍스트를 선택할 때 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.왼쪽문자까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 왼쪽으로 한 문자 이동하여 선택 영역을 확장합니다. .NET Framework 디자이너에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.왼쪽문자까지열확장선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Alt+왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 왼쪽으로 한 문자 이동하여 열 선택 영역을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.오른쪽문자까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+오른쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 오른쪽으로 한 문자 이동하여 선택 영역을 확장합니다. .NET Framework 디자이너에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.오른쪽문자까지열확장선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Alt+오른쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 오른쪽으로 한 문자 이동하여 열 선택 영역을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.문서끝까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+End&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트부터 문서의 마지막 줄까지 텍스트를 선택합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.문서시작까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+Home&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트부터 문서의 첫 줄까지 텍스트를 선택합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.중괄호로이동확장&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+]&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트를 다음 중괄호로 이동하여 선택을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.한줄아래까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+아래쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;텍스트 선택 영역을 삽입 포인트가 있는 위치부터 시작해서 한 줄 아래로 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.한줄아래까지열확장선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Alt+아래쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 한 줄 아래로 이동해서 열 선택을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.줄끝까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+End&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트부터 현재 줄의 끝까지 텍스트를 선택합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.줄끝까지열확장선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Alt+End&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트를 줄 끝으로 옮겨서 열 선택을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.줄시작까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Home&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트부터 줄의 시작까지 텍스트를 선택합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.줄시작까지열확장선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Alt+Home&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트를 줄의 처음으로 옮겨서 열 선택을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.한줄위까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+위쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트 위치에서 시작하여 한 줄씩 위로 텍스트를 선택합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.한줄위까지열확장선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Alt+위쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 한 줄 위로 이동해서 열 선택을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.한페이지아래까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Page Down&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;한 페이지 아래로 선택 영역을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.한페이지위까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Page Up&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;한 페이지 아래로 선택 영역을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.모두선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+A&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 문서의 모든 내용을 선택합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.현재단어선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+W&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트가 포함된 단어나 삽입 포인트의 오른쪽에 있는 단어를 선택합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.이전위치까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+=&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;편집기의 현재 위치에서 편집기의 이전 위치까지 선택합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.뷰맨아래까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+Page Down&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 뷰의 마지막 줄로 옮겨서 선택을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.뷰맨위까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+Page Up&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택 영역을 현재 창의 맨 위로 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.다음단어까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+오른쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;한 단어 오른쪽으로 선택 영역을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.다음단어까지열확장선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+Alt+오른쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 오른쪽으로 한 단어 이동하여 열 선택 영역을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.이전단어까지선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;왼쪽으로 한 단어씩 선택을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.이전단어까지열확장선택&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+Alt+왼쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서를 왼쪽으로 한 단어 이동해서 열 선택을 확장합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;텍스트 조작 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합은 텍스트 편집기에서 열려 있는 문서의 텍스트를 삭제하거나, 이동하거나, 서식을 지정할 때 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.구분선&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Enter&lt;br /&gt;Shift+Enter&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;새 줄을 삽입합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.문자바꾸기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+T&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트의 양쪽에 있는 문자를 바꿉니다. 예를 들어 AC|BD를 AB|CD로바꿉니다. 텍스트 편집기에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.책갈피지우기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+K, Ctrl+L&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 문서에서 명명되지 않은 책갈피를 모두 제거합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.정의부분만보이기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+M, Ctrl+O&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;프로시저와 같이 코드에 영역을 생성하기 위한 논리적 경계를 자동으로 결정한 후, 이를 숨깁니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.선택영역을주석으로처리&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+K, Ctrl+C&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;해당 프로그래밍 언어에 맞는 주석 구문을 사용하여 현재의 코드를 주석으로 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.단어자동완성&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+오른쪽 화살표 &lt;br /&gt;Ctrl+스페이스바&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 언어에 따라 &lt;B&gt;단어 완성&lt;/B&gt;을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.삭제&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Delete&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서의 오른쪽에 있는 문자 하나를 삭제합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.뒤로삭제&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;백스페이스&lt;br /&gt;Shift+백스페이스&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;커서의 왼쪽에 있는 문자 하나를 삭제합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.가로공백삭제&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+K, Ctrl+\&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택 영역의 공백을 축소합니다. 선택 영역이 없으면 커서 주위의 공백을 삭제합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.문서서식&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+K, Ctrl+D&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;옵션 대화 상자에 있는 텍스트 편집기 섹션의 해당 언어 서식 창에 지정된 대로 해당 언어에 대한 들여쓰기 및 공백 서식을 적용합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.선택영역서식&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+K, Ctrl+F&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;코드의 주변 줄에 맞춰 선택한 줄을 들여씁니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.선택영역숨기기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+M, Ctrl+H&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 텍스트를 숨깁니다. 신호 아이콘은 파일에서 숨겨진 텍스트의 위치를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.탭삽입&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Tab&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;텍스트 줄을 지정한 공백 수 만큼(예: 5) 들여씁니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.줄잘라내기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+L&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 모든 줄을 클립보드에 잘라냅니다. 선택한 줄이 없는 경우에는 현재 줄을 잘라냅니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.줄삭제&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+L&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 모든 줄을 삭제합니다. 선택한 줄이 없는 경우에는 현재 줄을 삭제합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.위쪽줄열기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Enter&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트 위에 빈 줄을 삽입합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.아래쪽줄열기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+Enter&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트 아래에 빈 줄을 삽입합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.줄바꾸기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Alt+T&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트가 포함된 줄을 한 줄 아래로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.소문자로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+U&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 텍스트를 소문자로 변경합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.대문자로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+U&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 텍스트를 대문자로 변경합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.겹쳐쓰기모드&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Insert&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 모드와 겹쳐쓰기 모드를 전환합니다. 텍스트 편집기에서 작업할 때에만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.현재숨기기중지&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+M, Ctrl+U&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 선택한 영역에 대한 개요 정보를 제거합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.개요표시중지&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+M, Ctrl+P&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;전체 문서에 대한 개요 정보를 모두 제거합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.앵커바꾸기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+R, Ctrl+P&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 선택 영역의 앵커와 끝 점을 바꿉니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.왼쪽으로탭이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Tab&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 줄을 탭 정지 하나만큼 왼쪽으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.전체개요표시숨기기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+M, Ctrl+L&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;이전에 표시된 모든 숨겨진 텍스트 섹션을 숨김 상태와 표시 상태 사이에서 전환합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.책갈피설정해제&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+K, Ctrl+K&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 줄에 책갈피를 설정하거나 제거합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.개요확장축소&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+M, Ctrl+M&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 선택된 숨겨진 텍스트 섹션을 숨김 상태와 표시 상태 사이에서 전환합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.작업목록바로가기설정해제&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+K, Ctrl+H&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 줄에 바로 가기를 설정하거나 제거합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.자동줄바꿈설정해제&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl +R, Ctrl+R&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;편집기의 자동 줄 바꿈 기능을 활성화하거나 비활성화합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.선택영역의주석처리제거&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+K, Ctrl+U&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 코드 줄에서 주석 구문을 제거합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.공백보기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+R, Ctrl+W&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;공백 및 탭 기호를 표시하거나 숨깁니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.끝까지단어삭제&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Del&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트 오른쪽에 있는 단어를 삭제합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.시작까지단어삭제&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+백스페이스&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트 왼쪽에 있는 단어를 삭제합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.단어바꾸기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+T&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;삽입 포인트의 양쪽에 있는 단어를 서로 바꿉니다. 예를 들면 |End Sub는 Sub End|가 됩니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;창 관리 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합은 도구 및 문서 창을 이동하거나, 닫거나, 탐색할 때 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.전체화면&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Alt+Enter&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;전체 화면&lt;/B&gt; 모드를 설정하거나 설정 해제합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.뒤로탐색&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+-&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;탐색 기록에 있는 이전 문서 또는 창으로 돌아갑니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.앞으로탐색&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+-&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;탐색 기록에 있는 다음 문서 또는 창으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;창.문서창활성화&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Esc&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;메뉴 또는 대화 상자를 닫거나, 진행 중인 작업을 취소하거나, 현재 문서 창에 포커스를 둡니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;창.문서창닫기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+F4&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 MDI 자식 창을 닫습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;창.도구창닫기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Esc&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 도구 창을 닫습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;창.드롭다운표시줄로이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+F2&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;편집기가 &lt;B&gt;코드&lt;/B&gt; 뷰에 있는 동안 커서를 드롭다운 표시줄로 옮깁니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;창.다음문서창&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+F6&lt;br /&gt;Ctrl+Tab&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;MDI 자식 창을 한 번에 하나씩 순환합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;창.다음창&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+F6&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;다음 도구 창으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;창.다음분할창&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;F6&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;단일 문서에서 분할 창 뷰의 다음 창으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;창.다음탭&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Page Down&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;문서 또는 창의 다음 탭으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;창.이전문서창&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+F6&lt;br /&gt;Ctrl+Shift+Tab&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;편집기 또는 디자이너의 이전 문서로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;창.이전창&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Alt+F6&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;이전에 선택한 창으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;창.이전분할창&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+F6&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;분할 창 뷰에서 문서의 이전 창으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;창.이전탭&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Page UP&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;문서 또는 창의 이전 탭으로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;통합 도움말 바로 가기 키&lt;/H2&gt;&lt;P&gt;아래의 바로 가기 키 조합은 도움말 항목들을 보거나 이동할 때 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도움말.목차&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+F1&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;MSDN에 포함된 설명서의 &lt;B&gt;목차&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도움말.동적도움말&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+F1&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;제품에서 현재 포커스를 가진 대상에 따라 다른 항목을 표시하는 동적 도움말 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도움말.F1도움말&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;F1&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 선택된 사용자 인터페이스에 해당하는 도움말의 항목을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도움말.색인&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+F2&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;MSDN에 포함된 설명서의 &lt;B&gt;색인&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도움말.색인결과&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Alt+F2&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;색인&lt;/B&gt; 창에서 선택한 키워드가 포함된 항목을 나열하는 &lt;B&gt;색인 결과&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도움말.다음항목&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+아래쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;목차의 다음 항목을 표시합니다. 도움말 (웹) 브라우저 창에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도움말.이전항목&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+위쪽 화살표&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;목차의 이전 항목을 표시합니다. 도움말 (웹) 브라우저 창에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도움말.검색&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+F3&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;MSDN에 포함된 설명서에서 단어나 구를 검색할 수 있는 검색 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도움말.검색결과&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Alt+F3&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;검색&lt;/B&gt; 창에서 검색한 문자열이 포함된 주제 목록을 표시하는 &lt;B&gt;검색 결과&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도움말.창도움말&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+F1&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 선택된 사용자 인터페이스에 해당하는 도움말의 항목을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;개체 브라우저 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합은 개체 브라우저 창에서 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.기호찾기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+F12&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;기호 찾기 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.선언으로이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+F12&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;코드에서 선택한 기호에 대한 정의를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.정의로이동&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;F12&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;코드에서 선택한 기호에 대한 선언을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.기호찾기결과&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+F12&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;기호 찾기 결과 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.개체브라우저&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+J&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;패키지에 포함된 클래스, 속성, 메서드, 이벤트, 상수를 보거나 프로젝트의 개체 라이브러리와 프로시저를 볼 수 있는 개체 브라우저를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.개체브라우저뒤로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+-&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;개체 브라우저의 선택 기록에서 이전에 선택한 개체로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.개체브라우저앞으로&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Alt+-&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;개체 브라우저의 선택 기록에서 다음 개체로 이동합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;매크로 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합은 매크로 작업을 할 때 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.매크로탐색기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+F8&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 솔루션에 사용할 수 있는 모든 매크로를 나열하는 &lt;B&gt;매크로 탐색기&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도구.매크로IDE&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Alt+F11&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;매크로 IDE, Visual Studio Macros를 실행합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도구.TemporaryMacro기록&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+R&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;환경을 매크로 기록 모드에 놓습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도구.TemporaryMacro실행&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+P&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;기록된 매크로를 재생합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;도구 창 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합으로 특정 도구 창을 표시할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;도구.명령창표시모드&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+M&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;명령 창 내부에서 텍스트를 선택할 수 있도록 합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.클래스뷰&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+C&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;클래스 뷰&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.명령창&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+A&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;IDE 조작 명령을 입력할 수 있는 &lt;B&gt;명령&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.문서개요&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+T&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 문서에 대해 수평 또는 계층 구조로 된 개요를 볼 수 있도록 &lt;B&gt;문서 개요&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.즐겨찾기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+F&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;웹 페이지로 연결되는 바로 가기가 나열된 &lt;B&gt;즐겨찾기&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.출력&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+O&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;런타임 시 상태 메시지를 볼 수 있는 &lt;B&gt;출력&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.속성창&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;F4&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 선택한 항목의 디자인 타임 속성 및 이벤트를 나열하는 &lt;B&gt;속성&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.속성페이지&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+F4&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 선택한 항목의 속성 페이지를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.리소스뷰&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+E&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;&lt;B&gt;리소스 뷰&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.서버탐색기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+S&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;데이터베이스 서버, 이벤트 로그, 메시지 대기열, 웹 서비스 및 기타 여러 운영 체제 서비스를 보고 조작할 수 있는 서버 탐색기 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.웹브라우저표시&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+R&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;인터넷 페이지를 볼 수 있는 &lt;B&gt;웹 브라우저&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.솔루션탐색기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+L&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 솔루션의 프로젝트 및 파일을 나열하는 &lt;B&gt;솔루션 탐색기&lt;/B&gt;를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.작업목록&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+K&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;작업, 주석, 바로 가기, 경고 및 오류 메시지를 사용자 지정하고, 분류하고, 관리할 수 있는 &lt;B&gt;작업 목록&lt;/B&gt; 창을 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;보기.도구상자&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+X&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;코드와 함께 포함시키거나 사용할 수 있는 기타 항목 및 컨트롤이 들어 있는 &lt;B&gt;도구 상자&lt;/B&gt;를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;프로젝트 바로 가기 키&lt;/H2&gt;&lt;P&gt;다음 바로 가기 키 조합은 프로젝트에 새 항목을 추가하거나 프로젝트를 빌드하거나, 파일 또는 프로젝트를 열 때 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;빌드.솔루션빌드&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+B&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;솔루션을 빌드합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;빌드.컴파일&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+F7&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;선택한 파일의 함수/데이터 이름, 외부 참조, 섹션, 링커 지시문, 기계어 코드 등을 포함하는 개체 파일을 만듭니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;파일.기존항목추가&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Shift+Alt+A&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 프로젝트에 기존 파일을 추가할 수 있는 기존 항목 추가 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;파일.새항목추가&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+A&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;현재 프로젝트에 새 파일을 추가할 수 있는 새 항목 추가 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;파일.새파일&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+N&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;새 파일을 선택하여 현재 프로젝트에 추가할 수 있는 새 파일 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;파일.새프로젝트&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+N&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;프로젝트를 만들어 현재 솔루션에 추가할 수 있는 &lt;B&gt;새 프로젝트&lt;/B&gt; 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;파일.파일열기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+O&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;기존 파일을 열 수 있는 파일 열기 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;파일.프로젝트열기&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Shift+O&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;기존 프로젝트를 현재 솔루션에 추가할 수 있는 &lt;B&gt;새 프로젝트&lt;/B&gt; 대화 상자를 표시합니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;프로젝트.재정의&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Ctrl+Alt+Ins&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;파생 클래스의 기본 클래스 메서드를 재정의할 수 있습니다. C#에서 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H2 class=dtH2&gt;기타 편집기 바로 가기 키&lt;/H2&gt;&lt;P&gt;액셀러레이터 키 편집기 또는 문자열 편집기에서 다음과 같은 바로 가기 키 조합을 사용할 수 있습니다.&lt;/P&gt;&lt;DIV class=tablediv&gt;&lt;TABLE class=dtTABLE border=1 cellSpacing=0&gt;&lt;TBODY&gt;&lt;TR vAlign=top&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;명령 이름&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;바로 가기 키&lt;/TH&gt;&lt;TH style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;설명&lt;/TH&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.새액셀러레이터키&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Insert&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;액셀러레이터 키에 새 엔트리를 추가합니다. 액셀러레이터 키 편집기에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;TR vAlign=top&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;편집.새문자열&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="33%"&gt;Insert&lt;/TD&gt;&lt;TD style="FONT-FAMILY: 7367_9; FONT-SIZE: 9pt" width="34%"&gt;문자열 테이블에 새 엔트리를 추가합니다. 문자열 편집기에서만 사용할 수 있습니다.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;!--Footer Start--&gt;&lt;!--NONSCROLLING BANNER END--&gt;&lt;!--closes the topic content div--&gt;&lt;!--FOOTER_END--&gt;&lt;BR style="CLEAR: both"&gt;&lt;SCRIPT type=text/javascript&gt;&lt;!--	articleFileViewGeneration();	var myAgent = navigator.userAgent.toLowerCase();   	if(myAgent.indexOf("msie 8")!=-1){		var webFontStyleEl = parent.document.getElementById("fontStyle"); 		if(webFontStyleEl) webFontStyleEl.styleSheet.cssText = webFontStyleEl.styleSheet.cssText;	}//--&gt;&lt;/SCRIPT&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-7227625647366509967?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/7227625647366509967/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/07/visual-studio-2003-%EB%8B%A8%EC%B6%95%ED%82%A4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/7227625647366509967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/7227625647366509967'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/07/visual-studio-2003-%EB%8B%A8%EC%B6%95%ED%82%A4.html' title='Visual Studio 2003 단축키'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-2426748929269054284</id><published>2010-07-28T16:03:00.000+09:00</published><updated>2011-01-11T22:00:38.630+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TCHAR'/><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='LPCTSTR'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual C'/><title type='text'>char*, LPCTSTR, TCHAR 의 차이</title><content type='html'>&lt;div class="snap_preview"&gt;&lt;p&gt;어떠한 문자열을 처리하는 자료형은 보통 char, wchar, TCHAR 를 사용한다.&lt;br /&gt; &lt;br /&gt;쉽게 보면,&lt;br /&gt;char&lt;font color="#0000ff"&gt;&lt;strong&gt;*&lt;/strong&gt;&lt;/font&gt; =&amp;gt; &lt;font color="#0000ff"&gt;&lt;strong&gt;LP&lt;/strong&gt;&lt;/font&gt;STR 라고 생각하면 되고&lt;br /&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;c&lt;/strong&gt;&lt;/font&gt;onst char&lt;strong&gt;&lt;font color="#0000ff"&gt;*&lt;/font&gt;&lt;/strong&gt; =&amp;gt; &lt;strong&gt;&lt;font color="#0000ff"&gt;LP&lt;/font&gt;&lt;font color="#ff0000"&gt;C&lt;/font&gt;&lt;/strong&gt;STR 라고 할 수 있다.&lt;br /&gt; &lt;br /&gt;가운데 'C' 는 const 의 의미다. 'LP' 는 long pointer 의 의미.&lt;br /&gt;끝에 &lt;u&gt;STR&lt;/u&gt; 이라는 의미는 &lt;u&gt;NULL 포인터로 끝난다&lt;/u&gt;는 의미. 즉, 마지막 인덱스에는 항상 NULL 이 채워져 있어야 한다는 것.&lt;br /&gt;그래야만 str 관련 함수들이 동작을 하는 것이다. strlen, strcpy, strcmp 등등.. 이것들이 src param 의 끝에 NULL 이 없으면 무지 당황하게 된다.&lt;br /&gt; &lt;br /&gt;가운데 'T' 가 들어간다는 것은 TCHAR 이라는 의미.&lt;br /&gt;그렇다면 왜 T를 쓸까??&lt;br /&gt; &lt;br /&gt;영문은 1바이트.&lt;/p&gt;&lt;p&gt;그런데, 우리나라 말이나, 중국어 등 영문권이 아닌 제 3세계 언어를 표현하기 위해서는&lt;br /&gt;2바이트가 필요하다.. 이를 위해서 MultiByte 를 사용하기도 하지만 MultiByte 는&lt;br /&gt;어떤 글씨는 1바이트 이고 어떤 글씨는 2바이트여서 메모리 관리가 어렵다.&lt;br /&gt;그래서 나온 것이 wchar 인데,&lt;/p&gt;&lt;p&gt;wchar 는 모든 글씨(영문 포함)가 2바이트로 구성이 된다.&lt;br /&gt;당연히 wchar 는 일반 ascii 타입의 char 보다 메모리 공간이 2배 필요하다.&lt;br /&gt; &lt;br /&gt;그런데 본론인 &lt;strong&gt;&lt;font color="#ff0000"&gt;T&lt;/font&gt;&lt;/strong&gt;CHAR 는 무엇이냐?&lt;br /&gt;바로 &lt;strong&gt;&lt;font color="#ff0000"&gt;ACSCII 타입의 일반 char 또는 wchar&lt;/font&gt;&lt;/strong&gt; 라는 의미다.&lt;br /&gt;TCHAR 을 사용하면 char 인지 wchar 인지 구별하지 않고 그냥 코딩을 하면 된다.&lt;br /&gt; &lt;br /&gt;TCHAR tch = _T('A'); &amp;lt;=&amp;gt; char ch = 'A';&lt;br /&gt;TCHAR tch = _T('A'); &amp;lt;=&amp;gt; wchar wch = 'A';&lt;br /&gt; &lt;br /&gt;배열도 역시.. 그냥 숫자 인덱스로 원하는 글씨의 위치를 추적할 수 있다.&lt;br /&gt; &lt;br /&gt;그럼 무엇으로 현재 프로젝트의 TCHAR가 char 인지 wchar 인지를 구별할까?&lt;br /&gt;UNICODE 라는 precompile 상수.&lt;br /&gt; &lt;br /&gt;해당 프로젝트 project -&amp;gt; settings 에 _DEBUG 등등 선언되어 있는데, 끝에다&lt;br /&gt;UNICODE 라고 쓰고 컴파일 하면 앞으로 나오는 모든 TCHAR 타입은 wchar 으로 변환해서&lt;br /&gt;컴파일을 시도하게 된다.&lt;br /&gt; &lt;br /&gt;가운데 C 다음의 &lt;font color="#ff0000"&gt;&lt;strong&gt;T 는 TCHAR 이라는 의미&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;당연히 상수로 변환을 했으므로 변수에 값을 대입할 수 없겠다.&lt;br /&gt;( b[3] = _T('A'); &amp;lt;- syntax error&amp;nbsp; &amp;lt;=&amp;gt; const char str = "ABCD"; str[3] = 'E' ; &amp;lt;- 이때 에러와 같은 이치)&lt;br /&gt; &lt;br /&gt;(TCHAR 을 나타는 매크로가 _T 이다. (한문자 _T(' '), 문장 _T(" ") )&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-2426748929269054284?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/2426748929269054284/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/07/char-lpctstr-tchar-%EC%9D%98-%EC%B0%A8%EC%9D%B4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/2426748929269054284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/2426748929269054284'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/07/char-lpctstr-tchar-%EC%9D%98-%EC%B0%A8%EC%9D%B4.html' title='char*, LPCTSTR, TCHAR 의 차이'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-1820764414327801853</id><published>2010-07-26T16:28:00.000+09:00</published><updated>2011-01-11T22:00:37.775+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='WPARAM 과 LPARAM'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual C'/><title type='text'>WPARAM 과 LPARAM</title><content type='html'>&lt;p&gt;WPARAM은 unsigned int 형이고, LPARAM은 unsigned long 형이다. &lt;/p&gt;&lt;p&gt;특징은, WPARAM는 주로 값들을 넘기는데 사용하고, LPARAM는 값들 뿐만 아니라 포인터를 넘겨줄 때 사용된다. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;보통 window procedure 또는 callback function의 인자로, 먼저 나오는 wParam에 자주 쓰이는 정보를 기술하고, lParam에 추가 정보를 기술한다. 지금은 모두 32bit이므로 사용자가 정의하기 나름이다. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;윈도우는 메시지 방식으로 프로그램이 진행된다. WPARAM나 LPARAM는 모두 MS에서 지정해 놓은 형식이다. 메시지를 보낼 때 추가로 부가적인 정보를 넣는 것이다. 구체적으로 어떤 정보인지는 아무도 모른다. 이것은 각 메시지마다 다르게 구성되어 있다는 것을 뜻한다. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;WM_KEYDOWN을 사용한다면, MS에서 키다운 메시지에 대한 제어를 하고 싶을 땐 이것을 써라. 그리고 부가적인 정보에는 WPARAM와 LPARAM를 사용해라. WPARAM에는 Virtual Key정보를 주고 LPARAM에는 KeyData정보를 넣을 것이니 구현은 사용자가 알아서 제어를 해라. 하는 것과 같다. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;W : word&lt;/p&gt;&lt;p&gt;L : long&lt;/p&gt;&lt;br /&gt;&lt;p&gt;typedef UINT WPARAM;&lt;br /&gt;typedef LONG LPARAM;&lt;br /&gt;&lt;br /&gt;현재는 둘다 32bit 값을 갖는 데이터 타입이다. 그냥 unsigned int, long 이라 해도 상관은 없겠지만, 굳이 이름을 WPARAM, LPARAM이라 한 것은 예전 16bit OS 시절에 이름 붙인 것이 이어져 온 것이다. 당시는 WPARAM은 word 형 파라미터, LPARAM은 long 형 파라미터라는 뜻이어서, (여기서 word형은 2바이트, 참고로 dword(double word)형은 4바이트, byte형은 말그대로 1바이트) 그 때도 위처럼 typedef되었었다. 그런데 32bit OS로 오면서 int형이 4바이트가 되었다. 그런데 typedef은 그대로 두다보니 현재 WPARAM는 이름과는 다르게 4바이트를 갖는 형이되었다. 그러니까 지금은 WPARAM이나 LPARAM이나 4바이트를 갖는 데이터 타입이다. 참고로 windef.h를 보면 여러가지 데이터 타입이 typedef되어 있는 걸 볼 수 있다.&lt;/p&gt;&lt;!--       &lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"		    xmlns:dc="http://purl.org/dc/elements/1.1/"		    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"&gt;       &lt;rdf:Description	        rdf:about="http://chopisal.egloos.com/1278030"	        dc:identifier="http://chopisal.egloos.com/1278030"	        dc:title="WPARAM  과   LPARAM"	        trackback:ping="http://chopisal.egloos.com/tb/1278030"/&gt;       &lt;/rdf:RDF&gt;       --&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-1820764414327801853?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/1820764414327801853/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/07/wparam-%EA%B3%BC-lparam.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/1820764414327801853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/1820764414327801853'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/07/wparam-%EA%B3%BC-lparam.html' title='WPARAM 과 LPARAM'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-6216554488284701340</id><published>2010-06-28T10:54:00.000+09:00</published><updated>2011-01-11T22:00:36.909+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='window.open'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>window.open() 속성</title><content type='html'>&lt;UL&gt;&lt;LI&gt;&lt;FONT size=2&gt;name = window.open( "창에 보여줄 파일/홈페이지의 이름/주소", "창의 이름", "옵션" ) &lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;window.open() 메소드에 전달할 수 있는 파라미터 중 첫 번째는 보여줄 내용이고, 두 번째는 target으로서의 창 이름이며 세 번째가 창의 위치와 크기 및 모양을 지정할 수 있는 옵션 그룹이다. 그리고 window.open() 메소드가 되돌리는 값을 name에 담았다면 그 name은 그 창(자식 창)을 연 opener(부모 창)에서 자식 창을 컨트롤할 수 있는 이름이 된다.&lt;/FONT&gt;&lt;/P&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;다음과 같이 창을 열어보자.&lt;/FONT&gt;&lt;/P&gt;&lt;TABLE border=2 cellSpacing=0 borderColorLight=white borderColorDark=black cellPadding=4 width="90%" align=center&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="80%"&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;&amp;lt;input type=button value="창" onClick= "window.open( 'small.htm','new','left=300, top=300, width=400, height=300&lt;FONT color=blue&gt;, &lt;/FONT&gt;toolbar=no, location=yes, directories=no, status=no, menubar=no, scrollbars=yes,&lt;FONT color=blue&gt; &lt;/FONT&gt;copyhistory=yes, &lt;FONT color=blue&gt;resizable=no&lt;/FONT&gt;')"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="20%"&gt;&lt;P align=center&gt;&lt;!-- badtag filtered --&gt;&lt;INPUT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;참고로 가끔 보면 옵션들 사이에 빈칸이 있으면 안 된다고 말하는데, 이것은 넷스케이프에 관한 설명인 듯하다. 익스플로러에서도 줄바꿈(리턴)이 있으면 안 된다. 하드 리턴(문단 바꿈, &amp;lt;p&amp;gt;)은 물론이고 소프르 리턴(줄만 바꿈, &amp;lt;br&amp;gt;)도 끼어들면 결코 안 될 것이다.&lt;/FONT&gt;&lt;/P&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;창 열기 옵션은 상당히 많은데, 알아 두면 좋지만 다 외우기는 쉽지 않다. 모든 옵션을 한 번 보되, 나름대로 그룹화하여 소개한다. 이 내용은 1차적으로 &lt;/FONT&gt;&lt;A class=con_link href="http://pl.changwon.ac.kr/~chowing/js/win_open.html" target=_blank&gt;&lt;FONT color=#0033cc size=2&gt;&lt;U&gt;http://pl.changwon.ac.kr/~chowing/js/win_open.html&lt;/U&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt;을 참고한 것이다. 넷스케이프 전용인지 익스플로러 전용인지 등을 확인하는 데 도움이 될 참고 사이트는 &lt;/FONT&gt;&lt;A class=con_link href="http://www.kbtech777.co.kr/lecture/webprog/jscript/javalibrary.htm" target=_blank&gt;&lt;FONT color=#0033cc size=2&gt;&lt;U&gt;http://www.kbtech777.co.kr/lecture/webprog/jscript/javalibrary.htm&lt;/U&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt;(JavaScript 속성 라이브러리) 등.&lt;/FONT&gt;&lt;/P&gt;&lt;TABLE border=2 cellSpacing=0 borderColorLight=white borderColorDark=black cellPadding=4 width="90%" align=center&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width=100&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;위치&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;screenX / left(ie전용) : 왼쪽 좌표, screenY / top(ie전용) : 위쪽 좌표&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD rowSpan=3 width=100&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;크기&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;width : 너비, height : 높이&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;resizable(크기변경 허용 여부)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;innerWidth, innerHeight, outerWd\idth, outerHeight(넷스케이프 전용?)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD rowSpan=3 width=100&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;다른 창과의 관계&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;dependent(opener가 닫히면 함께 닫힘)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;alwaysLowered(항상 깔림), alwaysRaised(항상 드러남)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;z-lock(yes로 설정하면, 활성화되어도/포커스가 주어져도 다른 창 위로 떠오르지는 못하게 막는다)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD rowSpan=8 width=100&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;기타 옵션들&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;hotkeys( no로 지정하면 menubar 없이는 (security 및 quit) 핫키를 제외한 어떤 핫키도 사용할 수 없게 된다 )&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;directories(디렉터리 버튼들)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;location(로케이션 엔트리)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;menubar(File, Edit, View, 기타의 메뉴바)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;scrollbars(필요할 때 나타날 스크롤바)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;status(아래쪽 상태바)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;titlebar(위쪽 타이틀바)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;toolbar(Back, Forward, 기타의 툴바)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD rowSpan=3 width=100&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;IE4(이상)에서만 사용 가능한 옵션들&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;channelmode(채널바가 있는 창)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;fullscreen(전체 화면 차지)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;left(screenX), top(screenY)&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;위와 같은 방식으로 정리하면 저절로 외워지게 하는 데 도움이 되지 않을까 생각한다. 정리한 직후에 남는 궁금증은 z-lock과 alwaysLowered는 동일한 옵션인가? 하는 점이다. 실습이 최상의 선택이라고 믿으므로 차근히 테스트해 보자.&lt;/FONT&gt;&lt;/P&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;먼저, 아무 옵션도 &amp;nbsp;주지 말고 창을 열어 보자.&lt;/FONT&gt;&lt;/P&gt;&lt;TABLE border=2 cellSpacing=0 borderColorLight=white borderColorDark=black cellPadding=4 width="90%" align=center&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="80%"&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;&amp;lt;input type=button value="창" onClick= "window.open( 'small.htm','new','')"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="20%"&gt;&lt;br /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;타이틀바, 메뉴바, 툴바, 로케이션 엔트리, 스크롤바, 상태바 등 아무튼 얼른 보아서 모든 옵션들이 다 yes로 설정되어 나타나는 것 같다. 이번에는 크기와 위치만을 지정하여 창을 열어 보자.&lt;/FONT&gt;&lt;/P&gt;&lt;TABLE border=2 cellSpacing=0 borderColorLight=white borderColorDark=black cellPadding=4 width="90%" align=center&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="80%"&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;&amp;lt;input type=button value="창" onClick= "window.open( 'small.htm','new','left=300, top=300, width=400, height=300')"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="20%"&gt;&lt;P align=center&gt;&lt;!-- badtag filtered --&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;이번에는 타이틀바만 나타나고, 다른 모든 것이 no로 설정된 모양이다(최대화 버튼이 죽어 있다). resizable로 no인 것이 분명하다. 옵션 중에 하나라도 설정하면 타이틀바와 hotkeys만 yes로 되고 나머지는 모든 no로 디폴트 설정되는 것이라고 이해하면 될 것 같다.&lt;/FONT&gt;&lt;/P&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;다음으로, resizable, resizable=yes 또는 resizable=1을 크기, 위치 지정과 함께 주어 보자.&lt;/FONT&gt;&lt;/P&gt;&lt;TABLE border=2 cellSpacing=0 borderColorLight=white borderColorDark=black cellPadding=4 width="90%" align=center&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="80%"&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;&amp;lt;input type=button value="창" onClick= "window.open( 'small.htm','new','left=300, top=300, width=400, height=300, resizable=1')"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="20%"&gt;&lt;P align=center&gt;&lt;!-- badtag filtered --&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;최대화 버튼이 살아나고, 가장자리에 마우스를 대면 리사이즈 화살표 모양으로 변한다. 이번에는 디렉터리 버튼들을 나타내어 보자.&lt;/FONT&gt;&lt;/P&gt;&lt;TABLE border=2 cellSpacing=0 borderColorLight=white borderColorDark=black cellPadding=4 width="90%" align=center&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="80%"&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;&amp;lt;input type=button value="창" onClick= "window.open( 'small.htm','new','left=300, top=300, width=400, height=300, resizable, directories')"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="20%"&gt;&lt;P align=center&gt;&lt;!-- badtag filtered --&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;타이틀바 아래에 '연결, 링크 사용자 정의, 인터넷 시작' 등 줄이 나타나고 그 줄 오른쪽의 &amp;gt;&amp;gt; 표시를 클릭하면 채널 가이든 등 리스트가 드롭다운된다. 이번에는 로케이션 엔트리를 나타내어 보자.&lt;/FONT&gt;&lt;/P&gt;&lt;TABLE border=2 cellSpacing=0 borderColorLight=white borderColorDark=black cellPadding=4 width="90%" align=center&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="80%"&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;&amp;lt;input type=button value="창" onClick= "window.open( 'small.htm','new','left=300, top=300, width=400, height=300, resizable, directories, location')"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="20%"&gt;&lt;P align=center&gt;&lt;!-- badtag filtered --&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;이번에는 디렉터리 버튼들이 오른쪽으로 밀려 나가고, 같은 줄 왼쪽에 '주소'라는 표시와 로케이션 드롭다운이 심어져 있다.&lt;/FONT&gt;&lt;/P&gt;&lt;TABLE border=2 cellSpacing=0 borderColorLight=white borderColorDark=black cellPadding=4 width="90%" align=center&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="80%"&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;&amp;lt;input type=button value="창" onClick= "window.open( 'small.htm','new','left=300, top=300, width=400, height=300, resizable, directories, location, menubar')"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="20%"&gt;&lt;P align=center&gt;&lt;!-- badtag filtered --&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;타이틀바와 로케이션/디렉터리 중간에 메뉴바 줄이 삽입된다.&lt;/FONT&gt;&lt;/P&gt;&lt;TABLE border=2 cellSpacing=0 borderColorLight=white borderColorDark=black cellPadding=4 width="90%" align=center&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="80%"&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;&amp;lt;input type=button value="창" onClick= "window.open( 'small.htm','new','left=300, top=300, width=400, height=300, resizable, directories, location, menubar, scrollbars')"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="20%"&gt;&lt;P align=center&gt;&lt;!-- badtag filtered --&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;스크롤바를 지정하면, 스크롤할 필요가 없는 경우에도 오른쪽의 스크롤바는 여전히 나타난다.&lt;/FONT&gt;&lt;/P&gt;&lt;TABLE border=2 cellSpacing=0 borderColorLight=white borderColorDark=black cellPadding=4 width="90%" align=center&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="80%"&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;&amp;lt;input type=button value="창" onClick= "window.open( 'small.htm','new','left=300, top=300, width=400, height=300, resizable, directories, location, menubar, scrollbars, toolbar')"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="20%"&gt;&lt;P align=center&gt;&lt;!-- badtag filtered --&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;타이틀바, 메뉴바 아래에 뒤로/앞으로/중지/새로고침 등의 툴바가 삽입된다.&lt;/FONT&gt;&lt;/P&gt;&lt;TABLE border=2 cellSpacing=0 borderColorLight=white borderColorDark=black cellPadding=4 width="90%" align=center&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="80%"&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;&amp;lt;input type=button value="창" onClick= "window.open( 'small.htm','new','left=300, top=300, width=400, height=300, resizable, directories, location, menubar, scrollbars, toolbar, status')"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="20%"&gt;&lt;P align=center&gt;&lt;!-- badtag filtered --&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;아래쪽 상태바까지 모든 것이 다 나타난다.&lt;/FONT&gt;&lt;/P&gt;&lt;P class=bon&gt;&lt;FONT size=2&gt;앞에서 z-lock과 alwaysLowered는 동일한 옵션인가? 하는 의문을 제기한 일이 있다. 그런데 현재 익스플로러 5.5에서 테스트해 본 결과 그 두 옵션과 alwaysRaised 봅션은 먹히지 않는 것 같다. dependent 옵션도 사용해 보았으나, 효과를 알 수 없다. 내가 정확한 사용법을 몰라서 그런가? 무언가 새로운 것을 알게 되면 추가 정리하기로 하겠다.&lt;/FONT&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-6216554488284701340?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/6216554488284701340/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/06/windowopen-%EC%86%8D%EC%84%B1.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/6216554488284701340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/6216554488284701340'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/06/windowopen-%EC%86%8D%EC%84%B1.html' title='window.open() 속성'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-7950637312767668299</id><published>2010-06-01T14:27:00.000+09:00</published><updated>2011-01-11T22:00:36.092+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='FCKeditor'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>FCKeditor java 버전 설치 하기</title><content type='html'>&lt;DIV class=titleWrap&gt;&lt;H2&gt;&lt;A href="http://hkpark.tistory.com/entry/FCKeditor-java-버전-설치-하기"&gt;FCKeditor java 버전 설치 하기&lt;/A&gt;&lt;/H2&gt;&lt;SPAN class=category&gt;&lt;A href="http://hkpark.tistory.com/category/FCK%20editor"&gt;FCK editor&lt;/A&gt; &lt;/SPAN&gt;&lt;SPAN class=date&gt;2007/04/02 21:58&lt;/SPAN&gt; &lt;/DIV&gt;&lt;!-- titleWrap close --&gt;&lt;DIV class=article&gt;&lt;DIV id=contents&gt;&lt;P align=left&gt;FCKeditor java 버전 설치&lt;br /&gt;- 환경&lt;br /&gt;O/S : Window XP Professional&lt;br /&gt;Servlet Engine : Tomcat 5.0.28&lt;br /&gt;Character Set : UTF-8&lt;br /&gt;IDE Tool : Eclipse 3.2&lt;br /&gt;FCKEditor Version : 2.3.1( &lt;A class=con_link href="http://prdownloads.sourceforge.net/fckeditor/FCKeditor_2.3.1.zip?download" target=_blank&gt;http://prdownloads.sourceforge.net/fckeditor/FCKeditor_2.3.1.zip?download&lt;/A&gt;&amp;nbsp;)FCKEditor.Java Version 2.3&lt;br /&gt;( &lt;A class=con_link href="http://sourceforge.net/project/showfiles.php?group_id=75348&amp;amp;package_id=129511" target=_blank&gt;http://sourceforge.net/project/showfiles.php?group_id=75348&amp;amp;package_id=129511&lt;/A&gt;&amp;nbsp;)&lt;br /&gt;1. editor 폴더를 생성하고 톰캣 컨텍스트의 루트를 editor 폴더 경로로 지정&lt;br /&gt;2. fckeditor 다운로드&lt;br /&gt;2-1. &lt;A class=con_link href="http://www.fckeditor.net/download/" target=_blank&gt;http://www.fckeditor.net/download/&lt;/A&gt; 에서 다운로드&lt;br /&gt;2-2. editor 폴더에 다운로드 된 압축 파일의 압축을 풉니다.&lt;br /&gt;2-3. 압축을 풀면 나오는 디렉토리인 FCKeditor 폴더를 editor 하위 폴더로 되게끔 이동합니다.&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg5986618 src="http://tfile.nate.com/download.asp?FileID=24259507" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;3. 톰캣을 가동한 후 FCKeditor\_samples\default.html 을 실행하여 fckeditor 를 실행&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg9021144 src="http://tfile.nate.com/download.asp?FileID=24259508" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;4. 그러나 이미지 업로드를 할려고 서버 보기를 할 경우 에러가 발생합니다.&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg3599641 src="http://tfile.nate.com/download.asp?FileID=24259509" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;5. java 버전용 fckeditor 를 editor 폴더로 다운로드(FCKeditor-2.3.zip)&lt;br /&gt;5-1. &lt;A class=con_link href="http://sourceforge.net/project/showfiles.php?group_id=75348&amp;amp;package_id=129511" target=_blank&gt;http://sourceforge.net/project/showfiles.php?group_id=75348&amp;amp;package_id=129511&lt;/A&gt; 에서 다운로드&lt;br /&gt;5-2. editor 폴더에 다운로드 된 압축 파일의 압축을 풉니다.&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg9268745 src="http://tfile.nate.com/download.asp?FileID=24259510" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;6. 지정폴더\editor\FCKeditor-2.3\web 하위에 있는&lt;br /&gt;_samples 폴더와 WEB-INF 폴더를 각각 이동.&lt;br /&gt;6-1. 2번에서 만들어진 \editor\FCKeditor\_samples 폴더에&lt;br /&gt;\editor\FCKeditor-2.3\web\_samples 폴더를 붙여넣기 합니다.&lt;br /&gt;6-2.&amp;nbsp; \editor\WEB-INF 폴더에 \editor\FCKeditor-2.3\web\WEB-INF 폴더를 붙여넣기 합니다.&lt;/P&gt;&lt;P align=left&gt;&lt;br /&gt;* 새로운 컨텍스트라면 web.xml 을 그대로 덮어씌운 후 복사하고,&lt;br /&gt;기존에 컨텍스트에 다른 체계가 돌아가 있다면 web.xml 내용 중 &amp;lt;web-app&amp;gt; 부분을&lt;br /&gt;기존 사용중인 컨텍스트에 web.xml 에 붙여넣기 합니다.&lt;br /&gt;( load-on-startup 이 이미 있다면 숫자를 변경함 )&lt;/P&gt;&lt;P align=left&gt;완료하면 폴더 구조는 다음과 같습니다.&lt;br /&gt;( UserFiles 디렉토리는 사용자가 업로드한 이미지 저장 디렉토리입니다. )&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg890580 src="http://tfile.nate.com/download.asp?FileID=24259511" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;* 톰캣 리스타트시에 콘솔 창에 다음과 같이 업로드 제한 파일 확장자 리스트가 나옵니다.&lt;br /&gt;( web.xml 파일에 DeniedExtensionsFile 이란 param-name 으로 지정되어 있습니다. )&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg303547 src="http://tfile.nate.com/download.asp?FileID=24259512" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;7. jsp 샘플을 실행&lt;br /&gt;그러나 다음과 같이 fckeditor.html 파일을 찾을수 없다는 메시지가 뜹니다.&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg1468737 src="http://tfile.nate.com/download.asp?FileID=24259513" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;\editor\FCKeditor\_samples\jsp\sample01.jsp 내용을 보면&lt;br /&gt;oFCKeditor.setBasePath( "/FCKeditor/" ) ;&lt;br /&gt;위와 같은 부분이 있습니다.&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg9824436 src="http://tfile.nate.com/download.asp?FileID=24259514" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;컨텍스트의 루트 폴더가 FCKeditor 이라면 에러 없이 수행되었겠지만&lt;br /&gt;루트가 editor 폴더로 지정되어 있으므로&lt;br /&gt;oFCKeditor.setBasePath( "/editor/FCKeditor/" ) ;&lt;br /&gt;위처럼 수정해주면 제대로 수행되는 것을 확인할수 있습니다.&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg254534 src="http://tfile.nate.com/download.asp?FileID=24259515" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;7-3. 이미지 버튼을 눌러서 서버보기를 눌러보지만 4. 처럼 스크립트 오류가 발생합니다.&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;8. sample02.jsp 의 태그 라이브러리를 이용한 파일 브라우저 경로 수정&lt;br /&gt;8-1. \editor\FCKeditor\_samples\jsp\sample02.jsp 를 보면 7. 처럼 fckeditor.html 을 찾을수 없다는 메시지가 뜹니다.&lt;br /&gt;&amp;lt;FCK:editor id="EditorDefault" basePath="/FCKeditor/"&lt;br /&gt;위 부분에서 basePath 를 현재 테스트 경로에 맞게끔&lt;br /&gt;&amp;lt;FCK:editor id="EditorDefault" basePath="/editor/FCKeditor/" 로 수정 후 sample02.jsp 를 수정하면&lt;br /&gt;에디터는 잘 나오나 역시 이미지 뷰어나 업로드 부분은 작동하지 않습니다.&lt;/P&gt;&lt;P align=left&gt;sample02.jsp 에선 다음과 같이 브라우저 URL 과 업로드 URL 을 정의한 부분을 볼수 있습니다.&lt;br /&gt;imageBrowserURL="/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&amp;amp;Connector=connectors/jsp/connector"&lt;br /&gt;linkBrowserURL="/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=connectors/jsp/connector"&lt;br /&gt;flashBrowserURL="/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Flash&amp;amp;Connector=connectors/jsp/connector"&lt;br /&gt;imageUploadURL="/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Image"&lt;br /&gt;linkUploadURL="/FCKeditor/editor/filemanager/upload/simpleuploader?Type=File"&lt;br /&gt;flashUploadURL="/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Flash"&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;editor 폴더 하위에 FCKeditor 폴더가 위치한 구조이니 /FCKeditor/editor... 부분 앞에&lt;br /&gt;/editor/FCKeditor/editor... 형식으로 수정하고,&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;web.xml 의&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;servlet-name&amp;gt;Connector&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;url-pattern&amp;gt;/editor/filemanager/browser/default/connectors/jsp/connector&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;servlet-name&amp;gt;SimpleUploader&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;url-pattern&amp;gt;/editor/filemanager/upload/simpleuploader&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&amp;nbsp; &lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;위 url-pattern 경로대로 Connector 부분과 UploadURL 을 현재 경로를 예를 들어 재구성하자면&lt;br /&gt;다음과 같이 수정하여 sample02.jsp 을 작성하면 됩니다.&lt;br /&gt;imageBrowserURL="/editor/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&amp;amp;Connector=/editor/editor/filemanager/browser/default/connectors/jsp/connector"&lt;br /&gt;linkBrowserURL="/editor/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=/editor/editor/filemanager/browser/default/connectors/jsp/connector"&lt;br /&gt;flashBrowserURL="/editor/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Flash&amp;amp;Connector=/editor/editor/filemanager/browser/default/connectors/jsp/connector"&lt;br /&gt;imageUploadURL="/editor/editor/filemanager/upload/simpleuploader?Type=Image"&lt;br /&gt;linkUploadURL="/editor/editor/filemanager/upload/simpleuploader?Type=File"&lt;br /&gt;flashUploadURL="/editor/editor/filemanager/upload/simpleuploader?Type=Flash"&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;위 URL은 web.xml 의 url-pattern 과 매핑된다는 점을 이해하셔야 합니다.&lt;br /&gt;이런 특징을 통하여 경로를 판별할수 있습니다.&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;8-2. 이미지링크,플래쉬 브라우저 및 업로드가 제대로 동작하지 않을 경우...&lt;/P&gt;&lt;P align=left&gt;8-2-1. browser.html 파일의 경로가 틀렸을 경우&lt;br /&gt;basePath 만 수정한 후 위 8-1. 에서처럼 경로를 수정하지 않을 경우&lt;br /&gt;다음과 같은 화면을 볼수 있습니다.&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg2588493 src="http://tfile.nate.com/download.asp?FileID=24259516" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;8-2-2. Connector 부분의 경로가 틀릴 경우&lt;br /&gt;Connector 의 경로는 수정하지 않은채 browser.html 의 경로만 옳바르게 설정할 경우&lt;br /&gt;다음과 같은 화면을 볼수 있습니다.&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg3619210 src="http://tfile.nate.com/download.asp?FileID=24259517" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;* Connector 의 경로는 web.xml 의 Connector 의 url-pattern 과 관련이 되어있습니다.&lt;br /&gt;8-1. 에서 보신 web.xml 처럼 /editor/filemanager/browser/default/connectors/jsp/connector 으로&lt;br /&gt;지정되어 있따면 Connector 의 주소는&lt;br /&gt;&lt;A class=con_link href="http://서버url/컨텍스트명/editor/filemanager/browser/default/connectors/jsp/connector" target=_blank&gt;http://서버url/컨텍스트명/editor/filemanager/browser/default/connectors/jsp/connector&lt;/A&gt; 이 됩니다.&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg1038135 src="http://tfile.nate.com/download.asp?FileID=24259518" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;&lt;br /&gt;위 화면처럼 파일을 찾을수 없다는 화면이 아닌 다른 화면이 나오게 되면 맞는 경로이므로&lt;br /&gt;Connector 부분은 &lt;A class=con_link href="http://서버url/" target=_blank&gt;http://서버url/&lt;/A&gt; 을 제외한 나머지 주소를 기술하면 됩니다.&lt;br /&gt;( 8-1. 의 Connector 주소 설정 참조 )&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;* 옳바른 주소 설정에도 불구하고 위 화면에서처럼 Connector 을 브라우저에서 실행했을 때&lt;br /&gt;다른 에러가 발생한다면 XML 을 생성하는 xalan 콤포넌트가 존재하는지 의심해봐야 합니다.&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg6376958 src="http://tfile.nate.com/download.asp?FileID=24259519" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;왜 에러가 발생하는지 보기 위한 테스트URL)&lt;br /&gt;&lt;A class=con_link href="http://서버url/컨텍스트명/editor/filemanager/browser/default/connectors/jsp/connector?Command=GetFoldersAndFiles&amp;amp;Type=Image&amp;amp;CurrentPath=/" target=_blank&gt;http://서버url/컨텍스트명/editor/filemanager/browser/default/connectors/jsp/connector?Command=GetFoldersAndFiles&amp;amp;Type=Image&amp;amp;CurrentPath=/&lt;/A&gt;&lt;/P&gt;&lt;P align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg6136845 src="http://tfile.nate.com/download.asp?FileID=24259520" width=550 localfile="yes"&gt;&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;위 화면에서처럼 &lt;br /&gt;javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found&lt;br /&gt;에러가 발생한다면 Xerces-J-tools의 xalan.jar 를(&lt;A class=con_link href="http://www.apache.org/dist/xml/xerces-j/" target=_blank&gt;http://www.apache.org/dist/xml/xerces-j/&lt;/A&gt;)&lt;/P&gt;&lt;P align=left&gt;찾아 다운로드 하여 \WEB-INF\lib 폴더에 넣은 후 톰캣 재가동후 새로운 브라우저에서&lt;br /&gt;테스트 URL 을 확인해보면 다음과 같이 에러 없이 XML 화면이 나오는 것을 확인할수 있습니다.&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg645526 src="http://tfile.nate.com/download.asp?FileID=24259521" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;8-2-3. 업로드 URL 의 확인&lt;br /&gt;Connector 와 마찬가지로 web.xml 의 SimpleUploader 의 url-pattern 의 영향을 받습니다.&lt;br /&gt;위 web.xml 에선 url-pattern 이 /editor/filemanager/upload/simpleuploader 이므로&lt;br /&gt;테스트 URL)&lt;br /&gt;&lt;A class=con_link href="http://서버url/컨텍스트명/editor/filemanager/upload/simpleuploader" target=_blank&gt;http://서버url/컨텍스트명/editor/filemanager/upload/simpleuploader&lt;/A&gt; 을 쳤을 경우 다음과 같은 화면이 나와야 정상입니다.&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg1066945 src="http://tfile.nate.com/download.asp?FileID=24259522" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;위 결과대로 나온다면 image,link,flash UploadUrl 을 설정하면 됩니다.( 8-1. 의 각 UploadUrl 확인 )&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;9. 테스트&lt;br /&gt;이미지를 업로드하고, 목록에 정상적으로 출력된다면 모든 설치가 성공적으로 완료된 것입니다.&lt;br /&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg2964894 src="http://tfile.nate.com/download.asp?FileID=24259523" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;10. 샘플이 아닌 기존 체계에 fckeditor 를 적용할 경우.&lt;br /&gt;태그 라이브러리 사용을 위한 &lt;br /&gt;&amp;lt;%@ taglib uri="&lt;A class=con_link href="http://fckeditor.net/tags-fckeditor" target=_blank&gt;http://fckeditor.net/tags-fckeditor&lt;/A&gt;" prefix="FCK" %&amp;gt; 를 페이지 상단에 삽입 하고,&lt;br /&gt;&amp;lt;TEXTAREA&amp;gt;&amp;lt;/TEXTAREA&amp;gt; 부분에 sample02.jsp 의 &amp;lt;FCK:editor ~ &amp;lt;/FCK:editor&amp;gt; 부분을 복사하여 붙여넣기 합니다.&lt;br /&gt;기본 sample02.jsp 에는 &amp;lt;FCK:editor id="EditorDefault" 처럼 id 가 EditorDefault 로 되어있는데&lt;br /&gt;만약 &amp;lt;TEXTAREA name = "contents" 와 같이 name 이 contents 였다면&lt;br /&gt;&amp;lt;FCK:editor id="contents" 로 지정하면 받는 부분에서 contents 로 받을 수 있습니다.&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;예) &lt;br /&gt;- \editor\board\create_form.jsp(UTF-8 로 작성)&lt;/P&gt;&lt;P align=left&gt;&amp;lt;%@ taglib uri="&lt;A class=con_link href="http://fckeditor.net/tags-fckeditor" target=_blank&gt;http://fckeditor.net/tags-fckeditor&lt;/A&gt;" prefix="FCK" %&amp;gt;&lt;/P&gt;&lt;P align=left&gt;&amp;lt;%@ page contentType = "text/html;charset=utf-8" %&amp;gt;&lt;br /&gt;&amp;lt;HTML&amp;gt;&lt;br /&gt;&amp;lt;HEAD&amp;gt;&lt;br /&gt;&amp;lt;TITLE&amp;gt;글 입력 폼&amp;lt;/TITLE&amp;gt;&lt;br /&gt;&amp;lt;META http-equiv = "Content-Type" content = "text/html;charset=utf-8" /&amp;gt;&lt;br /&gt;&amp;lt;SCRIPT&amp;gt;&lt;br /&gt;&amp;nbsp;function send()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; create_form.submit();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;&amp;lt;/HEAD&amp;gt;&lt;br /&gt;&amp;lt;BODY&amp;gt;&lt;br /&gt;&amp;lt;FORM name = "create_form" method = "post" action = "./create.jsp"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;FCK:editor id="contents" basePath="/editor/FCKeditor/"&lt;br /&gt;&amp;nbsp; imageBrowserURL="/editor/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&amp;amp;Connector=/editor/editor/filemanager/browser/default/connectors/jsp/connector"&lt;br /&gt;&amp;nbsp; linkBrowserURL="/editor/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=/editor/editor/filemanager/browser/default/connectors/jsp/connector"&lt;br /&gt;&amp;nbsp; flashBrowserURL="/editor/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Flash&amp;amp;Connector=/editor/editor/filemanager/browser/default/connectors/jsp/connector"&lt;br /&gt;&amp;nbsp; imageUploadURL="/editor/editor/filemanager/upload/simpleuploader?Type=Image"&lt;br /&gt;&amp;nbsp; linkUploadURL="/editor/editor/filemanager/upload/simpleuploader?Type=File"&lt;br /&gt;&amp;nbsp; flashUploadURL="/editor/editor/filemanager/upload/simpleuploader?Type=Flash"&amp;gt;&lt;br /&gt;&amp;nbsp; This is some &amp;lt;strong&amp;gt;sample text&amp;lt;/strong&amp;gt;. You are using &amp;lt;a href="&lt;A class=con_link href="http://www.fredck.com/fckeditor/%22%3EFCKeditor%3C/a" target=_blank&gt;http://www.fredck.com/fckeditor/"&amp;gt;FCKeditor&amp;lt;/a&lt;/A&gt;&amp;gt;.&lt;br /&gt;&amp;nbsp;&amp;lt;/FCK:editor&amp;gt;&lt;br /&gt;&amp;lt;/FORM&amp;gt;&lt;br /&gt;&amp;lt;INPUT type = "button" onClick = "return send()" value = "전송"&amp;gt;&lt;br /&gt;&amp;lt;/BODY&amp;gt;&lt;br /&gt;&amp;lt;/HTML&amp;gt;&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;- \editor\board\create.jsp(UTF-8 로 작성)&lt;/P&gt;&lt;P align=left&gt;&amp;lt;%@ page contentType = "text/html;charset=utf-8" %&amp;gt;&lt;br /&gt;&amp;lt;%&lt;br /&gt;&amp;nbsp;String contents = request.getParameter("contents");&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;contents = new String(contents.getBytes("8859_1"), "UTF-8"); &lt;br /&gt;%&amp;gt;&lt;br /&gt;&amp;lt;HTML&amp;gt;&lt;br /&gt;&amp;lt;HEAD&amp;gt;&lt;br /&gt;&amp;lt;TITLE&amp;gt;&amp;lt;/TITLE&amp;gt;&lt;br /&gt;&amp;lt;META http-equiv = "Content-Type" content = "text/html;charset=utf-8" /&amp;gt;&lt;br /&gt;&amp;lt;/HEAD&amp;gt;&lt;br /&gt;&amp;lt;BODY&amp;gt;&lt;br /&gt;&amp;lt;%= contents %&amp;gt;&lt;br /&gt;&amp;lt;/BODY&amp;gt;&lt;br /&gt;&amp;lt;/HTML&amp;gt;&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;11. 몇가지 Tip.&lt;br /&gt;11-1. 공백 값 입력을 방지하기 위해선 스크립트를 다음과 같이 수정합니다.&lt;/P&gt;&lt;P align=left&gt;/**&lt;br /&gt;&amp;nbsp;* 데이터 전송전 체크&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;function send()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;var oEditor = FCKeditorAPI.GetInstance('contents') ;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;var div = document.createElement("DIV");&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;div.innerHTML = oEditor.GetXHTML();&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;if( isNull( div.innerText ) )&lt;br /&gt;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp; alert("내용을 입력하세요.");&amp;nbsp; &lt;br /&gt;&amp;nbsp; oEditor.Focus();&lt;br /&gt;&amp;nbsp; return false;&amp;nbsp; &lt;br /&gt;&amp;nbsp;}&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;create_form.submit();&lt;br /&gt;}&lt;/P&gt;&lt;P align=left&gt;/**&lt;br /&gt;&amp;nbsp;* 정규표현식을 이용한 공백 체크&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;function isNull( text )&amp;nbsp; &lt;br /&gt;{&amp;nbsp; &lt;br /&gt;&amp;nbsp;if( text == null ) return true;&amp;nbsp; &lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;var result = text.replace(/(^\s*)|(\s*$)/g, "");&amp;nbsp; &lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;if( result )&amp;nbsp; &lt;br /&gt;&amp;nbsp; return false;&amp;nbsp; &lt;br /&gt;&amp;nbsp;else&amp;nbsp; &lt;br /&gt;&amp;nbsp; return true;&amp;nbsp; &lt;br /&gt;}&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg1178344 src="http://tfile.nate.com/download.asp?FileID=24259524" width=550 localfile="yes"&gt;&lt;/P&gt;&lt;DIV align=left&gt;&lt;IMG style="CURSOR: hand" id=userImg6202589 src="http://tfile.nate.com/download.asp?FileID=24259525" width=550 localfile="yes"&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P align=left&gt;11-2. 페이지 로딩시 바로 포커스를 주고 싶다면&lt;br /&gt;\editor\FCKeditor\fckconfig.js 의 FCKConfig.StartupFocus 의 값을 true 로 변경하거나&lt;/P&gt;&lt;P align=left&gt;태그라이브러리 옵션으로 startupFocus="true" 를 설정합니다.&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;11-3. 읽기 전용으로 변환하고 싶다면&lt;/P&gt;&lt;P align=left&gt;var oEditor = FCKeditorAPI.GetInstance('contents') ;&lt;br /&gt;oEditor.EditorDocument.body.contentEditable = false;&lt;br /&gt;oEditor.EditorDocument.body.unselectable = true;&lt;/P&gt;&lt;br /&gt;&lt;P align=left&gt;11-4. 기타 환경 설정은 fckconfig.js 파일을 참조하고 아래 사이트를 참조하시기 바랍니다.&lt;br /&gt;&lt;A class=con_link href="http://sourceforge.net/forum/forum.php?forum_id=257180" target=_blank&gt;http://sourceforge.net/forum/forum.php?forum_id=257180&lt;/A&gt; ( fckeditor help 포럼 )&lt;br /&gt;&lt;A class=con_link href="http://java.lin4u.com/my/index.php?category=&amp;amp;keyfield=title&amp;amp;keyword=fck&amp;amp;favorite" target=_blank&gt;http://java.lin4u.com/my/index.php?category=&amp;amp;keyfield=title&amp;amp;keyword=fck&amp;amp;favorite&lt;/A&gt; ( 폰트 관련 참조 )&lt;br /&gt;&lt;A class=con_link href="http://wiki.fckeditor.net/" target=_blank&gt;http://wiki.fckeditor.net/&lt;/A&gt; ( fckeditor 위키 사이트 )&lt;/P&gt;&lt;P align=left&gt;&lt;A class=con_link href="http://www.ghlab.com/blog/fckeditor/editor.zip" target=_blank&gt;http://www.ghlab.com/blog/fckeditor/editor.zip&lt;/A&gt; ( 위 샘플들을 테스트한 컨텍스트 모든 파일들 )&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-7950637312767668299?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/7950637312767668299/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/06/fckeditor-java-%EB%B2%84%EC%A0%84-%EC%84%A4%EC%B9%98-%ED%95%98%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/7950637312767668299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/7950637312767668299'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/06/fckeditor-java-%EB%B2%84%EC%A0%84-%EC%84%A4%EC%B9%98-%ED%95%98%EA%B8%B0.html' title='FCKeditor java 버전 설치 하기'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-7433018322935563023</id><published>2010-06-01T13:49:00.000+09:00</published><updated>2011-01-11T22:00:35.318+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='FCKeditor'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>FCKeditor</title><content type='html'>&lt;H1 id=pageTitle&gt;&amp;nbsp;&lt;/H1&gt;&lt;DIV id=contentContainer class=content-container&gt;&lt;DIV class="content xhtmlEditorBody readonlyContentBody"&gt;&lt;DIV style="BORDER-BOTTOM: rgb(210,180,140) 1px solid; BORDER-LEFT: rgb(210,180,140) 1px solid; PADDING-BOTTOM: 0px; BACKGROUND-COLOR: rgb(255,255,250); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(210,180,140) 1px solid; BORDER-RIGHT: rgb(210,180,140) 1px solid; PADDING-TOP: 2px" id=subPageDiv&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;&lt;A class=wiki title=FCKeditor href="/pages/2618470"&gt;&lt;FONT color=#002bb8&gt;FCKeditor&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;P&gt;&lt;A class=wiki title=1.설치 href="/pages/2626134"&gt;&lt;FONT color=#002bb8&gt;1.설치&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;A class=wiki title=2.설정 href="/pages/2626164"&gt;&lt;FONT color=#002bb8&gt;2.설정&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;A class=wiki title=3.Toolbar href="/pages/2626174"&gt;&lt;FONT color=#002bb8&gt;3.Toolbar&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;A class=wiki title="FCKeditor.JAVA Integration" href="/pages/2622928"&gt;&lt;FONT color=#002bb8&gt;FCKeditor.JAVA Integration&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;A class=wiki title=FCKeditor.JavaScript href="/pages/2625912"&gt;&lt;FONT color=#002bb8&gt;FCKeditor.JavaScript&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;&lt;A class=wiki title="JavaScript API" href="/pages/2626128"&gt;&lt;FONT color=#002bb8&gt;JavaScript API&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;H2&gt;Styles&lt;/H2&gt;&lt;P&gt;&lt;A href="http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Configuration/Styles"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Configuration/Styles&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;&lt;H2&gt;Templates&lt;/H2&gt;&lt;P&gt;&lt;A href="http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Configuration/Templates"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Configuration/Templates&lt;/SPAN&gt;&lt;/A&gt;&lt;br /&gt;&lt;/P&gt;&lt;H2&gt;참고&lt;/H2&gt;&lt;UL class=checkListType&gt;&lt;LI&gt;Form이 submit되어 서블릿쪽으로 값을 넘길 때는 등록하거나 수정한 내용이 적용 되지만, validatorUtil.js를 이용해서 입력폼을 검증시에 직접 에디터의 내용을 가져오지는 못하는 것 같다. 이때는 에디터를 페이지에 삽입했을 때 다음과 같이 들어가는 것을 이용해서 직접 히든 필드에 에디터의 값을 할당하고 검증한다.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;OL style="MARGIN-LEFT: 2em" class=code&gt;&lt;LI&gt;&amp;lt;td&amp;gt;코드명 &amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;$editor.get("cd_nm", "$!cd_nm")&amp;lt;/td&amp;gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P style="MARGIN-LEFT: 2em"&gt;이 VTL 코드는 다음과 같은 HTML로 파싱된다.&lt;/P&gt;&lt;OL style="MARGIN-LEFT: 2em" class=code&gt;&lt;LI&gt;&amp;lt;td&amp;gt;코드명 &amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;div&amp;gt;&amp;lt;input value="" type="hidden" name="cd_nm" id="cd_nm" /&amp;gt;&amp;lt;input value="CustomConfigurationsPath=%2Feditor%2Fconfig.js" type="hidden" id="cd_nm___Config" /&amp;gt;&amp;lt;iframe frameborder="0" width="780" height="200" scrolling="no" src="/editor/editor/fckeditor.html?InstanceName=cd_nm&amp;amp;amp;Toolbar=Custom" id="cd_nm___Frame"&amp;gt; &amp;lt;/iframe&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt; &lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="MARGIN-LEFT: 2em"&gt;검증 시는 다음과 같이 직접 히든 필드에 값을 입력하고 검증한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;OL style="MARGIN-LEFT: 2em" class=code&gt;&lt;LI&gt;function fn_update(){&lt;/LI&gt;&lt;LI&gt;&lt;P style="MARGIN-LEFT: 2em"&gt;$("cd_nm").value = FCKeditorAPI.GetInstance ('cd_nm').GetXHTML(true);&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P style="MARGIN-LEFT: 2em"&gt;var val = new Validator($("formDetl"));&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P style="MARGIN-LEFT: 2em"&gt;if(!cfn_isEmpty("$!codeMgr.badWord")) {&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P style="MARGIN-LEFT: 4em"&gt;val.setBadWord("$!codeMgr.badWord");&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P style="MARGIN-LEFT: 2em"&gt;}&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P style="MARGIN-LEFT: 2em"&gt;...&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P style="MARGIN-LEFT: 2em"&gt;val.addItem("cd_nm", "Y:maxByteLength=75:Y:코드명:");&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P style="MARGIN-LEFT: 2em"&gt;val.addItem("cd_nm", "Y:badword:Y:코드명:");&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P style="MARGIN-LEFT: 2em"&gt;...&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;UL class=checkListType&gt;&lt;LI&gt;에디터 밖에서 편집 모드 변경&lt;/LI&gt;&lt;/UL&gt;&lt;OL class=code&gt;&lt;LI&gt;var oEditor = FCKeditorAPI.GetInstance('cd_nm') ;&lt;/LI&gt;&lt;LI&gt;oEditor.SwitchEditMode(true) ;&lt;/LI&gt;&lt;/OL&gt;&lt;UL class=checkListType&gt;&lt;LI&gt;자바와 연동시 한글 파일 업로드 파일명 깨짐 방지&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;A href="http://nextframe.jp/flash/matsnp/matsnp.html"&gt;&lt;FONT color=#568942&gt;http://nextframe.jp/flash/matsnp/matsnp.html&lt;/FONT&gt;&lt;/A&gt;&lt;br /&gt;&lt;A class=attachment title=fckeditor-java-core-2.4.1.jar href="/pages/2618470/attachments/1707937"&gt;&lt;FONT color=#568942&gt;fckeditor-java-core-2.4.1.jar&lt;/FONT&gt;&lt;/A&gt;&lt;br /&gt;FCKeditor업로더창은 utf-8&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-7433018322935563023?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/7433018322935563023/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/06/fckeditor.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/7433018322935563023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/7433018322935563023'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/06/fckeditor.html' title='FCKeditor'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-3326541536967983059</id><published>2010-05-17T11:39:00.000+09:00</published><updated>2011-01-11T22:00:34.637+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>resizeFullScreen</title><content type='html'>&amp;nbsp; &amp;nbsp; function resizeFullScreen()&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; top.window.moveTo(0,0);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (document.all)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; top.window.resizeTo(screen.availWidth,screen.availHeight);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else if (document.layers||document.getElementById) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (top.window.outerHeight&amp;lt;screen.availHeight||top.window.outerWidth&amp;lt;screen.availWidth)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; top.window.outerHeight = screen.availHeight;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; top.window.outerWidth = screen.availWidth;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-3326541536967983059?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/3326541536967983059/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/05/resizefullscreen.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/3326541536967983059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/3326541536967983059'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/05/resizefullscreen.html' title='resizeFullScreen'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-1282118937952300615</id><published>2010-05-07T09:01:00.000+09:00</published><updated>2011-01-11T22:00:33.835+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Etc'/><category scheme='http://www.blogger.com/atom/ns#' term='3005'/><category scheme='http://www.blogger.com/atom/ns#' term='psp 커펌'/><category scheme='http://www.blogger.com/atom/ns#' term='psp'/><title type='text'>PSP 3005 커펌 방법</title><content type='html'>&lt;DIV id=post-view60101410461 class="post-view pcol2 _param(1)"&gt;&lt;DIV style="FONT-FAMILY: 7490_9; FONT-SIZE: 9pt" class=view&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525&gt;&lt;FONT size=2&gt;&lt;FONT face="Terminal, monospace"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;일단 PSP 3005 5.05이상이신분들은 커펌이 안&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 994265_10; FONT-SIZE: 10pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;됩&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;니다.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;5.03 이하이신분들은 5.03으로 업그레이드 해주세요&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;A class=con_link href="http://www.psp-hacks.com/file/1645" target=_blank _cssquery_UID="11"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;http://www.psp-hacks.com/file/1645&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;&amp;nbsp;&amp;lt; 5.03 업데이트 다운&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;1. PSP 5.03 압축풀기&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;2. PSP 3005 USB에 연결&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;3. PSP 연결폴더 -&amp;gt; GAME -&amp;gt; UPDATE (없으면 만들기)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;4. 1번에서 푼 파일들 중에 EBOOT.PBP 파일을 3번 UPDATE 에 넣기&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;5. USB 를 빼고 버젼을 확인&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;끝&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;FONT size=2&gt;&lt;FONT face="Terminal, monospace"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;1. 받은 첵헨 압축파일 풀기&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#252525&gt;&lt;FONT size=2&gt;&lt;FONT face="Terminal, monospace"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;2. PSP 전원을 킨후 시스템설정 -&amp;gt; 문자집합 -&amp;gt; 맨위 US-latin 설정&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;(UMD 자동기능 과 캐시를 끄기로 하고 UMD충전 과 자동연결을 끄기로 한다 , 색공간을 표준으로 한다 , 테마를 클래식으로 바꾼다.)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;3. USB를 PSP와 연결&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;4. Picture 에 있는 모든 사진을 없에기&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;5. 최상위(PSP 연결폴더)에 h.bin 을 복사 -&amp;gt; 붙여넣기&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;6. 그다음 칙헨 폴더에 있는 슬림파일을 열어주고 그안에 있는 칙헨 파일을 Picture에 넣어준다&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;7. USB를 뺀다&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;8. PSP에서 사진에 들어간다&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#252525&gt;&lt;FONT size=2&gt;&lt;FONT face="Terminal, monospace"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;9. 사진폴데에 들어간후 칙헨파일을 누르면 잠시후 갑자기 픽하면서 화면이 깨지면서 꺼지면 반커펌이 성공한것이다.&lt;/SPAN&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;(성공한 경우 다시 PSP가 켜진다)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;11. 커펌파일 (GEN-C) 압축을 푼다&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;12. 폴더가 많은데 가다가 맨끝 폴더에 EBOOT과 readme가 있을거다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;13. GEN-C 압축풀면 나오는 PSP 폴더 복사해준 후 USB를 연결한다&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;14. PSP를 연결한 폴더에 들어가서 최상위에 붙여넣기를 해준다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;15. USB를 빼준다&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;16. 메모리스틱에서 GEN-C를 실행 X를 눌러준다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;끝&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;반벽돌 , 벽돌시 책임지지 않습니다 용자만 도전하세요 훗&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;3005는 완전커펌이 아닌 휘발성 커펌입니다. 배터리를 빼면 커펌이 날아갑니다. ( GEN-C 는 종료가 안됌 슬립모드만 됨 ㅋ )&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 2820190_9; FONT-SIZE: 18pt"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;5.03만 가능합니다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A class=con_link href="http://popotz.textcube.com/1153" target=_blank _cssquery_UID="12"&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;http://popotz.textcube.com/1153&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;&amp;nbsp;&amp;lt; ChickHen 입니다 이거 먼저 받고 밑에꺼 받으세용&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;A class=con_link href="http://popotz.textcube.com/1449" target=_blank&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;http://popotz.textcube.com/1449&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;FONT color=#252525 size=2 face="Terminal, monospace"&gt;&amp;nbsp;&amp;lt; GEN - C [FULLE] 을 받습니다.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 994265_12; FONT-SIZE: 12pt"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://blog.naver.com/youseok0" target=_blank&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-1282118937952300615?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/1282118937952300615/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/05/psp-3005-%EC%BB%A4%ED%8E%8C-%EB%B0%A9%EB%B2%95.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/1282118937952300615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/1282118937952300615'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/05/psp-3005-%EC%BB%A4%ED%8E%8C-%EB%B0%A9%EB%B2%95.html' title='PSP 3005 커펌 방법'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-8197728161401900417</id><published>2010-04-15T09:36:00.000+09:00</published><updated>2011-01-11T22:00:33.027+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual C'/><category scheme='http://www.blogger.com/atom/ns#' term='#ifdef'/><title type='text'>전처리 구문에 대해</title><content type='html'>&lt;P&gt;#define, #ifndef, #ifdef, #endif... 등등이 쓰이는 이유는 &lt;/P&gt;&lt;P&gt;컴파일 하기 &lt;STRONG&gt;&lt;FONT color=#ff0000&gt;전&lt;/FONT&gt;&lt;/STRONG&gt;에 &lt;STRONG&gt;&lt;FONT color=#ff0000&gt;처리&lt;/FONT&gt;&lt;/STRONG&gt;한다는 뜻이죠.&lt;/P&gt;&lt;P&gt;저 구문들을 먼저 처리한 뒤 컴파일이 이루어집니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이해를 돕도록 한 가지 예를 들겠습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;//&amp;nbsp; 먼저 아무 의미 없어보이는 HELLO를 define했습니다.&lt;/P&gt;&lt;P&gt;#define HELLO&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;//&amp;nbsp; 여기서 의미가 생기죠. 이 구문을 해석하면 "HELLO가 define이 되었다면.."입니다. 일반 if와 다르지 않습니다.&lt;/P&gt;&lt;P&gt;#ifdef HELLO&lt;/P&gt;&lt;P&gt;printf("Hello\n");&lt;/P&gt;&lt;P&gt;#else &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 이건 HELLO가 define되지 않았다면..이 되겠죠&lt;/P&gt;&lt;P&gt;printf("Bye\n");&lt;/P&gt;&lt;P&gt;#endif &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // end if 즉 if를 끝낸다...뭐 그런 뜻이죠&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 이 코드가 어떻게 되냐면..&lt;/P&gt;&lt;P&gt;printf("Hello\n");&lt;/P&gt;&lt;P&gt;이거 하나만 컴파일 됩니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;만약에 printf("Bye\n");를 prif"Bye\n"); 이 따위로 써도 컴파일 시 에러가 안납니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 왜 printf("Bye\n"); 같이 쓰지도 않을 코드를 써서 낭비하는가...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;프로그램을 많이 짜다가 보면&lt;/P&gt;&lt;P&gt;어쩔 때는 printf("Hello\n");로 컴파일 해야하고&lt;/P&gt;&lt;P&gt;어쩔때는 printf("Bye\n");로 컴파일 해야할 때가 있습니다.&lt;/P&gt;&lt;P&gt;이게 한 줄이면 모르겠지만...&lt;/P&gt;&lt;P&gt;100줄 1000줄..이러면 일일이 컴파일 할 때마다 주석처리하기 엄청 짜증나겠죠.&lt;/P&gt;&lt;P&gt;이럴 때 #define HELLO만 살짝 손보면 컴파일 결과가 사사삭 바뀌니 엄청 편리합니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 질문하신 부분중에&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN lang=EN-US&gt;#ifndef TURBOC_HEADER&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;#define TURBOC_HEADER&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;ifndef는 if no define...if not define??? 뭐 그런겁니다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;그래서 TURBOC_HEADER가 define되지 않았다면 TURBOC_HEADER를 define해라...&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;뭐 그런겁니다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;이게 왜 필요하냐면..&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;프로젝트가 커질 수록 헤더파일을 여기 저기서 가져다 쓰게 됩니다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;그럼 컴파일시 같은 내용을 반복해서 컴파일 하게 되고 에러가 발생할 수도 있습니다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;질문하신 코드의 경우&lt;/SPAN&gt; &lt;SPAN lang=EN-US&gt;#include문이 여러개 있는데 한번만 하면 될 일을 여러번 할 수도 있다는 겁니다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;분명히 에러의 소지도 있고요. (아주 쉬운 예로 전역변수를 헤더에 선언했다면 바로 에러나겠죠)&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;그래서 TURBOC_HEADER가 define되지 않았다면 define하고 헤더를 컴파일하고..&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;또 다른 곳에서 헤더를 컴파일 하려고 하면 이미 TURBOC_HEADER가 define 되었으니까&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;그냥 넘어가겠죠.&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;MFC같은 것을 할 때는 이런 구조가 기본적으로 생성됩니다. 그만큼 꼭 필요한 구조입니다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;#endif는 #ifndef와 쌍이고요..&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=a5&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=a5&gt;&lt;SPAN lang=EN-US&gt;출처: &lt;A href="http://kin.naver.com/qna/detail.nhn?d1id=1&amp;amp;dirId=1040101&amp;amp;docId=68987639&amp;amp;qb=YysrIOunpO2BrOuhnOqwgCDrqLzqsIDsmpQ=&amp;amp;enc=utf8&amp;amp;section=kin&amp;amp;rank=1&amp;amp;sort=0&amp;amp;spq=0"&gt;http://kin.naver.com/qna/detail.nhn?d1id=1&amp;amp;dirId=1040101&amp;amp;docId=68987639&amp;amp;qb=YysrIOunpO2BrOuhnOqwgCDrqLzqsIDsmpQ=&amp;amp;enc=utf8&amp;amp;section=kin&amp;amp;rank=1&amp;amp;sort=0&amp;amp;spq=0&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-8197728161401900417?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/8197728161401900417/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/04/%EC%A0%84%EC%B2%98%EB%A6%AC-%EA%B5%AC%EB%AC%B8%EC%97%90-%EB%8C%80%ED%95%B4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/8197728161401900417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/8197728161401900417'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/04/%EC%A0%84%EC%B2%98%EB%A6%AC-%EA%B5%AC%EB%AC%B8%EC%97%90-%EB%8C%80%ED%95%B4.html' title='전처리 구문에 대해'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-4978323381683660391</id><published>2010-04-06T10:21:00.000+09:00</published><updated>2011-01-11T22:00:32.228+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual C'/><title type='text'>[MFC] DoModal() 이란??</title><content type='html'>&lt;P&gt;비주얼 C++에 다이얼로그는 두가지 종류가 있습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;한가지가 모달리스 다이얼로그이고...&lt;/P&gt;&lt;P&gt;또 다른 한가지가 모달 다이얼로그입니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이 두 다이얼로그의 차이는&lt;/P&gt;&lt;P&gt;모달 다이얼로그의 경우는 다이얼로그가 생성되면&lt;/P&gt;&lt;P&gt;자신을 생성시킨 다이얼로그가 활성화되지 않습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;하지만 모달리스 다이얼로그는 다이얼로그가 생성되더라도&lt;/P&gt;&lt;P&gt;자신을 생성시킨 다이얼로그로 마음대로 왔다 갔다 할 수 있습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사실 이게 정확한 설명은 아니지만 대략의 차이점이라고 생각하시면 될 것 같고..^^;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DoModal 함수에 대한 간단한 예제를 들면...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;일단 모달 다이얼로그로 클래스가 생성되어 있다고 하죠...&lt;/P&gt;&lt;P&gt;그 클래스 이름을 "TestClassModal" 이라고 했을 때...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;다이얼로그를 생성시킬 곳에서는&lt;/P&gt;&lt;P&gt;일단 해당 다이얼로그 클래스의 해더 파일을 포함시켜야 할 거구요..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그 다음에는 그 클래스를 선언해 주어야 겠지요~^^&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;TestClassModal &amp;nbsp; dlg;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;if (dlg.DoModal == IDOK) &amp;nbsp; // 다이얼로그가 종료될 때 반환되는 값을 검사, OK 버튼으로 종료되었을 경우 IDOK를 반환&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // OK 로 다이얼로그가 종료되었을 경우의 작업 코딩&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;else&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; // 그렇지 않을 경우의 작업 코딩..&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DoModal 함수는 보통 위와 같은 형태로 사용됩니다. &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-4978323381683660391?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/4978323381683660391/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/04/mfc-domodal-%EC%9D%B4%EB%9E%80.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/4978323381683660391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/4978323381683660391'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/04/mfc-domodal-%EC%9D%B4%EB%9E%80.html' title='[MFC] DoModal() 이란??'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-2097594332523182411</id><published>2010-04-06T10:20:00.000+09:00</published><updated>2011-01-11T22:00:31.348+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual C'/><title type='text'>[MFC] CDialog::EndDialog</title><content type='html'>&lt;DIV&gt;&lt;STRONG&gt;1. 함수의 원형&lt;/STRONG&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; void &lt;STRONG&gt;&lt;FONT color=#000000&gt;EndDialog&lt;/FONT&gt;&lt;/STRONG&gt;(int nResult);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;STRONG&gt;2. 함수의 기능&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; CDialog 대화상자를 이용해서 프로그램 하는 경우, 대화상자를 종료시킬 때, 어떤 함수를&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; 사용해야하는지 고민하는 경우가 종종있습니다. 일반적으로는 OnOK, OnCancel 을 호출해서&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; 많이 종료시키는데, EndDialog 함수도 대화상자를 종료시킬 때 사용합니다.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;STRONG&gt;3. 함수의 매개변수에 대한 설명&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; 3.1 nResult&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 대화상자는 보통 DoModal 이라는 함수를 이용해서 대화상자를 출력하게 됩니다. 그리고 &lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 대화상자가 종료될때 DoModal 함수를 빠져나오게 됩니다. DoModal 이라는 함수는 종료될 때,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 정수형 값을 반환하는데 그 값을 이 변수를 이용해서 지정할 수 있습니다.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 일반적으로 대화상자가 종료되었을때, 확인 버튼을 눌러서 종료했는지 또는 취소버튼을 눌러서&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 종료했는지를 구분하려면 아래와 같이 코드를 작성하시면 됩니다.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MyTestDlg ins_dlg;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int return_value = ins_dlg.DoModal();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(IDOK == return_value){&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#009900&gt;// 확인을 눌러서 대화상자가 종료된 경우를 처리 한다.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else if(IDCANCEL == return_value){&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#009900&gt;// 취소를 눌러서 대화상자가 종료된 경우를 처리 한다.&lt;/FONT&gt;&lt;/DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 위 코드에서 보시는것과 같이 DoModal 함수는 IDOK 또는 IDCANCEL 값을 반환하게 됩니다.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 왜냐하면, 대부분 OnOK, OnCancel 함수로 종료시키기 때문입니다. 하지만, 좀더 효과적으로&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 프로그램을 하려고 하다보면 DoModal 함수가 또다른 값을 반환해야 하는 경우도 있습니다.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 이럴때, EndDialog 함수를 호출하고 이 매개변수에 DoModal 이 반환할 값을 명시하면 됩니다.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EndDialog(5);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 이렇게 종료하면 DoModal 함수는 5의 값을 반환하게 됩니다.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;STRONG&gt;4. 함수의 주의사항&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; EndDialog 함수는 즉각적으로 대화상자를 닫는 함수는 아닙니다. 따라서 EndDialog 함수 아래에&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; 코드가 있다면 그 코드를 수행합니다. 그리고 EndDialog 함수를 사용한 함수가 종료되는 시점에&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; 대화상자를 종료 시킵니다.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &lt;FONT color=#009900&gt;// m_member_data는 MyTestDlg 클래스의 멤버 변수이고 1의 값을 가진다고 가정하겠습니다.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; void MyTestDlg::CloseMyDlg()&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EndDialog(5); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;FONT color=#009900&gt;// 대화상자가 종료되어야 한다는 값을 내부적으로 설정. &lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT color=#009900&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 하지만 이 순간에 종료되지는 않는다.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; m_member_data++; &lt;FONT color=#009900&gt;// 값을 2로 증가시킨다.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&amp;nbsp; &lt;FONT color=#009900&gt;// CloseMyDlg 함수가 종료되면서&lt;/FONT&gt;,&lt;FONT color=#009900&gt; CDialog 클래스는 종료상황이 체크된것을 인지하고&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;FONT color=#009900&gt;// 대화상자를 종료합니다.&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-2097594332523182411?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/2097594332523182411/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/04/mfc-cdialogenddialog.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/2097594332523182411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/2097594332523182411'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/04/mfc-cdialogenddialog.html' title='[MFC] CDialog::EndDialog'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-825525621396577849</id><published>2010-03-16T15:30:00.000+09:00</published><updated>2011-01-11T22:00:30.522+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual C'/><title type='text'>LPSTR, LPCSTR, LPCTSTR…</title><content type='html'>&lt;P&gt;LPSTR : &amp;nbsp;A 32-bit pointer to a character string.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 이 데이터 형같은 경우 예전에 우리가 사용하던 방식으로 선언하면&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; char *&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 와 같은 경우이죠. 유니코드를 지원하지 않기 때문에 각각의&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 문자는 1바이트를 가집니다.&lt;/P&gt;&lt;P&gt;LPCSTR : &amp;nbsp;A 32-bit pointer to a constant character string.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 이 데이터 형같은 경우 예전에 우리가 사용하던 방식으로 선언하면&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char *&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 와 같은 경우이죠. const 형이 어떤건지는 아시죠? 이것역시&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 유니코드를 지원하지 않기 때문에 각각의 문자는 1바이트를 가집니다. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;LPTSTR : A 32-bit pointer to a character string that is&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; portable for Unicode and DBCS&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 이 데이터 형같은 경우, 윈도우즈가 유니코드를 지원하면서 새로&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 생긴형식으로 풀어쓰면 다음과 같습니다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TCHAR *&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 이 형은 유니코드를 지원하기 때문에 각 문자가 2바이트를 가지게&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 됩니다. 실제로 유니코드를 지원하는 프로그램을 작성하지 않는&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 이상 거의 사용하지 않습니다.&lt;/P&gt;&lt;P&gt;LPCTSTR : A 32-bit pointer to a constant character string that&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; is portable for Unicode and DBCS.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 이것 역시 윈도우즈가 유니코드를 지원하면서 새로 생긴형식으로&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 풀어쓰면 다음과 같습니다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; const TCHAR *&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 마찬가지로 유니코드를 지원하기 때문에 한문자가 2바이트 크기를&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 가지게 됩니다.&lt;/P&gt;&lt;P&gt;함수뒤에 const 를 붙이는건 클래스 멤버함수내에서 this 사용을 제한하기 위해서 사용합니다.&lt;br /&gt;일반적으로 멤버 함수내에서 사용되는 this는 해당 클래스가 MyClass 인 경우에,&lt;/P&gt;&lt;P&gt;MyClass * const this;&lt;/P&gt;&lt;P&gt;와 같이 내부적으로 선언되어서 사용되는데, 함수의 뒤에 const를 붙이면&lt;/P&gt;&lt;P&gt;const MyClass * const this;&lt;/P&gt;&lt;P&gt;와 같이 속성이 바뀌어져서 사용됩니다. 즉 내부에 사용되는 데이터 멤버가 이 함수에서는 모조리&lt;br /&gt;읽기 전용으로 바뀌어져 버리는거죠…&lt;/P&gt;&lt;P&gt;this 변수가 가리키는 멤버들이 모두 쓰기 불능으로 되어버리기 때문에… 즉, this는 우리가 직접&lt;br /&gt;변경할수 없기 때문에 함수뒤에 const를 붙여 간접적으로 this를 const형으로 변경하는 기능을&lt;br /&gt;구현한겁니다.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-825525621396577849?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/825525621396577849/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/03/lpstr-lpcstr-lpctstr.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/825525621396577849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/825525621396577849'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/03/lpstr-lpcstr-lpctstr.html' title='LPSTR, LPCSTR, LPCTSTR…'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-614238455052095472</id><published>2010-03-16T09:39:00.000+09:00</published><updated>2011-01-11T22:00:29.727+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Etc'/><title type='text'>TSVNCache.exe 제거</title><content type='html'>&lt;P&gt;많은 개발업체에서 버전 관리를 위해 무료 버전 관리 프로그램인 Tortoise SVN를 많이 사용하고 있는 걸로 알고 있다.&lt;br /&gt;&lt;br /&gt;Tortoise SVN의 장점 중 하나인 현재 상태를 아이콘으로 표시해주는 기능이 있는데, 이 아이콘 상태를 정의하기 위해 Tortoise SVN에서 수시로 디스크를 읽으며, 파일 상태를 체크한다. 이 때문에, 컴퓨터 성능이 저하 되기도&lt;SPAN style="WIDTH: 1px; FLOAT: right; HEIGHT: 1px" id=callbacknestkindtististorycom65276&gt;&lt;EMBED id=bootstrapperkindtististorycom65276 height=1 type=application/x-shockwave-flash width=1 src=http://kindtis.tistory.com/plugin/CallBack_bootstrapperSrc?nil_profile=tistory&amp;amp;nil_type=copied_post allowscriptaccess="always" wmode="transparent" EnableContextMenu="false" FlashVars="&amp;amp;callbackId=kindtististorycom65276&amp;amp;host=http://kindtis.tistory.com&amp;amp;embedCodeSrc=http%3A%2F%2Fkindtis.tistory.com%2Fplugin%2FCallBack_bootstrapper%3F%26src%3Dhttp%3A%2F%2Fcfs.tistory.com%2Fblog%2Fplugins%2FCallBack%2Fcallback%26id%3D6%26callbackId%3Dkindtististorycom65276%26destDocId%3Dcallbacknestkindtististorycom65276%26host%3Dhttp%3A%2F%2Fkindtis.tistory.com%26float%3Dleft" swLiveConnect="true"&gt;&lt;/SPAN&gt; 하는데, 범인은 바로 TSVNCache.exe!! 이 프로세서가 백그라운드로 실행되면서, 폴더/파일를 수시로 읽어들이고 있기 때문이다.&lt;br /&gt;&lt;br /&gt;Tortoise SVN를 쓰고 있다면, 밑의 방법대로 설정 해두자. 이렇게 하면 사용자가 지정한 폴더와 파일 외에는 접근을 하지 않으므로, 디스크 읽기를 최소화 시킬수 있다.&lt;/P&gt;&lt;P&gt;방법은 이렇다.&lt;br /&gt;&lt;br /&gt;&lt;/P&gt;&lt;DIV style="BORDER-BOTTOM: #c1c1c1 3px double; BORDER-LEFT: #c1c1c1 3px double; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #c1c1c1 3px double; BORDER-RIGHT: #c1c1c1 3px double; PADDING-TOP: 10px" class=txc-textbox&gt;1. TortoiseSVN -&amp;gt; Settings 메뉴를 연다 .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Look and Feel 트리 항목에서 Icon Overlays 선택&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. 그럼 밑의 그림과 같은 항목들이 나온다.&lt;br /&gt;&lt;br /&gt;&lt;DIV style="TEXT-ALIGN: center; CLEAR: both" class="imageblock center"&gt;&lt;A href="http://cfile24.uf.tistory.com/original/146DD5244A4C0F24B8BA74" rel=lightbox target=_blank&gt;&lt;IMG alt="" src="http://cfile24.uf.tistory.com/image/146DD5244A4C0F24B8BA74" width=450 height=320&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;4. 하단에 Exclude Paths(제외항목)에 드라이브명과 함께 *를 찍어준다.&lt;br /&gt;즉, 드라이브내의 모든 파일/폴더를 검색하지 말란소리다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5. Include Paths에는 버전관리를 하고 있는 폴더명을 적어준다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. 설정을 마치면, 작업 관리자를 통해 TSVNCache.exe를 강제 종료시킨다(보통 알아서 재시작한다).&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-614238455052095472?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/614238455052095472/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/03/tsvncacheexe-%EC%A0%9C%EA%B1%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/614238455052095472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/614238455052095472'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/03/tsvncacheexe-%EC%A0%9C%EA%B1%B0.html' title='TSVNCache.exe 제거'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-1946034535192211329</id><published>2010-03-12T17:57:00.000+09:00</published><updated>2011-01-11T22:00:28.945+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dr. wtsn'/><category scheme='http://www.blogger.com/atom/ns#' term='WinDbg'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>닥터왓슨 (Dr. Watson, Drwtsn32.exe) 사용법 :: 프로그램 오류, 버그 해독개발자 팁, 강좌</title><content type='html'>&lt;TABLE style="BORDER-COLLAPSE: collapse; BACKGROUND: #4f81bd" border=0&gt;&lt;TBODY vAlign=top&gt;&lt;TR&gt;&lt;TD style="BORDER-BOTTOM: #1f497d 0.5pt solid; BORDER-RIGHT-STYLE: none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-LEFT-STYLE: none; BORDER-TOP: #1f497d 0.5pt solid"&gt;&lt;P&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR: white"&gt;개요&lt;A href="http://a.tk.co.kr/" target=_blank&gt;&lt;/SPAN&gt;&lt;FONT color=#618cbf&gt;.&lt;/FONT&gt;&lt;A href="http://www.tk.co.kr/" target=_blank&gt;&lt;FONT color=#618cbf&gt;.&lt;/FONT&gt;&lt;/A&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;닥터왓슨 (Dr. Watson, Drwtsn32.exe) 은 디버그(Debug)와 릴리즈(Release)버전에서 &lt;SPAN style="COLOR: #c0504d"&gt;프로그램 오류발생 할 경우 오류 내용을 해독할 수 있는 정보를 제공해주는&lt;/SPAN&gt; 특히 &lt;SPAN style="COLOR: #c0504d"&gt;서버프로그램에서 아주 유용하게 사용됩니다. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;"drwtsn32.exe" 실행하여 &lt;SPAN style="COLOR: #c0504d"&gt;도움말을 클릭하면 자세한 한글 설명서를&lt;/SPAN&gt; 볼 수 있습니다. &lt;/P&gt;&lt;P style="TEXT-ALIGN: justify"&gt;&lt;IMG alt="" src="http://cfs6.tistory.com/upload_control/download.blog?fhandle=YmxvZzc0OTQ2QGZzNi50aXN0b3J5LmNvbTovYXR0YWNoLzExLzExNjIucG5n"&gt;&lt;SPAN style="FONT-FAMILY: 돋움; FONT-SIZE: 9pt"&gt;&lt;br /&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="TEXT-ALIGN: justify"&gt;&lt;A href="http://user.chol.com/~kyuseo99/down/drwstn_test.zip"&gt;&lt;FONT color=#618cbf&gt;&lt;STRONG&gt;오류가 발생하는 테스트 프로그램 다운로드&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt; &lt;/P&gt;&lt;P style="TEXT-ALIGN: justify"&gt;&lt;A href="http://a.tk.co.kr/224"&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;STRONG&gt;윈도우 디버그 심볼(Debug Symbol) 다운로드 받는 방법&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/A&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&lt;TABLE style="BORDER-COLLAPSE: collapse; BACKGROUND: #4f81bd" border=0&gt;&lt;COLGROUP&gt;&lt;STRONG&gt;&lt;COL style="WIDTH: 638px"&gt;&lt;/STRONG&gt;&lt;/COLGROUP&gt;&lt;TBODY vAlign=top&gt;&lt;TR&gt;&lt;TD style="BORDER-BOTTOM: #1f497d 0.5pt solid; BORDER-RIGHT-STYLE: none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-LEFT-STYLE: none; BORDER-TOP: #1f497d 0.5pt solid"&gt;&lt;P&gt;&lt;SPAN style="COLOR: white; FONT-SIZE: 12pt"&gt;&lt;STRONG&gt;따라해보기&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;P style="TEXT-ALIGN: justify"&gt;&lt;SPAN style="COLOR: #1f497d; FONT-SIZE: 12pt"&gt;&lt;STRONG&gt;내가 만든 프로그램의 심볼을 닥터왓슨(Dr. Watson)에 등록시켜보기 &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="TEXT-ALIGN: justify"&gt;1. 내 컴퓨터 등록정보-&amp;gt;고급-&amp;gt;환경변수 에 &amp;nbsp;_NT_SYMBOL_PATH 등록합니다. &lt;/P&gt;&lt;P style="TEXT-ALIGN: justify"&gt;&lt;IMG alt="" src="http://cfs4.tistory.com/upload_control/download.blog?fhandle=YmxvZzc0OTQ2QGZzNC50aXN0b3J5LmNvbTovYXR0YWNoLzExLzExNjgucG5n"&gt;&lt;SPAN style="FONT-FAMILY: 돋움; FONT-SIZE: 9pt"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;2. 변수값에 %systemroot%\Symbol;D:\Symbol; 추가합니다. &lt;/P&gt;&lt;P&gt;3. 닥터왓슨을 다음과 같이 실행시켜 기본 디버거로 등록합니다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;drwtsn32.exe -i &lt;/P&gt;&lt;P&gt;4. 릴리즈버전의 링크옵션에 "Generate debug info"를 체크합니다. &lt;/P&gt;&lt;P&gt;&lt;IMG alt="" src="http://cfs5.tistory.com/upload_control/download.blog?fhandle=YmxvZzc0OTQ2QGZzNS50aXN0b3J5LmNvbTovYXR0YWNoLzEwLzEwNzAucG5n"&gt; &lt;/P&gt;&lt;P&gt;5. 컴파일 하여 생성된 *.pdb 파일을 심볼 폴더로 복사합니다. &amp;nbsp;&lt;/P&gt;&lt;P&gt;6. 릴리즈버전을 실행시켜 오류 발생 시험합니다. &lt;IMG alt="" src="http://cfs6.tistory.com/upload_control/download.blog?fhandle=YmxvZzc0OTQ2QGZzNi50aXN0b3J5LmNvbTovYXR0YWNoLzExLzExNjMucG5n"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="COLOR: #1f497d; FONT-SIZE: 12pt"&gt;&lt;STRONG&gt;오류가 발생 후&amp;nbsp; 오류 함수와 내용이 무엇인지 알아보기 &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;drwtsn32.log 파일 일부분 &lt;/P&gt;&lt;DIV&gt;&lt;TABLE style="BORDER-COLLAPSE: collapse; BACKGROUND: #fafafa" border=0&gt;&lt;COLGROUP&gt;&lt;COL style="WIDTH: 638px"&gt;&lt;/COLGROUP&gt;&lt;TBODY vAlign=top&gt;&lt;TR&gt;&lt;TD style="BORDER-BOTTOM: #4f81bd 0.5pt solid; PADDING-BOTTOM: 8px; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: #4f81bd 0.5pt solid; PADDING-TOP: 8px" vAlign=center&gt;&lt;P&gt;응용 프로그램 예외 발생: &lt;/P&gt;&lt;P&gt;응용 프로그램: (pid=1224) &lt;/P&gt;&lt;P&gt;날짜: 2004-05-21 @ 23:30:20.968 &lt;/P&gt;&lt;P&gt;예외 번호: c0000005 (액세스 위반) &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;함수: fnc_1 &lt;/P&gt;&lt;P&gt;00401005 b9e8030000 mov ecx,0x3e8 &lt;/P&gt;&lt;P&gt;0040100a 33ff xor edi,edi &lt;/P&gt;&lt;P&gt;&lt;SPAN style="COLOR: #c0504d"&gt;오류 -&amp;gt; 0040100c f3ab rep stosd es:00000000=???????? &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;0040100e 5f pop edi &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;*----&amp;gt; 스택 역 추적 &amp;lt;----* &lt;/P&gt;&lt;P&gt;FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name &lt;/P&gt;&lt;P&gt;0012FF74 0040101A 000003E8 00401025 004010E4 00000001 !&lt;SPAN style="COLOR: #c0504d"&gt;fnc_1&lt;/SPAN&gt; (FPO: [1,0,1]) &lt;/P&gt;&lt;P&gt;0012FF7C 00401025 004010E4 00000001 00340C20 00340C58 !&lt;SPAN style="COLOR: #c0504d"&gt;fnc_2&lt;/SPAN&gt; (FPO: [0,0,0]) &lt;/P&gt;&lt;P&gt;0012FF80 004010E4 00000001 00340C20 00340C58 00000000 !main (FPO: [2,0,0]) &lt;/P&gt;&lt;P&gt;0012FFC0 77E61AF6 00000000 00000000 7FFDF000 C0000005 !mainCRTStartup &lt;/P&gt;&lt;P&gt;0012FFF0 00000000 00401030 00000000 000000C8 00000100 kernel32!OpenEventA &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;DIV&gt;&lt;TABLE style="BORDER-COLLAPSE: collapse; BACKGROUND: #4f81bd" border=0&gt;&lt;COLGROUP&gt;&lt;COL style="WIDTH: 638px"&gt;&lt;/COLGROUP&gt;&lt;TBODY vAlign=top&gt;&lt;TR&gt;&lt;TD style="BORDER-BOTTOM: #1f497d 0.5pt solid; BORDER-RIGHT-STYLE: none; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-LEFT-STYLE: none; BORDER-TOP: #1f497d 0.5pt solid"&gt;&lt;P&gt;&lt;SPAN style="COLOR: white; FONT-SIZE: 12pt"&gt;&lt;STRONG&gt;Visual C++ 를 기본 디버거로 다시 등록하는 레지스트리&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug] &lt;/P&gt;&lt;P&gt;"Auto"="0" &lt;/P&gt;&lt;P&gt;"Debugger"="\"E:\\Program Files\\Microsoft Visual Studio\\Common\\MSDev98\\Bin\\msdev.exe\" -p %ld -e %ld" &lt;/P&gt;&lt;P&gt;"UserDebuggerHotKey"=dword:00000000 &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-1946034535192211329?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/1946034535192211329/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/03/%EB%8B%A5%ED%84%B0%EC%99%93%EC%8A%A8-dr-watson-drwtsn32exe-%EC%82%AC%EC%9A%A9%EB%B2%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%98%A4%EB%A5%98.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/1946034535192211329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/1946034535192211329'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/03/%EB%8B%A5%ED%84%B0%EC%99%93%EC%8A%A8-dr-watson-drwtsn32exe-%EC%82%AC%EC%9A%A9%EB%B2%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%98%A4%EB%A5%98.html' title='닥터왓슨 (Dr. Watson, Drwtsn32.exe) 사용법 :: 프로그램 오류, 버그 해독개발자 팁, 강좌'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-4443650365221464821</id><published>2010-03-09T18:37:00.000+09:00</published><updated>2011-01-11T22:00:28.081+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WinDbg'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>WinDbg(덤프 분석) 설치 및 사용법</title><content type='html'>&lt;DIV style="FONT-FAMILY: 2186756_9; FONT-SIZE: 9pt" class=view&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;WinDbg는 덤프를 분석할때 사용되는 툴이다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;즉 커널덤프라던지, 전체 덤프 파일을 읽어서 어디가 잘못 되었는지, 어디가 문제였는지 확인할때 쓰인다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;다운로드는 MS에서 직접 다운을 받으면 되고,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;주기적으로 버전이 업데이트 되서 나오니... 최신 버전을 다운 받을수 있다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;A class=con_link href="http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx" target=_blank _cssquery_UID="14"&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;자신의 OS 환경에 맞는 버전을 설치하자.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;설치가 완료 되면 아래와 같이 WinDbg를 실행 할수 있게 된다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;&lt;IMG style="CURSOR: pointer" onclick="popview(this, '90000003_000000000000001BF5F113F2')" src="http://postfiles11.naver.net/20090915_106/ojini21c_12529734760279KXHX_jpg/drw-1_ojini21c.jpg?type=w2" width=685 height=336&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;이제 환경 설정을 진행 하자.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;우선 WinDbg를 실행 시키고 [File]-[Symbol File Path]를 실행 한다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;&lt;IMG style="CURSOR: pointer" onclick="popview(this, '90000003_000000000000001BF5F113F2')" src="http://postfiles15.naver.net/20090915_158/ojini21c_1252974160508S3J1y_jpg/drw-2_ojini21c.jpg?type=w2" width=237 height=263&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;Symbol File Path에 "&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols" 를 입력 한다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;&lt;IMG style="CURSOR: pointer" onclick="popview(this, '90000003_000000000000001BF5F113F2')" src="http://postfiles12.naver.net/20090915_203/ojini21c_125297423468966HHs_jpg/drw-3_ojini21c.jpg?type=w2" width=563 height=204&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;자~ 이제 기본적인 셋팅은 끝났다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;그외에 [Image File Path]을 설정 할수 있는데 OS의 이미지 경로(OS CD의 i386 폴더)을 선택 해도 되고 안해도 된다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;이제 덤프파일을 가져오자!!!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;덤프 파일은 블루스크린 및 컴퓨터에 오류가 발생 했을때 생성되며, 만약 생성이 안되어 있다면....&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;아래 그림과 같이 [내컴퓨터 속성]-[고급]-[시작및 복구 설정] 에 붉은 박스 내용처럼 되어 있는지 확인 하자&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;&lt;IMG style="CURSOR: pointer" onclick="popview(this, '90000003_000000000000001BF5F113F2')" src="http://postfiles12.naver.net/20090915_11/ojini21c_1252974459107Yckun_jpg/drw-4_ojini21c.jpg?type=w2" width=447 height=451&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;여기서 커널 메모리, 전체 메모리, 작은 메모리 방식은 어느정도의 자료를 남길것인가로 생각 하면 된다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;작은 메모리는 무엇 때문에 문제가 되었는지는 확인 할수 있으나, 왜 문제가 발생했는지 확인하기 어렵다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;저장 경로는 %SystemRoot% =&amp;gt; C:\Windows\ 폴더 이다.(Windows가 C드라이버에 설치 되어있을 경우)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;블루스크린이 발생 할 경우, 또는 심각한 오류에서 복구가 될 경우 덤프파일이 생성 되구&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;해당 덤프파일을 읽어와서 분석을 해보자!!!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;우선 [File]-[Open Crash Dump]을 실행해서 MEMORY.DMP 파일을 불러온다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;&lt;IMG style="CURSOR: pointer" onclick="popview(this, '90000003_000000000000001BF5F113F2')" src="http://postfiles15.naver.net/20090915_78/ojini21c_1252974779243j3Vze_jpg/drw-5_ojini21c.jpg?type=w2" width=656 height=389&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;자 그럼 해당 MEMORY.DMP에서 오류 사인을 분석 하게 된다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;우선 아래 덤프 파일은 "ntkrpamp.exe" 파일에서 문제가 발생 한것으로 보인다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;좀더 자세히 알고 싶으면 &lt;FONT color=#0075c8&gt;&lt;STRONG&gt;!analyze -v&lt;/STRONG&gt;&lt;/FONT&gt; 를 클릭 또는 kb&amp;gt; 에 !analyze -v 을 입력뒤 엔터를 친다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;&lt;IMG style="CURSOR: pointer" onclick="popview(this, '90000003_000000000000001BF5F113F2')" src="http://postfiles15.naver.net/20090915_270/ojini21c_1252975065266qH2Ig_jpg/drw-6_ojini21c.jpg?type=w2" width=740 height=389&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;이제 좀더 정확한 자료들이 표시가 되는데 이미지는 생략 하도록 하겠다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;해당 파일이 누구 모듈인지(개발자가 여러명일때), 또한 인터넷을 통해 해당 파일이 어떤 역할을 하는 파일인지 확인후&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;담당 개발자에게 해당 덤프파일을 주면 처리 할것이다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;만약 자기 자신이 개발한 프로그램에서 이런 증상이 발견 된다면, 문제가 되는 변수, 함수등을 디버거 모드로 컴파일 해가면서&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 돋움"&gt;잘못된 부분을 찾아야겠지....^^a &lt;DIV class=autosourcing-stub&gt;&lt;P style="PADDING-BOTTOM: 0px; FONT-STYLE: normal; MARGIN: 11px 0px 7px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: Dotum; FONT-SIZE: 12px; FONT-WEIGHT: normal; PADDING-TOP: 0px"&gt;&lt;STRONG style="PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 7px; PADDING-TOP: 0px"&gt;[출처]&lt;/STRONG&gt; &lt;A href="http://blog.naver.com/ojini21c/120090334194" target=_blank&gt;WinDbg(덤프 분석) 설치 및 사용법&lt;/A&gt;&lt;SPAN style="PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 7px; PADDING-TOP: 0px"&gt;|&lt;/SPAN&gt;&lt;STRONG style="PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 7px; PADDING-TOP: 0px"&gt;작성자&lt;/STRONG&gt; &lt;A href="http://blog.naver.com/ojini21c" target=_blank&gt;뚫어뽕&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-4443650365221464821?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/4443650365221464821/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/03/windbg%EB%8D%A4%ED%94%84-%EB%B6%84%EC%84%9D-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%82%AC%EC%9A%A9%EB%B2%95.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/4443650365221464821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/4443650365221464821'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/03/windbg%EB%8D%A4%ED%94%84-%EB%B6%84%EC%84%9D-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%82%AC%EC%9A%A9%EB%B2%95.html' title='WinDbg(덤프 분석) 설치 및 사용법'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-1112286284417524639</id><published>2010-03-09T18:09:00.000+09:00</published><updated>2011-01-11T22:00:27.218+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WinDbg'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>WinDbg를 사용하여 process dump 생성</title><content type='html'>&lt;DIV&gt;Process 의 crash, hang 덤프를 수집하기 위해 Debug Diag 또는 adplus.vbs 를 흔히 사용하고 있습니다. 하지만 간혹 프로세스 crash 가 발생하였음에도 불구하고 터미널 세션에서 crash dump 를 수집하지 못하는 경우가 있었습니다. 이런 경우 WinDbg 를 통해서 덤프를 내려받을 수 있습니다. WinDbg 를 사용한 덤프 수집 방법에 대해서 아래와 같이 정리하였습니다. &lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;1. 테스트를 위해 계산기(calc.exe) 프로그램을 실행합니다.&lt;/DIV&gt;&lt;DIV&gt;2. WinDbg 실행 - File - Attach to a Process - calc.exe 해당 PID 선택&lt;/DIV&gt;&lt;DIV&gt;&lt;TABLE style="DISPLAY: inline; BORDER-COLLAPSE: collapse"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;A href="http://cfile4.uf.tistory.com/original/124B8C1D4A8A05A86E5F2C" rel=lightbox target=_blank&gt;&lt;IMG alt="" src="http://cfile4.uf.tistory.com/image/124B8C1D4A8A05A86E5F2C" width=650 height=489&gt;&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;3. 대상 프로세스(Debuggee)가 정상적으로 Debugger Tool 에 Attach 되면 'g' 명령을 수행하여 Debuggee 가 제어권을 가지도록 넘겨 줍니다.&lt;/DIV&gt;&lt;DIV&gt;&lt;TABLE style="DISPLAY: inline; BORDER-COLLAPSE: collapse"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;A href="http://cfile5.uf.tistory.com/original/1653E1104A8A068B99B890" rel=lightbox target=_blank&gt;&lt;IMG alt="" src="http://cfile5.uf.tistory.com/image/1653E1104A8A068B99B890" width=622 height=134&gt;&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;4. calc.exe 프로세스를 강제 종료합니다. 제어권이 다시 디버거로 돌아옵니다.&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV style="BORDER-BOTTOM: rgb(159,211,49) 1px solid; BORDER-LEFT: rgb(159,211,49) 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(231,253,181); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(159,211,49) 1px solid; BORDER-RIGHT: rgb(159,211,49) 1px solid; PADDING-TOP: 10px" class=txc-textbox&gt;&lt;DIV&gt;eax=00000000 ebx=00000000 ecx=7c7d0000 edx=7c9ae120 esi=7c93de6e edi=00000000&lt;/DIV&gt;&lt;DIV&gt;eip=7c93e514 esp=0007fde8 ebp=0007fee4 iopl=0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; nv up ei pl zr na pe nc&lt;/DIV&gt;&lt;DIV&gt;cs=001b &amp;nbsp;ss=0023 &amp;nbsp;ds=0023 &amp;nbsp;es=0023 &amp;nbsp;fs=003b &amp;nbsp;gs=0000 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; efl=00000246&lt;/DIV&gt;&lt;DIV&gt;ntdll!KiFastSystemCallRet:&lt;/DIV&gt;&lt;DIV&gt;7c93e514 c3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;5. .dump 명령을 수행하여 메모리 덤프 파일을 내려 받습니다.&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV style="BORDER-BOTTOM: rgb(254,137,67) 1px solid; BORDER-LEFT: rgb(254,137,67) 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(254,222,199); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(254,137,67) 1px solid; BORDER-RIGHT: rgb(254,137,67) 1px solid; PADDING-TOP: 10px" class=txc-textbox&gt;&lt;DIV&gt;&lt;DIV&gt;0:000&amp;gt; &lt;B&gt;.dump /f d:\calc_crash.dmp&lt;/B&gt;&lt;/DIV&gt;&lt;DIV&gt;Creating d:\calc_crash.dmp - mini user dump&lt;/DIV&gt;&lt;DIV&gt;Dump successfully written&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;※ /f : Creates a complete memory dump, /o : overwrites an existing dump file &amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;B&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;B&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;B&gt;[참고자료]&lt;/B&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;.dump Create Dump File)&lt;/DIV&gt;&lt;DIV&gt;&lt;A title="[http://msdn.microsoft.com/en-us/library/cc266761.aspx]로 이동합니다." href="http://msdn.microsoft.com/en-us/library/cc266761.aspx" target=_blank&gt;&lt;FONT class=Apple-style-span color=#193da9&gt;http://msdn.microsoft.com/en-us/library/cc266761.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-1112286284417524639?l=oneshot-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oneshot-textcube.blogspot.com/feeds/1112286284417524639/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/03/windbg%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-process-dump-%EC%83%9D%EC%84%B1.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/1112286284417524639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/845219309987183729/posts/default/1112286284417524639'/><link rel='alternate' type='text/html' href='http://oneshot-textcube.blogspot.com/2010/03/windbg%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-process-dump-%EC%83%9D%EC%84%B1.html' title='WinDbg를 사용하여 process dump 생성'/><author><name>oneshot</name><uri>http://www.blogger.com/profile/05909345938658806360</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-845219309987183729.post-6618977968002369756</id><published>2010-03-09T18:07:00.000+09:00</published><updated>2011-01-11T22:00:26.418+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WinDbg'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>Kernel Stack Overflow-Bugcheck Code: 0x7f(0x8, x, y, n) DUMP 분석해 보기 WinDbg</title><content type='html'>안녕하세요 갱주니입니다. &lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;오늘은 할당된 Kernelstack 을 초과 사용하여 BSOD(Bugcheck Code: 0x7f(0x8, x, y, n)) 상황에 대해서 알아보겠습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;버그 체크 코드가 발생한 상황이 발생하는 경우는 다음과 같습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#ff0000&gt;[커널 스택 오버플로우는 스레드별로 12Kbytes 정도로할당되는 제한된 시스템 리소스인 커널 스택영역을 초과하여 사용할 때 발생됩니다]&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#009e25&gt;즉, KernelStack OverFlow 가 발생한 경우에는 단일 모듈(함수)내에서 가장 많은 스택을 사용한 모듈의 코드 수정이 필요합니다.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 덤프를 간단하게 분석해 보겠습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;0: kd&amp;gt; kf 100&lt;br /&gt;&amp;nbsp; Memory&amp;nbsp; ChildEBP RetAddr&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ebee3ffc 804de605 hal!KeReleaseQueuedSpinLock+0x10&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 20 ebee401c f769b89b nt!ExReleaseResourceLite+0x8d&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; c ebee4028 f769d3a9 Ntfs!NtfsReleaseFcb+0x4e&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 18 ebee4040 f769b497 Ntfs!NtfsReleaseAllResources+0x62&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 18 ebee4058 f769b6e6 Ntfs!NtfsCleanupIrpContext+0x23&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 18 ebee4070 f76c0cd3 Ntfs!NtfsCompleteRequest+0x35&lt;br /&gt;&lt;STRONG&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 210 ebee4280 f76c0d83 Ntfs!NtfsCommonCleanup+0x2601&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 178 ebee43f8 804e33d9 Ntfs!NtfsFsdCleanup+0xcf&lt;br /&gt;&lt;/STRONG&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 10 ebee4408 f7743bbf nt!IopfCallDriver+0x31&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 10 ebee4418 804e33d9 sr!SrCleanup+0xb3&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 10 ebee4428 ec631f92 nt!IopfCallDriver+0x31&lt;br /&gt;WARNING: Stack unwind information not available. Following frames may be wrong.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 1c ebee4444 ec62de51 AhnFlt2K+0x4f92&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 18 ebee445c 804e33d9 AhnFlt2K+0xe51&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 10 ebee446c 8057e627 nt!IopfCallDriver+0x31&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 30 ebee449c 80570943 nt!IopCloseFile+0x26b&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 30 ebee44cc 80570a96 nt!ObpDecrementHandleCount+0x11b&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 28 ebee44f4 805709bc nt!ObpCloseHandleTableEntry+0x14d&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 48 ebee453c 80570a06 nt!ObpCloseHandle+0x87&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 14 ebee4550 804df99f nt!NtClose+0x1d&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 ebee4550 804e5487 nt!KiFastCallEntry+0xfc&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 7c ebee45cc f7d86552 nt!ZwClose+0x11&lt;br /&gt;&lt;STRONG&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 81c ebee4de8 f7d8661d MyDrv!OpenClose+0xc2 [e:\test\mydrv\mydrv.c @ 264]&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; fb4 ebee5d9c f7d86648 MyDrv!UseStack2+0x1d [e:\test\mydrv\mydrv.c @ 286]&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; fb0 ebee6d4c f7d86678 MyDrv!UseStack1+0x18 [e:\test\mydrv\mydrv.c @ 293]&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; fb0 ebee7cfc f7d871c2 MyDrv!BugCheck7F+0x18 [e:\test\mydrv\mydrv.c @ 300]&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; f44 ebee8c40 804e33d9 MyDrv!MyDrvDeviceControl+0x312 [e:\test\mydrv\mydrv.c @ 460]&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 10 ebee8c50 8057150b nt!IopfCallDriver+0x31&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 14 ebee8c64 80582fb1 nt!IopSynchronousServiceTail+0x60&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 9c ebee8d00 8058909e nt!IopXxxControlFile+0x5ef&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 34 ebee8d34 804df99f nt!NtDeviceIoControlFile+0x2a&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 ebee8d34 7c93eb94 nt!KiFastCallEntry+0xfc&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#009e25&gt;WinDBG 명령어중 kb 또는 kv 대신에 kf를 사용했습니다. ChildEBP 의 변화량을 모듈별로 보는 것입니다. 일일이 손으로 계산해도 상관없으나 kf 명령어를 사용하면 삽질이 필요없습니다&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#3a32c3&gt;맨 왼쪽에 보이는 숫자들이 각 함수가 소진한 스택의 량입니다.&lt;br /&gt;한 눈에 보면 MyDrv 가 문제가 있는 녀석이라고 느껴집니다.&lt;br /&gt;사용한 양을 계산해 보면 &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;0: kd&amp;gt; ? 81c + fb4 + fb0 + fb0 + f44&lt;br /&gt;Evaluate expression: 18036 = 00004674&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;우와~~~ 자그마치 18KB 를 사용하고 있습니다.&lt;br /&gt;도대체 뭘 하느라고 스택을 저렇게 사용할까요? 함수 이름도 범상치 않군여... 한번 봅시다.&lt;/P&gt;&lt;P&gt;void UseStack1(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;char szBuf[4000];&lt;/P&gt;&lt;P&gt;&amp;nbsp;UseStack2();&lt;/P&gt;&lt;P&gt;아... 네... 지역변수를 4000 바이트 사용했네요. 이런일 없어야 겠습니다.&lt;br /&gt;이 녀석이야 예제라지만 이름이 UseStack 도 아니면서 저렇게 사용하는 경우.... 실제 상황에서 종종 봤습니다.&amp;nbsp; -_-;;;&lt;br /&gt;4000 바이트 까지야 없겠지만 100 바이트 이상은 많았습니다. 하나의 함수가 사용하는 지역변수 크기의 합이 100 바이트 넘어가면 문제 있다고 보셔야 합니다.&lt;br /&gt;그런 관점에서 Ntfs 저 녀석도 범인으로 봐야 합니다. 스택 사용량이 가장 큰 함수 두개만 더해봐도&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;0: kd&amp;gt; ? 210 + 178&lt;br /&gt;Evaluate expression: 904 = 00000388&lt;/P&gt;&lt;P&gt;거의 1KB 가까이 사용하고 있습니다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#3a32c3&gt;MS에서 만든 드라이버 모듈도 커널 스택메모리를 많이 사용하네요 ^^;;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#3a32c3&gt;Kernel stack overflow 는 파일 필터 분야에서 늘 있어왔던 문제이고 필터들이 워낙 많기 때문에 우리 드라이버가 사용할 공간이 늘 협소하다고 가정해야 합니다. 함수 하나당 100 바이트 이하로 하는 것을 권장합니다.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#009e25&gt;마지막으로 !analyze -v 를 이용해서 커널 스택 오버플로우를 덤프를 분석하면 마지막 드라이버 모듈에서 호출한 스택정보만 보여주는 경우가 있습니다. 그렇기 때문에 커널 스택 오버플로우(Bugcheck Code: 0x7f(0x8, x, y, n))에서는 꼭 kf 명령어를 이용해서 커널 스택의 전체 메모리 사용량을 확인해 봐야 합니다.^^b&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;출처 : 다년간의 프로그램밍 경험 및 greemate님 자료로 부터(greemate.tistory.com)&lt;/P&gt;&lt;DIV class=autosourcing-stub&gt;&lt;P style="PADDING-BOTTOM: 0px; FONT-STYLE: normal; MARGIN: 11px 0px 7px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: Dotum; FONT-SIZE: 12px; FONT-WEIGHT: normal; PADDING-TOP: 0px"&gt;&lt;STRONG style="PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 7px; PADDING-TOP: 0px"&gt;[출처]&lt;/STRONG&gt; &lt;A href="http://blog.naver.com/process3/20044482842" target=_blank&gt;Kernel Stack Overflow-Bugcheck Code: 0x7f(0x8, x, y, n) DUMP 분석해 보기 WinDbg&lt;/A&gt;&lt;SPAN style="PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 7px; PADDING-TOP: 0px"&gt;|&lt;/SPAN&gt;&lt;STRONG style="PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 7px; PADDING-TOP: 0px"&gt;작성자&lt;/STRONG&gt; &lt;A href="http://blog.naver.com/process3" target=_blank&gt;갱주니&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/845219309987183729-6618977968002369756?l=onesh
