COMMUNITY
°øÁö»çÇ×ÅäÅ©¹Ú½º°¶·¯¸®Áñ°Üã±âÀÚ·á½Ç±¤°í
°ü½É ¹®¼­ ¼öÁý
°ü½É ¹®¼­ ¼öÁý
°ü½É ¹®¼­ ¼öÁý °Ô½ÃÆÇ ÀÔ´Ï´Ù
Spring XML¼³Á¤ÆÄÀÏÀ» À§ÇÑ 12°¡Áö °¡Àå ÁÁÀº ¼±ÅÃ
GoodBug http://www.jakartaproject.com
À̹ÌÁö ½½¶óÀÌ´õ º¸±â

¿øÁ¦´Â Twelve Best Practices for Spring XML Configuration Files ÀÌ´Ù.
¿ø¹®ÀÇ À§Ä¡´Â http://lizjason.com/blog/?p=12

2006³â 1¿ù 26ÀÏ :
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ÀÌÀü¹öÀü¿¡¼­´Â ´ÙÀ½°ú °°ÀÌ ¼ÂÆÃÇÑ´Ù.

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> <property name="url"><value>jdbc:mysql://localhost:3306/mydb</value></property> <property name="username"><value>root</value></property> </bean>

1.2ÀÌÈÄ ´ÜÃàÇüŸ¦ »ç¿ëÇÏ¸é ´ÙÀ½°ú °°ÀÌ ¼ÂÆÃÀÌ °¡´ÉÇÏ´Ù.

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mydb" /> <property name="username" value="someone" /> </bean>

 

4. ÀÎÀÚ¸¦ ¸ÂÃß±â À§ÇÑ À妽ºº¸´Ù ŸÀÔÀ» ¼±È£Ç϶ó.
À妽º¸¦ »ç¿ëÇÏ´Â °ÍÀº ¶§¶§·Î ´Ù¼Ò ´ú ÀåȲÇÏ°Ô ¸¸µç´Ù. ÇÏÁö¸¸ ÀÌ°ÍÀº ¿¡·¯¸¦ Á»´õ »ý¼ºÇÏ°í Àб⠾î·Æ´Ù.

´ÙÀ½ÀÇ ¼Ò½º´Â À妽º¸¦ »ç¿ëÇÏ´Â ¿¹Á¦ÀÌ´Ù.

<bean id="billingService" class="com.lizjason.spring.BillingService"> <constructor-arg index="0" value="lizjason"/> <constructor-arg index="1" value="100"/> </bean>

ÇÏÁö¸¸ ´ÙÀ½Ã³·³ ŸÀÔÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÃßõÇÑ´Ù.

<bean id="billingService" class="com.lizjason.spring.BillingService"> <constructor-arg type="java.lang.String" value="lizjason"/> <constructor-arg type="int" value="100"/> </bean>

 

5. °¡´ÉÇÏ´Ù¸é beanÁ¤ÀǸ¦ Àç»ç¿ëÇ϶ó.
´ç½ÅÀº Áߺ¹À» Á¦°ÅÇϱâ À§ÇÑ ±â¹ýó·³ »ó¼ÓÀ» »ç¿ëÇÒ¼ö ÀÖ´Ù. ´ç½ÅÀÌ ÇÒ ÇÊ¿ä°¡ ÀÖ´Â ¸ðµç°ÍÀº »óÀ§ bean¿¡ abstract=true¸¦ ¸í½ÃÇÏ°í ÀÚ½Ä bean¿¡ parentÂüÁ¶¸¦ µÎ´Â °ÍÀÌ´Ù. ´ç½ÅÀÌ Å¬·¡½º³ª factory¸Þ¼Òµå¸¦ ¸í½ÃÇÏÁö ¾Ê´Â´Ù¸é, beanÀº ÇÔÃàÀûÀ¸·Î abstract»óÅ°¡ µÈ´Ù.

¿¹¸¦ µé¸é ´ÙÀ½°ú °°ÀÌ ¼ÂÆÃÇÑ´Ù.

<bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="remove*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <bean id="userManager" parent="txProxyTemplate"> <property name="target"> <bean class="org.appfuse.service.impl.UserManagerImpl"> <property name="userDAO" ref="userDAO" /> </bean> </property> </bean>

 

6. import º¸´Ù´Â ApplicationContext¸¦ ÅëÇØ beanÁ¤ÀǸ¦ Á¶¸³(assembling)ÇÏ´Â °ÍÀ» ¼±È£Ç϶ó.
Ant½ºÅ©¸³Æ®³» importó·³, ±×°ÍµéÀº ¸ðµâÈ­µÈ beanÁ¤ÀǸ¦ Á¶¸³Çϴµ¥ À¯¿ëÇÏ´Ù. ¾î·µç, ÀÌ°ÍÀº ApplicationContext¸¦ ÅëÇØ ±×°ÍµéÀ» Á¶¸³Çϱâ À§ÇØ Á»´õ À¯¿¬ÇÏ´Ù. ´ç½ÅÀº ApplicationContextÀÇ »ý¼ºÀÚ¸¦ À§ÇØ beanÁ¤ÀÇÀÇ ¹è¿­À» Àü´ÞÇÒ¼ö ÀÖ´Ù.

´ÙÀ½Àº import¸¦ Á¶ÇÕÇÏ¿© xmlÀ» ¼³Á¤ÇÏ´Â ¼Ò½ºÀÌ´Ù.

<beans> <import resource="billingServices.xml"/> <import resource="shippingServices.xml"/> <bean id="orderService" class="com.lizjason.spring.OrderService"/> <beans>

import¸¦ »ç¿ëÇÏ¿© xmlÀ» Á¶ÇÕÇÏ´Â ¹æ½Äº¸´Ù´Â ¾Æ·¡¿Í °°ÀÌ ApplicationContext¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Á»´õ À¯¿¬ÇÑ °³¹ßÀ» µµ¿ÍÁØ´Ù.

String[] serviceResources = {"orderServices.xml", "billingServices.xml", "shippingServices.xml"}; ApplicationContext orderServiceContext = new ClassPathXmlApplicationContext(serviceResources);

 

7. °¡´ÉÇÏ´Ù¸é, bean È®ÀÎÀÚ·Î id¸¦ »ç¿ëÇ϶ó.
id¸¦ »ç¿ëÇÏ´Â °ÍÀº °¡µ¶¼ºÀ» Áõ°¡½ÃÅ°Áö ¾Ê´Â´Ù. ÇÏÁö¸¸ ÀÌ°ÍÀº beanÂüÁ¶¸¦ È®ÀÎÇϱâ À§ÇØ XMLÆļ­¿¡ ¿µÇâÀ» ³¢Ä¥¼ö ÀÖ´Ù. ¸¸¾à id°¡ XML IDREFÁ¦ÇÑÀ» À§ÇØ »ç¿ëµÉ¼ö ¾ø´Ù¸é, ´ç½ÅÀº À̸§(name)À» »ç¿ëÇÒ¼ö ÀÖ´Ù.

 

8. °³¹ß½Ã¿¡´Â ÀÇÁ¸¼ºÃ¼Å©(dependency-check)¸¦ »ç¿ëÇ϶ó.
´ç½ÅÀº beanÁ¤ÀÇÀÇ dependency-check¼Ó¼ºÀ» µðÆúÆ®ÀÎ noneÀÌ ¾Æ´Ñ ´Ù¸¥°ªÀ¸·Î ¼ÂÆÃÇÒ¼ö ÀÖ´Ù. ±×·¡¼­ ÄÁÅ×À̳ʴ ´ç½ÅÀ» À§ÇØ ÀÇÁ¸¼ºÃ¼Å©¸¦ ÇÒ¼ö ÀÖ´Ù.

<bean id="orderService" class="com.lizjason.spring.OrderService" dependency-check="objects"> <property name="companyName" value="lizjason"/> <constructor-arg ref="orderDAO"/> </bean>

 

9. °¢°¢ÀÇ XMLÆÄÀÏÀ» À§ÇØ Çì´õ(header) ÁÖ¼®À» Ãß°¡Ç϶ó.
XMLÆÄÀϳ» ³»ºÎ ÁÖ¼®´ë½Å¿¡ ¼­¼úÀûÀÎ id¿Í nameÀ» »ç¿ëÇϴ°ÍÀÌ ¼±È£µÈ´Ù. ¾î·µç, °¢°¢ÀÇ ÆÄÀÏÀÌ Á¤ÀÇµÈ benaÀ» ¿ä¾àÇÏ´Â Çì´õ¸¦ °¡Áø´Ù¸é ÀÌÇØÇϱⰡ ½±´Ù.

<beans> <description> ÀÌ ÆÄÀÏÀº °Å·¡(billing) ¼­ºñ½º °ü·Ã beanÀ» Á¤ÀÇÇÏ°í ¼­ºñ½º beanÅÛÇø´À» Á¦°øÇÏ´Â baseService.xmlÆÄÀÏÀ» ÀÇÁ¸ÇÑ´Ù. </description> ... </beans>

 

10. º¯°æÀ» À§ÇØ ÆÀ¸â¹ö°£ ÀÇ»ç¼ÒÅëÀ» Ç϶ó.
´ç½ÅÀÌ ÀÚ¹Ù¼Ò½ºÄڵ带 ¸®ÆÑÅ丮ÇÒ¶§, ´ç½ÅÀº ¼³Á¤ÆÄÀÏÀ» ±× »óȲ¿¡ µû¶ó º¯°æÇÏ°í ÆÀ¸â¹ö¿¡°Ô ¾Ë¸± ÇÊ¿ä°¡ ÀÖ´Ù.

 

11. »ý¼ºÀÚ »ðÀÔ(constructor injection)º¸´Ù setter »ðÀÔ(setter injection)À» ¼±È£Ç϶ó.
»ý¼ºÀÚ »ðÀÔÀº beanµéÀÌ ºñÁ¤»óÀûÀÎ »óÅ¿¡¼­ »ý¼ºµÉ¼ö ¾ø´Ù´Â °ÍÀ» È®ÀÎÇÒ¼ö ¾ø´Ù. ÇÏÁö¸¸ setter »ðÀÔÀº Á»´õ À¯¿¬ÇÏ°í °ü¸®°¡ °¡´ÉÇÏ´Ù. ƯÈ÷ Ŭ·¡½º°¡ ´ÙÁß ÇÁ¶óÆÛƼ¸¦ °¡Áø´Ù¸é ´õ¿í ±×·¯ÇÏ´Ù.

´ÙÀ½Àº »ý¼ºÀÚ »ðÀÔÀ» »ç¿ëÇÏ´Â ¿¹ÀÌ´Ù.

<bean id="orderService" class="com.lizjason.spring.OrderService"> <constructor-arg ref="orderDAO"/> </bean>

´ÙÀ½Àº setter»ðÀÔÀ» »ç¿ëÇÏ´Â ¿¹ÀÌ´Ù.

<bean id="billingService" class="com.lizjason.spring.BillingService"> <property name="billingDAO" ref="billingDAO"> </bean>

 

12. ÀÇÁ¸¼º »ðÀÔÀ» ³²¿ëÇÏÁö ¸»¶ó.
¸¶Áö¸·¿¡, Spring ApplicationContext´Â ´ç½ÅÀ» À§ÇØ ÀÚ¹Ù°´Ã¼¸¦ »ý¼ºÇÒ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¸ðµç ÀÚ¹Ù°´Ã¼°¡ ÀÇÁ¸¼º»ðÀÔÀ» ÅëÇؼ­ »ý¼ºµÉ¼ö´Â ¾ø´Ù. ±â¾ïÇ϶ó. °­·ÂÇÑ IDEÀÎ Eclipse¿Í IntelliJ¸¦ »ç¿ëÇÏ¿©, ÀÚ¹ÙÄÚµå´Â Á»´õ Àаí, XMLÆÄÀϺ¸´Ù À¯Áö¹× °ü¸®°¡ ½±´Ù. Áï ÀÇÁ¸¼º»ðÀÔÀ» ¼³Á¤ÇÏ´Â XMLÆÄÀϺ¸´Ù´Â ÀÚ¹ÙÄڵ尡 °³¹ßÀÚÀÇ ÀÔÀå¿¡¼­´Â °¡µ¶¼ºÀÌ ÁÁ´Ù.

 

2007-05-01 12:40:42
220.70.88.***

 

ÁÁÀº»ý°¢ ^^

µûºÀ Á¶¶Ç Á¾ÇÕ 0 (0¸í)
µ¡±Û 0°³ | ÅÂ±× 1°³ | °ü·Ã±Ûº¸±â
ű×ÀÔ·Â
½±Ç¥(,)±¸ºÐÀ¸·Î Çѹø¿¡ ¿©·¯ ű׸¦ ÀÔ·ÂÇÒ¼ö ÀÖ½À´Ï´Ù
spring (18)
À̸§ ºñ¹Ð¹øÈ£