¿øÁ¦´Â Twelve Best Practices for Spring XML Configuration Files ÀÌ´Ù.
¿ø¹®ÀÇ À§Ä¡´Â http://lizjason.com/blog/?p=12
ONJava.comÀÇ Twelve Best Practices For Spring XML Configurations ±ÛÀ» ±â¹ÝÀ¸·Î ¿¹Á¦¹× ¼³¸í¿¡ ´ëÇÑ ÀϺΠ¼öÁ¤
SpringÀº °·ÂÇÑ ÀÚ¹Ù ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·¹ÀÓ¿öÅ©ÀÌ°í ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀÇ ³ÐÀº ¹üÀ§¿¡¼ »ç¿ëµÈ´Ù. ÀÌ°ÍÀº ´Ü¼øÇÔ°ú Å×½ºÆ®ÀÇ ¿ëÀ̼ºÀ» ´Þ¼ºÇϱâ À§ÇØ ÀÇÁ¸¼º»ðÀÔ(Dependency Injection)À» »ç¿ëÇÑ´Ù. ÀÇÁ¸¼º°ú bean»ý¼ºÀº XML¼³Á¤ÆÄÀÏ¿¡ ´ë°³ ¸í½ÃµÈ´Ù. XML¼³Á¤Àº ÀåȲÇÏ°í Å« ÇÁ·ÎÁ§Æ®¿¡¼´Â °ü¸®ÇϱⰡ ¾î·Á¿ï¼öµµ ÀÖ´Ù. ¼³Á¤ÆÄÀÏÀÇ °¡µ¶¼º°ú °ü¸®ÀÇ ¿ëÀ̼ºÀÌ °í·ÁµÇ´Â ¸¸Å, ³ª´Â ´ÙÀ½ÀÇ »çÇ×ÀÌ ¸Å¿ì À¯¿ëÇϸ®¶ó°í »ý°¢ÇÑ´Ù.
1. autowire¸¦ »ç¿ëÇÏÁö ¸»¶ó.
³» ÀÇ°ß¿¡¼, autowire´Â ½ÃÀ層°í¿ë(marketing) ±â´ÉÀÌ´Ù. ÀÌ°ÍÀº ½ÇÁ¦ ÇÁ·ÎÁ§Æ®¿¡¼ °áÄÚ »ç¿ëµÇÁö ¸»¾Æ¾ß ÇÑ´Ù. ÀÌ°ÍÀº ¸î¸î ŸÀÌÇÎÀÇ ¼ö°í¿Í ¼³Á¤Á¶°¢À» ÁÙÀÌÁö¸¸, ¸í¹éÇÔ°ú ¼³Á¤ÀÇ À¯Áöº¸¼ö¼ºÀ» Èñ»ýÇÑ´Ù.
trollswagen, naimdjon, Johannes Brodwall, ÅäÁö´Ô²²¼ autowire´Â ¿ÀÈ÷·Á xmlÀÌ Ä¿Áö¸é Ä¿Áú¼ö·Ï xmlÀÇ ±¸Á¶¸¦ ½±°Ô ÆľÇÇÏ°Ô ÇØÁÖ´Â Á¤¸» ÁÁÀº ±â´ÉÁß¿¡ Çϳª¶ó´Â ÀÇ°ßÀ» Áּ̽À´Ï´Ù. autowire¿¡ °ü·ÃµÈ »çÇ×Àº ÇÁ·ÎÁ§Æ® µµÀԽà Àå,´ÜÁ¡À» ´Ù½Ã »ìÆì »ç¿ëÇÏ±æ ±ÇÇÕ´Ï´Ù.
2. ¸í¸í ±ÔÄ¢À» »ç¿ëÇ϶ó.
ÀÌ°ÍÀº ÀÚ¹ÙÄÚµå¿Í °°Àº ÀǵµÀÌ´Ù. ¿¹¸¦ µé¸é bean id¸¦ À§ÇØ, ´ç½ÅÀº Àڹ٠Ŭ·¡½º ÇÊµå ¸í¸í±ÔÄ¢À» µû¸¦¼ö ÀÖ´Ù. OrderServiceDAOÀÇ ÀνºÅϽº¸¦ À§ÇÑ bean id´Â orderServiceDAO°¡ µÉ°ÍÀÌ´Ù.
3. ´ÜÃàÇüÅÂ(shortcut forms)¸¦ »ç¿ëÇ϶ó.
´ÜÃàÇüÅ´ ÀڽĿä¼Ò¿¡¼ ¼Ó¼ºÀ¸·Î ÇÁ¶óÆÛƼ°ª°ú ÂüÁ¶¸¦ À̵¿½ÃÄÑ ´Ù¼Ò ´ú ÀåȲÇÏ°Ô ¸¸µç´Ù. ÀÌ ´ÜÃàÇüÅ´ 1.2¹öÀü ÀÌÈÄ Áö¿øµÈ´Ù.
´ÜÃàÇüÅ´ ´ÙÀ½°ú °°Àº ±â´ÉÀÌ´Ù.
1.2ÀÌÀü¹öÀü¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ¼ÂÆÃÇÑ´Ù.
1.2ÀÌÈÄ ´ÜÃàÇüŸ¦ »ç¿ëÇÏ¸é ´ÙÀ½°ú °°ÀÌ ¼ÂÆÃÀÌ °¡´ÉÇÏ´Ù.
4. ÀÎÀÚ¸¦ ¸ÂÃß±â À§ÇÑ À妽ºº¸´Ù ŸÀÔÀ» ¼±È£Ç϶ó.
À妽º¸¦ »ç¿ëÇÏ´Â °ÍÀº ¶§¶§·Î ´Ù¼Ò ´ú ÀåȲÇÏ°Ô ¸¸µç´Ù. ÇÏÁö¸¸ ÀÌ°ÍÀº ¿¡·¯¸¦ Á»´õ »ý¼ºÇÏ°í Àб⠾î·Æ´Ù.
´ÙÀ½ÀÇ ¼Ò½º´Â À妽º¸¦ »ç¿ëÇÏ´Â ¿¹Á¦ÀÌ´Ù.
ÇÏÁö¸¸ ´ÙÀ½Ã³·³ ŸÀÔÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÃßõÇÑ´Ù.
5. °¡´ÉÇÏ´Ù¸é beanÁ¤ÀǸ¦ Àç»ç¿ëÇ϶ó.
´ç½ÅÀº Áߺ¹À» Á¦°ÅÇϱâ À§ÇÑ ±â¹ýó·³ »ó¼ÓÀ» »ç¿ëÇÒ¼ö ÀÖ´Ù. ´ç½ÅÀÌ ÇÒ ÇÊ¿ä°¡ ÀÖ´Â ¸ðµç°ÍÀº »óÀ§ bean¿¡ abstract=true¸¦ ¸í½ÃÇÏ°í ÀÚ½Ä bean¿¡ parentÂüÁ¶¸¦ µÎ´Â °ÍÀÌ´Ù. ´ç½ÅÀÌ Å¬·¡½º³ª factory¸Þ¼Òµå¸¦ ¸í½ÃÇÏÁö ¾Ê´Â´Ù¸é, beanÀº ÇÔÃàÀûÀ¸·Î abstract»óÅ°¡ µÈ´Ù.
¿¹¸¦ µé¸é ´ÙÀ½°ú °°ÀÌ ¼ÂÆÃÇÑ´Ù.
6. import º¸´Ù´Â ApplicationContext¸¦ ÅëÇØ beanÁ¤ÀǸ¦ Á¶¸³(assembling)ÇÏ´Â °ÍÀ» ¼±È£Ç϶ó.
Ant½ºÅ©¸³Æ®³» importó·³, ±×°ÍµéÀº ¸ðµâÈµÈ beanÁ¤ÀǸ¦ Á¶¸³Çϴµ¥ À¯¿ëÇÏ´Ù. ¾î·µç, ÀÌ°ÍÀº ApplicationContext¸¦ ÅëÇØ ±×°ÍµéÀ» Á¶¸³Çϱâ À§ÇØ Á»´õ À¯¿¬ÇÏ´Ù. ´ç½ÅÀº ApplicationContextÀÇ »ý¼ºÀÚ¸¦ À§ÇØ beanÁ¤ÀÇÀÇ ¹è¿À» Àü´ÞÇÒ¼ö ÀÖ´Ù.
´ÙÀ½Àº import¸¦ Á¶ÇÕÇÏ¿© xmlÀ» ¼³Á¤ÇÏ´Â ¼Ò½ºÀÌ´Ù.
import¸¦ »ç¿ëÇÏ¿© xmlÀ» Á¶ÇÕÇÏ´Â ¹æ½Äº¸´Ù´Â ¾Æ·¡¿Í °°ÀÌ ApplicationContext¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Á»´õ À¯¿¬ÇÑ °³¹ßÀ» µµ¿ÍÁØ´Ù.
7. °¡´ÉÇÏ´Ù¸é, bean È®ÀÎÀÚ·Î id¸¦ »ç¿ëÇ϶ó.
id¸¦ »ç¿ëÇÏ´Â °ÍÀº °¡µ¶¼ºÀ» Áõ°¡½ÃÅ°Áö ¾Ê´Â´Ù. ÇÏÁö¸¸ ÀÌ°ÍÀº beanÂüÁ¶¸¦ È®ÀÎÇϱâ À§ÇØ XMLÆļ¿¡ ¿µÇâÀ» ³¢Ä¥¼ö ÀÖ´Ù. ¸¸¾à id°¡ XML IDREFÁ¦ÇÑÀ» À§ÇØ »ç¿ëµÉ¼ö ¾ø´Ù¸é, ´ç½ÅÀº À̸§(name)À» »ç¿ëÇÒ¼ö ÀÖ´Ù.
8. °³¹ß½Ã¿¡´Â ÀÇÁ¸¼ºÃ¼Å©(dependency-check)¸¦ »ç¿ëÇ϶ó.
´ç½ÅÀº beanÁ¤ÀÇÀÇ dependency-check¼Ó¼ºÀ» µðÆúÆ®ÀÎ noneÀÌ ¾Æ´Ñ ´Ù¸¥°ªÀ¸·Î ¼ÂÆÃÇÒ¼ö ÀÖ´Ù. ±×·¡¼ ÄÁÅ×À̳ʴ ´ç½ÅÀ» À§ÇØ ÀÇÁ¸¼ºÃ¼Å©¸¦ ÇÒ¼ö ÀÖ´Ù.
9. °¢°¢ÀÇ XMLÆÄÀÏÀ» À§ÇØ Çì´õ(header) ÁÖ¼®À» Ãß°¡Ç϶ó.
XMLÆÄÀϳ» ³»ºÎ ÁÖ¼®´ë½Å¿¡ ¼¼úÀûÀÎ id¿Í nameÀ» »ç¿ëÇϴ°ÍÀÌ ¼±È£µÈ´Ù. ¾î·µç, °¢°¢ÀÇ ÆÄÀÏÀÌ Á¤ÀÇµÈ benaÀ» ¿ä¾àÇÏ´Â Çì´õ¸¦ °¡Áø´Ù¸é ÀÌÇØÇϱⰡ ½±´Ù.
10. º¯°æÀ» À§ÇØ ÆÀ¸â¹ö°£ ÀÇ»ç¼ÒÅëÀ» Ç϶ó.
´ç½ÅÀÌ ÀÚ¹Ù¼Ò½ºÄڵ带 ¸®ÆÑÅ丮ÇÒ¶§, ´ç½ÅÀº ¼³Á¤ÆÄÀÏÀ» ±× »óȲ¿¡ µû¶ó º¯°æÇÏ°í ÆÀ¸â¹ö¿¡°Ô ¾Ë¸± ÇÊ¿ä°¡ ÀÖ´Ù.
11. »ý¼ºÀÚ »ðÀÔ(constructor injection)º¸´Ù setter »ðÀÔ(setter injection)À» ¼±È£Ç϶ó.
»ý¼ºÀÚ »ðÀÔÀº beanµéÀÌ ºñÁ¤»óÀûÀÎ »óÅ¿¡¼ »ý¼ºµÉ¼ö ¾ø´Ù´Â °ÍÀ» È®ÀÎÇÒ¼ö ¾ø´Ù. ÇÏÁö¸¸ setter »ðÀÔÀº Á»´õ À¯¿¬ÇÏ°í °ü¸®°¡ °¡´ÉÇÏ´Ù. ƯÈ÷ Ŭ·¡½º°¡ ´ÙÁß ÇÁ¶óÆÛƼ¸¦ °¡Áø´Ù¸é ´õ¿í ±×·¯ÇÏ´Ù.
´ÙÀ½Àº »ý¼ºÀÚ »ðÀÔÀ» »ç¿ëÇÏ´Â ¿¹ÀÌ´Ù.
´ÙÀ½Àº setter»ðÀÔÀ» »ç¿ëÇÏ´Â ¿¹ÀÌ´Ù.
12. ÀÇÁ¸¼º »ðÀÔÀ» ³²¿ëÇÏÁö ¸»¶ó.
¸¶Áö¸·¿¡, Spring ApplicationContext´Â ´ç½ÅÀ» À§ÇØ ÀÚ¹Ù°´Ã¼¸¦ »ý¼ºÇÒ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¸ðµç ÀÚ¹Ù°´Ã¼°¡ ÀÇÁ¸¼º»ðÀÔÀ» ÅëÇؼ »ý¼ºµÉ¼ö´Â ¾ø´Ù. ±â¾ïÇ϶ó. °·ÂÇÑ IDEÀÎ Eclipse¿Í IntelliJ¸¦ »ç¿ëÇÏ¿©, ÀÚ¹ÙÄÚµå´Â Á»´õ Àаí, XMLÆÄÀϺ¸´Ù À¯Áö¹× °ü¸®°¡ ½±´Ù. Áï ÀÇÁ¸¼º»ðÀÔÀ» ¼³Á¤ÇÏ´Â XMLÆÄÀϺ¸´Ù´Â ÀÚ¹ÙÄڵ尡 °³¹ßÀÚÀÇ ÀÔÀå¿¡¼´Â °¡µ¶¼ºÀÌ ÁÁ´Ù.