ÀÚÄ«¸£Å¸ DBCP API¸¦ ÀÌ¿ëÇÑ Ä¿³Ø¼Ç Ç® »ç¿ë
Ä¿³Ø¼Ç Ç®°ú ÀÚÄ«¸£Å¸ DBCP API
DBCP API´Â Ä¿³Ø¼Ç Ç® ±â´ÉÀ» Á¦°øÇÏ´Â API·Î¼ ÀÚÄ«¸£Å¸ÀÇ ¶Ç ´Ù¸¥ ÇÁ·ÎÁ§Æ®ÀÎ Pool API¿¡ ±â¹ÝÇÏ°í ÀÖ´Ù. DBCP API´Â »ç¿ë¹æ¹ýÀÌ ºñ±³Àû ½¬¿ì¸ç, ÆÄÀÏÀ» ÅëÇؼ Ä¿³Ø¼Ç Ç®À» ¼³Á¤ÇÒ ¼ö ÀÖ°í ¶ÇÇÑ ÇÁ·Î±×·¥¿¡¼ Á÷Á¢ Ä¿³Ø¼Ç Ç®À» ¼³Á¤ÇÒ ¼ö Àֱ⠶§¹®¿¡ Ä¿³Ø¼Ç Ç®À» »ç¿ëÇÏ·Á´Â °³¹ßÀÚ¿¡°Ô ¸Å¿ì À¯¿ëÇÑ APIÀÌ´Ù.
Ä¿³Ø¼Ç Ç®À̶õ?
Ä¿³Ø¼Ç Ç®¿¡ ´ëÇÑ °³³äÀÌ ¾ø´Â »ç¶÷À» À§ÇØ DBCP API¸¦ ÀÌ¿ëÇÑ Ä¿³Ø¼Ç Ç®¿¡ ´ëÇؼ »ìÆ캸±â Àü¿¡ °£´ÜÇÏ°Ô Ä¿³Ø¼Ç Ç®ÀÌ ¹«¾ùÀÎÁö¿¡ ´ëÇؼ »ìÆ캸µµ·Ï ÇÏÀÚ. Ä¿³Ø¼Ç Ç® ±â¹ýÀ̶õ µ¥ÀÌÅͺ£À̽º¿Í ¿¬°áµÈ Ä¿³Ø¼ÇÀ» ¹Ì¸® ¸¸µé¾î¼ Ç®(pool)À̶õ ÀúÀå¼Ò¿¡ ÀúÀåÇØ µÎ°í ÀÖ´Ù°¡ ÇÊ¿äÇÒ ¶§¿¡ Ä¿³Ø¼ÇÀ» Ç®¿¡¼ °¡Á®´Ù ¾²°í ´Ù½Ã Ç®¿¡ ¹ÝȯÇÏ´Â ±â¹ýÀ» ÀǹÌÇÑ´Ù
Ä¿³Ø¼Ç Ç® ±â¹ý¿¡¼´Â À§ ±×¸²°ú °°ÀÌ Ç® ¼Ó¿¡ µ¥ÀÌÅͺ£À̽º¿Í ¿¬°áµÈ Ä¿³Ø¼ÇÀ» ¹Ì¸®»ý¼ºÇسõ°í Àִ´Ù. µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀÌ ÇÊ¿äÇÒ °æ¿ì, Ä¿³Ø¼ÇÀ» »õ·Î »ý¼ºÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó Ç® ¼Ó¿¡ ¹Ì¸® »ý¼ºµÇ¾î ÀÖ´Â Ä¿³Ø¼ÇÀ» °¡Á®´Ù°¡ »ç¿ëÇÏ°Ô µÈ´Ù. ´Ù »ç¿ëÇÑ Ä¿³Ø¼ÇÀº ´Ù½Ã Ç®¿¡ ¹ÝȯÇÑ´Ù. Ç®¿¡ ¹ÝȯµÈ Ä¿³Ø¼ÇÀº ´ÙÀ½¿¡ ´Ù½Ã »ç¿ëµÈ´Ù.
Ä¿³Ø¼Ç Ç®ÀÇ Æ¯Â¡Àº ´ÙÀ½°ú °°´Ù.
- Ç® ¼Ó¿¡ ¹Ì¸® Ä¿³Ø¼ÇÀÌ »ý¼ºµÇ¾î Àֱ⠶§¹®¿¡ Ä¿³Ø¼ÇÀ» »ý¼ºÇÏ´Â µ¥ µå´Â ¿¬°á ½Ã°£ÀÌ ¼ÒºñµÇÁö ¾Ê´Â´Ù.
- Ä¿³Ø¼ÇÀ» °è¼ÓÇؼ Àç»ç¿ëÇϱ⠶§¹®¿¡ »ý¼ºµÇ´Â Ä¿³Ø¼Ç ¼ö°¡ ¸¹Áö ¾Ê´Ù.
Ä¿³Ø¼ÇÀ» »ý¼ºÇÏ°í ´Ý´Â µ¥ ÇÊ¿äÇÑ ½Ã°£ÀÌ ¼Ò¸ðµÇÁö ¾Ê±â ¶§¹®¿¡ ±× ¸¸Å ¾îÇø®ÄÉÀ̼ÇÀÇ ½ÇÇà ¼Óµµ°¡ »¡¶óÁö¸ç, ¶ÇÇÑ Çѹø¿¡ »ý¼ºµÉ ¼ö ÀÖ´Â Ä¿³Ø¼Ç ¼ö¸¦ Á¦¾îÇϱ⠶§¹®¿¡ µ¿½Ã Á¢¼ÓÀÚ¼ö°¡ ¸ô·Áµµ À¥ ¾îÇø®ÄÉÀ̼ÇÀÌ ½±°Ô ´Ù¿îµÇÁö ¾Ê´Â´Ù.
Ä¿³Ø¼Ç Ç®À» »ç¿ëÇϸé ÀüüÀûÀÎ À¥ ¾îÇø®ÄÉÀ̼ÇÀÇ ¼º´É ¹× 󸮷®ÀÌ ³ô¾ÆÁö±â ¶§¹®¿¡ ¸¹Àº À¥ ¾îÇø®ÄÉÀ̼ǿ¡¼ Ä¿³Ø¼Ç Ç®À» ±âº»À¸·Î »ç¿ëÇÏ°í ÀÖ´Ù.
DBCP APIÀÇ »ç¿ë¹æ¹ý
ÀÚÄ«¸£Å¸ ÇÁ·ÎÁ§Æ®ÀÇ DBCP API¸¦ »ç¿ëÇÒ ¶§¿¡´Â ´ÙÀ½°ú °°Àº °úÁ¤À» °ÅÄ¡¸é µÈ´Ù.
- DBCP °ü·Ã Jar ÆÄÀÏ ¹× JDBC µå¶óÀ̹ö Jar ÆÄÀÏ ¼³Ä¡Çϱâ
- Ä¿³Ø¼Ç Ç® °ü·Ã ¼³Á¤ ÆÄÀÏ ÃʱâÈÇϱâ
- Ä¿³Ø¼Ç Ç® °ü·Ã µå¶óÀ̹ö ·ÎµùÇϱâ
- Ä¿³Ø¼Ç Ç®·ÎºÎÅÍ Ä¿³Ø¼Ç »ç¿ëÇϱâ
ÀÌ ³× °¡Áö ÀýÂ÷¿¡ ´ëÇؼ Â÷·Ê´ë·Î »ìÆ캸µµ·Ï ÇÏÀÚ.
ÇÊ¿äÇÑ Jar ÆÄÀÏ º¹»ç
DBCP API¸¦ »ç¿ëÇϱâ À§Çؼ´Â ´ÙÀ½°ú °°Àº ¶óÀ̺귯¸®°¡ ÇÊ¿äÇÏ´Ù.
- DBCP API °ü·Ã Jar ÆÄÀÏ
- DBCP API°¡ »ç¿ëÇÏ´Â ÀÚÄ«¸£Å¸ Pool APIÀÇ Jar ÆÄÀÏ
- Pool API°¡ »ç¿ëÇÏ´Â ÀÚÄ«¸£Å¸ Collection APIÀÇ Jar ÆÄÀÏ
ÀÌµé ¶óÀ̺귯¸®ÀÇ ÃֽŠ¹öÀüÀº http://jakarta.apache.org/site/binindex.cgi ¿¡¼ ´Ù¿î·Îµå ¹ÞÀ» ¼ö ÀÖÀ¸¸ç, ÀÌ ±Û¿¡¼´Â ´ÙÀ½ ¹öÀüÀ» »ç¿ëÇÏ¿© ¿¹Á¦¸¦ ÀÛ¼ºÇÏ¿´´Ù.
- DBCP 1.2.1 - commons-dbcp-1.2.1.zip
- Pool 1.2 - commons-pool-1.2.zip
- Collection 3.1 - commons-collections-3.1.zip
À̵é ÆÄÀÏÀÇ ¾ÐÃàÀ» Ç®¸é ´ÙÀ½°ú °°Àº Jar ÆÄÀϵéÀ» ¹ß°ßÇÒ ¼ö Àִµ¥, À̵é Jar ÆÄÀϵéÀ» »ç¿ëÇÏ¸é µÈ´Ù.
- commons-dbcp-1.2.1.jar
- commons-pool-1.2.jar, commons-collections-3.1.jar
¿¹Á¦·Î Á¦°øµÇ´Â ÆÄÀÏ¿¡´Â pool\WEB-INF\lib Æú´õ¿¡´Â ÀÌ¹Ì À̵é Jar ÆÄÀϵéÀÌ Æ÷ÇԵǾî ÀÖÀ¸¹Ç·Î º°µµ·Î º¹»çÇÏÁö ¾Ê´õ¶óµµ DBCP¸¦ »ç¿ëÇÏ´Â º» ÀåÀÇ ¿¹Á¦µéÀ» ½ÇÇàÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
Ä¿³Ø¼Ç Ç® ¼³Á¤ ÆÄÀÏ ÀÛ¼ºÇϱâ
DBCP¸¦ »ç¿ëÇÏ´Â ¹æ¹ý¿¡´Â ¼Ò½º ÄÚµå »ó¿¡¼ Ä¿³Ø¼Ç Ç®À» ¼³Á¤ÇÏ´Â ¹æ¹ý°ú ¼³Á¤ ÆÄÀÏÀ» ÅëÇؼ Ä¿³Ø¼Ç Ç®À» ¼³Á¤ÇÏ´Â ¹æ¹ý µÎ°¡Áö Á¸ÀçÇϴµ¥ º» Àå¿¡¼´Â ¼³Á¤ ÆÄÀÏÀ» ÀÌ¿ëÇÑ Ä¿³Ø¼Ç Ç® ¼³Á¤ ¹æ¹ý¿¡ ´ëÇؼ »ìÆ캸µµ·Ï ÇÏ°Ú´Ù.
DBCP Pool API¿¡¼ »ç¿ëµÇ´Â Ä¿³Ø¼Ç Ç® ¼³Á¤ ÆÄÀÏÀÇ ±âº» °ñ°ÝÀº ¾Æ·¡ ÄÚµå¿Í °°´Ù.
ÆÄÀϸí: pool\WEB-INF\classes\pool1.jocl
<object class="org.apache.commons.dbcp.PoolableConnectionFactory"
xmlns="http://apache.org/xml/xmlns/jakarta/commons/jocl">
<object class="org.apache.commons.dbcp.DriverManagerConnectionFactory">
<string value="jdbc:mysql://localhost:3306/.." />
<string value="jspexam" />
<string value="jspex" />
</object>
<object class="org.apache.commons.pool.impl.GenericObjectPool">
<object class="org.apache.commons.pool.PoolableObjectFactory" null="true" />
</object>
<object class="org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory"
null="true" />
<string null="true" />
<boolean value="false" />
<boolean value="true" />
</object>
À§ Äڵ忡¼ ³ª¸ÓÁö ºÎºÐÀº ±×´ë·Î ÀÔ·ÂÇÏ°í ´ÙÀ½ ºÎºÐ¸¸ ¾Ë¸Â°Ô º¯°æÇÏ¸é µÈ´Ù.
<string value="jdbc:mysql://localhost:3306/..." />
<string value="jspexam" />
<string value="jspex" />
</object>
À§ Äڵ忡´Â ¼¼ °³ÀÇ <string> űװ¡ »ç¿ëµÇ´Âµ¥, À̵é ű״ °¢°¢ ¼ø¼´ë·Î JDBC URL, µ¥ÀÌÅͺ£À̽º »ç¿ëÀÚ °èÁ¤, ¾ÏÈ£¸¦ ³ªÅ¸³½´Ù.
¼³Á¤ ÆÄÀÏÀÇ À§Ä¡
DBCP API´Â Ŭ·¡½ºÆнº·ÎºÎÅÍ ¼³Á¤ ÆÄÀÏÀ» Àоî¿Â´Ù. µû¶ó¼ ¾Õ¼ ÀÛ¼ºÇÑ Ä¿³Ø¼Ç Ç® ¼³Á¤ ÆÄÀÏÀº Ŭ·¡½ºÆнº¿¡ À§Ä¡ÇØ ÀÖ¾î¾ß ÇÑ´Ù. À¥ ¾îÇø®ÄÉÀ̼ǿ¡¼ DBCP API¿Í °ü·ÃµÈ ¼³Á¤ ÆÄÀÏÀÇ À§Ä¡·Î °¡Àå ÁÁÀº °÷Àº WEB-INF\classes Æú´õÀÌ´Ù. º» ±ÛÀÇ ¿¹Á¦¿¡¼ »ç¿ëÇÏ´Â Ä¿³Ø¼Ç Ç® ¼³Á¤ ÆÄÀÏÀº ¸ðµÎ WEB-INF\classes Æú´õ¿¡ À§Ä¡½ÃÄ×´Ù.
Ä¿³Ø¼Ç Ç® ÃʱâÈ
DBCP API¸¦ ÅëÇؼ Ä¿³Ø¼Ç Ç®À» »ç¿ëÇϱâ À§Çؼ´Â Ä¿³Ø¼Ç Ç®°ú °ü·ÃµÈ JDBC µå¶óÀ̹ö¸¦ ·ÎµùÇØÁÖ¾î¾ß ÇÑ´Ù. DBCP API¸¦ »ç¿ëÇÒ ¶§¿¡ ·ÎµùÇØÁÖ¾î¾ß ÇÒ JDBC µå¶óÀ̹ö´Â ´ÙÀ½°ú °°´Ù.
- org.apache.commons.dbcp.PoolingDriver - DBCP APIÀÇ JDBC µå¶óÀ̹ö
- DBMS¿¡ ¿¬°áÇÒ ¶§ »ç¿ëµÉ JDBC µå¶óÀ̹ö
À¥ ¾îÇø®ÄÉÀÌ¼Ç ½ÃÀÛÇÒ ¶§ À§¿¡¼ ¾ð±ÞÇÑ µÎ °¡Áö ÇüÅÂÀÇ JDBC µå¶óÀ̹ö¸¦ ·ÎµùÇϵµ·Ï Çϸé Æí¸®ÇÒ °ÍÀÌ´Ù. À¥ ¾îÇø®ÄÉÀ̼ÇÀÌ ½ÃÀÛÇÒ ¶§ ÀÚµ¿À¸·Î ½ÃÀ۵Ǵ JDBC µå¶óÀ̹ö¸¦ ·ÎµùÇϵµ·Ï ±¸ÇöÇÑ ¼ºí¸´ Ŭ·¡½º´Â ´ÙÀ½ ÄÚµå¿Í °°´Ù.
ÆÄÀϸí: pool\WEB-INF\src\madvirus.jdbcdriver\DBCPInit.java
package madvirus.jdbcdriver;
import javax.servlet.http.HttpServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import java.util.StringTokenizer;
public class DBCPInit extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
try {
String drivers = config.getInitParameter("jdbcdriver");
StringTokenizer st = new StringTokenizer(drivers, ",");
while (st.hasMoreTokens()) {
String jdbcDriver = st.nextToken();
Class.forName(jdbcDriver);
}
Class.forName("org.apache.commons.dbcp.PoolingDriver");
System.setProperty("org.xml.sax.drvier",
"org.apache.crimson.parser.XMLReaderImpl");
} catch(Exception ex) {
throw new ServletException(ex);
}
}
}
DBCPInit ¼ºí¸´Àº "jdbcdriver" ÃʱâÈ ÆĶó¹ÌÅͷκÎÅÍ ·ÎµùÇÒ JDBC µå¶óÀ̹ö¸¦ ÀÔ·Â¹Þ¾Æ JDBC µå¶óÀ̹ö¸¦ Â÷·Ê´ë·Î ·ÎµùÇÑ´Ù. ±×·± ÈÄ, DBCP APIÀÇ JDBC µå¶óÀ̹öÀÎ PoolingDriver À» ·ÎµùÇÑ´Ù. ¸¶Áö¸·À¸·Î ¼³Á¤ ÆÄÀÏÀ» ºÐ¼®ÇÒ ¶§ »ç¿ëÇÒ XML Æļ¸¦ ÁöÁ¤ÇÑ´Ù. À§ ÄÚµå´Â Sun »ç¿¡¼ ¹èÆ÷ÇÑ JDK 1.4¸¦ ±âÁØÀ¸·Î XML Æļ¸¦ ÁöÁ¤ÇÏ¿´´Âµ¥, ¸¸¾à ´Ù¸¥ XML Æļ¸¦ »ç¿ëÇÑ´Ù¸é ¾Ë¸Â°Ô º¯°æÇØÁÖ¾î¾ß ÇÑ´Ù.
WEB-INF\web.xml ÆÄÀÏ¿¡ DBCPInit ¼ºí¸´ Ŭ·¡½º¿¡ ´ëÇÑ ¼³Á¤ Á¤º¸¸¦ Ãß°¡ÇÔÀ¸·Î½á À¥ ¾îÇø®ÄÉÀ̼ÇÀÌ ½ÃÀÛµÉ ¶§ DBCPInit ¼ºí¸´ Ŭ·¡½º°¡ ½ÃÀÛµÉ ¼ö ÀÖµµ·Ï ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é, ¾Æ·¡¿Í °°Àº Äڵ带 web.xml ÆÄÀÏ¿¡ Ãß°¡ÇØÁÖ¸é µÈ´Ù.
<servlet-name>DBCPInit</servlet-name>
<servlet-class>madvirus.jdbcdriver.DBCPInit</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>jdbcdriver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
</servlet>
À§¿Í °°ÀÌ Äڵ带 web.xml ÆÄÀÏ¿¡ Ãß°¡ÇØÁÖ¸é À¥ ¾îÇø®ÄÉÀ̼ÇÀÌ ½ÃÀÛÇÒ ¶§ DBCPInit ¼ºí¸´ Ŭ·¡½º°¡ ÀÚµ¿À¸·Î ½ÃÀ۵ǰí init() ¸Þ¼Òµå°¡ È£ÃâµÈ´Ù.
Ä¿³Ø¼Ç Ç®·ÎºÎÅÍ Ä¿³Ø¼Ç »ç¿ëÇϱâ
Ä¿³Ø¼Ç Ç®À» À§ÇÑ JDBC µå¶óÀ̹ö ¹× DBMS¿¡ ¿¬°áÇÒ ¶§ »ç¿ëÇÒ JDBC µå¶óÀ̹ö¸¦ ·ÎµùÇϸé Ä¿³Ø¼Ç Ç®·ÎºÎÅÍ Ä¿³Ø¼ÇÀ» °¡Á®¿Í »ç¿ëÇÒ ¼ö ÀÖ´Ù. Ä¿³Ø¼Ç Ç®·ÎºÎÅÍ Ä¿³Ø¼ÇÀ» °¡Á®¿À´Â ÄÚµå´Â º°¹Ý ´Ù¸£Áö ¾ÊÀ¸¸ç, ´ÙÀ½°ú °°Àº ÇüÅÂÀÇ Äڵ带 »ç¿ëÇÏ¸é µÈ´Ù.
....
try {
String jdbcDriver = "jdbc:apache:commons:dbcp:/pool1";
conn = DriverManager.getConnection(jdbcDriver);
...
} finally {
...
if (conn != null) try { conn.close(); } catch(SQLException ex) {}
}
À§ Äڵ带 º¸¸é DBCP API ±â¹ÝÀÇ Ä¿³Ø¼Ç Ç®À» »ç¿ëÇÑ´Ù°í Çؼ Ưº°È÷ Äڵ尡 ´Þ¶óÁö´Â ºÎºÐÀÌ ¾ø´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÏ¹Ý °æ¿ì¿Í ¸¶Âù°¡Áö·Î DriverManager.getConnection() ¸Þ¼Òµå¸¦ »ç¿ëÇؼ Ä¿³Ø¼ÇÀ» ±¸ÇØ¿À°í, Ä¿³Ø¼ÇÀ» ´Ù »ç¿ëÇϸé close() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© »ç¿ëÇÑ Ä¿³Ø¼ÇÀ» ´Ý´Â´Ù. Â÷ÀÌÁ¡À̶ó¸é JDBC URLÀÌ ´ÙÀ½°ú °°Àº ÇüŸ¦ ¶è´Ù´Â Á¡ÀÌ´Ù.
[Ç®À̸§]Àº ¿©·¯ °³ÀÇ Ä¿³Ø¼Ç Ç® Áß¿¡¼ »ç¿ëÇÒ Ä¿³Ø¼Ç Ç®ÀÇ À̸§À» ³ªÅ¸³»´Â °ÍÀ¸·Î¼ Ä¿³Ø¼Ç Ç® ¼³Á¤ ÆÄÀÏ¿¡¼ È®ÀåÀÚ¸¦ Á¦¿ÜÇÑ ³ª¸ÓÁö À̸§À» [Ç®À̸§]À¸·Î »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, ¾Õ¼ ÀÛ¼ºÇß¾ú´ø pool1.jocl ÆÄÀÏÀÌ ¼³Á¤ÇÑ Ä¿³Ø¼Ç Ç®À» »ç¿ëÇÏ°í ½Í´Ù¸é ´ÙÀ½°ú °°Àº JDBC URLÀ» »ç¿ëÇÑ´Ù.
½ÇÁ¦·Î Ä¿³Ø¼Ç Ç®À» »ç¿ëÇÏ´Â ¿ÏÀüÇÑ ¿¹Á¦´Â ´ÙÀ½ ÄÚµå¿Í °°´Ù. (¾Æ·¡ Äڵ带 ¿©·¯ºÐÀÇ È¯°æ¿¡ ¾Ë¸Â°Ô º¯Çü½ÃÄѼ ½ÇÇàÇϱ⠹ٶõ´Ù.)
ÆÄÀϸí: pool\usePool1.jsp
<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.Statement" %>
<%@ page import = "java.sql.ResultSet" %>
<%@ page import = "java.sql.SQLException" %>
<html>
<head><title>ȸ¿ø ¸ñ·Ï</title></head>
<body>
MEMBMER Å×À̺íÀÇ ³»¿ë
<table width="100%" border="1">
<tr>
<td>À̸§</td><td>¾ÆÀ̵ð</td><td>À̸ÞÀÏ</td>
</tr>
<%
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
String jdbcDriver = "jdbc:apache:commons:dbcp:/pool1";
String query = "select * from MEMBER order by MEMBERID";
conn = DriverManager.getConnection(jdbcDriver);
stmt = conn.createStatement();
rs = stmt.executeQuery(query);
while(rs.next()) {
%>
<tr>
<td><%= rs.getString("NAME") %></td>
<td><%= rs.getString("MEMBERID") %></td>
<td><%= rs.getString("EMAIL") %></td>
</tr>
<%
}
} finally {
if (rs != null) try { rs.close(); } catch(SQLException ex) {}
if (stmt != null) try { stmt.close(); } catch(SQLException ex) {}
if (conn != null) try { conn.close(); } catch(SQLException ex) {}
}
%>
</table>
</body>
</html>
À§ Äڵ忡¼ Ä¿³Ø¼Ç Ç®¿¡¼ ±¸ÇÑ ConnectionÀÇ close() ¸Þ¼Òµå¸¦ È£ÃâÇϸé, Ä¿³Ø¼ÇÀÌ ´ÝÈ÷´Â °ÍÀÌ ¾Æ´Ï¶ó Ä¿³Ø¼Ç Ç®·Î ¹ÝȯµÈ´Ù. ÀÌ·¸°Ô Ä¿³Ø¼Ç Ç®¿¡ Ä¿³Ø¼ÇÀ» ¹ÝȯÇÏ´Â ¸Þ¼Òµå¸¦ close()·Î ÁöÁ¤ÇÑ ÀÌÀ¯´Â ±âÁ¸ÀÇ Äڵ带 ÃÖ¼ÒÇÑÀ¸·Î º¯°æÇÏ´Â ¹üÀ§ ³»¿¡¼ Ä¿³Ø¼Ç Ç®À» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§ÇÔÀÌ´Ù. ¹°·Ð, JDBC ÇÁ·Î±×·¡¹ÖÀÇ ÄÚµù ÇüŸ¦ µ¿ÀÏÇÏ°Ô À¯ÁöÇϱâ À§ÇÑ °Íµµ close() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯ÀÌ´Ù.
Ä¿³Ø¼Ç Ç® ¼Ó¼º ÁöÁ¤Çϱâ
¾Õ¿¡¼ »ìÆ캻 Ä¿³Ø¼Ç Ç® ¼³Á¤ ÆÄÀÏÀÎ pool1.joclÀº Ä¿³Ø¼Ç Ç®°ú °ü·ÃµÈ ¼Ó¼ºÀ» ÁöÁ¤ÇÏÁö ¾Ê°í ÀÖ´Ù. DBCPÀÇ Ä¿³Ø¼Ç Ç®Àº ÃÖ´ë Ä¿³Ø¼Ç °³¼ö, ÃÖ¼Ò À¯ÈÞ Ä¿³Ø¼Ç °³¼ö, ÃÖ´ë À¯ÈÞ Ä¿³Ø¼Ç °³¼ö, À¯ÈÞ Ä¿³Ø¼Ç °Ë»ç ¿©ºÎ µîÀÇ ¼Ó¼ºÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. pool1.joclÀ» º¸¸é ´ÙÀ½°ú °°Àº Äڵ尡 Àִµ¥,
<object class="org.apache.commons.pool.PoolableObjectFactory" null="true" />
</object>
ÀÌ Äڵ忡 Ä¿³Ø¼Ç Ç®°ú °ü·ÃµÈ ¼Ó¼º Á¤º¸¸¦ Ãß°¡ÇÏ¸é µÈ´Ù. ¿¹¸¦ µé¸é, ¾Æ·¡ ÄÚµå¿Í °°ÀÌ Ä¿³Ø¼Ç Ç® ¼Ó¼º Á¤º¸¸¦ Ãß°¡ÇÏ¸é µÈ´Ù.
ÆÄÀϸí: pool\WEB-INF\classes\pool2.jocl
<object class="org.apache.commons.dbcp.PoolableConnectionFactory"
xmlns="http://apache.org/xml/xmlns/jakarta/commons/jocl">
<object class="org.apache.commons.dbcp.DriverManagerConnectionFactory">
<string value="jdbc:mysql://localhost:3306/chap11?..." />
<string value="jspexam" />
<string value="jspex" />
</object>
<object class="org.apache.commons.pool.impl.GenericObjectPool">
<object class="org.apache.commons.pool.PoolableObjectFactory" null="true" />
<int value="10" /> <!-- maxActive -->
<byte value="1" /> <!-- whenExhaustedAction -->
<long value="10000" /> <!-- maxWait -->
<int value="10" /> <!-- maxIdle -->
<int value="3" /> <!-- minIdle -->
<boolean value="true" /> <!-- testOnBorrow -->
<boolean value="true" /> <!-- testOnReturn -->
<long value="600000" /> <!-- timeBetweenEvctionRunsMillis -->
<int value="5" /> <!-- numTestsPerEvictionRun -->
<long value="3600000" /> <!-- minEvictableIdleTimeMillis -->
<boolean value="true" /> <!-- testWhileIdle -->
</object>
<object class="org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory"
null="true" />
<string null="true" />
<boolean value="false" />
<boolean value="true" />
</object>
±½°Ô Ç¥½ÃÇÑ ºÎºÐÀÌ Ä¿³Ø¼Ç Ç®ÀÇ ¼Ó¼º°ú °ü·ÃµÈ ºÎºÐÀε¥, °¢ ¼Ó¼ºÀÇ °ªÀÌ ¹«¾ùÀ» ÀǹÌÇÏ´Â Áö ¿ìÃø¿¡ ÁÖ¼®À¸·Î Ç¥½ÃÇÏ¿´´Ù. °¢ ¼Ó¼ºÀÌ ÀǹÌÇÏ´Â °ÍÀº ´ÙÀ½Ç¥¿Í °°´Ù.
¼Ó¼º | ¼³¸í |
maxActive | Ä¿³Ø¼Ç Ç®ÀÌ Á¦°øÇÒ ÃÖ´ë Ä¿³Ø¼Ç °³¼ö |
whenExhaustedAction | Ä¿³Ø¼Ç Ç®¿¡¼ °¡Á®¿Ã ¼ö ÀÖ´Â Ä¿³Ø¼ÇÀÌ ¾øÀ» ¶§ ¾î¶»°Ô µ¿ÀÛÇÒÁö¸¦ ÁöÁ¤ÇÑ´Ù. 1ÀÏ °æ¿ì maxWait ¼Ó¼º¿¡¼ ÁöÁ¤ÇÑ ½Ã°£¸¸Å Ä¿³Ø¼ÇÀ» ±¸ÇÒ ¶§ ±îÁö ±â´Ù¸®¸ç, 0ÀÏ °æ¿ì ¿¡·¯¸¦ ¹ß»ý½ÃŲ´Ù. 2ÀÏ °æ¿ì¿¡´Â ÀϽÃÀûÀ¸·Î Ä¿³Ø¼ÇÀ» »ý¼ºÇؼ »ç¿ëÇÑ´Ù. |
maxWait | whenExhaustedAction ¼Ó¼ºÀÇ °ªÀÌ 1ÀÏ ¶§ »ç¿ëµÇ´Â ´ë±â ½Ã°£. ´ÜÀ§´Â 1/1000ÃÊÀ̸ç, 0 º¸´Ù ÀÛÀ» °æ¿ì ¹«ÇÑÈ÷ ´ë±âÇÑ´Ù. |
maxIdle | »ç¿ëµÇÁö ¾Ê°í Ç®¿¡ ÀúÀåµÉ ¼ö ÀÖ´Â ÃÖ´ë Ä¿³Ø¼Ç °³¼ö. À½¼öÀÏ °æ¿ì Á¦ÇÑÀÌ ¾ø´Ù. |
minIdle | »ç¿ëµÇÁö ¾Ê°í Ç®¿¡ ÀúÀåµÉ ¼ö ÀÖ´Â ÃÖ¼Ò Ä¿³Ø¼Ç °³¼ö. |
testOnBorrow | trueÀÏ °æ¿ì Ä¿³Ø¼Ç Ç®¿¡¼ Ä¿³Ø¼ÇÀ» °¡Á®¿Ã ¶§ Ä¿³Ø¼ÇÀÌ À¯È¿ÇÑÁöÀÇ ¿©ºÎ¸¦ °Ë»çÇÑ´Ù. |
testOnReturn | trueÀÏ °æ¿ì Ä¿³Ø¼Ç Ç®¿¡ Ä¿³Ø¼ÇÀ» ¹ÝȯÇÒ ¶§ Ä¿³Ø¼ÇÀÌ À¯È¿ÇÑÁöÀÇ ¿©ºÎ¸¦ °Ë»çÇÑ´Ù. |
timeBetweenEvctionRunsMillis | »ç¿ëµÇÁö ¾ÊÀº Ä¿³Ø¼ÇÀ» ÃßÃâÇÏ´Â ¾²·¹µåÀÇ ½ÇÇà Áֱ⸦ ÁöÁ¤ÇÑ´Ù. ¾ç¼ö°¡ ¾Æ´Ò °æ¿ì ½ÇÇàµÇÁö ¾Ê´Â´Ù. ´ÜÀ§´Â 1/1000 ÃÊÀÌ´Ù. |
numTestsPerEvictionRun | »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀ» ¸î °³ °Ë»çÇÒÁö ÁöÁ¤ÇÑ´Ù. |
minEvictableIdleTimeMillis | »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀ» ÃßÃâÇÒ ¶§ ÀÌ ¼Ó¼º¿¡¼ ÁöÁ¤ÇÑ ½Ã°£ ÀÌ»ó ºñÈ°¼ºÈ »óÅÂÀÎ Ä¿³Ø¼Ç¸¸ ÃßÃâÇÑ´Ù. ¾ç¼ö°¡ ¾Æ´Ñ °æ¿ì ºñÈ°¼ºÈµÈ ½Ã°£À¸·Î´Â Ç®¿¡¼ Á¦°ÅµÇÁö ¾Ê´Â´Ù. ½Ã°£ ´ÜÀ§´Â 1/1000ÃÊÀÌ´Ù. |
testWhileIdle | trueÀÏ °æ¿ì ºñÈ°¼ºÈ Ä¿³Ø¼ÇÀ» ÃßÃâÇÒ ¶§ Ä¿³Ø¼ÇÀÌ À¯È¿ÇÑÁöÀÇ ¿©ºÎ¸¦ °Ë»çÇؼ À¯È¿ÇÏÁö ¾ÊÀº Ä¿³Ø¼ÇÀº Ç®¿¡¼ Á¦°ÅÇÑ´Ù. |
¸î¸î ¼Ó¼ºÀº ¼º´É¿¡ Áß¿äÇÑ ¿µÇâÀ» ¹ÌÄ¡±â ¶§¹®¿¡ À¥ ¾îÇø®ÄÉÀ̼ÇÀÇ »ç¿ë·®¿¡ µû¶ó¼ ¾Ë¸Â°Ô ÁöÁ¤ÇØÁÖ¾î¾ß Çϴµ¥, ´ÙÀ½°ú °°ÀÌ °í·ÁÇؼ °¢ ¼Ó¼ºÀÇ °ªÀ» ÁöÁ¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù.
- maxActive - »çÀÌÆ®ÀÇ ÃÖ´ë Ä¿³Ø¼Ç »ç¿ë·®À» ±âÁØÀ¸·Î ÁöÁ¤. µ¿½Ã Á¢¼ÓÀÚ¼ö¿¡ µû¶ó¼ ÁöÁ¤ÇÑ´Ù.
- minIdle - »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀÇ ÃÖ¼Ò °³¼ö¸¦ 0À¸·Î ÁöÁ¤ÇÏ°Ô µÇ¸é Ç®¿¡ ÀúÀåµÈ Ä¿³Ø¼ÇÀÇ °³¼ö°¡ 0ÀÌ µÉ ¼ö ÀÖÀ¸¸ç, ÀÌ °æ¿ì Ä¿³Ø¼ÇÀÌ ÇÊ¿äÇÒ ¶§ ´Ù½Ã Ä¿³Ø¼ÇÀ» »ý¼ºÇÏ°Ô µÈ´Ù. µû¶ó¼ Ä¿³Ø¼ÇÀÇ ÃÖ¼Ò °³¼ö´Â 5°³ Á¤µµ·Î ÁöÁ¤Çصδ °ÍÀÌ ÁÁ´Ù.
- timeBetweenEvctionRunsMillis - ÀÌ °ªÀ» ¾Ë¸Â°Ô ÁöÁ¤Çؼ »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀ» Ç®¿¡¼ Á¦°ÅÇÏ´Â °ÍÀÌ ÁÁ´Ù. Ä¿³Ø¼ÇÀÇ µ¿½Ã »ç¿ë·®Àº º¸Åë »õº®¿¡ ÃÖÀúÀÌ¸ç ³· ½Ã°£´ë¿¡ ÃÖ´ë¿¡ À̸£°Ô µÇ´Âµ¥ ÀÌ µÎ ½Ã°£´ë¿¡ ÇÊ¿äÇÑ Ä¿³Ø¼ÇÀÇ °³¼ö Â÷ÀÌ´Â ¼ö½Ê°³¿¡ À̸£°Ô µÈ´Ù. À̶§ ÃÖ´ë »óÅ¿¡ Á¢¾îµé¾ú´õ°¡ ÃÖ¼Ò »óÅ·Π°¡°Ô µÇ¸é Ç®¿¡¼ »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀÇ °³¼ö°¡ Á¡Â÷ Áõ°¡ÇÏ°Ô µÈ´Ù. µû¶ó¼ »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀº ÀÏÁ¤ ½Ã°£ ÈÄ¿¡ »èÁ¦µÇµµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ´Ù. º¸Åë 10~20ºÐ ´ÜÀ§·Î »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀ» °Ë»çÇϵµ·Ï ÁöÁ¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù.
- testWhileIdle - »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀ» °Ë»çÇÒ ¶§ À¯È¿ÇÏÁö ¾ÊÀº Ä¿³Ø¼ÇÀº °Ë»çÇÏ´Â °ÍÀÌ ÁÁ´Ù.
°ü·Ã¸µÅ©: