EJB(xml/mail/jms/jdbc)
2017.03.21 / 18:51

ÀÚÄ«¸£Å¸ DBCP API¸¦ ÀÌ¿ëÇÑ Ä¿³Ø¼Ç Ç® »ç¿ë

Ŭ·¡½Ã
Ãßõ ¼ö 199

Ä¿³Ø¼Ç Ç®°ú ÀÚÄ«¸£Å¸ DBCP API

DBCP API´Â Ä¿³Ø¼Ç Ç® ±â´ÉÀ» Á¦°øÇÏ´Â API·Î¼­ ÀÚÄ«¸£Å¸ÀÇ ¶Ç ´Ù¸¥ ÇÁ·ÎÁ§Æ®ÀÎ Pool API¿¡ ±â¹ÝÇÏ°í ÀÖ´Ù. DBCP API´Â »ç¿ë¹æ¹ýÀÌ ºñ±³Àû ½¬¿ì¸ç, ÆÄÀÏÀ» ÅëÇؼ­ Ä¿³Ø¼Ç Ç®À» ¼³Á¤ÇÒ ¼ö ÀÖ°í ¶ÇÇÑ ÇÁ·Î±×·¥¿¡¼­ Á÷Á¢ Ä¿³Ø¼Ç Ç®À» ¼³Á¤ÇÒ ¼ö Àֱ⠶§¹®¿¡ Ä¿³Ø¼Ç Ç®À» »ç¿ëÇÏ·Á´Â °³¹ßÀÚ¿¡°Ô ¸Å¿ì À¯¿ëÇÑ APIÀÌ´Ù.

Ä¿³Ø¼Ç Ç®À̶õ?

Ä¿³Ø¼Ç Ç®¿¡ ´ëÇÑ °³³äÀÌ ¾ø´Â »ç¶÷À» À§ÇØ DBCP API¸¦ ÀÌ¿ëÇÑ Ä¿³Ø¼Ç Ç®¿¡ ´ëÇؼ­ »ìÆ캸±â Àü¿¡ °£´ÜÇÏ°Ô Ä¿³Ø¼Ç Ç®ÀÌ ¹«¾ùÀÎÁö¿¡ ´ëÇؼ­ »ìÆ캸µµ·Ï ÇÏÀÚ. Ä¿³Ø¼Ç Ç® ±â¹ýÀ̶õ µ¥ÀÌÅͺ£À̽º¿Í ¿¬°áµÈ Ä¿³Ø¼ÇÀ» ¹Ì¸® ¸¸µé¾î¼­ Ç®(pool)À̶õ ÀúÀå¼Ò¿¡ ÀúÀåÇØ µÎ°í ÀÖ´Ù°¡ ÇÊ¿äÇÒ ¶§¿¡ Ä¿³Ø¼ÇÀ» Ç®¿¡¼­ °¡Á®´Ù ¾²°í ´Ù½Ã Ç®¿¡ ¹ÝȯÇÏ´Â ±â¹ýÀ» ÀǹÌÇÑ´Ù


Ä¿³Ø¼Ç Ç® ±â¹ý¿¡¼­´Â À§ ±×¸²°ú °°ÀÌ Ç® ¼Ó¿¡ µ¥ÀÌÅͺ£À̽º¿Í ¿¬°áµÈ Ä¿³Ø¼ÇÀ» ¹Ì¸®»ý¼ºÇسõ°í Àִ´Ù. µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀÌ ÇÊ¿äÇÒ °æ¿ì, Ä¿³Ø¼ÇÀ» »õ·Î »ý¼ºÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó Ç® ¼Ó¿¡ ¹Ì¸® »ý¼ºµÇ¾î ÀÖ´Â Ä¿³Ø¼ÇÀ» °¡Á®´Ù°¡ »ç¿ëÇÏ°Ô µÈ´Ù. ´Ù »ç¿ëÇÑ Ä¿³Ø¼ÇÀº ´Ù½Ã Ç®¿¡ ¹ÝȯÇÑ´Ù. Ç®¿¡ ¹ÝȯµÈ Ä¿³Ø¼ÇÀº ´ÙÀ½¿¡ ´Ù½Ã »ç¿ëµÈ´Ù.

Ä¿³Ø¼Ç Ç®ÀÇ Æ¯Â¡Àº ´ÙÀ½°ú °°´Ù.

  • Ç® ¼Ó¿¡ ¹Ì¸® Ä¿³Ø¼ÇÀÌ »ý¼ºµÇ¾î Àֱ⠶§¹®¿¡ Ä¿³Ø¼ÇÀ» »ý¼ºÇÏ´Â µ¥ µå´Â ¿¬°á ½Ã°£ÀÌ ¼ÒºñµÇÁö ¾Ê´Â´Ù.
  • Ä¿³Ø¼ÇÀ» °è¼ÓÇؼ­ Àç»ç¿ëÇϱ⠶§¹®¿¡ »ý¼ºµÇ´Â Ä¿³Ø¼Ç ¼ö°¡ ¸¹Áö ¾Ê´Ù.

Ä¿³Ø¼ÇÀ» »ý¼ºÇÏ°í ´Ý´Â µ¥ ÇÊ¿äÇÑ ½Ã°£ÀÌ ¼Ò¸ðµÇÁö ¾Ê±â ¶§¹®¿¡ ±× ¸¸Å­ ¾îÇø®ÄÉÀ̼ÇÀÇ ½ÇÇà ¼Óµµ°¡ »¡¶óÁö¸ç, ¶ÇÇÑ Çѹø¿¡ »ý¼ºµÉ ¼ö ÀÖ´Â Ä¿³Ø¼Ç ¼ö¸¦ Á¦¾îÇϱ⠶§¹®¿¡ µ¿½Ã Á¢¼ÓÀÚ¼ö°¡ ¸ô·Áµµ À¥ ¾îÇø®ÄÉÀ̼ÇÀÌ ½±°Ô ´Ù¿îµÇÁö ¾Ê´Â´Ù.

Ä¿³Ø¼Ç Ç®À» »ç¿ëÇϸé ÀüüÀûÀÎ À¥ ¾îÇø®ÄÉÀ̼ÇÀÇ ¼º´É ¹× 󸮷®ÀÌ ³ô¾ÆÁö±â ¶§¹®¿¡ ¸¹Àº À¥ ¾îÇø®ÄÉÀ̼ǿ¡¼­ Ä¿³Ø¼Ç Ç®À» ±âº»À¸·Î »ç¿ëÇÏ°í ÀÖ´Ù.

DBCP APIÀÇ »ç¿ë¹æ¹ý

ÀÚÄ«¸£Å¸ ÇÁ·ÎÁ§Æ®ÀÇ DBCP API¸¦ »ç¿ëÇÒ ¶§¿¡´Â ´ÙÀ½°ú °°Àº °úÁ¤À» °ÅÄ¡¸é µÈ´Ù.

  1. DBCP °ü·Ã Jar ÆÄÀÏ ¹× JDBC µå¶óÀ̹ö Jar ÆÄÀÏ ¼³Ä¡Çϱâ
  2. Ä¿³Ø¼Ç Ç® °ü·Ã ¼³Á¤ ÆÄÀÏ ÃʱâÈ­Çϱâ
  3. Ä¿³Ø¼Ç Ç® °ü·Ã µå¶óÀ̹ö ·ÎµùÇϱâ
  4. Ä¿³Ø¼Ç Ç®·ÎºÎÅÍ Ä¿³Ø¼Ç »ç¿ëÇϱâ

ÀÌ ³× °¡Áö ÀýÂ÷¿¡ ´ëÇؼ­ Â÷·Ê´ë·Î »ìÆ캸µµ·Ï ÇÏÀÚ.

ÇÊ¿äÇÑ 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>


À§ Äڵ忡¼­ ³ª¸ÓÁö ºÎºÐÀº ±×´ë·Î ÀÔ·ÂÇÏ°í ´ÙÀ½ ºÎºÐ¸¸ ¾Ë¸Â°Ô º¯°æÇÏ¸é µÈ´Ù.

    <object class="org.apache.commons.dbcp.DriverManagerConnectionFactory">
      <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>
     <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 µå¶óÀ̹ö¸¦ ·ÎµùÇϸé Ä¿³Ø¼Ç Ç®·ÎºÎÅÍ Ä¿³Ø¼ÇÀ» °¡Á®¿Í »ç¿ëÇÒ ¼ö ÀÖ´Ù. Ä¿³Ø¼Ç Ç®·ÎºÎÅÍ Ä¿³Ø¼ÇÀ» °¡Á®¿À´Â ÄÚµå´Â º°¹Ý ´Ù¸£Áö ¾ÊÀ¸¸ç, ´ÙÀ½°ú °°Àº ÇüÅÂÀÇ Äڵ带 »ç¿ëÇÏ¸é µÈ´Ù.

    Connection conn = null;
    ....
    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ÀÌ ´ÙÀ½°ú °°Àº ÇüŸ¦ ¶è´Ù´Â Á¡ÀÌ´Ù.

    jdbc:apache:commons:dbcp:/[Ç®À̸§]


[Ç®À̸§]Àº ¿©·¯ °³ÀÇ Ä¿³Ø¼Ç Ç® Áß¿¡¼­ »ç¿ëÇÒ Ä¿³Ø¼Ç Ç®ÀÇ À̸§À» ³ªÅ¸³»´Â °ÍÀ¸·Î¼­ Ä¿³Ø¼Ç Ç® ¼³Á¤ ÆÄÀÏ¿¡¼­ È®ÀåÀÚ¸¦ Á¦¿ÜÇÑ ³ª¸ÓÁö À̸§À» [Ç®À̸§]À¸·Î »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î, ¾Õ¼­ ÀÛ¼ºÇß¾ú´ø pool1.jocl ÆÄÀÏÀÌ ¼³Á¤ÇÑ Ä¿³Ø¼Ç Ç®À» »ç¿ëÇÏ°í ½Í´Ù¸é ´ÙÀ½°ú °°Àº JDBC URLÀ» »ç¿ëÇÑ´Ù.

    jdbc:apache:commons:dbcp:/pool1


½ÇÁ¦·Î Ä¿³Ø¼Ç Ç®À» »ç¿ëÇÏ´Â ¿ÏÀüÇÑ ¿¹Á¦´Â ´ÙÀ½ ÄÚµå¿Í °°´Ù. (¾Æ·¡ Äڵ带 ¿©·¯ºÐÀÇ È¯°æ¿¡ ¾Ë¸Â°Ô º¯Çü½ÃÄѼ­ ½ÇÇàÇϱ⠹ٶõ´Ù.)

    
    ÆÄÀϸí: 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.impl.GenericObjectPool">
    <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ÀÏ °æ¿ì¿¡´Â ÀϽÃÀûÀ¸·Î Ä¿³Ø¼ÇÀ» »ý¼ºÇؼ­ »ç¿ëÇÑ´Ù.
maxWaitwhenExhaustedAction ¼Ó¼ºÀÇ °ªÀÌ 1ÀÏ ¶§ »ç¿ëµÇ´Â ´ë±â ½Ã°£. ´ÜÀ§´Â 1/1000ÃÊÀ̸ç, 0 º¸´Ù ÀÛÀ» °æ¿ì ¹«ÇÑÈ÷ ´ë±âÇÑ´Ù.
maxIdle»ç¿ëµÇÁö ¾Ê°í Ç®¿¡ ÀúÀåµÉ ¼ö ÀÖ´Â ÃÖ´ë Ä¿³Ø¼Ç °³¼ö. À½¼öÀÏ °æ¿ì Á¦ÇÑÀÌ ¾ø´Ù.
minIdle»ç¿ëµÇÁö ¾Ê°í Ç®¿¡ ÀúÀåµÉ ¼ö ÀÖ´Â ÃÖ¼Ò Ä¿³Ø¼Ç °³¼ö.
testOnBorrowtrueÀÏ °æ¿ì Ä¿³Ø¼Ç Ç®¿¡¼­ Ä¿³Ø¼ÇÀ» °¡Á®¿Ã ¶§ Ä¿³Ø¼ÇÀÌ À¯È¿ÇÑÁöÀÇ ¿©ºÎ¸¦ °Ë»çÇÑ´Ù.
testOnReturntrueÀÏ °æ¿ì Ä¿³Ø¼Ç Ç®¿¡ Ä¿³Ø¼ÇÀ» ¹ÝȯÇÒ ¶§ Ä¿³Ø¼ÇÀÌ À¯È¿ÇÑÁöÀÇ ¿©ºÎ¸¦ °Ë»çÇÑ´Ù.
timeBetweenEvctionRunsMillis»ç¿ëµÇÁö ¾ÊÀº Ä¿³Ø¼ÇÀ» ÃßÃâÇÏ´Â ¾²·¹µåÀÇ ½ÇÇà Áֱ⸦ ÁöÁ¤ÇÑ´Ù. ¾ç¼ö°¡ ¾Æ´Ò °æ¿ì ½ÇÇàµÇÁö ¾Ê´Â´Ù. ´ÜÀ§´Â 1/1000 ÃÊÀÌ´Ù.
numTestsPerEvictionRun»ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀ» ¸î °³ °Ë»çÇÒÁö ÁöÁ¤ÇÑ´Ù.
minEvictableIdleTimeMillis»ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀ» ÃßÃâÇÒ ¶§ ÀÌ ¼Ó¼º¿¡¼­ ÁöÁ¤ÇÑ ½Ã°£ ÀÌ»ó ºñÈ°¼ºÈ­ »óÅÂÀÎ Ä¿³Ø¼Ç¸¸ ÃßÃâÇÑ´Ù. ¾ç¼ö°¡ ¾Æ´Ñ °æ¿ì ºñÈ°¼ºÈ­µÈ ½Ã°£À¸·Î´Â Ç®¿¡¼­ Á¦°ÅµÇÁö ¾Ê´Â´Ù. ½Ã°£ ´ÜÀ§´Â 1/1000ÃÊÀÌ´Ù.
testWhileIdletrueÀÏ °æ¿ì ºñÈ°¼ºÈ­ Ä¿³Ø¼ÇÀ» ÃßÃâÇÒ ¶§ Ä¿³Ø¼ÇÀÌ À¯È¿ÇÑÁöÀÇ ¿©ºÎ¸¦ °Ë»çÇؼ­ À¯È¿ÇÏÁö ¾ÊÀº Ä¿³Ø¼ÇÀº Ç®¿¡¼­ Á¦°ÅÇÑ´Ù.


¸î¸î ¼Ó¼ºÀº ¼º´É¿¡ Áß¿äÇÑ ¿µÇâÀ» ¹ÌÄ¡±â ¶§¹®¿¡ À¥ ¾îÇø®ÄÉÀ̼ÇÀÇ »ç¿ë·®¿¡ µû¶ó¼­ ¾Ë¸Â°Ô ÁöÁ¤ÇØÁÖ¾î¾ß Çϴµ¥, ´ÙÀ½°ú °°ÀÌ °í·ÁÇؼ­ °¢ ¼Ó¼ºÀÇ °ªÀ» ÁöÁ¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù.

  • maxActive - »çÀÌÆ®ÀÇ ÃÖ´ë Ä¿³Ø¼Ç »ç¿ë·®À» ±âÁØÀ¸·Î ÁöÁ¤. µ¿½Ã Á¢¼ÓÀÚ¼ö¿¡ µû¶ó¼­ ÁöÁ¤ÇÑ´Ù.
  • minIdle - »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀÇ ÃÖ¼Ò °³¼ö¸¦ 0À¸·Î ÁöÁ¤ÇÏ°Ô µÇ¸é Ç®¿¡ ÀúÀåµÈ Ä¿³Ø¼ÇÀÇ °³¼ö°¡ 0ÀÌ µÉ ¼ö ÀÖÀ¸¸ç, ÀÌ °æ¿ì Ä¿³Ø¼ÇÀÌ ÇÊ¿äÇÒ ¶§ ´Ù½Ã Ä¿³Ø¼ÇÀ» »ý¼ºÇÏ°Ô µÈ´Ù. µû¶ó¼­ Ä¿³Ø¼ÇÀÇ ÃÖ¼Ò °³¼ö´Â 5°³ Á¤µµ·Î ÁöÁ¤Çصδ °ÍÀÌ ÁÁ´Ù.
  • timeBetweenEvctionRunsMillis - ÀÌ °ªÀ» ¾Ë¸Â°Ô ÁöÁ¤Çؼ­ »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀ» Ç®¿¡¼­ Á¦°ÅÇÏ´Â °ÍÀÌ ÁÁ´Ù. Ä¿³Ø¼ÇÀÇ µ¿½Ã »ç¿ë·®Àº º¸Åë »õº®¿¡ ÃÖÀúÀÌ¸ç ³· ½Ã°£´ë¿¡ ÃÖ´ë¿¡ À̸£°Ô µÇ´Âµ¥ ÀÌ µÎ ½Ã°£´ë¿¡ ÇÊ¿äÇÑ Ä¿³Ø¼ÇÀÇ °³¼ö Â÷ÀÌ´Â ¼ö½Ê°³¿¡ À̸£°Ô µÈ´Ù. À̶§ ÃÖ´ë »óÅ¿¡ Á¢¾îµé¾ú´õ°¡ ÃÖ¼Ò »óÅ·Π°¡°Ô µÇ¸é Ç®¿¡¼­ »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀÇ °³¼ö°¡ Á¡Â÷ Áõ°¡ÇÏ°Ô µÈ´Ù. µû¶ó¼­ »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀº ÀÏÁ¤ ½Ã°£ ÈÄ¿¡ »èÁ¦µÇµµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ´Ù. º¸Åë 10~20ºÐ ´ÜÀ§·Î »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀ» °Ë»çÇϵµ·Ï ÁöÁ¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù.
  • testWhileIdle - »ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀ» °Ë»çÇÒ ¶§ À¯È¿ÇÏÁö ¾ÊÀº Ä¿³Ø¼ÇÀº °Ë»çÇÏ´Â °ÍÀÌ ÁÁ´Ù.

°ü·Ã¸µÅ©: