<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0">
 <title type="html">이제부터 시작</title>
 <id>http://blog.javapia.co.kr/atom</id>
 <link rel="alternate" type="text/html" hreflang="ko" href="http://blog.javapia.co.kr/"/>
 <subtitle type="html"></subtitle>
 <updated>2010-09-01T07:31:00+09:00</updated>
 <generator>Textcube.com 2.0 Garnet</generator>
 <entry>
  <title type="html">TypeHandlerCallback 예시</title>
  <link rel="alternate" type="text/html" href="http://blog.javapia.co.kr/69"/>
  <link rel="replies" type="application/atom+xml" href="http://blog.javapia.co.kr/atom/discuss/69" thr:count="0"/>
  <category term="Java"/>
  <author>
   <name>김선수</name>
  </author>
  <id>http://blog.javapia.co.kr/69</id>
  <updated>2010-08-31T19:21:17+09:00</updated>
  <published>2010-08-31T19:21:17+09:00</published>
  <summary type="html"> &amp;nbsp; package com.naver.jr.fun.model.quiz.handler; import java.sql.SQLException; import org.apache.commons.lang.StringUtils; import com.ibatis.sqlmap.client.extensions.ParameterSetter; import com.ibatis.sqlmap.client.extensions.ResultGetter; import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback; import com.naver.jr.fun.model.quiz.QuizCategory; public class QuizCategoryTypeHandler implements TypeHandlerCallback { &amp;nbsp;@Override &amp;nbsp;public Object getResult(ResultGetter getter) throws SQLException { &amp;nbsp; String str = getter.getString(); &amp;nbsp; if (StringUtils.equals(QuizCategory.COMMON.toString(), str)) { &amp;nbsp; &amp;nbsp;return QuizCategory.COMMON; &amp;nbsp; } else if (StringUtils.equals(QuizCategory.COUNTRY.toString(), str)) { &amp;nbsp; &amp;nbsp;return QuizCategory.COUNTRY; &amp;nbsp; } else if (StringUtils.equals(QuizCategory.PROVERB.toString(), str)) { &amp;nbsp; &amp;nbsp;return QuizCategory.PROVERB; &amp;nbsp; } else if (StringUtils.equals(QuizCategory.RIDDLE.toString(), str)) { &amp;nbsp; &amp;nbsp;return QuizCategory.RIDDLE; &amp;nbsp; } else if (StringUtils.equals(QuizCategory.TEXTBOOK.toString(), str)) { &amp;nbsp; &amp;nbsp;return QuizCategory.TEXTBOOK; &amp;nbsp; } else if (StringUtils.equals(QuizCategory.TV.toString(), str)) { &amp;nbsp; &amp;nbsp;return QuizCategory.TV; &amp;nbsp; } &amp;nbsp; else { &amp;nbsp; &amp;nbsp;throw new SQLException(&amp;quot;Unexpceted value &amp;quot; + str + &amp;quot; found. &amp;quot; + QuizCategory.class.toString() &amp;nbsp; &amp;nbsp; + &amp;quot; was expected.&amp;quot;); &amp;nbsp; } &amp;nbsp;} &amp;nbsp;@Override &amp;nbsp;public void setParameter(ParameterSetter setter, Object parameter) throws SQLException { &amp;nbsp; switch ((QuizCategory)parameter) { &amp;nbsp; &amp;nbsp;case COMMON: &amp;nbsp; &amp;nbsp; setter.setString(QuizCategory.COMMON.toString()); &amp;nbsp; &amp;nbsp; break; &amp;nbsp; &amp;nbsp;case COUNTRY: &amp;nbsp; &amp;nbsp; setter.setString(QuizCategory.COUNTRY.toString()); &amp;nbsp; &amp;nbsp; break; &amp;nbsp; &amp;nbsp;case PROVERB: &amp;nbsp; &amp;nbsp; setter.setString(QuizCategory.PROVERB.toString()); &amp;nbsp; &amp;nbsp; break; &amp;nbsp; &amp;nbsp;case RIDDLE: &amp;nbsp; &amp;nbsp; setter.setString(QuizCategory.RIDDLE.toString()); &amp;nbsp; &amp;nbsp; break; &amp;nbsp; &amp;nbsp;case TEXTBOOK: &amp;nbsp; &amp;nbsp; setter.setString(QuizCategory.TEXTBOOK.toString()); &amp;nbsp; &amp;nbsp; break; &amp;nbsp; &amp;nbsp;case TV: &amp;nbsp; &amp;nbsp; setter.setString(QuizCategory.TV.toString()); &amp;nbsp; &amp;nbsp; break; &amp;nbsp; &amp;nbsp;default: &amp;nbsp; &amp;nbsp; throw new SQLException(&amp;quot;Unexpceted value found. &amp;quot; + QuizCategory.class.toString() + &amp;quot; was expected.&amp;quot;); &amp;nbsp; } &amp;nbsp;} &amp;nbsp;@Override &amp;nbsp;public Object valueOf(String str) { &amp;nbsp; if (StringUtils.equals(QuizCategory.COMMON.toString(), str)) { &amp;nbsp; &amp;nbsp;return QuizCategory.COMMON; &amp;nbsp; } else if (StringUtils.equals(QuizCategory.COUNTRY.toString(), str)) { &amp;nbsp; &amp;nbsp;return QuizCategory.COUNTRY; &amp;nbsp; } else if (StringUtils.equals(QuizCategory.PROVERB.toString(), str)) { &amp;nbsp; &amp;nbsp;return QuizCategory.PROVERB; &amp;nbsp; } else if (StringUtils.equals(QuizCategory.RIDDLE.toString(), str)) { &amp;nbsp; &amp;nbsp;return QuizCategory.RIDDLE; &amp;nbsp; } else if (StringUtils.equals(QuizCategory.TEXTBOOK.toString(), str)) { &amp;nbsp; &amp;nbsp;return QuizCategory.TEXTBOOK; &amp;nbsp; } else if (StringUtils.equals(QuizCategory.TV.toString(), str)) { &amp;nbsp; &amp;nbsp;return QuizCategory.TV; &amp;nbsp; } &amp;nbsp; return null; &amp;nbsp;} } &amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://blog.javapia.co.kr/69&quot;&gt;글 전체보기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</summary>
 </entry>
 <entry>
  <title type="html">잊을 수 없는 향기</title>
  <link rel="alternate" type="text/html" href="http://blog.javapia.co.kr/68"/>
  <link rel="replies" type="application/atom+xml" href="http://blog.javapia.co.kr/atom/discuss/68" thr:count="0"/>
  <category term="Private"/>
  <category term="cf"/>
  <category term="&#xC784;&#xC218;&#xC815;"/>
  <category term="&#xC815;&#xC6B0;&#xC131;"/>
  <author>
   <name>김선수</name>
  </author>
  <id>http://blog.javapia.co.kr/68</id>
  <updated>2010-08-31T19:22:07+09:00</updated>
  <published>2010-08-31T09:50:48+09:00</published>
  <summary type="html"> &amp;nbsp; &amp;nbsp; 「마음을 다해 사랑했다면 결국 그 사람앞에 서게 됩니다.」 &amp;nbsp; &amp;nbsp; 마음에 와닿는 카피다. &amp;nbsp; &amp;nbsp; 저런 눈빛으로 나를 보아주던 그녀의 눈빛이 느껴져서 짠하다. &amp;nbsp; &amp;nbsp; 이제 가을인가 보다. &amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://blog.javapia.co.kr/68&quot;&gt;글 전체보기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</summary>
 </entry>
 <entry>
  <title type="html">Unitils와 DBUnit 에서 NoSuchColumnException 에러</title>
  <link rel="alternate" type="text/html" href="http://blog.javapia.co.kr/67"/>
  <link rel="replies" type="application/atom+xml" href="http://blog.javapia.co.kr/atom/discuss/67" thr:count="0"/>
  <category term="Experience"/>
  <category term="DBUnit"/>
  <category term="error"/>
  <category term="NoSuchColumnException"/>
  <category term="Unitils"/>
  <author>
   <name>김선수</name>
  </author>
  <id>http://blog.javapia.co.kr/67</id>
  <updated>2010-08-05T20:13:31+09:00</updated>
  <published>2010-08-05T20:13:31+09:00</published>
  <summary type="html"> 분명히 DB에 컬럼이 존재함에도 불구하고 Unitils에서 DBUnit를 연동해서 dataset의 내용을 처리할때 아래와 같은 에러가 발생할 경우가 있다. &amp;nbsp; org.dbunit.dataset.NoSuchColumnException &amp;nbsp; 이것은 라이브러리 버전의 문제일수도 있다. &amp;nbsp; DBUnit 2.4.7 과 Untils- DBUnit 3.1을 사용했더니 위의 문제가 발생되었다. DBUnit 의 버전을 2.2.2 로 내리고 나니 해결이 되었다. (pom.xml에서 빼면 자동으로 2.2.2를 포함한다) &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://blog.javapia.co.kr/67&quot;&gt;글 전체보기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</summary>
 </entry>
 <entry>
  <title type="html">java.lang.NoSuchMethodError 에러메시지</title>
  <link rel="alternate" type="text/html" href="http://blog.javapia.co.kr/66"/>
  <link rel="replies" type="application/atom+xml" href="http://blog.javapia.co.kr/atom/discuss/66" thr:count="0"/>
  <category term="Experience"/>
  <category term="error"/>
  <category term="Java"/>
  <category term="nosuchmethod"/>
  <author>
   <name>김선수</name>
  </author>
  <id>http://blog.javapia.co.kr/66</id>
  <updated>2010-08-05T20:05:26+09:00</updated>
  <published>2010-08-05T14:23:21+09:00</published>
  <summary type="html"> 간혹 NoSuchMethodError가 발생할 경우가 있다. &amp;nbsp; 메소드를 찾지 못해서 발생하는 에러인데 코드상, 라이브러리상에서 전혀 문제가 없는 경우 발생할 때에는 &amp;nbsp; 주로 classpath상에서 중복되는 class가 있어서 정상적으로 method를 찾지 못해서 발생하는 문제이므로 아래와 같이 조치를 해보자 lib폴더에서 중복되는 jar파일의 존재를 확인한다 maven의 pom.xml파일에서 dependency 부분에서 complict가 발생되는 라이브러리가 없는지 확인해보도록 하자 &amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://blog.javapia.co.kr/66&quot;&gt;글 전체보기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</summary>
 </entry>
 <entry>
  <title type="html">Ant의 FileSet을 Source 이용하기</title>
  <link rel="alternate" type="text/html" href="http://blog.javapia.co.kr/65"/>
  <link rel="replies" type="application/atom+xml" href="http://blog.javapia.co.kr/atom/discuss/65" thr:count="0"/>
  <category term="Snippet"/>
  <category term="Ant"/>
  <category term="FileSet"/>
  <category term="Java"/>
  <category term="snippet"/>
  <category term="&#xD30C;&#xC77C;&#xBAA9;&#xB85D;"/>
  <author>
   <name>김선수</name>
  </author>
  <id>http://blog.javapia.co.kr/65</id>
  <updated>2010-08-05T20:06:24+09:00</updated>
  <published>2010-07-26T13:41:23+09:00</published>
  <summary type="html"> Apache의 Ant에서는 FileSet라는 파일 및 폴더 관리 방식이 있다. &amp;nbsp; 매우 유연하게 폴더 및 파일을 접근할 수 있는데 그부분은 Java 소스에서 &amp;nbsp; 이용하는 방법을 알아보도록 하자. &amp;nbsp; 예제1 &amp;nbsp; String fileSet = &amp;quot;**/F*.jsp,**/T*.jsp&amp;quot;; &amp;nbsp; String fileSetExclude = &amp;quot;**/S.jsp&amp;quot;; &amp;nbsp; File ws = new File(&amp;quot;D:/Projects/lucy/text-finder/work/jobs/Test/workspace&amp;quot;); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FileSet fs = new FileSet(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; org.apache.tools.ant.Project p = new org.apache.tools.ant.Project(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fs.setProject(p); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fs.setDir(ws);&amp;nbsp; // Root경로를 지정 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fs.setIncludes(fileSet);&amp;nbsp; //포함할 파일 조건 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fs.setExcludes(fileSetExclude);&amp;nbsp; //제외할 파일 조건 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DirectoryScanner ds = fs.getDirectoryScanner(p); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Any files in the final set &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String[] files = ds.getIncludedFiles(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (files.length == 0) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.err.println(&amp;quot;FileSet Empty&amp;quot;); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw new Exception(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (String file : files) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; File f = new File(ws, file); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!f.exists()) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.err.println(&amp;quot;Error Find File : &amp;quot; + f); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!f.canRead()) { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.err.println(&amp;quot;Error Read File : &amp;quot; + f); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&amp;quot;File : &amp;quot; + f.getName()); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp; &amp;nbsp; 위의 소스가 간단하기 때문에 쉽게 파악할 수 있을것이다. &amp;nbsp; FileSet의 조건을 주는 방식은 ant의 설명을 참고하길 바라며 콤마(,)를 이용해 다수의 경로조건을 입력할 수 있다. &amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://blog.javapia.co.kr/65&quot;&gt;글 전체보기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</summary>
 </entry>
 <entry>
  <title type="html">IEToy에서 네이버 불펌 방지 해지</title>
  <link rel="alternate" type="text/html" href="http://blog.javapia.co.kr/64"/>
  <link rel="replies" type="application/atom+xml" href="http://blog.javapia.co.kr/atom/discuss/64" thr:count="0"/>
  <category term="&#xAC1C;&#xBC1C;&#xC790; &#xB178;&#xD2B8;"/>
  <category term="ietoy"/>
  <category term="Naver &#xBD88;&#xD38C;"/>
  <category term="&#xBD88;&#xD38C;&#xBC29;&#xC9C0;"/>
  <author>
   <name>김선수</name>
  </author>
  <id>http://blog.javapia.co.kr/64</id>
  <updated>2010-07-19T20:11:31+09:00</updated>
  <published>2010-07-19T20:11:31+09:00</published>
  <summary type="html"> 네이버에서 블로그나 카폐등을 돌아 다니다 보면 불펌 방지가 되어 있는 글을 볼 수 있다. &amp;nbsp; 필요한 내용이 있을 경우, 특히 소스 등의 경우 타이핑으로 복사하는건 너무 힘든일이다. &amp;nbsp; 이런 불편을 IEToy에서 해결 하기 위한 방법을 설명해보겠다. &amp;nbsp; &amp;nbsp;1. http://userscripts.org/scripts/show/61326&amp;nbsp; 에 install버튼을 클릭한다. &amp;nbsp; &amp;nbsp;2. 파일 이름을 antidisablerfornaver.user.js 로 변경해서 IEToy설치 폴더의 gmm_Scripts폴더에 이동한다. &amp;nbsp; &amp;nbsp;3. IEToy 환경 설정(Win+I)에서 사용사 스크립트 항목에서 &amp;quot;Anti-Disable for Naver&amp;quot;을 체크한다. &amp;nbsp; &amp;nbsp;4. 위의 사이트가 문제가 있을 경우 아래의 링크를 다운받아서 2~3번의 절차를 거친다. &amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://blog.javapia.co.kr/64&quot;&gt;글 전체보기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</summary>
 </entry>
 <entry>
  <title type="html">Spring Test Context Framework 사용시 Type mismatch 에러</title>
  <link rel="alternate" type="text/html" href="http://blog.javapia.co.kr/63"/>
  <link rel="replies" type="application/atom+xml" href="http://blog.javapia.co.kr/atom/discuss/63" thr:count="0"/>
  <category term="Experience"/>
  <category term="Autowire"/>
  <category term="error"/>
  <category term="junit"/>
  <category term="Spring"/>
  <category term="TDD"/>
  <category term="Test"/>
  <category term="Type mismatch"/>
  <author>
   <name>김선수</name>
  </author>
  <id>http://blog.javapia.co.kr/63</id>
  <updated>2010-08-05T20:14:33+09:00</updated>
  <published>2010-07-19T18:40:43+09:00</published>
  <summary type="html"> TDD기반의 프로그래밍 중 스프링의 IC를 사용할때 Spring TestContext Framework를 사용하게 된다. &amp;nbsp; 그럴 때 편의를 위해서 어노테이션을 사용하게 되는 경우가 많은데 &amp;nbsp; 아래와 같이 테스트용 메소드 상단에 기록을 하는 것이 일반적이다. &amp;nbsp; @RunWith(SpringJUnit4ClassRunner.class) // specifies the Spring configuration to load for this test fixture @ContextConfiguration(locations={&amp;quot;daos.xml&amp;quot;}) public final class HibernateTitleDaoTests { &amp;nbsp; &amp;nbsp; // this instance will be dependency injected by type &amp;nbsp; &amp;nbsp; @Autowired&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private HibernateTitleDao titleDao; &amp;nbsp; &amp;nbsp; public void testLoadTitle() throws Exception { &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Title title = this.titleDao.loadTitle(new Long(10)); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; assertNotNull(title); &amp;nbsp; &amp;nbsp; } } 그런데 이렇게 설정을 해놓고 실행시에 아래와 같은 오류가 발생할 경우에는 &amp;nbsp; Type mismatch: cannot convert from Class&amp;lt;SpringJUnit4ClassRunner&amp;gt; to Class&amp;lt;? extends Runner&amp;gt; &amp;nbsp; 설치된 JUnit 의 버전을 확인 해보자. &amp;nbsp; JUnit 4.4 이후의 버전을 사용하게 되면 위의 오류는 사라질 것이다. &amp;nbsp; 설치된 JUnit 의 버전을 확인 해보자. &amp;nbsp; &amp;nbsp; &amp;nbsp; 또한 위와 같이 Autowire를 설정시에는 꼭 ApplicationConext.xml 파일의 beans 설정에 defalt-autowire속성이 설정되었는지 확인해야 한다. &amp;nbsp; &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;beans xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot; ... 중략 ... &amp;nbsp;default-autowire=&amp;quot;byName&amp;quot;&amp;gt; &amp;nbsp;&amp;lt;bean id=&amp;quot;boardDAO&amp;quot; class=&amp;quot;com.naver.bbs.dao.BoardDAOImpl&amp;quot; /&amp;gt; &amp;lt;/beans&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://blog.javapia.co.kr/63&quot;&gt;글 전체보기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</summary>
 </entry>
 <entry>
  <title type="html">Eclipse Code Template 에서 ${user}변수 변경</title>
  <link rel="alternate" type="text/html" href="http://blog.javapia.co.kr/62"/>
  <link rel="replies" type="application/atom+xml" href="http://blog.javapia.co.kr/atom/discuss/62" thr:count="0"/>
  <category term="&#xAC1C;&#xBC1C;&#xD234;"/>
  <category term="Eclipse"/>
  <category term="&#xC720;&#xC800;&#xBA85;"/>
  <category term="&#xC774;&#xD074;&#xB9BD;&#xC2A4;"/>
  <category term="&#xD15C;&#xD50C;&#xB9BF;"/>
  <author>
   <name>김선수</name>
  </author>
  <id>http://blog.javapia.co.kr/62</id>
  <updated>2010-07-19T16:31:12+09:00</updated>
  <published>2010-07-19T16:31:12+09:00</published>
  <summary type="html"> Eclipse(이클립스) 사용시 Code Template(코드 템플릿)에서 유저명을 변수로 사용할 수 있다. &amp;nbsp; 예) /** &amp;nbsp;* @author ${user} &amp;nbsp;*/ 그런데 간혹 이 유저명이 내가 현재 원하는 유저명이 아닌 OS유저명이 적용되는 것을 볼 수 있다. &amp;nbsp; 이것을 변경하기 위해서는 이클립스가 설치된 경로의 설정파일에 다음의 한줄을 추가하자 &amp;nbsp; eclipse.ini -Duser.name=&amp;quot;사용하고자하는 유저명&amp;quot; &amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://blog.javapia.co.kr/62&quot;&gt;글 전체보기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</summary>
 </entry>
 <entry>
  <title type="html">JDBC와 DAO</title>
  <link rel="alternate" type="text/html" href="http://blog.javapia.co.kr/61"/>
  <link rel="replies" type="application/atom+xml" href="http://blog.javapia.co.kr/atom/discuss/61" thr:count="0"/>
  <category term="JDK"/>
  <category term="DAO"/>
  <category term="Java"/>
  <category term="JDBC"/>
  <author>
   <name>김선수</name>
  </author>
  <id>http://blog.javapia.co.kr/61</id>
  <updated>2010-07-12T19:44:29+09:00</updated>
  <published>2010-07-12T19:44:29+09:00</published>
  <summary type="html"> JDBC &amp;nbsp; &amp;nbsp;1. Java DataBase Connectivity &amp;nbsp; - 자바의 표준 DB접속 방법 &amp;nbsp; - DataBase와 독립적인 구현 &amp;nbsp; &amp;nbsp;2. JDBC Driver Type &amp;nbsp; - type1 : JDBC-ODBC 브리지(UserCode -&amp;gt; JDBC -&amp;gt; JDBC-ODBC -&amp;gt; ODBC -&amp;gt; DB) &amp;nbsp; - type2 : native API Driver (UserCode -&amp;gt; JDBC -&amp;gt; DB library(native) -&amp;gt; DB) &amp;nbsp; - type3 : network-protocol driver (UserCode -&amp;gt; JDBC -&amp;gt; DB Midleware -&amp;gt; DB) &amp;nbsp; - type4 : native protocol driver (UserCode -&amp;gt; JDBC -&amp;gt; DB) &amp;nbsp;&amp;nbsp; &amp;nbsp;3. JDBC Spec. &amp;nbsp; - 커넥션, SQL 질의 및 파라미터, 결과의 수신, &amp;nbsp; - 기본 매핑(SQL Type &amp;amp; Java Type), 메타데이터 제공, 트랜잭션, 로깅 등 &amp;nbsp;&amp;nbsp; &amp;nbsp;4. 커넥션 방법 &amp;nbsp; - DriverManager로 접속하는 방법 &amp;nbsp; &amp;nbsp; Driver 로딩 : Class.forName(&amp;quot;com.driver.class.name&amp;quot;); &amp;nbsp; &amp;nbsp; DriverManager로 커넥션 획득 : DriverManage.getConnection(&amp;quot;접속정보&amp;quot;); &amp;nbsp; &amp;nbsp; &amp;nbsp; - javax.sql.DataSource(JDBC 2.0) &amp;nbsp; &amp;nbsp; WAS start(DataSOurce Configuration) -&amp;gt; Referenceable -&amp;gt; JNDI &amp;nbsp; &amp;nbsp; Context.lookup(UserCode &amp;lt;-&amp;gt; JNDI &amp;lt;-&amp;gt; DataSources) &amp;nbsp; &amp;nbsp; DataSource.getConnection(UserCode &amp;lt;-&amp;gt; DataSource) &amp;nbsp; &amp;nbsp; &amp;nbsp; - PooledDataSource &amp;nbsp; &amp;nbsp; UserCode &amp;lt;-&amp;gt; Pooled Connection &amp;lt;-&amp;gt; ConnectionPool &amp;lt;-&amp;gt; PoolingDataSource &amp;nbsp; Data Access Layer &amp;nbsp; &amp;nbsp;1. DAO FrameWorks &amp;nbsp;&amp;nbsp; - JDBC Templates &amp;nbsp;&amp;nbsp; - SQL Mappers &amp;nbsp;&amp;nbsp; - OR Mappers &amp;nbsp;&amp;nbsp; &amp;nbsp;2. JDBC Templates &amp;nbsp;&amp;nbsp; 자주 사용하는 표준적인 DB접근, 질의 등을 템플릿 형태로 사용함 &amp;nbsp;&amp;nbsp; 장점 - 쉽다, 설정필요이 따로 필요 없다 &amp;nbsp;&amp;nbsp; 단점 - 코드안에 모든내용포함 된다, 코드가독성이 낮다, DB 의존적이다 &amp;nbsp;&amp;nbsp; &amp;nbsp;3. SQL Mappers &amp;nbsp;&amp;nbsp; 쿼리 등을 외부로 빼내고 쿼리에 대한 결과를 매핑해주는 기능으로 bean에 결과를 매핑한다. &amp;nbsp;&amp;nbsp; 장점 - 코드가 줄어듦, 배우는게 쉽다, 코드와 쿼리가 분리된다 &amp;nbsp;&amp;nbsp; 단점 - XML설정이 필요하다, DB에 의존적이다 &amp;nbsp;&amp;nbsp; &amp;nbsp;4. OR Mappers &amp;nbsp;&amp;nbsp; 테이블의 Row를 하나의 객체로 인식하고자 함 &amp;nbsp;&amp;nbsp; 설정을 통해서 테이블과 클래스, Row와 인스턴스를 연결하고 객체만을 사용 &amp;nbsp;&amp;nbsp; 장점 - 코드가 줄어듦, 직관적이다, 쿼리와 DB의존적이지 않다 &amp;nbsp;&amp;nbsp; 단점 - XML설정이 필요하다, 배우기 어렵다 &amp;nbsp;&amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://blog.javapia.co.kr/61&quot;&gt;글 전체보기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</summary>
 </entry>
 <entry>
  <title type="html">[MySQL 모니터링 및 엔진 최적화]InnoDB 스토리지 엔진 최적화</title>
  <link rel="alternate" type="text/html" href="http://blog.javapia.co.kr/60"/>
  <link rel="replies" type="application/atom+xml" href="http://blog.javapia.co.kr/atom/discuss/60" thr:count="0"/>
  <category term="MySQL"/>
  <category term="db"/>
  <category term="InnoDB"/>
  <category term="MySQL"/>
  <author>
   <name>김선수</name>
  </author>
  <id>http://blog.javapia.co.kr/60</id>
  <updated>2010-07-19T18:41:43+09:00</updated>
  <published>2010-07-09T15:30:42+09:00</published>
  <summary type="html"> InnoDB의 옵션의 개요 &amp;nbsp; &amp;nbsp; InnoDB의 메모리 관련 옵션 &amp;nbsp;- Innodb_buffer_pool_size &amp;nbsp; &amp;nbsp; 가장 중요한 옵션 &amp;nbsp; &amp;nbsp; 데이블의 데이터와 인덱스를 캐싱하기 위해서 사용 &amp;nbsp; &amp;nbsp; 사이즈가 클수록 성능이 향상됨 &amp;nbsp; &amp;nbsp; OS Cache보다 훨씬 효율적으로 메모리를 사용하며 Write성능에 큰 영향을 미침 &amp;nbsp; &amp;nbsp; 서버메모리 용량의 70~80%정도로 설정하는 것이 적당 &amp;nbsp; &amp;nbsp; 기본값은 8MB이며 반드시 재설정 필요 &amp;nbsp;- Innodb_additional_mem_pool &amp;nbsp; &amp;nbsp; DataDictionary(테이블 스키마 등)를 저장하기 위해서 사용. 필요한 경우 자동으로 증가 &amp;nbsp; InnoDB의 로그 관련 옵션 &amp;nbsp;- Innodb_log_file_size &amp;nbsp; &amp;nbsp; InnoDB redo로그 파일 크기 &amp;nbsp; &amp;nbsp; Write 성능에 매우 큰 영향을 미침 &amp;nbsp; &amp;nbsp; 설정 파일 크기에 따라 복구 시간이 증가될수 있어서 256M 사용권장 &amp;nbsp;- Innodb_log_files_in_group &amp;nbsp; &amp;nbsp; 로그 그룹안에 포함될 로그 파일 수 &amp;nbsp; &amp;nbsp; 기본적으로 2이며 3을 권장함 &amp;nbsp;- Innodb_log_buffer_size &amp;nbsp; &amp;nbsp; 매우 큰 BLOB를 사용하지 않는한 2-8M의 기본값 사용 &amp;nbsp; InnoDB log flush 주기 조절 &amp;nbsp;- Innodb_flush_log_at_trx_commit(기본값은1) &amp;nbsp; &amp;nbsp; 0으로 설정하면 1초에 한번씩 디스크에 기록하고 씽크 - MySQL,시스템다운시 1시간 데이터 누락가능성 있음 &amp;nbsp; &amp;nbsp; 1로 설정하면 commit시 디스크에 기록하고 씽크 - 어떤 다운시에도 데이터 유지 &amp;nbsp; &amp;nbsp; 2로 설정하면 commit를 할때마다 디스크에 기록하고 싱크는 1초에 한번만함 - 시스템 다운시 1초간 데이터 누락 &amp;nbsp; InnoDB의 로그 사이즈 재조정 &amp;nbsp;- 일반적인 옵션처럼 수치만 변경해서 조절할 수 없음 &amp;nbsp; &amp;nbsp; MySQL종료 &amp;nbsp; &amp;nbsp; Data 디렉터리 안의 ib_log* 파일 삭제 &amp;nbsp; &amp;nbsp; 설정의 innodgb_log_file_size 수정 &amp;nbsp; &amp;nbsp; MySQL 재시작 &amp;nbsp; InnoDB의 flush 방법 설정 &amp;nbsp;- InnoDB가 OS의 FileSystem과 연동하는 방식 설정 &amp;nbsp;- 윈도우에서는 unbufferedIO가 늘 사용됨 &amp;nbsp;- UNIX에서는 fsync(), O_SYNC/O_DSYNC를 파일 flush를 위해 사용가능 &amp;nbsp;- 리눅스에서는 O_DIRECT를 사용하여 unbufferedIO를 사용할 수 있다 (double buffering을 막아줌) &amp;nbsp; InnoDB의 테이블 별 테이블 스페이스 &amp;nbsp;- Innodb_file_per_table 옵션이 설정 가능 &amp;nbsp;- 테이블 별로 테이블스페이스를 설정함 &amp;nbsp;- 테이블 별로 설정해도 공통 테이블스페이스는 필요함 &amp;nbsp;- 분리시 데이터를 여러개의 디스크로 분산 가능 &amp;nbsp;- 테이블을 drop하면 디스크의 공간이 반환됨 &amp;nbsp;- 테이블이 많을 경우 MySQL기동/종료시 속도가 빨라짐 &amp;nbsp; 그 밖의&amp;nbsp; InnoDB의 옵션들 &amp;nbsp;- Innodb_thread_concurrency : 기본값은 8, 동시 사용 쓰레드수로 변경하지 않음 &amp;nbsp;- FOREIGN_KEY_CHECKS/UNIQUE_CHECKS &amp;nbsp; &amp;nbsp; 데이터를 입력시 Foreign키와 Unique를 검사하지 않음 &amp;nbsp; &amp;nbsp; 대용량 데이터 입력시 사용함(AUTOCOMMIT을 0으로 하는것도 추천) &amp;nbsp;- innodb_fast_shutdown &amp;nbsp; &amp;nbsp; 종료시 내무 메모리 구조 정리 작업과 버퍼 정리 작업을 건너뜀. 무결성에는 영향없음 &amp;nbsp;&amp;nbsp; &amp;nbsp; ㅇㄹㅇ &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://blog.javapia.co.kr/60&quot;&gt;글 전체보기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</summary>
 </entry>
</feed>
