<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5314634007543171412</id><updated>2011-08-02T22:20:56.781-07:00</updated><category term='book postscript'/><category term='Spring DM'/><category term='springshowcase'/><category term='spring'/><category term='useful'/><category term='development'/><category term='tweet'/><category term='My Think'/><title type='text'>Beyond J2EE</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>89</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-553789310592912437</id><published>2010-08-10T19:28:00.000-07:00</published><updated>2010-08-10T19:29:19.923-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Struts 2로 동적 데이터 처리하기</title><content type='html'>&lt;a href="http://durl.kr/28q9c"&gt;http://durl.kr/28q9c&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-553789310592912437?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/553789310592912437/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/08/struts-2.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/553789310592912437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/553789310592912437'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/08/struts-2.html' title='Struts 2로 동적 데이터 처리하기'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-366691327928860740</id><published>2010-08-02T22:45:00.000-07:00</published><updated>2010-08-02T22:46:35.601-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>JAXB가 싫다면...XStream 사용하기</title><content type='html'>&lt;a href="http://durl.kr/27ejc"&gt;http://durl.kr/27ejc&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-366691327928860740?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/366691327928860740/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/08/jaxb-xstream.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/366691327928860740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/366691327928860740'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/08/jaxb-xstream.html' title='JAXB가 싫다면...XStream 사용하기'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-5925232653827240084</id><published>2010-07-25T23:27:00.000-07:00</published><updated>2010-07-25T23:28:58.902-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Spring MVC 3 Showcase</title><content type='html'>&lt;a href="http://durl.kr/266km"&gt;http://durl.kr/266km&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-5925232653827240084?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/5925232653827240084/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/spring-mvc-3-showcase.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5925232653827240084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5925232653827240084'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/spring-mvc-3-showcase.html' title='Spring MVC 3 Showcase'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-4084995354945516534</id><published>2010-07-22T07:45:00.000-07:00</published><updated>2010-07-22T07:46:11.090-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>How to Test for Cross-site Scripting (XSS)</title><content type='html'>&lt;h2 class="post-title"&gt;http://utku-utkan.appspot.com/2010/07/13/how-to-test-for-cross-site-scrpiting-xss/&lt;br /&gt;&lt;/h2&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-4084995354945516534?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/4084995354945516534/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/how-to-test-for-cross-site-scripting.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4084995354945516534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4084995354945516534'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/how-to-test-for-cross-site-scripting.html' title='How to Test for Cross-site Scripting (XSS)'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-4720173013656717886</id><published>2010-07-21T19:20:00.000-07:00</published><updated>2010-07-21T19:21:32.123-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>REST, 웹 서비스, REST-ful 서비스</title><content type='html'>&lt;a href="http://durl.kr/25ifk"&gt;http://durl.kr/25ifk&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-4720173013656717886?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/4720173013656717886/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/rest-rest-ful.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4720173013656717886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4720173013656717886'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/rest-rest-ful.html' title='REST, 웹 서비스, REST-ful 서비스'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-3476545553646846831</id><published>2010-07-16T22:47:00.000-07:00</published><updated>2010-07-16T22:48:17.204-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Spring 3.0 MVC Series Part 5: Internationalization &amp; Localization Tutorial with Example</title><content type='html'>http://durl.kr/24rvk&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-3476545553646846831?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/3476545553646846831/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/spring-30-mvc-series-part-5.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3476545553646846831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3476545553646846831'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/spring-30-mvc-series-part-5.html' title='Spring 3.0 MVC Series Part 5: Internationalization &amp; Localization Tutorial with Example'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-6167688355175540742</id><published>2010-07-16T22:45:00.002-07:00</published><updated>2010-07-16T22:48:17.205-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Spring 3.0 MVC Series Part 4: Internationalization &amp; Localization Tutorial with Example</title><content type='html'>http://durl.kr/24rvc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-6167688355175540742?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/6167688355175540742/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/spring-30-mvc-series-part-4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6167688355175540742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6167688355175540742'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/spring-30-mvc-series-part-4.html' title='Spring 3.0 MVC Series Part 4: Internationalization &amp; Localization Tutorial with Example'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-5604356750129707702</id><published>2010-07-16T22:45:00.001-07:00</published><updated>2010-07-16T22:48:17.206-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Spring 3.0 MVC Series Part 3: Handling Forms in Spring 3.0 MVC</title><content type='html'>http://durl.kr/24rv7&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-5604356750129707702?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/5604356750129707702/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/spring-30-mvc-series-part-3-handling.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5604356750129707702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5604356750129707702'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/spring-30-mvc-series-part-3-handling.html' title='Spring 3.0 MVC Series Part 3: Handling Forms in Spring 3.0 MVC'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-1499964701743299309</id><published>2010-07-16T21:58:00.000-07:00</published><updated>2010-07-16T22:48:17.207-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Spring 3.0 MVC Series Part 2: Create Hello World Application in Spring 3.0 MVC</title><content type='html'>http://durl.kr/24roa&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-1499964701743299309?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/1499964701743299309/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/part-2-create-hello-world-application.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/1499964701743299309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/1499964701743299309'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/part-2-create-hello-world-application.html' title='Spring 3.0 MVC Series Part 2: Create Hello World Application in Spring 3.0 MVC'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-4552251604140920658</id><published>2010-07-16T21:57:00.000-07:00</published><updated>2010-07-16T21:58:25.308-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Spring 3.0 MVC Series Part 1: Introduction to Spring 3.0 MVC framework</title><content type='html'>http://durl.kr/24ro4&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-4552251604140920658?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/4552251604140920658/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/spring-30-mvc-series-part-1.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4552251604140920658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4552251604140920658'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/spring-30-mvc-series-part-1.html' title='Spring 3.0 MVC Series Part 1: Introduction to Spring 3.0 MVC framework'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-5044254109118130102</id><published>2010-07-14T01:34:00.001-07:00</published><updated>2010-07-14T01:35:54.906-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Calculate Free Disk Space in Java using Apache Commons IO</title><content type='html'>http://durl.kr/247e5&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-5044254109118130102?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/5044254109118130102/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/calculate-free-disk-space-in-java-using.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5044254109118130102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5044254109118130102'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/calculate-free-disk-space-in-java-using.html' title='Calculate Free Disk Space in Java using Apache Commons IO'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-8882578147279204061</id><published>2010-07-07T07:55:00.001-07:00</published><updated>2010-07-07T07:56:44.270-07:00</updated><title type='text'>SpringShowCase IDE 다운 받기</title><content type='html'>&lt;div&gt;아 제가 &lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;SpringShowCase IDE를 구글 문서에 업로드 했는데&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;모르고 비공개를 설정을 했네요 ㅠ.ㅠ&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;정말 죄송 합니다. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;앞으로 아래 주소에 접근 해서 &lt;/span&gt;&lt;/div&gt;&lt;a href="http://code.google.com/p/springshowcase/wiki/SSCAllToolSetting"&gt;http://code.google.com/p/springshowcase/wiki/SSCAllToolSetting&lt;/a&gt;&lt;div&gt;다운 받으시면 됩니다.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-8882578147279204061?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/8882578147279204061/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/springshowcase-ide.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/8882578147279204061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/8882578147279204061'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/springshowcase-ide.html' title='SpringShowCase IDE 다운 받기'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-3169658365093458588</id><published>2010-07-06T00:29:00.000-07:00</published><updated>2010-07-06T00:30:15.463-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Exchanging Data with XML and JAXB</title><content type='html'>http://durl.kr/22usd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-3169658365093458588?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/3169658365093458588/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/exchanging-data-with-xml-and-jaxb.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3169658365093458588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3169658365093458588'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/exchanging-data-with-xml-and-jaxb.html' title='Exchanging Data with XML and JAXB'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-5340850154892281498</id><published>2010-07-06T00:27:00.000-07:00</published><updated>2010-07-06T00:29:33.138-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>J2EE6에서 DataSource 사용 하기</title><content type='html'>http://durl.kr/2338u&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-5340850154892281498?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/5340850154892281498/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/j2ee6-datasource.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5340850154892281498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5340850154892281498'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/j2ee6-datasource.html' title='J2EE6에서 DataSource 사용 하기'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-5662357338730089231</id><published>2010-07-06T00:26:00.001-07:00</published><updated>2010-07-06T00:26:59.100-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Locking and Concurrency in Java Persistence 2.0</title><content type='html'>&lt;span class="status-body"&gt;&lt;span class="status-content"&gt;&lt;span class="entry-content"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://durl.kr/2336w" class="tweet-url  web" rel="nofollow" target="_blank"&gt;http://durl.kr/2336w&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-5662357338730089231?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/5662357338730089231/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/locking-and-concurrency-in-java.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5662357338730089231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5662357338730089231'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/locking-and-concurrency-in-java.html' title='Locking and Concurrency in Java Persistence 2.0'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-4085572867395991184</id><published>2010-07-06T00:24:00.002-07:00</published><updated>2010-07-06T00:26:19.369-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>JBoss Tools on Eclipse 3.6 (Helios) Release!!</title><content type='html'>http://durl.kr/2338f&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-4085572867395991184?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/4085572867395991184/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/jboss-tools-on-eclipse-36-helios.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4085572867395991184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4085572867395991184'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/jboss-tools-on-eclipse-36-helios.html' title='JBoss Tools on Eclipse 3.6 (Helios) Release!!'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-1351777077803699607</id><published>2010-07-06T00:24:00.001-07:00</published><updated>2010-07-06T00:26:19.370-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>STS on Eclipse 3.6 Release</title><content type='html'>&lt;span class="status-body"&gt;&lt;span class="status-content"&gt;&lt;span class="entry-content"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://durl.kr/2336j" class="tweet-url  web" rel="nofollow" target="_blank"&gt;http://durl.kr/2336j&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-1351777077803699607?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/1351777077803699607/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/sts-on-eclipse-36-release.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/1351777077803699607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/1351777077803699607'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/sts-on-eclipse-36-release.html' title='STS on Eclipse 3.6 Release'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-6485297937419328845</id><published>2010-07-06T00:22:00.000-07:00</published><updated>2010-07-06T00:26:19.370-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>SpringBatch In Action 출시 진행 중!!</title><content type='html'>로드 존슨형 트위터에서 가져 왔습니다.&lt;br /&gt;&lt;span class="status-body"&gt;&lt;span class="status-content"&gt;&lt;span class="entry-content"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://durl.kr/23373" class="tweet-url  web" rel="nofollow" target="_blank"&gt;http://durl.kr/23373&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-6485297937419328845?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/6485297937419328845/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/springbatch-in-action.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6485297937419328845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6485297937419328845'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/springbatch-in-action.html' title='SpringBatch In Action 출시 진행 중!!'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-8289634179033734189</id><published>2010-07-02T06:10:00.001-07:00</published><updated>2010-07-02T06:10:29.515-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Java Collections API에 대해 모르고 있던 5가지 사항</title><content type='html'>http://bit.ly/bWOx67&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-8289634179033734189?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/8289634179033734189/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/java-collections-api-5.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/8289634179033734189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/8289634179033734189'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/java-collections-api-5.html' title='Java Collections API에 대해 모르고 있던 5가지 사항'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-5628526831086090256</id><published>2010-07-02T06:03:00.001-07:00</published><updated>2010-07-02T06:03:44.064-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Spring DM Server의 새로운 이름 Virgo</title><content type='html'>http://bit.ly/bv6EEV&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-5628526831086090256?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/5628526831086090256/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/spring-dm-server-virgo.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5628526831086090256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5628526831086090256'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/spring-dm-server-virgo.html' title='Spring DM Server의 새로운 이름 Virgo'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-6336699071556203044</id><published>2010-07-02T06:00:00.001-07:00</published><updated>2010-07-02T06:00:55.326-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Servlet 3.0에서 비동기 처리 방법</title><content type='html'>http://bit.ly/9kThJA&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-6336699071556203044?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/6336699071556203044/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/servlet-30.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6336699071556203044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6336699071556203044'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/servlet-30.html' title='Servlet 3.0에서 비동기 처리 방법'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-2080729346428951168</id><published>2010-07-02T05:46:00.001-07:00</published><updated>2010-07-02T05:46:19.804-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>이클립스에서 Code Template 사용하기</title><content type='html'>http://bit.ly/b1ekgC&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-2080729346428951168?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/2080729346428951168/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/code-template.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/2080729346428951168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/2080729346428951168'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/code-template.html' title='이클립스에서 Code Template 사용하기'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-2713912150100874232</id><published>2010-07-02T05:43:00.000-07:00</published><updated>2010-07-02T05:44:28.900-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>톰캣7 Release!!</title><content type='html'>http://bit.ly/cL9Ecf&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-2713912150100874232?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/2713912150100874232/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/7-release.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/2713912150100874232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/2713912150100874232'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/7-release.html' title='톰캣7 Release!!'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-3986509362155206258</id><published>2010-07-02T05:42:00.001-07:00</published><updated>2010-07-02T05:43:27.280-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tweet'/><title type='text'>Eclipse 프로젝트 중에서 가장 멋진 25개 프로젝트</title><content type='html'>http://bit.ly/c35mRm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-3986509362155206258?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/3986509362155206258/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/eclipse-25.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3986509362155206258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3986509362155206258'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/07/eclipse-25.html' title='Eclipse 프로젝트 중에서 가장 멋진 25개 프로젝트'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-7193119742444548501</id><published>2010-06-06T02:56:00.000-07:00</published><updated>2010-06-06T03:00:03.395-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring DM'/><title type='text'>OSGi Bundles의 두 가지 의존 타입</title><content type='html'>&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="white-space: normal; "&gt;&lt;b&gt;(1)  &lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: normal; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;b&gt;Package dependency: A bundle exports its packages so that&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="white-space: normal; "&gt;&lt;b&gt;&lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;b&gt;       other bundles can import the packages&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="white-space: normal; "&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: normal; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;b&gt;       and then &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;access the classes, interfaces, &lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;       and resources in the packages.&lt;/b&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;(2)  &lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;b&gt;Service dependency: A bundle registers its objects to &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;b&gt;        the service registry provided by the OSGi&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;b&gt;        container as OSGi services, so that other bundles&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;/b&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;b&gt;        can consume the services.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-7193119742444548501?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/7193119742444548501/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/06/osgi-bundles.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/7193119742444548501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/7193119742444548501'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/06/osgi-bundles.html' title='OSGi Bundles의 두 가지 의존 타입'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-5139080463567049789</id><published>2010-06-06T02:30:00.000-07:00</published><updated>2010-06-06T02:47:58.095-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring DM'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>OSGi의 이점</title><content type='html'>거의 한달만에 포스트를 올리네요 . &lt;div&gt;한달 동안 정말 개인적으로 너무 힘들 었습니다.&lt;/div&gt;&lt;div&gt;이제 정신이 들어서 다시 블러그를 하려고 합니다.&lt;/div&gt;&lt;div&gt;당분간 Spring DM관련해서 포스팅을 하려고 합니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;OSGi's Advantages&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt; - 전체 시스템을 restart 하지 않고 각 모듈 (class, jar) 단위로 &lt;/div&gt;&lt;div&gt;   dynamically하게 install,uninstall,update,start,stop 할 수 있음&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- 하나의 시스템내에서 각 모듈의 버전 정보를 복수로 install 할 수 있음&lt;/div&gt;&lt;div&gt;   시스템 업그레이드에 좋은 대안이 될 수 있음&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- OSGi 컨테이너는 모듈관의 의존 관계를 관리 한다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- 각 모듈 (bundle)은 개별적인 life cycle을 가지고 있음.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- 각 모듈은 SOA  처럼 서비스로 노출하고 , 사용 할수 있음. &lt;/div&gt;&lt;div&gt;   즉 느슨한 연결과 Service-Oriented한 설계를 가능 하도록 함.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-5139080463567049789?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/5139080463567049789/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/06/osgi.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5139080463567049789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5139080463567049789'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/06/osgi.html' title='OSGi의 이점'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-1812979882776612556</id><published>2010-05-07T09:08:00.000-07:00</published><updated>2010-05-07T10:13:04.275-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='My Think'/><title type='text'>최근 프로젝트 분위기</title><content type='html'>최근의 프로젝트 분위기를 보면 어느때 보다&lt;br /&gt;최악의 한해를 보내고 있는 것 같습니다.&lt;br /&gt;1월부터 3월까지는 비수기라 치고&lt;br /&gt;4월,5월 까지 프로젝트 물량이 나오지 않는&lt;br /&gt;다는 것은 다소 심각 하다고 볼 수 있습니다.&lt;br /&gt;&lt;br /&gt;물론 앞으로 시간이 지나면 풀린다 라고 얘기&lt;br /&gt;할 수도 있지만 현재 분위기는 전혀 장담 할수가&lt;br /&gt;없습니다.&lt;br /&gt;(몇일 전만 해도 코스피 1730 이였는데 이 글을&lt;br /&gt;쓰는 시점은 1630)&lt;br /&gt;&lt;br /&gt;현재 진행 하려고 하는 프로젝트들이&lt;br /&gt;갑자기 drop 되거나 holding 되는 경우가 많습니다.&lt;br /&gt;&lt;br /&gt;설사 진행이 되더라도 대부분 기간이 3 ~ 4개월&lt;br /&gt;정도이고 중장기 프로젝트는 거의 찾아 볼 수가&lt;br /&gt;없습니다.&lt;br /&gt;&lt;br /&gt;그리고 기존 협렵업체나 외부 소싱 인력의 TO를&lt;br /&gt;Big3 업체의 정규직으로 대체하는 경우가&lt;br /&gt;최근들어서 많이 늘었습니다.&lt;br /&gt;아무래도 매출액 때문이겠죠.&lt;br /&gt;(프로젝트 비용이 거의 노마진 수준)&lt;br /&gt;&lt;br /&gt;그래서 시장에서 고급인력의 수요는&lt;br /&gt;거의 없으며 프리랜서 같은 경우는&lt;br /&gt;정말 key man 같은 스페셜&lt;br /&gt;리스트가 아닌 경우는 고급으로&lt;br /&gt;들어갈 수가 없습니다.&lt;br /&gt;(예전 처럼 경력이나 등급이 고급이라고&lt;br /&gt;해서 고급단가 그대로 주는 시대는 갔음)&lt;br /&gt;&lt;br /&gt;이러다 보니 고급 프리랜서들이 경력을&lt;br /&gt;다운 사이징 하거나 협의를 통해서 중급같은&lt;br /&gt;고급들이 많아지고 있습니다.&lt;br /&gt;단가 또한 공급이 많으니 당연히&lt;br /&gt;내려 가겠죠.&lt;br /&gt;&lt;br /&gt;그리고 예전엔 xxx 프로젝트는 안간다.&lt;br /&gt;이렇게  나름  구분해서 골랐다면 지금은&lt;br /&gt;기간이나 모든 것이 예전보다 열악하기 때문에&lt;br /&gt;지금은 어딜가나 고생은 각오 하셔야 할 것&lt;br /&gt;같습니다.&lt;br /&gt;(최근 면접 본데는 2주 설계완료,개발 한달 이였음..)&lt;br /&gt;그냥 일하는 것 자체만으로 행복하다고 생각&lt;br /&gt;하면서 긍정적으로 일하는게 좋을 듯 합니다.&lt;br /&gt;&lt;br /&gt;가끔 후배들 중에서 프리를 하고 싶어 하거나&lt;br /&gt;또는 현재 근무환경에 불만을 가지는 분들은&lt;br /&gt;허벅지바늘로 찌르고 참으시라고 말씀 드리고&lt;br /&gt;싶습니다.&lt;br /&gt;어떻게 보면 행복한 고민 입니다.&lt;br /&gt;한번 몇달 쉬어보면 아실 것입니다.&lt;br /&gt;즉 힘드시더라도 일단 어느 정도 경기가&lt;br /&gt;풀린다고 생각 되면 그때 움직이시란 뜻 입니다.&lt;br /&gt;&lt;br /&gt;그리고 이렇게 일이 없다보니 면접이 예전보다&lt;br /&gt;많이 까다로와 졌습니다.&lt;br /&gt;예전에는 면접을 하면 바로 언제 출근 가능하냐&lt;br /&gt;하면서 바로 확정을 지었는데 요새는 아무래도&lt;br /&gt;인력이 많다 보니  예전보다는 깐깐하게 면접을&lt;br /&gt;진행 하는 것 같습니다.&lt;br /&gt;(자기 개발만이 살길.... 무늬만 고급은 이제 고급 단가를&lt;br /&gt;받기 어려움)&lt;br /&gt;&lt;br /&gt;이런 분위기에서 최신 트렌드 운운하는 것이&lt;br /&gt;업계 모든 분들께 과연 어떻게 다가갈까&lt;br /&gt;하는 생각이 듭니다.&lt;br /&gt;씁쓸하죠.....&lt;br /&gt;&lt;br /&gt;일부러 회의적인 글을 쓰려고 한 것은 아니고,&lt;br /&gt;나름 현실에 대한 정보를 제공 하려는 것 뿐입니다.&lt;br /&gt;이럴때 일수록 서로 예민하지 말고 힘내서&lt;br /&gt;극복해 나갔으면 합니다.&lt;br /&gt;분명 언제가 IT 업계 모든분들이 즐거울&lt;br /&gt;날이 오겠죠 모두 화이팅 !!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-1812979882776612556?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/1812979882776612556/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/05/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/1812979882776612556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/1812979882776612556'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/05/blog-post.html' title='최근 프로젝트 분위기'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-3803659111221142518</id><published>2010-04-21T18:32:00.000-07:00</published><updated>2010-04-21T18:35:38.044-07:00</updated><title type='text'>세미나 공지!!</title><content type='html'>아래와 같이 세미나를 하려고 합니다.&lt;br /&gt;&lt;br /&gt;시간 : 4/24 오후 5시 ~ 8시&lt;br /&gt;장소 : 강남역 모토 (&lt;a href="http://www.mottozone.com/" target="_blank"&gt;http://www.mottozone.com/&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;(1)  J2EE 와 오픈소스의 현재 트렌드&lt;br /&gt;(2)  Spring Overview&lt;br /&gt;(3)  Spring 개발 환경 설정&lt;br /&gt;(4)  ssc-mvc 구현 및 실행 방법&lt;br /&gt;(5)   ssc-rpc 구현 및 실행 방법&lt;br /&gt;(6)  실무에서 스프링 활용예&lt;br /&gt;(7)  Application Architect  소개&lt;br /&gt;&lt;br /&gt;참여하고 싶은 분은 springorg@gmail.com으로 연락주세요&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-3803659111221142518?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/3803659111221142518/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/blog-post.html#comment-form' title='2개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3803659111221142518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3803659111221142518'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/blog-post.html' title='세미나 공지!!'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-9012373533212000482</id><published>2010-04-20T07:37:00.000-07:00</published><updated>2010-04-22T20:58:24.865-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Application Architect란?</title><content type='html'>몇년전 JCO 컨퍼런스에 참석한적이 있었습니다.&lt;br /&gt;제가 들으려는 section은 사람들이 너무 많아서&lt;br /&gt;들을 수가 없었습니다.&lt;br /&gt;그래서 시간내서 온 것이 아까워서 사람들이&lt;br /&gt;덜 몰리는 section쪽으로 갔습니다.&lt;br /&gt;&lt;br /&gt;이동한 section의 컨퍼런스 주제는&lt;br /&gt;"Application Architect" 였습니다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;※ 이하 Application Architect를 AA로 하겠습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;내용을 곰곰히 들어 보니 현재 제가 하고 있는&lt;br /&gt;일도 포함이 되었고 반면에 내가 하지 않은&lt;br /&gt;생소한 일도 있었습니다.&lt;br /&gt;&lt;br /&gt;마지막에 강사님께서 앞으로&lt;br /&gt;프로젝트에서 AA 롤은 반드시 필요 하며&lt;br /&gt;또한 그에 따른 수요도 증가 할 것이다.&lt;br /&gt;&lt;br /&gt;앞으로 고급 프로그래머라면 충분히 도전할&lt;br /&gt;만한 가치가 있다 라고 말씀 하셨습니다.&lt;br /&gt;&lt;br /&gt;레퍼런스가 끝나고 저를 포함한 참석했던 분들의&lt;br /&gt;애매한 표정이 생각 납니다.&lt;br /&gt;&lt;br /&gt;그러고 몇년이 지나서 최근 프로젝트에&lt;br /&gt;조금씩 AA롤을 수행 하는 분들을 종종 만나게 됩니다.&lt;br /&gt;&lt;br /&gt;그분들에게  "What's Application Architect?"&lt;br /&gt;라고 물어보면 대답이 다들 제각각 이였습니다.&lt;br /&gt;심지어 어떤곳은 TA (Technical Architect)라는용어를&lt;br /&gt;사용하거나 프레임웍커(프레임웍 구축자)라고&lt;br /&gt;하는 곳도 있었습니다.&lt;br /&gt;&lt;br /&gt;혹시나 해서 웹 으로 검색을 해봐도&lt;br /&gt;AA에 대한 정의가 개념적이지 구체적인&lt;br /&gt;내용을 찾기가 어려웠습니다.&lt;br /&gt;&lt;br /&gt;그렇다면 과연 AA는 프레임웍 과 공통 모듈을&lt;br /&gt;구현 하는 사람인지 아니면 GoF의 디자인 패턴을&lt;br /&gt;사용해서 멋지게 UML 설계를 하는 사람인지..&lt;br /&gt;&lt;br /&gt;과연 여러분은 프로젝트에서 AA는 무엇이라고 생각&lt;br /&gt;하십니까?&lt;br /&gt;&lt;br /&gt;불명확한 실체에 대해서 한 개인이 정의를 내린다는 것은&lt;br /&gt;상당히 조심스러운 행동이라고 생각 합니다.&lt;br /&gt;&lt;br /&gt;그래서 주관적인 생각을 최대한 자제 하고&lt;br /&gt;관련 책들과 자료 그리고 AA 담당자들과&lt;br /&gt;대화에 근거 해서 설명 드리도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;Application Architect란?&lt;/li&gt;&lt;/ul&gt;시스템 특징에 적합한 설계와 구현의 지침인 아키텍쳐&lt;br /&gt;를 작성하고, 이것을 개발팀 전원이 파알할 수 있도록&lt;br /&gt;하는 것이다. 이를 통해 시스템의 품질을 끌어 올린다.&lt;br /&gt;다수가 참여하는 프로젝트에서 아키텍트의 주된 업무는&lt;br /&gt;설계 단계에 진행된다.&lt;br /&gt;아키텍트는 설계 단계 전까지 준비한 아키텍쳐를 개발팀&lt;br /&gt;에게 전달 하고, 팀원들이 아키텍쳐 설계서에 따라&lt;br /&gt;설계와 구현을 할 수 있도록 지원 한다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- 아키텍트 이야기 85p -&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;정보시스템에 대한 전반적인 지식과 시스템 구축&lt;br /&gt;노하우를 보유한 경험이 풍부한 기술 전문가로서&lt;br /&gt;프로젝트 전반에 대한 기술적인 총괄 책임을&lt;br /&gt;담당한다.&lt;br /&gt;아키텍처 정의에서 아키텍트가 수행&lt;br /&gt;하여야 하는 업무로서 프로젝트에서 구축 하고자&lt;br /&gt;하는 정보 시스템의 기반 구조를 정의한다.&lt;br /&gt;기반구조의 정의에는 시스템 플랫폼,운영 및 개발환경&lt;br /&gt;,표준 프로토콜,소프트웨어/하드웨어 솔루션 벤치마킹&lt;br /&gt;및 선정 ,시스템 인터페이스 관계 정의,데이터 분산 및&lt;br /&gt;통합 방안등 시스템의 기본적인 골격에 관련된&lt;br /&gt;내용을 포함 한다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- SI Project (전문가로 가는길) -&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;즉, 쉽게 설명하면 분석시에 업무담당자 한테&lt;br /&gt;시스템 모모 필요 하니?  필요한 청사진 그리고&lt;br /&gt;설계 단계에서 좀더 구체적으로 표준안 잡고&lt;br /&gt;프레임웍 구축하고 개발자 교육하고&lt;br /&gt;테스트 하는 일련에 Application A~Z까지&lt;br /&gt;전체 총괄하는 롤이라고 이해 하시면 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;아키텍트 수행 역할&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; - 프로젝트 착수 시 제안서와 계약서를 검토하여 기본적인&lt;br /&gt;소프트웨어 및 하드웨어 아키텍쳐 환경에 대안 초안을&lt;br /&gt;작성 한다.&lt;br /&gt;&lt;br /&gt;- 분석 단계에서 전체 시스템에 대한 아키텍쳐 정의를 통해&lt;br /&gt;소프트웨어 및 하드웨어 인프라 구조 정의,&lt;br /&gt;서버 및 네트워크의 기본 모델 정의, 어플리케이션 모듈의&lt;br /&gt;최상위 수준 모델링 등을 수행한다.&lt;br /&gt;&lt;br /&gt;- 분석 단계에서 프로세스 모델링 및 데이터 모델링을 수행할 때&lt;br /&gt;시스템 기본 아키텍처를 준수하도록 분석 산출물에&lt;br /&gt;대한 검증을 수행한다.&lt;br /&gt;&lt;br /&gt;- 소프트웨어 개발 환경 표준을 정의한다. 소프트웨어 개발을 위한&lt;br /&gt;개발도구의 선정과 프로토타이핑를 주관한다.&lt;br /&gt;&lt;br /&gt;- 설계 단계에서 프로그램 및 데이터베이스에 대한 설계 내용을&lt;br /&gt;아키텍처 관점에서 표준의 준수 여부를 검증한다.&lt;br /&gt;&lt;br /&gt;- 시스템 테스트 시나리오에서 아키텍쳐와 관련된 시스템 테스트&lt;br /&gt;시나리오의 작성을 총괄 한다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;아키텍트에게 요구 되는 것&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;※상,중,하는 역량의 중요도 입니다.&lt;br /&gt;&lt;br /&gt;- 비용관리 (하)&lt;br /&gt;- 일정 관리 (하)&lt;br /&gt;- 요구 사항정의(하)&lt;br /&gt;- 명세 수립 (중)&lt;br /&gt;- 소프트웨어 설계 (상)&lt;br /&gt;- 프로그래밍 (상)&lt;br /&gt;- 개발 방법론 (상)&lt;br /&gt;- 인프라 구축 (중)&lt;br /&gt;- 테스트 방법 (중)&lt;br /&gt;- 품질 관리 (하)&lt;br /&gt;&lt;br /&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;실무에서 Application Architect&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;실무에서 만났던 대부분의 AA는&lt;br /&gt;개발 주관 업체(일명:"을" Big3) 에서 하거나&lt;br /&gt;컨설팀 업체에서 담당을 합니다.&lt;br /&gt;(이유는 크리티컬한 업무이기 때문이죠^^)&lt;br /&gt;&lt;br /&gt;그리고 전체적인 분석 및 설계 부분을&lt;br /&gt;대부분 참여 하고 프레임웍 구축 및&lt;br /&gt;코어 공통 모듈에 대해서는 거의&lt;br /&gt;참여를 하지 않습니다.&lt;br /&gt;그래서 대부분 AA + 전문 기술팀(Technical Architect) 또는&lt;br /&gt;AA +TA로 구성된 단일 AA팀으로 구성이 되어있 있습니다.&lt;br /&gt;&lt;br /&gt;개인적으로는 이러한 구성이 맞다고 생각 합니다.&lt;br /&gt;과연 AA만으로 신기술과 오픈 소스 홍수 속에서&lt;br /&gt;구현까지 잘 할수 있을까요?&lt;br /&gt;그리고 장애복구,서버이중화등 비기능적 크리니컬&lt;br /&gt;영역에 대해서도 해당 전문가와 co-work를 해야&lt;br /&gt;합니다.&lt;br /&gt;물론 단기 프로젝트거나 프로젝트 규모가&lt;br /&gt;크지 않다면 충분히 혼자서도 가능 하겠죠.&lt;br /&gt;&lt;br /&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;AA 준비 하기...&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;사실 저도 AA는 아닙니다. (전 해커에 가깝다고&lt;br /&gt;할까요 ㅋㅋ. 워낙 오픈소스 기반에 매쉬업을&lt;br /&gt;좋아해서 )&lt;br /&gt;이런 위치에서 AA 준비를 이렇게  하라고 말&lt;br /&gt;하는 자체가 웃긴 일이지만 저 또한 AA가&lt;br /&gt;되기 위해서 노력하는 사람으로써 말씀 드리겠습니다.&lt;br /&gt;&lt;br /&gt;먼저 되도록 Big3 업체 또는 개발 전문 컨설팅 업체&lt;br /&gt;에서 근무 하는 것이 좋다고 생각 합니다.&lt;br /&gt;물론 들어가서 AA쪽으로 빠진다는 보장은 없습니다.&lt;br /&gt;단 일반 SI 회사보다 기회가 많다는 뜻 입니다.&lt;br /&gt;&lt;br /&gt;일반 SI 회사일경우는 정말 매니아적인&lt;br /&gt;마인드가 필요 합니다.&lt;br /&gt;프로젝트 특성상 SI는 업무 중심이기 때문에&lt;br /&gt;기술적으로 깊이 있게 경험을 쌓기에는 제약&lt;br /&gt;사항이 있습니다.&lt;br /&gt;그렇기 때문에 더욱더 기술분야에 관심을&lt;br /&gt;갖어야 할 것 같습니다.&lt;br /&gt;&lt;br /&gt;초,중급일 경우 최신 트렌드 보다는&lt;br /&gt;기술적 기본기에 투자를 많이 해야 합니다.&lt;br /&gt;가끔 초,중급 개발자들 중에서 Spring의 한가지&lt;br /&gt;기능을 사용했다고 해서 본인이 스킬이 뛰어난&lt;br /&gt;사람이라고 착각 하는 경우를 종종 보게 됩니다.&lt;br /&gt;&lt;br /&gt;초,중급분들한테 거의 아키텍처 관련된 구현을&lt;br /&gt;맡기지 않습니다. 본인들이 교육을 받고 비지니스&lt;br /&gt;로직을 구현할 정도의 센스만 실무에서 경험하고&lt;br /&gt;나머지 시간은 집중적으로 core java,network,xml등&lt;br /&gt;기본적인 기술을 연마 해야 합니다.&lt;br /&gt;(프레임웍크는 업무에 편하지만 기술적인 부분은 점점&lt;br /&gt;개발자를 바보로 만들고 있습니다.)&lt;br /&gt;&lt;br /&gt;최소 7년간의 실무 경험이 필요 합니다.&lt;br /&gt;AA는 절대로 물리적 시간과 경험이 필요 합니다.&lt;br /&gt;7년까지는 구현에 대해서 많은 투자가 필요하고&lt;br /&gt;그 이후는 설계에 더 무게 중심을 두어야 할 것 같습니다.&lt;br /&gt;(요새 저도 설계쪽에 많은 시간을 투자 하고 있습니다.)&lt;br /&gt;&lt;br /&gt;횡성수설 잘 알지도 못하면서 말씀 드렸네요&lt;br /&gt;어쨌든 앞으로 시스템은 점점도 복잡하고&lt;br /&gt;규모더 커쳐 가고 있습니다. 이럴때 AA의&lt;br /&gt;역할은 절실히 대두되고 있습니다.&lt;br /&gt;AA는 단기간에 만들어 지는 것이 아니며 양성하기도&lt;br /&gt;쉽지 않습니다.&lt;br /&gt;오직 열정과 매니아 정신만이 AA가 될수있다고&lt;br /&gt;생각 합니다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-9012373533212000482?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/9012373533212000482/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/application-architect.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/9012373533212000482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/9012373533212000482'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/application-architect.html' title='Application Architect란?'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-7788030660989056797</id><published>2010-04-19T07:52:00.001-07:00</published><updated>2010-04-22T21:05:44.686-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>SI Project 패러다임!!</title><content type='html'>우리나라의 IT 프로젝트는 몇몇 특화된 것을 제외한&lt;br /&gt;대부분이 J2EE 기반 SI 프로젝트일 것입니다.&lt;br /&gt;하지만 이런 SI 프로젝트가 힘든 이유가 무엇&lt;br /&gt;일까요 그 풀리지 않은 미스터리에 대한&lt;br /&gt;의문점과 나름 해결 방법을 몇자 적어보려고&lt;br /&gt;합니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;왜? 크리니컬 이슈는 항상 개발 막바지에 발생 하는가?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;애자일의 가장 기본은 바로 test-first 입니다. 즉 개발 보다&lt;br /&gt;테스트 환경구축 입니다.&lt;br /&gt;공통모듈,프레임웍,비지니스 로직 개발 등 이러한 것보다&lt;br /&gt;제일 먼저 아래와 같은 Activity가 선행이 되어야 할 것입니다.&lt;br /&gt;&lt;br /&gt;- JUNIT과 같은 단위 테스트 탬플릿&lt;br /&gt;- CI(Maven,Nexus,Hudson..등)를 위한 자동화 빌드&lt;br /&gt;- Code Inspect (PMD..등)&lt;br /&gt;&lt;br /&gt;※ 가끔 개발자 분들이 JUNIT을 상당히&lt;br /&gt;귀찮은 존재로 생각을 하십니다.&lt;br /&gt;개발할 것도 많은데 어느 세월에 Test&lt;br /&gt;Junit을 만드냐고 합니다.&lt;br /&gt;하지만 그건 전혀 잘못된 생각 입니다.&lt;br /&gt;스프링이 Pojo인 이유는 바로 테스트를&lt;br /&gt;편하게 하기 위해서 입니다.&lt;br /&gt;그리고 저는 예를 들어서 게시판 CRUD 한 셋을&lt;br /&gt;화면 포함해서 개발할때 비지니스로을&lt;br /&gt;먼저 만들고 Junit으로실행 한다음&lt;br /&gt;뷰단을 몰아서 작업 합니다.&lt;br /&gt;그 중독성이란... 여러분 한번 제 방식이랑&lt;br /&gt;여러분 방식이랑 CRUD 배틀 한번 해볼실까요^^&lt;br /&gt;로직이 복잡할수록 그 공수 차이는 더 커집니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;왜? 화려한 시스템 아키텍쳐 청사진과 멋진 패턴로 구성된 UML 문서는 있음에도 불구 하고 프레임웍은 항상 불안 할까?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;대부분 개발표준,프레임웍 구성등은 AA(Application Architecture)가&lt;br /&gt;설계및 구축을 담당하고 있습니다. 하지만 최근 개발 동향을 보면&lt;br /&gt;금융권을 제외한 (책임문제 때문인지 상용툴만 사용)한 일반&lt;br /&gt;프로젝트는 스프링 기반에 오픈 소스로 구성 되었습니다.&lt;br /&gt;물론 AA가 당연히 기술적인 부분을 많이 알고 있어야하지만&lt;br /&gt;많은 오픈소스에 대해서 물리적으로 혼자서 해결 한다는 것은&lt;br /&gt;무리라고 생각 합니다. 즉 전문 Technical 팀이 구성이 되어야&lt;br /&gt;한다고 봅니다. AA 팀에 같이 소속이 되었던 별도의 공통파트이건&lt;br /&gt;간에 이러한 팀이 AA와 기술적인 긴밀한 협조를 통해서&lt;br /&gt;기술적 리딩을 해야 한다고 생각 합니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;일정은 있고 대화는 없는 건가?&lt;/li&gt;&lt;/ul&gt;PM과 PL의 제일 중요한 work는 당연 일정 관리 입니다.&lt;br /&gt;하지만 일정관리 와 같은 중요도를 가지고 있는 것이&lt;br /&gt;바로 프로젝트 팀원 관리 입니다.&lt;br /&gt;하지만 이런 부분을 간과하는 경우가 많습니다.&lt;br /&gt;가끔 저는 프로젝트가 이슈가 생겨서 중간에 투입&lt;br /&gt;하는 경우가 있습니다. 그럴때 저는 일정이 연기되었거나&lt;br /&gt;또는 기술적인 이슈가 생기는 것은 그다지 우려가 되지&lt;br /&gt;않지만 PM,PL과 개발자 사이에 대화가 없으면&lt;br /&gt;투입을 주저 합니다.&lt;br /&gt;서로 대화가 없으면 솔직히 그프로젝트는 끝나다고 봅니다.&lt;br /&gt;그 얘기는 개발자를 단지 도구나 툴로 밖에는 생각 하지&lt;br /&gt;않는 다는 것입니다. 자 프로젝트 리스크를 제일 정확하고&lt;br /&gt;잘알고 있는 사람이 누구일까요?&lt;br /&gt;1.PM 2.PL 3.AA 4.개발자&lt;br /&gt;정답은 전 개발자라고 생각 합니다. 개발자끼리 모여서&lt;br /&gt;담배 피면 아마도 십중팔구&lt;br /&gt;"이 프로젝트 큰일이다 답이 없다 답이" 이런 말들을&lt;br /&gt;합니다.&lt;br /&gt;개발자가 네거티브한거 인정 합니다. 하지만 틀린 얘기는&lt;br /&gt;아닙니다. 일정만 강요하는 프로젝트에서는 절대로&lt;br /&gt;왜 답이 없는지 말을 하지 않을 것입니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;누가 고급이고 누가 중급인가?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;가끔 개발을 하게 되면 누가 고급이고 중급인지 분간을&lt;br /&gt;할 수가 없습니다. 개인적으로 한분야에서 7년차까지는&lt;br /&gt;구분이 필요하다고 생각합니다. 하지만 그 이상이 넘어가면&lt;br /&gt;경력은 무의미 하다고 봅니다. 예전 개발 환경은 잘하는 사람,&lt;br /&gt;못하는 사람 별 차이가 없었습니다.&lt;br /&gt;하지만 최근에는 업무적/기술적 규모나 복잡도가 예전에&lt;br /&gt;비해서 비교도 할 수 없을 정도로 커졌습니다.&lt;br /&gt;즉 개개인의 능력 차이가 엄청나게 커졌습니다.&lt;br /&gt;프로젝트 전문가 얘기를 들어보면 잘 하는 사람과&lt;br /&gt;못하는 사람의 본수가 10본이상 차이가 난다고 합니다.&lt;br /&gt;앞으로 인력을 선별할때 단순 년차 비교가 아니라&lt;br /&gt;이전 플젝 PM이나 아니면 인맥 정보를 동원해서&lt;br /&gt;그만큼 스킬이 있다면 중급이더라도 고급 대우를&lt;br /&gt;해야 한다고 생각 합니다.&lt;br /&gt;즉 경력보다는 인재를 확보해야 합니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;왜? 리스크가 있음에도 불구하고 그걸 바보처럼 한다고&lt;/li&gt;&lt;li&gt;한 담당자에게만 책임을 몰빵하는가?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;한번은 DA (Data Architecture)와 업무적으로 다툼적이 있었습니다.&lt;br /&gt;Date형을 전부 varchar2(14)로 수정했다는 얘기 입니다.&lt;br /&gt;그 런 큰 이슈를 전체 공지나 이슈화 하지 않았냐고 하니&lt;br /&gt;"저번에 말씀 드렸잖아요. 그리고 개발문서에도 있구여"&lt;br /&gt;그말을 듣는 순간 이단 옆차기 하고 싶은 충동이....&lt;br /&gt;프로젝트하는 곳이 가정법원인가? 그래 나랑 개발팀이&lt;br /&gt;몰랐다 글면 자기 혼자 사는 것인가? 어떻게 대놓고&lt;br /&gt;책임을 회피하는 발언을 하는지...&lt;br /&gt;그리고 한번은 PL이 저한테&lt;br /&gt;"저 김과장님 이거 하는데 잘안되네..."&lt;br /&gt;"내 제가 잠깐 볼게요"&lt;br /&gt;다음날...&lt;br /&gt;"그거 언제 되요? 늦어도 이번주까지는 되야 하는데"&lt;br /&gt;음..................&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;왜? 우리는 많은 경험을 하고도 또 경험을 해야 하는 것일까?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;현실적으로 SI 프로젝트에 대해서 A~Z까지&lt;br /&gt;다 알수는 없지만 각자 말못한 고충과&lt;br /&gt;일들이 있을 것입니다.&lt;br /&gt;&lt;br /&gt;무 조건 "갑",PM,PL,개발자 들을 비난할수는&lt;br /&gt;없 습니다. 하지만 체질 개선은 반드시&lt;br /&gt;필요하다고 생각 합니다.&lt;br /&gt;&lt;br /&gt;사실 SI 프로젝트라는 것이 고객의 needs를 잘 분석해서&lt;br /&gt;끈끈한 팀웍과 훌륭한 조직원들이서로 공유하고&lt;br /&gt;리스크 최소화 하면서 결국 최고의 시스템을&lt;br /&gt;고객에게 주는 것인데 무엇이 우리를 힘들게 하는 것인지&lt;br /&gt;참...우리 모두 고민을 해야 할 것 같습니다. 마지막으로&lt;br /&gt;"SI Project (전문가로 가는길)"이란 책에서 발췌한&lt;br /&gt;"성공적인 프로젝트의 요건"에 대해서 말씀 드리고&lt;br /&gt;마무리 하겠습니다.&lt;br /&gt;&lt;br /&gt;1. 고객을 프로젝트에 최대한 깊이참여 하도록 한다.&lt;br /&gt;2. 고객 경영진의 적극적인 후원을 얻어야 한다.&lt;br /&gt;3. 인수인계를 위한 대비를 일찌감치 시작한다.&lt;br /&gt;4. 80:20(인재) 률을 최대한 활용하라.&lt;br /&gt;5. 고객의 속마음을 읽어라&lt;br /&gt;6. 프로젝트팀을 잘 관리하라.&lt;br /&gt;&lt;br /&gt;모드 성공적은 SI 프로젝트가 되길 바랍니다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-7788030660989056797?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/7788030660989056797/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/si.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/7788030660989056797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/7788030660989056797'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/si.html' title='SI Project 패러다임!!'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-2555128290697792800</id><published>2010-04-19T07:20:00.000-07:00</published><updated>2010-04-22T21:11:58.238-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>XP의 핵심 실천 사항</title><content type='html'>최근에 "&lt;a style="font-weight: bold; color: rgb(0, 0, 0);" href="http://durl.kr/fhvc"&gt;SI Project (전무가로 가는길)&lt;/a&gt;" 책을 읽으면서&lt;br /&gt;XP(eXtreme Programming)의 핵심 실천 사항이&lt;br /&gt;잘 정리가 되어 있어서 발췌해 봅니다.&lt;br /&gt;참고로 SI 개발자 분들께서는 반드시&lt;br /&gt;꼭 필독서라고 생각 합니다.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;전체가 한 팀이다 (whole team)&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;XP 프로젝트를 위한 프로젝트팀은 고객과 개발자&lt;br /&gt;그리고 프로젝트 관리자로 구성된다.&lt;br /&gt;이들 구성원들은 기존 프로젝트 관리방법론에서 개발을&lt;br /&gt;위해 여러 파트로 구분하던 것을 하나의 팀으로 운영 하면서&lt;br /&gt;User Story를 중심으로 개발 계획 및 배포계획을 작성하고&lt;br /&gt;이에 따라 반복적 개발 방식으로 개발을 추진한다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;계획 게임 (planning game)&lt;/li&gt;&lt;/ul&gt;고객과 함께 하는 게임이다. 고객이 User Story를 작성하면&lt;br /&gt;개발자는 이를 분석하여 개발에 필요한 시간을&lt;br /&gt;구하고 고객은 여러 User Story들에 대해 개발에&lt;br /&gt;우선순위를 부여하고 개발을 위한 배포계획을 개발자와&lt;br /&gt;함께 수립하여 개발을 진행 한다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;고객이 테스트 한다 (customer tests)&lt;/li&gt;&lt;/ul&gt;모든 User Story들은 개발이 완료되면 단위 테스트를 거치고 인수&lt;br /&gt;테스트를 수행한다.&lt;br /&gt;이때 인수 테스트를 위한 기준을 고객이 지정하고 인수 테스트에&lt;br /&gt;고객이 참여함으로써 User Story의 구현이 완벽하게 되었는가를&lt;br /&gt;검증 한다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;작은 배포 (small release)&lt;/li&gt;&lt;/ul&gt;모든 XP에서의 시스템 개발은 시스템 규모에 관계없이 일정한&lt;br /&gt;크기의 User Story로부터 시작되면 이러한 작은 User&lt;br /&gt;Story들이 모여 하나의 시스템을 구성한다.&lt;br /&gt;따라서 User Story의 구현에 따른 작은 배포가 수없이&lt;br /&gt;많은 횟수로 이루어지며 이 때마다 자동화된 테스트 환경에&lt;br /&gt;의해 시스템의 통합 테스트가 이루어지게 된다. XP의&lt;br /&gt;기본 사상으로서 테스트의 반복은 시스템 품질&lt;br /&gt;향상을 위한 초석이다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;단순한 설계 (simple design)&lt;/li&gt;&lt;/ul&gt;프로그램을 하기 위한 설계의 일환으로 기립회의를 추진 한다.&lt;br /&gt;개발자들이 둥글게 둘러서서 시스템의 설계를 검토하는&lt;br /&gt;짧은 회의를 설계안에 대한 의견을 공유하며 여러&lt;br /&gt;설계안 중에서 가장 단순한 설계안을 채택함으로써 시스템&lt;br /&gt;의 복잡도를 낮추고 품질을 높이는 전략을 채택하고 있다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;짝 프로그래밍 (pair programming)&lt;/li&gt;&lt;/ul&gt;팀원들 간에 교대로 두 명의 프로그래머가 짝을 이루어 하나의&lt;br /&gt;User Story를 설계하고 구현함으로써 팀 의사소통 활성화&lt;br /&gt;및 시스템 전반에 대한 품질 향상과 팀원들의 기술력&lt;br /&gt;확산에 긍정적인 결과를 유도할 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;테스트 중심 개발 (test-driven development)&lt;/li&gt;&lt;/ul&gt;테스트 케이스를 기반으로 자동화된 테스트 환경을 프로그램&lt;br /&gt;이전에 구축하고 프로그램 과정에서 지속적인 테스트를&lt;br /&gt;수행하여 프로그램의 품질을 높인다. 효율적인&lt;br /&gt;테스트 환경의 구축을 위해 자동화된 테스트 도구의&lt;br /&gt;활용은 필수적이다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;설계의 개선 (design improvement)&lt;/li&gt;&lt;/ul&gt;리팩토링으로 대표되는 XP의 지속적인 설계의 개선은 모든 객체에&lt;br /&gt;대해 가능한 가장 효율적인 기능으로 재구성하는 것을 권장한다.&lt;br /&gt;리팩토링의 지향점은 객체의 기능을 유지하면서 가능한 단순한&lt;br /&gt;설계와 기능의 프로그램으로 재구성하는 것이다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;지속적인 통합 (continuos intergration)&lt;/li&gt;&lt;/ul&gt;수 많은 User Story로 세분화된 개발 단위 중심의 배포 계획에&lt;br /&gt;의한 지속적인 시스템 통합 및 테스트는 시스템을&lt;br /&gt;보다 안정적으로 개발할 수 있는 환경을 제공 한다.&lt;br /&gt;계속되는 작은 배포와 이에 따른 지속적인 통합 절차 및&lt;br /&gt;테스트의 수행으로 프로그램에서 오류는 제거되고&lt;br /&gt;프로그램 설계의 개선으로 효율성 및 성능은 향상된다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;선택적 코드 소유권한 (collective code ownership)&lt;/li&gt;&lt;/ul&gt;여러 개발자들이 자유로이 다른 개발자의 소스코드에 대한&lt;br /&gt;수정 권한을 갖도록 함으로써 다양한 관점에서의&lt;br /&gt;프로그램 설계 개선이 이루어진다. 또한 이 과정에서&lt;br /&gt;중복되는 프로그램의 기능이 제거되며&lt;br /&gt;프로그램 간의 인터페이스 문제들이 최소화되고 개발자의&lt;br /&gt;안목이 향상 된다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;코딩 표준 (coding standard)&lt;/li&gt;&lt;/ul&gt;XP에서의 프로그램은 프로젝트 전체 개발팀에 대한 코딩의&lt;br /&gt;표준 준수를 기준으로 수행한다.&lt;br /&gt;이 방침은 다른 개발 방법론에서도 주요한 개발 전략이다.&lt;br /&gt;그러나 XP에서는 짝 프로그래밍,선택적 코드 소유권한,&lt;br /&gt;설계의 개선 등의 전략을 통해 어떠한 다른 개발방법론보다&lt;br /&gt;코딩 표준이 효율적으로 적용될 수 있는 환경을 제공한다. 이 코딩&lt;br /&gt;표준은 전체 시스템을 마치 한명의 뛰어난 프로그래머가 개발&lt;br /&gt;한 것과 같은 효과를 가져온다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;은유법 (metaphor)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;프로젝트 팀 내에서 개발하고 있는 기능들에 대한 설명을 누구나 이해할&lt;br /&gt;수 있는 은유적인 기법을 통해 표현하려고 노력 한다.&lt;br /&gt;딱딱한 설명 대신 전체 시스템의 기능을 상징적으로&lt;br /&gt;표현할 수 있는 쉬운 표현의 작성을 위해 노력하는 과정에서 시스템의&lt;br /&gt;기능에 대한 보다 깊은 이해를 불러 오는 효과가 있다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;주당 40시간 (40 hour/week)&lt;/li&gt;&lt;/ul&gt;소프트웨어의 개발을 지속적인 행보로 오랜 시간 계속&lt;br /&gt;수행할 수 있도록 한다.마치 마라톤을 하듯이 순간의&lt;br /&gt;스퍼트로 전체적인 리듬과 페이스를 잃지 않도록&lt;br /&gt;꾸준하면서도 지치지 않는 시스템 개발을 위해 주당&lt;br /&gt;40시간의 개발 작업을 준수하도록 한다. 무리한 야근은&lt;br /&gt;개발자들의 생선성을 저하하며 시스템의 품질을 떨어&lt;br /&gt;뜨리고 장기간의 프로젝트 수행을 어렵게 만든다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-2555128290697792800?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/2555128290697792800/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/xp.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/2555128290697792800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/2555128290697792800'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/xp.html' title='XP의 핵심 실천 사항'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-7971605122761379608</id><published>2010-04-14T11:14:00.000-07:00</published><updated>2010-06-28T05:59:35.732-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='springshowcase'/><title type='text'>SSC-RPC 데모 동영상</title><content type='html'>&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;마이크가 허접한 관계로 이어폰을&lt;br /&gt;이용해야 할 듯 합니다.&lt;br /&gt;궁금한 사항은 메일(springorg@gmail.com) 또는&lt;br /&gt;댓글을 남겨 주시기 바랍니다.&lt;br /&gt;총 7Par로 구성 되었습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a style="font-weight: bold; " href="http://durl.kr/ex75"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;[Part1&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a style="font-weight: bold; " href="http://durl.kr/ex76"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;[Part2]&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a style="font-weight: bold; " href="http://durl.kr/ex78"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;[Part3]&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a style="font-weight: bold; " href="http://durl.kr/ex79"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;[Part4]&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a style="font-weight: bold; " href="http://durl.kr/ex7a"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;[Part5]&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a style="font-weight: bold; " href="http://durl.kr/ex7b"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;[Part6]&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a style="font-weight: bold; " href="http://durl.kr/ex7o"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;[Part7]&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-7971605122761379608?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/7971605122761379608/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/ssc-rpc.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/7971605122761379608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/7971605122761379608'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/ssc-rpc.html' title='SSC-RPC 데모 동영상'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-6319703692754443607</id><published>2010-04-14T10:00:00.000-07:00</published><updated>2010-04-14T10:45:10.360-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='springshowcase'/><title type='text'>SpringShowcase Epilogue</title><content type='html'>2주동안 개발자로써 평소 하고 싶은 오픈소스를&lt;br /&gt;마음껏 즐겼습니다.&lt;br /&gt;하지만 막상 시작을 해보니 생각보다 힘들고 때론&lt;br /&gt;지루함 마져 들었습니다.&lt;br /&gt;&lt;br /&gt;하지만 개발자는 예술가란 말을 느낄수 있는 계기가&lt;br /&gt;되었습니다. 단순 획일된 프로그램이 아닌&lt;br /&gt;테마를 가지고 창작을 하면서 고뇌하고&lt;br /&gt;때로는 외로움마져 느끼는...&lt;br /&gt;그리고 완성 되었을때 희열과 다음 작품에 대한&lt;br /&gt;구상을 하는 것이 개발이란 원래 이런 것이&lt;br /&gt;아닌가 싶습니다.&lt;br /&gt;&lt;br /&gt;그러고 보면 참 좋은 오픈 소스를 제공하는 개발자분들께&lt;br /&gt;정말 고맙다는 생각이 들었습니다.&lt;br /&gt;그리고 오픈 소스 참여라는 것이 꼭 개발만 하는 것이&lt;br /&gt;아니라 메일이나 댓글을 통해서 관심을 갖는 그자체가&lt;br /&gt;참여라는 것을 느꼈습니다.&lt;br /&gt;&lt;br /&gt;개인적으로는 SpringDM서버 기반에 JPA를&lt;br /&gt;이용한 Domain Driven Develop를 구상했는데&lt;br /&gt;일단은 가장 많이 사용하고 있고 제일 관심이 많은&lt;br /&gt;웹 MVC에 대해서 구현 했습니다.&lt;br /&gt;시간이 된다면 SSC-SI (현재 실무형 샘플),&lt;br /&gt;SSC-AnyFrame ,SSC-Lafj, SSC-egovFrame&lt;br /&gt;SSC-GAUSE 이런것도 구현하고 싶은데..&lt;br /&gt;척박한 한국 개발 현실에서 한다는 것이&lt;br /&gt;쉽지만은 않을 것 같습니다.&lt;br /&gt;일단 다음 프로젝트는 변태적(?)인 것이 아니라&lt;br /&gt;최근에 웹 서비스의 대세 REST에 대해서&lt;br /&gt;샘플작업을 하려고 합니다.&lt;br /&gt;그리고 곧 새로운 일을 시작해서 지금처럼&lt;br /&gt;집중적으로 개발을 하기가 싶지 않아서&lt;br /&gt;언제쯤 만들지 장담을 못할듯 합니다.&lt;br /&gt;&lt;br /&gt;혹시나 필요한 기능이나 요청이 있다면&lt;br /&gt;저한테 메일로 주시면 최대한 반영하도록&lt;br /&gt;하겠습니다.&lt;br /&gt;&lt;br /&gt;마지막으로 어디서 돈을 받고 이짓(?)을 하는 것이&lt;br /&gt;아닙니다. 저또한 일반 개발자 분들이랑&lt;br /&gt;동일한 조건에서 틈틈히&lt;br /&gt;블로깅하고 개발하고 있습니다.&lt;br /&gt;지치지 않게 많은 참여와 응원 부탁 드립니다.&lt;br /&gt;감사 합니다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-6319703692754443607?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/6319703692754443607/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/springshowcase-epilogue.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6319703692754443607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6319703692754443607'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/springshowcase-epilogue.html' title='SpringShowcase Epilogue'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-1418362173744025063</id><published>2010-04-13T22:49:00.000-07:00</published><updated>2010-04-22T21:17:12.405-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='springshowcase'/><title type='text'>Spring3.0 기반 SSC-RPC RC1 릴리즈!! (개인 오픈소스:Like DWR)</title><content type='html'>SSC-RPC  RC1 버전을 릴리즈 했습니다.&lt;br /&gt;제가 예전부터 구상한 컨셉이 있어서 이번에&lt;br /&gt;개발을 했습니다.&lt;br /&gt;SSC-RPC는 DWR 컨셉과 매우 흡사한&lt;br /&gt;모델이라고 할 수 있습니다.&lt;br /&gt;(제 개인적으로는 SPRING DWR이 아닐까&lt;br /&gt;생각 합니다. ㅋㅋ)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5VYpS-OcdCs/S8VYth3CNUI/AAAAAAAAAKM/HtA0pfk6gp8/s1600/A.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://4.bp.blogspot.com/_5VYpS-OcdCs/S8VYth3CNUI/AAAAAAAAAKM/HtA0pfk6gp8/s320/A.jpg" alt="" id="BLOGGER_PHOTO_ID_5459867662463153474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;strong&gt;Technologies&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;(&lt;span style="font-weight: bold;"&gt;1) JDK 1.6&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(2) Tomcat 6.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(3) Spring 3.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(4) Tiles2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(5) jQuery&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(6) JSR-303 Validation&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(7) Json-Li&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;b&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;DWR Issue&lt;/li&gt;&lt;/ul&gt;DWR은 원격에 있는 비지니스 컴포넌트(Service 클래스 같은)&lt;br /&gt;를 "클래스명.메서드" 유사한 형태로 client에서&lt;br /&gt;직접 호출해서 리턴값을 json 형태로 reponse 해주는&lt;br /&gt;ajax 오픈 소스 입니다.&lt;br /&gt;,즉 컨트롤러 없이 원격에서 직접 비지니스 컴포넌트를&lt;br /&gt;다이렉트로 호출한다는 뜻입니다.&lt;br /&gt;하지만 DWR이 실무에서 사용하기에는 몇가지 제약&lt;br /&gt;사항이 있습니다. 그중에서 Validation,Exception 부분입니다.&lt;br /&gt;내부적 DWR은 http status 정보를 전부 200 OK로&lt;br /&gt;응답을 하기 때문에 클라언트에서 처리하기가&lt;br /&gt;명확하지 않으며 Validation,Exception 메세지&lt;br /&gt;처리가 거의 지원이 안된다고 볼 수 있습니다.&lt;br /&gt;그리고 외국 블로그를 보면 spring security&lt;br /&gt;연동할때 버그가 있다고 합니다.&lt;br /&gt;(아무래도 범용적인 오픈 소스라서 그런듯...)&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;Just One Controller&lt;/li&gt;&lt;/ul&gt;ssc-rpc는 이런 부분에 대해서 DWR 컨셉과&lt;br /&gt;유사하게 하되 위에 언급한 문제점을 해결 하도록&lt;br /&gt;처리 했습니다.&lt;br /&gt;단 원격 호출을 당하는 컴포넌트(Service 클래스와 같은)&lt;br /&gt;클래스 생성 및 스프링빈 설정이 약간의 제약이&lt;br /&gt;있지만 실무에서 사용하는데 큰 무리가 없도록&lt;br /&gt;되어 있습니다. View를 위한 컨트롤러를 제외한&lt;br /&gt;Ajax 호출 부분은 하나의 컨트롤러만 설정하면&lt;br /&gt;되기 때문에 개발에 정말 많은 공수를 save 할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;SSC-MVC 모든 기능 사용 가능&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://beyondj2ee.blogspot.com/2010/04/ssc-mvc.html"&gt;SSC-MVC의 모든 기능&lt;/a&gt;을 지원 하도록 구성 했습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre   style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;&lt;code&gt;$(document).ready(function() {&lt;br /&gt;$("#btnRequest").bind("click", function(e) {&lt;br /&gt;$.ajax({&lt;br /&gt;    type: "POST",&lt;br /&gt;    url: APPLICATION_CONTEXT+"/rpc.json",&lt;br /&gt;    dataType: "text",&lt;br /&gt;    data:{&lt;br /&gt;        "invoke":"&lt;span style="font-weight: bold;"&gt;dwrFacade.getUserList&lt;/span&gt;"&lt;br /&gt;    },&lt;br /&gt;    beforeSend:function(xhr) {&lt;br /&gt;    },&lt;br /&gt;    success:function(data, textStatus,xhr) {&lt;br /&gt;        if(data == "{}") {&lt;br /&gt;            alert('데이터가 존재 하지 않습니다.');&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;        alert(data);&lt;br /&gt;    },&lt;br /&gt;    error:function(xhr, textStatus, errorThrown) {&lt;br /&gt;        //invalid binding&lt;br /&gt;        if(xhr.status == 400) {&lt;br /&gt;            alert(xhr.responseText);&lt;br /&gt;        }else{&lt;br /&gt;            alert(xhr.responseText);&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    complete:function(xhr, textStatus) {&lt;br /&gt;    },&lt;br /&gt;    timeout:1000&lt;br /&gt;});//ajax of end&lt;br /&gt;});&lt;br /&gt;});&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;클라이언트에서는 별다른 Controller 설치 없이&lt;br /&gt;위의 "invoke" 파라미터에 "스프링빈 아이디.메서드"라고&lt;br /&gt;호출 하면 해당 메서드가 실행 되고 리터 값이&lt;br /&gt;json 형태로 리턴 하게 되어 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;선택적 Validation&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;원격에서 호출되는 컴포넌트의 메서드를 "@Valid"을&lt;br /&gt;선언 함으로써 선택적으로 validate를 수행 할 수 있&lt;br /&gt;습니다.&lt;br /&gt;&lt;pre face="Andale Mono,Lucida Console,Monaco,fixed,monospace" size="12px" style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;span style="font-weight: bold;"&gt;@Valid&lt;/span&gt;&lt;br /&gt; public void createUser(User user) {&lt;br /&gt;     dwrService.createUser(user);&lt;br /&gt; }&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;"@Valid" 어노테이션을 선언 하지 않으면 validate를&lt;br /&gt;수행 하지 않습니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;실행 방법&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://beyondj2ee.blogspot.com/2010/04/springshowcase_3177.html"&gt;[SpringShowcase 실행하기&lt;/a&gt;] 을 참고 하고 아래의 svn 주소로&lt;br /&gt;체크아웃 받으시면 됩니다.&lt;br /&gt;&lt;a href="https://springshowcase.googlecode.com/svn/trunk/ssc-rpc" rel="nofollow"&gt;https://springshowcase.googlecode.com/svn/trunk/ssc-rpc&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-1418362173744025063?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/1418362173744025063/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/spring30-ssc-rpc-rc1-like-dwr.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/1418362173744025063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/1418362173744025063'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/spring30-ssc-rpc-rc1-like-dwr.html' title='Spring3.0 기반 SSC-RPC RC1 릴리즈!! (개인 오픈소스:Like DWR)'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_5VYpS-OcdCs/S8VYth3CNUI/AAAAAAAAAKM/HtA0pfk6gp8/s72-c/A.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-5746069051595496098</id><published>2010-04-10T08:43:00.002-07:00</published><updated>2010-06-28T05:59:13.454-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='springshowcase'/><title type='text'>SpringShowcase 개발 및 실행 환경 설정 (자바 개발환경 설정)</title><content type='html'>&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;SpringShowcase 오픈 소스 프로젝트 개발 환경 설정&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;방법에 대해서 동영상을 제작 했습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(ㅋㅋ 허접함)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;마이크기능이 허접해서 이어폰으로 들으셔야&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;할 것 같습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;동영상이 파일크기가 좀 되서 4개의 Part로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;나누어서 만들었습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;꼭 오픈소스 개발 환경이 아니더라도&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;개발자분들 환경 셋팅 하는데 좀 도움이 되지 않을까&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Part1&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://video.nate.com/212458436"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;http://video.nate.com/212458436&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Part2&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://video.nate.com/212458528"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;http://video.nate.com/212458528&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Part3&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://video.nate.com/212458592"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;http://video.nate.com/212458592&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Part4&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://video.nate.com/212458639"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;http://video.nate.com/212458639&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-5746069051595496098?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/5746069051595496098/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/springshowcase_3177.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5746069051595496098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5746069051595496098'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/springshowcase_3177.html' title='SpringShowcase 개발 및 실행 환경 설정 (자바 개발환경 설정)'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-2147286207226848341</id><published>2010-04-07T06:38:00.001-07:00</published><updated>2010-06-28T06:00:02.885-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='springshowcase'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring3.0 기반 SSC-MVC 릴리즈!! (개인 오픈소스:실무형 MVC)</title><content type='html'>&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;개인적으로 Spring3.0 기반 오픈소스 "&lt;/span&gt;&lt;/span&gt;&lt;a href="http://code.google.com/p/springshowcase/"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;SpringShowcase&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;의 마이너 버전을 release 했습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(최근에 개인적으로 백수인 관계로 놀기도 모하고 해서....ㅋㅋ)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이번 버전 컨셉은 Spring3.0 기반에 실무형 MVC&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;prototype 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5VYpS-OcdCs/S7yX5s5N8BI/AAAAAAAAAJM/b-d-r6OqP5M/s1600/1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 182px;" src="http://2.bp.blogspot.com/_5VYpS-OcdCs/S7yX5s5N8BI/AAAAAAAAAJM/b-d-r6OqP5M/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5457403866025685010" border="0" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Technologies&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;1) JDK 1.6&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(2) Tomcat 6.0&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(3) Spring 3.0&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(4) Tiles2&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(5) jQuery&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(6) JSR-303 Validation&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(7) Json-Li&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;b&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(8) Apache Commons Configuration&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;New Feature&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(1) Dynamic Tiles2 Layout&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Html Layout을 무거운 sitemesh 대신 Tiles2를 적용&lt;br /&gt;와일드 카드 설정으로 인해서 config 최소화&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;(2) compound configuration&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;System Properties,Application Properties,DB Code ..&lt;br /&gt;등 실무에서 사용하는 config성 데이터를 한개의&lt;br /&gt;compound형태의 spring bean으로 제공.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5VYpS-OcdCs/S7yZKi2ZqmI/AAAAAAAAAJU/jC5SsW3GcYE/s1600/b.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 159px;" src="http://2.bp.blogspot.com/_5VYpS-OcdCs/S7yZKi2ZqmI/AAAAAAAAAJU/jC5SsW3GcYE/s320/b.jpg" alt="" id="BLOGGER_PHOTO_ID_5457405254898920034" border="0" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(3) trace log&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;개발기 디버깅을 위해서 각 구간별 (Controller,Facade,Service,Dao..)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;수행 시간, binding data의 속성 정보,client 기본 정보&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(요청 url,http method,parameter 정보)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;등을 로그로 기록한다. 로그레벨 "Info"로 설정시&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;조회 가능.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5VYpS-OcdCs/S7yaZT6SLnI/AAAAAAAAAJc/IVp7CMlasPU/s1600/c.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 157px;" src="http://2.bp.blogspot.com/_5VYpS-OcdCs/S7yaZT6SLnI/AAAAAAAAAJc/IVp7CMlasPU/s320/c.jpg" alt="" id="BLOGGER_PHOTO_ID_5457406608098340466" border="0" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(4) Form Type Validation with JSR-303&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Form Type(전통적인 submit 방식)기반 Validation을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;JSR-303 스펙으로 구현. Annotation 기반 컨트롤러에서&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;구현 (스타일은 이전 SimpleFormController 방식)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5VYpS-OcdCs/S7yd89HnEvI/AAAAAAAAAJk/1kHsSJ60I0w/s1600/c_00000.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_5VYpS-OcdCs/S7yd89HnEvI/AAAAAAAAAJk/1kHsSJ60I0w/s320/c_00000.jpg" alt="" id="BLOGGER_PHOTO_ID_5457410518990394098" border="0" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(5) Ajax Type Validation with JSR-303&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Clinet에서 jQuery를 통해서 요청시 바인딩&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Validation이 발생할 경우 json 형태로 invalid된&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;field 아이디: 에러메시지를 출력함.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5VYpS-OcdCs/S7yfbdPF6xI/AAAAAAAAAJs/ZlUyzKryL9U/s1600/c_00001.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 160px;" src="http://1.bp.blogspot.com/_5VYpS-OcdCs/S7yfbdPF6xI/AAAAAAAAAJs/ZlUyzKryL9U/s320/c_00001.jpg" alt="" id="BLOGGER_PHOTO_ID_5457412142519413522" border="0" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(6) Global Locale&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;spring 3.0에 추가된"&lt;/span&gt;&lt;/span&gt;&lt;span class="tagName"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;mvc:annotation-driven&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;" 네임스페이스를&lt;br /&gt;적용해서 구현&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5VYpS-OcdCs/S7yg9MaCE5I/AAAAAAAAAJ0/hUBdqVxktls/s1600/c_00002.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 80px;" src="http://1.bp.blogspot.com/_5VYpS-OcdCs/S7yg9MaCE5I/AAAAAAAAAJ0/hUBdqVxktls/s320/c_00002.jpg" alt="" id="BLOGGER_PHOTO_ID_5457413821629076370" border="0" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(7) Ajax View Support with Json-Lib&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Spring3.0에서 제공 하는 "jackson" 라이브러리는 톰캣를&lt;br /&gt;제외한 다른 서버에서 Verify Exception을 발생함.&lt;br /&gt;보다 검증되고 다양한 형태의 "json-lib" 뷰로&lt;br /&gt;구현함.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5VYpS-OcdCs/S7yi-ShYyQI/AAAAAAAAAJ8/xz6d-YTf00Q/s1600/c_00003.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 103px;" src="http://4.bp.blogspot.com/_5VYpS-OcdCs/S7yi-ShYyQI/AAAAAAAAAJ8/xz6d-YTf00Q/s320/c_00003.jpg" alt="" id="BLOGGER_PHOTO_ID_5457416039473662210" border="0" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(8) 직관적인 Exception 메세지&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;exception이 발생 했을 경우 에러 메세지를 직관적으로&lt;br /&gt;지원. 예를 들어서 메세지 번들에 Exception Short 명을&lt;br /&gt;키로 하고 메세지를 입력하면 자동으로 파싱해서&lt;br /&gt;출력함&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;exception_ko.properties&lt;br /&gt;NullPointException=데이터값이 존재 하지 않습니다.&lt;br /&gt;NotFoundUserException=회원이 존재 하지 않습니다.&lt;br /&gt;&lt;br /&gt;(9) &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Exception Message&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt; Supported Ajax&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Ajax 요청시 Exception 메세지를 json 형태로&lt;br /&gt;에러메세지 뿐만 아니라 exception에 관련된&lt;br /&gt;다양한 정보를 클라언트에게 전송 한다.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5VYpS-OcdCs/S7ylyOPaUKI/AAAAAAAAAKE/JqQTOX7hC6o/s1600/c_00004.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 79px;" src="http://1.bp.blogspot.com/_5VYpS-OcdCs/S7ylyOPaUKI/AAAAAAAAAKE/JqQTOX7hC6o/s320/c_00004.jpg" alt="" id="BLOGGER_PHOTO_ID_5457419130700976290" border="0" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(10) Exception Log&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;exception이 발생하면 별도의 로그파일로 관리 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;로그파일은 exception 발생 시 발생시간,trace ID,호출 URL&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;및 Http Parameter 정보, throw한 클래스들과 발생 line등을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;제공 한다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;[&lt;/span&gt;&lt;/span&gt;&lt;a href="http://springshowcase.googlecode.com/files/2010-04-07.log"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;로그파일 다운로드&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;실행 방법&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;아래의 동영상을 참고 하시기 바랍니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;[&lt;/span&gt;&lt;/span&gt;&lt;a href="http://code.google.com/p/springshowcase/wiki/SSCAllUserGuide?ts=1270914727&amp;amp;updated=SSCAllUserGuide"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;동영상 보기&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;세미나&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;4월 24일에 ssc-mvc 관련해서 간략하게 세미나를&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;하려고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;관심 있으신분은 댓글이나 메일로 보내 주시기 바랍니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;시간이 날때 기능별 User Guide를 만들려고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;아무래도 저도 돈받고 하는 사람이 아니라서&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;언제라고 장담은 못드리 겠네요 ^^&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-2147286207226848341?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/2147286207226848341/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/ssc-mvc.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/2147286207226848341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/2147286207226848341'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/ssc-mvc.html' title='Spring3.0 기반 SSC-MVC 릴리즈!! (개인 오픈소스:실무형 MVC)'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_5VYpS-OcdCs/S7yX5s5N8BI/AAAAAAAAAJM/b-d-r6OqP5M/s72-c/1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-4703196037526437122</id><published>2010-04-07T06:18:00.000-07:00</published><updated>2010-06-28T06:01:29.667-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring 3.0 다국어 처리</title><content type='html'>&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Spring3.0에서 다국어 처리 하는 방법에 대해서 &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;말씀 드리겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;3.0이라고 해서 크게 변동된 것은 없습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;단지 새로 추가된 네임 스페이스 "&lt;/span&gt;&lt;/span&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;pre class="code"&gt;&lt;span class="tagDelimiter"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span class="tagName"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;mvc:annotation-driven&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt; &lt;/span&gt;&lt;span class="tagDelimiter"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"를 통한 설정이 조금 변경 되었습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;먼저 아래와 같이 Message Resource를 등록 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;pre   style=" background-color: rgb(238, 238, 238);  border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(153, 153, 153); border-right-color: rgb(153, 153, 153); border-bottom-color: rgb(153, 153, 153); border-left-color: rgb(153, 153, 153); line-height: 14px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; overflow-x: auto; overflow-y: auto; width: 100%; font-family:'Andale Mono', 'Lucida Console', Monaco, fixed, monospace;font-size:12px;"&gt;&lt;code&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;span class="Apple-style-span"  style="color:#000000;"&gt;&amp;lt;bean id="messageSource"&lt;br /&gt;     class="org.springframework.context.support.ResourceBundleMessageSource"&amp;gt;&lt;br /&gt;     &amp;lt;property name="basenames"&amp;gt;&lt;br /&gt;         &amp;lt;list&amp;gt;&lt;br /&gt;             &amp;lt;value&amp;gt;messages.default&lt;br /&gt;             &amp;lt;/value&amp;gt;&lt;br /&gt;             &amp;lt;/list&amp;gt;&lt;br /&gt;     &amp;lt;/property&amp;gt;&lt;br /&gt; &amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;아래와 같이 localeResolver를 설정 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;실무에서는 다국어 처리를 세션으로 제일 많이&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;사용하기 때문에 SessionLocale를 설정 했습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;pre   style=" background-color: rgb(238, 238, 238);  border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(153, 153, 153); border-right-color: rgb(153, 153, 153); border-bottom-color: rgb(153, 153, 153); border-left-color: rgb(153, 153, 153); line-height: 14px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; overflow-x: auto; overflow-y: auto; width: 100%; font-family:'Andale Mono', 'Lucida Console', Monaco, fixed, monospace;font-size:12px;"&gt;&lt;code&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;span class="Apple-style-span"  style="color:#000000;"&gt;&amp;lt;bean id="localeResolver"&lt;br /&gt;     class="org.springframework.web.servlet.i18n.SessionLocaleResolver" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;마지막으로 "mvc:annotation-driven" 네임스페이스에 &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;interceptor를 적용 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;pre   style=" background-color: rgb(238, 238, 238);  border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(153, 153, 153); border-right-color: rgb(153, 153, 153); border-bottom-color: rgb(153, 153, 153); border-left-color: rgb(153, 153, 153); line-height: 14px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; overflow-x: auto; overflow-y: auto; width: 100%; font-family:'Andale Mono', 'Lucida Console', Monaco, fixed, monospace;font-size:12px;"&gt;&lt;code&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;span class="Apple-style-span"  style="color:#000000;"&gt;&amp;lt;mvc:interceptors&amp;gt;&lt;br /&gt;     &amp;lt;bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"&amp;gt;&lt;br /&gt;         &amp;lt;property name="paramName" value="lang" /&amp;gt;&lt;br /&gt;     &amp;lt;/bean&amp;gt;&lt;br /&gt; &amp;lt;/mvc:interceptors&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;아래와 같이 "lang"파라미터에 국가 코드를 &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;넘기면 다국어가 변경 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;국문 : http://....../hello.htm?lang=ko&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;영문 : http://....../hello.htm?lang=en&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-4703196037526437122?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/4703196037526437122/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/spring-30.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4703196037526437122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4703196037526437122'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/spring-30.html' title='Spring 3.0 다국어 처리'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-1356851239885903427</id><published>2010-04-04T19:27:00.000-07:00</published><updated>2010-06-28T06:02:48.593-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring 3.0 Validation Part3</title><content type='html'>&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Part1,Part2는 기본적인 스프링에서 JSR-303&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Validation 사용 방법에 대해서 설명 드렸습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이번 Part는 Custom Validation에 대해서&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;말씀 드리겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;먼저 User 도메인 클래스 보면 아래와&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;같습니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre   style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;&lt;code&gt;public class User {&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;@NotEmail&lt;/span&gt;&lt;br /&gt;private String email;&lt;br /&gt;&lt;br /&gt;.....&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"@NotEmail"은 제가 직접 만든 검증&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;annotation 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이제 부터 작성 방법에 대해서 말씀 드리겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;NotEmail Annotation 작성 방법&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;custom validation을 만들려면 2개의 클래스가 필요 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;첫번째는 검증 annotation 클래스 이며 나머지 하나는&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;annotation을 검증할 validator 클래스 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이 두클래스의 참조 관계는 서로 의존 하는 관계&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;입니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre   style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;&lt;code&gt;package org.springshowcase.mvc;&lt;br /&gt;&lt;br /&gt;import java.lang.annotation.Documented;&lt;br /&gt;import java.lang.annotation.ElementType;&lt;br /&gt;import java.lang.annotation.Retention;&lt;br /&gt;import java.lang.annotation.RetentionPolicy;&lt;br /&gt;import java.lang.annotation.Target;&lt;br /&gt;&lt;br /&gt;import javax.validation.Constraint;&lt;br /&gt;import javax.validation.ConstraintPayload;&lt;br /&gt;&lt;br /&gt;@Documented&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;//@Constraint(validatedBy = EmailValidator.class)&lt;/span&gt;&lt;br /&gt;@Target( { ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })&lt;br /&gt;@Retention(RetentionPolicy.RUNTIME)&lt;br /&gt;public @interface NotEmail {&lt;br /&gt;public abstract String message() default "Not Email Format!";&lt;br /&gt;public abstract Class&amp;lt;?&amp;gt;[] groups() default {};&lt;br /&gt;public abstract Class&amp;lt;? extends ConstraintPayload&amp;gt;[] payload() default {};&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"@Contraint" 부분을 주석 처리 하고 compile을 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이유는 아직 "EmailValidator" 클래스가 존재 하지 않기&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;때문입니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;EmailValidator 클래스 작성 방법&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;package org.springshowcase.mvc;&lt;br /&gt;&lt;br /&gt;import java.util.regex.Pattern;&lt;br /&gt;&lt;br /&gt;import javax.validation.ConstraintValidator;&lt;br /&gt;import javax.validation.ConstraintValidatorContext;&lt;br /&gt;&lt;br /&gt;import org.springframework.beans.factory.annotation.Autowired;&lt;br /&gt;import org.springframework.beans.factory.annotation.Qualifier;&lt;br /&gt;&lt;br /&gt;public class EmailValidator implements ConstraintValidator&amp;lt;NotEmail, String&amp;gt; {&lt;br /&gt;&lt;br /&gt;@Autowired&lt;br /&gt;@Qualifier("emailPattern")&lt;br /&gt;String pattern;&lt;br /&gt;&lt;br /&gt;public void initialize(NotEmail constraintAnnotation) {&lt;br /&gt;// nothing to initialize&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public boolean isValid(String value, ConstraintValidatorContext context) {&lt;br /&gt;Pattern EMAIL_PATTERN = Pattern.compile(this.pattern);&lt;br /&gt;return EMAIL_PATTERN.matcher(value).matches();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;반드시 "ContraintValidator" 인터페이스를 구현 해야 합니다&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"@Autowired" 어노테이션을 보면 스프링 annotation 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이 얘기는 아래와  같이 스프링 빈을 선언 하면&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&amp;lt;mvc:annotation-driven /&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"ContraintValidator" 인터페이스를 구현한 모든 클래스는&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;스프링 ApplicationContext에서 이러한 클래스들을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;스프링 빈으로 생성합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이말은 Validator에 다른 스프링 빈을 injection을 할 수있다는&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;뜻 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;예제를 통해서 email 정규식을 일부러 스프링 빈으로 설정하고&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;injection을 시켰습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;아래는 injection 당한 빈 입니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&amp;lt;bean id="emailPattern" class="java.lang.String"&amp;gt;&lt;br /&gt;&amp;lt;constructor-arg index="0" type="java.lang.String"&lt;br /&gt;    value=".+@.+\\.[a-z]+" /&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;NotEmail Annotation 재컴파일&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이제 "EmailValidator"가 생성이 되었기 때문에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"NotEmail" 어노테이션 클래스의 주석을 해제하고&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;재컴파일 합니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;package org.springshowcase.mvc;&lt;br /&gt;&lt;br /&gt;import java.lang.annotation.Documented;&lt;br /&gt;import java.lang.annotation.ElementType;&lt;br /&gt;import java.lang.annotation.Retention;&lt;br /&gt;import java.lang.annotation.RetentionPolicy;&lt;br /&gt;import java.lang.annotation.Target;&lt;br /&gt;&lt;br /&gt;import javax.validation.Constraint;&lt;br /&gt;import javax.validation.ConstraintPayload;&lt;br /&gt;&lt;br /&gt;@Documented&lt;br /&gt;@Constraint(validatedBy = EmailValidator.class)&lt;br /&gt;@Target( { ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE })&lt;br /&gt;@Retention(RetentionPolicy.RUNTIME)&lt;br /&gt;public @interface NotEmail {&lt;br /&gt;public abstract String message() default "Not Email Format!";&lt;br /&gt;public abstract Class&amp;lt;?&amp;gt;[] groups() default {};&lt;br /&gt;public abstract Class&amp;lt;? extends ConstraintPayload&amp;gt;[] payload() default {};&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Message Bundle 작성 방법&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이제 새로운 custom validator를 작성이 끝났습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;새로운 annotation을 적용할 도메인 클래스에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;선언 하면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;메세지 번들 작성 방법은 아래와 같이 하면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;NotEmail.user.email=이메일 형식이 틀립니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Spring Validation VS JSR-303&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;JSR-303 스펙에 대해서 확정을 하기 위한 투표를&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;하려고 했을때 스프링 진영에서는 참석을 하지&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;않았다고 합니다. 그래서 jboss 진영에서 심기가&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;좋지 않았다는 얘기가 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;역시 둘은 앙숙인듯....&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;아무래도 스프링 입장에서 자기들 validation이&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;있는데 굳이 JSR-303 스펙을 넣는게 그다지&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;좋지는 않았을 것 같습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;anyway!&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;JSR-303은 제가 도메인 클래스를 얘를 들었지만&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;사실 도메인 클래스만 해당 되는 것은 아닙니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;모든 클래스(Service,DAO,..)에서 적용이 가능&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;직접 써보니 JSR-303은 장점이 상당히 많았습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;첫째 검증 로직의 중복이 없습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;대부분 스프링 validation은 매요청시 작성 한거에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;반해서 JSR-303은 도메인에 설정 하기때문에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;검증 로직이 좀더 명확하고 코딩수도 적다는 얘기&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;입니다. 그리고 메세지 작성 방법도 직관적이기&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;때문에 관리도 수월 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;반면 단점이 한나 있습니다. 좀 유연하지 않는다는&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;문제 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;무슨 얘기냐 예를 들어서 id,name,email  이런 3개의&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;속성이 있다고 하고 모두 NotNull 조건이라고&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;설정을 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;insert일 경우야 당연히 NotNull이지만&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;name만 update를 할경우 id,name 두&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;속성만 있으면 되는데 validation 조건이&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;모두 NotNull 조건이기 때문에 굳이&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;필요 없는 email에 기존 값을 채워서&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;보내야 한다는 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;즉 케이스별 검증 체크를 선택적으로 할 수&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;없다는 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이런 이유는 예측컨데 jboss 진영에 힘이&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;있었지 않나 생각 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;hibernate인 경우는 전체 업데이트를&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;체크 하기 때문이죠..&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;그래서 제가 개인적으로 시간이 되면 선택적으로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;validation을 수행하는 util 클래스를 만드려고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(언제가 될지 모르지만..)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;그리고 한가지 더 현재 JSR-303 라이브러리와 구현체&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;라이브러리가 release가 아닌 running 중이기 때문에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;라이브러리의 버전 진행도 유심히 모니터링&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;할 필요가 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;개인적으로 JSR-303은 실무에서 사용해도&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;훌륭한 개발 도구가 될 것 같습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;소스 다운 로드&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;본 예제는 제가 진행하는 오픈 소스 "ssc-mvc"를 체크아웃&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;받으시면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;자세한 내용은 &lt;/span&gt;&lt;/span&gt;&lt;a style="font-weight: bold; " href="http://code.google.com/p/springshowcase/"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;오픈 소스 사이트&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;를 참고 하시기 바랍니다.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-1356851239885903427?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/1356851239885903427/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/spring-30-validation-part3.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/1356851239885903427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/1356851239885903427'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/spring-30-validation-part3.html' title='Spring 3.0 Validation Part3'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-5797658569888139367</id><published>2010-04-04T18:14:00.000-07:00</published><updated>2010-06-28T06:04:04.979-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring 3.0 Validation Part2</title><content type='html'>&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"Spring 3.0 Validation Part1"에 이어서 설명 드리도록 하겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;먼저 이전에 작성한 User 도메인 클래스 입니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;package org.springshowcase.mvc;&lt;br /&gt;&lt;br /&gt;import javax.validation.constraints.Pattern;&lt;br /&gt;import javax.validation.constraints.Size;&lt;br /&gt;import org.hibernate.validation.constraints.NotEmpty;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class User {&lt;br /&gt;&lt;br /&gt;@NotEmpty()&lt;br /&gt;@Size(min=1,max = 5)&lt;br /&gt;@Pattern(regexp="[0-9a-zA-Z]")&lt;br /&gt;private String id;&lt;br /&gt;&lt;br /&gt;@NotEmpty()&lt;br /&gt;private String name;&lt;br /&gt;&lt;br /&gt;@NotEmail&lt;br /&gt;private String email;&lt;br /&gt;&lt;br /&gt;private Integer age;&lt;br /&gt;&lt;br /&gt;...setter &amp;amp; getter method&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Controller에서 Validation 사용 하는 방법&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Controller 에서 사용 하는 방법은 의외로 간단 합니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre   style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;&lt;code&gt;@RequestMapping(method = RequestMethod.POST)&lt;br /&gt;public ModelAndView processSubmit(&lt;span style="font-weight: bold;"&gt;@Valid&lt;/span&gt; @ModelAttribute("user") User user,&lt;br /&gt;BindingResult result, SessionStatus status) {&lt;br /&gt;ModelAndView mav = new ModelAndView();&lt;br /&gt;if (result.hasErrors()) {&lt;br /&gt;System.out.println(".....invalid");&lt;br /&gt;}&lt;br /&gt;return mav;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;위의 소스를 보면 검증을 위해서 파라미터 부분에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"@Valid" 어노테이션을 설정하면 끝입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;즉 저말은 User 도메인에 검증 로직을 실행 하라&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;는 뜻입니다. 이미 검증이 끝났기 때문에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"result.hasErrors"를 통해서 validation&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;분기 로직을 적절하게 작성 하면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;JSP 설정 방법&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&amp;lt;form:input path="id" /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;font color="yellow"&amp;gt;&amp;lt;form:errors path="id" /&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;label for="contact_email"&amp;gt;Enter user name: &amp;lt;/label&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;form:input path="name" /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;font color="yellow"&amp;gt;&amp;lt;form:errors path="name" /&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;label for="contact_email"&amp;gt;Enter email: &amp;lt;/label&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;form:input path="email" /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;font color="yellow"&amp;gt;&amp;lt;form:errors path="email" /&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;label for="contact_subject"&amp;gt;Enter Age: &amp;lt;/label&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;form:input path="age" /&amp;gt; &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;input type="button" value="Save Changes" onclick="doSave();" class="button" /&amp;gt;&lt;br /&gt;&amp;lt;/form:form&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;JSP 소스는 이전 버전과 동일 하게 위와 같이 코드를&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;작성 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Invalid시 Message 리소스 적용 하기&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이 부분은 SpringSource 팀 블러그와 JSR-303 스펙을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;보면서 알아낸 방법 입니다.매우 중요한 부분이니&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;잘 이해하시기 바랍니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;먼저 아래와 같이 메세지 번들을 설정 합니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&amp;lt;bean id="messageSource"&lt;br /&gt;  class="org.springframework.context.support.ResourceBundleMessageSource"&amp;gt;&lt;br /&gt;  &amp;lt;property name="basenames"&amp;gt;&lt;br /&gt;      &amp;lt;list&amp;gt;&lt;br /&gt;          &amp;lt;value&amp;gt;messages.default&amp;lt;/value&amp;gt;&lt;br /&gt;      &amp;lt;/list&amp;gt;&lt;br /&gt;  &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;default_ko.properties&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;메세지 expression은 "검증 annotation명+도메인명+속성명"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;으로 하며 key 작성 규칙은 java method 형식으로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;NotEmpty.user.id=아이디를 입력 하세요.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Size.user.id=아이디는 5자 이하 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Pattern.user.id=아이디는 반드시 영문 또는 숫자만 입력 가능 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;NotEmpty.user.name=이름을 입력 하세요.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;NotEmail.user.email=이메일 형식이 틀립니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;public class User {&lt;br /&gt;&lt;br /&gt;@NotEmpty()&lt;br /&gt;@Size(min=1,max = 5)&lt;br /&gt;@Pattern(regexp="[0-9a-zA-Z]")&lt;br /&gt;private String id;&lt;br /&gt;&lt;br /&gt;.....&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;예를 들어서 "@NotEmpty"의 경우 메세지 키는&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;NotEmpty(annotation 명) + "." + user(도메인 클래스명)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;+"." + id(속성명) 그래서 전체 메세지 키는&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"NotEmpty.user.id"가 되는 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Part3에서는 Custom Validation 작성 방법에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;대해서 말씀을 드리겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-5797658569888139367?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/5797658569888139367/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/spring-30-validation-part2.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5797658569888139367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/5797658569888139367'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/spring-30-validation-part2.html' title='Spring 3.0 Validation Part2'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-3224688236764916966</id><published>2010-04-02T07:57:00.000-07:00</published><updated>2010-06-28T06:04:48.458-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring 3.0 Validation Part1</title><content type='html'>&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Spring3.0 에서 Validation 기능을 보면 이전 버전&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;에서 사용했던 Validation 방법 뿐만 아니라&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;새로운 기능들이 추가가 되었습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;그중에서 단연 꽃은 JSR-303 스펙 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;혹자는 이것을 Spring 3.0 Validation이라고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;JSR-303스펙은 쉽게 말해서 자바의 모든 클래스 자체에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;검증 로직을 annotation으로 설정 해서 검증이&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;필요한 어느 곳이든 해당 검증을 수행 할 수 있도록&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;하는 J2EE Spec 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;ㅋㅋ 저 답지 않게 유식한 척을 했군요&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;아래 코드를 보면서 간략 하게 설명 드리겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;public class PersonForm {&lt;br /&gt;&lt;br /&gt;@NotNull&lt;br /&gt;@Size(max=64)&lt;br /&gt;private String name;&lt;br /&gt;&lt;br /&gt;@Min(0)&lt;br /&gt;private int age;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;위에 코드를 보면 name 속성은 반드시 값이 존재 해야 하고,&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;length는 64자를 넘어서는 안된 다는 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이렇게 클래스에 검증 로직을 넣고 검증이 필요한 곳&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;에서 실행을 하면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="font-weight: bold; "&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Library 설정&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;먼저 Spring 3.0 에서 JSR-303 스펙을 구현 하기 위해서는&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;아래의 라이브러리가 필요 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(1)  &lt;/span&gt;&lt;/span&gt;&lt;a href="http://repository.jboss.com/maven2/javax/validation/validation-api/1.0.CR3/validation-api-1.0.CR3.jar"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;jax-validation.jar &lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(JSR-303 스펙 라이브러리)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(2) &lt;/span&gt;&lt;/span&gt;&lt;a href="http://repository.jboss.com/maven2/org/hibernate/hibernate-validator/4.0.0.Beta2/hibernate-validator-4.0.0.Beta2.jar"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;hibernate-validation.jar&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt; (JSR-303  구현체 라이브러리)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;위 의 두개의 라이브러리를 다운 받아서 이클립스 classpath&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;를 설정 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;만약 Maven을 사용 하시는 분들은 아래의 pom.xml을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;추가 합니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&amp;lt;repositories&amp;gt;&lt;br /&gt;&amp;lt;repository&amp;gt;&lt;br /&gt;&amp;lt;id&amp;gt;jboss&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;lt;url&amp;gt;http://repository.jboss.com/maven2&amp;lt;/url&amp;gt;&lt;br /&gt;&amp;lt;releases&amp;gt;&lt;br /&gt;   &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;&amp;lt;/releases&amp;gt;&lt;br /&gt;&amp;lt;snapshots&amp;gt;&lt;br /&gt;   &amp;lt;enabled&amp;gt;false&amp;lt;/enabled&amp;gt;&lt;br /&gt;&amp;lt;/snapshots&amp;gt;&lt;br /&gt;&amp;lt;/repository&amp;gt;&lt;br /&gt;&amp;lt;/repositories&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;dependencies&amp;gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;hibernate-validator&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;4.0.0.Beta2&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;lt;/dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;스프링 3.0 full pom.xml 설정을 원하 시는 분들은&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;제 블러그 "&lt;/span&gt;&lt;/span&gt;&lt;a target="_blank" class="gs-title" href="http://beyondj2ee.blogspot.com/2010/03/spring30-pomxml.html"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Spring3.0  관련 라이브러리 (&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;pom&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;.xml)&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;을 참조 하시면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;검증 클래스 작성&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;package org.springshowcase.mvc;&lt;br /&gt;&lt;br /&gt;import javax.validation.constraints.Pattern;&lt;br /&gt;import javax.validation.constraints.Size;&lt;br /&gt;import org.hibernate.validation.constraints.NotEmpty;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class User {&lt;br /&gt;&lt;br /&gt;@NotEmpty()&lt;br /&gt;@Size(min=1,max = 5)&lt;br /&gt;@Pattern(regexp="[0-9a-zA-Z]")&lt;br /&gt;private String id;&lt;br /&gt;&lt;br /&gt;@NotEmpty()&lt;br /&gt;private String name;&lt;br /&gt;&lt;br /&gt;@NotEmail&lt;br /&gt;private String email;&lt;br /&gt;&lt;br /&gt;private Integer age;&lt;br /&gt;&lt;br /&gt; ...setter &amp;amp; getter method&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;위의 소스를 보면 전형적인 일반 자바 빈즈&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;클래스 형태 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"id" 속성의 검증 로직은 아래와 같습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;- 반드시 값이 존재 해야함&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;- 반드시 길이는 1이상 5이하여야 함 (byte 기준 아님)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;- 반드시 영문 또는 숫자 형태여야함&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"email" 속성에서 "@NotEmail"은 제가 직접&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;만든 annotation입니다. 이부분은 뒤에서&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;설명 하도록 하겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Spring 빈 설정&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;스프링에서 JSR-303 스펙을 적용 하기 위해서는&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;다소 복잡한 과정을 거쳐야 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"LocalValidatorFactoryBean" 빈을 설정 하고 또  이 빈을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"AnnotationMethodHandlerAdapter" 선언된 빈에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;injection 해야 하고...&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이런거 필요 없이 spring3.0 에서 아주 간단한&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;네임스페이스를 제공 합니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&amp;lt;mvc:annotation-driven /&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;위와 같이 선언 하면 스프링에서 JSR-303 적용은&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;끝입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Comming Up Next...&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;- Controller에서 Validation 사용 하는 방법&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;- JSR-303 기반 Message 번들 적용 방법&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;- JSP 설정 방법&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;- 커스컴 Validation Annotation 작성 방법&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;- Spring Validation VS JSR 303&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;너무 졸려서 다음에 포스팅 하도록 하겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-3224688236764916966?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/3224688236764916966/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/spring-30-validation-part1.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3224688236764916966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3224688236764916966'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/spring-30-validation-part1.html' title='Spring 3.0 Validation Part1'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-4330379708033381494</id><published>2010-04-01T01:59:00.000-07:00</published><updated>2010-04-22T21:18:54.213-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Validation 정책에 대해서....</title><content type='html'>오늘의 주제는 데이터 Validation에 대한 내용이며 개발적인&lt;br /&gt;측명 보다는 QA팀이나 보안검수팀에서 한번 정도 고려&lt;br /&gt;해야 할 정책적인 얘기를 하고자 합니다.&lt;br /&gt;데이터 Validation은 클라이언 사이드의 자바 스크립트&lt;br /&gt;검증과 서버사이드 검증이 있습니다.&lt;br /&gt;쿨 하게 결론 부터 말하자면&lt;br /&gt;"&lt;span style="font-weight: bold;"&gt;서버 검증만 하자는 것입니다.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;View Validation을 꼭 사용 하는 경우&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;(1)  서버 Validation 구현을 기술적으로 자신이 없어서&lt;br /&gt;    View Validation만 하는걸로 현업과 협의 된경우&lt;br /&gt;&lt;br /&gt;(2)  포털 사이트와 같이 많은 사용자가 있는 곳에서&lt;br /&gt;이벤트 같은 페이지일 경우 (서버로드 최소화 하기 위해서)&lt;br /&gt;&lt;br /&gt;(3) 일정에 쪼겨서 검수 항목에 서버 Validation은 제외한 경우&lt;br /&gt;&lt;br /&gt;이렇게 3가지 경우 외에는 굳이 View Validation을 할 필요가&lt;br /&gt;없다고생각 합니다.&lt;br /&gt;&lt;br /&gt;한번은 제가 보안 검증팀에 View Validation을 빼고&lt;br /&gt;서버 Validation만 하자고 했더니 절대 안된다고 했습니다.&lt;br /&gt;그래서 제가 why? you hate me?&lt;br /&gt;했더니 이해 할수 없는 두가지 답변을 친절하게&lt;br /&gt;해주었습니다.&lt;br /&gt;보안적인 문제와 서버로드 최소를 위한 목적이였습니다.&lt;br /&gt;&lt;br /&gt;그래서 저는 위 의 2가지에 대한 반론을 제시 했습니다.&lt;br /&gt;첫번째 보안적인 문제&lt;br /&gt;ㅋㅋ 갑자기 웃음이 나오네요 언제부터 자바 스크립트가&lt;br /&gt;보안 스크립트 였습니까.&lt;br /&gt;HTML 다운 받아서 검증 스크립트 주석 처리하고&lt;br /&gt;submit 하면 안날라 갑니까&lt;br /&gt;도대체 모가 보안 인지 알 수가 없습니다.&lt;br /&gt;&lt;br /&gt;두번째 서버 로드 최소화 문제&lt;br /&gt;제가 질문 했던 시스템은 일반 사용자 상대로&lt;br /&gt;외부 노출되는 시스템이 아닌 내부 시스템&lt;br /&gt;이였습니다. 사용자가 정말 많아 봤자 천명이&lt;br /&gt;되지를 않습니다. 그리고 서버에서 Validation은&lt;br /&gt;무거운 작업(DB Connection,XML Parsing,TCP connet)&lt;br /&gt;없이 데이터 검증만 하면 바로 리턴 됩니다.&lt;br /&gt;즉 서버에 라이트한 작업을 요청 하는 것이지요&lt;br /&gt;그리고 일반적으로 데이터를 submit 할 경우&lt;br /&gt;아무 생각없이 글을 작성하지 않습니다.&lt;br /&gt;다들 신중하게 작성을 하기 때문에 경험상&lt;br /&gt;동시에 많은 request가 집중 되지 않습니다.&lt;br /&gt;정말 아파트 분양 입력 화면이나 대박 이벤트&lt;br /&gt;화면이 아니고서는 대부분 서버 사이드에서&lt;br /&gt;처리 해도 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Server Validation의 장점&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;프로젝트를 하다 보면 대부분이 서버 컴포넌트&lt;br /&gt;개발 보다 뷰 개발에 더 시간이 올래 걸립니다.&lt;br /&gt;특히나 View 검증 로직에 대한 공수는 은근히&lt;br /&gt;걸립니다.&lt;br /&gt;Server Validation을 하게 되면 View 검증 로직에&lt;br /&gt;대한 공수를 줄일 수 있습니다.&lt;br /&gt;또한 한번에 전체 입력에 대한 검증 실패 메세지&lt;br /&gt;를 보여줄수가 있습니다.&lt;br /&gt;"아이디를 입력 하세요" alert 뜨고 - 다시 입력 후 저장 합니다.&lt;br /&gt;"아이디는 영문이여야 합니다." 또 alert 뜨고&lt;br /&gt;아니 한번에 다 보여주면 얼마나 친절 합니까&lt;br /&gt;외국 사이트는 많이들 이런 컨셉으로 Validation&lt;br /&gt;을 진행 하고 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;둘다 만족하는 방법 (valang,apache validation)&lt;/li&gt;&lt;/ul&gt;Server Side에서 Validation 로직을 View에서도 적용 할수&lt;br /&gt;있는 기술적인 것들이 있습니다. 대표적인 것이&lt;br /&gt;apache에서 제공하는 validation과 valang 입니다.&lt;br /&gt;전 개인적으로 이건 최악 입니다.&lt;br /&gt;너무 시스템을 복잡하고 지저분하게 만듭니다.&lt;br /&gt;어떨때는 안하는 것만 못하게 되어 버립니다.&lt;br /&gt;굳이 저렇게 까지 복잡하게 공수를 투자해야&lt;br /&gt;한다는건 개발자의기술적 욕심입니다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-4330379708033381494?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/4330379708033381494/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/validation.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4330379708033381494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4330379708033381494'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/04/validation.html' title='Validation 정책에 대해서....'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-3924187657290955065</id><published>2010-03-31T06:31:00.000-07:00</published><updated>2010-04-22T21:20:23.950-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='springshowcase'/><title type='text'>Spring 기반 오픈 소스 프로젝트에 참여 하실분!!</title><content type='html'>예전 부터 오픈 소스를  정말 해보고 싶었는데 현실적인&lt;br /&gt;바쁜 일정 과 게으름 때문에 마음 속으로만 생각을 하고&lt;br /&gt;있었습니다.&lt;br /&gt;그러던 중 최근에 프로젝트가 끝나고 개인적인 시간이&lt;br /&gt;조금 생기면서 아~~ 지금아니면 다시는 못할 것 같은&lt;br /&gt;생각이 들어서 일단 고고씽 하기로 했습니다.&lt;br /&gt;&lt;br /&gt;틈틈히 일주일동안 google code에서 프로젝트를 생성하고&lt;br /&gt;개발에 관련된 웹 문서 작업(개발자 가이드,프로젝트 소개..)&lt;br /&gt;과 SVN 설정 및 개발 템플릿 개발까지...&lt;br /&gt;일단 기본적인 셋팅은 완료가 되었습니다.&lt;br /&gt;&lt;br /&gt;막상 준비를 해보니 Open Source 를 하시는 분들이나 또는 좋은 정보를&lt;br /&gt;블로그나 책을통해서 전달 하신 분들이 정말 대단하는 걸&lt;br /&gt;느끼게 되었습니다. 뛰어난 개발 스킬 과 아키텍쳐도&lt;br /&gt;대단 하지만 그것보다 더 대단한건 개발에 대한 애정&lt;br /&gt;과 열정 같습니다.&lt;br /&gt;(이분들에 비하면 아직 멀었음)&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Consider&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;프로젝트를 시작 하기 앞서 과연 어떤 프로젝트를 해야 할지&lt;br /&gt;정말 고민을 많이 했습니다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;작은 단위의 개발 규모&lt;/span&gt;&lt;br /&gt;무엇보다 척박한 우리 나라 개발 현실 속에서 과연 심신이 지친&lt;br /&gt;개발자 분들이 일 외에 또다른 개발에 참여 한다는 것은&lt;br /&gt;제가 생각해도 가혹한 일이라고 생각이 듭니다.&lt;br /&gt;그래서 되도록 참여하 시는분들이 작은 단위로&lt;br /&gt;참여 해야 한다고 생각을 했습니다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;헙업없이 최대한 자유 스러운 개발&lt;/span&gt;&lt;br /&gt;첫번째와 비슷한 맥락 입니다. 개발 참여 하는것도&lt;br /&gt;쉽지 않은데 서로 간에 협업 하면서 하는 것보가 프로젝트의&lt;br /&gt;컨셉은 지키되 되도록 참여하는 개개인이 간섭 없이&lt;br /&gt;독고다이 할 수있는 컨셉으로 가야 한다고 생각 했습니다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;실무에서 바로 써먹을 수 있어야 한다는 것입니다.&lt;/span&gt;&lt;br /&gt;정말 마음 같아서는 spring container나 hibernate&lt;br /&gt;같은 훌륭한 오픈 소스를 만들어서 세계적으로&lt;br /&gt;한국의 위상을 세우고 싶지만 현실과 너무&lt;br /&gt;괴리감이 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Concept (스프링 기반 Best Practice 프로젝트)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;개발 리딩 과 프레임웍 구축 업무를 주로&lt;br /&gt;하고 있는 저는 자세히 생각해 보니깐 반복된&lt;br /&gt;일을 매 프로젝트마다 하고 있었습니다.&lt;br /&gt;이미 이것저것 다 붙은 무거운 프로젝트에서&lt;br /&gt;필요한 부분 빼서 또 재구축 하는 것이 였습니다.&lt;br /&gt;그리고 구현해야  할 부분을 찾다 보면&lt;br /&gt;대다수의 블러그들이 부분적으로 코드를&lt;br /&gt;설명해서 결국에는 스프링 메뉴얼을 보고&lt;br /&gt;구축 하게 되었습니다.&lt;br /&gt;이러한 반복적인 시간 낭비를 줄이기 위해서&lt;br /&gt;스프링 기반에 Best Practice를 위한 오픈 소스를&lt;br /&gt;생각을 했습니다. 만약 DWR + Spring MVC 연동에&lt;br /&gt;대한 Best Practice를 만들면 굳이 db 붙이고 Service,&lt;br /&gt;DAO 필요없이 컨트롤러 테스트만 하면 끝 입니다.&lt;br /&gt;물론 DB가 필요한 JPA Best Practice라면 틀리 겠지만&lt;br /&gt;어쨌든 딱 필요한 Spring 기반 Best Practice를&lt;br /&gt;모은 오픈 소스를 진행 하면 서로 반복을 줄이고&lt;br /&gt;그 시간에 미구현된 Best Practice를 만드는 것이&lt;br /&gt;훨씬 낫다고 생각 합니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;li&gt;Participation&lt;/li&gt;&lt;/ul&gt;컨셉 자체가 스프링을 스터드 하기 위한 성향이 강하고&lt;br /&gt;저 또한 아직 허접한 개발자 입니다. 잘하고 못하고를&lt;br /&gt;떠나서 열정과 관심 있는 분들은 누구나 참여 가능 합니다.&lt;br /&gt;관심 있으신 분들은 오픈소스 웹사이트(&lt;a href="http://code.google.com/p/springshowcase/"&gt;http://code.google.com/p/springshowcase/&lt;/a&gt;)&lt;br /&gt;를 참고 하시고 springorg@gmail.com으로 메일 부탁 드립니다.&lt;br /&gt;4월 중순 경에 간단하게 오픈 소스 개발 관련해서 강남역에서&lt;br /&gt;세미나를 할 예정입니다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-3924187657290955065?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/3924187657290955065/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3924187657290955065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3924187657290955065'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring.html' title='Spring 기반 오픈 소스 프로젝트에 참여 하실분!!'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-6362629306138694210</id><published>2010-03-28T22:00:00.000-07:00</published><updated>2010-06-28T06:05:46.792-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring3.0 + Tiles2 Intergration Part3</title><content type='html'>&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Part2 까지는 tiles2가 구동하기 위한 스프링 환경 설정&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이였다면 이번 Part는 tiles 설정 및 활용 방안에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;대해서 말씀 드리겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Tiles Definition&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;pre   style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;&lt;code&gt;Paste your text here.&lt;span class="tagDelimiter"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="tagName"&gt;xml&lt;/span&gt; &lt;span class="attributeName"&gt;version&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"1.0"&lt;/span&gt; &lt;span class="attributeName"&gt;encoding&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"UTF-8"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="tagName"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attributeName"&gt;tiles-definitions&lt;/span&gt; &lt;span class="attributeName"&gt;PUBLIC&lt;/span&gt;&lt;br /&gt;  &lt;span class="attributeValue"&gt;"-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attributeValue"&gt;"http://tiles.apache.org/dtds/tiles-config_2_1.dtd"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;tiles-definitions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!-- = Abstract root definition ============ --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!-- default --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;definition&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;".default"&lt;/span&gt;&lt;br /&gt;   &lt;span class="attributeName"&gt;template&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"/WEB-INF/views/jsp/layout/defaultLayout.jsp"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;put-attribute&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"title"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"CHANGE-ME"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;put-attribute&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"meta"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"/WEB-INF/views/jsp/layout/meta.jsp"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;put-attribute&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"left"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"/WEB-INF/views/jsp/layout/left.jsp"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;put-attribute&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"footer"&lt;/span&gt;&lt;br /&gt;       &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"/WEB-INF/views/jsp/layout/footer.jsp"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;definition&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!-- empty --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;definition&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;".empty"&lt;/span&gt; &lt;span class="attributeName"&gt;template&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"/WEB-INF/views/jsp/layout/emptyLayout.jsp"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;put-attribute&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"meta"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"/WEB-INF/views/jsp/layout/meta.jsp"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;definition&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!-- = implement definition ============ --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!-- default depth3 --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;definition&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"*/*/*"&lt;/span&gt; &lt;span class="attributeName"&gt;extends&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;".default"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;put-attribute&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"title"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"Tiles2 Test"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;put-attribute&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"body"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"/WEB-INF/views/jsp/{1}/{2}/{3}.jsp"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;definition&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!-- default depth2 --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;definition&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"*/*"&lt;/span&gt; &lt;span class="attributeName"&gt;extends&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;".default"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;put-attribute&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"title"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"Tiles2 Test"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;put-attribute&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"body"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"/WEB-INF/views/jsp/{1}/{2}.jsp"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;definition&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="comment"&gt;&amp;lt;!-- default depth1 --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;definition&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"*"&lt;/span&gt; &lt;span class="attributeName"&gt;extends&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;".default"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;put-attribute&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"title"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"Tiles2 Test"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;put-attribute&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"body"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"/WEB-INF/views/jsp/{1}.jsp"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;definition&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!-- empty --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;definition&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"dummy/empty"&lt;/span&gt; &lt;span class="attributeName"&gt;extends&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;".empty"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;put-attribute&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"body"&lt;/span&gt;&lt;br /&gt;       &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"/WEB-INF/views/jsp/dummy/empty.jsp"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;definition&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;tiles-definitions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;definition name이 ".default"는 전체 layout을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;선언하는 부분 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;definition name이 ".empty" 부분은 web application에서&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;보면 기본 Layout을 적용이 되지 않고 싶을때 (팝업,iframe 등)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;에서 사용할때 필요한 말 그대로 빈 페이지를 위한 레이 아웃입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;위에 설명한 2개의 설정은 layout 템플릿 설정이고 이제부터는&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;실제로 요청시 body 부분을 설정 하도록 해보겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;원래는 tiles는 매번 요청 마다 definition name를 설정해야&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;하는 엄청난 노가다를 해야 했습니다. 물론 spring examples&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;같은 곳에서 만든 라이브러리를 사용하면 일정부분&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;해결이 되긴 하지만 tiles2 부터는 와이들 카드로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;설정 할수가 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;definition name이 "*/*/*"인 경우 위에서 extends=".default"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;를 통해서 속성을 상속 받습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;그리고 호출 URL이 3 depth일 경우 해당 definition이&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;적용 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;예를 들어서&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;http://localhost:8080/&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;dummy/depth1/depth2.ssc&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;라고 호출하면 스프링은 자동으로 view name을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;dummy/depth1/depth2.ssc&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;" 변환 해서&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;해당 ViewResolver를 찾습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;UrlBasedViewResolver&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"에 해당하기 때문에 tiles2 뷰로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;포워딩 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Tiles2 View에 도착한 View는 해당 definition을 찾습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;위의 view name은 "&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;*/*/*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;" 패턴에 해당 하기 때문에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이 definition을 사용합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;요청 URL을 순서별로 body로 선언된 jsp를 찾습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;{1}:dummy,{2}:depth1,{3}:depth2.ssc&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;결국 &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;/WEB-INF/views/jsp/dummy/depth1/depth2.jsp&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;로 포워딩이 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"*/*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;" 이것도 위와 동일한 메커니즘 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;마지막으로 "dummy/empty"로 선언된 것은 빈 페이지&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;layout template를 타기 위해서 선언된 것으로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이렇게 명시적으로 선언하면 wild card로 선언된&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;것은 무시하고 명시된 body를 찾습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;샘플 다운로드 받기&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;해당 소스를 받기 위해서 아래와 같이&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;svn 주소로 full checkout 받으시면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;소스 다운로드 : (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;https://springshowcase.googlecode.com/svn/trunk/ssc-webtemplate&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;실행 하기 앞서서 참고로 JDK1.6 과 tomcat 6.0 에서 개발했습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;실행 방법은 "http://localhost:8080/" 치면 화면이 열리고&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;왼쪽 메뉴에 케이스별로 링크를 걸어 놓았습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;앞으로 spring best practice를 위한 오픈 소스를 개인적으로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;하려고 합니다. 관심있는 분들은 springorg@gmail.com&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;로 주시면 감사 하겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;앞으로 되도록 샘플 소스를 이런식으로 배포 하고자 합니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-6362629306138694210?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/6362629306138694210/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring30-tiles2-intergration-part3.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6362629306138694210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6362629306138694210'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring30-tiles2-intergration-part3.html' title='Spring3.0 + Tiles2 Intergration Part3'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-537026069755086830</id><published>2010-03-28T20:44:00.000-07:00</published><updated>2010-06-28T06:06:24.542-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring3.0 + Tiles2 Intergration Part2</title><content type='html'>&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Part2에서는 Spring3.0 기반에서 Tiles2 연동에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;대해서 말씀 드리겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;필요한 라이브러리&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;tiles2를 연동하기 위해서 필요한 라이브러리는 아래와 같습니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;org.apache.tiles&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;tiles-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;2.1.4&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;org.apache.tiles&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;tiles-compat&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;2.1.4&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;org.apache.tiles&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;tiles-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;2.1.4&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;제 블러그 "&lt;/span&gt;&lt;/span&gt;&lt;a style="font-weight: bold; " href="http://beyondj2ee.blogspot.com/2010/03/spring30-pomxml.html"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Spring3.0 관련 라이브러리 (pom.xml)&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;" pom.xml을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;참고 하시면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;※여기서 중요한 부분이 tiles2 버전 2.1.4로 하셔야 합니다.&lt;br /&gt;새로 나온 2.2.1 버전은 아직 spring3.0과&lt;br /&gt;호환성 문제가 있습니다.구글링을 통해서 알아보니&lt;br /&gt;외국애들도 이 문제에 대해서 이슈화 하고 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="font-weight: bold; "&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Controller 설정&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;pre   style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;  font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;&lt;span class="escapedIdentifier"&gt;@Controller&lt;/span&gt;&lt;br /&gt;&lt;span class="escapedIdentifier"&gt;@RequestMapping&lt;/span&gt;(&lt;span class="string"&gt;"/dummy"&lt;/span&gt;)&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; DummyController {&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// Class Variable Declaration&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;/** The Constant logger. */&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; final Logger logger = LoggerFactory&lt;br /&gt;.getLogger(DummyController.&lt;span class="keyword"&gt;class&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// Constructor Method Declaration&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;/**&lt;br /&gt;* Instantiates a new config controller.&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; DummyController(){}&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// DI Method (setter,getter) Declaration&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// this Method (public/private) Declaration&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;/**&lt;br /&gt;* Gets the config.&lt;br /&gt;*&lt;br /&gt;* @param model the model&lt;br /&gt;* @param request the request&lt;br /&gt;*&lt;br /&gt;* @return the config&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span class="escapedIdentifier"&gt;@RequestMapping&lt;/span&gt;(&lt;span class="keyword"&gt;value&lt;/span&gt; = &lt;span class="string"&gt;"/index"&lt;/span&gt;)&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; ModelAndView getMain() {&lt;br /&gt;logger.info(&lt;span class="string"&gt;"========= DummyController.getMain"&lt;/span&gt;);&lt;br /&gt;&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; ModelAndView();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;/**&lt;br /&gt;* Gets the show case tiles.&lt;br /&gt;*&lt;br /&gt;* @param model the model&lt;br /&gt;* @param request the request&lt;br /&gt;*&lt;br /&gt;* @return the show case tiles&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span class="escapedIdentifier"&gt;@RequestMapping&lt;/span&gt;(&lt;span class="keyword"&gt;value&lt;/span&gt; = &lt;span class="string"&gt;"/list"&lt;/span&gt;)&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; ModelAndView getList() {&lt;br /&gt;logger.info(&lt;span class="string"&gt;"========= DummyController.getList"&lt;/span&gt;);&lt;br /&gt;&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; ModelAndView();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;/**&lt;br /&gt;* Gets the empty.&lt;br /&gt;*&lt;br /&gt;* @param model the model&lt;br /&gt;* @param request the request&lt;br /&gt;*&lt;br /&gt;* @return the empty&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span class="escapedIdentifier"&gt;@RequestMapping&lt;/span&gt;(&lt;span class="keyword"&gt;value&lt;/span&gt; = &lt;span class="string"&gt;"/form"&lt;/span&gt;)&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; ModelAndView getForm() {&lt;br /&gt;logger.info(&lt;span class="string"&gt;"==TilesController.getForm"&lt;/span&gt;);&lt;br /&gt;&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; ModelAndView();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;/**&lt;br /&gt;* Handler empty.&lt;br /&gt;*&lt;br /&gt;* @return the model and view&lt;br /&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span class="escapedIdentifier"&gt;@RequestMapping&lt;/span&gt;(&lt;span class="keyword"&gt;value&lt;/span&gt; = &lt;span class="string"&gt;"/empty"&lt;/span&gt;)&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; ModelAndView getEmpty() {&lt;br /&gt;logger.info(&lt;span class="string"&gt;"==TilesController.getEmpty"&lt;/span&gt;);&lt;br /&gt;&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; ModelAndView();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// interface implement Method (public/private) Declaration&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// abstract implement Method (public/private) Declaration&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// abstract Method (public/private) Declaration&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;// ---------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;각각의 메서드들은 아래와 같은 요청시 처리 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;※참고로 호출 URL 확장자명은 "ssc" 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;getMain : http://localhost:8080/dummy/index.ssc&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;getList :http://localhost:8080/dummy/list.ssc&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;getForm :http://localhost:8080/dummy/form.ssc&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;getEmpty : http://localhost:8080/dummy/empty.ssc&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;컨트롤러는 기본적인 annotation 기반 컨트롤러 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="font-weight: bold; "&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;spring XML&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;pre   style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="tagName"&gt;xml&lt;/span&gt; &lt;span class="attributeName"&gt;version&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"1.0"&lt;/span&gt; &lt;span class="attributeName"&gt;encoding&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"UTF-8"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;beans&lt;/span&gt; &lt;span class="attributeName"&gt;xmlns&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"http://www.springframework.org/schema/beans"&lt;/span&gt;&lt;br /&gt;&lt;span class="attributeName"&gt;xmlns:xsi&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"http://www.w3.org/2001/XMLSchema-instance"&lt;/span&gt; &lt;span class="attributeName"&gt;xmlns:util&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"http://www.springframework.org/schema/util"&lt;/span&gt;&lt;br /&gt;&lt;span class="attributeName"&gt;xmlns:context&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"http://www.springframework.org/schema/context"&lt;/span&gt; &lt;span class="attributeName"&gt;xmlns:p&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"http://www.springframework.org/schema/p"&lt;/span&gt;&lt;br /&gt;&lt;span class="attributeName"&gt;xmlns:mvc&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"http://www.springframework.org/schema/mvc"&lt;/span&gt;&lt;br /&gt;&lt;span class="attributeName"&gt;xsi:schemaLocation&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;"http://www.springframework.org/schema/mvc &lt;span class="attributeName"&gt;http:&lt;/span&gt;//www.springframework.org/schema/mvc/spring-mvc-3.0.xsd&lt;br /&gt;&lt;span class="attributeName"&gt;http:&lt;/span&gt;//www.springframework.org/schema/beans &lt;span class="attributeName"&gt;http:&lt;/span&gt;//www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;br /&gt;&lt;span class="attributeName"&gt;http:&lt;/span&gt;//www.springframework.org/schema/util &lt;span class="attributeName"&gt;http:&lt;/span&gt;//www.springframework.org/schema/util/spring-util-3.0.xsd&lt;br /&gt;&lt;span class="attributeName"&gt;http:&lt;/span&gt;//www.springframework.org/schema/context &lt;span class="attributeName"&gt;http:&lt;/span&gt;//www.springframework.org/schema/context/spring-context-3.0.xsd"&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!-- annotation config &amp;amp; scan --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;context:annotation-config&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;context:component-scan&lt;/span&gt; &lt;span class="attributeName"&gt;base-package&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.ssc"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;context:include-filter&lt;/span&gt; &lt;span class="attributeName"&gt;type&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"annotation"&lt;/span&gt;&lt;br /&gt;  &lt;span class="attributeName"&gt;expression&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.stereotype.Controller"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;context:component-scan&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!--&lt;br /&gt;JSR-303 support will be detected on classpath and enabled&lt;br /&gt;automatically&lt;br /&gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;mvc:annotation-driven&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!-- convert request data  --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;bean&lt;br /&gt;&lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"cacheSeconds"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"0"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!-- tiles2 layout config --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt; &lt;span class="attributeName"&gt;id&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"tilesConfigurer"&lt;/span&gt;&lt;br /&gt;&lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.view.tiles2.TilesConfigurer"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"definitions"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;list&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;value&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;classpath:/tiles2/tiles2.cfg.xml&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;value&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;list&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!-- view name tanslator --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt; &lt;span class="attributeName"&gt;id&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"viewNameTranslator"&lt;/span&gt;&lt;br /&gt;&lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!-- view resolver --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;bean&lt;br /&gt;&lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.view.ContentNegotiatingViewResolver"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"mediaTypes"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;map&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;entry&lt;/span&gt; &lt;span class="attributeName"&gt;key&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"atom"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"application/atom+xml"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;entry&lt;/span&gt; &lt;span class="attributeName"&gt;key&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"ssc"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"text/html"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;entry&lt;/span&gt; &lt;span class="attributeName"&gt;key&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"json"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"application/json"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;map&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"viewResolvers"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;list&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt; &lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.view.BeanNameViewResolver"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt; &lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.view.UrlBasedViewResolver"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"viewClass"&lt;/span&gt;&lt;br /&gt;              &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.view.tiles2.TilesView"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;bean&lt;br /&gt;          &lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.view.InternalResourceViewResolver"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"prefix"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"/WEB-INF/views/jsp/"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"suffix"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;".jsp"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;list&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"defaultViews"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;list&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;bean&lt;br /&gt;          &lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.view.json.MappingJacksonJsonView"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;          &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"prefixJson"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"true"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;list&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;beans&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;빈 아이디 "viewNameTranslator"는 요청 URL과 같은 형태로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;View Name을 변환해 주는 빈입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;즉 "http://localhost:8080/dummy/index.ssc"로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;호출하면 View Name은 "dummy/index"로 변환 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;빈 아이디 "tilesConfigurer"는 tiles2 초기화 하는&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;빈입니다. 파라미터로 초기화에 필요한 tiles2 설정&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;파일을 입력 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"ContentNegotiatingViewResolver" 빈이 제일&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;중요 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Spring3.0 부터 지원 합니다. 이 Resolver는 스스로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;View를 resolving 할 수 있는 능력이 없습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;단 이름에서 알수 있듯이 여러 ViewResolver를&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;중에서 케이스별로 처리 할 수 있도록 resolving&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;logic을 해주는 resolver 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"mediaTypes"를 보면 "ssc"되는 부분이 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;전 뷰 형태의 호출 URL을 ".do" 또는 ".action"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이아닌 ".ssc"로 하고 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;저 말은 ".ssc"로 오는 요청은 "text/html"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;타입을 처리 할 수 있는 "UrlBasedViewResolver"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;또는 "InternalResourceViewResolver" 으로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;포워딩 하라는 뜻 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;".json" 형태로 오면 "MappingJacksonJsonView"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;처리하게 되어 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"viewResolvers" properties를 보면 "list" 형태로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;되어 있습니다. 이것은 2.5.6의 "order" 태그와&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;같습니다. 컨트롤러에서 리턴된 view name을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;위의 순서되로 찾아 갑니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;tiles2 설정은 Part3에서 설명 드리겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-537026069755086830?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/537026069755086830/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring30-tiles2-intergration-part2.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/537026069755086830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/537026069755086830'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring30-tiles2-intergration-part2.html' title='Spring3.0 + Tiles2 Intergration Part2'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-4404146197003602775</id><published>2010-03-28T18:50:00.001-07:00</published><updated>2010-06-28T06:06:49.781-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring3.0 + Tiles2 Intergration Part1</title><content type='html'>&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;WebApplication 프로젝트를 할때 View Layout 오픈 소스를&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;많이 사용 하고 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;그중에서 대표적인 것들은 단연  sitemesh 와 tiles일 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;초창기 스트럿츠+Tiles 궁합으로 많이 사용을 했었습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;하지만 기능적인 제한이 많이 발생을 했습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이러한 문제점을 보완할 오픈소스가 sitemesh 였습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;현재 대부분 spring으로 프로젝트를 진행 하는 곳에서는&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;대부분 sitemesh를 사용하고 있을 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt; (지극히 개인적인 생각^^)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;하지만 이러한 sitemesh도 문제점이 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;SiteMesh's Problem&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;첫번째는 속도가 느립니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;sitemesh의 기본 컨셉은 Filter 기반의 &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;decorator&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt; 패턴 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이패턴은 layout을 꾸미는데 있어서 매우 강력하지만&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;반면 각 조각 페이지들이 매번 요청시 파싱 작업이&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;일어 납니다.이로 인해서 랜덩링 속도가 느립니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;두번째는 뷰 디버깅이 어렵습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;filter 기반이다 보니 JSP 또는 컨트롤러에서 에러가&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;발생시 디버깅을 힘들게 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이건 경험해 보신분들은 이해 하실것입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Comback Tiles2&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이런 sitemesh 문제점을 보완하기 위해서 tiles가 버전업&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;되어서 다시 돌아 왔습니다. 이름 하여 tiles2....&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;tiles2는 기본적으로 composite 패턴을 사용함으로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;body부분만 변경 하기 때문에 속도가 뛰어납니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;그리고 기존 tiles는 body 페이지 마다 definition을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;하나씩 선언을 하게 되어서 많은 부분을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;xml에 설정을 해야 했습니다. 하지만 tiles2는&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;wildcard를지원 함으로써 많은 부분을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;생략 할 수있도록 되어 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a style="color: rgb(0, 0, 0);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5VYpS-OcdCs/S7AKhRONuSI/AAAAAAAAAJE/sFbHPznLfYo/s1600/page_to_page.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 189px;" src="http://1.bp.blogspot.com/_5VYpS-OcdCs/S7AKhRONuSI/AAAAAAAAAJE/sFbHPznLfYo/s320/page_to_page.png" alt="" id="BLOGGER_PHOTO_ID_5453870715420653858" border="0" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;실제 Spring3.0 + Tile2 연동에 대해서는 Part2 에서&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;설명 하겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-4404146197003602775?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/4404146197003602775/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring30-tiles2-intergration-part1.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4404146197003602775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/4404146197003602775'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring30-tiles2-intergration-part1.html' title='Spring3.0 + Tiles2 Intergration Part1'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_5VYpS-OcdCs/S7AKhRONuSI/AAAAAAAAAJE/sFbHPznLfYo/s72-c/page_to_page.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-187436025104741460</id><published>2010-03-28T18:33:00.000-07:00</published><updated>2010-03-28T18:35:03.466-07:00</updated><title type='text'>스프링에서 Ajax 사용 하기 (Use JsonLib) 정정</title><content type='html'>한가지 설정 부분을 빠뜨렸네요&lt;br /&gt;"ViewResolver 설정" 파트를 추가 했습니다.&lt;br /&gt;&lt;a style="font-weight: bold; color: rgb(255, 255, 204);" href="http://beyondj2ee.blogspot.com/2009/08/ajax-use-jsonlib.html"&gt;스프링에서 Ajax 사용 하기 (Use JsonLib) 바로 가기&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-187436025104741460?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/187436025104741460/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/ajax-use-jsonlib.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/187436025104741460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/187436025104741460'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/ajax-use-jsonlib.html' title='스프링에서 Ajax 사용 하기 (Use JsonLib) 정정'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-3264243576863250337</id><published>2010-03-25T03:24:00.000-07:00</published><updated>2010-03-25T06:17:21.924-07:00</updated><title type='text'>블로그 공사중</title><content type='html'>아 소스 보는 플러그인이 깨졌네요...&lt;br /&gt;으.. 빨리 고쳐야겠습니다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-3264243576863250337?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/3264243576863250337/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/blog-post_25.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3264243576863250337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3264243576863250337'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/blog-post_25.html' title='블로그 공사중'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-6459328930857887456</id><published>2010-03-22T23:10:00.001-07:00</published><updated>2010-03-25T07:36:37.266-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring3.0 MVC에서 Ajax 구현하기</title><content type='html'>스프링 2.5.6 버전에서는 Ajax를 사용 하려면&lt;br /&gt;View 인터페이스를 구현해서 별도의 Ajax전용 View&lt;br /&gt;만들어서 사용 해야 했습니다.&lt;br /&gt;솔직히 Ajax에 지원에 대해서 많이 미흡했습니다.&lt;br /&gt;이유인즉 기술력 문제는 아니고 스프링 진영에서&lt;br /&gt;Ajax가 J2EE스펙이 아니기 때문이라고&lt;br /&gt;SpringSource 웹 사이트에서 본적이 있습니다.&lt;br /&gt;하지만 Spring 3.0이 나오면서 파워풀한 기능이&lt;br /&gt;추가 되었습니다. 그중에서 Spring3.0 기반에서&lt;br /&gt;Ajax 구현 방법에 대해서 말씀 드리겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="color: rgb(255, 255, 204);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;web.xml&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;springDispatcher&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;servlet-class&amp;gt;org.springframework.web.servlet.DispatcherServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;lt;param-value&amp;gt;&lt;br /&gt;  classpath:/spring/application/spring.mvc.xml&lt;br /&gt;&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;&amp;lt;/servlet&amp;gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;springDispatcher&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;url-pattern&amp;gt;*.htm&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;springDispatcher&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;url-pattern&amp;gt;*.json&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;"servlet-mapping" 맵핑 태그에 보면 두개를 설정 했습니다.&lt;br /&gt;하나는 View 호출을 위한 "*.htm",다른 하나는 "*.json"&lt;br /&gt;입니다. 예를 들어서 입력 화면을 호출할때는&lt;br /&gt;확장명이 "htm"으로 호출 하고 값을 입력 하고&lt;br /&gt;넘길때는 "json"으로 호출 합니다.&lt;br /&gt;&lt;br /&gt;&lt;ul style="color: rgb(255, 255, 204);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Controller&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;@Controller&lt;br /&gt;public class HelloWorldController {&lt;br /&gt;  @RequestMapping(&amp;quot;/helloWorld&amp;quot;)&lt;br /&gt;  public ModelAndView helloWorld() {&lt;br /&gt;    ModelAndView mav = new ModelAndView();&lt;br /&gt;    System.out.println(&amp;quot;===================&amp;quot;);&lt;br /&gt;    mav.setViewName(&amp;quot;/helloWorld&amp;quot;);&lt;br /&gt;    return mav;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;@RequestMapping(&amp;quot;/ajax&amp;quot;)&lt;br /&gt;  public Map get() {&lt;br /&gt;    System.out.println(&amp;quot;===get&amp;quot;);&lt;br /&gt;    Map map = new HashMap();&lt;br /&gt;    map.put(&amp;quot;key&amp;quot;,&amp;quot;value&amp;quot;);&lt;br /&gt;    return map;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul style="color: rgb(255, 255, 204);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;spring.mvc.xml&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;  &lt;span class="comment"&gt;&amp;lt;!-- annotation config --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;context:annotation-config&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;context:component-scan&lt;/span&gt; &lt;span class="attributeName"&gt;package&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.beyondj2ee"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;context:include-filter&lt;/span&gt; &lt;span class="attributeName"&gt;type&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"regex"&lt;/span&gt; &lt;span class="attributeName"&gt;expression&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;".*Controller"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;context:component-scan&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;&amp;lt;!-- handler mapping --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt; &lt;span class="attributeName"&gt;id&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"handlerMapping"&lt;/span&gt;&lt;br /&gt;    &lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="comment"&gt;&amp;lt;!-- view resolver --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;bean&lt;br /&gt;    &lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.view.ContentNegotiatingViewResolver"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"mediaTypes"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;map&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;entry&lt;/span&gt; &lt;span class="attributeName"&gt;key&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"atom"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"application/atom+xml"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;entry&lt;/span&gt; &lt;span class="attributeName"&gt;key&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"html"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"text/html"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;entry&lt;/span&gt; &lt;span class="attributeName"&gt;key&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"json"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"application/json"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;map&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"viewResolvers"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;list&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt; &lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.view.BeanNameViewResolver"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;bean&lt;br /&gt;                &lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.view.InternalResourceViewResolver"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"prefix"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"/WEB-INF/views/jsp"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"suffix"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;".jsp"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;list&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"defaultViews"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;list&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;bean&lt;br /&gt;                &lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.web.servlet.view.json.MappingJacksonJsonView"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt; &lt;span class="attributeName"&gt;name&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"prefixJson"&lt;/span&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"true"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;list&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;property&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;스프링 MVC 설정을 합니다.&lt;br /&gt;나머지 부분은 spring2.5.6에 나온 것들이라 생략 하겠습니다.&lt;br /&gt;"view resolver" 파트르를 보면 뷰에 대해서 chain을&lt;br /&gt;형성 합니다.&lt;br /&gt;먼저 "htm"으로 오면 response의 content type을&lt;br /&gt;"text/html" 응답 합니다. "json"은 "application/json"&lt;br /&gt;content type으로 응답 합니다.&lt;br /&gt;스프링 "DispatcherServlet"은 모든 MVC process를&lt;br /&gt;관장 하는데 먼저 "defaultViews"를 찾아서&lt;br /&gt;해당 viewName이 없을 경우 리턴 합니다.&lt;br /&gt;만약 viewName이 있을경우 "viewResolvers"&lt;br /&gt;property에 선언된 순서로 찾아 갑니다.&lt;br /&gt;예를 들어서&lt;br /&gt;"http://localhost:8080/org-beyondj2ee-web/helloWorld.htm"&lt;br /&gt;을 하면 처리하는 메서드에서 viewName을 가지고 있기&lt;br /&gt;때문에 "InternalResourceViewResolver"로 빠지게 되고&lt;br /&gt;"http://localhost:8080/org-beyondj2ee-web/ajax.json"&lt;br /&gt;으로 호출하면 리턴 메서드가 없기 때문에&lt;br /&gt;"MappingJacksonJsonView"로 빠지게 되어 있습니다.&lt;br /&gt;Controller의 설정과 무관하게 decoupling 되게&lt;br /&gt;구성이 되어 있습니다.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(255, 255, 204);"&gt;아... 주석 플러그인이 자꾸 XML이 깨지네요&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 204);"&gt;죄송 합니다. 안깨지는 플러그인좀 있으면&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 204);"&gt;추천좀 해주세요 ㅠ.ㅠ&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-6459328930857887456?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/6459328930857887456/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring30-mvc-ajax.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6459328930857887456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6459328930857887456'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring30-mvc-ajax.html' title='Spring3.0 MVC에서 Ajax 구현하기'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-3474583203882366823</id><published>2010-03-22T22:55:00.000-07:00</published><updated>2010-04-06T07:58:15.224-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring3.0 관련 라이브러리 (pom.xml)</title><content type='html'>최근에 스프링 3.0을 테스트 하기 위해서 pom.xml을&lt;br /&gt;설정 해봤습니다.&lt;br /&gt;tiles2 때문에 고생좀 했네요&lt;br /&gt;순수하게 spring framework 3.0 은 스프링 레파지토리&lt;br /&gt;(&lt;a href="http://www.springsource.com/repository/app/"&gt;http://www.springsource.com/repository/app/&lt;/a&gt;)에서 가져왔고&lt;br /&gt;참조하는 라이브러리는 전부 Maven 레파지토리&lt;br /&gt;(&lt;a href="http://mvnrepository.com/"&gt;http://mvnrepository.com/&lt;/a&gt;)&lt;br /&gt;에서 가져 왔습니다.&lt;br /&gt;이런 이유는 스프링 레파지토리와 Maven 레파지토리가&lt;br /&gt;서로 artifactid만 틀리고 동일한 라이브러리를&lt;br /&gt;가져와서 정책을 이렇게 정했습니다.&lt;br /&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;pre   style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;project&lt;/span&gt; &lt;span class="attributeName"&gt;xmlns&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"http://maven.apache.org/POM/4.0.0"&lt;/span&gt; &lt;span class="attributeName"&gt;xmlns:xsi&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"http://www.w3.org/2001/XMLSchema-instance"&lt;/span&gt;&lt;br /&gt;    &lt;span class="attributeName"&gt;xsi:schemaLocation&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;modelVersion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;4.0.0&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;modelVersion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springshowcase&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;ssc-org&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;packaging&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;pom&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;packaging&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;0.0.1-SNAPSHOT&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;url&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;http://code.google.com/p/springshowcase/&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;url&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;properties&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;spring.version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;3.0.0.RELEASE&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;spring.version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;properties&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;repositories&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- spring bundle repository --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;repository&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;id&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.repository.bundles.release&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;id&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;SpringSource Enterprise Bundle Repository - SpringSource Bundle&lt;br /&gt;                Releases&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;url&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;http://repository.springsource.com/maven/bundles/release&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;url&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;repository&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;repository&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;id&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.repository.bundles.external&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;id&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;SpringSource Enterprise Bundle Repository - External Bundle&lt;br /&gt;                Releases&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;url&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;http://repository.springsource.com/maven/bundles/external&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;url&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;repository&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- jboss Repository --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;repository&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;id&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;JBoss&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;id&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;JBoss Repsitory&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;layout&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;default&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;layout&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;url&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;http://repository.jboss.org/maven2&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;url&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;repository&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;repository&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;id&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;springbyexample.org&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;id&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;Spring by Example&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;url&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;http://www.springbyexample.org/maven/repo&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;url&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;repository&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;repositories&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependencies&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- == get SBR ======================= --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- spring libarary --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.aop&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;3.0.0.RELEASE&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;exclusions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;exclusion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.aopalliance&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.org.aopalliance&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;exclusion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;exclusions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.asm&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.aspects&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.beans&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.context&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.context.support&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.core&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.expression&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.jdbc&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.jms&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;exclusions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;exclusion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.aopalliance&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.org.aopalliance&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;exclusion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;exclusions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.orm&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.oxm&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.transaction&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;exclusions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;exclusion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.aopalliance&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.org.aopalliance&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;exclusion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;exclusions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.web&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;exclusions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;exclusion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.aopalliance&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.org.aopalliance&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;exclusion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;exclusions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.web.servlet&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;exclusions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;exclusion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.aopalliance&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.org.aopalliance&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;exclusion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;exclusions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.web.portlet&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;exclusions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;exclusion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;javax.servlet&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.javax.servlet&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;exclusion&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;exclusions&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.instrument&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.instrument.tomcat&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;${spring.version}&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- == get Maven Repository ======================= --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- servlet libarary --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;javax.servlet&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.javax.servlet&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.5.0&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;provided&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;javax.servlet&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.javax.servlet.jsp&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.1.0&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;provided&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;javax.servlet&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.javax.servlet.jsp.jstl&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.2.0&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.apache.taglibs&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.org.apache.taglibs.standard&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.1.2&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- log libarary --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.slf4j&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;jcl-over-slf4j&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.5.8&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;runtime&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.slf4j&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;slf4j-api&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.5.8&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;runtime&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.slf4j&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;slf4j-log4j12&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.5.8&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;runtime&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;log4j&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;log4j&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.2.14&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;runtime&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- junit libarary --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.junit&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.org.junit&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;4.7.0&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- j2ee libarary --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;javax.mail&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.javax.mail&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.4.1&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;javax.portlet&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;portlet-api&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.0&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!--        &amp;lt;dependency&amp;gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!--            &amp;lt;groupId&amp;gt;javax.validation&amp;lt;/groupId&amp;gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!--            &amp;lt;artifactId&amp;gt;validation-api&amp;lt;/artifactId&amp;gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!--            &amp;lt;version&amp;gt;1.0.0.GA&amp;lt;/version&amp;gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!--        &amp;lt;/dependency&amp;gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- apache commons library --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-fileupload&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-fileupload&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.2.1&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-net&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-net&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.1&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-chain&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-chain&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.2&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-configuration&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-configuration&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.6&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-collections&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-collections&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;3.2.1&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-beanutils&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-beanutils&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.8.2&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-io&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-io&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.4&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-lang&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-lang&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.5&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-pool&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-pool&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.5.4&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-dbcp&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-dbcp&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.4&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;oro&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;oro&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.0.8&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-digester&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-digester&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.0&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-logging&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;commons-logging&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.1.1&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- aspectj library--&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.aspectj&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;aspectjweaver&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.6.8&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.aspectj&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;aspectjlib&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.6.2&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.aspectj&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;aspectjrt&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.6.8&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.aspectj&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;aspectjtools&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.6.8&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- json libarary --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.codehaus.jackson&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;jackson-core-lgpl&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.5.0&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.codehaus.jackson&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;jackson-mapper-lgpl&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.5.0&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;net.sf.ezmorph&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;ezmorph&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.0.6&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;net.sf.json-lib&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;json-lib&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.2.3&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- xml libarary --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.codehaus.castor&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;com.springsource.org.exolab.castor.xml&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.2.0&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.jdom&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;jdom&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.1&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- tiles2 libarary --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.apache.tiles&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;tiles-api&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.1.4&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.apache.tiles&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;tiles-compat&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.1.4&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.apache.tiles&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;tiles-core&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.1.4&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.apache.tiles&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;tiles-jsp&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.1.4&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.apache.tiles&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;tiles-portlet&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.1.4&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- asm libarary --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;asm&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;asm-commons&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.2.3&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;asm&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;asm&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.2.3&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- cglib libarary --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;cglib&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;cglib-nodep&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.2&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- antlr libarary --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;antlr&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;antlr&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.7.7&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.antlr&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;antlr&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;3.0.1&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- ibatis --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.apache.ibatis&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;ibatis-sqlmap&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;2.3.4.726&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;type&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;jar&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;type&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;compile&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;scope&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- hibernate --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.hibernate&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;hibernate-validator&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;4.0.0.Beta2&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.hibernate&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;hibernate-core&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;3.3.2.GA&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.hibernate&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;hibernate-annotations&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;3.4.0.GA&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.hibernate&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;hibernate-commons-annotations&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;3.3.0.ga&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.hibernate&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;hibernate-entitymanager&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;3.4.0.GA&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="comment"&gt;&amp;lt;!-- aop --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;aopalliance&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;groupId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;aopalliance&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;artifactId&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1.0&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;version&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependency&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;dependencies&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;build&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;finalName&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org-beyondj2ee-web&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;finalName&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;build&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;project&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-3474583203882366823?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/3474583203882366823/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring30-pomxml.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3474583203882366823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/3474583203882366823'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring30-pomxml.html' title='Spring3.0 관련 라이브러리 (pom.xml)'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-8008518485300928370</id><published>2010-03-22T18:15:00.001-07:00</published><updated>2010-06-28T06:07:49.722-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>PropertyPlaceholderConfigurer 활용 방법</title><content type='html'>&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;스프링에서 config로 되어 있는 properties를 사용할때&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"PropertyPlaceholderConfigurer"를 사용 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이 클래스는 해당 경로에 있는 properties 파을을&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;읽어서 스프링 xml 안에서 Ant 변수처럼 사용 해서&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;value값을 injection 해주는 클래스 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;하지만 가끔 이 클래스를 빈으로 설정 할때&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"ContextLoaderListener"으로 선언된 ApplicationContext&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;에서는 사용이 가능하지만 "DispatcherServlet" 으로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;선언된 ApplicationContext에서는 인식이 안되는&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;문제가 발생 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;이러한 문제가 무엇이면 해결 방법에 대해서 말씀&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;드리겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;PropertyPlaceholderConfigurer 이해&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;먼저 "PropertyPlaceholderConfigurer" 클래스를 이해 하기 위해서&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;ApplicationContext에 대해서 간략 하게 설명 드리겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;WebApplication에서 ApplicationContext가 한 개이상&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;존재 할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;첫 번째는 "ContextLoaderListener" 클래스를 통한 생성과&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;두번째는 "DispatcherServlet" 클래스를 통한 생성 입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;그리고 아래의 그림 처럼 "DispatcherServlet"로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;생성된 ApplicationContext가 "ContextLoaderListener"으로&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;생성된 ApplicationContext를 참조 하고 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;즉 부모(listener)-자식(servlet) 관계 입니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="color: rgb(0, 0, 0);" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5VYpS-OcdCs/S6gY5qUmecI/AAAAAAAAAI8/w9xHjfHliDM/s1600-h/mvc-contexts.gif"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 227px;" src="http://3.bp.blogspot.com/_5VYpS-OcdCs/S6gY5qUmecI/AAAAAAAAAI8/w9xHjfHliDM/s320/mvc-contexts.gif" alt="" id="BLOGGER_PHOTO_ID_5451634727824292290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"PropertyPlaceholderConfigurer" 클래스는 각 ApplicationContext&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;가 load시 위 의 클래스를 lookup 합니다. 만약 존재하면&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;명시된 경로의 properties 파일들을 읽어서 참조 하는 빈들의&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;value값에 injection 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;다시 말해서 ApplicationContext마다 한개씩 존재 해야&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;합니다.WebApplication에서는 최소 2개 이상&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;필요 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;위에서의 문제점은 "ContextLoaderListener" 로드된&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;ApplicationContext에만 설정을 하고 Servlet으로 로드된&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Context에는 설정을 하지 않았기 때문에 인식이&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;되지 않은 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;해결 방법&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;web.xml&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;pre style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px;"&gt;&lt;br /&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;context-param&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;param-name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;contextConfigLocation&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;param-name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;param-value&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; classpath:/spring/application/spring.cfg.xml&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;param-value&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;context-param&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;listener&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;listener-class&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.web.context.ContextLoaderListener&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;listener-class&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;listener&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;servlet&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;servlet-name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;springDispatcher&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;servlet-name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;servlet-class&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;org.springframework.web.servlet.DispatcherServlet&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;servlet-class&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;init-param&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;param-name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;contextConfigLocation&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;param-name&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;param-value&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     classpath:/spring/application/spring.mvc.xml&lt;br /&gt; &lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;param-value&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;init-param&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;load-on-startup&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;1&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;load-on-startup&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;servlet&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;spring.cfg.xml&lt;/span&gt;&lt;br /&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;pre   style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt; &lt;span class="attributeName"&gt;id&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"beyondj2ee.configPath"&lt;/span&gt; &lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"java.lang.String"&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tagName"&gt;constructor-arg&lt;/span&gt; &lt;span class="attributeName"&gt;index&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"0"&lt;/span&gt; &lt;span class="attributeName"&gt;type&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"java.lang.String"&lt;/span&gt;&lt;br /&gt; &lt;span class="attributeName"&gt;value&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"classpath*:/**/*.properties"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tagName"&gt;bean&lt;/span&gt;&lt;span class="tagDelimiter"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;&amp;lt;!-- application context placeholder --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="tagDelimiter"&gt;&amp;lt;&lt;/span&gt;bean&lt;br /&gt;&lt;span class="attributeName"&gt;class&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&lt;/span&gt;&lt;br /&gt;&lt;span class="attributeName"&gt;ref&lt;/span&gt;&lt;span class="attributeDelimiter"&gt;=&lt;/span&gt;&lt;span class="attributeValue"&gt;"beyondj2ee.configPath"&lt;/span&gt; &lt;span class="tagDelimiter"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;spring.mvc.xml&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&amp;lt;bean&lt;br /&gt;class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&lt;br /&gt;ref="beyondj2ee.configPath" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;bean id="beyondj2ee.testBean" class="org.beyondj2ee.core.bean.TestBean"&amp;gt;&lt;br /&gt;&amp;lt;property name="url" value="${jdbc.datasource.url}" /&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;test.properties&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;jdbc.datasource.url=xxxxxxx&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;"spring.cfg.xml"에서 String 빈을 설정 한 이유는 경로를 집중화&lt;br /&gt;하기 위해서 사용 했습니다.&lt;br /&gt;properties 파일이 추가 되거나 수정 할경우 한 곳에서만&lt;br /&gt;관리 하기 위해서 입니다.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-8008518485300928370?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/8008518485300928370/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/propertyplaceholderconfigurer.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/8008518485300928370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/8008518485300928370'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/propertyplaceholderconfigurer.html' title='PropertyPlaceholderConfigurer 활용 방법'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_5VYpS-OcdCs/S6gY5qUmecI/AAAAAAAAAI8/w9xHjfHliDM/s72-c/mvc-contexts.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-8277417626759931065</id><published>2010-03-18T22:30:00.001-07:00</published><updated>2010-06-28T06:08:16.098-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='My Think'/><title type='text'>일정만 기억하는 더러운 세상</title><content type='html'>&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;프로젝트를 처음 시작할때 PM한테 일정을 물어 봅니다.&lt;br /&gt;&lt;br /&gt;ME : "이번 프로젝트 일정이 어떻게 됩니까?"&lt;br /&gt;PM : "분석/설계 2개월,개발 3개월"&lt;br /&gt;ME : "일정에 대한 근거는 모죠?"&lt;br /&gt;"전 이세상에서 그게 제일 궁금해서요"&lt;br /&gt;PM : "대충 프로젝트 scope이 그정도돼"&lt;br /&gt;ME : "대충? 글면 프로젝트 scope 과 일정의 척도는 뭐죠?"&lt;br /&gt;PM : "그래서 경험이 중요한거야"&lt;br /&gt;ME : "네에? "&lt;br /&gt;"일정을 소화할 설계자/개발자와 협의 해야 하는것 아닌가요?"&lt;br /&gt;PM : (슬슬 짜증내면서) 왜그래 프로젝트 처음하는 사람 처럼&lt;br /&gt;ME : ............&lt;br /&gt;"설계가 밀리면 일정도 밀리나요?"&lt;br /&gt;PM : "안돼 무조건 끝내야해."&lt;br /&gt;&lt;br /&gt;여러분들도 "프로젝트 일정 산정 법칙"&lt;br /&gt;궁금하시지 않습니까?&lt;br /&gt;만약 프로젝트가 일정내에 완료가 되면 둘중 하나 입니다.&lt;br /&gt;정말 운이 좋았거나 아니면 개발자들이 고생해서 일정을&lt;br /&gt;맞추어 준 것입니다. 오히려 고마워 해야죠.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;일정을 사람에 맞추자&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;여기서 하나 게임을 해보겠습니다.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;"회원정보를 가져오는 로직이 있는 소스가 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;1분안에 위의 로직이 필요한 30개 함수에&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;반드시 적용해야 합니다".&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;준비 시작~~~~~~~~~~&lt;br /&gt;저 일정을 소화 하려면 100%로 Copy&amp;amp;Paste 할 것입니다.&lt;br /&gt;"제임스 고슬링" 아저씨가 오던 "로드존스"형이 와도&lt;br /&gt;아마도 CTRL+C,CTRL+V를 누르면서 소스에&lt;br /&gt;화려하게 수를 놓고 계실 것입니다.&lt;br /&gt;공통 함수 만들 생각조차 못할 것입니다.&lt;br /&gt;다소 극단적인 표현을 이기는 하지만&lt;br /&gt;일정을 사람에 맞추지 않고 사람이 일정을 맞추면&lt;br /&gt;그 고객에게 전달될 제품의 퀄리티는 굳이 얘기 하지&lt;br /&gt;않아도 아실듯 합니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold; "&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;몸에 맞지 않은 옷&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;최근에 스프링이 대세도 아닌 필수가 되어서 열공하시는&lt;br /&gt;분들이 엄청 많아 졌습니다.&lt;br /&gt;그런데 왜 우리는 Spring을 써야만 할까요?&lt;br /&gt;경력에 도움이 되어서,아니면 쓰라고 하니깐..&lt;br /&gt;가끔 EJB 시절 묻지마 개발을 떠올리면&lt;br /&gt;Spring도 그전철을 밡을수도 있다는 생각을&lt;br /&gt;하면 씁쓸해 집니다.&lt;br /&gt;Spring을 사용하는 이유는 많겠지만&lt;br /&gt;그중에서 제일 중요한 부분은&lt;br /&gt;테스트주도 개발 입니다.&lt;br /&gt;즉 제품의 퀄리티는 높이고&lt;br /&gt;고객의 요구 사항에 빠르게 응대를 함으로서&lt;br /&gt;유지 보수를 극대화 하는 것입니다.&lt;br /&gt;이러한 철학과 사상은 애자일적인 생각이죠,&lt;br /&gt;(로드존슨 형은 애자일 신봉자..)&lt;br /&gt;하지만 실무에서는 이러한 순수성은&lt;br /&gt;없어지고 오직 일정을 지켜기 위해서 라면&lt;br /&gt;오히려 느슨한 연결과 오픈 소스들이 짐이 되는 것 같습니다.&lt;br /&gt;그냥 날 JSP+도메인 대신 Map 으로 개발하는 것이&lt;br /&gt;더 낫다고 생각합니다.&lt;br /&gt;절대로 현재의 개발 인프라와 Only waterfall 방법론은&lt;br /&gt;재앙으로 다가 올것입니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;파일럿을 하자&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;제 개인적으로 비판만 있고 대안이 없는걸 싫어해서&lt;br /&gt;말씀 드립니다.&lt;br /&gt;우리나라 개발 환경 특성상 100% 애자일 도입은&lt;br /&gt;사실상 힘듭니다. 하지만 부분적으로 적용할&lt;br /&gt;필요는 있습니다. 특히 순환 방법 개발 입니다.&lt;br /&gt;일단 프로젝트가 시작하면 scope을 줄여서&lt;br /&gt;한 사이클을 2~ 3개월단위로 파일럿 플젝을 진행해야 한다고&lt;br /&gt;생각 합니다. 그래야 어떤것이 부족하고 개발 공수에&lt;br /&gt;대한 예측이 가능하니깐요.&lt;br /&gt;불과 몇년전과 지금 환경은 너무나도 다릅니다.&lt;br /&gt;업무도 복잡해지고 기술또한 오픈 소스의&lt;br /&gt;홍수속에서 살고 있습니다.&lt;br /&gt;그 만큼 변수가 몇년전에 비해서 너무 많다는 것입니다.&lt;br /&gt;하지만 대부분 프로젝트가 완료일이 가까이 되어서야&lt;br /&gt;한사이클이 됩니다. (그나마 한사이클 돌면 다행이죠..)&lt;br /&gt;엄청난 요구 사항과 기술적인 설계의 결함등이 쓰나미처럼&lt;br /&gt;밀려오죠. 옛날은 몸빵이라도 했지만 지금은&lt;br /&gt;그냥 프로젝트가 정지가 되어버린 상태로 되죠.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="font-weight: bold; "&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;품질로 승부하자&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;제발 프로젝트를 제안 할때 단가 또는 일정으로 후리지&lt;br /&gt;않았으면 좋겠습니다.&lt;br /&gt;고객들에게 다소 단가가 높거나 일정이 길수는 있어도&lt;br /&gt;품질만은 확실하게 보장한다고  제안 해야 합니다.&lt;br /&gt;이제는 품질로 승부해야 한다고 생각 합니다.&lt;br /&gt;실제로 이런 부분을 몸소 체험한 몇몇 회사에서는&lt;br /&gt;많이 개선하려고 노력하고 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="font-weight: bold; "&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;커뮤니케이션을 통해서 시간을 Save 하자&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;개인적으로 프리랜서 활동을 하고 있어서 가끔 프로젝트&lt;br /&gt;중간에 투입이 될 경우가 있습니다.&lt;br /&gt;그럴때 제가 제일 먼저 체크하는건 프로젝트 인력들과의&lt;br /&gt;릴레이션 쉽입니다. 아무리 설계가 안되고 프레임웍이 꼬여도&lt;br /&gt;프로젝트 팀원간의 유대관계가 좋으면 힘들거나 두렵지&lt;br /&gt;않습니다. 제가 제일 두려운건 설계도 프레임웍도 아닌&lt;br /&gt;프로젝트 인력간의 유대 관계입니다.&lt;br /&gt;사실 유대 관계가 좋으면 상황이 나뻐지지도 않습니다.&lt;br /&gt;개발자들 매우 감성적인 사람들 입니다.&lt;br /&gt;지속적인 커뮤니케이션을 통해서 이해하고 유대감을 형성하면&lt;br /&gt;야근,주말근무 알아서들 나와서 도와 줍니다.&lt;br /&gt;왜냐면 일하는게 즐겁기 때문이죠.&lt;br /&gt;지속적인 커뮤니케이션을 통해서 생산성을 높이고&lt;br /&gt;최적의 방안을 논의 한다면 상당수 시간을 줄일수 있다고&lt;br /&gt;생각 합니다.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-8277417626759931065?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/8277417626759931065/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/blog-post_18.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/8277417626759931065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/8277417626759931065'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/blog-post_18.html' title='일정만 기억하는 더러운 세상'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-1613900377620795337</id><published>2010-03-18T22:04:00.001-07:00</published><updated>2010-03-25T07:36:37.267-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring Annotation 설정시 유의 사항</title><content type='html'>Spring을 Web Application에서 사용할때 ApplicationContext가&lt;br /&gt;두개의 Context로 관리 됩니다.&lt;br /&gt;각각의 ApplicationContext 설정 방법중&lt;br /&gt;하나는 ServletListener를 구현한 "ContextLoaderListener"&lt;br /&gt;와 나머지 하나는 Servlet을 구현한 "DispatcherServlet"&lt;br /&gt;입니다.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt; &amp;lt;listener&amp;gt;&lt;br /&gt; &amp;lt;listener-lass&amp;gt;org.springframework.web.context.ContextLoaderListener&lt;br /&gt;       &amp;lt;/listener-lass&amp;gt;&lt;br /&gt; &amp;lt;/listener&amp;gt;&lt;br /&gt;         .....   &lt;br /&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;  &amp;lt;servlet-name&amp;gt;webAppServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;  &amp;lt;servlet-class&amp;gt;org.springframework.web.servlet.DispatcherServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;  &amp;lt;init-param&amp;gt;&lt;br /&gt;   &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;   &amp;lt;param-value&amp;gt;&lt;br /&gt;     classpath:/webapp-servlet.xml&lt;br /&gt;   &amp;lt;/param-value&amp;gt;&lt;br /&gt;  &amp;lt;/init-param&amp;gt;&lt;br /&gt;  &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt; &amp;lt;/servlet&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;이 두 ApplicationContext는 &lt;br /&gt;부모(ContextLoaderListener)-&gt; 자식(DispatcherServlet)&lt;br /&gt;관계로 되어 있습니다.&lt;br /&gt;이런 구조를 가지고 있어서 주로 부모 ApplicationContext&lt;br /&gt;에는 Service,DAO,DataSource,Transaction 클래스들을&lt;br /&gt;설정하고 자식 ApplicationContext에는 &lt;br /&gt;Controller를 설정 합니다.&lt;br /&gt;&lt;br /&gt;※단 부모에서는 자식을 참조 할수 없음&lt;br /&gt;&lt;br /&gt;스프링을 설정할때 Annotation을 설정하려면 아래와&lt;br /&gt;같이 설정을 해야 합니다.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;beans xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;br /&gt;       xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;       xmlns:context=&amp;quot;http://www.springframework.org/schema/context&amp;quot;&lt;br /&gt;       xsi:schemaLocation=&amp;quot;http://www.springframework.org/schema/beans &lt;br /&gt;           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;br /&gt;           http://www.springframework.org/schema/context&lt;br /&gt;           http://www.springframework.org/schema/context/spring-context-3.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;     &amp;lt;context:annotation-config/&amp;gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;하지만 위와 같은 선언은 반드시 같은 ApplicationContext&lt;br /&gt;에 위치하는 것에만 적용이 됩니다.&lt;br /&gt;즉 "DispatcherServlet"에 위와 같은&lt;br /&gt;xml을 설정하게 되면 "@Autowired"를 통해서 &lt;br /&gt;빈을 검색할때 부모 ApplicationContext에 존재하는 빈들을 &lt;br /&gt;참조 할 수 없습니다.&lt;br /&gt;즉 Service,DAO 빈들을 참조 할 수 없다는 얘기 입니다.&lt;br /&gt;그래서 반드시 저 선언은 "ContextLoaderListener" 에 &lt;br /&gt;선언을 해야 합니다.&lt;br /&gt;참고 하시기 바랍니다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-1613900377620795337?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/1613900377620795337/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring-annotation.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/1613900377620795337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/1613900377620795337'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring-annotation.html' title='Spring Annotation 설정시 유의 사항'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-7364090902913318598</id><published>2010-03-18T00:57:00.000-07:00</published><updated>2010-06-28T06:09:17.547-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring Bean Seesion,Request Scope</title><content type='html'>&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;스프링에서 제공하는 bean은 아래와 같이 life cycle를&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;가지고 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;singleton,prototype,request,session,global session&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;오늘 이중에서 request와 session scope에 대해서 말씀&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;드리겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;먼 저 두 scope에 대해서 간단히 설명하면 이름에서&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;알 수 있듯이 bean의 생명 주기를 말합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;즉 request scope은 HTTP Request 요청시 생성이 되며,&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Response할 때 빈이 소멸 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Session도 Http 세션에서 생성시 생성되면 세션이&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;종료되면 소멸 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;그러면 이런한 bean scope은 언제 설정해야 할까요?&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;개발을 하다 보면 HttpServletRequest 객체를&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Use Case Request Scope&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Controller 에서 Service로 넘길 때가 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;(물론 Controller에서 도메인으로 auto binding을 하겠죠^^)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;일 반적으로 2가지 방법을 사용 할 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;하나는 request객체를 Service로 직접 넘기는 방법과&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;request 객체를 도메인 객체에 setter 함수를 통해서&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;Service로 넘길 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre   style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;span class="escapedIdentifier"&gt;@RequestMapping&lt;/span&gt;(&lt;span class="string"&gt;"/member.beyondje22"&lt;/span&gt;)&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; String list(HttpServletRequest request) {&lt;br /&gt;&lt;span class="comment"&gt;// case1....&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;.memberService.list(request);&lt;br /&gt;&lt;span class="comment"&gt;// case2....&lt;/span&gt;&lt;br /&gt;HttpDomain httpDomain = &lt;span class="keyword"&gt;new&lt;/span&gt; HttpDomain();&lt;br /&gt;httpDomain.setId(request.getParameter(&lt;span class="string"&gt;"id"&lt;/span&gt;));&lt;br /&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;.memberService.list(httpDomain);&lt;br /&gt;&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="string"&gt;"/member/list.jsp"&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;먼 저 첫번째 방법은 개인적으로 비추입니다.&lt;br /&gt;이유인즉 Service 객체는 pure하게 설계가&lt;br /&gt;되어야 하기 때문이죠 .&lt;br /&gt;두 번째 방법은 좀 고급 스럽지가 못하죠&lt;br /&gt;그래서 좀더 고급 스럽게 유연하게 request&lt;br /&gt;scope을 통해서 구현해 보겠습니다.&lt;br /&gt;&lt;br /&gt;==MemberController 클래스&lt;/span&gt;&lt;br /&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;pre style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;   &lt;span class="keyword"&gt;private&lt;/span&gt; HttpDomain httpDomain;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; setHttpDomain(BaseDao httpDomain) {&lt;br /&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;.httpDomain = httpDomain;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="escapedIdentifier"&gt;@RequestMapping&lt;/span&gt;(&lt;span class="string"&gt;"/member.beyondje22"&lt;/span&gt;)&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; String list(HttpServletRequest request) {&lt;br /&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;.httpDomain.setId(request.getParameter(&lt;span class="string"&gt;"id"&lt;/span&gt;));&lt;br /&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;.memberService.list();&lt;br /&gt;&lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="string"&gt;"/member/list.jsp"&lt;/span&gt;;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;== MemberService 클래스&lt;/span&gt;&lt;br /&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;pre   style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;  font-family:Andale Mono,Lucida Console,Monaco,fixed,monospace;font-size:12px;"&gt;   &lt;span class="keyword"&gt;private&lt;/span&gt; HttpDomain httpDomain;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; setHttpDomain(BaseDao httpDomain) {&lt;br /&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;.httpDomain = httpDomain;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; list() {&lt;br /&gt;System.&lt;span class="keyword"&gt;out&lt;/span&gt;.println(&lt;span class="string"&gt;"===="&lt;/span&gt; + &lt;span class="keyword"&gt;this&lt;/span&gt;.httpDomain.getId());&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;빈 설정을 아래와 같이 합니다.&lt;/span&gt;&lt;br /&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;pre face="Andale Mono,Lucida Console,Monaco,fixed,monospace" size="12px" style="color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&amp;lt;bean id=&lt;span class="string"&gt;"httpDomain"&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt;=&lt;span class="string"&gt;"org.beyondj2ee.HttpDomain"&lt;/span&gt; scope=&lt;span class="string"&gt;"session"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;aop:scoped-proxy/&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;bean id=&lt;span class="string"&gt;"memberController"&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt;=&lt;span class="string"&gt;"org.beyondj2ee.MemberController"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;property name=&lt;span class="string"&gt;"httpDomain"&lt;/span&gt; &lt;span class="keyword"&gt;ref&lt;/span&gt;=&lt;span class="string"&gt;"httpDomain"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;........&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;bean id=&lt;span class="string"&gt;"memberService"&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt;=&lt;span class="string"&gt;"org.beyondj2ee.MemberServiceImpl"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;property name=&lt;span class="string"&gt;"httpDomain"&lt;/span&gt; &lt;span class="keyword"&gt;ref&lt;/span&gt;=&lt;span class="string"&gt;"httpDomain"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;br /&gt;소스를 보시면 서로 간에 coupling 없이 injection을&lt;br /&gt;통해서 Controller,Service,DAO 클래스에서&lt;br /&gt;참조가 가능 합니다.Session Scope Bean도&lt;br /&gt;단지 생명 주기가 차이날뿐 똑같이 사용할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;설정 방법&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;request와 session scope을 사용 하려면 웹 어플리케이션에서만&lt;br /&gt;사용해야 합니다. standalone 형태의 스프링 어플리케이션에서는&lt;br /&gt;지원을 하지 않습니다.&lt;br /&gt;스프링 IoC 컨테이너에게 나는 웹 어플리케이션 이라고&lt;br /&gt;선언을 web.xml에서 선언 해야 합니다.&lt;br /&gt;기본적으로 Spring MVC를 사용한다면 별다른 설정이&lt;br /&gt;필요 없습니다. 이유인즉 "DispatcherServlet" 에서&lt;br /&gt;자동으로 설정하기 때문입니다. 만약 다른 MVC&lt;br /&gt;(struts,struts2,webwork)를 사용하고&lt;br /&gt;Servlet2.4 버전일 경우&lt;br /&gt;아래와 같이설정 합니다.&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;br /&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&amp;lt;web-app&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;listener&amp;gt;&lt;br /&gt;&amp;lt;listener-&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;gt;&lt;br /&gt;org.springframework.web.context.request.RequestContextListener&lt;br /&gt;&amp;lt;/listener-&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;/listener&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;2.3 버전일 경우&lt;/span&gt;&lt;br /&gt;&lt;!-- Source code formatted by FormatC; http://www.ookii.org/software/formatc --&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&amp;lt;web-app&amp;gt;&lt;br /&gt;..&lt;br /&gt;&amp;lt;filter&amp;gt;&lt;br /&gt;&amp;lt;filter-name&amp;gt;requestContextFilter&amp;lt;/filter-name&amp;gt;&lt;br /&gt;&amp;lt;filter-&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;gt;org.springframework.web.filter.RequestContextFilter&amp;lt;/filter-&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;/filter&amp;gt;&lt;br /&gt;&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;&amp;lt;filter-name&amp;gt;requestContextFilter&amp;lt;/filter-name&amp;gt;&lt;br /&gt;&amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;빈 설정 하기&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;&lt;br /&gt;반드시 "aop:scoped-proxy" 태그를 설정해야 합니다.&lt;br /&gt;이유인즉은 이 빈들을 참조하는 빈들이 생성될때&lt;br /&gt;같이 생성이 됩니다. 그럴경우 Http 객체를&lt;br /&gt;참조 할 수 없습니다. 그래서 이러한 빈들은&lt;br /&gt;http 이벤트가 발생시 proxy 객체를 통해서&lt;br /&gt;생성이 됩니다.&lt;br /&gt;그리고 위와같이 선언하면 반드시&lt;br /&gt;"CGLIB" 라이브러리가 클래스 패스로 잡혀 있어야 합니다.&lt;br /&gt;만약 JDK에서 지원되는 proxy를 사용 하려면&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&amp;lt;aop:scoped-proxy class="false"/&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"  style="color:#FFFFFF;"&gt;선언 합니다.&lt;br /&gt;개인적인 의견은 request scope은 잘 사용되지 않을 것&lt;br /&gt;같지만 session scope은 매우 유용할 듯 합니다.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-7364090902913318598?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/7364090902913318598/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring-bean-seesionrequest-scope.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/7364090902913318598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/7364090902913318598'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring-bean-seesionrequest-scope.html' title='Spring Bean Seesion,Request Scope'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-8314655410267202214</id><published>2010-03-17T05:05:00.000-07:00</published><updated>2010-03-25T07:54:20.402-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Spring Bean Alias 사용예</title><content type='html'>Spring 에서 bean을 xml로 설정 할때 "id" 또는 "name"&lt;br /&gt;attribute에 값을 설정 합니다.&lt;br /&gt;이 설정된 값은 IoC 컨테이너에 유일한&lt;br /&gt;bean 식별자 됩니다.&lt;br /&gt;하지만 가끔 bean 한개에 식별자를 한 개이상&lt;br /&gt;설 정을 할때가 있습니다.&lt;br /&gt;그때 사용하는 attribute가 바로 "alias"입니다.&lt;br /&gt;즉 나는 하나지만 이름은 여러개란 뜻입니다.&lt;br /&gt;그러면 이런 alias는 어떤 case일때 사용해야&lt;br /&gt;하는지 말씀 드리겠습니다.&lt;br /&gt;&lt;br /&gt;만약 A라는 시스템이 있습니다.&lt;br /&gt;여기서 데이터 소스 빈 설정은 아래와 같이&lt;br /&gt;되어 있습니다.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;bean id=&amp;quot;dataSourceA&amp;quot; class=&amp;quot;org.beyondj2ee.DataSource&amp;quot;/&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;A시스템에 있는 DAO 클래스는 ref="dataSourceA"&lt;br /&gt;로 설정이 되어 있습니다.&lt;br /&gt;&lt;br /&gt;이제 B라는 시스템이 있습니다.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;bean id=&amp;quot;dataSourceB&amp;quot; class=&amp;quot;org.beyondj2ee.DataSource&amp;quot;/&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;역시 마찬가지로&lt;br /&gt;B시스템에 있는 DAO 클래스는 ref="dataSourceB"&lt;br /&gt;로 설정이 되어 있습니다.&lt;br /&gt;&lt;br /&gt;어느날 Intergration이라는 A,B를 통합 하는&lt;br /&gt;시스템을 구축하려고 합니다.&lt;br /&gt;A시스템과 B 시스템은 각각 별도의 DB를&lt;br /&gt;가지고 있습니다. 그래서 양쪽 DB를&lt;br /&gt;하나의 통합 DB로 마이그레이션을 했습니다.&lt;br /&gt;이 통합 DB를 보는 bean 설정은 아래와 같습니다.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;bean id=&amp;quot;dataSourceTotal&amp;quot; class=&amp;quot;org.beyondj2ee.DataSource&amp;quot;/&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;그런데 Application을 통합하는 과정에서&lt;br /&gt;문제가 발생 했습니다.&lt;br /&gt;각 시스템에서 데이터 소스의 bean id가&lt;br /&gt;제 각각 틀리게 구성되었습니다.&lt;br /&gt;그래서 각각 DAO로 선언된 bean들이&lt;br /&gt;참조하는 "ref" 속성을 전부 수정해야 합니다&lt;br /&gt;이때 "alias"태그를 사용합니다.&lt;br /&gt;아래와 같이 설정을 해서 통합 합니다.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;alias name=&amp;quot;dataSourceTotal&amp;quot; alias=&amp;quot;dataSourceA&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;alias name=&amp;quot;dataSourceTotal&amp;quot; alias=&amp;quot;dataSourceB&amp;quot;/&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;이런면 각 시스템에 DataSource를 참조하는 bean들을&lt;br /&gt;수정 없이 해결 할 수있습니다.&lt;br /&gt;bean 설계시 고려 하시기를 바랍니다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-8314655410267202214?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/8314655410267202214/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring-aliasing-bean.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/8314655410267202214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/8314655410267202214'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/spring-aliasing-bean.html' title='Spring Bean Alias 사용예'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-6047670235170080229</id><published>2010-03-15T21:14:00.000-07:00</published><updated>2010-03-15T23:44:53.750-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>한국형 J2EE 스펙 (egovFrame 기반)</title><content type='html'>최근에 정부에서 스프링 기반에 "egovFrame" 이라는&lt;br /&gt;전자 정부 프레임웍을 만들었습니다.&lt;br /&gt;개인적으로 프레임웍을 만들었다는 의의 보단&lt;br /&gt;정부 차원에서 오픈 소스 사용에 대해서 인정을 했다는 점과&lt;br /&gt;그러한 오픈 소스들을 마치 한국형 J2EE 스펙화 했다는&lt;br /&gt;점이 제일 맘에 듭니다.&lt;br /&gt;그래서 제가 "egovFrame"을 기준 + 개인적으로 추천하는 오픈소스&lt;br /&gt;를 추가해서 한국형 J2EE 스펙(? ㅋㅋ) 을 그려 봤습니다.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5VYpS-OcdCs/S58HSpZfsrI/AAAAAAAAAI0/3JFKLr8ZAPo/s1600-h/frame.bmp"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://3.bp.blogspot.com/_5VYpS-OcdCs/S58HSpZfsrI/AAAAAAAAAI0/3JFKLr8ZAPo/s320/frame.bmp" alt="" id="BLOGGER_PHOTO_ID_5449082091073417906" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-6047670235170080229?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/6047670235170080229/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/j2ee-egovframe.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6047670235170080229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6047670235170080229'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/j2ee-egovframe.html' title='한국형 J2EE 스펙 (egovFrame 기반)'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_5VYpS-OcdCs/S58HSpZfsrI/AAAAAAAAAI0/3JFKLr8ZAPo/s72-c/frame.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-8139355654988754931</id><published>2010-03-08T23:13:00.001-08:00</published><updated>2010-04-22T21:22:02.364-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>이클립스에서 Derby 사용 하기</title><content type='html'>DBMS 관련되 오픈 소스들이 많이 나와 있습니다.&lt;br /&gt;HSQL,SQLLight,Apache Derby 등이 있습니다.&lt;br /&gt;이들 DB의 사용하는 이유는 오픈 소스라는 점과&lt;br /&gt;생각 보다 높은 퍼포먼스와 트랜잭션을&lt;br /&gt;안전성 있게 보장한다는 점이 매력이 있습니다.&lt;br /&gt;개인적으로는 Hibernate와 같은 JPA 테스트를&lt;br /&gt;위해서 사용 하고 있습니다.&lt;br /&gt;그래서 Apache Derby에 대한 내용 보다는&lt;br /&gt;(please.. googling!)&lt;br /&gt;테스트를 위해서 이클립스에서 쉽게&lt;br /&gt;설치하고 구동 및 사용법에 대해서 말씀&lt;br /&gt;드리려고 합니다.&lt;br /&gt;본 내용은 Derby 사이트에서 제공한 내용을&lt;br /&gt;재구성 했습니다.&lt;br /&gt;(&lt;a href="http://db.apache.org/derby/integrate/plugin_help/start_toc.html"&gt;http://db.apache.org/derby/integrate/plugin_help/start_toc.html&lt;/a&gt;)&lt;br /&gt;&lt;ul style="color: rgb(0, 0, 0);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;설치하기 (Derby &amp;amp; Eclipse)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Apache Derby 다운로드 사이트에 접속 합니다.&lt;br /&gt;(&lt;a href="http://db.apache.org/derby/derby_downloads.html#How+to+build+Derby"&gt;http://db.apache.org/derby/derby_downloads.html#How+to+build+Derby&lt;/a&gt;)&lt;br /&gt;Derby 최신 버전의 다운로드 링크를 선택 합니다.&lt;br /&gt;(글을 쓰고 있는 시점에서 "10.5.3.0"이 최근 버전이네요)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5VYpS-OcdCs/S5X5aj_6pII/AAAAAAAAAH0/ZdRWvtdqkcM/s1600-h/a1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 179px;" src="http://4.bp.blogspot.com/_5VYpS-OcdCs/S5X5aj_6pII/AAAAAAAAAH0/ZdRWvtdqkcM/s320/a1.jpg" alt="" id="BLOGGER_PHOTO_ID_5446533559109723266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;이동한 페이지 하단 부분에 보면 아래와 같이 zip 파일을&lt;br /&gt;볼수 있습니다.&lt;br /&gt;두개 파일을 다운 로드 받습니다.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(derby_core_plugin_10.5.3.zip,derby_ui_doc_plugin_1.1.2.zip)&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5VYpS-OcdCs/S5X6B6b9r2I/AAAAAAAAAH8/XVvSqi4NEHo/s1600-h/00000a1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 179px;" src="http://4.bp.blogspot.com/_5VYpS-OcdCs/S5X6B6b9r2I/AAAAAAAAAH8/XVvSqi4NEHo/s320/00000a1.jpg" alt="" id="BLOGGER_PHOTO_ID_5446534235147841378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;각 파일들을 압축 해제 하면 각각 "plugin" 디렉토리가 존재 합니다.&lt;br /&gt;이 디렉토리를 이클립스 "plugin" 디렉토리로 덮어씌기를 합니다.&lt;br /&gt;예상을 한분들도 있겠지만 이클립스 플러그인 추가하는 것입니다.&lt;br /&gt;적용이 끝나면 이클립스를 리붓 합니다.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;서버 기동하기&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;새롭게 적용된 이클립스가 실행 되면&lt;br /&gt;개발 하고자 하는 신규 프로젝트를 생성 합니다.&lt;br /&gt;(Maven 프로젝트를 하던 WTP로 생성하던 일반 자바 프로젝트던&lt;br /&gt;상관없습니다.)&lt;br /&gt;생선된 프로젝트를 선택 후 "&lt;span style="font-weight: bold;"&gt;Right Click&lt;/span&gt;" 하면 서브 메뉴바에&lt;br /&gt;"&lt;span style="font-weight: bold;"&gt;Apache Derby&lt;/span&gt;" - "&lt;span style="font-weight: bold;"&gt;Add Apache Derby nature&lt;/span&gt;"를 선택 합니다.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5VYpS-OcdCs/S5X7-_8_myI/AAAAAAAAAIE/I3pG_JZPuUk/s1600-h/add_nature.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 274px;" src="http://2.bp.blogspot.com/_5VYpS-OcdCs/S5X7-_8_myI/AAAAAAAAAIE/I3pG_JZPuUk/s320/add_nature.GIF" alt="" id="BLOGGER_PHOTO_ID_5446536384112204578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;적용 하고 나면 "&lt;span style="font-weight: bold;"&gt;Apache Derby&lt;/span&gt;" 메뉴에 추가로 서브 메뉴들이&lt;br /&gt;추가 된것을 볼 수 있습니다.&lt;br /&gt;"&lt;span style="font-weight: bold;"&gt;Start Derby Network Server&lt;/span&gt;"를 실행 합니다.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5VYpS-OcdCs/S5X8tBd7ZEI/AAAAAAAAAIM/dTJyyIBvAIQ/s1600-h/start_server.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 306px;" src="http://3.bp.blogspot.com/_5VYpS-OcdCs/S5X8tBd7ZEI/AAAAAAAAAIM/dTJyyIBvAIQ/s320/start_server.GIF" alt="" id="BLOGGER_PHOTO_ID_5446537174792758338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;기동 하게 되면 아래와 같은 메세지 창이 출력 됩니다. Derby는 기본 Port&lt;br /&gt;는 1527번을 사용 합니다.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5VYpS-OcdCs/S5X9FwwzViI/AAAAAAAAAIU/CHXesix39Rs/s1600-h/00001a1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 81px;" src="http://2.bp.blogspot.com/_5VYpS-OcdCs/S5X9FwwzViI/AAAAAAAAAIU/CHXesix39Rs/s320/00001a1.jpg" alt="" id="BLOGGER_PHOTO_ID_5446537599805249058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;"OK" 버튼을 선택하면 서버가 기동 됩니다.&lt;br /&gt;즉 오라클일 경우 DB 인스턴스가 Startup에서 리스너가&lt;br /&gt;대기중인 상태라고 볼 수 있습니다.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5VYpS-OcdCs/S5X9fGJzTYI/AAAAAAAAAIc/z_6wfAmbbto/s1600-h/start_server_console.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 247px;" src="http://3.bp.blogspot.com/_5VYpS-OcdCs/S5X9fGJzTYI/AAAAAAAAAIc/z_6wfAmbbto/s320/start_server_console.gif" alt="" id="BLOGGER_PHOTO_ID_5446538035043978626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;SQL 실행 하기&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;이제 Apache Derby를 사용하는 환경 설정을 끝났습니다.&lt;br /&gt;그러면 과연 어떻게 접속하고 SQL를 질의하는 방법에&lt;br /&gt;대해서 말씀 드리겠습니다.&lt;br /&gt;오라클에서 SQL를 실행 하려면 "SqlPlus"를 사용해서&lt;br /&gt;질의를 할 수 있습니다.(물론 다른툴 쓰시겠죠^^)&lt;br /&gt;이러한 콘솔을 제공하는 것이 "IJ"란 유틸리티 입니다.&lt;br /&gt;서브 메뉴를 오픈 합니다.&lt;br /&gt;"&lt;span style="font-weight: bold;"&gt;Apache Derby&lt;/span&gt;" - "&lt;span style="font-weight: bold;"&gt;Run SQL Script using 'ij'&lt;/span&gt;"를 실행 합니다.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5VYpS-OcdCs/S5X_v9-SUYI/AAAAAAAAAIk/wEVLE-m-UQU/s1600-h/restaurant_editor.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 233px;" src="http://1.bp.blogspot.com/_5VYpS-OcdCs/S5X_v9-SUYI/AAAAAAAAAIk/wEVLE-m-UQU/s320/restaurant_editor.GIF" alt="" id="BLOGGER_PHOTO_ID_5446540523929227650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;실행 하면 "IJ&gt;" 커서 명령을 기다리고 있습니다.&lt;br /&gt;아래와 같이 SQL 스크립트를 질의 합니다.&lt;br /&gt;&lt;pre class="brush: java;highlight: []"&gt;&lt;br /&gt;connect 'jdbc:derby://localhost:1527/myDB;create=true;user=me;password=mine';&lt;br /&gt;insert into restaurants values (4, 'Grande Burrito', 'Oakland');&lt;br /&gt;update restaurants set city = 'Ukiah' where name = 'Irifunes';&lt;br /&gt;select * from restaurants;&lt;br /&gt;disconnect;&lt;br /&gt;exit;&lt;br /&gt;&lt;/pre&gt;질의 후 결과 화면이 아래와 같이 출력 됩니다.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5VYpS-OcdCs/S5YCUflUYnI/AAAAAAAAAIs/nFGJvA5tfjk/s1600-h/%E3%85%8B.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 233px;" src="http://2.bp.blogspot.com/_5VYpS-OcdCs/S5YCUflUYnI/AAAAAAAAAIs/nFGJvA5tfjk/s320/%E3%85%8B.GIF" alt="" id="BLOGGER_PHOTO_ID_5446543350449857138" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-8139355654988754931?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/8139355654988754931/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/derby.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/8139355654988754931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/8139355654988754931'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/derby.html' title='이클립스에서 Derby 사용 하기'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_5VYpS-OcdCs/S5X5aj_6pII/AAAAAAAAAH0/ZdRWvtdqkcM/s72-c/a1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-6960696301940790887</id><published>2010-03-02T03:05:00.000-08:00</published><updated>2010-03-02T03:09:52.013-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='My Think'/><title type='text'>김연아 선수와 팀에서 배워야 할 점</title><content type='html'>요새 김연아 선수때문에 한국이 난리가 났죠 ..&lt;br /&gt;다시 한번 개인적으로 축하를 전하고 싶습니다.&lt;br /&gt;어떻게 이런한 성과를 얻었는지 조직이든 개인이든&lt;br /&gt;벤치 마킹할 필요가 있습니다.&lt;br /&gt;아래는 그와 관련된 블러그 입니다.&lt;br /&gt;꼭 한번 읽어 보세요&lt;br /&gt;&lt;a href="http://v.daum.net/link/6012660"&gt;김연아 선수와 브라이언 오서 코치의 "행복" 리더십&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5314634007543171412-6960696301940790887?l=beyondj2ee.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beyondj2ee.blogspot.com/feeds/6960696301940790887/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/blog-post_02.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6960696301940790887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5314634007543171412/posts/default/6960696301940790887'/><link rel='alternate' type='text/html' href='http://beyondj2ee.blogspot.com/2010/03/blog-post_02.html' title='김연아 선수와 팀에서 배워야 할 점'/><author><name>TAE KI KIM (beyondj2ee@gmail.com)</name><uri>http://www.blogger.com/profile/09850651300379615739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_5VYpS-OcdCs/SkuR-iDQtYI/AAAAAAAAAAM/HRoTshXCuRc/S220/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C-2452-taekiblue.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5314634007543171412.post-4490874135015009369</id><published>2010-03-02T00:02:00.000-08:00</published><updated>2010-03-02T00:46:24.181-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='My Think'/><title type='text'>개발 마인드를 바꾸자!</title><content type='html'>얼마전 TV를 보니 재미 있는 얘기를 들었습니다.&lt;br /&gt;고대 이집트의 피라미드 와 고대 건축물들을 보면 &lt;br /&gt;어떻게 저 시대에 저런 건물을 지을 수 있을지 지금까지도&lt;br /&gt;불가사의로 남아 있습니다. &lt;br /&gt;이런 일을 가능하게 했던건 뛰어난 수학적 사고와 기술이 바탕이&lt;br /&gt;되었기 때문에 가능하리라고 생각이 듭니다.&lt;br /&gt;하지만 오늘날 수학에 대해서 유럽이나 미국이 &lt;br /&gt;훨씬더 발달이 되어 있습니다.&lt;br /&gt;여기서 의문에 생겼습니다. &lt;br /&gt;당연히 고대에 범접할 수 없는 수학 지식을&lt;br /&gt;갖춘 이집트가 주도 하지 못하는 것일까요?&lt;br /&gt;이유인즉 이집트 민족들은 어떠한 목표가 달성이&lt;br /&gt;되면 거기에 만족한다고 합니다. 즉 어떻게&lt;br /&gt;하면 피라미드를 쌓을까 하고 고민하고 구현하면&lt;br /&gt;그걸로 끝이난 거죠. 반면 유럽 사람들은 거기서&lt;br /&gt;만족하지 않고, 이번에 이렇게 해봤으니 다음엔 &lt;br /&gt;이렇게 해보자 , 실패하든 성공하든 ...&lt;br /&gt;즉 계속해서 도전하고 실험 하면서 좀 더 나은 방법을&lt;br /&gt;위해서 연구한다는 것입니다.&lt;br /&gt;어느 특정 국가나 민족을 칭찬 하거나 비난하려고&lt;br /&gt;말씀 드린것이 아닙니다.&lt;br /&gt;이 내용을 보면서 현재 우리가 처한 개발 환경에 대해서&lt;br /&gt;많은 것을 생각하게 했습니다.&lt;br /&gt;국내 또는 해외에서 "애자일 방법론"을 사용해서 큰 효과를&lt;br /&gt;봤다 하면 개인적으로 "애자일 방법론"을 한번이라도 사용해&lt;br /&gt;봤다니 부
