¼Ò¼³°°Àº ÀÚ¹Ù 4ºÎ  Á¦19Àå µ¥ÀÌÅͺ£À̽º  19.11.2 °£´ÜÇÑ Connection Pooling  

 

    19.11.2 °£´ÜÇÑ Connection Pooling ±â¹ý »ç¿ëÇϱâ

 

 Connection PoolingÀ̶ó´Â ±â¹ýÀº ¸» ±×´ë·Î, µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀ» ¿©·¯ °³ ¸¸µé¾î¼­ ƯÁ¤ °ø°£¿¡ ÀúÀåÇØ ³õ°í, ¿©·¯ »ç¿ëÀÚ°¡ ÇÊ¿äÇÒ ¶§ ¸¶´Ù Çϳª¾¿ ²¨³»¼­ »ç¿ëÇÏ°í ´Ù½Ã Áý¾î³Ö´Â(Pooling) ¹æ½ÄÀ» ¸»ÇÕ´Ï´Ù. ÀÌÇØ¸¦ µ½±â À§ÇØ ´ÙÀ½ ±×¸²À» ÂüÁ¶ÇϰڽÀ´Ï´Ù.

 

±×¸² 19‑9 Connection Pool¿¡¼­ ConnectionÀ» ²¨³»¿À´Â ¸ð½À

±×¸² 19‑10 »ç¿ëÇÑ ConnectionÀ» Connection Pool¿¡ ¹Ý³³ÇÏ´Â ¸ð½À

ÀÌÀü±îÁö »ç¿ëÇÑ JDBC ¿¹Á¦¿¡¼­´Â ÇÊ¿äÇÒ ¶§¸¶´Ù Á÷Á¢ µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀ» »ý¼ºÇϰí, »ç¿ëÀÌ ³¡³ª¸é Á÷Á¢ ¿¬°áÀ» ÇØÁ¦ ½ÃÄÑÁÖ¾ú½À´Ï´Ù. ÇÏÁö¸¸, Connection Pooling ±â¹ý¿¡¼­´Â Connection PoolÀ̶ó´Â Ä¿³Ø¼Ç °ü¸®ÀÚ°¡ µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀÇ ¿¬°á°ú ÇØÁ¦¸¦ Á÷Á¢ °ü¸® ÇÕ´Ï´Ù. µ¥ÀÌÅͺ£À̽º ÀÛ¾÷À» ¼öÇàÇÒ ClientŬ·¡½ºµéÀº Connection Pool·ÎºÎÅÍ µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀ» Çϳª ÇÒ´ç ¹Þ¾Æ¼­, ´Ù »ç¿ëÇÏ°í ³­ ÈÄ¿¡´Â ´Ù½Ã Connection Pool¿¡°Ô ³Ñ°Ü ÁÝ´Ï´Ù. Connection Pool¿¡°Ô ³Ñ°ÜÁø µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀº ´Ù¸¥ ClientŬ·¡½º°¡ »ç¿ëÀ» ¿äûÇßÀ» ¶§ Àç»ç¿ëÀÌ µË´Ï´Ù.

 

Connection PoolingÀ» »ç¿ëÇÏ´Â ÀÌÀ¯´Â ¡®¼Óµµ Çâ»ó¡¯°ú ¡®ÀÚ¿ø °øÀ¯¡¯ÀÇ µÎ °¡Áö Ãø¸é¿¡¼­ »ìÆìº¼ ¼ö ÀÖ½À´Ï´Ù. µ¥ÀÌÅͺ£À̽º ¿¬°áÀ» ÀǹÌÇÏ´Â ConnectionŬ·¡½º´Â °´Ã¼È­ µÉ ¶§, ´Ù¸¥ ÀϹÝÀûÀΠŬ·¡½ºµé°ú´Â ´Þ¸® ¼öÃÊÀÇ ½Ã°£ÀÌ °É¸³´Ï´Ù. ÀÌ ½Ã°£Àº ¸¸¾à µ¥ÀÌÅͺ£À̽º°¡ ¿ø°ÝÁö¿¡ Á¸ÀçÇÑ´Ù¸é, ³×Æ®¿÷ÀÇ »óÅ¿¡ µû¶ó ´õ Áö¿¬ÀÌ µÉ ¼öµµ ÀÖ½À´Ï´Ù.

 

¸¸¾à ¿ì¸®°¡ ¸¸µé ¾ÖÇø®ÄÉÀ̼ÇÀÌ ºó¹øÇÏ°Ô µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀ» »ý¼ºÇÑ´Ù¸é, ÀÌ·¯ÇÑ ½Ã°£ÀûÀÎ ¿À¹öÇìµå´Â Àüü ¾ÖÇø®ÄÉÀ̼ÇÀ» ´À¸®°Ô ¸¸µé °ÍÀÔ´Ï´Ù. ÀÌ °æ¿ì, ¾ÖÇø®ÄÉÀ̼ÇÀÌ ½ÃÀÛµÉ ¶§ ÀÏÁ¤¼öÀÇ Ä¿³Ø¼ÇÀ» ¹Ì¸® ¸¸µé¾î ³õ°í, Connection PoolÀ» ÅëÇØ Àç»ç¿ë ÇÑ´Ù¸é »ó´çÇÑ ¼Óµµ Çâ»óÀ» ±â´ëÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

 

¶Ç ´Ù¸¥ Ãø¸é¿¡¼­ »ìÆìº¸¸é, µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ Ä¿³Ø¼ÇÀº ¿ì¸®ÀÇ ½Ã½ºÅÛÀÌ °¡Áö°í ÀÖ´Â ÀÚ¿ø(CPU, MEMORY, ³×Æ®¿÷ ´ë¿ªÆø µî)À» ÀÏÁ¤·® »ç¿ëÇϰí ÀÖ½À´Ï´Ù. ½Ã½ºÅÛÀÇ ÀÚ¿øÀº ÇÑÁ¤ µÇ¾î Àֱ⠶§¹®¿¡, »ç¿ëÀÚ ¼ö°¡ ¸¹´Ù°í ÇØ¼­, ¹«Á¦ÇÑ µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀ» ¸¸µé ¼ö´Â ¾ø½À´Ï´Ù. ¸¸¾à ½Ã½ºÅÛÀÌ °¡Áö°í ÀÖ´Â ÀÚ¿øÀ» ÃʰúÇØ¼­ Ä¿³Ø¼ÇÀ» »ý¼ºÇÏ°í »ç¿ëÇÑ´Ù¸é, Àüü ½Ã½ºÅÛÀÇ ¼º´ÉÀº Å©°Ô ¶³¾îÁú °ÍÀÔ´Ï´Ù. ¶ÇÇÑ °©Àڱ⠽ýºÅÛÀÌ Á¤ÁöÇÏ´Â µî ¿¹ÃøÇÒ ¼ö ¾ø´Â »óȲÀ» ºÒ·¯ ÀÏÀ¸Å³ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·± °æ¿ì¸¦ ¸·±â À§ÇØ, Connection Pool¿¡ ½Ã½ºÅÛÀÌ Çã¿ë °¡´ÉÇÑ ¼ö¸¸Å­ÀÇ µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀ» ¸¸µé¾î ³õ°í, °øÀ¯Çؼ­ »ç¿ëÇÔÀ¸·Î½á Àüü ½Ã½ºÅÛÀÇ ¼º´ÉÀ» Çâ»ó½ÃŰ°í ¾ÈÁ¤µÇ°Ô ¸¸µé¾î ÁÙ ¼ö ÀÖ½À´Ï´Ù.

 

 ±×·¯¸é, Áö±ÝºÎÅÍ ½ÇÁ¦·Î Connection Pooling ±â¹ýÀ» »ç¿ëÇÑ °£´ÜÇÑ ¿¹Á¦¸¦ ¸¸µé¾î º¸°Ú½À´Ï´Ù. ÀÎÅͳÝÀ» ã¾Æº¸½Ã¸é Connection Pooling ±â¹ýÀ» ±¸ÇöÇØ ³õÀº ¸¹Àº ÆÐŰÁöµéÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. °¢ ÆÐŰÁöµéÀº Àú¸¶´Ù ´Ù¸¥ ¾Ë°í¸®ÁòÀ» »ç¿ëÇØ¼­ °¢°¢ÀÇ Àå´ÜÁ¡À» °¡Áö°í ÀÖ½À´Ï´Ù. ¿ì¸®´Â ÀÌ Áß, ±âº»ÀûÀÌ°í °øÅëÀÌ µÇ´Â ºÎºÐµé¸¸À» °¡Áö°í ¿¹Á¦¸¦ ¸¸µé¾î º¼ °ÍÀÔ´Ï´Ù. ÀÌ ¿¹Á¦¸¦ ÅëÇØ Connection Pooling¿¡ ´ëÇØ °¨À» ÀâÀ¸½Ã°í ³­ ÈÄ¿¡ º¸´Ù Á¤±³ÇÏ°í º¹ÀâÇÏ°Ô ±¸ÇöµÈ ÆÐŰÁö¸¦ °øºÎÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.

 

±âº»ÀûÀ¸·Î Connection Pooling ±â¹ýÀ» »ç¿ëÇϱâ À§Çؼ±, µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀ» »ý¼ºÇϰí, ÇØÁ¦ÇØÁÖ´Â °Í°ú °°Àº ÀÏÀ» ´ã´çÇØÁÖ´Â Connection PoolÀ̶ó´Â Ä¿³Ø¼Ç °ü¸®ÀÚ°¡ ÇÊ¿äÇÕ´Ï´Ù. ÀÌ Connection PoolÀº Á¤ÇØÁø ¼ö¸¸Å­ Ä¿³Ø¼ÇÀ» ¸¸µé°í, ClientŬ·¡½ºµéÀÌ Ä¿³Ø¼ÇÀ» ¿äûÇßÀ» ¶§ ÇöÀç »ç¿ëµÇ°í ÀÖÁö ¾ÊÀº Ä¿³Ø¼ÇÀ» ³Ñ°Ü ÁÝ´Ï´Ù. ±×¸®°í »ç¿ëÀ» ¸¶Ä£ ClientŬ·¡½º°¡ Ä¿³Ø¼ÇÀ» ³Ñ°ÜÁÖ¸é ´Ù½Ã º¸°üÇϰí ÀÖ´Ù°¡, ´Ù¸¥ ClientŬ·¡½º·ÎºÎÅÍ »õ·Î¿î ¿äûÀÌ µé¾î¿À¸é º¸°üÇϰí ÀÖ´ø Ä¿³Ø¼ÇÀ» Àç»ç¿ë ÇÒ ¼ö ÀÖµµ·Ï ClientŬ·¡½º¿¡°Ô ³Ñ°ÜÁÝ´Ï´Ù.

 

Á¤¸®Çϸé, Connection PoolÀÌ ÇØ¾ß ÇÏ´Â ÀÏÀº ´ÙÀ½°ú °°½À´Ï´Ù.

 

n        Ä¿³Ø¼ÇÀ» »ý¼ºÇؼ­ º¸°üÇϰí Àִ´Ù

n        Ä¿³Ø¼Ç¿¡ ´ëÇÑ ¿äûÀÌ µé¾î¿À¸é, º¸°üÁßÀÎ Ä¿³Ø¼Ç Áß Çϳª¸¦ ³Ñ°ÜÁØ´Ù

n        »ç¿ëÀÌ ³¡³­ Ä¿³Ø¼ÇÀº ´Ù½Ã º¸°üÇϰí Àִ´Ù

 

Connection PoolÀÇ ¿ªÇÒÀ» ¼öÇàÇÏ´Â ConnectionPoolÀ̶ó´Â Ŭ·¡½º¸¦ ¸¸µé¾î º¸°Ú½À´Ï´Ù. ¸ÕÀú ½ÇÁ¦ ConnectionPoolŬ·¡½ºÀÇ ¿Ï¼ºµÈ Äڵ带 º¸°Ú½À´Ï´Ù.

 

ConnectionPool.java(Connection PoolÀ» »ý¼ºÇÏ´Â ¿¹Á¦)

import java.sql.*;

import java.util.*;

public class ConnectionPool {

   private static ConnectionPool cp = null;

   private ConnectionFactory1 cf = null;

   private Vector pool = null;

   private ConnectionPool() {

       cf = new ConnectionFactory1();

       pool = new Vector();

   }

   public static synchronized ConnectionPool getInstance() {

       if (cp == null) {

          cp = new ConnectionPool();

       }

       return cp;

   }

   public synchronized Connection getConnection() throws SQLException {

       Connection conn = null;

       int size = pool.size();

     if (size > 0) {

        conn = (Connection)(pool.elementAt(0));

        pool.removeElementAt(0);

     }else {

        conn = cf.getConnection(ConnectionFactory1.ODBC);

     }

     return conn;

   }

   public synchronized void releaseConnection(Connection conn) {

       pool.add(conn);

   }

}

C:\JavaExample\19> javac ConnectionPool.java

 

ConnectionPoolŬ·¡½º´Â µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀ» »ý¼ºÇϱâ À§ÇØ ÀÌÀü¿¡ ¸¸µç ConnectionFactory1Ŭ·¡½º¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ConnectionFactory1Ŭ·¡½ºÀÇ »ç¿ëÀ¸·Î ¿ì¸®°¡ ¸¸µç ConnectionPoolÀº ´Ù¾çÇÑ È¯°æ¿¡ Àû¿ëÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù.

 

n        private ConnectionPool cf = null;

n        cf = new ConnectionFactory1();

 

ConnectionFactory1ÀÇ getConnection()¸Þ¼­µå¸¦ »ç¿ëÇØ¼­ µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀ» ¸¸µé¸é, Ä¿³Ø¼Ç ÀúÀå¼Ò¿¡ º¸°üÀ» ÇÕ´Ï´Ù. Ä¿³Ø¼ÇÀÇ º¸°üÀ» À§Çؼ­ ConnectionPoolŬ·¡½º´Â poolÀ̶ó´Â Vector ŸÀÔÀ» »ç¿ëÇϰí ÀÖ½À´Ï´Ù.

 

n        private Vector pool = null;

n        pool = new Vector();

 

À§ µÎ ÀÛ¾÷Àº ConnectionPoolŬ·¡½ºÀÇ »ý¼ºÀÚ¿¡¼­ ¼öÇàÀÌ µË´Ï´Ù. ±×·±µ¥ Áö±Ý±îÁö ¿ì¸®°¡ »ç¿ëÇÑ »ý¼ºÀÚ¿Í Á¶±Ý ´Ù¸¥ ºÎºÐÀÌ ÀÖ½À´Ï´Ù. ¹Ù·Î »ý¼ºÀÚÀÇ Á¢±Ù ÁöÁ¤ÀÚ°¡ ¡®private¡¯À̶ó´Â °ÍÀÔ´Ï´Ù.

 

private Á¢±Ù ÁöÁ¤ÀÚ¸¦ °¡Áö´Â »ý¼ºÀÚ

private ConnectionPool() {

cf = new ConnectionFactory1();

pool = new Vectory();

}

 

 À̰ÍÀº ¿ÜºÎ¿¡¼­ »ý¼ºÀÚ¸¦ ÅëÇØ ConnectionPool°´Ã¼¸¦ »ý¼ºÇÏÁö ¸øÇÏ°Ô Çϰڴٴ ¶æÀÔ´Ï´Ù. ConnectionPool°´Ã¼¸¦ ¸¸µé°í Á¢±ÙÇϱâ À§Çؼ­´Â staticÀ¸·Î ¼±¾ðµÈ getInstance()¶ó´Â ¸Þ¼­µå¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.

 

n        public static synchronized ConnectionPool getInstance()

 

getInstance()¸Þ¼­µå´Â ÇöÀç ¸¸µé¾îÁ® ÀÖ´Â ConnectionPool°´Ã¼°¡ Á¸ÀçÇÏ´ÂÁö ¾Ë¾Æº¸°í, ¸¸¾à Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é »õ·Î ConnectionPool°´Ã¼¸¦ ¸¸µé¾î¼­ ¹ÝÈ¯ÇØ ÁÝ´Ï´Ù. ÀÌ¹Ì ConnectionPool°´Ã¼°¡ Á¸ÀçÇÑ´Ù¸é, ±× °´Ã¼ÀÇ ÂüÁ¶ÀÚ¸¦ ³Ñ°Ü ÁÝ´Ï´Ù. ÀÌ·± ±â¹ýÀ» µðÀÚÀÎ ÆÐÅÏ ¿ë¾î·Î ½Ì±ÛÅæ(Singleton) ÆÐÅÏÀ̶ó°í ÇÕ´Ï´Ù. ½Ì±ÛÅæ ÆÐÅÏÀ» »ç¿ëÇÏ¸é ¾î¶² °´Ã¼¸¦ µü Çϳª¸¸ Á¸ÀçÇÏ°Ô ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ½Ì±ÛÅæ ÆÐÅÏÀ» »ç¿ëÇØ¼­ ConnectionPool°´Ã¼¸¦ µü Çϳª¸¸ Á¸ÀçÇÏ°Ô ¸¸µç ÀÌÀ¯´Â µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼Ç °ü¸®ÀÚ°¡ ¿©·¯ °³ÀÌ¸é ¿Ïº®ÇÑ °ü¸®°¡ ¾ÈµÇ±â ¶§¹®ÀÔ´Ï´Ù.

 

ConnectionPoolŬ·¡½º´Â ClientŬ·¡½ºµéÀÌ Ä¿³Ø¼ÇÀ» ¿äûÇÒ ¼ö ÀÖµµ·Ï getConnection()À̶ó´Â ¸Þ¼­µå¸¦ Á¦°øÇÕ´Ï´Ù. getConnection()¸Þ¼­µå´Â Ä¿³Ø¼Ç¿¡ ´ëÇÑ ¿äûÀÌ µé¾î¿ÔÀ» ¶§ Ä¿³Ø¼Ç º¸°ü¼ÒÀÎ pool¿¡ »ç¿ëÇϰí ÀÖÁö ¾ÊÀº Ä¿³Ø¼ÇÀÌ ÀÖ´ÂÁö °Ë»ç¸¦ Çϰí, »ç¿ë °¡´ÉÇÑ Ä¿³Ø¼ÇÀÌ ÀÖ´Ù¸é ³Ñ°Ü ÁÝ´Ï´Ù. ¸¸¾à, ¸ðµç Ä¿³Ø¼ÇÀÌ »ç¿ë ÁßÀ̶ó¸é »õ·Î¿î Ä¿³Ø¼ÇÀ» ¸¸µé¾î¼­ ³Ñ°Ü ÁÝ´Ï´Ù.

 

getConnection()¸Þ¼­µåÀÇ ³»ºÎ ±¸Çö

public synchronized Connection getConnection()

throws SQLException {

   Connection conn = null;

   int size = pool.size();    // pool¿¡ ÀúÀåµÇ¾î ÀÖ´Â Ä¿³Ø¼ÇÀÇ ¼ö

   if (size > 0) {  // »ç¿ë °¡´ÉÇÑ Ä¿³Ø¼ÇÀÌ ÀÖ´Ù¸é, Ä¿³Ø¼ÇÀ» Çϳª ²¨³»¿È

       conn = (Connection)(pool.elementAt(0));

       pool.removeElementAt(0);

   }else   {

       // »ç¿ë °¡´ÉÇÑ Ä¿³Ø¼ÇÀÌ ¾ø´Ù¸é Ä¿³Ø¼ÇÀ» »õ·Î ¸¸µê

       conn = cf.getConnection(ConnectionFactory1.ODBC);

   } 

   // Ä¿³Ø¼ÇÀ» ¹Ýȯ

   return conn;

}

 

»ç½Ç »õ·Î¿î Ä¿³Ø¼ÇÀ» ¸¸µå´Â ¹®Á¦´Â Á»´õ °í·ÁÇØ¾ß ÇÒ »çÇ×µéÀÌ Àִµ¥, À̰Ϳ¡ ´ëÇØ¼­´Â ´ÙÀ½ Àý¿¡¼­ »ìÆìº¸°Ú½À´Ï´Ù.

 

Ä¿³Ø¼ÇÀ» pool¿¡¼­ °¡Á®¿Ã ¶§´Â Á¦ÀÏ ¾Õ¿¡ À§Ä¡Çϰí ÀÖ´Â Ä¿³Ø¼ÇÀ» °¡Á® ¿É´Ï´Ù.

 

n        conn = (Connection)(pool.elementAt(0));

 

ÀÌ·¸°Ô ÇÏ´Â ÀÌÀ¯´Â Ä¿³Ø¼ÇÀ» »ç¿ëÇÏÁö ¾Ê°í ¿À·£ ½Ã°£ÀÌ Áö³ª¸é ÀÚµ¿À¸·Î ¿¬°áÀÌ ÇØÁ¦ µÉ ¼öµµ Àֱ⠶§¹®ÀÔ´Ï´Ù. ÀÌ·¸°Ô Á¦ÀÏ ¾Õ¿¡ À§Ä¡ÇÑ Ä¿³Ø¼ÇÀ» ¹ÝÈ¯ÇØÁÖ°í, ¸· »ç¿ëÀÌ ³¡³­ Ä¿³Ø¼ÇÀº Á¦ÀÏ µÚ¿¡ ÀúÀåÇÏ´Â ¹æ½ÄÀ¸·Î Ä¿³Ø¼ÇÀ» º¸´Ù ¾ÈÁ¤ÀûÀ¸·Î Àå½Ã°£ °ü¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

»ç¿ëÀ» ¸¶Ä£ Ä¿³Ø¼ÇÀº ClientŬ·¡½º·ÎºÎÅÍ releaseConnection()¸Þ¼­µå¸¦ È£Ãâ ¹ÞÀ½À¸·Î½á ³Ñ°Ü¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù.

 

n        public synchronized void releaseConnection(Connection conn) {

n           pool.add(conn);

n        }

 

ÀÌ ¸Þ¼­µå´Â ´Ü¼øÈ÷ ³Ñ°Ü¹ÞÀº Ä¿³Ø¼ÇÀ» poolÀÇ Á¦ÀÏ ³¡¿¡ ÀúÀåÇØ ÁÖ´Â Àϸ¸À» ÇÕ´Ï´Ù.

 

ConnectionPoolŬ·¡½º¿¡¼­ »ç¿ëµÇ´Â ´ëºÎºÐÀÇ ¸Þ¼­µåµéÀº ¿©·¯ ClientŬ·¡½ºµéÀÌ µ¿½Ã¿¡ Á¢¼ÓÇÏ´Â °ÍÀ» °í·ÁÇØ¼­ synchronized󸮵Ǿî ÀÖ½À´Ï´Ù. ¸ÖƼ ¾²·¹µå¿¡ °üÇÑ ºÎºÐÀº ÀÌ Ã¥ÀÇ ¾Õ ºÎºÐÀ» Âü°íÇØ Áֽñ⠹ٶø´Ï´Ù.

 

ÀÌÁ¦ ½ÇÁ¦·Î ¸¸µé¾îÁø ConnectionPoolŬ·¡½º¸¦ »ç¿ëÇÏ´Â Client Ŭ·¡½º¸¦ ¸¸µé¾î º¸°Ú½À´Ï´Ù.

 

ClientClass2.java(ConnectonPool Ŭ·¡½º¸¦ Àû¿ëÇÏ´Â ¿¹Á¦)

import java.sql.*;

public class ClientClass2 {

   public static void main(String[] args)

   throws SQLException   {

       ConnectionPool pool = ConnectionPool.getInstance();

       Connection conn = pool.getConnection();

       if (conn != null) {

          Statement stmt = conn.createStatement();

          ResultSet rs = stmt.executeQuery("SELECT * FROM MyTest");

          rs.close();

          stmt.close();

          pool.releaseConnection(conn);

       }

   }

}

C:\JavaExample\19>javac ClientClass2.java

C:\JavaExample\19>java ClientClass2

 

ClientŬ·¡½º´Â ConnectionFactoryŬ·¡½º¸¦ »ç¿ëÇÒ ¶§¿Í ¸¶Âù°¡Áö·Î ConnectionPoolŬ·¡½ºÀÇ getConnection()¸Þ¼­µå¸¦ È£ÃâÇÒ »ÓÀÔ´Ï´Ù. ´Ù¸¥ Á¡ÀÌ ÀÖ´Ù¸é, ConnectionPool°´Ã¼¸¦ ¾ò¾î¿À´Â ¹æ¹ý°ú »ç¿ëÀÌ ³¡³­ Ä¿³Ø¼ÇÀº ConnectionPoolŬ·¡½ºÀÇ releaseConnction()¸Þ¼­µå¸¦ »ç¿ëÇØ¼­ ´Ù½Ã ¹ÝÈ¯ÇØ Áشٴ °ÍÀÔ´Ï´Ù.

 

À̹ø Àý¿¡¼­ ¸¸µé¾îº» ConnectionPoolŬ·¡½º´Â »ç½Ç, Connection Pooling ±â¹ýÀ» ¼Ò°³Çϱâ À§ÇØ ¾ÆÁÖ °£´ÜÇÑ ±â´É¸¸À» ±¸ÇöÇϵµ·Ï ÀÛ¼ºÇÑ °ÍÀÔ´Ï´Ù. ½ÇÁ¦ Connection Pooling ±â¹ýÀ» »ç¿ëÇÏ·Á¸é, Connection Pool ¾È¿¡ º¸°üÇÏ·Á´Â µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀÇ ÃÖ´ë °³¼ö¿¡ ´ëÇÑ °í·Áµµ ÇÊ¿äÇϰí, ¸¸¾à ÃÖ´ë °³¼ö¿¡ µµ´Þ ÇßÀ» ¶§ ¾î¶»°Ô ó¸®ÇØ ÁÖ¾î¾ß Çϴ°¡¿¡ ´ëÇÑ °í·Áµµ ÇÊ¿äÇÕ´Ï´Ù. ´ÙÀ½ Àý¿¡¼­´Â ÀÌ·± ºÎºÐ±îÁö È®ÀåÇÑ ConnectionPoolŬ·¡½º¸¦ ¸¸µé¾î º¸°Ú½À´Ï´Ù.

 

¢Ñ Connection Pool

Ä¿³Ø¼ÇµéÀ» ¸ð¾Æ °ü¸®Çϴ Ŭ·¡½º¸¦ ¸¸µé¾îµÎ°í, DB¿Í ¿¬°áµÇ´Â ¸ðµç Ä¿³Ø¼ÇÀ» »ý¼ºÇÏ°í °ü¸® ÇÏ´Â °Í.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù4ºÎ
ÀúÀÚ:ÃÖ¿µ°ü