| Prepared Statement»ç¿ëÀÇ ±âº»ÀûÀÎ ¿ø¸®¸¦ | 2005/01/14 |
|
 |
|
|
|
Prepared Statement»ç¿ëÀÇ ±âº»ÀûÀÎ ¿ø¸®¸¦ ±â¼úÇÏ´Â ³»¿ëÀÔ´Ï´Ù. ¾Æ·¡ÀÇ ±ÛÀº ÇÑ¼Ö ÅÚ·¹ÄÄÀÇ ¼Á¤Èñ¾¾°¡ www.ejbinfo.comÀÇ ±â»ç¸¦ ¹ø¿ªÇÑ °ÍÀÔ´Ï´Ù
StatementÀÇ ±Ã±ÝÁ¡À» ÇØ°áÇϴµ¥ µµ¿òÀÌ µÇ¾úÀ¸¸é ÇÕ´Ï´Ù. -Áß¿ÏÁÖ-
Why Prepared Statements are important and how to use them "properly"
.
v 1.0
JDBC¿¡ °ü·ÃµÈ »çÇ×À» ´õ º¸½Ç·Á¸é..
http://home.megapass.co.kr/~to2space/
------------------------------------------------
Why Prepared Statements are important and how to use them "properly".
¿Ö PreparedStatements´Â Áß¿äÇÏ°í ¾î¶»°Ô À̵éÀ» ¡°ÀûÀýÈ÷¡± ÀÌ¿ëÇØ¾ßÇÒ±î¿ä?
µ¥ÀÌÅÍ º£À̽º´Â ´Ù·ç±â Èûµé´Ù. ¸¹Àº ¼öÀÇ Å¬¶óÀÌ¾ðÆ®·ÎºÎÅÍ µ¿½Ã¿¡
sqlÄõ¸®¹®À» ¹Þ¾ÆµéÀÌ°í ¸¹Àº µ¥ÀÌÅÍ¿¡ ´ëÇØ¼ °¡´ÉÇÑ È¿À²ÀûÀ¸·Î Äõ¸®¸¦ ½ÇÇàÇÑ´Ù.
StatementµéÀ» ¼öÇàÇÏ´Â °ÍÀº ÆÛÆ÷¸Õ½º¸¦ ¸¹ÀÌ Àâ¾Æ ¸Ô´Â ÀÛ¾÷ÀÌÁö¸¸ µ¥ÀÌÅÍ º£À̽ºµéÀº
ÇöÀç °¡´ÉÇÏ´Ù¸é ÀÌ·± ¿À¹öÇìµå¸¦ ÁÙÀÌ´Â ¹æ½ÄÀ¸·Î ±â·ÏµÇ¾îÁø´Ù.
±×·¯³ª ¸¸¾à ¿ì¸®°¡ ÃÖÀûÈ °úÁ¤¿¡ ÁßÁ¡À» µÐ´Ù¸é ÀÌ·¯ÇÑ °úÁ¤Àº °³¹ßÀÚÀÇ µµ¿òÀ»
ÇÊ¿ä·Î ÇÑ´Ù. ÀÌ ±â»ç´Â Á¤È®ÇÑ PreparedStatementsÀÇ »ç¿ëÀÌ ¾ó¸¶³ª µ¥ÀÌÅÍ º£À̽º°¡
ÀÌ·¯ÇÑ ÃÖÀûÈ °úÁ¤À» µµ¿Í ÁÙ ¼ö ÀÖ´ÂÁö¸¦ º¸¿©ÁØ´Ù.
How does a database execute a statement?
¾î¶»°Ô µ¥ÀÌÅÍ º£À̽º°¡ statement¸¦ ¼öÇàÇÒ±î¿ä?
ºÐ¸íÈ÷, ÀÌ ±Û¿¡¼´Â ¸¹Àº ¼¼ºÎÀûÀÎ °ÍÀ» ±â´ëÇÏÁö ¸¶½Ê½Ã¿À.
¿ì¸®´Â ´ÜÁö ÀÌ ±â»çÀÇ Áß¿äÇÑ Ãø¸éÀ» °ËÁõÇϱ⸸ ÇÒ °ÍÀÔ´Ï´Ù
µ¥ÀÌÅÍ º£À̽º°¡ ÇϳªÀÇ statement¸¦ ¹ÞÀ» ¶§ µ¥ÀÌÅÍ º£À̽º ¿£ÁøÀº óÀ½ ¹®ÀåÀ»
parse½Ã۰í À߸øµÈ ¹®¹ýÀ» °Ë»çÇÑ´Ù. ÀÏ´Ü statement°¡ parseµÇ¾îÁö°í
±×·± ´ÙÀ½ µ¥ÀÌÅÍ º£À̽º´Â statement ½ÇÇàÇϱâ À§ÇÑ °¡Àå È¿À²ÀûÀÎ ¹æ¹ýÀ» ¾Ë¾Æ¾ßÇÑ´Ù.
À̰ÍÀº °è»ê»ó ¾ÆÁÖ Å« ºñ¿ëÀÌ µé¼ö°¡ ÀÖ´Ù.(¼¹ö ¼º´ÉÀ» ¼ø°£ÀûÀ¸·Î ¸¹ÀÌ Àâ¾Æ¸Ô´Â´Ù)
µ¥ÀÌÅÍ º£À̽º´Â µµ¿òÀÌ µÈ´Ù¸é ¾î¶² À妽º¸¦ ¾µ°ÍÀÎÁö ȤÀº Å×ÀÌºí¿¡ ÀÖ´Â ¸ðµç row¸¦
´Ù Àоî¾ß ÇÏ´Â Áö¸¦ È®ÀÎÇÑ´Ù. °á±¹ µ¥ÀÌÅÍ º£À̽º´Â ¹«¾ùÀÌ °¡Àå ÁÁÀº ¹æ¹ýÀÎÁö¸¦
ÀÌÇØÇϴµ¥, ƯÁ¤ÇÑ µ¥ÀÌÅÍ¿¡ ´ëÇØ¼ Åë°è¸¦ ÀÌ¿ëÇÑ´Ù.
ÀÏ´Ü Äõ¸® Ç÷£query plan( ¿ªÀÚÁÖ query¸¦ ¾ó¸¶³ª È¿À²ÀûÀ¸·Î ÇÒ ¼ö ÀÖ´ÂÁö¿¡
´ëÇÑ Ç÷£, ¹Ì¸® µ¥ÀÌÅÍ º£À̽º´Â Ç÷£À» ¼¼¿î ÈÄ Äõ¸®¸¦ ÁøÇàÇÑ´Ù.)ÀÌ ÀÌ·ç¾îÁö¸é
À̰ÍÀº µ¥ÀÌÅÍ º£À̽º¿£Áø¿¡ ÀÇÇØ ¼öÇàµÇ¾îÁø´Ù.
ÀÌ·± µ¥ÀÌÅÍ¿¡ ´ëÇÑ Á¢±Ù °èȹÀÇ »ý¼ºÀº cpu Àü¿øÀ» ¼Ò¸ð ½ÃŲ´Ù.
°ü³äÀûÀ¸·Î ¸¸¾à ¿ì¸®°¡ ¶È°°Àº statement ¸¦ µ¥ÀÌÅÍ º£À̽º¿¡ µÎ¹øÂ°·Î º¸³½´Ù¸é
¿ì¸®´Â µ¥ÀÌÅÍ º£À̽º°¡ ù¹ø ° statement¿¡´ëÇÑ Á¢±Ù °èȹÀ» Àç»ç¿ëÇϵµ·Ï ÇÏ´Â °ÍÀ»
¼±È£ÇÒ °ÍÀÌ´Ù. À̰ÍÀº ¶Ç Çѹø Á¢±Ù °èȹÀ» »ý¼º ½ÃŰ´Â °Í º¸´Ù ÀûÀº cpuÁ¡À¯À²À»
»ç¿ëÇÒ °ÍÀÌ´Ù.
Statement Caches
µ¥ÀÌÅÍ º£À̽ºµéÀº ÀÌ·± ¹æ½ÄÀ¸·Î Á¶ÀýµÇ¾îÁø´Ù.
µ¥ÀÌÅÍ º£À̽º´Â º¸Åë ÀÏÁ¾ÀÇ statement cacheÀ» °¡Áö°í ÀÖ´Ù.
ÀÌ cache´Â statement ÀÚü¸¦ Ű·Î½á »ç¿ëÇÏ°í µ¥ÀÌÅÍ¿¡ ´ëÇÑ Á¢±Ù °èȹÀº ÀÌ cache ¼Ó¿¡
´ëÀÀµÇ´Â statement¿Í ÇÔ²² ÀúÀåµÇ¾î ÀÖ´Ù.
À̰ÍÀº µ¥ÀÌÅÍ º£À̽º ¿£ÁøÀÌ ÀÌÀü¿¡ ½ÇÇà µÇ¾ú´ø statementµé¿¡ ´ëÇÑ Ç÷£À»
Àç»ç¿ëÇÏ°Ô ÇÑ´Ù. ¿¹¸¦ µé¾î ¸¸¾à ¿ì¸®°¡ µ¥ÀÌÅÍ º£À̽º¿¡
¡°select a,b from t where c = 2¡±¿Í °°Àº statement¸¦ º¸³Â´Ù¸é °è»êµÈ ½ÇÇà Ç÷£Àº
cache¿¡ ÀúÀåµÇ¾îÁø´Ù. ¸¸¾à ¿ì¸®°¡ ¶È°°Àº statementÀ» ¶Ç´Ù½Ã º¸³»¸é µ¥ÀÌÅÍ º£À̽º´Â
Áö³ ¹ø¿¡ ¾´ Á¢±Ù °èȹÀ» Àç»ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾î¼ cpu »ç¿ëÀ²À» ÁÙÀÌ°Ô ÇØÁØ´Ù.
Àüü statement°¡ ۶ó´Â °ÍÀ» ÁÖÁöÇϰí, ¿¹¸¦ µé¾î¼ ¿ì¸®°¡ ³ªÁß¿¡
¡°select a,b from t where c = 3¡± ¶ó´Â statement¸¦ º¸³Â´Ù¸é
À̰ÍÀº Á¢±Ù °èȹÀ» ¹ß°ß ÇÒ ¼ö ¾øÀ»Áöµµ ¸ð¸¦ °ÍÀÌ´Ù. À̰ÍÀº c=3ÀÌ cache¿¡ ÀúÀåµÈ
Ç÷£ÀÇ c=2¿Í ´Ù¸£±â ¶§¹®ÀÌ´Ù.
¿¹¸¦ µé¾î,
for(int I = 0; I < 1000; ++I) {
PreparedStatement ps = conn.prepareStatement("select a,b from t where c = " + I);
ResultSet rs = Ps.executeQuery();
rs.close();
ps.close();
}
¿©±â¿¡¼´Â cache´Â »ç¿ëµÇÁö ¾ÊÀ» °ÍÀÌ´Ù. For loopÀÇ °¢°¢ÀÇ I°ª¿¡ ÇØ´çÇÏ´Â
´Ù¸¥ sql¹®À» µ¥ÀÌÅÍ º£À̽º¿¡ º¸³½´Ù. »õ·Î¿î Á¢±Ù °èȹÀÌ °¢°¢ÀÇ I °ªÀÇ ÇØ´çÇÏ´Â
sql¿¡ ÀÇÇØ °è»êµÇ¾îÁö°í ±âº»ÀûÀ¸·Î ¿ì¸®´Â ÀÌ·± Á¢±Ù ¹æ½ÄÀ» ÀÌ¿ëÇϹǷνá cpu »ç¿ëÀ»
¼Ò¸ð½ÃÄÑ ¹ö¸°´Ù. ±×·¸Áö¸¸, ´ÙÀ½ ¿¹Á¦¸¦ º¸¸é
PreparedStatement ps = conn.prepareStatement("select a,b from t where c = ?");
for(int I = 0; I < 1000; ++I) {
ps.setInt(1, I);
ResultSet rs = ps.executeQuery();
rs.close();
ps.close();
}
À§ÀÇ ¿¹Á¦´Â ´õ¿í´õ È¿À²ÀûÀÏ °ÍÀÌ´Ù. µ¥ÀÌÅÍ º£À̽º¿¡ º¸³»¾îÁö´Â À§ÀÇ sql¹®¿¡¼ ?
Ç¥½Ã´Â ´ëÀÀµÇ´Â ÆÄ¶ó¸ÞÅÍ °ªÀ» ¹Þ°í ÀÖ´Ù. À̰ÍÀº ¸ðµç iteration¿¡ ÇØ´çÇÏ´Â sql
¹®ÀåÀÌ ÇϳªÀÇ °°Àº sql¹®ÀåÀ¸·Î "c=?" ¿¡ ´ëÀÀµÇ´Â ´Ù¸¥ ÆÄ¶ó¸ÞŸ °ª°ú ÇÔ²²
µ¥ÀÌÅÍ º£À̽º¿¡ º¸³»¾îÁø´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. À̰ÍÀº µ¥ÀÌÅÍ º£À̽º°¡ À§
¿¹Á¦ÀÇ ÇϳªÀÇ ¹®Àå¿¡ ´ëÇÑ Á¢±Ù °èȹÀ» ÀÌ¿ëÇÏ°Ô Çϰí ÇÁ·Î±×·¥ÀÌ µ¥ÀÌÅÍ º£À̽º
³»ºÎ¿¡¼ ´õ¿í ´õ È¿À²ÀûÀ¸·Î ¼öÇàµÇ°Ô ÇÑ´Ù. À̰ʹ ±âº»ÀûÀ¸·Î
¿©·¯ºÐÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ´õ ºü¸£°Ô ¼öÇàµÇ°Ô Çϰųª ¶Ç´Â ´õ ¸¹Àº
cpu ÀÇ ºñÁ¡À¯ ºÎºÐÀ» µ¥ÀÌÅÍ º£À̽ºÀÇ ´Ù¸¥ À¯Àú¿¡°Ô Á¦°ø µÇ°ÔÇÑ´Ù.
PreparedStatements and J2EE servers
¿ì¸®°¡ J2EE¼¹ö¸¦ ÀÌ¿ëÇÒ ¶§ »óȲÀº Á»´õ º¹ÀâÇØÁú¼ö ÀÖ´Ù.
º¸Åë a prepared statement´Â ÇϳªÀÇ ´ÜÀÏ µ¥ÀÌÅÍ º£À̽º connection°ú °ü·ÃÀÌ ÀÖ´Ù.
ConnectionÀÌ ´ÝÇûÀ» ¶§ a prepared statement´Â ¹ö·ÁÁø´Ù.
º¸Åë a fat Client¹«°Å¿î Ŭ¶óÀÌ¾ðÆ® ¾ÖÇø®ÄÉÀ̼Ç(¿ªÀÚÁÖ ¼¹ö¿¡ ÁÖ¿ä ºñÁî´Ï½º ·ÎÁ÷À»
µÎÁö ¾Ê°í Ŭ¶óÀÌ¾ðÆ®¿¡ ÁÖ¿ä ºñÁî´Ï½º ·ÎÁ÷À» µÐ ÇüÅÂ)Àº connectionÀ» Çϳª °¡Áö°í
¾ÖÇø®ÄÉÀ̼ÇÀÇ Á¾·á ½ÃÁ¡±îÁö °¡Áö°í ÀÖ´Ù.
À̰ÍÀº ¶ÇÇÑ ¸ðµç prepared statementµéÀ» ¡°°Ý·ÂÇϰԡ± ȤÀº ¡°¿Ï¸¸Çϰԡ± ¸¸µç´Ù.
¡°°Ý·ÄÇϰԡ± eagerly¶ó´Â Àǹ̴ ¸ðµç prepared statementµéÀÌ ¾ÖÇø®ÄÉÀ̼ÇÀÌ
½ÃÀÛÇÒ ¶§ Çѹø¿¡ ¸¸µé¾î Áø´Ù´Â °ÍÀÌ°í ¡°¿Ï¸¸Çϰԡ±
lazilyÀÇ Àǹ̴ a prepared statementµéÀÌ »ç¿ëµÉ ¶§¿¡ ¸¸µé¾îÁø´Ù´Â °ÍÀÌ´Ù.
ÀüÀÚ´Â ¾ÖÇø®ÄÉÀ̼ÇÀÌ ±âµ¿ÇÒ ¶§ Áö¿¬ Çö»óÀ» ÁÖ³ª ±âµ¿Çϸé ÃÖÀûÀÇ Á¶°Ç¿¡¼ Àß ¼öÇàµÈ´Ù.
(¿ªÀÚ ´ç¿¬È÷ ¸ðµç prepared statementµéÀÌ ¸¸µé¾îÁö¹Ç·Î ´À¸®´Ù)
ÈÄÀÚ´Â ¾î¶°ÇÑ »çÀüÀÇ Áغñ°¡ ÀÌ·ç¾î ÁöÁö ¾Ê´Â´Ù ±×·¯³ª ¾ÖÇø®ÄÉÀ̼ÇÀÇ µ¿ÀÛÇÔ¿¡ µû¶ó
prepared statementµéÀÌ ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀÇÇØ óÀ½À¸·Î »ç¿ëµÇ¾îÁú ¶§
prepared statementµéÀº ¸¸µé¾îÁø´Ù. À̰ÍÀº ¸ðµç ¹®ÀåµéÀÌ ÁغñµÇ¾úÀ» ¶§±îÁö °øÆòÇÏÁö
¸øÇÑ ¼º´ÉÀ» ³ªÅ¸³½´Ù. ±×·¯³ª °á±¹¿£ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¾ÈÁ¤ÀûÀ¸·Î ¼öÇàµÇ°í ¡°°Ý·ÄÇϰÔ
¼öÇàµÇ´Â ¾ÖÇø®ÄÉÀ̼ǡ± º¸´Ù ºü¸¥ ¼º´ÉÀ» ³ªÅ¸³½´Ù. ¾î¶² °ÍÀÌ ÃÖ°í³Ä´Â ¿©·¯ºÐÀÌ
¡°ºü¸¥ ½ÃÀÛÀ» ¿øÇϴ°¡?¡± ¶Ç´Â ¡°Æò±ÕÀûÀÎ ¼º´ÉÀ» ¿øÇÏ´Â °¡?¡±¿¡ ´Þ·ÁÀÖ´Ù.
J2EE ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀÖ¾î¼ÀÇ ¹®Á¦´Â ÀÌó·³ µ¿ÀÛÇÏÁö ¾Ê´Â °ÍÀÌ´Ù.
À̰ÍÀº ´ÜÁö ÇϳªÀÇ ¿äû ±â°£ µ¿¾È ÇϳªÀÇ connection¿¡ ´ëÇØ¼ À¯ÁöµÈ´Ù.
ÀÌ´Â ¿äûÀÌ ½ÇÇàµÉ ¶§ ¸¶´Ù prepared statementµéÀ» ¹Ýµå½Ã ¸¸µé¾î¾ß ÇÑ´Ù´Â Àǹ̴Ù.
À̰ÍÀº ¸Å¹ø ¿äûÀÌ µÉ ¶§ ¸¶´Ù ¸¸µé¾îÁö´Â °Íº¸´Ù prepared statementµéÀÌ Çѹø¿¡
¸¸µé¾îÁö´Â ¹«°Å¿î Ŭ¶óÀÌ¾ðÆ® Á¢±Ù ¹æ½ÄÀÇ °æ¿ì ¸¸Æ´ È¿À²ÀûÀÌÁö ¾Ê´Ù.
J2EE º¥´õµéÀº À̸¦ ¾Ë°í ¼º´É °¨¼Ò¸¦ ÇÇÇϱâ À§Çؼ connetion poolingÀ»
µðÀÚÀÎ ÇÏ¿´´Ù. J2EE ¼¹ö´Â ¿©·¯ºÐÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡ ÇϳªÀÇ connectionÀ» Á¦°øÇßÀ» ¶§,
À̰ÍÀº ½ÇÁúÀûÀÎ connectionÀÌ ¾Æ´Ï¶ó ¿©·¯ºÐÀº ÇϳªÀÇ wrapper(¿ªÀÚÁÖ: ½ÇÁúÀûÀÎ
connectionÀÌ ¾Æ´Ñ º¥´õµé¿¡ ÀÇÇØ ¸¸µé¾îÁö »õ·Î¿î
Ŭ·¡½º¿¡ ÀÇÇØ ½×¿©Áø wrapped°ÍÀ» ¸»ÇÑ´Ù) ¸¦ ¾òÀº °ÍÀÌ µÈ´Ù.
¿©·¯ºÐÀº À̰ÍÀ» ÁÖ¾îÁø connection¿¡ ´ëÇÑ Å¬·¡½ºÀÇ À̸§À» º¸°í È®ÀÎ ÇÒ ¼ö ÀÖ´Ù.
À̰ÍÀº JDBC connecion´Â ¾Æ´Ï°í ¿©·¯ºÐÀÇ application server¿¡ ÀÇÇØ ¸¸µé¾îÁø
Ŭ·¡½ºÀÏ °ÍÀÌ´Ù.
¸ðµç JDBC°´Ã¼´Â applicaion serverÀÇ Ä¿³Ø¼Ç ¸Þ´ÏÁ®¿¡ ÀÇÇØ °ü¸®µÇ¾îÁú °ÍÀÌ´Ù.
¸ðµç JDBC ResultSets, statements, CallableStatements, preparedStatementsµîÀº
wrapperµÇ¾î¼ proxy°´Ã¼(¿ªÀÚ ÁÖ ¿©±â¼´Â ½ÇÁúÀûÀÎ JDBCÀÇ °´Ã¼µéconnection,
resultsetµîÀ» ´ë½ÅÇØ¼ application server¿¡¼ ¸¸µé¾îÁø Ŭ·¡½º)·Î¼
¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î Á¦°øµÉ °ÍÀÌ´Ù. ¿©·¯ºÐÀÌ ConnectionÀ» ´ÝÀ» ¶§ ÀÌµé °´Ã¼´Â
¹«¿ëÇÏ´Ù°í Ç¥½ÃµÇ°í jvm¿¡ ÀÇÇÑ garbage collect°¡ ÀÌ·ç¾îÁø´Ù.
º¸Åë ¿©·¯ºÐÀÌ ÇϳªÀÇ connection¸¦ ´ÝÀ¸¸é jdbc driver´Â connectionÀ» ´Ý´Â´Ù.
¿ì¸®´Â ÀÌ connectionÀÌ J2EE ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀÇÇØ close°¡ ºÒ·ÁÁú ¶§ poolÇ®·Î
µÇµ¹¾Æ°¥¼ö Àֱ⸦ ¿øÇÑ´Ù. ÀÌ·¸°Ô Çϱâ À§Çؼ ½ÇÁ¦ connection°ú À¯»çÇÑ
proxy connetionÀ» ¸¸µç´Ù.
À̰ÍÀº ½ÇÁ¦ÀÇ connectionÀÇ reference¸¦ °¡Áø´Ù. ¿ì¸®°¡ connection¿¡ ´ëÇØ¼ ¾î¶²
¸Þ¼Òµå¸¦ È£ÃâÇÒ ¶§ ÀÌ proxy´Â È£ÃâÀ» ½ÇÁúÀûÀÎ conncetionÀ¸·Î È£ÃâÇÑ´Ù. ±×·¯³ª
¿ì¸®°¡ ½ÇÁúÀûÀÎ connectionÀÇ close ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¶§ ½ÇÁ¦ÀÇ connectionÀÇ close¸¦
È£ÃâÇÏ´Â ´ë½Å °£´ÜÇÏ°Ô connectionÀ» connection pool¿¡ ¹Ý³³ÇÑ´Ù.
±×¸®°í proxy connectionÀÌ ºÒÇÊ¿äÇϴٴ ǥ½Ã¸¦ ÇÑ´Ù, ¸¸¾à Ç¥½ÅµÈ
connectionÀ» ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀÇÇØ ´Ù½Ã ¾²¿©Áø´Ù¸é exception¿¡·¯¸¦ ¹ß»ý ½Ãų°ÍÀÌ´Ù.
ÀÌ wrappingÀº ¸Å¿ì À¯¿ëÇÏ°í ¶Ç ¿ª½ÃJ2EE ¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö ¼öÇàÀ» µµ¿Í ¿©·¯°¡Áö
ÀÌÇØÇϱ⠽¬¿î ¹æ¹ýÀ¸·Î prepared statements¿¡ ´ëÇÑ µµ¿òÀ» ÁÙ°ÍÀÌ´Ù.
¾ÖÇø®ÄÉÀ̼ÇÀÌ Connection.prepareStatementÀ» È£ÃâÇÒ ¶§ À̰ÍÀº driver¿¡ ÀÇÇØ
a PreparedStatement ·Î µÇµ¹¾Æ °£´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀº connectionÀ» °¡Áö°í ÀÖ´Â
µ¿¾È ÇÚµéÀ» À¯ÁöÇÏ°í ¿äûÀÌ ³¡³µÀ» ¶§ Connection.prepareStatement¸¦ ´Ý°í
connectionÀ» ´Ý´Â´Ù. ±×·¯³ª connectionÀÌ pool·Î ¹Ý³³µÈ ÈÄ ³ªÁß¿¡ °°Àº ȤÀº
´Ù¸¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀÇÇØ Àç»ç¿ëµÈ´Ù¸é ±×¶§ ¸¸¾à ±× ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¶ÇÇÑ °°Àº
¹®ÀåÀ» ÀÌ»óÀûÀ¸·Î ÁغñÁßÀ̶ó¸é, ¿ì¸®´Â °°Àº PreparedStatement°¡
¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î °¡±â¸¦ ¿øÇÒ °ÍÀÌ´Ù.
J2EE PreparedStatement Cache
À̰ÍÀº J2EE server connection pool manager¿¡ ÀÖ´Â cacheÀ» ÀÌ¿ëÇØ¼ ÀÌ·ç¾îÁø´Ù.
J2EE server´Â Ç®¿¡ ÀÖ´Â °¢°¢ÀÇ database connection¿¡ ´ëÇÑ prepared statements ÀÇ
¸ðµç ¸®½ºÆ®¸¦ À¯Áö ÇÑ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀÌ Çϳª¿¡ connection¿¡ ´ëÇØ¼
prepared statement¸¦ È£ÃâÇÏ¸é ¼¹ö´Â ±× ¹®ÀåÀÌ ¹Ì¸® ÁغñµÇ¾î Àִ°¡¸¦ È®ÀÎÇÑ´Ù.
¸¸¾à ±×°ÍÀÌ ¹Ì¸® Áغñ µÇ¾ú´Ù¸é PreparedStatement °´Ã¼°¡ cache¼Ó¿¡ ÀÖÀ» °ÍÀ̰í
À̰ÍÀº ¾ÖÇø®ÄÉÀ̼ǷΠ¹Ýȯ µÈ´Ù. ¸¸¾à ±×·¸Áö ¾Ê´Ù¸é ÀÌ È£ÃâÀº
jdbc driver·Î ³Ñ°ÜÁö°í ´Ù½Ã Äõ¸®/ PreparedStatement °´Ã¼°¡ ±× connection cache¿¡
Ãß°¡ µÈ´Ù. Jdbc driver°¡ ÀÌ·¸°Ô µ¿ÀÛÇϱ⠶§¹®¿¡ ¿ì¸®´Â connection¸¶´Ù
ÇϳªÀÇ cache¸¦ ÇÊ¿ä·ÎÇÑ´Ù. ¿ì¸®°¡ ÀÌ cacheÀÇ ÀÕÁ¡À» Àß ÀÌ¿ëÇϱ⠿øÇÑ´Ù¸é
¾Õ¿¡¼ ¸»ÇÑ ¹Ù¿Í °°ÀÌ ÆÄ¶ó¸ÞÅÍÈ µÈ Äõ¸®¸¦ »ç¿ëÇØ¼ cache¼Ó¿¡ ¹Ì¸® ÁغñµÈ °ÍÀ»
»ç¿ëÇÑ´Ù. ´ëºÎºÐÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö´Â ÀÌ prepared statement cacheÀÇ »çÀÌÁ
Á¶Àý ÇÒ ¼ö ÀÖµµ·Ï µÇ¾îÀÖ´Ù.
Summary
±×·¡¼ ¿ì¸®´Â prepared statements¸¦ ÆÄ¶ó¸ÞÅÍ¿Í ÇÔ²² »ç¿ëÇØ¾ßÇÑ´Ù.
À̰ÍÀº ¹Ì¸® ¸¸µé¾îÁø Á¢±Ù °èȹÀ» Àç »ç¿ëÇϹǷμ µ¥ÀÌÅÍ º£À̽º¿¡ ´ëÇÑ ·Îµå¸¦
ÁÙ¿© ÁØ´Ù.
ÀÌ cache´Â µ¥ÀÌÅÍ º£À̽º°¡ È®ÀåµÈ °ÍÀÌ¾î¼ ¿©·¯ºÐÀÇ ¸ðµç ¾ÖÇø®ÄÉÀ̼ÇÀÌ
À¯»çÇÑ ÆÄ¶ó¸ÞÅÍÈµÈ sqlÀ» »ç¿ëÇϸé ÇϳªÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ´Ù¸¥ ¾ÖÇø®ÄÉÀ̼ǿ¡
ÀÇÇØ »ç¿ëµÈ prepared statements¸¦ ÀÌ¿ëÇϹǷΠij½Ã ½ºÅ°¸¶ÀÇ È¿À²¼ºÀ» Áõ´ë
½Ãų ¼ö ÀÖ´Ù.
À̰ÍÀº application server »ç¿ëÀÇ ÀÌÁ¡ÀÌ´Ù. ¿Ö³ÄÇÏ¸é µ¥ÀÌÅÍ º£À̽º¿¡ Á¢±ÙÇÏ´Â
·ÎÁ÷Àº µ¥ÀÌÅÍ Á¢±Ù °èÃþ¿¡ ÁýÁßÈ µÇ¾î¾ßÇϱ⠶§¹®ÀÌ´Ù.
µÎ¹øÂ°·Î prepared statementsÀÇ ¿Ã¹Ù¸¥ »ç¿ëÀº ¶ÇÇÑ ¿©·¯ºÐÀÌ ¾ÖÇø® ÄÉÀÌ¼Ç ³»ºÎÀÇ
prepared statements cache¸¦ Àß ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. À̰ÍÀº ¾ÖÇø®ÄÉÀ̼ÇÀÌ
ÀÌÀü¿¡ »ç¿ëÇß´ø prepared statements È£ÃâÀ» Àç»ç¿ëÇØ¼ JDBC driver¿¡ ´ëÇÑ È£ÃâÀÇ
¼ö¸¦ °¨¼Ò½ÃÄÑ ¼º´ÉÀÇ Çâ»óÀ» ½ÃŲ´Ù. À̰ÍÀº Çö¸íÇÑ fat clients »ç¿ëÀ» È¿À²ÀûÀ¸·Î
±×¸®°í °æÀï·ÂÀÖ°Ô ¸¸µé°í
µ¶Á¡ÀûÀÎ connectionÀ» À¯ÁöÇÒ ¼ö ¾ø´Â ºÒÀÌÀÍÀ» Á¦°ÅÇÑ´Ù.
¸¸¾à ÆÄ¶ó¸ÞÅ¸ÈµÈ prepared statements¸¦ »ç¿ëÇÑ´Ù¸é ¿©·¯ºÐÀº µ¥ÀÌÅÍ º£À̽º¿Í
Äڵ带 °¡Áö°í ÀÖ´Â application serverÀÇ È¿À²À» ³ôÀÏ ¼ö ÀÖ´Ù. ÀÌµé °³¼±µÈ Á¡Àº
¿©·¯ºÐÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¼º´ÉÀ» Çâ»ó ½Ãų¼ö ÀÖ°Ô ÇÒ°ÍÀÌ´Ù |
|
|
|
|
| |