·Î±×ÀÎ | ȸ¿ø°¡ÀÔ (´º½º·¹ÅͽÅû) | SITEMAP
   
  °³¹ß   Ç÷§Æû   ½Ã½ºÅÛ   ¸Å´ÏÁö¸ÕÆ®   Àüü±â»ç  
ÀÚ¹Ù
´å³Ý
C/C++
DB
¸ðµ¨¸µ
À¥°³¹ß
±âŸ
À¯´Ð½º/¸®´ª½º
À©µµ¿ì
±âŸ
¼­¹ö
³×Æ®¿öÅ©
º¸¾È
±âŸ
BM
PM
±âŸ
 
±â»çÀúÀå
0
 
¸¶ÀÌ ½ºÅ©·¦
[ÇÁ·¹ÀÓ¿öÅ© Àü·« ¨ê] ÀÚ¹Ù ÇÁ·¹ÀÓ¿öÅ© Ȱ¿ë Àü·«

±èÅ¿Ï(´ë¿ìÁ¤º¸½Ã½ºÅÛ)   2007/10/11
1ºÎ | ¼º°øÀûÀÎ ÇÁ·ÎÁ§Æ®¸¦ À§ÇÑ ÇÁ·¹ÀÓ¿öÅ©ÀÇ Àç¹ß°ß
2ºÎ | JBOSS ³»ºÎ ±¸Á¶ ºÐ¼®À» ÅëÇÑ ÇÁ·¹ÀÓ¿öÅ© À̸ÓÀü½ºÀÇ ¹ÌÇÐ
3ºÎ | DxFramework¸¦ ÀÌ¿ëÇÑ ´å³Ý ÇÁ·¹ÀÓ¿öÅ© Ȱ¿ë Àü·«
4ºÎ | iBatis¿Í Acegi Securtiy¸¦ ÀÌ¿ëÇÑ ÀÚ¹Ù ÇÁ·¹ÀÓ¿öÅ© Ȱ¿ë Àü·«
5ºÎ | Django¿Í Seaside·Î ¾Ë¾Æº¸´Â ´ë¾È ¾ð¾î ÇÁ·¹ÀÓ¿öÅ© Ȱ¿ë Àü·«
ÀÚ¹Ù
SQL
ÀÚ¹ÙÀÇ ÀåÁ¡Àº JCP, ÇÁ·¹ÀÓ¿öÅ©, ¿ÀǼҽºÀÌ´Ù. JCP¸¦ ÅëÇØ¼­ ȣȯ¼º°ú ¼º´É, ¾ÈÁ¤¼ºÀÌ º¸ÀåµÈ ½ºÆåÀ» ¸¸µé°í, Àß ¼³°èµÈ ½ºÆåµéÀº »óÈ£ ¿¬°ü¼ºÀ» °®°í ±¸Á¶È­µÈ ±¸Á¶·Î È®ÀåÇÑ´Ù. ÀÌ·¯ÇÑ °á°ú¹°ÀÌ ÇÁ·¹ÀÓ¿öÅ©À̰í ÇÁ·¹ÀÓ¿öÅ©¸¦ Áö¿øÇÏ´Â ÇÙ½ÉÀº ¿ÀǼҽº¿Í º¥´õÀÌ´Ù. ÀÌ·¸µí ÇÁ·¹ÀÓ¿öÅ©´Â ÀÚ¹Ù ±¸ÇöüÀÇ ÇÙ½ÉÀ̱⵵ ÇÏ´Ù. ƯÁý 4ºÎ¿¡¼­´Â ¼ö ¾øÀÌ ¸¹Àº ÀÚ¹Ù ÇÁ·¹ÀÓ¿öÅ© Áß¿¡¼­ µ¥ÀÌÅͺ£À̽º¿Í º¸¾È ±â´É ±¸Çö¿¡ È¿°úÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â iBatis¿Í Acegi SecurityÀÇ È°¿ë ¹æ¹ýµé¿¡ ´ëÇØ ¾Ë¾Æº»´Ù.

À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇϸ鼭 °¡Àå Áß¿äÇϸ鼭µµ º¹ÀâÇÑ ±â´É µÑÀ» ²ÅÀ¸¶ó¸é ´Ü¿¬ µ¥ÀÌÅͺ£À̽º¿Í º¸¾È ±â´ÉÀÏ °ÍÀÌ´Ù. ƯÁý 4ºÎ¿¡¼­´Â µ¥ÀÌÅͺ£À̽º ±â´ÉÀ» È¿°úÀûÀ¸·Î ±¸ÃàÇÒ ¼ö ÀÖ´Â iBatis¿Í º¸¾È ±â´É ±¸Çö¿ë ÇÁ·¹ÀÓ¿öÅ©ÀÎ Acegi Security¿¡ ´ëÇØ ¾Ë¾Æº¼ °ÍÀÌ´Ù.

µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÏ´Â ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ·Á¸é JDBC ÄÚµùÀÌ ÇʼöÀûÀÌ´Ù. JDBC ÄÚµùÀ» ÇÒ ¶§¿¡´Â µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼Ç ÀÚ¿øÀ» ÄÚµå »ó¿¡¼­ °ü¸®ÇØ¾ß ÇÑ´Ù. ¶Ç °³¹ß Äڵ忡 SQL ¹®µµ Æ÷ÇԵȴÙ.

µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼Ç ÀÚ¿øÀ» °ü¸®ÇÏ´Â °Íµµ ¹®Á¦Áö¸¸ °³¹ß °úÁ¤¿¡¼­ »ó´ç¼öÀÇ ºñÁî´Ï½º ·ÎÁ÷ÀÌ SQL ¹®¿¡ Æ÷ÇԵǰí, ´Ù½Ã ÀÌ·± SQL ¹®ÀÌ Äڵ忡 Æ÷ÇԵǾî SQL ¹®À» °ü¸®ÇÏ´Â °ÍÀÌ »ó´çÈ÷ º¹ÀâÇØÁö°Ô ¸¶·ÃÀÌ´Ù. iBatis´Â µ¥ÀÌÅͺ£À̽º ÀÚ¿ø °ü¸®¸¦ ¿Ïº®ÇÏ°Ô Ãß»óÈ­Çϰí, SQL ¹®À» Äڵ忡¼­ ºÐ¸®ÇÏ¿© XML·Î °ü¸®ÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÖ´Â ¿ÀÇ ¼Ò½º ÇÁ·ÎÁ§Æ®ÀÌ´Ù.

Acegi Security´Â ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß °úÁ¤¿¡¼­ °¡Àå ¹Î°¨Çϸ鼭µµ º¹ÀâÇÑ º¸¾È ±â´ÉÀ» º¸´Ù ¾ÈÁ¤ÀûÀÌ°í ½±°Ô ±¸¿¬ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â ÇÁ·¹ÀÓ¿öÅ©ÀÌ´Ù. º¸¾È °³³äÀ» »çÀü¿¡ °í·ÁÇÏ¿© ¾ÆÅ°ÅØÃ³¸¦ Á¤ÀÇÇÏ´Â °ÍÀº ¾î·Á¿î ÀÏÀÌ´Ù. ±×·¸´Ù°í º¸¾È ±â´ÉÀ» ¹«ÀÛÁ¤ Ãß°¡ÇÏ¿© °³¹ßÇÏ´Ù º¸¸é ºñÁî´Ï½º ·ÎÁ÷ÀÌ º¸¾È ÄÚµå Å¿¿¡ ¾û¸ÁÀÌ µÇ´Â °æ¿ì°¡ ºñÀϺñÀçÇÏ´Ù.

Acegi Security´Â ÀÌ·± ¹®Á¦¸¦ º¸´Ù È¿°úÀûÀ¸·Î ÇØ°áÇÒ ¼ö ÀÖ´Â ¹æ¹ýµéÀ» Á¦°øÇÑ´Ù. ¶Ç, ¿äÁò Àα⸦ ²ø°í ÀÖ´Â AOP(Aspect Orient Programming) °³³äÀ» µµÀÔÇÏ¿© ±âÁ¸ Äڵ忡 ¿µÇâÀ» ¹ÌÄ¡Áö ¾ÊÀ¸¸é¼­µµ ´Ù¾çÇÑ º¸¾È ÆÐÅÏÀ» Àû¿ë ½Ãų ¼ö ÀÖ´Â ½ºÇÁ¸µ ±â¹Ý ÇÁ·¹ÀÓ¿öÅ©ÀÌ´Ù.

  SQL ¸ÊÆÛ iBatis SQLMap

iBatis´Â www.ibatis.org¿¡¼­ ÁøÇà ÁßÀÎ ¿ÀÇ ¼Ò½º ÇÁ·ÎÁ§Æ®ÀÌ´Ù. iBatisÀÇ ±â´ÉÀ» ÇÑ ¸¶µð·Î ¿ä¾àÇÏÀÚ¸é SQL ¸ÊÆÛ¶ó°í ¸»ÇÒ ¼ö ÀÖ´Ù. iBatis¸¦ »ç¿ëÇÏ¸é °³¹ß Äڵ忡¼­ SQL¹®À» ºÐ¸®ÇÏ¿© Àç»ç¿ë¼ºÀ» ³ôÀÏ ¼ö ÀÖ´Ù. ¶Ç, ¹Ýº¹ÀûÀÎ JDBC Äڵ嵵 ÁÙÀÏ ¼ö ÀÖ´Ù. ÀϹÝÀûÀ¸·Î µ¥ÀÌÅͺ£À̽º¿Í ¿¬µ¿ÇÏ´Â ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇϱâ À§Çؼ­´Â JDBC ÄÚµùÀ» ÇÑ´Ù.

JDBC ÄÚµùÀº ´ÙÀ½°ú °°ÀÌ 6´Ü°èÀÇ ÀýÂ÷·Î ÀÌ·ç¾îÁö´Âµ¥, ÀÌ Áß¿¡¼­ 1¹ø°ú 2¹øÀº Ä¿³Ø¼Ç Ç®À» »ç¿ëÇϰųª °øÅë ¸ðµâ·Î Ãß»óÈ­ ½ÃÄѳõ´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù. °³¹ß °úÁ¤¿¡¼­ ºó¹øÇÏ°Ô Á¢ÇÏ´Â °ÍÀº 3¹øºÎÅÍ 6¹ø±îÁöÀÇ ÀýÂ÷ÀÌ´Ù. ÀÌÁß¿¡¼­µµ 3¹øÀ» ¼öÇàÇÏ·Á¸é ½ºÆ®¸µ °´Ã¼·Î SQL¹®À» ¸¸µé¾î¾ß ÇÑ´Ù.

´õºÒ¾î ¸Þ¸ð¸®ÀÇ È¿°úÀûÀΠȰ¿ëÀ» À§ÇØ StringBuffer¸¦ »ç¿ëÇÏ¿© SQL¹®À» ¸¸µé¾î ³ª°¡´Â °úÁ¤¿¡¼­ ¿©·¯ Á¶°Ç¿¡ ÇØ´çÇÏ´Â if¹® ·ÎÁ÷µµ Æ÷ÇÔµÇ°Ô µÈ´Ù.

¹®Á¦´Â ÀÌó·³ ÄÚµå¿Í SQL¹®À» °áÇÕÇÏ¿© »ç¿ëÇÒ °æ¿ì Áߺ¹µÈ SQL¹®ÀÌ ¿©·¯ Ŭ·¡½º¿¡ È¥ÀçÇÏ°Ô µÇ¾î SQL¹®ÀÇ Àç »ç¿ë¼º°ú °¡µ¶¼ºÀÌ ¶³¾îÁø´Ù´Âµ¥ ÀÖ´Ù. 4¹ø¿¡¼­ SQL¹®À» ½ÇÇàÇÑ ÈÄ °á°ú °ªÀÎ ResultSetÀ¸·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ÃßÃâÇÏ°í °´Ã¼¿¡ ÀúÀåÇÏ´Â Äڵ带 5¹ø ÀýÂ÷¿¡¼­ ¼öÇàÇϰí 6¹ø¿¡¼­ ÀÚ¿øÀ» closeÇÏ´Â ÀýÂ÷¸¦ ÅëÇØ¼­ JDBC Äڵ尡 °³¹ßµÈ´Ù.

À̶§, 5¹ø ÀýÂ÷¿¡¼­ µ¥ÀÌÅ͸¦ ÃßÃâÇϰí ÀÚ¹Ù ºó¿¡ °ªÀ» ¼¼ÆÃÇÏ´Â Äڵ带 ¸Å¹ø Ãß°¡ÇØ¾ß Çϰí 6¹ø ÀýÂ÷¿¡¼­ ¿¹¿Ü»çÇ×ÀÌ ¹ß»ýÇÒ °æ¿ì, ¿¹¿Ü󸮸¦ À߸øÇÏ¸é ¸Þ¸ð¸® ´©¼ö°¡ ¹ß»ýÇϱ⠽¬¿î ±¸°£ÀÌ´Ù.

JDBC °³¹ß ÀýÂ÷  

1. Driver : JDBC Driver¸¦ µî·ÏÇÑ´Ù.
2. Connection : µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°áÇÑ´Ù.
3. Statement : query¹® ¼öÇఴü¸¦ »ý¼ºÇÑ´Ù.
4. Execute : query¹®À» ½ÇÇàÇÑ´Ù.
5. Result : query ½ÇÇà °á°ú¸¦ ¹Þ´Â´Ù.
6. Close : Connection, Statement¸¦ ´Ý´Â´Ù.


iBatis´Â 6´Ü°èÀÇ JDBC °³¹ß Àüü¸¦ Ãß»óÈ­ÇÏ¿© °³¹ß »ý»ê¼ºÀ» ³ôÀ̰í ÀÖ´Ù. iBatis¸¦ ÀÌ¿ëÇϸé SqlMapConfig.xml¿¡ µ¥ÀÌÅͺ£À̽º Á¤º¸¸¦ µî·ÏÇϰí ÀÌ Á¤º¸¸¦ ÀÌ¿ëÇÏ¿© µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼ÇÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù. SqlMapConfig.xml ÆÄÀϰú Áö¿ø ¶óÀ̺귯¸®¸¦ ÅëÇØ¼­ JDBC °³¹ß ÀýÂ÷ÀÇ 1¹ø°ú 2¹ø, 6¹øÀ» Ãß»óÈ­ Çϰí ÀÖ´Ù.

iBatis´Â ¶ÇÇÑ SqlMapÀ̶ó´Â xml ÆÄÀÏÀ» °ü¸®ÇÑ´Ù. SqlMap xml ÆÄÀÏÀº SQL Á¤º¸, ƯÁ¤ SQL ¹®°ú ÀÔ·ÂµÈ µ¥ÀÌÅ͸¦ ¾î¶»°Ô °áÇÕÇÒ °ÍÀΰ¡, SQLÀÇ ½ÇÇà ÈÄ ¾î¶² ÀÚ¹Ù ºó¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÒ °ÍÀΰ¡¿Í °ü·ÃµÈ Á¤º¸¸¦ °ü¸®ÇÑ´Ù. µû¶ó¼­ iBatis´Â SqlMap xml ÆÄÀϰú 3¹ø, 5¹ø ÀýÂ÷¸¦ Ãß»óÈ­ÇÑ´Ù. ¸¶Áö¸·À¸·Î 4¹ø SQL¹®À» ½ÇÇàÇÏ´Â ´Ù¾çÇÑ ¶óÀ̺귯¸®¸¦ Á¦°øÇÑ´Ù.

ÀÌ¿Í °°ÀÌ iBatis¸¦ »ç¿ëÇϸé SqlMap xml ÆÄÀÏÀ» »ç¿ëÇÏ¿© SQL¹®À» Áß¾Ó ÁýÁßÀûÀ¸·Î °ü¸®ÇÒ ¼ö ÀÖ´Ù. ¶Ç, SQL¹®°ú °áÇյǴ ÀÔ·Â °ª°ú SQL¹®ÀÇ °á°ú¸¦ ´ã´Â ÀÚ¹Ù ºóÀ» ÀϰýÀûÀ¸·Î °ü¸®ÇÏ¿© SQL¹®ÀÇ Àç»ç¿ë¼ºµµ ³ôÀÏ ¼ö ÀÖ´Ù. ´õºÒ¾î SQL¹®°ú ÀÔ·Â °ªÀ» ¼³Á¤ÇÏ´Â ÄÚµå ¹× ResultSetÀ¸·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ÃßÃâÇÏ´Â ¹Ýº¹ÀûÀÎ Äڵ带 ÁÙÀÌ´Â È¿°úµµ ¾òÀ» ¼ö ÀÖ´Ù. ¶ÇÇÑ Connection, PrepareStatement, ResultSet °´Ã¼¸¦ ÇÁ·¹ÀÓ¿öÅ© ³»ºÎ¿¡ ¼û°Ü ³õ¾Æ °³¹ß°úÁ¤¿¡¼­ ÀÌµé °´Ã¼¿¡ Á¢±ÙÇÒ ¼ö ¾ø´Ù. ¶§¹®¿¡ °³¹ß°úÁ¤¿¡¼­ ÀÚ¿ø ÇØÁ¦¿Í °ü·ÃµÈ ºÎºÐÀ» ½Å°æ ¾µ Çʿ䰡 ¾ø¾îÁø´Ù.

iBatis
www.ibatis.org¿¡¼­´Â iBatis¸¦ µ¥ÀÌÅͺ£À̽º ÄÚµùÀ» ½±°Ô Çϱâ À§ÇÑ µ¥ÀÌÅÍ ¸ÊÆÛ ÇÁ·¹ÀÓ¿öÅ©(Data Mapper Framework)¶ó°í ¼Ò°³Çϰí ÀÖ´Ù. ÀÚ¹Ù, ´å³Ý ±×¸®°í ·çºñ ¼¼ °¡Áö ¹öÀüÀÇ ÇÁ·¹ÀÓ¿öÅ©¸¦ Á¦°øÇϰí ÀÖ´Ù.

iBatis ÇÁ·ÎÁ§Æ®´Â iBatis SQL Map°ú iBatis DAO ÄÄÆ÷³ÍÆ®·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ÀÌ Áß iBatis SQL MapÀº SQL¹® °ü¸®¿¡ ÃÊÁ¡À» ¸ÂÃß°í ÀÖ´Ù. iBatis DAO ÄÄÆ÷³ÍÆ®´Â ÇÏÀ̹ö³×ÀÌÆ®(hibernate)¿Í iBatis SQL MapÀ» ÇÔ²² »ç¿ëÇÒ °æ¿ì Æ®·£Àè¼Ç ÅëÇÕ°ú °°Àº ÀúÀå ¸ÞÄ¿´ÏÁò¿¡ ÃÊÁ¡À» ¸ÂÃß°í ÀÖ´Ù.

ÇöÀç iBatis´Â ¾ÈÁ¤È­ ¹öÀüÀ¸·Î 2.1.7¹öÀüÀ», °³¹ß¹öÀüÀ¸·Î´Â 2.2.0¹öÀüÀ» º£Å¸·Î ¸±¸®ÁîÇÑ »óÅ´Ù.

<±×¸² 1>Àº iBatisÀÇ ÀÛµ¿ ¹æ½ÄÀ» Àß ¼³¸íÇϰí ÀÖ´Ù. iBatis´Â µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼Ç¿¡ °üÇÑ Á¤º¸¿Í ij½Ã »ç¿ë ¿©ºÎ, Æ®·£Àè¼Ç ÃÖ´ë °³¼ö, ÃÖ´ë ¼¼¼Ç °³¼ö µî µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼Ç°ú °ü·ÃµÈ Àü¹ÝÀûÀÎ Á¤º¸·Î ±¸¼ºµÈ´Ù.

¶Ç, SQL 󸮸¦ À§ÇØ SQL Map xml ÆÄÀϵéÀÇ À§Ä¡ Á¤º¸¸¦ ±â·ÏÇÏ´Â SqlMapConfig.xml ÆÄÀϰú SQL¹®°ú PrepareStatement ÆÄ¶ó¹ÌÅÍ, ResultSet °á°ú ¸ÊÇÎ Á¤º¸¸¦ ±â·ÏÇÏ´Â Çϳª ÀÌ»óÀÇ SqlMap.xml·Î ±¸¼ºµÈ´Ù.

PrepareStatement ÆÄ¶ó¹ÌÅÍ·Î ÀԷµǴ ÇüÅ´ ÀÚ¹Ù ºó°ú ¸Ê °´Ã¼, ¿ø½Ã µ¥ÀÌÅÍÇü º¯¼ö, XML¹®ÀÇ ÇüÅ·Π¸¸µé ¼ö ÀÖ´Ù. ResultSet °á°ú ¸ÊÇÎÀº ÀÚ¹Ù ºóÀ̳ª ¸Ê °´Ã¼, ¿ø½Ã µ¥ÀÌÅÍÇü, XMLÀÇ ÇüÅ·Π¸¸µé ¼ö ÀÖ´Ù.

SqlMapConfig.xml
<¸®½ºÆ® 1>À» º¸¸é SqlMapConfig.xmlÀÇ ·çÆ® ¿¤¸®¸ÕÆ®(Root Element)´Â ¡®sqlMapConfig¡¯ÀÌ´Ù. ¡®sqlMapConfig¡¯´Â ´Ù¼¸ °³ÀÇ ÀÚ½Ä ¿¤¸®¸ÕÆ®(Element ÀÌÇÏ ¡®¿ä¼Ò¡¯)¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù.

 <¸®½ºÆ® 1> SqlMapConfig.xml ¿¹Á¦


¡Üproperties ¿ä¼Ò
SqlMapConfig.xmlÀº ¡®${key_name}¡¯ ÇüÅÂÀÇ º¯¼ö¸¦ °ªÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. <¸®½ºÆ® 1>ÀÇ °æ¿ì driver, url, username, password°¡ ¡®${key_name}¡¯ ÇüÅÂÀÇ º¯¼ö¸¦ »ç¿ëÇÑ ¿¹ÀÌ´Ù. ÀÌ·¯ÇÑ key_nameÀº SqlMapClient ÀνºÅϽº°¡ »ý¼ºµÉ ¶§ ½ÇÁ¦ °ªÀ¸·Î ´ëÄ¡µÈ´Ù. key_nameÀÇ ½ÇÁ¦ °ªÀº ¡®keyname=value¡¯ÀÇ ÇüÅ·Πproperties ÆÄÀÏ¿¡ ÀúÀåµÈ´Ù. sqlMapConfig¿¡¼­ »ç¿ëÇÏ´Â properties ÆÄÀÏÀº properties ¿ä¼ÒÀÇ resource ¼Ó¼ºÀ» ÀÌ¿ëÇÏ¿© µî·ÏµÈ´Ù.

¡Üsettings ¿ä¼Ò
iBatis SqlMapÀ» »ç¿ëÇϱâ À§Çؼ­´Â SqlMapClient ÀνºÅϽº¸¦ »ý¼ºÇØ¾ß ÇÑ´Ù. setting ¿ä¼Ò´Â SqlMapClient ÀνºÅϽº¸¦ À§ÇÑ ¿É¼Ç°ú ÃÖÀûÈ­¸¦ À§ÇÑ ¼³Á¤ÇÏ´Â ¿ªÇÒÀ» ´ã´çÇÑ´Ù. setting ¿ä¼Ò´Â Àϰö °³ÀÇ ¼Ó¼ºÀ» °®°í ÀÖ°í °¢ ¼Ó¼ºÀÇ Àǹ̴ <Ç¥ 1>°ú °°´Ù.


¡ÜtypeAlias ¿ä¼Ò
typeAlias ¿ä¼Ò¸¦ ÀÌ¿ëÇÏ¿© ±ä Ŭ·¡½º ¸íÀ» ÂüÁ¶Çϱâ À§ÇÑ ÂªÀº À̸§À» ¸í½ÃÇÑ´Ù. <¸®½ºÆ® 1>ÀÇ °æ¿ì com.imaso.vo.EmpVO¿Í com.imaso.vo.DeptVO¸¦ °¢°¢ emp¿Í dept·Î ¸í½ÃÇϰí ÀÖ´Ù. typeAlias¿¡¼­ ¼³Á¤µÈ º°ÄªÀº sqlMapConfig.xml°ú sqlMapConfig¿¡¼­ µî·ÏµÈ SqlMap.xml¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¡ÜtransactionManager ¿ä¼Ò
transactionManager ¿ä¼Ò´Â Æ®·£Àè¼Ç°ú °ü·ÃµÈ ¼³Á¤À» ´ã´çÇÑ´Ù. transactionManager ¿ä¼Ò´Â type ¼Ó¼ºÀ» °®°í ÀÖ´Ù. type¿¡´Â Ŭ·¡½º ¸íÀ» »ç¿ëÇϰųª »çÀü¿¡ Á¤ÀÇµÈ º°ÄªÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. iBatis SqlMaps´Â »çÀü¿¡ ¼¼ °³ÀÇ º°ÄªÀ» Á¤ÀÇÇϰí ÀÖ´Ù. ±× º°ÄªÀÇ Á¾·ù¿Í Àǹ̴ <Ç¥ 2>¿Í °°´Ù.


transactionManager´Â dataSource ¿ä¼Ò¸¦ °®´Â´Ù. dataSource ¿ä¼Ò´Â typeÀ¸·Î ¡®SIMPLE¡¯, ¡®DBCP¡¯, ¡®JNDI¡¯¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¡®SIMPLE¡¯Àº iBatis SimpleDataSource connection Ç®À» »ç¿ëÇÏ¿© µ¥ÀÌÅÍ ¼Ò½º¸¦ Á¦°øÇÑ´Ù´Â ¼³Á¤À̰í DBCP´Â ÀÚÄ«¸£Å¸ DBCP¸¦ »ç¿ëÇÑ´Ù´Â ÁöÁ¤ÀÌ´Ù. ¡®JNDI¡¯´Â WASÀÇ JNDI ÄÁÅØ½ºÆ®·ÎºÎÅÍ DataSource¸¦ °¡Á®¿Â´Ù´Â ÀǹÌÀÌ´Ù.

¡ÜsqlMap ¿ä¼Ò
sqlMap ¿ä¼Ò´Â iBatis Sql Maps¿¡¼­ »ç¿ëÇÒ sqlMap xml ÆÄÀϵéÀ» ÁöÁ¤ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. sqlMap ¿ä¼Ò´Â ÇÑ °³ ÀÌ»ó µî·ÏÇØ¾ß Çϸç sqlMap xml ÆÄÀÏÀ» ÁöÁ¤ÇÏ´Â ¹æ½ÄÀº Ŭ·¡½º ÆÐ½º¿Í Àý´ë°æ·Î¸¦ ÀÌ¿ëÇÏ¿© ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. <¸®½ºÆ® 1>¿¡¼­ emp.xmlÀº resource ¼Ó¼ºÀ» »ç¿ëÇÏ¿© Ŭ·¡½º ÆÐ½º·Î ¼³Á¤ÇÑ °ÍÀ̰í, dept.xmlÀº url ¼Ó¼ºÀ» ÅëÇÏ¿© Àý´ë°æ·Î·Î ¼³Á¤ÇÑ ¿¹ÀÌ´Ù.

SqlMap xml ÆÄÀÏ
<¸®½ºÆ® 2>´Â ¿À¶óŬ µðÆúÆ® ½ºÄ«¹ÌÀÎ scottÀÇ emp Å×À̺íÀ» ´ë»óÀ¸·Î Á¶È¸, ¼öÁ¤, ÀÔ·Â, »èÁ¦¸¦ ´ë»óÀ¸·Î ÇÏ´Â SqlMap xmlÀÇ ¿¹Á¦ÀÌ´Ù. SqlMap xml ÆÄÀÏÀº sqlMap ¿¤¸®¸ÕÆ®¸¦ ·çÆ®·Î ÇÑ´Ù. <¸®½ºÆ® 2>¿¡¼­ sqlMapÀº select, insert, update, delete ¿ä¼Ò¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù. °¢ ¿ä¼Ò´Â parameterClass ¼Ó¼ºÀ» °¡Áö°í ÀÖ´Ù. ¶Ç, ÀÌ ¼Ó¼º¿¡ typeAlias·Î º°ÄªÀÌ ¼³Á¤µÈ EmpVO Ŭ·¡½º¸¦ ÁöÁ¤Çϰí ÀÖ´Ù.

parameterClass·Î ÁöÁ¤µÈ Ŭ·¡½º´Â ÀÔ·Â ÆÄ¶ó¹ÌÅ͸¦ ÀǹÌÇÑ´Ù. id°¡ getEMPÀÎ select ¿ä¼Ò´Â parameterClass·Î º°ÄªÀÌ empÀÎ EmpVO °´Ã¼°¡ ¼³Á¤µÇ¾î ÀÖ´Ù. ÀÔ·Â ÆÄ¶ó¹ÌÅÍ·Î EmpVO ÀνºÅϽº°¡ ÀԷµǸé id°¡ getEMPÀÎ SQL¹®°ú °áÇÕÇÏ°Ô µÈ´Ù.

ÀÌ ¶§ EmpVO °´Ã¼ÀÇ ÀνºÅϽº´Â empno¶ó´Â ¸â¹ö º¯¼ö¸¦ °¡Áö°í ÀÖÀ¸¸ç, getter ¸Þ¼Òµå¿Í setter ¸Þ¼Òµå°¡ ¼±¾ðµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. EmpVO°¡ ¾ÕÀÇ Á¶°ÇµéÀ» ÃæÁ·ÇÏ´Â ÀÚ¹ÙºóÀ̶ó¸é EmpVO ÀνºÅϽºÀÇ empno ¸â¹ö º¯¼öÀÇ °ªÀº #empno#¿Í °áÇÕÇÏ¿© PrepareStatement °´Ã¼¸¦ »ý¼ºÇÏ°í ½ÇÇàµÈ´Ù. ³ª¸ÓÁö SQL¹® ¿ª½Ã °°Àº ¿ø¸®·Î ÀÛµ¿µÈ´Ù.

id°¡ getEmpListÀÎ select ¿ä¼ÒÀÇ SQL¹®Àº CDATA ¼½¼ÇÀ¸·Î º¸È£µÇ°í ÀÖ´Ù. À̰ÍÀº SQL¹®¿¡ ¡®<¡¯, ¡®>¡¯ ÀÌ Æ÷Ç﵃ °æ¿ì SqlMap xml ¹®¼­´Â web-formed ÇÏÁö ¾Ê´Â »óŰ¡ µÈ´Ù. ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ­´Â ¡®<¡¯, ¡®>¡¯¹®ÀÚ¸¦ ¡®<¡¯, ¡®>¡¯·Î ¹Ù²Ù°Å³ª CDATA ¼½¼ÇÀ¸·Î ¼³Á¤ÇÏ¿© ¸ðµç °ªÀ» ¹®ÀÚ·Î ÀνÄÇϵµ·Ï ÇØ¾ß ÇÑ´Ù. getEmpList´Â CDATA ¼½¼ÇÀ» Àû¿ëÇÑ ¿¹ÀÌ´Ù.

 <¸®½ºÆ® 2> SqlMap xml ÆÄÀÏ ¿¹Á¦(sqlmap /emp.xml)


´Ù¸¥ ¿ä¼Ò¿Í ´Þ¸® select ¿ä¼Ò´Â resultClass ¼Ó¼ºÀ» °¡Áö°í ÀÖ´Â °ÍÀÌ Æ¯Â¡ÀÌ´Ù. <¸®½ºÆ® 2>¿¡¼­´Â emp º°ÄªÀ» »ç¿ëÇÏ¿© EmpVO¸¦ ¼³Á¤Çϰí ÀÖ´Ù. resultClass´Â SQL¹®ÀÌ Ã³¸®µÈ ÈÄ Á¶È¸µ¥ÀÌÅ͸¦ row º°·Î ´ãÀ» ÀÚ¹Ù ºó Ŭ·¡½º¸¦ ÁöÁ¤Çϴ Ŭ·¡½ºÀÌ´Ù.

resultClass¿¡ ÁöÁ¤µÈ ÀÚ¹Ù ºóÀÇ selectÀý Ä÷³¸í°ú µ¿ÀÏÇÑ ¸â¹ö º¯¼ö¸¦ Æ÷ÇÔÇÏ°í °¢ ¸â¹ö º¯¼ö¿¡ ´ëÇÑ getter ¸Þ¼Òµå¿Í setter ¸Þ¼Òµå°¡ Á¤ÀÇµÈ ÀÚ¹Ù ºóÀ̶ó´Â Á¦¾àÁ¶°ÇÀ» °®´Â´Ù.

¡ÜParameterMap°ú ResultMap
SqlMap xml ÆÄÀÏ¿¡¼­ ÀÔ·Â ÆÄ¶ó¹ÌÅÍ¿Í °á°ú¸¦ ¸®ÅÏ ÇÏ´Â µ¥ÀÌÅÍÇüÀ» ÁöÁ¤ÇÏ´Â ¹æ½ÄÀ¸·Î parameterClass¿Í resultClass ¼Ó¼ºÀ» »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸¾Ò´Ù. parameterClass¿Í resultClass¿¡ ÁöÁ¤µÈ ÀÚ¹Ù ºóÀÇ parameterClass´Â #º¯¼ö¸í#°ú µ¿ÀÏÇÑ ¸â¹ö º¯¼ö¸íÀ» °®´Â ÀÚ¹Ù ºóÀ̾î¾ß ÇÑ´Ù.

¶Ç, resultClass´Â select ÀýÀÇ ¸ðµç Ä÷³¸í°ú ÀÏÄ¡ÇÏ´Â ¸â¹öº¯¼öµéÀ» °®´Â ÀÚ¹Ù ºóÀ̾î¾ß ÇÑ´Ù´Â Á¦¾àÁ¶°ÇÀÌ ÀÖ´Ù. ÀÌ·¯ÇÑ Á¦¾àÁ¶°ÇÀ» ÇØ°áÇÏ´Â ¹æ¾ÈÀ¸·Î ParameterMap°ú ResultMapÀ» Áö¿øÇÑ´Ù.

<¸®½ºÆ® 3>Àº <¸®½ºÆ® 2>ÀÇ getEmpList ¿ä¼Ò¿¡ resultMapÀ» »ç¿ëÇϵµ·Ï º¯ÇüÇÑ ¿¹Á¦ÀÌ´Ù. <¸®½ºÆ® 3>Àº selectÀýÀÇ Ä÷³¸íÀÌ ¸ðµÎ ´ë¹®ÀÚ·Î ¼³Á¤µÇ¾î ÀÖ´Ù. ÀÌ SQL¹®ÀÌ ½ÇÇàµÉ °æ¿ì °á°ú´Â ·Î¿ì(Row) º°·Î EmpVO ÀνºÅϽº¿¡ ¼³Á¤µÇµµ·Ï select ¿ä¼ÒÀÇ resultMap ¼Ó¼ºÀ¸·Î empMapÀ» ÁöÁ¤Çϰí ÀÖ´Ù.

id°¡ empMapÀÎ resultMap ¿ä¼Ò´Â µ¥ÀÌÅ͸¦ ÀúÀåÇÒ ¶§ »ç¿ëÇÒ ºó(class ¼Ó¼º)°ú Ä÷³º°(column ¼Ó¼º) ´ë»ó ¸â¹ö º¯¼ö¸í(property)À» ¼³Á¤ÇÑ´Ù. ´õºÒ¾î Àüü 8 Ä÷³ Áß ´Ù¼¸ °³ÀÇ Ä÷³¸¸À»resultMap ¿ä¼Ò¿¡ ¼³Á¤ÇÏ¿© ´Ù¼¸ °³ÀÇ Ä÷³ µ¥ÀÌÅ͸¸ÀÌ EmpVO ÀνºÅϽº¿¡ ÀúÀåµÇµµ·Ï ¼³Á¤Çϰí ÀÖ´Ù.

 <¸®½ºÆ® 3>resultMapÀ» Àû¿ëÇÑ ¿¹


Sql Maps API »ç¿ëÇϱâ
Áö±Ý±îÁö SqlMapConfig.xml°ú sqlMap.xmlÀ» ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸¾Ò´Ù. ÀÌÁ¦ À̰ÍÀ» ¹ÙÅÁÀ¸·Î xml ¼³Á¤À» »ç¿ëÇÏ´Â API¿¡ ´ëÇØ ¾Ë¾Æº¼ Â÷·ÊÀÌ´Ù. Sql Maps´Â ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÚ°¡ com.ibatis.sqlmap.client.SqlMapClient ÀÎÅÍÆäÀ̽º¸¸À» »ç¿ëÇÏ¸é µÇµµ´Â °£·«ÇÑ ±¸¼ºÀÇ API¸¦ Áö¿øÇÑ´Ù.

¡ÜSqlMapClient ÀνºÅϽº »ý¼º
SqlMapClient ÀνºÅϽº¸¦ ¸¸µé±â À§Çؼ­´Â SqlMapClientBuilder Ŭ·¡½ºÀÇ static ¸Þ¼ÒµåÀÎ buildSqlMap()¸Þ¼Òµå¸¦ »ç¿ëÇÑ´Ù. buildSqlMap ¸Þ¼Òµå¿¡ Ŭ·¡½º ÆÐ½º »ó¿¡ Á¸ÀçÇÏ´Â SqlMapConfig.xml ÆÄÀÏÀÇ Reader ÀνºÅϽº¸¦ ÀÔ·ÂÇÏ¿© SqlMapClient ÀνºÅϽº¸¦ ¸¸µé ¼ö ÀÖ´Ù.

 <¸®½ºÆ® 4>SqlMapClient ÀνºÅϽº »ý¼º ÄÚµå


¡ÜSqlMapClient API
SqlMapClient ÀνºÅϽº¸¦ »ý¼ºÇÏ¸é ´ÙÀ½°ú °°Àº ¸Þ¼Òµå¸¦ Ȱ¿ëÇÒ ¼ö ÀÖ´Ù.

SqlMapClient Ŭ·¡½ºÀÇ ÁÖ¿ä ¸Þ¼Òµå  

* public void startTransaction () throws SQLException
* public void commitTransaction () throws SQLException
* public void endTransaction () throws SQLException
* public Object insert(String id, Object param) throws SQLException
* public int update(String id, Object param) throws SQLException
* public int delete(String id, Object param) throws SQLException
* public Object queryForObject(String id, Object param) throws SQLException
* public List queryForList(String id, Object param) throws SQLException


<¸®½ºÆ® 5>´Â iBatis Sql Maps¸¦ ÀÌ¿ëÇÑ Æ®·£Àè¼Ç ¿¹Á¦ÄÚµåÀÌ´Ù. updateEmpHiredate() ¸Þ¼Òµå´Â SqlMapClient ÀνºÅϽºÀÎÀÇ startTransaction() ¸Þ¼Òµå·Î Æ®·£Àè¼ÇÀ» ½ÃÀÛÇϰí commitTransaction()·Î Á¾·áÇÑ´Ù. Æ®·£Àè¼Ç ó¸® Áß SQLExceptionÀÌ ¹ß»ýÇÒ °æ¿ì endTransaction() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© Æ®·£Àè¼ÇÀ» ·Ñ¹éÇϰí Á¾·áÇÏ´Â ·ÎÁ÷À» ´ã°í ÀÖ´Ù.

queryForObject() ¸Þ¼Òµå¿¡ SQL id¿Í ÀÔ·Â ÆÄ¶ó¹ÌÅÍ °´Ã¼ ¡®inputEmp¡¯ °´Ã¼¸¦ Àü´ÞÇϸé [ÄÚµå 2]ÀÇ ¡®getEmp¡¯ select ¿ä¼Ò¿Í °áÇÕÇÏ¿© SQL¹®ÀÌ ½ÇÇàµÇ°í °á°ú¸¦ Object ÇüÀ¸·Î ¸®ÅÏ ÇÑ´Ù.

Á¶È¸ °á°úÀÎ ¡®emp¡¯ °´Ã¼ÀÇ hiredate¸¦ ¼³Á¤ÇÑ µÚ¿¡ update ¸Þ¼Òµå¿¡ ¡®updateEmp¡¯ÀÎ SQL id¿Í ¼öÁ¤ÇÑ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â emp °´Ã¼¸¦ ÆÄ¶ó¹ÌÅÍ·Î Àü´ÞÇÏ¿© µ¥ÀÌÅ͸¦ ¼öÁ¤ÇÏ´Â ·ÎÁ÷À¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù.

<¸®½ºÆ® 5>´Â ÀüÇüÀûÀÎ iBatis Sql Maps ÄÚµù ¹æ½ÄÀÌ´Ù. µ¥ÀÌÅͺ£À̽º Äڵ带 ÀÛ¼ºÇÏ´Â °úÁ¤¿¡¼­ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÚ´Â Connection, PrepareStatement, ResultSet °´Ã¼¸¦ Á¦¾îÇÒ Çʿ䰡 ¾ø´Ù´Â »ç½ÇÀ» È®ÀÎ ÇÒ ¼ö ÀÖ´Ù.

 <¸®½ºÆ® 5>iBatis Sql Maps Æ®·£Àè¼Ç ¿¹Á¦


iBatis Sql MapsÀÇ À§Ä¡
¿äÁò Object Relational Mapping(ÀÌÇÏ ORM)À̶ó´Â ÀÚÁÖ µè°Ô µÈ´Ù. ORMÀº °´Ã¼ ÁöÇâ µ¥ÀÌÅÍ¿Í °ü°èÇü µ¥ÀÌÅͺ£À̽ºÀÇ µ¥ÀÌÅ͸¦ ¿¬°á½ÃÄÑ ÁÖ´Â ±â¼úÀÌ´Ù. SQL¹®À» »ç¿ëÇÏÁö ¾Ê°í µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ µ¥ÀÌÅ͸¦ Á¶È¸ÇÏ°í ¾ÖÇø®ÄÉÀÌ¼Ç °´Ã¼ÀÇ »óŰ¡ º¯ÇÔ¿¡ µû¶ó µ¥ÀÌÅͺ£À̽º¿¡ º¯°æ »çÇ×ÀÌ ¹Ù·Î ÀúÀåµÇµµ·Ï ÇÏ´Â °ÍÀÌ´Ù.

°´Ã¼ ÁöÇâ ¾ð¾î¿¡¼­ °´Ã¼´Â 3Â÷¿ø µ¥ÀÌÅÍÀÌ´Ù. ´ÜÀÏ °´Ã¼¿Í ¸®½ºÆ®°¡ ¼¯¿© ÀÖ°í ´ÜÀÏ °´Ã¼´Â ¶Ç µû¸¥ °´Ã¼¿Í ¸®½ºÆ®¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Ù. ¹Ý¸é °ü°èÇü µ¥ÀÌÅͺ£À̽º´Â 2Â÷¿ø µ¥ÀÌÅÍ·Î Ä÷³°ú ·Î¿ì·Î ±¸¼ºµÇ¾î ÀÖ´Ù. 2Â÷¿ø µ¥ÀÌÅ͸¦ Àоî¿Í »ïÂ÷¿ø µ¥ÀÌÅÍ·Î º¯°æÇÏ´Â ÀÛ¾÷Àº SQL¹®À» ÀÌ¿ëÇÏ´Â ÀüÅëÀûÀÎ ¹æ¹ýÀÌ´Ù.

ORM ±â¼ú·Î À¯¸íÇÑ Åøµé·Î EJB, ÇÏÀ̹ö³×ÀÌÆ®, TopLink, JDO µîÀÌ ÀÖ´Ù. ORM ±â¼úÀÌ ¸¹Àº ÀåÁ¡À» °®°í ÀÖ´Â °Í °°Áö¸¸ Çö½Ç¿¡ Àû¿ëÇØ º¸¸é ¹®Á¦Á¡ÀÌ ¸¹´Ù. ÇÁ·ÎÁ§Æ®¿¡ Âü¿©ÇÏ´Â ÀηÂÀÇ ´ëºÎºÐÀº °ü°èÇü µ¥ÀÌÅͺ£À̽º °üÁ¡¿¡¼­ µ¥ÀÌÅ͸¦ ¹Ù¶óº¸´Âµ¥ Àͼ÷Çϰí SQL¹®À» »ç¿ëÇÏ´Â JDBC ÄÚµù¿¡ Àͼ÷ÇÑ °ÍÀÌ »ç½ÇÀÌ´Ù.

ÀÌ·± »óȲ¿¡¼­ °úµµÇÏ°Ô ORM ±â¼úÀ» Àû¿ëÇÒ °æ¿ì È¥¶õ¸¸ °¡Áß½ÃŰ´Â °æ¿ì°¡ ´ëºÎºÐÀÌ´Ù. ±×·¯³ª ±âÁ¸ ¹æ½Ä´ë·Î ¹æ´ëÇÑ SQL¹®¿¡ ºñÁî´Ï½º ·ÎÁ÷ÀÌ ´ã°ÜÀÖ°í, SQL¹®ÀÌ °³¹ß ÄÚµå¿Í ¼¯¿© ÀÖ´Â °ÍÀº SQL¹® °ü¸®³ª Àç»ç¿ë¼ºÀ» ¶³¾î¶ß¸®´Â ¹®Á¦¸¦ °¡Áø´Ù.

iBatis Sql Maps´Â ±âÁ¸ JDBC ÄÚµåÀÇ ºñÈ¿À²¼ºÀ» ȹ±âÀûÀ¸·Î °³¼±ÇÏ´Â µ¿½Ã¿¡ JDBC ÄÚµåÀÇ ÆÐ·¯´ÙÀÓÀº ±×´ë·Î À¯ÁöÇϰí ÀÖ´Ù. ORM ±â¼ú°ú ºñ±³ÇÒ ¼ö´Â ¾øÁö¸¸ Á¶È¸ °á°ú¸¦ SQL ¸ÊÇÎ Á¤º¸¿¡ µû¶ó ƯÁ¤ °´Ã¼¿¡ ¼³Á¤ÇÏ°í ¹ÝȯÇÏ´Â ºÎºÐÀ» ÀÚµ¿È­Çϰí ÀÖ´Ù. ¶Ç, SQL¹®À» Áß¾Ó ÁýÁßÀûÀ¸·Î °ü¸®ÇÒ ¼ö ÀÖ´Â ¹æ¾Èµµ Á¦°øÇÑ´Ù.

±×»Ó ¾Æ´Ï´Ù. ÀÚü µ¥ÀÌÅÍ Ä³½Ã ±â´ÉÀ» Æ÷ÇÔÇϰí ÀÖ°í XML¹®¿¡ ±â¼úµÈ SQL¹®À» µ¥ÀÌÅÍÀÇ »óÅ¿¡ µû¶ó µ¿ÀûÀ¸·Î º¯°æÇÏ´Â Dynamic SQL¹®À» Á¦°øÇÑ´Ù. Log4J ¼³Á¤À» ÇÒ ¶§¿¡´Â ÀÚ¼¼ÇÑ ³»ºÎ ·Î±×µµ Á¦°øÇÑ´Ù.

µ¥ÀÌÅͺ£À̽º º¥´õ º°·Î °³º°ÀûÀ¸·Î Á¦°øÇÏ´Â ¸ðµç SQL ¹®ÀÇ Ç¥Çö ¹æ½Ä, ÇÁ·Î½ÃÀú, ƯÁ¤ ÇÔ¼öµéÀ» ¸ðµÎ Áö¿øÇÑ´Ù. ÀÌ·¸µí iBatis Sql Maps´Â ORMÀÇ Æ¯¼º°ú ±âÁ¸ JDBC ÄÚµåÀÇ ´ÜÁ¡À» º¸¾ÈÇϰí ÀåÁ¡À» Èí¼öÇÏ´Â Áß°£ÀûÀÎ À§Ä¡¿¡ Á¸ÀçÇÏ´Â ÆÛ½Ã½ºÅϽº(Persistence) ·¹À̾î ÇÁ·¹ÀÓ¿öÅ©ÀÌ´Ù.

  À¥ ¾ÖÇø®ÄÉÀÌ¼Ç º¸¾È ÇÁ·¹ÀÓ¿öÅ© - Acegi Security

Acegi Security(ÀÌÇÏ Acegi) ÇÁ·¹ÀÓ¿öÅ©´Â ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©ÀÇ ¼­ºê ÇÁ·ÎÁ§Æ®·Î °³¹ßµÇ°í ÀÖ´Â º¸¾È ¿ÀǼҽº ÇÁ·¹ÀÓ¿öÅ©ÀÌ´Ù. Acegi´Â ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©ÀÇ °øÀÎ ¼­ºê ÇÁ·ÎÁ§Æ®À̸ç http://acegisecurity.org ¿¡¼­ ¿î¿µµÇ°í ÀÖ´Â ¿ÀǼҽº ÇÁ·ÎÁ§Æ®´Ù.

½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©¸¦ ±â¹ÝÀ¸·Î AOPÀÇ °³³äÀ» Ãß°¡ÇÏ¿© ¸¸µé¾îÁö´Â ¸¸Å­ ¸ðµâ¼º°ú À̽ļºÀÌ ¸Å¿ì ¶Ù¾î³ª´Ù´Â ÀåÁ¡À» °¡Áö°í ÀÖ´Ù. º¸¾ÈÀº óÀ½¿¡ »ó´çÈ÷ ºÎ´ãµÇ´Â ¿ë¾îµéÀ» ¸¹ÀÌ Á¢ÇÏ°Ô µÇ´Â ºÐ¾ßÀÌ´Ù. ÀÌ·¯ÇÑ Å¿¿¡ Acegi ¶ÇÇÑ Ã³À½¿¡ ÀûÀÀÇϴµ¥ »ó´çÈ÷ ¾î·Æ°Ô ´À²¸Áö´Â °ÍÀÌ »ç½ÇÀÌ´Ù. ¿©±â¿¡¼­´Â Acegi°¡ ³ª¿À°Ô µÈ ÀÌÀ¯¿Í ±× »ç¿ë¹ýµé¿¡ ´ëÇØ °£´ÜÈ÷ ¾Ë¾Æº¸ÀÚ.

Ç¥ÁØ À¥ ÄÁÅ×ÀÌ³Ê º¸¾È ¸ÞÄ¿´ÏÁò
Acegi¸¦ »ìÆìº¸±â Àü¿¡ ÀÚ¹Ù À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ º¸¾È Ç¥ÁØÀº ¾ø´Â °ÍÀϱî? ´ç¿¬È÷ ÀÖ´Ù. JAAS(Java Authentication and Authorization Service) Ç¥ÁØÀÌ Á¸ÀçÇÑ´Ù. ¶ÇÇÑ Java EE ±â¹Ý À¥ ÄÁÅ×À̳ʴ ÀÎÁõ(Authentication)°ú ±ÇÇÑ(Authorization)À» ó¸®ÇÏ´Â ¸ÞÄ¿´ÏÁòÀ» Æ÷ÇÔÇϰí ÀÖ´Ù.

ÀÌ ¸ÞÄ¿´ÏÁòÀ» CMA(Container Managed Authentication)¶ó°í ÇÑ´Ù. CMA´Â BASIC, Form-BASED, Mutual Authentication(»óÈ£ ÀÎÁõ)ÀÇ ¼¼ °¡Áö À¯ÇüÀ» Áö¿øÇÑ´Ù. ¿©±â¿¡¼­´Â Form-Based ÀÎÁõ À§ÁÖ·Î »ìÆì º¼ °ÍÀÌ´Ù. ÅèĹ(Tomcat)¿¡¼­ CMP¸¦ »ç¿ëÇÏ·Á¸é <¸®½ºÆ® 6>°ú °°ÀÌ web,xml°ú server.xmlÀ» ¼öÁ¤ÇØ ÁÖ¾î¾ßÇÑ´Ù.

web.xml¿¡ ¸¦ FORMÀ¸·Î ¼³Á¤µÈ À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ actionÀÌ j_security_checkÀÎ ¸®Äù½ºÆ®°¡ Àü´ÞµÇ¸é CMA ¸ÞÄ¿´ÏÁòÀÌ ½ÇÇàµÈ´Ù. CMA ¸ÞÄ¿´ÏÁòÀº server.xmlÀÇ ¼³Á¤À» ÅëÇØ¼­ j_security_chech ÆûÀÇ j_username°ú j_password ÆÄ¶ó¹ÌÅ͸¦ ÀÌ¿ëÇÏ¿© ÀÎÁõÀ» ó¸®Çϰí ÀÎÁõ󸮰¡ ¼º°øÀûÀ̸é ÀÎÁõ »ç¿ëÀÚÀÇ ±ÇÇÑÀ» Á¶È¸ÇÑ´Ù. ÅèĹÀº JDBCRealm, DataSourceRealm, JNDIRealm, MemoryRealm, JAASRealmÀ» Áö¿øÇÑ´Ù.

<¸®½ºÆ® 6>Àº JDBCRealmÀÇ ¼³Á¤ ¿¹Á¦ÀÌ´Ù. web.xmlÀÇ Àº À¥ ¾ÖÇø®ÄÉÀÌ¼Ç ÀÚ¿øÀÇ Á¢±Ù ±ÇÇÑÀ» Á¤ÀÇÇÑ´Ù. <¸®½ºÆ® 6>Àº URLÀÌ ¡®/admin/*¡¯ ÆÐÅÏÀÎ ÀÚ¿øÀº ¡®manager¡¯ ±ÇÇÑÀÌ ÀÖÀ» °æ¿ì¿¡¸¸ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ¼³Á¤ÀÌ´Ù.

ÀÎÁõÀÌ ¿Ï·áµÈ »ç¿ëÀÚÀÇ ¸®Äù½ºÆ®°¡ ÀÇ ÆÐÅϰú ¸ÅÄ¡µÉ °æ¿ì, ÀÎÁõµÈ »ç¿ëÀÚ°¡ ¡®manager¡¯ ±ÇÇÑÀ» °¡Áö°í ÀÖÀ¸¸é ÇØ´ç ÀÚ¿øÀÇ Á¢±ÙÀ» Çã¿ëÇÏ°í ±ÇÇÑÀÌ ¾øÀ¸¸é Á¢±ÙÀ» Á¦ÇÑÇÑ´Ù.

CMA¸¦ »ç¿ëÇÒ °æ¿ì ÀÎÁõ°ú ±ÇÇÑ¿¡ ´ëÇÑ º°µµÀÇ °³¹ß °úÁ¤ ¾øÀÌ WAS(Web Application Server)¿¡ ³»ÀåµÈ ¸ÞÄ¿´ÏÁòÀ» ÀÌ¿ëÇÏ¿© ó¸®ÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡À» °®´Â´Ù. CMA´Â ¸®Äù½ºÆ® ÀÎÁõ°ú ±ÇÇÑ °úÁ¤À» ¿Ï·áÇÑ µÚ¿¡ ÀÎÁõ°ú ±ÇÇÑ Á¤º¸¸¦ EJB ÄÁÅ×À̳ʿ¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¶Ç, HttpServletRequest.getRemoteUser(), HttpServletRequest.getUserPrincipal(), HttpServletRequest.isUserInRole(String role)¸¦ ÀÌ¿ëÇÏ¿© ÇÁ·Î±×·¥ ÀûÀ¸·Î ÀÎÁõ ¹× ±ÇÇÑ Á¤º¸¸¦ »ç¿ëÇÒ ¼ö µµ ÀÖ´Ù.

 <¸®½ºÆ® 6> ÅèĹ CMA¸¦ »ç¿ëÇϱâ À§ÇÑ ¿¹Á¦


CMA°¡ ÁÁÀº °Í ¾Æ´Ñ°¡?
º¸¾ÈÀÇ °¡Àå Áß¿äÇÑ ¿ä¼Ò´Â ÀÎÁõ°ú ±ÇÇÑÀÌ´Ù. ÀÌ·¯ÇÑ º¸¾ÈÀº ´ëºÎºÐÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ±âº»ÀûÀ¸·Î Á¦°øµÇ¾î¾ß ÇÏ´Â Çʼö±â´ÉÀÌ´Ù. Æû À̸§°ú ÇÊµå ¸íÀ» ¸ÂÃß°í ¼­¹ö¿¡ ¼³Á¤À» ÇÏ´Â °Í¸¸À¸·Î WAS¿¡¼­ Á¦°øÇÏ´Â º¸¾È ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇÒ ¼ö ÀÖ´Â CMA´Â Á¤¸» ÁÁ±â¸¸ ÇÑ °ÍÀϱî? CMA´Â Á¤¸» ÁÁÀº ±â´ÉÀÌ´Ù.

±×·¯³ª ¸ðµç »óȲ¿¡¼­ ÁÁÀ» ¼ö´Â ¾ø´Ù. CMA¸¦ »ç¿ëÇϸé CMAÀÌÀü¿¡ ¸®Äù½ºÆ®¸¦ Àü ó¸®Çϱâ À§ÇÑ filter¸¦ ¼³Á¤ÇÒ ¼ö°¡ ¾ø´Ù. ¶Ç À̽ļºÀÌ ¶³¾îÁø ´Ù´Â °Íµµ CMAÀÇ Å« ´ÜÁ¡ÀÌ´Ù.

ÅèŰú ·¹ÁøÀ» WAS·Î »ç¿ëÇÒ °æ¿ì °£´ÜÇÑ ¹æ¹ýÀ¸·Î CMA ¼³Á¤ÇÒ ¼ö´Â ÀÖÁö¸¸, ÅèŰú ·¹ÁøÀÇ CMA ¼³Á¤ ¹æ½ÄÀº ÀüÇô ´Ù¸£´Ù. À¥ ·ÎÁ÷À̳ª À¥ ½ºÇÇ¾î °°Àº °æ¿ì ¼³Á¤¿¡ ÇÊ¿äÇÑ XML¿¡ Á¢±ÙÇÒ ¼ö ¾ø°í Á¦°øÇÏ´Â ÄַܼΠ¼³Á¤ÇØ¾ß ÇÑ´Ù. ÀÌ °æ¿ì¿¡´Â ¼³Á¤ÇÏ´Â ¹æ½Ä ÀÚü°¡ ´Ù¸£´Ù. ±âÁ¸¿¡ ÅèĹ »ó¿¡¼­ <¸®½ºÆ® 6>°ú °°ÀÌ JDBCRealmÀ¸·Î °³¹ßµÈ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ÀÖ´Ù.

À̰ÍÀ» À¥ ·ÎÁ÷¿¡ Æ÷ÆÃ ÇÏ´Â °ÍÀº ½±Áö ¾Ê´Ù. À¥ ·ÎÁ÷Àº JDBC ±â¹ÝÀÇ RealmÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù. À¥ ·ÎÁ÷Àº ±âº»ÀûÀ¸·Î LDAP ±â¹ÝÀÇ Realm¸¸À» Áö¿øÇÑ´Ù. º¸¾È Ãø¸éÀÇ ±â´ÉÀº WASº°·Î ´Ù¸¥ ¹æ½Ä°ú ÀýÂ÷·Î ¼³Á¤µÇ¾î¾ß ÇÑ´Ù´Â ¾î·Á¿òÀÌ ÀÖ´Ù. µ¿ÀÏÇÑ ¸ÞÄ¿´ÏÁòÀ» Á¦°øÇÏÁö ¾Ê´Â °æ¿ìµµ ÀÖ´Ù. µû¶ó¼­ CMAÀ» »ç¿ëÇÒ °æ¿ì À̽ļºÀÌ ¶³¾îÁö´Â °á°ú¸¦ ³º´Â °ÍÀÌ´Ù.

¾ÖÇø®ÄÉÀÌ¼Ç ·¹º§ º¸¾È
¾Õ¼­ À̾߱â ÇÑ °Íó·³ Acegi´Â ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©¸¦ ±â¹ÝÀ¸·Î °³¹ßµÈ º¸¾È ÇÁ·¹ÀÓ¿öÅ©ÀÌ´Ù. Acegi´Â ÇÊÅ͸¦ ÀÌ¿ëÇÏ¿© URL °Ë»ç¸¦ Çϰí, »ç¿ëÀÚ ·Î±×ÀÎ ¹× ¿ªÇÒÀ» ÇÒ´çÇÏ°í ºñÁî´Ï½º ·ÎÁ÷ ¸Þ¼ÒµåÀÇ »ç¿ëÀÚ ±ÇÇÑ °Ë»çÇÏ´Â ¿ªÇÒÀ» ´ã´çÇÑ´Ù.

Acegi°¡ ½ºÇÁ¸µ ±â¹ÝÀ¸·Î ¸¸µé¾îÁ³´Ù°í´Â ÇÏÁö¸¸ ²À ½ºÇÁ¸µÀ» »ç¿ëÇÏ´Â À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡¸¸ Àû¿ëÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. Acegi´Â »ç¿ëÀÚ ÀÎÁõ°ú ±ÇÇÑÀ» ó¸® ´ë»óÀ¸·Î ÇÑ´Ù.

»ç¿ëÀÚ ÀÎÁõÀº À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÇÊÅ͸¦ ÅëÇØ¼­ ÀÎÁõ ´ë»ó ¸®Äù½ºÆ®¸¦ ó¸®ÇÑ´Ù. »ç¿ëÀÚ¸¦ ±¸ºÐÇϱâ À§ÇÏ¿© PrincipalÀ» »ç¿ëÇϰí ÀÎÁõÀ» Çϱâ À§ÇÏ¿© Credentials¸¦ »ç¿ëÇÑ´Ù. Principal°ú Credentials¶ó´Â ¿ë¾î°¡ »ý¼ÒÇÒ °ÍÀÌ´Ù. À̰ÍÀº Æû ±â¹Ý ÀÎÁõ¿¡¼­ »ç¿ëµÇ´ø id¿Í ÆÐ½º¿öµå¸¦ ÀǹÌÇÑ´Ù.

º¸¾ÈÃø¸é¿¡¼­ »ç¿ëÀÚ¸¦ ±¸ºÐÇϰí È®ÀÎ ÇÏ´Â ¹æ¹ýÀº ¸Å¿ì ´Ù¾çÇÏ´Ù. Æû ±â¹ÝÀÇ ¾ÆÀ̵ð/ÆÐ½º¿öµå°¡ ÀϹÝÀûÀÌÁö¸¸, À̰ÍÀº »ç¿ëÀÚ¸¦ ±¸ºÐÇϰí È®ÀÎÇÏ´Â º¸¾ÈÀÇ ´Ù¾çÇÑ ¹æ¹ý Áß¿¡ ÇϳªÀÏ »ÓÀÌ´Ù.

Acegi´Â HTTP Basic ¹æ½Ä, HTML Form ÅÂ±× ¹æ½Ä, ½Ì±Û»çÀοÂ(CAS, Central Authentication Service¸¸À» Áö¿ø) ¹æ½ÄÀ» ±âº»À¸·Î Áö¿øÇÑ´Ù. ±× ¿ÜÀÇ ÀÎÁõ ¹æ½ÄÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï È®À强µµ Á¦°øÇÑ´Ù. µû¶ó¼­ »ç¿ëÀÚ ±¸ºÐ°ú È®ÀÎ Á¤º¸¸¦ Principal°ú Credentials·Î Ç¥ÇöÇÑ´Ù. Acegi´Â AOP¸¦ ÀÌ¿ëÇÏ¿© ¸Þ¼Òµå ½ÇÇà ÀüÈÄ¿¡ ±ÇÇÑÀ» üũÇÑ´Ù.

¡ÜÀ¥ ¾ÖÇø®ÄÉÀÌ¼Ç Acegi web.xml ¼³Á¤
À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ Acegi¸¦ »ç¿ëÇϱâ À§Çؼ­´Â web.xml¿¡ <¸®½ºÆ® 7>°ú °°Àº ¼³Á¤À» ÇØ¾ß ÇÑ´Ù. Acegi´Â ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©¸¦ »ç¿ëÇÑ´Ù. °ú °¡ ¹Ù·Î ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©¸¦ ¼³Á¤ÇÏ´Â °úÁ¤ÀÌ´Ù.

¼³Á¤À» ÅëÇØ¼­ ¸ðµç HTTP ¸®Äù½ºÆ®´Â FilterToBeanProxy ÇÊÅÍ·Î Àü´ÞµÈ´Ù. FilterToBeanProxy´Â µî·ÏµÈ ÇÊÅ͵éÀ» ¼øÂ÷ÀûÀ¸·Î ½ÇÇàÇÏ¿© º¸¾È üũ¸¦ ó¸®ÇÑ´Ù.

 <¸®½ºÆ® 7>À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ Acegi¸¦ Àû¿ëÇϱâ À§ÇÑ web.xml ¼³Á¤


¡ÜAcegi ¼³Á¤ – filterChainProxy
web.xml¿¡ ¼³Á¤µÈ FilterChainProxy ÇÊÅÍ´Â applicationContext-acegi-security.xml¿¡ µî·ÏµÈ filterChainProxy ºóÀ» »ç¿ëÇÑ´Ù. <¸®½ºÆ® 8>Àº filterChainProxyÀÇ ¼³Á¤ ¿¹Á¦ÀÌ´Ù. org.acegisecurity.util.FilterChainProxy Ŭ·¡½º¸¦ ¹Ýµå½Ã ¡®filterChainProxy¡¯·Î µî·ÏÇØ¾ß ÇÑ´Ù. filterChainProxy´Â HTTP ¸®Äù½ºÆ®¸¦ ó¸® ÇÒ ¼øÂ÷ÀûÀÎ ÇÊÅ͵éÀÌ µî·ÏµÈ´Ù.

<¸®½ºÆ® 8>¿¡¼­ ¡®CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON¡¯Àº ÇöÀç URLÀ» ¸ðµÎ ¼Ò¹®ÀÚ·Î ÀüȯÇ϶ó´Â ¸í·ÉÀÌ´Ù. ¡®PATTERN_TYPE_APACHE_ANT¡¯Àº ó¸®ÇÒ URL ÆÐÅÏÀ» µî·ÏÇÏ´Â ¹æ½ÄÀ¸·Î Á¤±Ô Ç¥Çö½Ä ´ë½Å ANT ½ºÅ¸ÀÏÀÇ ÆÐÅÏÀ» »ç¿ëÇϰڴٴ ÀǹÌÀÌ´Ù.

¡®/**¡¯ ÆÐÅÏ¿¡ ÀÏÄ¡ÇÏ´Â ¸®Äù½ºÆ®¿¡ ´ëÇÏ¿© ´ÙÀ½¿¡ Á¤ÀÇµÈ ¿­ °³ÀÇ ÇÊÅ͸¦ µî·ÏµÈ ¼ø¼­´ë·Î ½ÇÇàÇ϶ó´Â ÀǹÌÀÌ´Ù.

 <¸®½ºÆ® 8> applicationContext-acegi-security.xmlÀÇ FilterChainProxy ¼³Á¤


Acegi ÇÊÅÍ¿Í ÀÚ¿ø Á¢±Ù ¼³Á¤
<¸®½ºÆ® 8>ÀÇ ¼³Á¤ Áß¿¡¼­ ÁÖ·Î »ç¿ëµÇ´Â ³× °³ÀÇ ºó¿¡ ´ëÇØ Á¶±Ý ´õ ÀÚ¼¼È÷ »ìÆìº¸ÀÚ. ¿©±â¿¡¼­ ¾Ë¾Æ º¼ ³× °³ÀÇ ºóÀº AuthenticationProcessingFilter¿Í HttpSessionContextIntegrationFilter, ExceptionTranslationFilter ±×¸®°í FilterSecurityInterceptorÀÌ´Ù. °¢ ºóÀÇ ¿ªÇÒ¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.

¡ÜAuthenticationProcessingFilter
authenticationProcessingFilter´Â URL(authenticationFailureUrl) ÀÎÁõÀÌ ½ÇÆÐÇßÀ» °æ¿ì¿¡ À̵¿ÇÒ URL(filterProcessesUrl)À» ¼³Á¤ÇÑ´Ù. ¶ÇÇÑ ÀÎÁõ ÀýÂ÷¸¦ ¾î¶»°Ô ¼³Á¤ÇÒ °ÍÀΰ¡¸¦ µî·ÏÇϴµ¥ À̰ÍÀÌ ¹Ù·Î authenticationManagerÀÌ´Ù. AuthenticationManager¸¦ ÅëÇØ¼­ »ç¿ëÀÚÀÇ Principal°ú Credentials°¡ Á¤È®ÇÑ Áö ÆÄ¾ÇÇϰí ÀûÀýÇÑ Ã³¸®¸¦ ¼öÇàÇÏ°Ô µÈ´Ù.

 <¸®½ºÆ® 9> applicationContext-acegi-security.xmlÀÇ AuthenticationProcessingFilter ¼³Á¤


<¸®½ºÆ® 9>ÀÇ authenticationProcessingFilter ºóÀº authenticationManager ºó¿¡ ÀÇÁ¸¼ºÀ» °¡Áö°í ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. autenticationManager ºó ÀÌÇÏÀÇ ÀÇÁ¸¼ºÀº <¸®½ºÆ® 10>°ú °°´Ù. authenticationManager´Â ÀÎÁõÀ» ó¸®ÇÏ´Â º¹¼öÀÇ Provider¸¦ Æ÷ÇÔÇÏ°í ¼øÂ÷ÀûÀ¸·Î Provider¿¡°Ô ÀÎÁõ ÀýÂ÷¸¦ À§ÀÓÇÏ´Â ¿ªÇÒ¸¸À» ÇÑ´Ù.

authenticationManager ¿¹Á¦¿¡¼­ »ç¿ëÇÏ´Â Provider´Â DaoAuthenticationProvider¸¦ »ç¿ëÇϰí ÀÖ´Ù. DaoAuthenticationProvider´Â ¸Þ¸ð¸®¿Í ÇØ½Ã, µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåµÈ µ¥ÀÌÅ͸¦ ÀÎÁõÇÏ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù. DaoAuthenticationProvider´Â userDetailsService¿¡ ¾î¶² ÀúÀå¼Ò¸¦ »ç¿ëÇÒ °ÍÀΰ¡¸¦ ¼³Á¤ÇÑ´Ù.

<¸®½ºÆ® 10>Àº <¸®½ºÆ® 12>ÀÇ users.properties Á¤º¸¸¦ ¸Þ¸ð¸®¿¡ °ü¸®ÇÏ´Â userDetailsServiceºóÀ» »ç¿ëÇϵµ·Ï ¼³Á¤µÈ ¿¹Á¦ÀÌ´Ù. Acegi¿¡¼­ »ç¿ëÇÏ´Â ÀÎÁõÀÇ ÇÙ½É ÀÎÅÍÆäÀ̽º´Â Authentication°ú AuthenticationManagerÀÌ´Ù.

ProviderManager´Â AuthenticationManagerÀÇ ±¸Çö Ŭ·¡½ºÀÌ´Ù. AuthenticationÀº ³»ºÎÀûÀ¸·Î ¼¼ °³ÀÇ ÁÖ¿ä ¸â¹ö º¯¼ö¸¦ °¡Áø´Ù. ÀÌ ¸â¹ö º¯¼ö´Â Principal, credentials, authorities ¹è¿­ÀÌ´Ù. PrincipalÀº »ç¿ëÀÚÀÇ ±¸ºÐÀÚ(ID), credentials´Â ÀÎÁõÀ» È®ÀÎÇϱâ À§ÇÑ µ¥ÀÌÅÍ(ÆÐ½º¿öµå)À̰í credentials´Â »ç¿ëÀÚ ·ÑÀ» ÀúÀåÇÑ´Ù.

authenticationProcessingFilter°¡ ½ÇÇàµÉ ¶§ authenticationProcessingFilter´Â principal°ú credentials¸¦ ÀÌ¿ëÇÏ¿© Authentication °´Ã¼¸¦ »ý¼ºÇÑ´Ù. À̶§±îÁö credentials ¹è¿­Àº ÃʱâÈ­ µÈ »óÅÂÀÌ´Ù. authenticationProcessingFilter´Â AuthenticationManager.authenticate(Authentication) ÀÌ¿ëÇÏ¿© Authentication °´Ã¼ÀÇ credentials¸¦ ¼³Á¤ÇÏ¿© ¿ÏÀüÇÑ Authentication °´Ã¼¸¦ ¸¸µé°Ô µÈ´Ù.

 <¸®½ºÆ® 10> ProviderManager¿Í ÀÇÁ¸¼º ¿¹Á¦


 <¸®½ºÆ® 11> user.properties ¿¹Á¦


¡ÜHttpSessionContextIntegrationFilter
HttpSessionContextIntegrationFilter´Â AcegiÀÇ SecurityContext¸¦ ¼­ºí¸´ ¼¼¼Ç°ú ¿¬°áÇÏ´Â ¿ªÇÒÀ» ´ã´çÇÑ´Ù. »ç¿ëÀÚÀÇ Authentication °´Ã¼¸¦ ¸Å¹ø ¸¸µå´Â °ÍÀº ºñÈ¿À²ÀûÀÌ´Ù. Acegi´Â AuthenticationÀ» ÀúÀåÇϰí Àç»ç¿ëÇÑ´Ù. Acegi´Â SecurityContextHolderÀÇ ThreadLocal ¸â¹ö º¯¼ö¿¡ SecurityContext¸¦ ÀúÀåÇÑ´Ù.

<¸®½ºÆ® 12>´Â ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ Authentication °´Ã¼¸¦ »ç¿ëÇϱâ À§ÇØ ¾ò¾î¿À´Â ÄÚµå¿Í HttpSessionContextIntegrationFilter¸¦ ¼³Á¤ÇÏ´Â XMLÀÇ ¿¹Á¦ÀÌ´Ù.

 <¸®½ºÆ® 12> HttpSessionContextIntegrationFilter ½ºÇÁ¸µ ºó ¼³Á¤ ¿¹Á¦ ¹× ÄÚµå


¡ÜExceptionTranslationFilter
ExceptionTranslationFilter´Â ¿¹¿Ü »óȲÀÌ ¹ß»ýÇÑ °æ¿ì ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡¸¦ Á¤ÀÇÇÑ´Ù. ÀÎÁõÀÌ µÇÁö ¾Ê¾Æ¼­ ¿¹¿Ü°¡ ¹ß»ýÇÑ °æ¿ì¶ó¸é <¸®½ºÆ® 13>¿¡¼­´Â ¡®/acegilogin.jsp¡¯°¡ Àü´ÞµÈ´Ù. ¹Ý¸é ±ÇÇÑÀÌ ¾ø¾î¼­ ¿¹¿Ü°¡ ¹ß»ýÇÑ »óȲÀ̶ó¸é ¡®/accessDenied.jsp¡¯°¡ Àü´ÞµÈ´Ù.

 <¸®½ºÆ® 13> ExceptionTranslationFilterÀÇ ½ºÇÁ¸µ ºó ¼³Á¤ ¿¹Á¦


¡ÜFilterSecurityInterceptor
FilterSecurityInterceptor´Â º¸¾È ´ë»ó ÀÚ¿øÀ» ¼³Á¤ÇÏ´Â ºÎºÐÀÌ´Ù. <¸®½ºÆ® 14>¿¡¼­´Â objectDefinitionSource¿¡¼­ »ç¿ëÇÒ ÀÚ¿øÀÇ ±ÇÇÑÀ» ¼³Á¤ÇÑ´Ù. HTTP ¸®Äù½ºÆ® URLÀ» ¸ðµÎ ¼Ò¹®ÀÚ·Î ¹Ù²Ù°í ant ½ºÅ¸ÀÏÀÇ ÆÐÅÏÀ» »ç¿ëÇϰڴٴ ¼³Á¤À» Çϰí ÀÖ´Ù. ¶Ç, ¡®/secure/extreme/¡¯ÀÌÇÏÀÇ URLÀº ROLE_SUPERVISOR ±ÇÇÑÀ» °®´Â »ç¿ëÀÚ¸¸ Á¢±Ù °¡´ÉÇϵµ·Ï ¼³Á¤ÇÏ´Â ¿¹Á¦ÀÌ´Ù.

ÇöÀç HTTP ¸®Äù½ºÆ®ÀÇ »ç¿ëÀÚ°¡ ¾ÆÁ÷ ÀÎÁõ ¹ÞÁö ¾Ê¾Ò´Ù¸é authenticationManager¸¦ »ç¿ëÇÏ¿© ÀÎÁõ ÀýÂ÷¸¦ °ÅÄ£´Ù. ÀÎÁõ ÀýÂ÷¸¦ °ÅÄ¡°í ±ÇÇÑ Á¤º¸¸¦ ¼öÁýÇÑ µÚ¿¡ objectDefinitionSourceÀ» È®ÀÎÇÏ¿© accessDecisionManager°¡ ÇöÀç »ç¿ëÀÚÀÇ Á¢±Ù ¿©ºÎ¸¦ °áÁ¤ÇÏ°Ô µÈ´Ù.

 <¸®½ºÆ® 14> FilterSecurityInterceptor ÀÇ ½ºÇÁ¸µ ºó ¼³Á¤ ¿¹Á¦


Acegi¿Í Ä£ÇØÁö±â
Acegi´Â ÀÚ¹Ù Ç÷§Æû¿¡ »ç¿ë °¡´ÉÇÑ º¸¾È ÇÁ·¹ÀÓ¿öÅ© Áß ÃÖ°íÀÇ °ÉÀÛÀÌ´Ù. ÀÌ ¹øÈ£¿¡¼­´Â Acegi ÇÁ·¹ÀÓ¿÷¿¡ ÀûÀÀÇϱâ À§ÇÑ °¡Àå ±âº»ÀûÀÎ ¼³Á¤¹ý°ú ±âº» °³³ä¸¸À» »ìÆìº¸¾Ò´Ù. Acegi ÇÁ·¹ÀÓ¿öÅ©°¡ ÁÁ±â´Â ÇÏÁö¸¸ óÀ½¿¡ Á¢±ÙÇÏ´Â °ÍÀº ½±Áö ¾ÊÀº °ÍÀÌ »ç½ÇÀÌ´Ù. CMA¿¡ ´ëÇÏ¿© Àü¹ÝÀûÀ¸·Î »ìÆìº¸°í ½Í´Ù¸é ¡®J2EE Form-based Authentication¡¯ (http://www.onjava.com/pub/a/onjava/2002/06/12/form.html)À» ÃßõÇÑ´Ù.

Acegi ÀÚü¿¡ ´ëÇÑ ÀÚ·á·Î´Â www.acegisecurity.org¿¡¼­ Á¦°øÇÏ´Â ·¹ÆÛ·±½º ¸Å´º¾óÀÌ °¡Àå ÁÁÀº ÀÚ·áÁö¸¸ ±× ÀڷḦ Á¢Çϱâ Àü¿¡ http://www.acegisecurity.org/articles.html¿¡ Á¤¸®µÈ ¹®¼­¸¦ Àо´Â °ÍÀ» ÃßõÇÑ´Ù. À̰÷¿¡´Â ºí·Î±×³ª ±âŸ À¥ ¹®¼­·Î Á¸ÀçÇÏ´Â ÁÖ¿ä ÀÚ·áÀÇ ¸®½ºÆ®¸¦ Á¦°øÇÑ´Ù.

ÀÌ Áß¿¡¼­ ¡®Securing Your Java Applications - Acegi Security Style¡¯´Â ¹Ýµå½Ã ÀÐ¾î º¸´Â °ÍÀÌ ÁÁ´Ù. ÀÌ ¹®¼­¸¦ ¹ø¿ªÇÑ ¹®¼­´Â ¡®http://openframework.or.kr/JSPWiki/Wiki.jsp?page=SecuringYourJavaApplications¡¯¿¡ ÀÖ´Ù.

¸¶Áö¸·À¸·Î ÀÚ¹ÙÁö±â À§Å°(http://wiki.javajigi.net/)¿¡ Spring Framework °­Á¿¡ AcegiÀÇ Àü¹ÝÀûÀÎ °³³äÀ» Á¤¸®ÇÑ ¹®¼­¸¦ Á¦°øÇϰí ÀÖ´Ù. ¶ÇÇÑ 2006³â 1¿ùºÎÅÍ 3°³¿ù°£ ¸¶¼Ò¿¡ ¿¬ÀçµÈ ¡®Acegi Security¡¯ ¿¬À縦 ÅëÇØ¼­ acegiÀÇ Àü¹ÝÀûÀÎ °³³äÀ» ÀâÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù.

ÀÌ ¹®¼­µéÀ» »ìÆìº¸°í SpringFrmaeworkÀÇ Reference ManualÀ» Àо´Â °ÍÀÌ °¡Àå È¿°úÀûÀÎ Á¢±Ù¹ýÀ̶ó°í »ý°¢ÇÑ´Ù. @


* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.
°ü·Ã±â»ç
½Ç¹ö¶óÀÌÆ® Ȱ¿ë¹ý
ÇÁ·¹ÀÓ¿öÅ© Ȱ¿ëÀü·«
¡°°æÀïÀº ¾ø´Ù. ¾ÕÀ¸·Î ³ª¾Æ°¥ »ÓÀÌ´Ù.¡±
µ¶ÀÚÀÇ°ß ³²±â±â (·Î±×ÀÎ ÈÄ µ¶ÀÚ ÀǰßÀ» ³²±â½Ç ¼ö ÀÖ½À´Ï´Ù.)
¾ÆÀ̵ð ºñ¹Ð¹øÈ£
 
 
?>
[Ã¥¼Ò°³]ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¨: »ý°¢À»...
[DDD ¨ç] µµ¸ÞÀÎ ÁÖµµ °³¹ß
À©µµ¿ìCE µð¹ö±ë¿¡ °üÇÑ 12°¡Áö...
°¡»óÈ­¿¡ ½ÇÆÐÇÏ´Â 10°¡Áö ÀÌÀ¯
'°¡»óÈ­ °ü¸®'¿¡ ´ëÇÑ 10°¡Áö ...
[±â°í]±×¸° ½ºÅ丮Áö·Î °¡´Â±æ
[Ã¥¼Ò°³] CentOS ¸®´ª½º ±¸...
ÄÚ´Ú ÄÞÆÑÆ® µðÄ«,'ÅÍÄ¡¼¾¼­'·Î ¹Ù²Ù´Ï¡¦À¯Àúµé "Àú¿ä! Àú¿ä!" [00:04:05]
ÁøÇà ·ùÁØ¿µ ±âÀÚ, Á¦ÀÛ À¯È¸Çö PD