<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://pimg.daum-img.net/whsnake/css/atom.css?ver=1.0" type="text/css"?>
<feed xmlns="http://www.w3.org/2005/Atom" version="1.0" >
  <title>프로그래밍</title>
  <link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle"/>
  <link rel="self" type="application/atom+xml" href="http://blog.daum.net/xml/atom/sunnle"/>
  <rights>멋진남자</rights>
  <author>
    <name>멋진남자</name>
    <uri>http://blog.daum.net/sunnle</uri>
  </author>
  <generator uri="http://blog.daum.net" version="1.0">Daum blog (blogmaster@daum.net)</generator>
  <id>tag:blog.daum.net,2009:sunnle</id>
  <updated>2009-11-17T23:12:49Z</updated>

  		<entry>
	    <title>JSP 1강</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121998"/>
		<id>tag:blog.daum.net,2009:sunnle.8121998</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-11-17T23:12:49Z</updated>
	    <published>2009-11-17T23:12:49Z</published>
	    <content type="html">
	    	&lt;P&gt;1. 웹 프로그래밍의 동작 원리&lt;/P&gt;
&lt;P&gt;&amp;nbsp;1.1.&amp;nbsp;요청과 응답의 연결되지 않은 연속&lt;/P&gt;
&lt;P&gt;&amp;nbsp;1.2. URL 을 이용해 서버로 요청을 하고 받은 요청을 서버에서 처리해 요청한 곳에 응답으로 데이터를 전송하는 것&lt;/P&gt;
&lt;P&gt;&amp;nbsp;1.3. CS 프로그램 또는 일반 어플리케이션과 다르게 연결된 상태(스트리밍 같은 상태)가 아니라 요청도 한번에 모아서 보내고 응답도 한번에 모아서 오는 원리로 그 떄 그 때마다 연결해 보내면 끊고 받으면 끊는&amp;nbsp;미연결 원리&lt;/P&gt;
&lt;P&gt;2. 웹 언어&lt;/P&gt;
&lt;P&gt;&amp;nbsp;2.1. HTML 은 보여주는 역할의 언어 (VIEW 역할 담당)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;2.2. 일반적인 웹 언어는&amp;nbsp;HTML + 연산 언어 (VIEW +&amp;nbsp;연산)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;2.3. 웹이라는 구조적 제한 환경 때문에 연산언어 부분이 제한되는 게 많음&lt;/P&gt;
&lt;P&gt;&amp;nbsp;2.4.&amp;nbsp;JSP 는 Java 라는 서블릿 (연산 언어)의 존재로 일반적인 웹 언어보다 가능한 기능이 더 많음&lt;/P&gt;
&lt;P&gt;3. 웹서버&lt;/P&gt;
&lt;P&gt;&amp;nbsp;3.1. 웹서버는 웹이라고 부르는 환경에서 요청이 발생했을 때 해당 요청에 대해 응답하는 어플리케이션&lt;/P&gt;
&lt;P&gt;&amp;nbsp;3.2. WAS(Web Application Server) - WebLogic, Aphache, Websphere, IIS...&lt;/P&gt;
&lt;P&gt;4. 톰캣&lt;/P&gt;
&lt;P&gt;&amp;nbsp;4.1. 톰캣은 웹서버에서 서블릿과 같은 Java 언어에 대한 해석과 실행을 담당하기 위한 서버 도우미&lt;/P&gt;
&lt;P&gt;&amp;nbsp;4.2. 아파치 톰캣이라고 부르는 이유는 아파치는 웹서버로서 HTML과 같은 웹 요청에 대한 응답을 담당하지만 Java 에 대한 해석 및 처리 능력이 없어 톰캣의 존재로 가능해 지기 때문에 흔히 같이 쓰임&lt;/P&gt;
&lt;P&gt;5. 서블릿을 이용해서 웹브라우저에 메시지 적는 미션&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>Jakarta Struts 강좌 1</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121997"/>
		<id>tag:blog.daum.net,2009:sunnle.8121997</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-11-05T01:01:35Z</updated>
	    <published>2009-11-05T01:01:35Z</published>
	    <content type="html">
	    	&lt;P&gt;원문 : &lt;A href=&quot;http://wiki.javajigi.net/display/FRAMEWORK/Jakarta+Struts+Getting+Started&quot;&gt;http://wiki.javajigi.net/display/FRAMEWORK/Jakarta+Struts+Getting+Started&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;&lt;A name=JakartaStrutsGettingStarted-JakartaStruts%EA%B0%95%EC%A2%8C1&gt;&lt;/A&gt;Jakarta Struts 강좌 1&lt;/H1&gt;
&lt;P&gt;&lt;B&gt;Summary&lt;/B&gt; : 새로운 개발 방식으로 대두되고 있는 Model 2개발방식을 지원하는 대표적인 프레임워크인 Jakarta Struts에 대하여 살펴본다. Jakarta Struts의 내용이 워낙 방대하기 때문에 이번 강좌는 Jakarta Struts의 설치부터 시작하여 Jakarta Struts에 대한 간단한 예제를 통하여 Jakarta Struts이 무엇인지에 대하여 간략하게 살펴본다. 이번 강좌의 목적은 Jakarta Struts의 설치를 이해하고, 간단한 예제를 통하여 Jakarta Struts가 어떻게 구현되는지 이해하는데 있다.&lt;/P&gt;
&lt;H2&gt;&lt;A name=JakartaStrutsGettingStarted-JakartaStruts%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&gt;&lt;/A&gt;&lt;B&gt;Jakarta Struts 설치하기&lt;/B&gt;&lt;/H2&gt;
&lt;P&gt;웹의 초창기에는 HTML만을 이용하여 다양한 페이지를 표현하는 것이 가능했다. 사이트 규모가 현재보다 작았으며, 웹으로 동적인 페이지를 구현하려는 요구사항도 많지 않았다. 점차 웹이 발전하면서 동적인 페이지를 요구하게 되었으며, 그와 발맞추어 JSP, ASP등을 이용하여 동적인 페이지의 개발이 가능해졌다.&lt;/P&gt;
&lt;P&gt;웹 환경에서 개발 경험이 많지 않았던 개발자들은 JSP, ASP내에서 대부분의 로직을 구현하는 Model 1방식을 이용하여 개발하는 것이 국내 웹 개발의 주가 되었다. 아직까지도 웹 개발에 가장 많이 사용되는 개발 방식은 Model 1방식이다. 그러나 점차 웹에서 많은 기능을 구현하기를 클라이언트들이 요구하고 있으며, 대규모의 사이트의 프로젝트들이 Model 1만으로 해결하기 어려운 경우가 많아지게 되었다.&lt;/P&gt;
&lt;P&gt;따라서 Model 1의 대안으로 나온 개발방식이 Model 2개발방식이다. 그러나 Model 2방식은 개념을 잡고 구현하기가 Model 1방식보다 더 어려우며, Model 2방식으로 처음 개발하는 독자들은 더 많은 시간을 요하게 되었다. 따라서 Model 2방식을 좀 더 적은 시간에 효율적으로 개발이 가능하도록 하기 위하여 프레임워크화하는 프로젝트가 진행되게 되었다. 그 중에서 가장 주목을 받고 있는 것이 Jakarta 프로젝트 중의 Struts프레임워크이다.&lt;/P&gt;
&lt;P&gt;이번 강좌에서는 Struts프레임워크를 설치하는 과정과 간단한 예제를 통하여 Struts프레임워크가 구현되는 방법에 대하여 살펴보는데 있다.&lt;/P&gt;
&lt;P&gt;Struts내부적으로 각각의 예제가 구현되는 원리는 계속되는 강좌를 통하여 이해하면 되기 때문에 처음부터 너무 많은 것을 이해하려고 노력하지 않아도 된다.&lt;/P&gt;
&lt;P&gt;이번 강좌의 간단한 예제를 실제로 테스트해보면서 &quot;기존과 다른 웹 개발 방법이구나h2.&quot;하고 느끼면 될 것으로 생각한다. 개발자들이 Struts에 대하여 호기심을 가질 수 있도록 만드는 것이 이번 강좌의 가장 큰 목적이다. 서두가 너무 길었다. Struts 설치 방법 및 예제를 만들어 보자.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;1. Struts베타버전이 나온지 너무 오래되었기 때문에 이번 예제에서 사용할 Struts버전은 야간빌드(Nightly Builds)버전을 사용할 것이다. &lt;A href=&quot;http://jakarta.apache.org/builds/jakarta-struts/nightly/&quot; rel=nofollow&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;http://jakarta.apache.org/builds/jakarta-struts/nightly/&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt; 에 접근하여 가장 최근에 빌드한 버전을 다운 받는다. 강좌를 진행하고 있는 현재 가장 최근 버전은 jakarta-struts-20021217.zip이다. 예상보다 상당히 큼을 알 수 있다. &lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;2. 다운 받은 야간 빌드파일을 개발자들이 원하는 위치에 압축을 푼다. 압축을 풀면 Struts에서 사용하는 jar파일을 포함하고 있는 lib디렉토리와 다양한 웹 애플리케이션을 포함하고 있는 webapps디렉토리가 있음을 알 수 있다. webapps에는 총 8개의 war파일이 있다. 각각의 파일은 Struts를 공부하는데 많은 도움이 되기 때문에 Struts를 공부하는 개발자들은 이 8개를 분석해도 많은 도움이 될 것이다. 그 중에서 struts-documentation.war는 Struts관련한 모든 문서(API포함)를 포함하고 있기 때문에 꼭 살펴보는 것이 좋을 것으로 생각된다. &lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;3. Struts는 애플리케이션 서버 위에서 사용할 수 있기 때문에 개발자들이 테스트하고자 하는 서버가 설치되어 있어야 한다. 이번 강좌에서는 Tomcat서버를 이용할 것이다. Tomcat의 버전은 가능하면 3.3이상에서 테스트하는 것이 좋다. 이유는 XML파서의 버전 때문이다. Tomcat서버의 설치에 관한 문서는 웹에 많기 때문에 이번 강좌에서는 제외시킨다. Tomcat 3.3 이상이 설치되어 있다는 가정하에 이번 강좌를 계속하여 진행한다. 필자가 이번 강좌에 사용한 Tomcat 버전은 4.6이다. &lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;4. Struts예제를 테스트해볼 새로운 애플리케이션을 생성한다. 새로운 애플리케이션을 생성하는 방법은 &quot;Tomcat설치 디렉토리 &gt;&gt; webapps&quot;아래에 자신이 만들고자 하는 애플리케이션 이름을 가진 디렉토리를 생성한다. 이번 강좌에서 사용할 애플리케이션은 zigistruts로 진행한다. &lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;5. zigistruts아래에 WEB-INF를 생성한다. WEB-INF디렉토리 밑에 lib와 classes디렉토리를 생성한다. 또한 필자는 소스와 클래스파일을 분리하기 위하여 WEB-INF아래에 src디렉토리를 생성한다. 소스와 클래스 파일을 분리하여 관리하는데 익숙하지 않은 개발자들은 IDE를 이용하면 쉽게 할 수 있다. 필자는 Eclipse를 이용하였다. Eclipse에 대한 자세한 내용은 &lt;A href=&quot;http://www.eclipse.org/&quot; rel=nofollow&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;http://www.eclipse.org&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;를 참조하기 바란다. &lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;6. 이번 강좌에서 사용할 JSP파일을 관리하기 위하여 zigistruts디렉토리 밑에 struts1 디렉토리를 생성한다. 지금까지 생성한 디렉토리 구조를 살펴보면 다음과 같다. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;
&lt;DIV align=center&gt;&lt;IMG src=&quot;http://wiki.javajigi.net/download/attachments/71/struts_basicdirectory.jpg&quot; border=0&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;7. Tomcat설치디렉토리\webapps\ROOT\WEB-INF에서 빈 web.xml을 zigistruts\WEB-INF에 복사한다. &lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;8. 압축을 푼 Struts lib디렉토리 아래에 있는 모든 jar파일을 zigistruts\WEB-INF\lib에 복사한다. &lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;9. 압축을 푼 Struts lib디렉토리 아래에 확장자가 tld인 모든 파일을 zigistruts\WEB-INF에 복사한다. tld는 struts에서 제공하는 커스텀 태그를 이용하기 위한 것이다. 커스텀 태그에 익숙하지 않은 독자들은 JSP관련 책을 참고하기 바란다. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;*10. zigistruts\WEB-INF아래에 struts-config.xml의 이름을 가지는 XML파일을 생성한다. 이상으로 Struts를 테스트하기 위한 기본적인 환경은 모두 갖추어졌다. 지금까지 설치한 파일들을 채워가면서 Struts예제를 실행해보도록 하겠다. 지금까지 설치한 모든 파일들의 구조는 다음 그림과 같다. &lt;/P&gt;
&lt;P&gt;
&lt;DIV align=center&gt;&lt;IMG src=&quot;http://wiki.javajigi.net/download/attachments/71/struts_fulldirectory.jpg&quot; border=0&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;H2&gt;&lt;A name=JakartaStrutsGettingStarted-Struts%EC%BB%A4%EC%8A%A4%ED%85%80%ED%83%9C%EA%B7%B8%EB%A5%BC%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%ACJSP%EB%A7%8C%EB%93%A4%EA%B8%B0&gt;&lt;/A&gt;&lt;B&gt;Struts 커스텀 태그를 이용하여 JSP만들기&lt;/B&gt;&lt;/H2&gt;
&lt;P&gt;첫번째 예제는 Struts에서 제공하는 커스텀 태그를 이용하여 JSP페이지를 생성해보도록 하겠다. Struts의 커스템 태그를 사용하기 위해서 web.xml을 다음과 같이 설정한다. web.xml의 내용을 보면 알겠지만 모든 커스텀 태그를 사용하지 않고 기본적인 커스텀 태그만을 사용하였다. &lt;/P&gt;
&lt;DIV class=&quot;code panel&quot; style=&quot;BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px&quot;&gt;
&lt;DIV class=&quot;codeContent panelContent&quot;&gt;&lt;PRE class=code-java&gt;&lt;?xml version=&lt;SPAN class=code-quote&gt;&quot;1.0&quot;&lt;/SPAN&gt; encoding=&lt;SPAN class=code-quote&gt;&quot;UTF-8&quot;&lt;/SPAN&gt;?&gt;
&lt;!DOCTYPE web-app PUBLIC &lt;SPAN class=code-quote&gt;&quot;-&lt;SPAN class=code-comment&gt;//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;&lt;/SPAN&gt; &lt;SPAN class=code-quote&gt;&quot;http://java.sun.com/j2ee/dtds/web-app_2_3.dtd&quot;&lt;/SPAN&gt;&gt;
&lt;/SPAN&gt;&lt;web-app&gt;
	&lt;!-- Struts Tag Library Descriptors --&gt;
	&lt;taglib&gt;
    	&lt;taglib-uri&gt;/WEB-INF/struts-bean.tld&lt;/taglib-uri&gt;
	    &lt;taglib-location&gt;/WEB-INF/struts-bean.tld&lt;/taglib-location&gt;
	&lt;/taglib&gt;
	&lt;taglib&gt;
    	&lt;taglib-uri&gt;/WEB-INF/struts-html.tld&lt;/taglib-uri&gt;
	    &lt;taglib-location&gt;/WEB-INF/struts-html.tld&lt;/taglib-location&gt;
	&lt;/taglib&gt;
	&lt;taglib&gt;
    	&lt;taglib-uri&gt;/WEB-INF/struts-logic.tld&lt;/taglib-uri&gt;
	    &lt;taglib-location&gt;/WEB-INF/struts-logic.tld&lt;/taglib-location&gt;
	&lt;/taglib&gt;    
&lt;/web-app&gt;
&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;Struts의 커스텀 태그를 이용하는 간단한 JSP파일을 생성한다.&lt;/P&gt;
&lt;DIV class=&quot;code panel&quot; style=&quot;BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px&quot;&gt;
&lt;DIV class=&quot;codeContent panelContent&quot;&gt;&lt;PRE class=code-java&gt;&lt;%@ page language=&lt;SPAN class=code-quote&gt;&quot;java&quot;&lt;/SPAN&gt; %&gt;
&lt;%@ taglib uri=&lt;SPAN class=code-quote&gt;&quot;/WEB-INF/struts-bean.tld&quot;&lt;/SPAN&gt; prefix=&lt;SPAN class=code-quote&gt;&quot;bean&quot;&lt;/SPAN&gt; %&gt;
&lt;%@ taglib uri=&lt;SPAN class=code-quote&gt;&quot;/WEB-INF/struts-html.tld&quot;&lt;/SPAN&gt; prefix=&lt;SPAN class=code-quote&gt;&quot;html&quot;&lt;/SPAN&gt; %&gt;
&lt;%@ taglib uri=&lt;SPAN class=code-quote&gt;&quot;/WEB-INF/struts-logic.tld&quot;&lt;/SPAN&gt; prefix=&lt;SPAN class=code-quote&gt;&quot;logic&quot;&lt;/SPAN&gt; %&gt;

&lt;html:html&gt;
&lt;head&gt;
    &lt;title&gt;내가 만드는 첫번째 Struts application!&lt;/title&gt;
    &lt;html:base/&gt;
&lt;/head&gt;

&lt;body&gt;
이 페이지는 내가 만든 첫번째 Struts Application페이지이다.h2.!
&lt;/body&gt;
&lt;/html:html&gt;

&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;
&lt;DIV align=center&gt;&lt;IMG src=&quot;http://wiki.javajigi.net/download/attachments/71/struts_zigi1.jpg&quot; border=0&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;H2&gt;&lt;A name=JakartaStrutsGettingStarted-Struts%EC%9D%98ResourceBundle%EC%9D%84%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%ACJSP%EB%A9%94%EC%84%B8%EC%A7%80%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0&gt;&lt;/A&gt;&lt;B&gt;Struts의 Resource Bundle을 이용하여 JSP 메세지 처리하기&lt;/B&gt;&lt;/H2&gt;
&lt;P&gt;Struts는 Resource Bundle을 이용하여 JSP의 메세지를 쉽게 처리할 수 있다. Resource Bundle이란 자바에서 흔히 사용하는 Properties파일에 JSP의 메세지나 에러 메세지들을 처리하는 경우 손쉽게 사용이 가능하도록 하였다. 이번 예제는 Properties파일에 메세지를 저장한 후에 JSP에서 메세지를 사용할 수 있도록 하는 예제를 만들어본다.&lt;/P&gt;
&lt;P&gt;이 예제를 테스트해보기 위해서는 먼저 Properties파일을 생성해야 한다. 이번 강좌에서 사용한 Properties파일의 위치는 WEB-INF\classes\net\javajigi\tutorial을 기본 디렉토리로 한다. 이 디렉토리에 MessageResources.properties파일을 만든다.&lt;/P&gt;
&lt;P&gt;생성한 properties파일을 Struts가 사용하기 위해서 web.xml과 struts-config.xml을 다음과 같이 설정한다. &lt;/P&gt;
&lt;DIV class=&quot;code panel&quot; style=&quot;BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px&quot;&gt;
&lt;DIV class=&quot;codeContent panelContent&quot;&gt;&lt;PRE class=code-java&gt;&lt;?xml version=&lt;SPAN class=code-quote&gt;&quot;1.0&quot;&lt;/SPAN&gt; encoding=&lt;SPAN class=code-quote&gt;&quot;UTF-8&quot;&lt;/SPAN&gt;?&gt;
&lt;!DOCTYPE web-app PUBLIC 
    &lt;SPAN class=code-quote&gt;&quot;-&lt;SPAN class=code-comment&gt;//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;&lt;/SPAN&gt; 
&lt;/SPAN&gt;    &lt;SPAN class=code-quote&gt;&quot;http:&lt;SPAN class=code-comment&gt;//java.sun.com/j2ee/dtds/web-app_2_3.dtd&quot;&lt;/SPAN&gt;&gt;
&lt;/SPAN&gt;&lt;web-app&gt;
	&lt;!-- Action Servlet Configuration --&gt;
    &lt;servlet&gt;
        &lt;servlet-name&gt;action&lt;/servlet-name&gt;
        &lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;
       
	    &lt;!-- Resources bundle base class --&gt;
		&lt;init-param&gt;
            &lt;param-name&gt;application&lt;/param-name&gt;
            &lt;param-value&gt;net.javajigi.tutorial.MessageResources&lt;/param-value&gt;
	    &lt;/init-param&gt;
        
        &lt;init-param&gt;
            &lt;param-name&gt;config&lt;/param-name&gt;
            &lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;init-param&gt;
            &lt;param-name&gt;debug&lt;/param-name&gt;
            &lt;param-value&gt;3&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;init-param&gt;
            &lt;param-name&gt;detail&lt;/param-name&gt;
            &lt;param-value&gt;3&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
    &lt;/servlet&gt;
    
    &lt;!-- Action Servlet Mapping --&gt;
    &lt;servlet-mapping&gt;
        &lt;servlet-name&gt;action&lt;/servlet-name&gt;
        &lt;url-pattern&gt;*.&lt;SPAN class=code-keyword&gt;do&lt;/SPAN&gt;&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;

	&lt;!-- Struts Tag Library Descriptors --&gt;
	&lt;taglib&gt;
    	&lt;taglib-uri&gt;/WEB-INF/struts-bean.tld&lt;/taglib-uri&gt;
	    &lt;taglib-location&gt;/WEB-INF/struts-bean.tld&lt;/taglib-location&gt;
	&lt;/taglib&gt;
	&lt;taglib&gt;
    	&lt;taglib-uri&gt;/WEB-INF/struts-html.tld&lt;/taglib-uri&gt;
	    &lt;taglib-location&gt;/WEB-INF/struts-html.tld&lt;/taglib-location&gt;
	&lt;/taglib&gt;
	&lt;taglib&gt;
    	&lt;taglib-uri&gt;/WEB-INF/struts-logic.tld&lt;/taglib-uri&gt;
	    &lt;taglib-location&gt;/WEB-INF/struts-logic.tld&lt;/taglib-location&gt;
	&lt;/taglib&gt;    
&lt;/web-app&gt;
&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV class=&quot;code panel&quot; style=&quot;BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px&quot;&gt;
&lt;DIV class=&quot;codeContent panelContent&quot;&gt;&lt;PRE class=code-java&gt;&lt;?xml version=&lt;SPAN class=code-quote&gt;&quot;1.0&quot;&lt;/SPAN&gt; encoding=&lt;SPAN class=code-quote&gt;&quot;UTF-8&quot;&lt;/SPAN&gt;?&gt;
&lt;!DOCTYPE struts-config PUBLIC &lt;SPAN class=code-quote&gt;&quot;-&lt;SPAN class=code-comment&gt;//Apache Software Foundation//DTD Struts Configuration 1.1//EN&quot;&lt;/SPAN&gt; 
&lt;/SPAN&gt;                               &lt;SPAN class=code-quote&gt;&quot;http:&lt;SPAN class=code-comment&gt;//jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&quot;&lt;/SPAN&gt;&gt;
&lt;/SPAN&gt;&lt;struts-config&gt;
    &lt;data-sources /&gt;
    &lt;form-beans /&gt;
    &lt;global-exceptions /&gt;
    &lt;global-forwards /&gt;
    &lt;action-mappings /&gt;
    &lt;controller /&gt;
    &lt;message-resources parameter=&lt;SPAN class=code-quote&gt;&quot;net.javajigi.tutorial.MessageResources&quot;&lt;/SPAN&gt; /&gt;
&lt;/struts-config&gt;

&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;web.xml에 대해서는 대부분의 개발자들이 알 것으로 예상된다. 하지만 struts-config.xml에 대하여 생소한 개발자들이 많을 것으로 예상되어 간단하게 설명한다. struts-config.xml은 Struts프레임워크에서 사용하는 모든 설정 정보를 담고 있는 파일이라고 생각하면 된다. 그 이상에 대한 설명은 다음 강좌에 계속해서 다루도록 하겠다.&lt;/P&gt;
&lt;P&gt;MessageResources.properties에 다음과 같이 두개의 메세지를 생성한다.&lt;/P&gt;
&lt;P&gt;zigi2.title = 내가 만드는 첫번째 Struts application!&lt;/P&gt;
&lt;P&gt;zigi2.text1 = 이 페이지는 내가 만든 첫번째 Struts Application페이지이다.h2.!&lt;/P&gt;
&lt;P&gt;Properties파일이 그렇듯이 key = value 쌍으로 가진다. 위에서 생성한 두개의 메세지는 zigi1.jsp에서 title과 본문에서 사용한 메세지들을 담고 있다. Properties파일에 저장되어 있는 메세지를 JSP에서 사용하는 JSP를 생성해본다. &lt;/P&gt;
&lt;DIV class=&quot;code panel&quot; style=&quot;BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px&quot;&gt;
&lt;DIV class=&quot;codeContent panelContent&quot;&gt;&lt;PRE class=code-java&gt;&lt;%@ page language=&lt;SPAN class=code-quote&gt;&quot;java&quot;&lt;/SPAN&gt; %&gt;
&lt;%@ taglib uri=&lt;SPAN class=code-quote&gt;&quot;/WEB-INF/struts-bean.tld&quot;&lt;/SPAN&gt; prefix=&lt;SPAN class=code-quote&gt;&quot;bean&quot;&lt;/SPAN&gt; %&gt;
&lt;%@ taglib uri=&lt;SPAN class=code-quote&gt;&quot;/WEB-INF/struts-html.tld&quot;&lt;/SPAN&gt; prefix=&lt;SPAN class=code-quote&gt;&quot;html&quot;&lt;/SPAN&gt; %&gt;
&lt;%@ taglib uri=&lt;SPAN class=code-quote&gt;&quot;/WEB-INF/struts-logic.tld&quot;&lt;/SPAN&gt; prefix=&lt;SPAN class=code-quote&gt;&quot;logic&quot;&lt;/SPAN&gt; %&gt;

&lt;html:html locale=&lt;SPAN class=code-quote&gt;&quot;&lt;SPAN class=code-keyword&gt;true&lt;/SPAN&gt;&quot;&lt;/SPAN&gt;&gt; 
&lt;head&gt;
    &lt;title&gt;&lt;bean:message key=&lt;SPAN class=code-quote&gt;&quot;zigi2.title&quot;&lt;/SPAN&gt; /&gt;&lt;/title&gt;
    &lt;html:base/&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;bean:message key=&lt;SPAN class=code-quote&gt;&quot;zigi2.text1&quot;&lt;/SPAN&gt; /&gt;
&lt;/body&gt;
&lt;/html:html&gt;

&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;
&lt;DIV align=center&gt;&lt;IMG src=&quot;http://wiki.javajigi.net/download/attachments/71/struts_zigi2.jpg&quot; border=0&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;zigi2.jsp내부를 보면 message태그를 이용하여 Properties파일을 이용하고 있다. message태그의 키값을 통하여 Properties에서 메세지를 쉽게 가져올 수 있다. JSP나 에레 메세지를 Properties로 분리하는 장점은 계속되는 강좌를 통하여 확인할 수 있을 것이다. &lt;/P&gt;
&lt;H2&gt;&lt;A name=JakartaStrutsGettingStarted-Struts%EC%9D%98Controller%EA%B8%B0%EB%8A%A5%EC%9D%84%EC%9D%B4%EC%9A%A9%ED%95%98%EB%8A%94%EC%98%88%EC%A0%9C&gt;&lt;/A&gt;&lt;B&gt;Struts의 Controller기능을 이용하는 예제&lt;/B&gt;&lt;/H2&gt;
&lt;P&gt;지금까지는 Struts에서 제공하는 커스텀 태그를 이용하여 간단하게 JSP를 생성하는 예제와 Properties파일에서 메세지를 쉽게 얻어올 수 있는 방법에 대하여 살펴보았다. 이 부분은 Struts의 View에 해당하는 부분이라고 할 수 있다.&lt;/P&gt;
&lt;P&gt;이 절에서 다루는 내용은 Struts의 핵심적인 내용이라고 할 수 있는 Controller기능에 해당하는 예제를 살펴볼 것이다. 기존의 개발 방식과 달라 생소하게 생각하는 개발자들이 많을 것이다. 그리고 생성할 파일들이 기존 개발방식보다 많기 때문에 복잡하게 생각하는 개발자들이 많을 것으로 예상한다. 하지만 이번 강좌의 목적이 Struts에 대하여 간략하게 살펴보는 것이기 때문에 세부 항목에 대하여 이해하지 못해도 걱정하지 말기 바란다. 계속되는 강좌를 통하여 세부 항목에 대하여 살펴볼 것이다.&lt;/P&gt;
&lt;P&gt;각 예제에 대한 세부적인 설명 없이 예제소스와 결과화면을 통하여 Struts를 이용하여 개발되는 과정을 간략하게 살펴보자. 여기서 살펴볼 예제는 웹 개발시 많이 개발되는 로그인 과정을 Struts를 이용하여 개발해보도록 하겠다.&lt;/P&gt;
&lt;P&gt;먼저 아이디와 비밀번호를 입력할 수 있는 입력폼을 생성해보자.&lt;/P&gt;
&lt;DIV class=&quot;code panel&quot; style=&quot;BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px&quot;&gt;
&lt;DIV class=&quot;codeContent panelContent&quot;&gt;&lt;PRE class=code-java&gt;&lt;%@ page language=&lt;SPAN class=code-quote&gt;&quot;java&quot;&lt;/SPAN&gt; %&gt;
&lt;%@ taglib uri=&lt;SPAN class=code-quote&gt;&quot;/WEB-INF/struts-bean.tld&quot;&lt;/SPAN&gt; prefix=&lt;SPAN class=code-quote&gt;&quot;bean&quot;&lt;/SPAN&gt; %&gt;
&lt;%@ taglib uri=&lt;SPAN class=code-quote&gt;&quot;/WEB-INF/struts-html.tld&quot;&lt;/SPAN&gt; prefix=&lt;SPAN class=code-quote&gt;&quot;html&quot;&lt;/SPAN&gt; %&gt;
&lt;%@ taglib uri=&lt;SPAN class=code-quote&gt;&quot;/WEB-INF/struts-logic.tld&quot;&lt;/SPAN&gt; prefix=&lt;SPAN class=code-quote&gt;&quot;logic&quot;&lt;/SPAN&gt; %&gt;

&lt;html:html locale=&lt;SPAN class=code-quote&gt;&quot;&lt;SPAN class=code-keyword&gt;true&lt;/SPAN&gt;&quot;&lt;/SPAN&gt;&gt;
&lt;head&gt;
    &lt;title&gt;&lt;bean:message key=&lt;SPAN class=code-quote&gt;&quot;login.title&quot;&lt;/SPAN&gt; /&gt;&lt;/title&gt;
    &lt;html:base/&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;html:form action=&lt;SPAN class=code-quote&gt;&quot;/login&quot;&lt;/SPAN&gt;&gt;
    &lt;bean:message key=&lt;SPAN class=code-quote&gt;&quot;prompt.id&quot;&lt;/SPAN&gt; /&gt;
    &lt;html:text property=&lt;SPAN class=code-quote&gt;&quot;id&quot;&lt;/SPAN&gt; /&gt;
    &lt;br /&gt;
    &lt;bean:message key=&lt;SPAN class=code-quote&gt;&quot;prompt.password&quot;&lt;/SPAN&gt; /&gt;
    &lt;html:password property=&lt;SPAN class=code-quote&gt;&quot;password&quot;&lt;/SPAN&gt; /&gt;
    &lt;br /&gt;
    &lt;html:submit&gt;
        &lt;bean:message key=&lt;SPAN class=code-quote&gt;&quot;login.login&quot;&lt;/SPAN&gt; /&gt;
    &lt;/html:submit&gt;
&lt;/html:form&gt;
&lt;/body&gt;
&lt;/html:html&gt;

&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;위 login.jsp내부를 보면 Struts의 다양한 태그를 사용하고 있다.&lt;/P&gt;
&lt;P&gt;&lt;html:form action=&gt; 태그는 &lt;form&gt;태그&lt;/P&gt;
&lt;P&gt;&lt;html:text property=&gt; 태그는 &lt;input type=&quot;text&quot;&gt;태그&lt;/P&gt;
&lt;P&gt;&lt;html:password property=&gt; 태그는 &lt;input type=&quot;password&quot;&gt; 태그&lt;/P&gt;
&lt;P&gt;&lt;html:submit&gt; 태그는 &lt;input type=&quot;submit&quot;&gt; 태그와 같은 역할을 한다.&lt;/P&gt;
&lt;P&gt;login.jsp에서 사용한 메세지를 위하여 MessageResources.properties에 다음과 같이 4개의 메세지를 추가하여야 한다.&lt;/P&gt;
&lt;P&gt;login.title = Welcome to RegisterUser&lt;/P&gt;
&lt;P&gt;login.login = 로그인&lt;/P&gt;
&lt;P&gt;prompt.id=ID : &lt;/P&gt;
&lt;P&gt;prompt.password=Password : &lt;/P&gt;
&lt;P&gt;
&lt;DIV align=center&gt;&lt;IMG src=&quot;http://wiki.javajigi.net/download/attachments/71/struts_login.jpg&quot; border=0&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Struts를 이용하여 위에서 생성한 Login.jsp의 submit이 실행되었을 때 ID와 Password가 맞았는지 확인하는 처리를 위하여 두개의 클래스를 생성해야 한다.&lt;/P&gt;
&lt;P&gt;첫번째 클래스는 ActionForm클래스를 상속하는 클래스로 Login.jsp에서 전달되는 ID와 Password 인자를 저장하게될 클래스이다. 두번째 클래스는 Action클래스를 상속하는 클래스로 실질적인 login의 실질적인 처리를 담당하는 클래스이다. &lt;/P&gt;
&lt;DIV class=&quot;code panel&quot; style=&quot;BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px&quot;&gt;
&lt;DIV class=&quot;codeContent panelContent&quot;&gt;&lt;PRE class=code-java&gt;&lt;SPAN class=code-keyword&gt;package&lt;/SPAN&gt; net.javajigi.tutorial.form;

&lt;SPAN class=code-keyword&gt;import&lt;/SPAN&gt; javax.servlet.http.HttpServletRequest;

&lt;SPAN class=code-keyword&gt;import&lt;/SPAN&gt; org.apache.struts.action.ActionErrors;
&lt;SPAN class=code-keyword&gt;import&lt;/SPAN&gt; org.apache.struts.action.ActionForm;
&lt;SPAN class=code-keyword&gt;import&lt;/SPAN&gt; org.apache.struts.action.ActionMapping;

&lt;SPAN class=code-keyword&gt;public&lt;/SPAN&gt; class LoginForm &lt;SPAN class=code-keyword&gt;extends&lt;/SPAN&gt; ActionForm {
	/** password property */
	&lt;SPAN class=code-keyword&gt;private&lt;/SPAN&gt; &lt;SPAN class=code-object&gt;String&lt;/SPAN&gt; password;

	/** id property */
	&lt;SPAN class=code-keyword&gt;private&lt;/SPAN&gt; &lt;SPAN class=code-object&gt;String&lt;/SPAN&gt; id;

	&lt;SPAN class=code-keyword&gt;public&lt;/SPAN&gt; ActionErrors validate(
		ActionMapping mapping,
		HttpServletRequest request) {

		&lt;SPAN class=code-keyword&gt;throw&lt;/SPAN&gt; &lt;SPAN class=code-keyword&gt;new&lt;/SPAN&gt; UnsupportedOperationException(&lt;SPAN class=code-quote&gt;&quot;Generated method 'validate(...)' not implemented.&quot;&lt;/SPAN&gt;);
	}

	&lt;SPAN class=code-keyword&gt;public&lt;/SPAN&gt; void reset(ActionMapping mapping, HttpServletRequest request) {
		password = &quot;&quot;;
		id = &quot;&quot;;

	}

	&lt;SPAN class=code-keyword&gt;public&lt;/SPAN&gt; &lt;SPAN class=code-object&gt;String&lt;/SPAN&gt; getPassword() {
		&lt;SPAN class=code-keyword&gt;return&lt;/SPAN&gt; password;
	}

	&lt;SPAN class=code-keyword&gt;public&lt;/SPAN&gt; void setPassword(&lt;SPAN class=code-object&gt;String&lt;/SPAN&gt; password) {
		&lt;SPAN class=code-keyword&gt;this&lt;/SPAN&gt;.password = password;
	}

	&lt;SPAN class=code-keyword&gt;public&lt;/SPAN&gt; &lt;SPAN class=code-object&gt;String&lt;/SPAN&gt; getId() {
		&lt;SPAN class=code-keyword&gt;return&lt;/SPAN&gt; id;
	}

	&lt;SPAN class=code-keyword&gt;public&lt;/SPAN&gt; void setId(&lt;SPAN class=code-object&gt;String&lt;/SPAN&gt; id) {
		&lt;SPAN class=code-keyword&gt;this&lt;/SPAN&gt;.id = id;
	}
}

&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV class=&quot;code panel&quot; style=&quot;BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px&quot;&gt;
&lt;DIV class=&quot;codeContent panelContent&quot;&gt;&lt;PRE class=code-java&gt;&lt;SPAN class=code-keyword&gt;package&lt;/SPAN&gt; net.javajigi.tutorial.action;

&lt;SPAN class=code-keyword&gt;import&lt;/SPAN&gt; javax.servlet.http.HttpServletRequest;
&lt;SPAN class=code-keyword&gt;import&lt;/SPAN&gt; javax.servlet.http.HttpServletResponse;

&lt;SPAN class=code-keyword&gt;import&lt;/SPAN&gt; net.javajigi.tutorial.form.LoginForm;
&lt;SPAN class=code-keyword&gt;import&lt;/SPAN&gt; org.apache.struts.action.Action;
&lt;SPAN class=code-keyword&gt;import&lt;/SPAN&gt; org.apache.struts.action.ActionForm;
&lt;SPAN class=code-keyword&gt;import&lt;/SPAN&gt; org.apache.struts.action.ActionForward;
&lt;SPAN class=code-keyword&gt;import&lt;/SPAN&gt; org.apache.struts.action.ActionMapping;

&lt;SPAN class=code-keyword&gt;public&lt;/SPAN&gt; class LoginAction &lt;SPAN class=code-keyword&gt;extends&lt;/SPAN&gt; Action {
	&lt;SPAN class=code-keyword&gt;public&lt;/SPAN&gt; ActionForward execute(
		ActionMapping mapping,
		ActionForm form,
		HttpServletRequest request,
		HttpServletResponse response)
		&lt;SPAN class=code-keyword&gt;throws&lt;/SPAN&gt; Exception {

		&lt;SPAN class=code-keyword&gt;return&lt;/SPAN&gt;(mapping.findForward(&lt;SPAN class=code-quote&gt;&quot;mainmenu&quot;&lt;/SPAN&gt;));
	}

}
&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;LoginAction파일은 Action클래스를 상속한다. Action클래스의 execute()를 오버라이드한다. 실질적인 로그인 작업의 성공여부에 대한 로직은 execute()내에서 실행되게 된다. 위 예제에서는 단순히 mainmenu로 매핑되어 있는 URL로 Forword하고 있다. mainmenu에 해당하는 JSP를 간단하게 생성해본다. &lt;/P&gt;
&lt;DIV class=&quot;code panel&quot; style=&quot;BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px&quot;&gt;
&lt;DIV class=&quot;codeContent panelContent&quot;&gt;&lt;PRE class=code-java&gt;&lt;%@ page language=&lt;SPAN class=code-quote&gt;&quot;java&quot;&lt;/SPAN&gt; %&gt;
&lt;%@ taglib uri=&lt;SPAN class=code-quote&gt;&quot;/WEB-INF/struts-bean.tld&quot;&lt;/SPAN&gt; prefix=&lt;SPAN class=code-quote&gt;&quot;bean&quot;&lt;/SPAN&gt; %&gt;
&lt;%@ taglib uri=&lt;SPAN class=code-quote&gt;&quot;/WEB-INF/struts-html.tld&quot;&lt;/SPAN&gt; prefix=&lt;SPAN class=code-quote&gt;&quot;html&quot;&lt;/SPAN&gt; %&gt;
&lt;%@ taglib uri=&lt;SPAN class=code-quote&gt;&quot;/WEB-INF/struts-logic.tld&quot;&lt;/SPAN&gt; prefix=&lt;SPAN class=code-quote&gt;&quot;logic&quot;&lt;/SPAN&gt; %&gt;

&lt;html:html locale=&lt;SPAN class=code-quote&gt;&quot;&lt;SPAN class=code-keyword&gt;true&lt;/SPAN&gt;&quot;&lt;/SPAN&gt;&gt;
&lt;head&gt;
    &lt;title&gt;&lt;bean:message key=&lt;SPAN class=code-quote&gt;&quot;mainmenu.title&quot;&lt;/SPAN&gt; /&gt;&lt;/title&gt;
    &lt;html:base/&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;bean:message key=&lt;SPAN class=code-quote&gt;&quot;mainmenu.presentation&quot;&lt;/SPAN&gt; /&gt;
&lt;/body&gt;
&lt;/html:html&gt;
&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;mainmenu.title=Main Menu&lt;/P&gt;
&lt;P&gt;mainmenu.presentation=이 페이지는 Main Menuh2.&lt;/P&gt;
&lt;P&gt;이상으로 로그인 과정을 간단하게 테스트할 모든 파일들이 생성되었다. 기존방식보다 상당히 복잡함을 알 수 있다. 그러나 여기서 그치는 것이 아니라 지금까지 생성한 파일을 struts-config.xml에서 설정해주어야 한다. 지금까지 생성한 파일을 struts-config.xml에서 설정한 파일은 다음과 같다. &lt;/P&gt;
&lt;DIV class=&quot;code panel&quot; style=&quot;BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px&quot;&gt;
&lt;DIV class=&quot;codeContent panelContent&quot;&gt;&lt;PRE class=code-java&gt;&lt;?xml version=&lt;SPAN class=code-quote&gt;&quot;1.0&quot;&lt;/SPAN&gt; encoding=&lt;SPAN class=code-quote&gt;&quot;UTF-8&quot;&lt;/SPAN&gt;?&gt;
&lt;!DOCTYPE struts-config PUBLIC &lt;SPAN class=code-quote&gt;&quot;-&lt;SPAN class=code-comment&gt;//Apache Software Foundation//DTD Struts Configuration 1.1//EN&quot;&lt;/SPAN&gt; 
&lt;/SPAN&gt;                               &lt;SPAN class=code-quote&gt;&quot;http:&lt;SPAN class=code-comment&gt;//jakarta.apache.org/struts/dtds/struts-config_1_1.dtd&quot;&lt;/SPAN&gt;&gt;
&lt;/SPAN&gt;&lt;struts-config&gt;
    
    &lt;!-- ========== Data Source Configuration =============================== --&gt;
    &lt;data-sources /&gt;
    
    &lt;!-- ========== Form Bean Definitions ================================== --&gt;
    &lt;form-beans type=&lt;SPAN class=code-quote&gt;&quot;org.apache.struts.action.ActionFormBean&quot;&lt;/SPAN&gt;&gt;
        &lt;form-bean name=&lt;SPAN class=code-quote&gt;&quot;loginForm&quot;&lt;/SPAN&gt; type=&lt;SPAN class=code-quote&gt;&quot;net.javajigi.tutorial.form.LoginForm&quot;&lt;/SPAN&gt;&gt;
            &lt;form-property name=&lt;SPAN class=code-quote&gt;&quot;password&quot;&lt;/SPAN&gt; type=&lt;SPAN class=code-quote&gt;&quot;java.lang.&lt;SPAN class=code-object&gt;String&lt;/SPAN&gt;&quot;&lt;/SPAN&gt; /&gt;
            &lt;form-property name=&lt;SPAN class=code-quote&gt;&quot;id&quot;&lt;/SPAN&gt; type=&lt;SPAN class=code-quote&gt;&quot;java.lang.&lt;SPAN class=code-object&gt;String&lt;/SPAN&gt;&quot;&lt;/SPAN&gt; /&gt;
            
        &lt;/form-bean&gt;
        
    &lt;/form-beans&gt;
    
    &lt;!-- ========== Global Exception Definitions ============================== --&gt;
    &lt;global-exceptions /&gt;
    
    &lt;!-- ========== Global Forward Definitions =============================== --&gt;
    &lt;global-forwards type=&lt;SPAN class=code-quote&gt;&quot;org.apache.struts.action.ActionForward&quot;&lt;/SPAN&gt;&gt;
        &lt;forward name=&lt;SPAN class=code-quote&gt;&quot;mainmenu&quot;&lt;/SPAN&gt; path=&lt;SPAN class=code-quote&gt;&quot;/struts1/mainmenu.jsp&quot;&lt;/SPAN&gt; /&gt;
    &lt;/global-forwards&gt;
    
    &lt;!-- ========== Action Mapping Definitions =============================== --&gt;
    &lt;action-mappings type=&lt;SPAN class=code-quote&gt;&quot;org.apache.struts.action.ActionMapping&quot;&lt;/SPAN&gt;&gt;
        &lt;action
            attribute=&lt;SPAN class=code-quote&gt;&quot;loginForm&quot;&lt;/SPAN&gt;
            input=&lt;SPAN class=code-quote&gt;&quot;/struts1/login.jsp&quot;&lt;/SPAN&gt;
            name=&lt;SPAN class=code-quote&gt;&quot;loginForm&quot;&lt;/SPAN&gt;
            path=&lt;SPAN class=code-quote&gt;&quot;/login&quot;&lt;/SPAN&gt;
            type=&lt;SPAN class=code-quote&gt;&quot;net.javajigi.tutorial.action.LoginAction&quot;&lt;/SPAN&gt;
            validate=&lt;SPAN class=code-quote&gt;&quot;&lt;SPAN class=code-keyword&gt;true&lt;/SPAN&gt;&quot;&lt;/SPAN&gt; /&gt;
        
    &lt;/action-mappings&gt;
    
    &lt;!-- ========== Controller Configuration ================================ --&gt;
    &lt;controller /&gt;
    
    &lt;!-- ========== Message Resources Definitions ============================ --&gt;
    &lt;message-resources parameter=&lt;SPAN class=code-quote&gt;&quot;net.javajigi.tutorial.MessageResources&quot;&lt;/SPAN&gt; /&gt;
    
    &lt;!-- ========== Plug Ins Configuration ================================= --&gt;
&lt;/struts-config&gt;
&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;
&lt;DIV align=center&gt;&lt;IMG src=&quot;http://wiki.javajigi.net/download/attachments/71/struts_mainmenu.jpg&quot; border=0&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;위 LoginAction파일에서 수행한 작업이 없기 때문에 로그인 화면에서 로그인을 실행할 경우 바로 mainmenu페이지로 이동한다. 다음 예제는 이 예제를 바탕으로 좀 더 발전시켜 실질적으로 로그인이 되었는지 확인해 보도록 하겠다. 로그인이 실패할 경우 에러메세지를 출력함을 알 수 있을 것이다. &lt;/P&gt;
&lt;H2&gt;&lt;A name=JakartaStrutsGettingStarted-%EB%B0%9C%EC%A0%84%EB%90%9C%EB%A1%9C%EA%B7%B8%EC%9D%B8%EC%98%88%EC%A0%9C&gt;&lt;/A&gt;&lt;B&gt;발전된 로그인 예제&lt;/B&gt;&lt;/H2&gt;
&lt;P&gt;지금까지 간단한 로그인 예제를 살펴보았다. 그러나 실질적인 로그인 과정을 처리하는 부분은 없었기 때문에 Struts에 대하여 깊이 있게 이해하기는 힘들었을 것이다. 따라서 로그인 과정을 처리하는 부분을 JSP에서 수행하지 않고 클래스에서 어떻게 처리하는지, 에러가 발생할 경우 처리하는 과정에 대하여 살펴본다.&lt;/P&gt;
&lt;P&gt;LoginForm의 validate메써드에 아이디와 비밀번호를 고정하여 아이디와 비밀번호가 틀릴경우 에러메세지를 출력하도록 하였다. &lt;/P&gt;
&lt;DIV class=&quot;code panel&quot; style=&quot;BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; BORDER-RIGHT-WIDTH: 1px&quot;&gt;
&lt;DIV class=&quot;codeContent panelContent&quot;&gt;&lt;PRE class=code-java&gt;	&lt;SPAN class=code-keyword&gt;public&lt;/SPAN&gt; ActionErrors validate(
		ActionMapping mapping,
		HttpServletRequest request) {
	    &lt;SPAN class=code-keyword&gt;if&lt;/SPAN&gt; (id.equals(&lt;SPAN class=code-quote&gt;&quot;javajigi&quot;&lt;/SPAN&gt;) &amp;&amp; password.equals(&lt;SPAN class=code-quote&gt;&quot;password&quot;&lt;/SPAN&gt;))
	        &lt;SPAN class=code-keyword&gt;return&lt;/SPAN&gt; &lt;SPAN class=code-keyword&gt;null&lt;/SPAN&gt;;
    	&lt;SPAN class=code-keyword&gt;else&lt;/SPAN&gt; {
        	ActionErrors errors = &lt;SPAN class=code-keyword&gt;new&lt;/SPAN&gt; ActionErrors();
	        errors.add(&lt;SPAN class=code-quote&gt;&quot;login&quot;&lt;/SPAN&gt;, &lt;SPAN class=code-keyword&gt;new&lt;/SPAN&gt; ActionError(&lt;SPAN class=code-quote&gt;&quot;error.login&quot;&lt;/SPAN&gt;));
    	    &lt;SPAN class=code-keyword&gt;return&lt;/SPAN&gt; errors;
	    }
	}
&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;validate 메써드 내부를 보면 ActionError(&quot;error.login&quot;)와 같이 에러 메세지를 사용하고 있음을 알 수 있다. 에러 메세지 또한 Properties에 넣어서 출력하는 것이 가능하다.&lt;/P&gt;
&lt;P&gt;error.login=로그인 실패. 아이다와 비밀번호를 확인후 다시 입력하십시요.&lt;/P&gt;
&lt;P&gt;에러메세지를 좀 더 세련되게 보여주기 위해서 다음과 같은 형식으로 MessageResources.properties에 추가해보자.&lt;/P&gt;
&lt;P&gt;errors.header=&lt;h3&gt;&lt;font color=&quot;red&quot;&gt;Validation Error&lt;/font&gt;&lt;/h3&gt; &lt;BR&gt;You must correct the following error(s) before proceeding:&lt;UL&gt;&lt;BR&gt;errors.footer=&lt;/ul&gt;&lt;hr&gt;&lt;/P&gt;
&lt;P&gt;로그인 실행시 에러가 생길 경우 에러처리를 위하여 login.jsp의 &lt;body&gt;태그내에 다음과 같은 태그를 사용하면 된다.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;html:errors /&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;위와 같이 간단하게 수정한 다음 아이디와 비밀번호가 틀리도록 하여 로그인 과정을 실행해본다. 에러가 발생함을 볼 수 있다. 아이디와 비밀번호가 맞을 경우 처음과 같이 mainmenu페이지로 이동한다. &lt;/P&gt;
&lt;P&gt;
&lt;DIV align=center&gt;&lt;IMG src=&quot;http://wiki.javajigi.net/download/attachments/71/struts_loginfailed.jpg&quot; border=0&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;지금까지 Struts 프레임 워크를 이용하여 로그인 과정을 수행하는 간단한 예제를 살펴보았다. Struts는 상당히 방대한 프레임워크이기 때문에 한번에 모두 이해하기는 힘들다. 따라서 이번 강좌에서는 간단하게 실행하는 과정만을 살펴보았다.&lt;/P&gt;
&lt;P&gt;첫강좌에서 이해하지 못하는 부분이 대부분이라고 생각한다. Struts 사용하기 너무 어렵다고 속단하지는 말기 바란다. 앞으로 계속되는 강좌를 통하여 점진적으로 공부한다면 어떠한 개발방식보다 더 간단하다는 것을 알 수 있을 것이다.&lt;/P&gt;
&lt;P&gt;다음 강좌에서는 이번 강좌에서 다룬 내용들에 대하여 하나씩 뽑아서 자세하게 살펴보도록 하겠다.&lt;/P&gt;
&lt;H2&gt;&lt;A name=JakartaStrutsGettingStarted-%EC%B0%B8%EA%B3%A0%EC%9E%90%EB%A3%8C&gt;&lt;/A&gt;&lt;B&gt;참고 자료&lt;/B&gt; &lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;강좌에서 사용한 소스 : &lt;A href=&quot;http://wiki.javajigi.net/download/attachments/71/zigistruts_20021219.war?version=1&quot; target=&quot;_blank&quot;&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;zigistruts_20021219.war&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;Struts 프레임워크 사이트 : &lt;A href=&quot;http://jakarta.apache.org/struts/index.html&quot; rel=nofollow&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;http://jakarta.apache.org/struts/index.html&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;Struts 강좌 참고자료 : &lt;A href=&quot;http://www.isabelle-hurbain.com/repository/docs/struts-onefile/#SECTION00340000000000000000&quot; rel=nofollow&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;http://www.isabelle-hurbain.com/repository/docs/struts-onefile/#SECTION00340000000000000000&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;Tomcat Application Server사이트 : &lt;A href=&quot;http://jakarta.apache.org/tomcat/index.html&quot; rel=nofollow&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;http://jakarta.apache.org/tomcat/index.html&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;SCRIPT type=text/javascript&gt;&lt;!--
google_ad_client = &quot;pub-0116131400397176&quot;;
/* 728x90, 작성됨 09. 2. 1 */
google_ad_slot = &quot;9742372483&quot;;
google_ad_width = 728;
google_ad_height = 90;
//--&gt;
&lt;/SCRIPT&gt;

&lt;SCRIPT src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; type=text/javascript&gt;
&lt;/SCRIPT&gt;

&lt;SCRIPT&gt;google_protectAndRun(&quot;ads_core.google_render_ad&quot;, google_handleError, google_render_ad);&lt;/SCRIPT&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>POJO(Plain Old Java Object) 개념 - POJO란</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121996"/>
		<id>tag:blog.daum.net,2009:sunnle.8121996</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-11-04T17:50:13Z</updated>
	    <published>2009-11-04T17:50:13Z</published>
	    <content type="html">
	    	원문 : &lt;A href=&quot;http://blog.naver.com/thtlsgkrtod/40055742326&quot; target=&quot;_blank&quot;&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;http://blog.naver.com/thtlsgkrtod/40055742326&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: 12px Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;COLOR: rgb(102,102,102); LINE-HEIGHT: 16px; FONT-FAMILY: dotum&quot;&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;⑴ POJO(Plain Old Java Object)&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;순수 자바 클래스들을 이르는 말로, 보통의 기존 자바 오브젝트라는 뜻을 나타내기도 한다&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;EJB와 같은 거창한 컴포넌트가 아닌 일반적인 자바 클래스를 갈리키는 것으로 비동기 호출의 지원하는 것을 말한다.&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;⑵ POJO의 역사&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;마틴 파울러가 2000년 가을에 열렸던 어느 컨퍼런스의 발표를 준비하면서 처음 만들어낸 말이다. 마틴 파울러는&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;EJB(Enterprise JavaBean)보다는 단순한 자바 오브젝트에 도메인 로직을 넣어 사용하는 것이 여러가지 장점이&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;있는데도 왜 사람들이 그 EJB가 아닌 '평범한 자바 오브젝트'를 사용하기를 꺼려 하는지에 대해 의문을 가졌다.&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;그리고 그는 단순한 오브젝트에는 EJB와 같은 그럴듯한 이름이 없어서 그 사용을 주저하는것이라고 결론 내렸다&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;그래서 만든 단어가 POJO라는 용어인 것이다. POJO기반의 기술을 사용한다고 말하면 왠지 첨단 기술을 사용하는&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;앞선 개발자인 듯한 인상을 주기 때문이다.&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;⑶ POJO의 앞으로의&lt;SPAN class=Apple-converted-space&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A id=temp_hw7130 target=_blank&gt;&lt;/A&gt;행보&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;POJO기반의 프로그래밍 기술이 EJB의 강력한 대안으로 등장했고, POJO 기반 프레임워크, POJO 애플리케이션을&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;위한 플랫폼 등이 점점 인기를 끌게 되었고, 결국 POJO가 배제하려고 했던 EJB는 POJO 기반의 기술에 밀려 이제&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;레거시 기술로 사라질 위기에 처했다. 그렇다면 단지 EJB를 사용하지 않으면 모두 POJO라고 할 수있을까?&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;그렇지 않다. POJO 프로그래밍이라는 개념은 단지 &quot;EJB가 아닌 자바&quot; 이상의 특징을 가지고 있는 프로그래밍 모델이다.&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;POJO기반의 개발은 생각보다 단순하지 않다.&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;POJO를 좀더 이해하려면 EJB의 장단점을 함께 이해해야 한다. 그것은 POJO 프로그래밍이 다시 EJB 시대이전으로 돌아&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;가자는 것이 아니고, EJB를 넘어 그보다 더 앞으로 나아가자는 것이기 때문이다.&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;EJB를 사용하지 말고 POJO를 쓰자는 것은 EJB이전의 방식으로 돌아가는 것을 의미한다면 또 다른 문제가 발생 할 수 밖에&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;없다. 여전히 복잡한 로우레벨의 API를 이용해 코드를 작성해야 하고, 많은 기술적인 문제를 애플리케이션 코드에 그대로 노출&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;시켜개발해야 하다면 기껏 POJO로의 복귀 덕분에 얻는 많은 장점들을 놓칠 수 밖에 없다.&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;그래서 등장 것이 POJO 기반의 프레임워크이다. POJO 프레임워크는 POJO를 이용한 애플리케이션 개발이 가진 특징과 장점&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;을 그대로 살리면서 EJB에서 제공하는 엔터프라이즈 서비스와 기술을 그대로 사용할 수 있도록 도와주는 프레임워크이다.&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;(대표적인 프레임워크는 스프링 하이버네이트)&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;※ 참고&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;스프링은 엔터프라이즈 서비스들을 POJO 기반으로 만든 비즈니스 오브젝트에서 사용할 수 있게 한다. 대표적인 선어적인 트랜잭션 서비스와 보안이다.&amp;nbsp; 또한 EJB와 마찬가지로 오브젝트 컨테이너를 제공해서 인스턴스의 라이프사이클을 관리하고 필요에 ㄸ라 스레딩, 풀링 및 서비스 인젝션 등의기능을 제공한다. 또한 OOP 답게 사용&amp;nbsp;할 수&amp;nbsp;있게 하는 AOP기술을 적용해서 POJO개발을 더 쉽게 만든다.&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none&quot;&gt;POJO프로그램의 진정한 가치는 자바의 객체지향적인 특징을 살려 비즈니스 로직을 충실한 개발이 가능 하도록 하는 것이다.&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>[웹] 스트럿츠2 설치 및 설정 - 3. iBatis 연동 (2)</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121995"/>
		<id>tag:blog.daum.net,2009:sunnle.8121995</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-11-04T17:44:46Z</updated>
	    <published>2009-11-04T17:44:46Z</published>
	    <content type="html">
	    	&lt;DIV id=espresso_editor_view style=&quot;FONT-SIZE: 9pt&quot;&gt;
&lt;P&gt;iBatis를 사용함에 있어 VO와 액션클래스의 작성법을 이어서 소개한다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;이전 글에서의 testSQL.xml에서 typeAlias태그와 parameterClass에서 정의했던 대로 TestVO를 작성한다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;package&lt;/FONT&gt;&lt;/STRONG&gt; test;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;public class&lt;/FONT&gt;&lt;/STRONG&gt; TestVO {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#9d005b&gt;private&lt;/FONT&gt;&lt;/STRONG&gt; &lt;STRONG&gt;&lt;FONT color=#9d005b&gt;int&lt;/FONT&gt;&lt;/STRONG&gt; &lt;FONT color=#0000ff&gt;no&lt;/FONT&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#9d005b&gt;private&lt;/FONT&gt;&lt;/STRONG&gt; String &lt;FONT color=#0000ff&gt;title&lt;/FONT&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#9d005b&gt;private&lt;/FONT&gt;&lt;/STRONG&gt; String &lt;FONT color=#0000ff&gt;content&lt;/FONT&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#9d005b&gt;&lt;STRONG&gt;public void &lt;/STRONG&gt;&lt;/FONT&gt;setNo(&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;int&lt;/FONT&gt;&lt;/STRONG&gt; no){&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#9d005b&gt;&lt;STRONG&gt;this&lt;/STRONG&gt;&lt;/FONT&gt;.&lt;FONT color=#0000ff&gt;no &lt;/FONT&gt;= no;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#9d005b&gt;&lt;STRONG&gt;public int &lt;/STRONG&gt;&lt;/FONT&gt;getNo(){&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#9d005b&gt;return&lt;/FONT&gt;&lt;/STRONG&gt; &lt;FONT color=#0000ff&gt;no&lt;/FONT&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;EM&gt;&lt;FONT color=#666666&gt;... getters and setters.&lt;/FONT&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Tahoma&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;VO 클래스 이기에 당연한 이야기이지만, 각 멤버변수에 대해서는 getter, setter를 빠짐없이 생성해준다.&lt;/P&gt;
&lt;P&gt;가끔 멤버변수를 추가하고 나서 깜박하는 때가 있기도 하다. 나만 그런가? 나이가 들어서... ㅡㅡ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;VO를 작성했으니 SQL수행을&amp;nbsp;위한 파라메터 전달 및 결과를 받을 준비는 끝났다.&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;STRONG&gt;&lt;FONT color=#9d005b&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;package&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; test.action;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;import&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; java.io.IOException;&lt;/SPAN&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;import&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; java.io.Reader;&lt;/SPAN&gt;&lt;BR&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;import&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; java.util.ArrayList;&lt;/SPAN&gt;&lt;BR&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;import&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;java.util.List;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;import&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; test.TestVO;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;import&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; com.ibatis.common.resources.Resources;&lt;/SPAN&gt;&lt;BR&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;import&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; com.ibatis.sqlmap.client.SqlMapClient;&lt;/SPAN&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;import&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; com.ibatis.sqlmap.client.SqlMapClientBuilder;&lt;/SPAN&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;import&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; com.opensymphony.xwork2.ActionSupport;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;public class&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; TestAction &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;extends&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; ActionSupport {&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;public static&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; Reader &lt;EM&gt;&lt;FONT color=#0000ff&gt;reader&lt;/FONT&gt;&lt;/EM&gt;;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;public static&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; SqlMapClient &lt;EM&gt;&lt;FONT color=#0000ff&gt;sqlMapper&lt;/FONT&gt;&lt;/EM&gt;;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;private&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; List&lt;TestVO&gt; &lt;FONT color=#0000ff&gt;list &lt;/FONT&gt;= &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;new&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; ArrayList&lt;TestVO&gt;();&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;public&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; TestAction() &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;throws&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; IOException {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#009e49&gt;//xml 설정을 로딩&lt;/FONT&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;EM&gt;&lt;FONT color=#0000ff&gt;reader &lt;/FONT&gt;&lt;/EM&gt;= Resources.&lt;EM&gt;&lt;FONT color=#666666&gt;getResourceAsReader&lt;/FONT&gt;&lt;/EM&gt;(&lt;FONT color=#0000ff&gt;&quot;sqlMapConfig.xml&quot;&lt;/FONT&gt;);&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;EM&gt;&lt;FONT color=#0000ff&gt;sqlMapper &lt;/FONT&gt;&lt;/EM&gt;= SqlMapClientBuilder.&lt;EM&gt;&lt;FONT color=#666666&gt;buildSqlMapClient&lt;/FONT&gt;&lt;/EM&gt;(&lt;EM&gt;&lt;FONT color=#0000ff&gt;reader&lt;/FONT&gt;&lt;/EM&gt;);&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;EM&gt;&lt;FONT color=#0000ff&gt;reader&lt;/FONT&gt;&lt;/EM&gt;.close();&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;public&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; String execute() &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;throws&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; Exception {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#009e49&gt;//testSQL.xml의&amp;nbsp;selectList에 해당하는 쿼리를 수행&lt;/FONT&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;list &lt;/FONT&gt;= &lt;EM&gt;&lt;FONT color=#0000ff&gt;sqlMapper&lt;/FONT&gt;&lt;/EM&gt;.queryForList(&lt;FONT color=#0000ff&gt;&quot;selectList&quot;&lt;/FONT&gt;);&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;return&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; &lt;EM&gt;&lt;FONT color=#0000ff&gt;SUCCESS&lt;/FONT&gt;&lt;/EM&gt;;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;public static&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; Reader getReader() {&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;return&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; &lt;EM&gt;&lt;FONT color=#0000ff&gt;reader&lt;/FONT&gt;&lt;/EM&gt;;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;public static&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; void setReader(Reader reader) {&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TestAction.&lt;FONT color=#0000ff&gt;&lt;EM&gt;&lt;FONT color=#666666&gt;reader&lt;/FONT&gt;&lt;/EM&gt; &lt;/FONT&gt;= reader;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;EM&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;FONT color=#666666&gt;... getters and setters.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;기본적으로 액션을 통해&amp;nbsp;요청이 들어오면, 리스트를 검색하여 반환하는&amp;nbsp;간단한 구조이다.&lt;/P&gt;
&lt;P&gt;생성자의&amp;nbsp;xml로딩 부분은 공통이고, execute() 메소드 &amp;nbsp;내의 &lt;FONT style=&quot;BACKGROUND-COLOR: #c1e67a&quot;&gt;&lt;STRONG&gt;sqlMapper.queryForList(&quot;selectList&quot;); 가 핵심 포인트&lt;/STRONG&gt;&lt;/FONT&gt; 되겠다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;그렇다면, 기타 insert, update, delete 그리고, 리스트가 아닌 건별&amp;nbsp;select 는 어떻게 처리될까?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;각 케이스에 대해 execute() 메소드 내부만 살펴보도록 하겠다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#009e49&gt;//INSERT&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;public&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; String execute() &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;throws&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; Exception {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TestVO paramClass = new TestVO();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#009e49&gt;//폼에서 넘어온 값들을 VO에 세팅&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; paramClass.setNo(getNo());&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; paramClass.setTitle(getTitle());&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; paramClass.setContent(getContent());&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;EM&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;FONT color=#0000ff&gt;sqlMapper&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;.insert(&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;insert&quot;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;, paramClass);&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;return&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; &lt;/SPAN&gt;&lt;EM&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;FONT color=#0000ff&gt;SUCCESS&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#009e49&gt;//DELETE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;public&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; String execute() &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;throws&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; Exception {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TestVO paramClass = new TestVO();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#009e49&gt;//폼에서 넘어온 값들을 VO에 세팅&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; paramClass.setNo(getNo());&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; paramClass.setTitle(getTitle());&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; paramClass.setContent(getContent());&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;EM&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;FONT color=#0000ff&gt;sqlMapper&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;.insert(&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;delete&quot;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;, paramClass);&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG&gt;&lt;FONT color=#9d005b&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;return&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; &lt;/SPAN&gt;&lt;EM&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;FONT color=#0000ff&gt;SUCCESS&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#009e49&gt;//단일 건 SELECT &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;public&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; String execute() &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;throws&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; Exception {&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TestVO resultClass = new TestVO();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultClass = &lt;/SPAN&gt;&lt;EM&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;FONT color=#0000ff&gt;sqlMapper&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;.queryForObject(&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;FONT color=#0000ff&gt;&quot;selectOne&quot;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#9d005b&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;return&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; &lt;/SPAN&gt;&lt;EM&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;SUCCESS&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/EM&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;앞서 핵심포인트로 지적했던 sqlMapper의 호출되는 메소드만 변경될 뿐 큰 변화가 없다. &lt;/P&gt;
&lt;P&gt;특이한 사항은 &lt;FONT style=&quot;BACKGROUND-COLOR: #c1e67a&quot;&gt;&lt;STRONG&gt;DELETE 시 update() 메소드를 호출한다&lt;/STRONG&gt;&lt;/FONT&gt;는 것이다.&lt;/P&gt;
&lt;P&gt;그리고, 기존의 PreparedStatement 사용시 쿼리의 ? 에 값을 일일이 순차적으로 바인딩 했던것과 달리, &lt;FONT style=&quot;BACKGROUND-COLOR: #c1e67a&quot;&gt;&lt;STRONG&gt;VO클래스를 통째로 넘김&lt;/STRONG&gt;&lt;/FONT&gt;으로써 코딩의 번거로움을 크게 줄였다. 물론 VO에 값을 담기위해 set메소드를 호출하는 것도 일이라면 마찬가지이지만, 순서에 연연하지 않아도 된다는 것만으로도 충분히 효율적이다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;이밖에, 다양한 케이스에 따라 메소드를 호출할 수가 있는데 같은 메소드에 오버로딩 되어있으므로 API를 참고하면 어렵지 않게 사용할 수 있을 것이다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;여기까지가 Struts2, iBatis에 대한 초압축 정리이다.&lt;/P&gt;
&lt;P&gt;철저히 copy &amp; paste (게시글 드래그가 지원이 안되고 있지만..내 의지는 아니다.), '무작정 따라하기'에 편리하도록 작성하였다. 단지 프로그램을 동작시키는 것에 초점을 맞추었으므로, 실제 ActionSupport 클래스의 동작은 어떻게 되는지, HttpRequest가 어떻게 액션클래스로 전달되는지 등 다소 Fundamental한 측면은 역시 관련 서적을 보는 것이 최고다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 16pt&quot;&gt;- 끝 -&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;STRONG&gt;&lt;SPAN style=&quot;FONT-SIZE: 16pt&quot;&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=right&gt;&lt;SPAN style=&quot;FONT-SIZE: 8pt&quot;&gt;&lt;FONT color=#f953c1&gt;- 참고문헌 : 스트럿츠2 실무프로그래밍 (최재은,표재민 저 - 삼양미디어 2009.04)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P align=right&gt;원문 : &lt;A href=&quot;http://www.cyworld.com/deepb1ue/2941192&quot; target=&quot;_blank&quot;&gt;&lt;U&gt;&lt;FONT color=#810081&gt;http://www.cyworld.com/deepb1ue/2941192&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>[웹] 스트럿츠2 설치 및 설정 - 3. iBatis 연동 (1)</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121994"/>
		<id>tag:blog.daum.net,2009:sunnle.8121994</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-11-04T17:42:39Z</updated>
	    <published>2009-11-04T17:42:39Z</published>
	    <content type="html">
	    	&lt;DIV id=espresso_editor_view style=&quot;FONT-SIZE: 9pt&quot;&gt;
&lt;P&gt;HelloWorld 예제를 통해 스트럿츠2의 기본 동작을 확인하였으니, DB연동을 통해 실무에 적용될 수 있는 기반을 갖추어보자.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-SIZE: 16pt&quot;&gt;&lt;STRONG&gt;&lt;FONT color=#32002e&gt;iBatis란?&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#e60000&gt;XML을 사용하여 자바빈즈와 SQL statement를 매핑시키는 Object Relational Mapping 프레임웍.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;쉽게말해 &lt;U&gt;&lt;FONT color=#f4505a&gt;SQL과 소스코드를 분리하여, 가독성 및 관리의 효율성을 높여주는 프레임웍&lt;/FONT&gt;&lt;/U&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;&lt;STRONG&gt;&lt;FONT color=#00538d&gt;1.&amp;nbsp;다운로드&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://ibatis.apache.org/javadownloads.cgi&quot; target=_blank&gt;http://ibatis.apache.org/javadownloads.cgi&lt;/A&gt;&amp;nbsp;에서 ibatis-2.3.0.720.jar 를 다운로드.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;이를 %CONTEXT_HOME%/WEB-INF/lib 에 추가한다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#00538d&gt;&lt;STRONG&gt;2. JDBC&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;당연한 이야기지만 JDBC가 필요하다는 것만 언급하고 생략한다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#00538d&gt;&lt;STRONG&gt;3. DB에 접근하기위해..&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;DB에 접근하기 위해 아래 &lt;FONT style=&quot;BACKGROUND-COLOR: #c1e67a&quot; color=#1c4800&gt;&lt;STRONG&gt;dbconnect.properties&lt;/STRONG&gt;&lt;FONT style=&quot;BACKGROUND-COLOR: #ffffff&quot;&gt; &lt;/FONT&gt;&lt;/FONT&gt;파일을 작성하여 %CONTEXT_HOME%/WEB-INF/classes에 위치시킨다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#581925&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;driver=oracle.jdbc.driver.OracleDriver&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;url=jdbc:oracle:thin:@127.0.0.1:1521:DEVDB&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;username=SCOTT&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;password=TIGER&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#00538d&gt;4. sqlMapConfig.xml&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;다음 &lt;FONT style=&quot;BACKGROUND-COLOR: #c1e67a&quot; color=#1c4800&gt;&lt;STRONG&gt;sqlMapConfig.xml&lt;/STRONG&gt;&lt;/FONT&gt; 을 통하여 iBatis 설정을 한다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;?xml&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; &lt;FONT color=#ff0000&gt;version=&lt;/FONT&gt;&quot;&lt;FONT color=#ff0000&gt;1.0&lt;/FONT&gt;&quot; &lt;FONT color=#ff0000&gt;encoding=&lt;/FONT&gt;&quot;UTF-8&quot;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;?&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;!DOCTYPE &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;sqlMapConfig PUBLIC &quot;-//ibatis.apache.org//DTD SQL Map Config &lt;FONT color=#ff0000&gt;2.0//EN&lt;/FONT&gt;&quot;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&quot;&lt;/SPAN&gt;&lt;A href=&quot;http://ibatis.apache.org/dtd/sql-map-config-2.dtd&quot; target=_blank&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;http://ibatis.apache.org/dtd/sql-map-config-2.dtd&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;sqlMapConfig&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;properties &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;resource&lt;FONT color=#ff0000&gt;=&lt;/FONT&gt;&quot;/dbconnect.properties&quot;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;/&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;settings&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; &lt;/SPAN&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;cacheModelsEnabled&lt;FONT color=#ff0000&gt;=&lt;/FONT&gt;&quot;true&quot;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;enhancementEnabled&lt;FONT color=#ff0000&gt;=&lt;/FONT&gt;&quot;true&quot;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lazyLoadingEnabled&lt;FONT color=#ff0000&gt;=&lt;/FONT&gt;&quot;true&quot;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;maxRequests&lt;FONT color=#ff0000&gt;=&lt;/FONT&gt;&quot;32&quot;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;maxSessions&lt;FONT color=#ff0000&gt;=&lt;/FONT&gt;&quot;10&quot;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;maxTransactions&lt;FONT color=#ff0000&gt;=&lt;/FONT&gt;&quot;5&quot;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;useStatementNamespaces&lt;FONT color=#ff0000&gt;=&lt;/FONT&gt;&quot;false&quot;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;/&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;transactionManager&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; &lt;/SPAN&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;FONT color=#ff0000&gt;type=&lt;/FONT&gt;&quot;JDBC&quot; commitRequired&lt;FONT color=#ff0000&gt;=&lt;/FONT&gt;&quot;false&quot;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;dataSource&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; &lt;FONT color=#ff0000&gt;type=&lt;/FONT&gt;&quot;SIMPLE&quot;&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;property &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;FONT color=#ff0000&gt;name=&lt;/FONT&gt;&quot;JDBC.Driver&quot; &lt;FONT color=#ff0000&gt;value=&lt;/FONT&gt;&quot;${driver}&quot;&lt;FONT color=#0000ff&gt;/&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;property &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;FONT color=#ff0000&gt;name=&lt;/FONT&gt;&quot;JDBC.ConnectionURL&quot; &lt;FONT color=#ff0000&gt;value=&lt;/FONT&gt;&quot;${url}&quot;&lt;FONT color=#0000ff&gt;/&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;property &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;FONT color=#ff0000&gt;name=&lt;/FONT&gt;&quot;JDBC.Username&quot; &lt;FONT color=#ff0000&gt;value=&lt;/FONT&gt;&quot;${username}&quot;&lt;FONT color=#0000ff&gt;/&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;property &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;FONT color=#ff0000&gt;name=&lt;/FONT&gt;&quot;JDBC.Password&quot; &lt;FONT color=#ff0000&gt;value=&lt;/FONT&gt;&quot;${password}&quot;&lt;FONT color=#0000ff&gt;/&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/dataSource&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/transactionManager&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;sqlMap &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;resource&lt;FONT color=#ff0000&gt;=&lt;/FONT&gt;&quot;/sql/testSQL.xml&quot;&lt;FONT color=#0000ff&gt;/&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/sqlMapConfig&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#00538d&gt;5. testSQL.xml&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;자 이제, SQL이 들어갈 &lt;FONT style=&quot;BACKGROUND-COLOR: #c1e67a&quot; color=#1c4800&gt;&lt;STRONG&gt;testSQL.xml&lt;/STRONG&gt;&lt;/FONT&gt;을 작성하면 된다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;?xml &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;version=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;1.0&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot; &lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;encoding=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;UTF-8&quot;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;?&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;!DOCTYPE &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;sqlMap PUBLIC '-//ibatis.apache.org//DTD Sql Map &lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;2.0//EN&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;'&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;'http://ibatis.apache.org/dtd/sql-map-2.dtd'&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;sqlMap&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;typeAlias &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;alias&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;test&quot; &lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;type=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;test.TestVO&quot;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;/&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#a8d9f6&gt;&lt;FONT color=#4ec496&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;!-- 리절트맵 정의--&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;resultMap &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;id=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;testRes&quot; &lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;class=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;test&quot;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;result &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;property&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;no&quot; column&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;NO&quot;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;/&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;result &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;property&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;title&quot; column&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;TITLE&quot;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;/&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;result &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;property&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;content&quot; column&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;CONTENT&quot;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;/&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/resultMap&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#4ec496&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;!-- SELECT절 정의 --&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;sql &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;id=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;select-all&quot;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT * FROM&amp;nbsp;BOARD&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/sql&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#4ec496&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;!--&amp;nbsp; WHERE절 정의 --&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; &lt;sql &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;id=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;where-no&quot;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE NO &lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; #no#&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/sql&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#4ec496&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;!-- SELECT쿼리문 조합&amp;nbsp; --&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;select &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;id&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;selectList&quot; resultMap&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;tradeMCRes&quot; parameterClass&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;String&quot;&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;include &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;refid&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;select-all&quot;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;/&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; &lt;include &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;refid&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;where-no&quot;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;/&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $order$&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/select&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#4ec496&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; &lt;!-- INSERT절 정의 --&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;insert &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;id=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;insert&quot; parameterClass&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;test&quot;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INSERT INTO BOARD &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ( NO,&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&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; TITLE,&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&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; CONTENT )&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VALUES&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ( #no#,&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&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;#title#,&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&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; #content# )&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/insert&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#4ec496&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;!-- UPDATE절 정의 --&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;update &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;id=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;update&quot; parameterClass&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;test&quot;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UPDATE&amp;nbsp;BOARD SET&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&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; TITLE &lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt; #title#,&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&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; CONTENT &lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;#content#&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;include &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;refid&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;where-no&quot;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;/&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/update&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#4ec496&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;!-- DELETE절 정의 --&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;delete &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;id=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;delete&quot; parameterClass=&quot;test&quot;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DELETE FROM BOARD&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;include &lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;refid&lt;/SPAN&gt;&lt;FONT color=#ff0000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;=&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&quot;where-no&quot;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;/&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/update&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&lt;/sqlMap&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;SPAN style=&quot;FONT-FAMILY: Verdana&quot;&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;여기까지가 testSQL.xml 의 내용인데, 대충 살펴보면 VO 클래스를 이용해 값을 주고 받을 수 있으며, &lt;resultMap/&gt; 태그를 통해 칼럼과 VO의 멤버변수와 매핑 시킨다는 것을 알 수 있다.&lt;/P&gt;
&lt;P&gt;또, &lt;sql/&gt; 태그를 통해 자주 사용하게 될 문구에 대해 include를 지원한다. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;한가지 더 확인해 볼 사항은, #no# 라고 사용된 변수는 PreparedStatement에서 쿼리 내 ? 에 바인딩 되는 것과 같고 $order$ 의 경우는 문자열 자체가 직접 쿼리에 append 된다고 보면 된다. 쉽게 말해 입력되는 값이 ''로 감싸여지는냐 그렇지 않느냐에대한 차이가 있다.&lt;/P&gt;
&lt;P&gt;따라서 상황에 따라 적절히 활용이 가능하다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;이후 이에 따른 VO 클래스의 작성 및 액션에서의 호출 방법 등이 남아 있는데, 다음 글에서 정리해 보자.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#f4505a&gt;+) Tip.&lt;/FONT&gt;&lt;/STRONG&gt; SQL문 작성시 &amp;nbsp;CDATA 절을 삽입하도록 하자. 그렇지 않은 경우 조건절 기술시 &lt; 기호에 대해 태그로 인식하게 된다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=right&gt;&lt;SPAN style=&quot;FONT-SIZE: 8pt&quot;&gt;&lt;FONT color=#f953c1&gt;- 참고문헌 : 스트럿츠2 실무프로그래밍 (최재은,표재민 저 - 삼양미디어 2009.04)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;SPAN style=&quot;FONT-SIZE: 8pt&quot;&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=right&gt;&lt;SPAN style=&quot;FONT-SIZE: 8pt&quot;&gt;원문 : &lt;A href=&quot;http://www.cyworld.com/deepb1ue/2915787&quot; target=&quot;_blank&quot;&gt;&lt;U&gt;&lt;FONT color=#810081&gt;http://www.cyworld.com/deepb1ue/2915787&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;!--espresso editor content end--&gt;&lt;/DIV&gt;&lt;!--espresso editor content end--&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>DHT(Distributed Hash Table)</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121993"/>
		<id>tag:blog.daum.net,2009:sunnle.8121993</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-10-27T22:30:05Z</updated>
	    <published>2009-10-27T22:30:05Z</published>
	    <content type="html">
	    	&lt;DIV class=article&gt;DHT(Distributed Hash Table)이란 이름에서 알 수 있듯이 시스템 내의 각 노드(node)들이 키 셋을 나누어 가지고 있는 분산 시스템을 말한다. DHT시스템 외부에서 보면 일반 해쉬 테이블과 다를 게 없지만 일반적인 해쉬 테이블과 다른 특성을 가지고 있다.&lt;BR&gt;&lt;BR&gt;&lt;B&gt;특성&lt;/B&gt;&lt;BR&gt;1. Decentrialisation : DHT 시스템 전체를 중앙에서 관리하는 조직이 없다.&lt;BR&gt;2. Scalability : DHT를 이루고 있는 노드 수에 영향을 받지 않고 확장할 수 있다.&lt;BR&gt;3. Fault tolerance : DHT 시스템 내부에 노드가 추가되거나 없어지거나 오동작을 하더라도 DHT시스템 전체의 기능에 영향을 끼치지 않는다.&lt;BR&gt;&lt;BR&gt;기존 P2P솔루션은 Napster와 같이 중앙집중관리 방식과 Gnutella와 같이 주변 노드들을 활용하는 완전히 분산된 네트워크를 구성하는 방식이 있다. P2P네트워크를 중앙에서 컨트롤할 경우에 네트웍 이용효율은 좋아지겠지만 컨트롤이 중앙에 모여있기 때문에 중앙 관리 시스템이 취약점이 될 수 있다. Peer에&lt;SPAN id=callbacknestmtgearnet364624 style=&quot;FLOAT: left; WIDTH: 226px; HEIGHT: 196px&quot;&gt;
&lt;OBJECT id=mtgearnet364624 codeBase=http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0 height=&quot;100%&quot; width=&quot;100%&quot; classid=clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&gt;&lt;PARAM NAME=&quot;_cx&quot; VALUE=&quot;5953&quot;&gt;&lt;PARAM NAME=&quot;_cy&quot; VALUE=&quot;5186&quot;&gt;&lt;PARAM NAME=&quot;FlashVars&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;Movie&quot; VALUE=&quot;http://cfs.tistory.com/blog/plugins/CallBack/callback.swf?destDocId=callbacknestmtgearnet364624&amp;id=364&amp;callbackId=mtgearnet364624&amp;host=http://mtgear.net&amp;float=left&amp;&quot;&gt;&lt;PARAM NAME=&quot;Src&quot; VALUE=&quot;http://cfs.tistory.com/blog/plugins/CallBack/callback.swf?destDocId=callbacknestmtgearnet364624&amp;id=364&amp;callbackId=mtgearnet364624&amp;host=http://mtgear.net&amp;float=left&amp;&quot;&gt;&lt;PARAM NAME=&quot;WMode&quot; VALUE=&quot;Transparent&quot;&gt;&lt;PARAM NAME=&quot;Loop&quot; VALUE=&quot;-1&quot;&gt;&lt;PARAM NAME=&quot;Quality&quot; VALUE=&quot;High&quot;&gt;&lt;PARAM NAME=&quot;SAlign&quot; VALUE=&quot;LT&quot;&gt;&lt;PARAM NAME=&quot;Menu&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;Base&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;AllowScriptAccess&quot; VALUE=&quot;always&quot;&gt;&lt;PARAM NAME=&quot;Scale&quot; VALUE=&quot;NoScale&quot;&gt;&lt;PARAM NAME=&quot;DeviceFont&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;EmbedMovie&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;BGColor&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;SWRemote&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;MovieData&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;SeamlessTabbing&quot; VALUE=&quot;1&quot;&gt;&lt;PARAM NAME=&quot;Profile&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;ProfileAddress&quot; VALUE=&quot;&quot;&gt;&lt;PARAM NAME=&quot;ProfilePort&quot; VALUE=&quot;0&quot;&gt;&lt;PARAM NAME=&quot;AllowNetworking&quot; VALUE=&quot;all&quot;&gt;&lt;PARAM NAME=&quot;AllowFullScreen&quot; VALUE=&quot;false&quot;&gt;
    &lt;embed width=&quot;100%&quot; height=&quot;100%&quot; wmode=&quot;transparent&quot; id=&quot;mtgearnet364624&quot; src=&quot;http://cfs.tistory.com/blog/plugins/CallBack/callback.swf?destDocId=callbacknestmtgearnet364624&amp;id=364&amp;callbackId=mtgearnet364624&amp;host=http://mtgear.net&amp;float=left&amp;&quot; allowScriptAccess=&quot;always&quot; menu=&quot;false&quot; type=&quot;application/x-shockwave-flash&quot;  &gt;&lt;/embed&gt;&lt;/OBJECT&gt;&lt;/SPAN&gt; 의지하는 방식은 중앙 집중 조직이 없어서 뚜렸한 취약점은 없지만 네트웍을 비효율적으로 사용한다는 문제가 있다. DHT는 structured key based routing이라는 방법으로 위와 같은 P2P시스템의 약점을 극복 했다.&lt;BR&gt;&lt;BR&gt;DHT는 크게 Keyspace partitioning, Overlay network의 두부분으로 나뉘는데 해쉬의 키 집합들을 DHT시스템 내부의 각 노드에 분산(keyspace partitioning)시키고 DHT의 엔트리 포인트에 상관없이 키의 위치를 찾아갈 수 있도록 라우팅하는 알고리즘을 이용해서 DHT시스템 내부의 네트워크(overlay network)를 떠돌며 목적지를 찾아가게 된다. 이게 바로 structured key based routing인데 쉽게 얘기하자면 해쉬 테이블 내부의 버킷(bucket)을 그룹으로 묶고 그룹 사이를 링크로 연결하여 자기가 원하는 정보가 있는 그룹을 찾아갈 수 있도록 해주는 것이다. 외부에서 보면 해쉬처럼 보이지만 내부에서 원하는 버킷을 찾아가는 방식은 기존의 해쉬와 다르다. &lt;/DIV&gt;
&lt;DIV class=author&gt;&lt;SPAN class=text&gt;&lt;FONT face=Tahoma size=1&gt;Posted by&lt;/FONT&gt;&lt;/SPAN&gt; 앤디군&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;SCRIPT src=&quot;http://mtgear.net/plugin/CallBack_bootstrapper?&amp;src=http://cfs.tistory.com/blog/plugins/CallBack/callback&amp;id=364&amp;callbackId=mtgearnet364624&amp;destDocId=callbacknestmtgearnet364624&amp;host=http://mtgear.net&amp;float=left&amp;random=914&quot;&gt;&lt;/SCRIPT&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>분산시스템 Decentralized Implementations</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121992"/>
		<id>tag:blog.daum.net,2009:sunnle.8121992</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-10-27T22:10:43Z</updated>
	    <published>2009-10-27T22:10:43Z</published>
	    <content type="html">
	    	&lt;P&gt;Decentralized Implementations&lt;/P&gt;
&lt;P&gt;p2p 시스템의 출현과 함께, 연구자들 또한 분산화된 속성 기반 네이밍 시스템들의 솔루션을 이미 찾고 있다. 여기서의 KEY 문제는 속성과 값이라는 한쌍에 대해&amp;nbsp;검색을 효율적으로, 즉, 전체 속성 공간을 통한 완전한 검색 방지를 수행할 수 있도록 효율적으로 매핑되어야 합니다. 다음 우리는 여러 가지 방법으로 이러한 매핑을 설정하는 방법을 살펴보겠습니다.&lt;/P&gt;
&lt;P&gt;Mapping to Distributed Hash Tables&lt;/P&gt;
&lt;P&gt;DHT-기반 시스템에 의해 지원되어지는 것이 필요한 곳의 케이스를 먼저 고래해 봅시다. &lt;/P&gt;
&lt;P&gt;LDAP 로서 &lt;/P&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>Buildbot</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121991"/>
		<id>tag:blog.daum.net,2009:sunnle.8121991</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-09-25T14:39:43Z</updated>
	    <published>2009-09-25T14:39:43Z</published>
	    <content type="html">
	    	&lt;p&gt;1. Buildbot&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;i.&amp;nbsp;빌드봇의 시작은 크로스 플랫폼에 탑재되는 시스템 개발자들에 의해서 시작됨&lt;/p&gt;
&lt;p&gt;&amp;nbsp;ii. 개발자가 고민해야 할 서로 다른 플랫폼에서의 컴파일 및 테스트를 위한 자동화 툴&lt;/p&gt;
&lt;p&gt;&amp;nbsp;iii. system architecture&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;a.&amp;nbsp;하나의 Build Master 와 여러개의 Build Slave 로 구성됨&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;b. star topology 로 연결됨&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img alt=&quot;Overview Diagram&quot; src=&quot;http://djmitche.github.com/buildbot/docs/0.7.11/images/overview.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;iv. Build&amp;nbsp;Master&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;a. 언제, 무엇을, 어떻게 빌드할 것인지에 대해서 모두 결정하고 만드는 역할&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;b. Build Slave 에게 실행되도록(빌드되도록)&amp;nbsp;명령어를 보내고, 결과를 받음&lt;/p&gt;&lt;p&gt;&amp;nbsp;v.&lt;/p&gt;
&lt;p&gt;...아..시간이 잘 안나네...좀 이따 써야지...^^;&lt;/p&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>buildbot on wnidows 빌드봇 윈도 설치</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121990"/>
		<id>tag:blog.daum.net,2009:sunnle.8121990</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-09-24T16:27:30Z</updated>
	    <published>2009-09-24T16:27:30Z</published>
	    <content type="html">
	    	&lt;P&gt;* 원문&lt;/P&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;
&lt;P&gt;&lt;A href=&quot;http://buildbot.net/trac/wiki/RunningBuildbotOnWindows&quot; target=&quot;_blank&quot;&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;http://buildbot.net/trac/wiki/RunningBuildbotOnWindows&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;* 내 방법&lt;/P&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class=ext-link style=&quot;COLOR: rgb(187,0,0); BORDER-BOTTOM: rgb(187,187,187) 1px dotted; TEXT-DECORATION: none&quot; href=&quot;http://www.python.org/&quot;&gt;&lt;SPAN class=icon style=&quot;BACKGROUND-POSITION: 0% 50%; PADDING-LEFT: 16px; BACKGROUND-IMAGE: url(http://buildbot.net/trac/chrome/common/extlink.gif); BACKGROUND-REPEAT: no-repeat; -webkit-background-clip: initial; -webkit-background-origin: initial&quot;&gt;Python 2.4.x&lt;/SPAN&gt;&lt;/A&gt;&amp;nbsp;&lt;A href=&quot;http://www.python.org/&quot; target=&quot;_blank&quot;&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;http://www.python.org/&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class=ext-link style=&quot;COLOR: rgb(187,0,0); BORDER-BOTTOM: rgb(187,187,187) 1px dotted; TEXT-DECORATION: none&quot; href=&quot;https://sourceforge.net/projects/pywin32/&quot;&gt;&lt;SPAN class=icon style=&quot;BACKGROUND-POSITION: 0% 50%; PADDING-LEFT: 16px; BACKGROUND-IMAGE: url(http://buildbot.net/trac/chrome/common/extlink.gif); BACKGROUND-REPEAT: no-repeat; -webkit-background-clip: initial; -webkit-background-origin: initial&quot;&gt;Python Win32 extensions&lt;/SPAN&gt;&lt;/A&gt;. Version of Win32 for Python 2.4. &lt;A href=&quot;http://sourceforge.net/projects/pywin32/&quot; target=&quot;_blank&quot;&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;http://sourceforge.net/projects/pywin32/&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class=ext-link style=&quot;COLOR: rgb(187,0,0); BORDER-BOTTOM: rgb(187,187,187) 1px dotted; TEXT-DECORATION: none&quot; href=&quot;http://twistedmatrix.com/&quot;&gt;&lt;SPAN class=icon style=&quot;BACKGROUND-POSITION: 0% 50%; PADDING-LEFT: 16px; BACKGROUND-IMAGE: url(http://buildbot.net/trac/chrome/common/extlink.gif); BACKGROUND-REPEAT: no-repeat; -webkit-background-clip: initial; -webkit-background-origin: initial&quot;&gt;Twisted framework&lt;/SPAN&gt;&lt;/A&gt;. Get version 2.4.0 for Python 2.4 &lt;A href=&quot;http://twistedmatrix.com/trac/&quot; target=&quot;_blank&quot;&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;http://twistedmatrix.com/trac/&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class=ext-link style=&quot;COLOR: rgb(187,0,0); BORDER-BOTTOM: rgb(187,187,187) 1px dotted; TEXT-DECORATION: none&quot; href=&quot;http://buildbot.sourceforge.net/&quot;&gt;&lt;SPAN class=icon style=&quot;BACKGROUND-POSITION: 0% 50%; PADDING-LEFT: 16px; BACKGROUND-IMAGE: url(http://buildbot.net/trac/chrome/common/extlink.gif); BACKGROUND-REPEAT: no-repeat; -webkit-background-clip: initial; -webkit-background-origin: initial&quot;&gt;Buildbot&lt;/SPAN&gt;&lt;/A&gt;&amp;nbsp; &lt;A href=&quot;http://buildbot.net/trac&quot; target=&quot;_blank&quot;&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;http://buildbot.net/trac&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;1. 위 정보 통해서 해당&amp;nbsp; 파일들 다운로드&lt;/P&gt;
&lt;P&gt;&amp;nbsp;2. 가장 먼저해야 할 일은 Python 설치(윈도용 간편 설치 파일 다운로드 주소 : &lt;A href=&quot;http://www.python.org/ftp/python/2.4.4/python-2.4.4.msi&quot; target=&quot;_blank&quot;&gt;http://www.python.org/ftp/python/2.4.4/python-2.4.4.msi&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Verdana color=#000000&gt;&amp;nbsp;3. 윈도용 실행을 위한 &lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;Python Win32 extensions 설치(&lt;A href=&quot;http://sourceforge.net/projects/pywin32/files/pywin32/Build%20214/pywin32-214.win32-py2.4.exe/download&quot;&gt;&lt;U&gt;&lt;FONT color=#0000ff&gt;http://sourceforge.net/projects/pywin32/files/pywin32/Build%20214/pywin32-214.win32-py2.4.exe/download&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&amp;nbsp;4. &lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;twisted framework 설치 (&lt;A href=&quot;http://tmrc.mit.edu/mirror/twisted/Twisted/8.2/Twisted_NoDocs-8.2.0.win32-py2.4.exe&quot; target=&quot;_blank&quot;&gt;http://tmrc.mit.edu/mirror/twisted/Twisted/8.2/Twisted_NoDocs-8.2.0.win32-py2.4.exe&lt;/A&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&amp;nbsp;5. PATH로 python 설치한 경로를 설정 (ex-&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;TT&gt;c:\python24&lt;/TT&gt;&lt;SPAN class=Apple-converted-space&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;TT&gt;c:\python24\scripts 를 환경변수 path에 추가) - 편리함을 위해&lt;/TT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;TT&gt;&amp;nbsp;6. PATHEXT 에 .py 추가&lt;/TT&gt;&lt;/FONT&gt;&lt;FONT face=&quot;Courier New&quot;&gt; - 편리함을 위해&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;FONT face=&quot;Courier New&quot;&gt;&amp;nbsp;7. Buildbot 설치 파일 압축 해제(&lt;A href=&quot;http://github.com/djmitche/buildbot/zipball/buildbot-0.7.10p2&quot; target=&quot;_blank&quot;&gt;http://github.com/djmitche/buildbot/zipball/buildbot-0.7.10p2&lt;/A&gt;)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;FONT face=&quot;Courier New&quot;&gt;&amp;nbsp;8. 해제한 폴더를 임의의 지정 위치에 두고 CMD 창을 띄워 해당 경로로 이동&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;FONT face=&quot;Courier New&quot;&gt;&amp;nbsp;9. 아래 명령어 통해 buildbot 설치&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;/P&gt;&lt;PRE class=wiki style=&quot;BORDER-RIGHT: rgb(215,215,215) 1px solid; PADDING-RIGHT: 0.25em; BORDER-TOP: rgb(215,215,215) 1px solid; OVERFLOW-Y: auto; PADDING-LEFT: 0.25em; OVERFLOW-X: auto; PADDING-BOTTOM: 0.25em; MARGIN: 1em 1.75em; BORDER-LEFT: rgb(215,215,215) 1px solid; PADDING-TOP: 0.25em; BORDER-BOTTOM: rgb(215,215,215) 1px solid; BACKGROUND-COLOR: rgb(247,247,247); -webkit-background-clip: initial; -webkit-background-origin: initial&quot;&gt;python setup.py install&lt;/PRE&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;FONT face=&quot;Courier New&quot;&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp; 10. 설치된 버전 확인 (Python의 scripts 폴더에 디폴트로 buildbot.bat 파일이 생성되니 해당 폴더로 이동 후 아래 명령어로 버전 확인&lt;SPAN class=Apple-style-span style=&quot;WORD-SPACING: 0px; FONT: medium Gulim; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px&quot;&gt;&lt;SPAN class=Apple-style-span style=&quot;FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif&quot;&gt;&lt;/P&gt;&lt;PRE class=wiki style=&quot;BORDER-RIGHT: rgb(215,215,215) 1px solid; PADDING-RIGHT: 0.25em; BORDER-TOP: rgb(215,215,215) 1px solid; OVERFLOW-Y: auto; PADDING-LEFT: 0.25em; OVERFLOW-X: auto; PADDING-BOTTOM: 0.25em; MARGIN: 1em 1.75em; BORDER-LEFT: rgb(215,215,215) 1px solid; PADDING-TOP: 0.25em; BORDER-BOTTOM: rgb(215,215,215) 1px solid; BACKGROUND-COLOR: rgb(247,247,247); -webkit-background-clip: initial; -webkit-background-origin: initial&quot;&gt;buildbot --version&lt;/PRE&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>CView::OnInitialUpdate 호출 메카니즘</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121989"/>
		<id>tag:blog.daum.net,2009:sunnle.8121989</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-07-13T22:02:54Z</updated>
	    <published>2009-07-13T22:02:54Z</published>
	    <content type="html">
	    	&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(102, 102, 102); line-height: 15px; font-family: 굴림; white-space: pre; &quot;&gt;CView::OnInitialUpdate 은 해당 뷰를 멤버로 갖는 부모 클래스에서 자식으로 인식해 OnCreate 후에 자식들 화면을 Update 하기 위해 딱 한 번 호출한다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(102, 102, 102); line-height: 15px; font-family: 굴림; white-space: pre; &quot;&gt;OnInitDialog 는 자기 자신이 Create 이후에 호출하지만 OnInitialUpdate 는 부모가 호출함으로 엄연히 다르다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#666666&quot; face=&quot;굴림&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 15px; white-space: pre;&quot;&gt;만약 뷰를 임의로 생성해서 호출한 경우 해당 생성 시점이 부모의 OnCreate 시점 이후에 생성 된다면 자식이어도 InitialUpdate 가 불리지 않는다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#666666&quot; face=&quot;굴림&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 15px; white-space: pre;&quot;&gt;왜냐하면 부모의 OnCreate 내부에서&amp;nbsp;딱 한 번 자식들에게 InitialUpdate 메시지 호출을 요청하기 때문에 강제적인 호출이 아니라면 불리지 않는다.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>ODBC Connection String</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121988"/>
		<id>tag:blog.daum.net,2009:sunnle.8121988</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-07-02T13:27:39Z</updated>
	    <published>2009-07-02T13:27:39Z</published>
	    <content type="html">
	    	&lt;P&gt;ORACLE&amp;nbsp;&lt;/P&gt;
&lt;P&gt;DRIVER={Microsoft ODBC for Oracle};server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=utf8)));UID=scott;PWD=tiger;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;DB2&lt;/P&gt;
&lt;P&gt;DRIVER={IBM DB2 ODBC DRIVER};Database=sample;hostname=127.0.0.1;port=50000;protocol=TCPIP;uid=db2inst1;pwd=manager;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SYBASE IQ&lt;/P&gt;
&lt;P&gt;DRIVER={Adaptive Server IQ};commlinks=tcpip(host=127.0.0.1;port=2638);uid=dba;pwd=manager;srvername=computer_network_name;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SYBASE ASE&lt;/P&gt;
&lt;P&gt;DRIVER={Sybase ASE ODBC Driver};NA=127.0.0.,5000;uid=sa;pwd=manager;db=master;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;MYSQL&lt;/P&gt;
&lt;P&gt;DRIVER={MySQL ODBC 3.51 Driver};server=127.0.0.1;port=3306;database=cgwdb;user=cgw;password=cgwroot;option=3;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;TIBERO&lt;/P&gt;
&lt;P&gt;DRIVER={Tibero ODBC Driver};server=127.0.0.1;port=8629;uid=sys;pwd=tibero;&lt;/P&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>웹페이지 페이징 (슬라이드 기법)</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121987"/>
		<id>tag:blog.daum.net,2009:sunnle.8121987</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-06-25T16:20:49Z</updated>
	    <published>2009-06-25T16:20:49Z</published>
	    <content type="html">
	    	&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://cfile215.uf.daum.net/attach/1563E71C4A43253173CD70&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://icon.daum-img.net/editor/p_etc_s.gif&quot;/&gt; pageList.js&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://cfile210.uf.daum.net/attach/1157D11C4A432532C07B3D&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://icon.daum-img.net/editor/p_html_s.gif&quot;/&gt; 특이한페이징.html&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>묵시적 커서(Implicit Cursor) 사용법 </title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121986"/>
		<id>tag:blog.daum.net,2009:sunnle.8121986</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-06-12T19:39:07Z</updated>
	    <published>2009-06-12T19:39:07Z</published>
	    <content type="html">
	    	&lt;P&gt;
&lt;TABLE cellSpacing=0 cellPadding=5 width=650 bgColor=#fbfbfb border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=subtitle bgColor=#e8e8e8&gt;&lt;IMG height=11 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/icon_content2.gif&quot; width=11 align=absMiddle&gt; 정의&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; PL/SQL 블록의 실행부에 DML이나 SELECT 명령문이 있을 경우 PL/SQL에서 묵시적인 커서를 자동적으로 생성&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 묵시적인 커서는 PL/SQL에서 자동적으로 관리&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 가장 최근에 실행된 SQL명령문의 상태를 알 수 있는 네가지 속성 제공&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=subtitle bgColor=#e8e8e8&gt;&lt;IMG height=11 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/icon_content2.gif&quot; width=11 align=absMiddle&gt; 속성&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&amp;nbsp; 
&lt;TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=5 width=&quot;100%&quot; borderColorLight=#c0c0c0 border=1&gt;
&lt;TBODY&gt;
&lt;TR bgColor=#e0e8c5&gt;
&lt;TD vAlign=center width=&quot;23%&quot;&gt;
&lt;P align=center&gt;&lt;B&gt;&lt;FONT face=굴림&gt;구 분&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;76%&quot;&gt;
&lt;P align=center&gt;&lt;B&gt;&lt;FONT face=굴림&gt;내 용&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=center width=&quot;23%&quot;&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;SQL%ROWCOUNT&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;76%&quot;&gt;
&lt;P&gt;&lt;B&gt;&lt;FONT face=바탕&gt;·&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=굴림&gt;가장 최근에 실행한 SQL 명령문에 의해 영향을 받은 행의 &lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;개수 검사&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=center width=&quot;23%&quot;&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;SQL%FOUND&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;76%&quot;&gt;
&lt;P&gt;&lt;B&gt;&lt;FONT face=바탕&gt;·&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=굴림&gt;가장 최근에 실행한 SQL 명령문에 영향을 받은 행의 존재 &lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;유무 검사&lt;/FONT&gt; 
&lt;P&gt;&lt;B&gt;&lt;FONT face=바탕&gt;·&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=굴림&gt;영향을 받은 행이 하나 이상이면 TRUE값 반환&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=center width=&quot;23%&quot;&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;SQL%NOTFOUND&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;76%&quot;&gt;
&lt;P&gt;&lt;B&gt;&lt;FONT face=바탕&gt;·&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=굴림&gt;가장 최근에 실행한 SQL 명령문에 영향을 받은 행이 없으면 &lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;TRUE값 반환&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=center width=&quot;23%&quot;&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;SQL%ISOPEN&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;76%&quot;&gt;
&lt;P&gt;&lt;B&gt;&lt;FONT face=바탕&gt;·&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=굴림&gt;가장 최근에 실행한 SQL 명령문의 묵시적 커서가 열려 있는&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face=굴림&gt;지 여부 검사&lt;/FONT&gt; 
&lt;P&gt;&lt;B&gt;&lt;FONT face=바탕&gt;·&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=굴림&gt;PL/SQL의 실행이 끝나면 묵시적 커서가 닫히므로 이 속성의&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face=굴림&gt;값은 항상 FALSE&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=ref&gt;☞ 사용예 : SQL%ROWCOUNT&lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;SQL&gt; CREATE OR REPLACE PROCEDURE imp_cur(v_deptno IN NUMBER)&lt;BR&gt;IS&lt;BR&gt;v_cnt number:=0;&lt;/P&gt;
&lt;P class=exam&gt;BEGIN&lt;BR&gt;DELETE FROM emp WHERE deptno=v_deptno;&lt;BR&gt;v_cnt := SQL%ROWCOUNT;&lt;BR&gt;DBMS_OUTPUT.PUT_LINE(v_cnt||'행이 삭제되었습니다.');&lt;BR&gt;&lt;/P&gt;
&lt;P class=exam&gt;END imp_cur;&lt;/P&gt;
&lt;P class=exam&gt;/&lt;/P&gt;
&lt;P&gt;Procedure created.&lt;/P&gt;
&lt;P class=ref&gt;☞ 실행 및 출력결과&lt;/P&gt;
&lt;P class=exam&gt;SQL&gt; EXEC imp_cur(30)&lt;/P&gt;
&lt;P&gt;5행이 삭제되었습니다.&lt;/P&gt;
&lt;P&gt;PL/SQL procedure successfully completed&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>명시적 커서(Explicit Cursor) 사용법 </title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121985"/>
		<id>tag:blog.daum.net,2009:sunnle.8121985</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-06-12T19:37:23Z</updated>
	    <published>2009-06-12T19:37:23Z</published>
	    <content type="html">
	    	&lt;P&gt;
&lt;TABLE cellSpacing=0 cellPadding=5 width=650 bgColor=#fbfbfb border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=subtitle bgColor=#e8e8e8&gt;&lt;IMG height=11 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/icon_content2.gif&quot; width=11 align=absMiddle&gt; 정의&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 명시적 커서는 하나 이상의 행을 액세스하는 SELECT 명령문을 처리하기 위해서사용&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 선언부에서 명시적으로 커서 선언&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 명시적 커서는 블록의 실행부에서 커서 조작 명령을 통해 처리&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 명령을 이용하여 질의에 의해 반환된 행들을 한번에 한 행씩 처리&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;커서 선언은 선언부에서, 커서 OPEN, FETCH, CLOSE 정의는 실행부에서 정의 &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=subtitle bgColor=#e8e8e8&gt;&lt;IMG height=11 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/icon_content2.gif&quot; width=11 align=absMiddle&gt; 처리 과정&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&amp;nbsp;① 커서 선언(DECLARE CURSOR절) : 커서는 공유풀 내의 전용 SQL 영역에 생성&lt;BR&gt;&amp;nbsp;② 커서 열기(OPEN절) : 커서를 활성화하여 커서와 연관된 SELECT 명령문 실행&lt;BR&gt;&amp;nbsp;③ 데이타 추출(FETCH절) : SELECT명령문에 의해 검색된 행 중에서 커서가 가리키는 행을 액세스&lt;BR&gt;&amp;nbsp;④ 커서 닫기(CLOSE절) : 오픈된 커서를 비활성화&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=subtitle bgColor=#e8e8e8&gt;&lt;IMG height=11 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/icon_content2.gif&quot; width=11 align=absMiddle&gt; 커서 선언&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;커서를 선언하고, 커서와 관련된 SELECT 명령문 정의&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; SELECT 문장에는 INTO절을 사용하지 않음&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; INTO절은 실행부의 FETCH 명령문에서 사용&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;커서 선언 부분에서 지역 변수나 전역 변수 사용 가능&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;커서 정의에서 사용되는 지역 변수나 전역 변수는 반드시 커서 선언 전에 정의 필요&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 변수는 컬럼명과 다르게 선언 
&lt;P class=ref&gt;☞ 사용법 &lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;DECLARE CURSOR cursor IS&lt;BR&gt;select_statement;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=ref&gt;☞ 사용예 &lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;DECLARE&lt;BR&gt;CURSOR Cursor_Emp IS&lt;BR&gt;SELECT ename, deptno&lt;BR&gt;FROM emp&lt;BR&gt;WHERE sal &gt; 2000;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=subtitle bgColor=#e8e8e8&gt;&lt;IMG height=11 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/icon_content2.gif&quot; width=11 align=absMiddle&gt; 커서 열기 (OPEN)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 공유풀의 라이브러리 캐쉬에 설정된 커서 영역을 오픈&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 선언된 커서와 연관된 SELECT 명령문을 실행하여 active set을 구성&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 커서는 검색된 행으로 구성된 active set 중에서 첫 번째 행을 가르킴&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 실행과정&lt;BR&gt;&amp;nbsp;&amp;nbsp;- 구문분석(Parsing) : 문장이나 의미, 권한 등이 제대로 되어 있는지 검사&lt;BR&gt;&amp;nbsp;&amp;nbsp;- 바인딩(Binding) : 변수의 값을 할당&lt;BR&gt;&amp;nbsp;&amp;nbsp;- 실행(Excute) : 라이브러리 캐쉬에 할당된 커서 영역을 오픈하고 active set구성 
&lt;P class=ref&gt;☞ 사용법&lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;OPEN cursor;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=ref&gt;☞ 사용예 &lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;OPEN Cursor_Emp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=subtitle bgColor=#e8e8e8&gt;&lt;IMG height=11 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/icon_content2.gif&quot; width=11 align=absMiddle&gt; 데이타 추출 (FETCH)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 현재 커서가 가르키는 행의 값을 변수로 할당하는 과정 &lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 커서 선언시 사용한 SELECT 명령문의 컬럼 개수와 데이타타입이 FECTH ∼&amp;nbsp;&amp;nbsp;INTO절의 변수 개수, 데이타타입과 &lt;BR&gt;동일해야 함 
&lt;P class=ref&gt;☞ 사용법&lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;FETCH cursor INTO variable_list;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=630&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; variable_list&lt;BR&gt;&amp;nbsp;&amp;nbsp;- 현재 검색된 결과 행을 저장하기 위한 변수 리스트&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;- variable_list 변수의 개수는 커서 선언부에서 정의한 SELECT문장의 컬럼 개수와 동일&lt;BR&gt;&amp;nbsp;&amp;nbsp;- 커서 안에서 PL/SQL 레코드 타입 설정이 가능하며, variable_list에도 사용 가능&lt;/P&gt;
&lt;P class=ref&gt;☞ 사용예 &lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;FETCH Cursor_Emp INTO v_ename, v_deptno;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;TABLE cellSpacing=0 cellPadding=5 width=650 bgColor=#fbfbfb border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=subtitle bgColor=#e8e8e8&gt;&lt;IMG height=11 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/icon_content2.gif&quot; width=11 align=absMiddle&gt; 커서 닫기 (CLOSE)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;현재 오픈된 커서를 닫음&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 커서 오픈(OPEN) 명령문에 의해 할당된 커서 영역 반환&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 현재 커서를 닫은 후에 다시 해당 커서를 오픈 가능 
&lt;P class=ref&gt;☞ 사용법&lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;CLOSE cursor_name;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=ref&gt;☞ 사용예 &lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;CLOSE Cursor_Emp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=630&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;!-- tip --&gt;&lt;BR&gt;&lt;IMG height=25 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/tip.gif&quot; width=50&gt; 
&lt;TABLE class=tip width=637 align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=631&gt;
&lt;P class=endtitle&gt;▶ 명시적 커서 수행 방법 &lt;/P&gt;&lt;IMG src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/15-3-a.gif&quot;&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=subtitle bgColor=#e8e8e8&gt;&lt;IMG height=11 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/icon_content2.gif&quot; width=11 align=absMiddle&gt; 커서 속성&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;커서 상태를 검사하기 위해 제공되는 네 가지 속성&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;SQL 명령문에서 커서 속성을 직접 참조할 수 없음 
&lt;TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=5 width=&quot;100%&quot; borderColorLight=#c0c0c0 border=1&gt;
&lt;TBODY&gt;
&lt;TR bgColor=#e0e8c5&gt;
&lt;TD vAlign=center width=&quot;20%&quot;&gt;
&lt;P align=center&gt;&lt;B&gt;&lt;FONT face=굴림&gt;구 분&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;12%&quot;&gt;
&lt;P align=center&gt;&lt;B&gt;&lt;FONT face=굴림&gt;타입&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;66%&quot;&gt;
&lt;P align=center&gt;&lt;B&gt;&lt;FONT face=굴림&gt;내 용&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=center width=&quot;20%&quot;&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;%ROWCOUNT&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;12%&quot;&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;Number&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;66%&quot;&gt;
&lt;P&gt;&lt;B&gt;&lt;FONT face=바탕&gt;·&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=굴림&gt;현재까지 FETCH된 행의 갯수&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=center width=&quot;20%&quot;&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;%FOUND&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;12%&quot;&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;Boolean&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;66%&quot;&gt;
&lt;P&gt;&lt;B&gt;&lt;FONT face=바탕&gt;·&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=굴림&gt;FETCH할 행이 존재할 경우 값은 TRUE&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=center width=&quot;20%&quot;&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;%NOTFOUND&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;12%&quot;&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;Boolean&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;66%&quot;&gt;
&lt;P&gt;&lt;B&gt;&lt;FONT face=바탕&gt;·&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=굴림&gt;FETCH할 올 행이 없을 경우 값은 TRUE&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=center width=&quot;20%&quot;&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;%ISOPEN&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;12%&quot;&gt;
&lt;P&gt;&lt;FONT face=굴림&gt;Boolean&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=center width=&quot;66%&quot;&gt;
&lt;P&gt;&lt;B&gt;&lt;FONT face=바탕&gt;·&lt;/FONT&gt;&lt;/B&gt;&lt;FONT face=굴림&gt;커서가 오픈되어 있을 경우 값은 TRUE&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=ref&gt;☞ 사용예 : %ROWCOUNT&lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;OPEN Cursor_Emp;&lt;/P&gt;
&lt;P class=exam&gt;LOOP&lt;BR&gt;FETCH Cursor_Emp INTO v_emp, v_deptno;&lt;BR&gt;EXIT WHEN Cursor_Emp%ROWCOUNT &gt;= 5;&lt;BR&gt;END LOOP;&lt;/P&gt;
&lt;P class=exam&gt;CLOSE Cursor_Emp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=ref&gt;☞ 사용예 : %NOTFOUND &lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;OPEN Cursor_Emp;&lt;/P&gt;
&lt;P class=exam&gt;LOOP&lt;BR&gt;FETCH Cursor_Emp INTO v_emp, v_deptno;&lt;BR&gt;EXIT WHEN Cursor_Emp%NOTFOUND;&lt;BR&gt;END LOOP;&lt;/P&gt;
&lt;P class=exam&gt;CLOSE Cursor_Emp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=ref&gt;☞ 사용예 : %ISOPEN &lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;IF NOT Cursor_Emp%ISOPEN THEN&lt;BR&gt;OPEN Cursor_Emp;&lt;BR&gt;END IF;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=ref&gt;☞ 커서를 사용한 프로시져 생성 실습&lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=ref&gt;☞ 프로시져 생성&lt;/P&gt;
&lt;P class=exam&gt;SQL&gt; CREATE OR REPLACE PROCEDURE cur_exam (v_sal IN number)&lt;BR&gt;IS&lt;BR&gt;v_ename emp.ename%TYPE;&lt;BR&gt;v_dname dept.dname%TYPE;&lt;/P&gt;
&lt;P class=exam&gt;CURSOR Cursor_Emp IS&lt;BR&gt;SELECT ename, dname&lt;BR&gt;FROM &amp;nbsp;&amp;nbsp;emp e, dept d&lt;BR&gt;WHERE &amp;nbsp;e.deptno = d.deptno&lt;BR&gt;AND &amp;nbsp;&amp;nbsp;&amp;nbsp;e.sal &gt; v_sal;&lt;/P&gt;
&lt;P class=exam&gt;BEGIN&lt;BR&gt;OPEN Cursor_Emp;&lt;BR&gt;IF NOT Cursor_Emp%ISOPEN THEN&lt;BR&gt;OPEN Cursor_Emp;&lt;BR&gt;END IF;&lt;BR&gt;DBMS_OUTPUT.PUT_LINE('다음은 4월 승진자 명단입니다.');&lt;/P&gt;
&lt;P class=exam&gt;LOOP&amp;nbsp;&lt;BR&gt;FETCH Cursor_Emp INTO v_ename, v_dname;&lt;BR&gt;EXIT WHEN Cursor_Emp%ROWCOUNT &gt;= 5&lt;BR&gt;OR Cursor_Emp%NOTFOUND;&lt;BR&gt;DBMS_OUTPUT.PUT_LINE(v_dname||' 부서의 '||v_ename||'씨');&lt;BR&gt;END LOOP;&lt;/P&gt;
&lt;P class=exam&gt;CLOSE Cursor_Emp;&lt;BR&gt;DBMS_OUTPUT.PUT_LINE('발령일은 4월 1일 입니다.');&lt;BR&gt;DBMS_OUTPUT.PUT_LINE(' *^^* 만우절 행사였습니다.');&lt;BR&gt;&lt;/P&gt;
&lt;P class=exam&gt;END cur_exam;&lt;/P&gt;
&lt;P class=exam&gt;/&lt;/P&gt;
&lt;P&gt;Procedure created.&lt;/P&gt;
&lt;P class=ref&gt;☞ DBMS_OUTPUT.PUT_LINE을 사용하기위해 SERVEROUTPUT 환경변수를 ON상태로 설정&lt;/P&gt;
&lt;P class=exam&gt;SQL&gt; SET SERVEROUTPUT ON&lt;/P&gt;
&lt;P class=ref&gt;☞ 실행 및 출력결과&lt;/P&gt;
&lt;P class=exam&gt;SQL&gt; EXEC cur_exam(2500);&lt;/P&gt;
&lt;P&gt;다음은 4월 승진자 명단입니다.&lt;BR&gt;ACCOUNTING 부서의 KING씨&lt;BR&gt;RESEARCH 부서의 KEBIN씨&lt;BR&gt;RESEARCH 부서의 SCOTT씨&lt;BR&gt;RESEARCH 부서의 LEE씨&lt;BR&gt;발령일은 4월 1일 입니다.&lt;BR&gt;*^^* 만우절 행사였습니다.&lt;/P&gt;
&lt;P&gt;PL/SQL procedure successfully completed.&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=630&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=subtitle bgColor=#e8e8e8&gt;&lt;IMG height=11 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/icon_content2.gif&quot; width=11 align=absMiddle&gt; CURSOR FOR 루프절&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;PL/SQL의 선언부에 이미 명시적 커서가 선언되어 있어야 함&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; FOR 루프가 초기화될 때 내부적으로 커서가 오픈&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; FOR 루프가 반복될 때마다 커서가 가르키는 행을 액세스&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 루프는 마지막 행을 추출한 후 자동적으로 FOR 루프를 종료&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; OPEN, FETCH, CLOSE의 기능을 하나의 FOR 루프에서 실행 가능 
&lt;P class=ref&gt;☞ 사용법&lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;FOR record_name IN cursor_name LOOP&lt;BR&gt;statement1;&lt;BR&gt;statement2;&lt;BR&gt;..................&lt;BR&gt;END LOOP;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; record_name : 내부적으로 선언한 레코드&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; cursor_name : 선언부에서 이미 선언한 커서명&lt;/P&gt;
&lt;P class=ref&gt;☞ 사용예 &lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=ref&gt;☞ 프로시져 생성&lt;/P&gt;
&lt;P class=exam&gt;SQL&gt; CREATE OR REPLACE PROCEDURE cur_for(dnum IN NUMBER)&lt;BR&gt;IS&lt;BR&gt;CURSOR emp_cur IS&lt;BR&gt;SELECT sal, comm&lt;BR&gt;FROM &amp;nbsp;&amp;nbsp;emp&lt;BR&gt;WHERE &amp;nbsp;deptno = dnum;&lt;BR&gt;total &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NUMBER := 0;&lt;BR&gt;high_paid NUMBER := 0;&lt;BR&gt;high_comm NUMBER := 0;&lt;/P&gt;
&lt;P class=exam&gt;BEGIN&lt;BR&gt;FOR emp_rec IN emp_cur LOOP&lt;BR&gt;emp_rec.comm := NVL(emp_rec.comm,0);&lt;BR&gt;total := total + emp_rec.sal + emp_rec.comm;&lt;BR&gt;IF emp_rec.sal &gt; 2000 THEN&lt;BR&gt;high_paid := high_paid + 1;&lt;BR&gt;END IF;&lt;BR&gt;IF emp_rec.comm &gt; emp_rec.sal THEN&lt;BR&gt;high_comm := high_comm + 1;&lt;BR&gt;END IF;&lt;BR&gt;END LOOP;&lt;BR&gt;DBMS_OUTPUT.PUT_LINE('1. 전체 : ' ||total);&lt;BR&gt;DBMS_OUTPUT.PUT_LINE('2. $2000이상 받는 사원수 : '||high_paid);&lt;BR&gt;DBMS_OUTPUT.PUT_LINE('3. 월급보다 커미션이 더 많은 사원수 : '||high_comm);&lt;BR&gt;&lt;/P&gt;
&lt;P class=exam&gt;END cur_for;&lt;/P&gt;
&lt;P class=exam&gt;/&lt;/P&gt;
&lt;P&gt;Procedure created.&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=630&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=ref&gt;☞ 현재 데이타 확인&lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;SQL&gt; select sal,comm from emp where deptno=30;&lt;/P&gt;
&lt;TABLE cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=103&gt;
&lt;P&gt;SAL&lt;/P&gt;&lt;/TD&gt;
&lt;TD width=511&gt;
&lt;P&gt;COMM&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=103&gt;
&lt;P&gt;--------&lt;/P&gt;&lt;/TD&gt;
&lt;TD width=511&gt;
&lt;P&gt;---------&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=103&gt;
&lt;P&gt;1600&lt;/P&gt;&lt;/TD&gt;
&lt;TD width=511&gt;
&lt;P&gt;300&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=103&gt;
&lt;P&gt;1250&lt;/P&gt;&lt;/TD&gt;
&lt;TD width=511&gt;
&lt;P&gt;1400&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=103&gt;
&lt;P&gt;2850&lt;/P&gt;&lt;/TD&gt;
&lt;TD width=511&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=103&gt;
&lt;P&gt;1500&lt;/P&gt;&lt;/TD&gt;
&lt;TD width=511&gt;
&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=103&gt;
&lt;P&gt;950&lt;/P&gt;&lt;/TD&gt;
&lt;TD width=511&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=ref&gt;☞ 실행 및 출력결과&lt;/P&gt;
&lt;P class=exam&gt;SQL&gt; EXEC cur_for(30);&lt;/P&gt;
&lt;P&gt;1. 전체 : 9850&lt;BR&gt;2. $2000이상 받는 사원수 : 1&lt;BR&gt;3. 월급보다 커미션이 더 많은 사원수 : 1&lt;/P&gt;
&lt;P&gt;PL/SQL procedure successfully completed.&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=subtitle bgColor=#e8e8e8&gt;&lt;IMG height=11 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/icon_content2.gif&quot; width=11 align=absMiddle&gt; FOR UPDATE 절&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;FOR UPDATE절을 사용한 트랜잭션이 완료되기 전까지 테이블에 액세스하지 못하도록 명시적으로 락을 생성하는&lt;BR&gt;방법&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; update나 delete 명령 수행 전에 대상 행에 대해 락을 생성하고자 할 때 사용 
&lt;P class=ref&gt;☞ 사용법&lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;SELECT ...&lt;BR&gt;FROM &amp;nbsp;&amp;nbsp;...&lt;BR&gt;FOR UPDATE [OF column_reference] [NOWAIT];&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=630&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;질의한 결과 행이 다른 세션에 의해 이미 락이 걸려있다면, 즉시 오라클 에러를 반환&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;NOWAIT명령을 사용하지 않으면 다른 세션에 의한 락이 풀릴 때까지 기다림&lt;/P&gt;
&lt;P class=ref&gt;☞ 사용예 :&lt;FONT face=굴림&gt;update, delete문장에 의해 사용될 deptno가 10인 사원의 행을 질의하면서 해당 행에 대해 락을 생성&lt;/FONT&gt; &lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;DECLARE&lt;BR&gt;CURSOR emp_cursor IS&lt;BR&gt;SELECT empno, ename, sal&lt;BR&gt;FROM &amp;nbsp;&amp;nbsp;emp&lt;BR&gt;WHERE &amp;nbsp;deptno = 10&lt;BR&gt;FOR UPDATE OF sal NOWAIT;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=630&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=subtitle bgColor=#e8e8e8&gt;&lt;IMG height=11 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/icon_content2.gif&quot; width=11 align=absMiddle&gt; WHERE CURRENT OF절&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 커서를 이용하여 가장 최근에 검색된 행을 삭제 또는 수정하는 경우에 사용&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 커서를 선언할 때 FOR UPDATE절이 반드시 있어야 함&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; WHERE CURRENT OF절에 의해 지정된 커서는 가장 최근에 FETCH한 행을 가르킴 
&lt;P class=ref&gt;☞ 사용예&lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=ref&gt;☞ 프로시져 생성&lt;/P&gt;
&lt;P class=exam&gt;SQL&gt; CREATE OR REPLACE PROCEDURE cur_where&lt;BR&gt;IS&lt;BR&gt;CURSOR emp_cur IS&lt;BR&gt;SELECT ename, rowid&lt;BR&gt;FROM &amp;nbsp;&amp;nbsp;emp&lt;BR&gt;WHERE &amp;nbsp;deptno = 30&lt;BR&gt;FOR UPDATE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;v_ename &amp;nbsp;&amp;nbsp;emp.ename%TYPE;&lt;BR&gt;v_rowid &amp;nbsp;&amp;nbsp;ROWID;&lt;/P&gt;
&lt;P class=exam&gt;BEGIN&lt;BR&gt;OPEN emp_cur;&lt;BR&gt;LOOP&lt;BR&gt;FETCH emp_cur INTO v_ename,v_rowid;&lt;BR&gt;EXIT WHEN emp_cur%NOTFOUND;&lt;/P&gt;
&lt;P class=exam&gt;UPDATE emp&lt;BR&gt;SET &amp;nbsp;&amp;nbsp;&amp;nbsp;sal = sal*2&lt;BR&gt;WHERE CURRENT OF emp_cur;&lt;/P&gt;
&lt;P class=exam&gt;-- 보통은 UPDATE emp SET sal = sal*2 WHERE rowid = v_rowid;&lt;BR&gt;-- 이나 UPDATE emp SET sal = sal*2 WHERE ename = v_ename; 로&lt;BR&gt;-- 표현함.&lt;BR&gt;END LOOP;&lt;BR&gt;CLOSE emp_cur;&lt;BR&gt;COMMIT;&lt;BR&gt;END;&lt;/P&gt;
&lt;P class=exam&gt;/&lt;/P&gt;
&lt;P&gt;Procedure created.&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=630&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=subtitle bgColor=#e8e8e8&gt;&lt;IMG height=11 src=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/image/icon_content2.gif&quot; width=11 align=absMiddle&gt; 매개변수가 있는 커서 선언&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt; 커서 선언시 매개변수 사용 가능&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;매개변수의 데이타타입은 스칼라 변수와 동일하고 크기 지정은 불가능&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;매개변수는 커서와 관련된 SELECT 명령문에서 참조하기 위해 사용&lt;BR&gt;&lt;FONT class=dotfont&gt;●&lt;/FONT&gt;&amp;nbsp;커서가 오픈될 때 커서에 매개변수 값을 전달하여 질의 내에서 사용 
&lt;P class=ref&gt;☞ 사용법&lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;CURSOR cursor_name&lt;BR&gt;[parameter datatype, ...)]&lt;BR&gt;IS&lt;BR&gt;select_statement;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P class=ref&gt;☞ 사용예 &lt;/P&gt;
&lt;TABLE class=sqlbox align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=630&gt;
&lt;P class=exam&gt;CURSOR emp_cur(dnum number) IS&lt;BR&gt;SELECT sal, comm&lt;BR&gt;FROM &amp;nbsp;&amp;nbsp;emp&lt;BR&gt;WHERE &amp;nbsp;deptno = dnum;&lt;BR&gt;BEGIN&lt;BR&gt;FOR emp_rec IN emp_cur(30) LOOP&lt;BR&gt;...&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;- 매개변수가 있는 커서를 선언하면 매개변수의 값이 바뀔때 마다 질의 조건이 바뀌므로 여러 개의 커서를 &lt;BR&gt;선언하는 것과 동일한 효과를 얻을 수 있음&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 15px 0px 0px&quot;&gt;출처 : &lt;A href=&quot;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/chap15-3.html&quot;&gt;http://www.dbcore.net/~corenet/education/speciallec/sqlplsql/chap15-3.html&lt;/A&gt;&lt;/P&gt;
	    </content>
	    	</entry>
    	<entry>
	    <title>oracle9i - FLASHBACK</title>
		<link rel="alternate" type="text/html" href="http://blog.daum.net/sunnle/8121984"/>
		<id>tag:blog.daum.net,2009:sunnle.8121984</id>
	    <author>
		    <name>멋진남자</name>
	    </author>
	    <updated>2009-06-12T15:48:17Z</updated>
	    <published>2009-06-12T15:48:17Z</published>
	    <content type="html">
	    	&lt;P&gt;- Oracle 9i 이후 적용&lt;BR&gt;- DML 복구만 가능 (DDL 복구 불가 - drop table등..)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;[체크사항]&lt;BR&gt;1. undo 관련 파라미터 확인&lt;BR&gt;&amp;nbsp;SQL&gt; show parameter undo;&lt;BR&gt;&amp;nbsp;- undo_management AUTO 확인 ( undo 관련 관리를 oracle이 하겠다. 9i 이후)&lt;BR&gt;&amp;nbsp;- undo_retention 시간(초) 확인 : Default 900(초) - 15분&lt;BR&gt;&amp;nbsp;- undo_tablespace 생성 여부 확인 ( 없으면 생성해야 함 )&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;BR&gt;2. 복구하고자 하는 계정에 대해 dbms_flashback 패키지 실행권한이 있어야 함 &lt;BR&gt;(없을경우 DBA에게 요청) &lt;BR&gt;&amp;nbsp;- grant execute on dbms_flashback to scott; &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;[시나리오]&lt;/P&gt;
&lt;P&gt;1. 임시 테이블 생성&lt;BR&gt;SQL&gt; create table f_emp as select * from emp;&lt;BR&gt;SQL &gt; select * from f_emp where ename = 'MILLER';&amp;nbsp;&amp;nbsp;&amp;nbsp; --데이타 확인 &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;2. 현재 oracle 시각 / SCN 을 구한다. &lt;/P&gt;
&lt;P&gt;SQL&gt; SELECT SYSTIMESTAMP,&amp;nbsp; dbms_flashback.get_system_change_number&amp;nbsp;FROM dual;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;SYSTIMESTAMP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;GET_SYSTEM_CHANGE_NUMBER&lt;BR&gt;-----------------------------------------------------------&lt;BR&gt;09/05/04 12:30:33.614000 +09:00&amp;nbsp;&amp;nbsp; 314700&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;3. 데이타 삭제 &lt;BR&gt;SQL&gt; delete from f_emp where ename = 'MILLER';&lt;BR&gt;SQL&gt; commit;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;4. 플래시백 실행 (삭제시간 이전으로) &lt;BR&gt;SQL&gt; EXCUTE dbms_flashback.enable_at_time( to_timestamp('20090504 12:30:00', 'YYYYMMDD HH24:MI:SS'));&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;5. 데이터 조회 / 확인 /&amp;nbsp; 복구 &lt;BR&gt;SQL&gt; select * from f_emp where ename = 'MILLER';&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;6. 플래시백 종료 &lt;BR&gt;SQL&gt; EXECUTE dbms_flashback.disable; 
&lt;DIV class=autosourcing-stub&gt;
&lt;P style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; FONT-SIZE: 12px; PADDING-BOTTOM: 0px; MARGIN: 11px 0px 7px; PADDING-TOP: 0px; FONT-STYLE: normal; FONT-FAMILY: Dotum&quot;&gt;&lt;STRONG style=&quot;PADDING-RIGHT: 7px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px&quot;&gt;[출처]&lt;/STRONG&gt; &lt;A href=&quot;http://blog.naver.com/paro01/100066381972&quot; target=_blank&gt;&lt;FONT color=#0000ff&gt;oracle9i - FLASHBACK&lt;/FONT&gt;&lt;/A&gt;&lt;SPAN style=&quot;PADDING-RIGHT: 7px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px&quot;&gt;|&lt;/SPAN&gt;&lt;STRONG style=&quot;PADDING-RIGHT: 7px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px&quot;&gt;작성자&lt;/STRONG&gt; &lt;A href=&quot;http://blog.naver.com/paro01&quot; target=_blank&gt;&lt;FONT color=#0000ff&gt;paro01&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
	    </content>
	    	</entry>
      </feed>
