ÃֽŠ°Ô½Ã±Û(JAVA)
2018.12.07 / 17:40

[JSP] Ä¿³Ø¼Ç Ç®

hanulbit
Ãßõ ¼ö 244

Ä¿³Ø¼Ç Ç®(Connection Pool)


1. Ä¿³Ø¼Ç Ç®(DBCP)

µ¥ÀÌÅͺ£À̽º¿Í ¿¬°áµÈ Ä¿³Ø¼ÇÀ» ¹Ì¸® ¸¸µé¾î¼­ Ç®(pool) ¼Ó¿¡ ÀúÀåÇØ µÎ°í ÀÖ´Ù°¡ ÇÊ¿äÇÒ ¶§ Ä¿³Ø¼ÇÀ» Ç®¿¡¼­ ¾²°í ´Ù½Ã Ç®¿¡ ¹ÝȯÇÏ´Â ±â¹ýÀ» ¸»ÇÑ´Ù.

À¥ ÇÁ·Î±×·¥¿¡¼­´Â µ¥ÀÌÅͺ£À̽ºÀÇ È¯°æ¼³Á¤°ú ¿¬°á °ü¸® µîÀ» µû·Î XMLÆÄÀÏÀ̳ª ¼Ó¼º ÆÄÀÏÀ» »ç¿ëÇؼ­ °ü¸®ÇÏ°í, ÀÌ·¸°Ô ¼³Á¤µÈ Á¤º¸¸¦ À̸§À» »ç¿ëÇÏ¿© ȹµæÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÑ´Ù.

- À¥ ÄÁÅ×À̳ʰ¡ ½ÇÇàµÇ¸é¼­ Ä¿³Ø¼Ç(connection) °´Ã¼¸¦ ¹Ì¸® Ç®(pool)¿¡ »ý¼ºÇØ µÓ´Ï´Ù.

- DB¿Í ¿¬°áµÈ Ä¿³Ø¼Ç(connection)À» ¹Ì¸® »ý¼ºÇؼ­ Ç®(pool) ¼Ó¿¡ ÀúÀåÇØ µÎ°í ÀÖ´Ù°¡ ÇÊ¿äÇÒ ¶§¿¡ °¡Á®´Ù ¾²°í ¹ÝȯÇÑ´Ù.

- ¹Ì¸® »ý¼ºÇصα⠶§¹®¿¡ µ¥ÀÌÅͺ£À̽º¿¡ ºÎÇϸ¦ ÁÙÀÌ°í À¯µ¿ÀûÀ¸·Î ¿¬°áÀ» °ü¸® ÇÒ ¼ö ÀÖ´Ù.

ÀÌ·¸°Ô Ç® ¼Ó¿¡ ¹Ì¸® »ý¼ºµÇ¾î ÀÖ´Â Ä¿³Ø¼ÇÀ» °¡Á®´Ù°¡ »ç¿ëÇÏ°í, »ç¿ëÀÌ ³¡³ª¸é Ä¿³Ø¼ÇÀ» Ç®¿¡ ¹ÝȯÇÑ´Ù.


2. Ä¿³Ø¼ÇÇ®(DBCP) »ç¿ë ÀÌÀ¯


¸¸¾à ÇѸíÀÇ Á¢¼ÓÀÚ°¡ À¥ »çÀÌÆ®¿¡ Á¢¼ÓÇß´Ù°í °¡Á¤ÇÑ´Ù. ÇØ´ç À¥ »çÀÌÆ®¿¡¼­ Á¢¼ÓÀÚ´Â °Ô½ÃÆÇÀ» È®ÀÎÇÏ°í ÀÚ½ÅÀÌ ¾´ °Ô½Ã¹°À» ¼öÁ¤ÇÏ°í ¶Ç »õ·Î¿î °Ô½Ã±ÛÀ» µî·ÏÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ.

±×·³ ÀÌ ÇѸíÀÇ Á¢¼ÓÀÚ·Î ÀÎÇØ DBÁ¢¼ÓÀº ¾Æ·¡¿Í °°ÀÌ ¹ß»ýÇÑ´Ù.

1) µ¥ÀÌÅÍ Ãëµæ

2) °Ë»ö ÈÄ µ¥ÀÌÅÍ Ãëµæ

3) µ¥ÀÌÅÍ °»½Å

4) µ¥ÀÌÅÍ »õµî·Ï


Áï ÇѸíÀÇ Á¢¼ÓÀÚ·Î ÀÎÇØ ´Ü ½Ã°£¿¡ 4¹øÀÇ DB Á¢¼ÓÀÌ ÀϾ´Ù.

±×·³ À¥»ó¿¡¼­ ¾ÆÁÖ ÂªÀº ½Ã°£¿¡ ¸î¹øÀÇ DB Á¢¼ÓÀÌ ÀϾ±î? ¸¸¾à Á¢¼ÓÀÚ°¡ 1000¸í À̶ó¸é? Áï Ä¿³Ø¼Ç Ç®À̶õ ¹Ì¸® Ä¿³Ø¼Ç °´Ã¼¸¦ »ý¼ºÇÏ°í ÇØ´ç Ä¿³Ø¼Ç °´Ã¼¸¦ °ü¸®Çϴ°ÍÀ» ÀǹÌÇÑ´Ù.

Áï 'Ä¿³Ø¼Ç Ç®¿¡ DB¿Í ¿¬°áÀ» ÇØ ³õÀº °´Ã¼¸¦ µÎ°í ÇÊ¿äÇÒ ¶§¸¶´Ù Ä¿³Ø¼Ç Ç®¿¡¼­ ºô·Á¿Â´Ù' ¶ó°í ÀÌÇØÇÏ¸é °³³äÀâ±â¿¡ ½¬¿ïµí ÇÏ´Ù.

±×¸®°í ¿¬°áÀÌ ³¡³ª¸é ´Ù½Ã Ç®¿¡ µ¹·ÁÁØ´Ù.

Ä¿³Ø¼Ç Ç®À» ³Ê¹« Å©°Ô ÇسõÀ¸¸é ´ç¿¬È÷ ¸Þ¸ð¸® ¼Ò¸ð°¡ Ŭ°ÍÀÌ°í, Àû°Ô ÇسõÀ¸¸é Ä¿³Ø¼ÇÀÌ ¸¹ÀÌ ¹ß»ýÇÒ °æ¿ì ´ë±â½Ã°£ÀÌ ¹ß»ýÇÒ °ÍÀÌ´Ù. Áï À¥ »çÀÌÆ® µ¿½Ã Á¢¼ÓÀÚ¼ö µî ¼­¹ö ºÎÇÏ¿¡ µû¶ó Å©±â¸¦ Á¶Á¤ÇØ¾ß ÇÒ°ÍÀÌ´Ù.


cp.) 

¼­¹ö´Â µ¿½Ã¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â »ç¶÷ÀÇ ¼ö¶ó´Â °³³äÀÌ Á¸ÀçÇÕ´Ï´Ù.ÀϹÝÀûÀÎ Ä¿³Ø¼ÇÀ» ÀÌ¿ëÇÏ¸é µ¿½Ã Á¢¼ÓÀÚ ¼ö¸¦ ¹þ¾î³ª°Ô µÉ °æ¿ì ¿¡·¯(¿¹¿Ü)°¡ ¹ß»ýÇÏ°Ô µË´Ï´Ù.

¿¹¿Ü°¡ ¹ß»ýÇÏ¸é ±× Á¢¼ÓÀÚ´Â ´õÀÌ»ó 󸮸¦ ÇÏÁö ¸øÇϹǷÎ, »çÀÌÆ® ÀÌ¿ëÀڴ ´Ù½Ã Á¢¼ÓÀ» ½ÃµµÇؾßÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ½À´Ï´Ù.À̸¦ ÇØ°áÇϱâ À§ÇØ Åº»ýÇÑ °ÍÀÌ Ä¿³Ø¼Ç Ç® ÀÔ´Ï´Ù.

 Ä¿³Ø¼Ç Ç®À̶õ µ¿½Ã Á¢¼ÓÀÚ°¡ °¡Áú ¼ö ÀÖ´Â Ä¿³Ø¼ÇÀ» Çϳª·Î ¸ð¾Æ³õ°í °ü¸®ÇÑ´Ù´Â °³³äÀÔ´Ï´Ù. ´©±º°¡ Á¢¼ÓÇϸé ÀÚ½ÅÀÌ °ü¸®ÇÏ´Â Ç®¿¡¼­ ³²¾ÆÀÖ´Â Ä¿³Ø¼ÇÀ» Á¦°øÇÕ´Ï´Ù.

ÇÏÁö¸¸ ³²¾ÆÀÖ´Â Ä¿³Ø¼ÇÀÌ ¾ø´Â °æ¿ì¶ó¸é ÇØ´ç Ŭ¶óÀ̾ðÆ®´Â ´ë±â »óÅ·ΠÀüȯ½Ãŵ´Ï´Ù. ±×¸®°í Ä¿³Ø¼ÇÀÌ ´Ù½Ã Ç®¿¡ µé¾î¿À¸é ´ë±â »óÅ¿¡ Àִ Ŭ¶óÀ̾ðÆ®¿¡°Ô ¼ø¼­´ë·Î Á¦°øÇÕ´Ï´Ù.

- JDBC¸¦ ÅëÇÏ¿© DB¿¡ ¿¬°áÇϱâ À§Çؼ­´Â µå¶óÀ̹ö(Driver)¸¦ ·ÎµåÇÏ°í Ä¿³Ø¼Ç(connection) °´Ã¼¸¦ ¹Þ¾Æ¿Í¾ß ÇÑ´Ù.

- JDBC¸¦ »ç¿ëÇÏ¸é »ç¿ëÀÚ°¡ ¿äûÀ» ÇÒ ¶§¸¶´Ù ¸Å¹ø µå¶óÀ̹ö¸¦ ·ÎµåÇÏ°í Ä¿³Ø¼Ç °´Ã¼¸¦ »ý¼ºÇÏ¿© ¿¬°áÇÏ°í Á¾·áÇϱ⠶§¹®¿¡ ¸Å¿ì ºñÈ¿À²ÀûÀÌ´Ù.

- ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ­ Ä¿³Ø¼ÇÇ®(DBCP)¸¦ »ç¿ëÇÑ´Ù.


3. Ä¿³Ø¼ÇÇ®(DBCP)ÀÇ Æ¯Â¡

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

 - Ä¿³Ø¼ÇÀ» °è¼ÓÇؼ­ Àç»ç¿ëÇϱ⠶§¹®¿¡ »ý¼ºµÇ´Â Ä¿³Ø¼Ç ¼ö°¡ ¸¹Áö ¾Ê´Ù.

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


4. ±×·¸´Ù¸é µ¿½Ã Á¢¼ÓÀÚ Ã³¸®´Â..?

Ä¿³Ø¼Ç Ç®¿¡¼­ »ý¼ºµÇ¾î ÀÖ´Â Ä¿³Ø¼ÇÀÇ °¹¼ö´Â ÇÑÁ¤ÀûÀÌ´Ù. ±×·¸´Ù¸é µ¿½Ã Á¢¼ÓÀÚ°¡ ¸¹¾ÆÁö¸é ¾î¶»°Ô µÉ±î?

Ä¿³Ø¼Ç Ç®Àº ´©±ºÀÚ Á¢¼ÓÇϸé Ä¿³Ø¼Ç Ç®¿¡ ³²¾Æ ÀÖ´Â Ä¿³Ø¼ÇÀ» Á¦°øÇÏ´Â ½ÄÀÌ´Ù. ÇÏÁö¸¸ ³²¾ÆÀÖ´Â Ä¿³Ø¼ÇÀÌ ¾øÀ» °æ¿ì ÇØ´ç Ŭ¶óÀ̾ðÆ®´Â ´ë±â »óÅ·ΠÀüȯÀÌ µÇ°í, Ä¿³Ø¼ÇÀÌ ¹ÝȯµÇ¸é ´ë±âÇÏ°í ÀÖ´Â ¼ø¼­´ë·Î Ä¿³Ø¼ÇÀÌ Á¦°øµÈ´Ù.


5. ȯ°æ¼³Á¤

(1) DBCP ¶óÀ̺귯¸® Ãß°¡

- ÀÌÀü¹öÀü commons-dbcp-1.4jar, commons-pool-1.6.jar, commons-collections-3.2.1-bin.zip 3°³ÀÇ ¶óÀ̺귯¸®´Â ÅèĹ 6.0 ºÎÅÍ tomcat-dbcp.jar ÆÄÀÏ·Î Çϳª·Î ÅëÇյǾú´Ù.

- ÅèĹ¼³Ä¡Æú´õ lib Æú´õ¿¡ ÀÖ´Â tomcat-dbcp.jar ÆÄÀÏÀ» À¥ÇÁ·ÎÁ§Æ®\WebContent\WEB-INF\lib °æ·Î¿¡ º¹»çÇÑ´Ù.



(2) DB ¶óÀ̺귯¸® Ãß°¡(¿À¶óŬ - ojdbc.jar)



(3) \Servers\Tomcat v6.0 Server at localhost-config\context.xml ÆÄÀÏ¿¡ Resource ÅÂ±× Ãß°¡


¡Ø Ä¿³Ø¼Ç Ç®ÀÇ ¼Ó¼º

  ¼Ó¼º

 ¼³¸í

 maxActive 

 Ä¿³Ø¼Ç Ç®ÀÌ Á¦°øÇÒ ÃÖ´ë Ä¿³Ø¼Ç °¹¼ö 

 whenExhaustedAction

 Ä¿³Ø¼Ç Ç®¿¡¼­ °¡Á®¿Ã ¼ö ÀÖ´Â Ä¿³Ø¼ÇÀÌ ¾øÀ» ¶§ ¾î¶»°Ô µ¿ÀÛÇÒÁö¸¦ ÁöÁ¤.

0ÀÏ °æ¿ì ¿¡·¯ ¹ß»ý

1ÀÏ °æ¿ì maxWait ¼Ó¼º¿¡¼­ ÁöÁ¤ÇÑ ½Ã°£¸¸Å­ Ä¿³Ø¼ÇÀ» ±¸ÇÒ¶§±îÁö ±â´Ù¸².

2ÀÏ °æ¿ì ÀϽÃÀûÀ¸·Î Ä¿³Ø¼ÇÀ» »ý¼ºÇؼ­ »ç¿ë

 maxWait

whenExhaustedAction ¼Ó¼ºÀÇ °ªÀÌ 1ÀÏ ¶§ »ç¿ëµÇ´Â ´ë±â ½Ã°£.

´ÜÀ§´Â 1/1000ÃÊ, 0º¸´Ù ÀÛÀ» °æ¿ì ¹«ÇÑÈ÷ ´ë±â

 maxIdle 

 »ç¿ëµÇÁö ¾Ê°í Ç®¿¡ ÀúÀåµÉ ¼ö ÀÖ´Â ÃÖ´ë Ä¿³Ø¼Ç °¹¼ö.

À½¼öÀÏ °æ¿ì Á¦ÇÑÀÌ ¾øÀ½

 minIdle

»ç¿ëµÇÁö ¾Ê°í Ç®¿¡ ÀúÀåµÉ ¼ö ÀÖ´Â ÃÖ¼Ò Ä¿³Ø¼Ç °¹¼ö. 

 testOnBorrow 

 trueÀÏ °æ¿ì Ä¿³Ø¼Ç Ç®¿¡¼­ Ä¿³Ø¼ÇÀ» °¡Á®¿Ã ¶§ Ä¿³Ø¼ÇÀÌ À¯È¿ÇÑÁöÀÇ ¿©ºÎ¸¦ °Ë»ç 

 testOnReturn 

 trueÀÏ °æ¿ì Ä¿³Ø¼Ç Ç®¿¡ Ä¿³Ø¼ÇÀ» ¹ÝȯÇÒ ¶§ Ä¿³Ø¼ÇÀÌ À¯È¿ÇÑÁöÀÇ ¿©ºÎ¸¦ °Ë»ç 

 timeBetweenEvctionRunsMillis 

»ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀ» ÃßÃâÇÏ´Â ¾²·¹µåÀÇ ½ÇÇà ÁÖ±â ÁöÁ¤.

¾ç¼ö°¡ ¾Æ´Ò °æ¿ì ½ÇÇàµÇÁö ¾Ê´Â´Ù.

½Ã°£ ´ÜÀ§´Â 1/1000ÃÊ. 

 numTestsPerEvictionRun 

»ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀ» ¸î °³ °Ë»çÇÒ Áö ÁöÁ¤ 

 minEvictableIdleTimeMillis 

»ç¿ëµÇÁö ¾Ê´Â Ä¿³Ø¼ÇÀ» ÃßÃâÇÒ ¶§ ÀÌ ¼Ó¼®¿¡¼­ ÁöÁ¤ÇÑ ½Ã°£ ÀÌ»ó ºñÈ°¼ºÈ­ »óÅÂÀÎ Ä¿³Ø¼Ç¸¸ ÃßÃâ.

¾ç¼ö°¡ ¾Æ´Ñ °æ¿ì ºñÈ°¼ºÈ­µÈ ½Ã°£À¸·Î´Â Ç®¿¡¼­ Á¦°ÅµÇÁö ¾ÊÀ½.

½Ã°£ ´ÜÀ§´Â 1/1000ÃÊ 

 testWhileIdle

 trueÀÏ °æ¿ì ºñÈ°¼ºÈ­ Ä¿³Ø¼ÇÀ» ÃßÃâÇÒ ¶§ Ä¿³Ø¼ÇÀÌ À¯È¿ÇÑÁöÀÇ ¿©ºÎ¸¦ °Ë»çÇؼ­ À¯È¿ÇÏÁö ¾ÊÀº Ä¿³Ø¼ÇÀº Ç®¿¡¼­ Á¦°Å.



(4) À¥ÇÁ·ÎÁ§Æ®\WebContent\WEB-INF\web.xml ÆÄÀÏ¿¡ <resource-ref> ÅÂ±× Ãß°¡

- <res-ref-name> ű×ÀÇ À̸§Àº contex.xml ÆÄÀÏ <resource>ű×ÀÇ name ¼Ó¼ºÀÇ À̸§°ú °°¾Æ¾ßÇÑ´Ù.

- (4) ÀÛ¾÷Àº ÅèĹ 6.0 ÀÌ»óºÎÅÍ´Â »ý·« °¡´ÉÇÏ´Ù.



(5) JAVA ÄÚµå·Î ¿¬°á

- ¼­ºí¸´¿¡¼­ ÀÛ¼ºÇÑ´Ù. (MVC ±¸Á¶·Î ±¸ÇöÇÒ °æ¿ì)

- ¿¹¿Ü¸¦ °¡Áö°í ÀÖÀ¸¹Ç·Î ¿¹¿Ü󸮸¦ ÇØÁØ´Ù.

import java.sql.Connection;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.sql.DataSource;

 

public class DBCP {

    /*

     * ÀÌ Äڵ带 ¾Æ·¡¿Í °°ÀÌ ÁÙ¿©¼­ ÀÛ¼º°¡´ÉÇÏ´Ù.

    Context initContext = new InitialContext();

    Context envContext  = (Context) initContext.lookup("java:/comp/env");

    // ("java:comp/env"): JNDI ¼­ºñ½º¿¡ Á¢±ÙÇϱâ À§ÇÑ ±âº» À̸§(ÀÌ ÀÚ¿øÀ» ã°Ú´Ù.--> web.xmlÀÇ <res-ref-name>

    DataSource dataSource = (DataSource) envContext.lookup("jdbc/oracle");

    Connection conn = dataSource.getConnection();

    */

     

    Context context = new InitialContext();

    DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/oracle");

    Connection con = dataSource.getConnection();        

}



(6) servers > context.xml ÆÄÀÏ º¹»ç

- ¼­¹ö°¡ º¯°æµÇ°Å³ª ¼­¹ö¿¡¼­ ÇÁ·ÎÁ§Æ®¸¦ Á¦°ÅÇÏ´Â °æ¿ì¿¡ ´Ù½Ã Ãß°¡Çؼ­ ½ÇÇàÇÏ´Â ¹ø°Å·Î¿òÀÌ ÀÖ´Ù.

- \Servers\Tomcat v6.0 Server at localhost-config\context.xml ÆÄÀÏÀ» º¹»çÇÑ´Ù.

- À¥ÇÁ·ÎÁ§Æ®\WebContent\WEB-INF\ µð·ºÅ͸®¿¡ ºÙ¿©³Ö±â ÇÑ´Ù.


6. JNDI(Java Naming and Directory Interface) 

¼³Á¤µÈ Á¤º¸¸¦ À̸§À¸·Î ȹµæÇÏ·Á¸é ÀÚ¹ÙÀÇ ³×ÀÌ¹Ö API¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ³×ÀÌ¹Ö ÆÐÅ°ÁöÀÇ Å¬·¡½º¸¦ °¡Áö°í À̸§À¸·Î °´Ã¼¸¦ ȹµæÇÏ´Â °ÍÀ» JNDI(Java Naming and Directory Interface)¶ó°í ÇÑ´Ù.

- ¼­ºñ½º°¡ ´Ù¸¥ ¼­ºñ½º¸¦ Ž»öÇÒ ¶§ À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù. (ºÐ»êµÈ ÀÚ¿ø)

- ºÐ»êµÈ ÀÚ¿ø ³¢¸®ÀÇ Å½»öÀ» ¿øÇÒÇÏ°Ô Çϱâ À§ÇÑ type casting ÀÓ. (DNS µµ ÀÌ¿¡ ¼ÓÇÔ) 

- JNDI¿¡ ¼³Á¤ÇØ ³õ¾Ò´Ù´Â°ÍÀº Context.xml¿¡ ¸®¼Ò½º¸¦ »ý¼ºÇسõÀº °ÍÀ» ¸»ÇÑ´Ù.

cf.) 

À̸§À» ÀÌ¿ëÇؼ­ ¿øÇÏ´Â Á¤º¸ ȤÀº ÀÚ¿ø(Connection)À» ãÀ» ¼ö ÀÖ´Â ¼­ºñ½º

javax.naming ¼­ºñ½º

initialContext Ŭ·¡½º


(1) META-INF/context.xml

¸®¼Ò½º µî·ÏÇÏ´Â ¼³Á¤ÆÄÀÏ

<Context> 

<!-- Resource¸¦ µî·ÏÇÏ¿© À¥¿¡¼­ JNDI·Î È£ÃâÇÒ À̸§°ú Á¤º¸¸¦ ¼³Á¤ÇÑ´Ù. -->

   <Resource name="jdbc/myconn" auth="Container" type="javax.sql.DataSource"

   factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"

   driverClassName="org.gjt.mm.mysql.Driver"

   url="jdbc:mysql://localhost:3306/web_java?autoReconnect=true"

   username="root" password="12345678" 

   maxActive="100" maxIdle="30" maxWait="10000"

   removeAbandoned="true" removeAbandonedTimeout="60"/> 

   <!-- 

1. name : JNDI·Î È£ÃâµÉ À̸§À» ¼³Á¤ÇÑ´Ù. (Á¢±Ù -> java:comp/env/jdbc/myconn)

   2. auth : DBCP¸¦ °ü¸®ÇÒ °ü¸®ÀÚ (Container or Application)

   3. type : ÇØ´ç resourceÀÇ return type 

      (DataSource´Â Connection °´Ã¼¸¦ ¹ÝȯÇÒ ¼ö ÀÖ´Ù.)

   4. factory : dbcp¸¦ À¯¿ëÇÏ´Â °ü¸® Ŭ·¡½º (Tomcat 5.x¿¡ ±âº»À¸·Î Á¸ÀçÇϴ Ŭ·¡½º)

      (Á÷Á¢ DBCP Ŭ·¡½º¸¦ ÁöÁ¤Çصµ µ¿ÀÛÇϴµ¥ ¹®Á¦°¡ ¾ø´Ù.)

      (±×·¯³ª, Factory Ŭ·¡½º¸¦ ÀÌ¿ëÇϸé Á»´õ ¾ÈÁ¤ÀûÀ¸·Î °ü¸®ÇÒ ¼ö ÀÖ´Ù.)

   5. driverClassName : JDBC¸¦ ÀÌ¿ëÇϱâ À§ÇÑ µå¶óÀ̹ö Ŭ·¡½º

   6. url : DBÀÇ Á¢¼Ó URL (¼Ó¼ºÀ¸·Î ÀÚµ¿ Àç Á¢¼ÓÀ» ¼±ÅÃÇß´Ù.)

   7. username : DBÀÇ °èÁ¤ ¸í

   8. password : °èÁ¤¿¡ ´ëÇÑ ºñ¹Ð¹øÈ£

   9. maxActive : ÃÖ´ë Á¢¼Ó Çã¿ë °³¼ö

   10. maxIdle : DB Pool¿¡ ¿©ºÐÀ¸·Î ³²°ÜÁú ÃÖ´ë Connection °³¼ö

   11. maxWait : DB ¿¬°áÀÌ ¹ÝȯµÇ´Â TimeoutÀÇ ÃÖ´ë ½Ã°£ (-1Àº ¹«ÇÑ ´ë±â)

   12. removeAbandoned : ConnectionÀÌ À߸ø °ü¸®µÇ¾î ¹ö·ÁÁø ¿¬°áÀ» ã¾Æ ÀçÈ°¿ëÇÒ °ÍÀÎÁöÀÇ ¿©ºÎ ¼³Á¤

       (true ¼³Á¤ÀÏ ¶§ ÇöÀç DB ¿¬°áÀÌ ÀûÀ¸¸é ¹ö·ÁÁø ¿¬°áÀ» ã¾Æ ÀçÈ°¿ë)

   13. removeAbandonedTimeout : ¹ö·ÁÁø ¿¬°á·Î ÀνÄÇÒ ±âº» ½Ã°£ ¼³Á¤

       (ÃÊ ´ÜÀ§·Î ÇØ´ç ½Ã°£ÀÌ Áö³ª¸é ¹ö·ÁÁø ¿¬°á·Î ÀνÄÇÑ´Ù.)

   -->   

</Context>


(2) WEB-INF/web.xml
<servlet-mapping>
<servlet-name>My_06</servlet-name>
<url-pattern>/Servlet_06</url-pattern>
</servlet-mapping>
<resource-ref>
<description>My SQL Resource</description><!-- ¸®¼Ò½º ¼³¸í -->
<res-ref-name>jdbc/myconn</res-ref-name><!-- ¸®¼Ò½º À̸§(JNDI¸í) -->
<res-type>javax.sql.DataSource</res-type><!-- ¸®ÅÏ Type -->
<res-auth>Container</res-auth><!-- °ü¸® °èÃþ -->
</resource-ref>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>


(3) ÀÚ¹ÙÄÚµå

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.sql.*;

import javax.sql.*;//DataSource Ŭ·¡½º¸¦ À§ÇØ »ç¿ë

import javax.naming.*;//JNDI¸¦ À§ÇØ »ç¿ë


public class Round16_06_Servlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

request.setCharacterEncoding("euc-kr");

String subject = request.getParameter("subject");

String author = request.getParameter("author");

String contents = request.getParameter("contents");

response.setContentType("text/html;charset=euc-kr");

PrintWriter out = response.getWriter();

out.println("<html><body><center><h3>");

Connection conn = null;

PreparedStatement pstmt = null;

String query = "insert into Round16_Table_01 values (null, ?, ?, ?)";

try {

Context context = new InitialContext();

//JNDI¸¦ ÀÌ¿ëÇϱâ À§ÇÑ °´Ã¼ »ý¼º

DataSource source = (DataSource)context.lookup("java:comp/env/jdbc/myconn");

  // lookup(): µî·ÏµÈ naming ¼­ºñ½º·ÎºÎÅÍ ÀÚ¿øÀ» ã°íÀÚÇÒ ¶§ »ç¿ëÇÏ´Â ¸Þ¼­µå

//context °´Ã¼¸¦ ÅëÇØ À̸§À¸·Î Resource¸¦ ȹµæÇÑ´Ù. 

  //("jdbc/myconn"): JNDI ¼­ºñ½º¿¡ Á¢±ÙÇϱâ À§ÇÑ ±âº» À̸§(ÀÌ ÀÚ¿øÀ» ã°Ú´Ù.--> web.xmlÀÇ <res-ref-name>

//JNDIÀÇ ¸ðµç À̸§Àº ±âº»ÀûÀ¸·Î java:comp/env¿¡ µî·ÏµÇ¾î ÀÖ´Ù.

//ÇØ´ç ¿µ¿ª¿¡¼­ jdbc/myconnÀ¸·Î ¼³Á¤µÈ À̸§À» ȹµæÇÑ´Ù.

conn = source.getConnection();

//source·Î ºÎÅÍ Connection °´Ã¼¸¦ ȹµæÇÑ´Ù. 

//ÀÌ °´Ã¼´Â ÀÌÁ¦ ContainerÀÇ DBCP¿¡ ÀÇÇØ °ü¸®µÈ´Ù. 

}catch(Exception e) {}

try {

pstmt = conn.prepareStatement(query);

pstmt.setString(1, subject);

pstmt.setString(2, author);

pstmt.setString(3, contents);

int res = pstmt.executeUpdate();

if(res > 0)

out.println("Success Save!!");

pstmt.close();

conn.close();

}catch(Exception e) {

out.println("SQL Process Error : " + e.getMessage());

}

out.println("</h3></center></body></html>");

}

}





Ãâó: http://devbox.tistory.com/entry/JSP-Ä¿³Ø¼Ç-Ç®-1 [ÀåÀΰ³¹ßÀÚ¸¦ ²Þ²Ù´Â :: ±â·ÏÇÏ´Â °ø°£]