[Áöµð³ÝÄÚ¸®¾Æ]ÀÚ¹Ù5ºÎÅÍ µîÀåÇÑ ¾î³ëÅ×À̼ÇÀº ¿ÀǼҽº¿¡µµ Á¡Â÷ ±× ¿µÇâ·ÂÀ» ³ÐÇô°¡°í ÀÖ´Ù. ¹öÀüȣȯ¼ºÀÌ Áß¿äÇÑ »ó¿ë±â¼ú¿¡ ºñÇØ¼ »õ·Î¿î ±â¼úÀ» »¡¸® ÀÀ¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÌ ¿ÀǼҽºÀÇ ÀåÁ¡À̱⠶§¹®¿¡ ¾î³ëÅ×À̼ÇÀ» ÀÌ¿ëÇÑ ±â¼ú Ȱ¿ëÀÇ Á¤µµ´Â ¿ÀǼҽº¿¡¼ Á¡Á¡ ´õ »¡¶óÁú °ÍÀ¸·Î º¸ÀδÙ. ´ëÇ¥ÀûÀÎ ¿ÀǼҽº Á¦Ç°ÀÇ ¾î³ëÅ×ÀÌ¼Ç Àû¿ë ¿¹¸¦ ÅëÇØ¼ ¾ÕÀ¸·ÎÀÇ ¾î³ëÅ×ÀÌ¼Ç ±â¼ú ¹ßÀü°¡´É¼º¿¡ ´ëÇØ »ìÆìº¸ÀÚ.
ÀÚ¹ÙÀÇ ¾î³ëÅ×ÀÌ¼Ç ±â¼úÀº ÀÚ¹Ù5¶ó´Â ¾ð¾îÂ÷¿øÀÇ Å« º¯È°¡ ÀϾ´Â ½ÃÁ¡¿¡ µîÀåÇß´Ù. ±× ÀÌÀü±îÁö ¼Ò½ºÄÚµå ·¹º§ÀÇ ¸ÞŸÁ¤º¸ ±â¼ú¿¡ ´ëÇÑ ¸¹Àº ¿ä±¸µéÀÌ ÀÖ¾úÁö¸¸ ¾ð¾îÀÇ º¯È´Â ÃÖ¼ÒÈÇÑ´Ù´Â Á¤Ã¥À» °í¼öÇÏ´ø ÀÚ¹ÙÀÇ ¶æ¿¡ µû¶ó Á»Ã³·³ ¾î³ëÅ×À̼ǷùÀÇ ±â¼úµµÀÔÀº ÀÚ²Ù Áö¿¬µÇ¾ú´Ù.
±× »çÀÌ ÀÚ¹ÙÀÇ Ç¥Áرâ¼ú¿¡¼´Â ¸ðµç ¸ÞŸÁ¤º¸´Â XML ÇüÅ·Π°ü¸®µÇ´Â Àü·«À» ÃëÇØ¿Ô´Ù. XMLÀÌ ¸ÞŸÁ¤º¸¸¦ °ü¸®ÇÏ´Â Ãø¸é¿¡¼ÀÇ ¸¹Àº ÀåÁ¡ÀÌ ÀÖ´Â °ÍÀº »ç½ÇÀÌÁö¸¸ ¼Ò½ºÄÚµå¿Í ¸é¹ÐÈ÷ ¿¬µ¿Çؼ °ü¸®µÉ ¼ö ÀÖ´Â, Ưº°È÷ ¼Ò½º·¹º§ÀÇ ¸ÞŸÁ¤º¸¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ´Â ÄÚµå ³»ÀÇ ¾î³ëÅ×ÀÌ¼Ç ±â¼úÀÌ ±×¸¸Å ¾Æ½¬¿ü´ø °ÍÀÌ »ç½ÇÀÌ´Ù.
ƯÈ÷ ´å³ÝÀÌ ¾îÆ®¸®ºäÆ®¸¦ Àû¿ëÇÏ´Â µîÀÇ ¿òÁ÷ÀÓÀ» º¸¸é¼ ¸¹Àº ÀÚ¹Ù °³¹ßÀÚµéÀÌ ºÎ·¯¿öÇϱ⵵ Çß´Ù.
 | ÀÚ¹Ù5ÀÌÀüÀÇ ¿ÀǼҽº ¾î³ëÅ×ÀÌ¼Ç ±â¼ú |  |
¿ÀǼҽº´Â ÀÚ¹ÙÀÇ °¡·Á¿î µ¥¸¦ ±Ü¾îÁÖ´Â ¿ªÇÒÀ» Çϰí ÀÖ¾úÀ¸´Ï ¿ª½Ã ÀÌ·± »óȲÀ» ±×³É º¸°í¸¸ Áö³ªÄ¥ ¼ö ¾ø¾ú´Ù. ±×·¡¼ ¸î °¡Áö ¸ÞŸÁ¤º¸¸¦ ¼Ò½º ³»¿¡ »ðÀÔÇÏ´Â ±â¼úÀÌ µîÀåÇß´Ù. ÀÌ·± ±â¼úµéÀº °³¹ßÀÚÀÇ ¼Ò½ºÄÚµå ¸ÞŸÁ¤º¸¿¡ ´ëÇÑ ¿å±¸¸¦ ¾î´À Á¤µµ ä¿öÁÙ ¼ö ÀÖ¾ú´Ù.
XDoclet
ù ¹øÂ°·Î °¡Àå ¼º°øÇÑ ¼Ò½º·¹º§ÀÇ ¸ÞŸÁ¤º¸ »ðÀÔ ±â¼úÀº XDocletÀÌ´Ù. XDocletÀº »ç½Ç EJBÀÇ °úµµÇÑ XML ¸ÞŸÁ¤º¸ ÀÛ¼º¿¡ ÁöÄ£ °³¹ßÀÚµéÀÌ ÀÏÁ¾ÀÇ ¸ÞŸÄÚµå »ý¼º±â¼úÀ» ÀÀ¿ëÇÏ¿© Àû¿ëÇϱ⠽ÃÀÛÇÑ °ÍÀÌ´Ù.
ÀÚ¹ÙÀÇ API ¹®¼ »ý¼ºÀ» À§ÇÑ XDoc ±â¼úÀ» ÀÌ¿ëÇØ¼ ÄÚµå ³»ÀÇ ÄÚ¸àÆ® ¿µ¿ª¿¡ Á¤º¸¸¦ »ðÀÔÇϸé À̸¦ º°µµÀÇ ÄÄÆÄÀÏ·¯·Î ÃßÃâÇØ¼ ¿øÇÏ´Â ÀÛ¾÷À» ¼öÇàÇÏ´Â °ÍÀÌ ±âº»ÀûÀÎ ¾ÆÀ̵ð¾î´Ù.
XDocletÀÇ EJB ¸ÞŸ Á¤º¸¸¦ ¼Ò½ºÄڵ忡 »ðÀÔÇÏ´Â ±â¼úÀº EJB¸¦ Á¦´ë·Î ¾²±â À§Çؼ´Â °í°¡ÀÇ »ó¿ë ÅøÀ» »ç¿ëÇØ¾ß¸¸ Çß´ø °³¹ßÀڵ鿡°Ô´Â ¸Å¿ì ¹Ý°¡¿î ¼Ò½ÄÀ̾ú´Ù. °á°úÀûÀ¸·Î EJB XDocletÀÇ Àαâ´Â ¸Å¿ì ³ô¾ÆÁ³°í ±× ¾ÆÀ̵ð¾î¿¡ ¸¸Á·ÇÑ ¸¹Àº °³¹ßÀڵ鿡 ÀÇÇØ¼ EJB¿Ü¿¡µµ ¿©·¯ °¡Áö Á¾·ùÀÇ ±â¼úÀ» À§ÇÑ XDoclet ¿£ÁøÀ» °³¹ßÇϱ⠽ÃÀÛÇß´Ù.
´ëÇ¥ÀûÀÎ XDoclet ¿£Áø¿¡´Â ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÀÖ´Ù.
• @ejb: EJB ¸ÞŸ Á¤º¸
• @struts : ¾ÆÆÄÄ¡ Struts ¼³Á¤ Á¤º¸
• @jboss: JBoss¼³Á¤ Á¤º¸
• @weblogic: BEA Weblogic ¼³Á¤ Á¤º¸
• @hibernate : ÇÏÀ̹ö³×ÀÌÆ® 2.xÀÇ ¸ÅÇÎÁ¤º¸
• @spring: Spring Bean ¼³Á¤ Á¤º¸
<¸®½ºÆ® 1>Àº ÇÏÀ̹ö³×ÀÌÆ® XDocletÀ» ÀÌ¿ëÇØ¼ °£´ÜÇÑ ¿ÀºêÁ§Æ®-Å×ÀÌºí ¸ÅÇÎÀ» ¿£Æ¼Æ¼ ¼Ò½ºÄÚµå ³»¿¡ »ðÀÔÇÑ ¿¹ÀÌ´Ù.
| <¸®½ºÆ® 1>ÇÏÀ̹ö³×ÀÌÆ® XDoclet Àû¿ë ¿¹ | | | |
/**
* @hibernate.class table = "Code"
* @hibernate.cache usage = "nonstrict-read-write"
*/
public class Code {
int codeid;
String name;
/**
* @hibernate.id column = "codeid" generator-class = "sequence" unsaved-value = "0"
* @hibernate.generator-param name = "sequence" value = "seq_code"
* @return
*/
public int getCodeid() {
return codeid;
}
/**
* @hibernate.property
*/
PUBLIC String getName() {
return name;
}
....
}
| |
 |
Ŭ·¡½º³ª ¸Þ¼ÒµåÀÇ ÄÚ¸àÆ® ¿µ¿ª¿¡ @¸¶Å©¸¦ ´Ü XDodclet ű׸¦ Àû¿ëÇϸé À̸¦ ANTÀÇ
ŽºÅ©¸¦ ÀÌ¿ëÇØ¼ <¸®½ºÆ® 2>¿Í °°Àº ÇÏÀ̹ö³×ÀÌÆ® ¸ÅÇÎÆÄÀÏÀ» ÀÚµ¿À¸·Î »ý¼ºÇÒ ¼ö ÀÖ´Ù.
| <¸®½ºÆ® 2>ÇÏÀ̹ö³×ÀÌÆ® Xdoclet¿¡ ÀÇÇØ¼ »ý¼ºµÈ ÇÏÀ̹ö³×ÀÌÆ® ¸ÅÇÎÆÄÀÏ | | | |
<hibernate-mapping>
<class name="Code"
table="Code"
dynamic-update="false"
dynamic-insert="false">
<cache usage="nonstrict-read-write" />
<id name="codeid"
column="codeid"
type="int"
unsaved-value="0">
<generator class="sequence">
<param name="sequence">seq_code
</generator>
</id>
<property
name="name"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="name" />
</class>
...
</hibernate-mapping>
| |
 |
ANT¸¦ ÀÌ¿ëÇÏ¿© ºôµå°úÁ¤¿¡¼ Ç×»ó ÀÌ ÀÛ¾÷ÀÌ ¼öÇàµÇµµ·Ï ÇÏ¸é ¼Ò½ºÄÚµå ³»ÀÇ ¼³Á¤À» ÅëÇØ¼ ¿¬¼ÓÀûÀÎ ¼³Á¤ÆÄÀÏÀÇ º¯°æÇÒ ¼ö ÀÖ´Ù.
XDcoletÀº ±× ÀÚü·Î ¸Å¿ì ¼º°øÇÑ ÇÁ·ÎÁ§Æ®ÀÌ¸ç ¼Ò½º ³»ÀÇ ¸ÞŸÁ¤º¸ Ȱ¿ë¿¡ ´ëÇÑ ¸Å·ÂÀ» °³¹ßÀڵ鿡°Ô º¸¿©Áá´Ù´Â ¸é¿¡¼ Àǹ̰¡ Å©´Ù. ÇÏÁö¸¸, Äڵ峪 ¼³Á¤ÆÄÀÏ »ý¼º ±â¼ú¿¡ ÁÖ·Î ÀÌ¿ëµÈ´Ù´Â Á¡°ú º°µµÀÇ °úÁ¤À» ÅëÇÑ ºôµåŸÀÓ¿¡¼ µ¿ÀÛÇÑ´Ù´Â ¸é¿¡¼ ÁøÁ¤ÇÑ ¸ÞŸÁ¤º¸·Î Ȱ¿ëµÇ´Â °ÍÀ̶ó°í º¸±â´Â ¾î·Æ´Ù.
¾ÆÆÄÄ¡ Ä¿¸Õ ¾îÆ®¸®ºäÆ®
Ä¿¸Õ ¾îÆ®¸®ºäÆ®(Commons Attribute)´Â XDoclet°ú ºñ½ÁÇÑ ±¸Á¶·Î XDocÀ» ÀÌ¿ëÇØ¼ ¼Ò½ºÄÚµå ³»ÀÇ ¸ÞŸÁ¤º¸¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖ´Â ±â¼úÀÌ´Ù.
XDocletÀÌ ÁÖ·Î EJBó·³ º¹ÀâÇÑ ¼³Á¤Á¤º¸¸¦ ¼Ò½ºÄÚµå¿Í ¿¬µ¿Çؼ ¼³Á¤ ÆÄÀÏ·Î ¸¸µé¾î³»´Â ºôµåŸÀÓ¿¡ ÁÖ·Î Àû¿ëµÇ´Â ±â¼úÀε¥ ¹ÝÇØ¼ Ä¿¸Õ ¾îÆ®¸®ºäÆ®´Â ÄÚµå ³»ÀÇ ¸ÞŸÁ¤º¸¸¦ ·±Å¸ÀÓ ½Ã¿¡ È¿°úÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Çϴµ¥ ÃÊÁ¡ÀÌ ¸ÂÃçÁ® ÀÖ´Ù.
<±×¸² 1>Àº Ä¿¸Õ ¾îÆ®¸®ºäÆ®ÀÇ µ¿ÀÛ¿ø¸®¸¦ º¸¿©ÁØ´Ù. ÀÚ¹Ù ¼Ò½ºÄÚµå ³»¿¡ »ðÀÔµÈ ¸ÞŸÁ¤º¸(¾îÆ®¸®ºäÆ®)¸¦ ¾îÆ®¸®ºäÆ® ÄÄÆÄÀÏ·¯(Attribute Compiler)¸¦ ÅëÇØ¼ ±× Á¤º¸¸¦ ´ã°í ÀÖ´Â ÀÚ¹Ù¼Ò½º·Î »ý¼ºÇس½´Ù. À̼ҽº´Â ÀÏ¹Ý Å¬·¡½º·Î ÄÄÆÄÀÏ µÇ°í ·±Å¸ÀÓ ½Ã¿¡ Ä¿¸Õ ¾îÆ®¸®ºäÆ®ÀÇ API¸¦ ÅëÇØ¼ ±× Á¤º¸¸¦ °¡Á®¿Í »ç¿ëÇÒ ¼ö ÀÖµµ·Ï µÇ¾îÀÖ´Ù.
XDocletÀÌ ¸ÞŸÁ¤º¸¸¦ ÁÖ·Î XML ÇüÅ·Πº¯È¯ÇÏ°í ·±Å¸ÀÓ ½Ã¿¡ XMLÀ» ÀÐ¾î¼ Ã³¸®ÇÏ´Â µÎ ´Ü°è¸¦ °ÅÄ¡´Â ±¸Á¶·Î µÇ¾îÀÖ´Ù¸é Ä¿¸Õ ¾îÆ®¸®ºäÆ®´Â XML °úÁ¤ ¾øÀÌ ¹Ù·Î ¸ÞŸÁ¤º¸°¡ ´ã±ä Ŭ·¡½º ÇüÅ·Πº¯È¯ÀÌ µÇ¾î ¸ÞŸÁ¤º¸¸¦ ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.
½ºÇÁ¸µÇÁ·¹ÀÓ¿öÅ©´Â JDK1.5 ÀÌÀü ¹öÀüÀÇ »ç¿ëÀÚ¸¦ À§Çؼ Ä¿¸Õ ¾îÆ®¸®ºäÆ®¸¦ Àû±ØÀûÀ¸·Î µµÀÔÇÑ ´ëÇ¥ÀûÀÎ ÇÁ·ÎÁ§Æ®´Ù. ±âº»ÀûÀÎ ºó(Bean) ¼³Á¤¿¡¼ºÎÅÍ Æ®·£Àè¼Ç ó¸® MVCÀÇ ¸ÅÇÎ, JMX Bean ¼³Á¤ ±îÁö ´Ù¾çÇÑ ÇüÅ·ΠĿ¸Õ ¾îÆ®¸®ºäÆ®¸¦ Áö¿øÇÑ´Ù.
<¸®½ºÆ® 3>Àº ¼ºñ½º ºóÀÇ Æ®·£Àè¼Ç ¸ÞŸÁ¤º¸¸¦ Ä¿¸Õ ¾îÆ®¸®ºäÆ®¸¦ ÀÌ¿ëÇØ¼ Àû¿ëÇÑ ¿¹ÀÌ´Ù. @@À¸·Î ½ÃÀÛÇÏ´Â Ä¿¸Õ ¾îÆ®¸®ºäÆ® Á¤º¸´Â ·±Å¸ÀÓ ½Ã¿¡ ½ºÇÁ¸µAOP¿¡ ÀÇÇØ¼ ÂüÁ¶µÇ¾î Àû¿ëµÈ´Ù.
| <¸®½ºÆ® 3>½ºÇÁ¸µÇÁ·¹ÀÓ¿öÅ©ÀÇ Ä¿¸Õ ¾îÆ®¸®ºäÆ® Àû¿ë ¿¹ | | | |
/**
*
* @@org.springframework.transaction.interceptor.DefaultTransactionAttribute()
*/
public class PetStoreImpl implements PetStoreFacade, OrderService {
¡¦
}
| |
 |
½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©¿¡¼ »ç¿ëµÇ´Â ´ëÇ¥ÀûÀÎ Ä¿¸Õ ¾îÆ®¸®ºäÆ®ÀÇ ÁÖµÈ ¿ëµµ´Â ½ºÇÁ¸µMVCÀÇ Çڵ鷯 ¸ÅÇÎÀÌ´Ù. ÃÖ±Ù µîÀåÇÏ´Â À¥ ÇÁ·¹ÀÓ¿öÅ©µéÀÌ Àû±ØÀûÀ¸·Î ¼ö¿ëÇϰí ÀÖ´Â ÄÁÆ®·Ñ·¯ ³»ÀÇ ¸ÅÇνºÅ¸ÀÏÀ» ÀÌ¹Ì ½ºÇÁ¸µÀº ÃʱâºÎÅÍ Àû¿ëÇØ¿Â ¼ÀÀÌ´Ù.
<¸®½ºÆ® 4>´Â ½ºÇÁ¸µMVCÀÇ PathMapÀ» ÀÌ¿ëÇÑ ÄÁÆ®·Ñ·¯ ¸ÅÇÎÀÇ ¿¹ÀÌ´Ù. ÀÌ·¸°Ô Á¤ÀÇµÈ ÄÁÆ®·Ñ·¯´Â
CommonsPathMapHandlerMapping¿¡ ÀÇÇØ¼ /bar.do¶ó´Â URL°ú ¸ÅÇÎÀ» XML¿¡ ÀÏÀÏÀÌ ¼³Á¤ÇÏÁö ¾Ê¾Æµµ µÈ´Ù.
| <¸®½ºÆ® 4> ½ºÇÁ¸µMVCÀÇ PathMapÀ» ÀÌ¿ëÇÑ Çڵ鷯 ¸ÅÇÎ ¼³Á¤ ¿¹ | | | |
/**
*
* @@org.springframework.web.servlet.handler.metadata.PathMap("/bar.do")
*/
public class BarController extends AbstractController {
private Cruncher cruncher;
public void setCruncher(Cruncher cruncher) {
this.cruncher = cruncher;
}
protected ModelAndView handleRequestInternal (
HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("Bar Crunching c and d =" + cruncher.concatenate("c", "d"));
return new ModelAndView("test");
}
}
| |
 |
ÀÌ·¸°Ô Ä¿¸Õ ¾îÆ®¸®ºäÆ®¸¦ ÀÌ¿ëÇÑ ¸ÞŸÁ¤º¸ Ȱ¿ë¹æ¹ýÀº ´å³Ý¿¡¼ »ç¿ëÇÏ´Â ¾î³ëÅ×ÀÌ¼Ç ±â¼ú ¸øÁö¾Ê°Ô Æí¸®ÇÏ°Ô Àû¿ëÇÒ ¼ö ÀÖ´Ù.
ÇÏÁö¸¸ Áö±Ý±îÁö »ìÆìº» XDocletÀ̳ª Ä¿¸Õ ¾îÆ®¸®ºäÆ®´Â ¸î °¡Áö ´ÜÁ¡À» °¡Áö°í ÀÖ´Ù.
ù °´Â ºôµåŸÀÓÀÇ º¹ÀâÇÑ ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù´Â °ÍÀÌ´Ù. µÎ °¡Áö ¸ðµÎ ANT¿Í Maven µîÀ» Áö¿øÇϱâ´Â ÇÏÁö¸¸ ¸Å¹ø ºôµå½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃÄÑ¾ß ÇÏ´Â °ÍÀº ÀÚµ¿ ºôµå¿¡ Àͼ÷ÇÑ IDE¸¦ »ç¿ëÇÏ´Â °³¹ßÀڵ鿡°Ô´Â ¹ø°Å·Î¿î ÀÏÀÌ ¾Æ´Ò ¼ö ¾ø´Ù. °Ô´Ù°¡ º¯È¯°ú ÄÄÆÄÀÏ ½Ã°£¿¡ ´ëÇÑ ºÎ´ãµµ °¡Á®¾ß ÇÑ´Ù.
µÎ ¹øÂ°´Â ¸ÞŸÁ¤º¸¿¡ Á¢±ÙÇϴ ǥÁØ ±â¼úÀÌ ¾Æ´Ï¶ó´Â Á¡ÀÌ´Ù. µû¶ó¼ ½áµåÆÄƼ(3rd-party) ÇÁ·¹ÀÓ¿öÅ©³ª ¶óÀ̺귯¸®¿¡¼ ÀÌ·± ±â´ÉÀ» Á¦°øÇÑ´Ù°í ÇÒÁö¶óµµ »ç¿ëÇÏ´Â ÇÁ·ÎÁ§Æ®ÀÇ ±â¼ú¼Â¿¡´Â Àû¿ëÇÒ ¼ö ¾ø´Â °æ¿ì°¡ Á¾Á¾ ¹ß»ýÇÑ´Ù.
 | ÀÚ¹Ù ¾î³ëÅ×ÀÌ¼Ç |  |
ÀÚ¹Ù5¿¡ µîÀåÇÑ ¾î³ëÅ×À̼Ç(Annotation)±â¼úÀº Áö±Ý±îÁö XDoc µîÀ» ÀÌ¿ëÇÑ º¯Ä¢ÀûÀÎ ¹æ¹ýÀÇ »ç¿ëÀÌ ´õ ÀÌ»ó ÇÊ¿ä ¾øµµ·Ï ÀÚ¹Ù ¾ð¾î Â÷¿ø¿¡¼ ¸ÞŸÁ¤º¸¸¦ ±â¼úÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ÀÚ¹Ù ¾î³ëÅ×À̼ÇÀÇ µîÀå¿¡ ¸¹Àº °³¹ßÀÚµéÀÌ Âù»ç¸¦ º¸³Â°í ´Ù¾çÇÑ »õ·Î¿î Á¦Ç°¿¡ ºü¸£°Ô µµÀԵǾîÁ® °¬´Ù.
¿ÀǼҽºµµ ¿¹¿ÜÀÏ ¼ö ¾ø´Ù. ¿ÀǼҽº´Â Á¦Ç°ÀÇ »õ·Î¿î ¹öÀüÀ̳ª ±â´ÉÀ» Ãß°¡ÇÏ´Â ¸é¿¡¼ ÀÏ¹Ý »ó¿ëÁ¦Ç°¿¡ ºñÇØ¼ ¾î´À Á¤µµ À¯¸®ÇÑ Ãø¸éÀÌ ÀÖ´Ù.
µû¶ó¼ ±âÁ¸¿¡ Á¸ÀçÇÏ´Â ¿ÀǼҽºÁ¦Ç° »Ó¸¸ ¾Æ´Ï¶ó »õ·Î µîÀåÇÏ´Â ¸¹Àº ¿ÀǼҽº ÇÁ·ÎÁ§Æ®µéÀÌ ÀÚ¹Ù5 ÀÌ»óÀÇ Á¦¾àÀ» °¨¼öÇÏ´õ¶óµµ ¾î³ëÅ×À̼ÇÀ» Àû±Ø »ç¿ëÇϱ⿡ À̸£·¶´Ù. ¸¹Àº ÇÁ·ÎÁ§Æ®°¡ ¾î³ëÅ×À̼ÇÀ» ¾²±â À§Çؼ ÀÚ¹Ù5 ÀÌ»óÀ̶ó´Â Á¶°ÇÀ» °É¾ú´Ù°í ÇßÀ» Á¤µµ´Ï ±× Àα⸦ ½Ç°¨ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÀÚ¹Ù5ÀÇ ¾î³ëÅ×ÀÌ¼Ç ±â¼úÀº ÄÄÆÄÀÏ ½Ã¿Í ·±Å¸ÀÓ ½Ã ¸ðµÎ Ȱ¿ëµÇ¾îÁú ¼ö ÀÖÀ¸¸ç ±× Á¤Àǰ¡ °£´ÜÇϰí ÂüÁ¶ÇÏ´Â °Íµµ ÀÚ¹ÙÀÇ ¸®Ç÷º¼Ç API¸¦ ÀÌ¿ëÇÏ¸é °£´ÜÈ÷ ó¸®ÇÒ ¼ö ÀÖ´Ù.
´õ °í¹«ÀûÀÎ °ÍÀº ÀÚ¹Ù5¸¦ ÀÌ¿ëÇÏ´Â JEE1.5¿¡¼´Â Ç¥ÁØ ½ºÆå¿¡ º»°ÝÀûÀÎ ¾î³ëÅ×À̼ÇÀ» Àû¿ëÇß´Ù´Â »ç½ÇÀÌ´Ù. ÀÌÁ¦±îÁö º¹ÀâÇϰí ÀÛ¼ºÇϱ⠾î·Á¿î XMLÇüÅÂÀÇ ¼³Á¤À» °íÁýÇß´ø EJB´Â ¾î³ëÅ×À̼ÇÀ» ÅëÇÑ °£°áÇÑ ¼³Á¤À» ÁÖ¿ä ÀåÁ¡À¸·Î ³»¼¼¿ì¸é¼ ´Ù½Ã±Ý Àαâ¸ôÀ̸¦ Çϰí ÀÖ´Ù.
ÀÌ·¯ÇÑ È帧 ¼Ó¿¡¼ ÁÖ¿äÇÑ ¿ÀǼҽº Á¦Ç°ÀÌ ¾î¶»°Ô ¾ð¾îÂ÷¿ø¿¡¼ Áö¿øÇÏ´Â ¾î³ëÅ×À̼ÇÀ» »ç¿ëÇϰí ÀÖ´ÂÁö¸¦ »ìÆìº¸ÀÚ.
ÇÏÀ̹ö³×ÀÌÆ® 3.x
ÇÏÀ̹ö³×ÀÌÆ®´Â 2.x¹öÀü±îÁö´Â XMLÀ» ÀÌ¿ëÇÑ ¼³Á¤¸¸À» Áö¿øÇß´Ù. ¹°·Ð ÇÏÀ̹ö³×ÀÌÆ®ÀÇ ¼³Á¤ XMLÀº Áö´ÉÀûÀÎ µðÆúÆ®¿Í °£°áÇÑ ¼³Á¤ ±¸¼º µîÀ» ÀÌ¿ëÇØ¼ EJB³ª ½ºÆ®·¯Ã÷·ùÀÇ º¹ÀâÇÑ XML°ú ºñ±³Çغ¼ ¶§ ÈξÀ °£°áÇÏ°Ô ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
±×·³¿¡µµ ÆÛ½Ã½ºÅÏÆ® ¿ÀºêÁ§Æ®¿Í ±ä¹ÐÇÏ°Ô ¿¬°áµÇ¾îÀÖ´Â ¸ÅÇÎ Á¤º¸À̱⠶§¹®¿¡ ¼Ò½ºÄڵ忡 »ðÀԵǸé ÈξÀ À¯¸®ÇÑ Ãø¸éÀÌ ÀÖ¾ú´ø °ÍÀÌ »ç½ÇÀÌ´Ù. ±× ¶§¹®¿¡ ÇÏÀ̹ö³×ÀÌÆ® 2.x¿¡¼´Â XdocletÀ» ÀÌ¿ëÇÑ ¸ÅÇÎÁ¤º¸ »ý¼º±â¼úÀÌ °¡Àå ´ëÁßȵǰí Àαâ ÀÖ´Â »ç¿ë¹æ¹ýÀ̾ú´Ù.
ÇÏÀ̹ö³×ÀÌÆ®°¡ 3.0À¸·Î °¡´Â °úÁ¤¿¡¼ ÀÏ¾î³ °¡Àå Å« º¯È´Â ÇÏÀ̹ö³×ÀÌÆ® °³¹ßÆÀÀÌ ÁÖ·ÂÀ¸·Î Âü¿©ÇÑ EJB3.0ÀÇ JPA ±â¼ú°ú ¿¬µ¿ÀÌ´Ù. ÇÏÀ̹ö³×ÀÌÆ®´Â 3.x¿¡¼ ÀÏÁ¾ÀÇ JPA ±¸Çö¿£ÁøÀ¸·Î º¯½ÅÀ» ²ÒÇß´Ù.
»ç½Ç ÇÏÀ̹ö³×ÀÌÆ® 3.0 ±â¼úÀÇ ¼ºê¼ÂÀÌ JPA·Î °¬´Ù°í ÇØµµ ¹«¹æÇÏ´Ù. ¿ÀǼҽº ORM ¿£ÁøÀ¸·Î °¡Àå Å« ¼º°øÀ» °ÅµÐ °ÍÀÌ ÇÏÀ̹ö³×ÀÌÆ®¿´°í 2.x±îÁö °¡Àå ¸¹Àº ºñÆÇ¿¡ ½Ã´Þ¸° ¿£Æ¼Æ¼ºóÀ» ȹ±âÀûÀ¸·Î °³¼±Çϴµ¥ °¡Àå Å« ¿µÇâÀ» ¹ßÈÖÇÑ °ÍÀÌ ¹Ù·Î EJB3.0ÀÇ Ãʱâ JPA ½ºÆå ´ëºÎºÐÀ» ÀÛ¼ºÇÑ ÇÏÀ̹ö³×ÀÌÆ®ÀÇ Ã¢½ÃÀÚÀÎ °³ºó Å·(Gavin King)À̾ú±â ¶§¹®ÀÌ´Ù.
ÇÑÆí¿¡¼´Â EJB3.0ÀÌ ¹Ù·Î ÇÏÀ̹ö³×ÀÌÆ®3.0ÀÌ ¾Æ´Ï³Ä´Â ºñÆÇÀÌ ³ª¿Ã Á¤µµ·Î ±× µÑÀº ¸Å¿ì Èí»çÇÏ´Ù. ÇÏÀ̹ö³×ÀÌÆ® ÆÀÀº POJO ±â¹ÝÀÇ Æ®·£½ºÆÐ·±Æ® ÆÛ½Ã½ºÅÏÆ® ±â¼úÀ̶ó´Â Ãø¸éÀ» Á¦¿ÜÇÏ¸é ¼·Î »ó°ü¾ø´Â Á¦Ç°À̶ó°í ºÎÁ¤Çϱâ´Â ÇßÀ¸³ª ±× µÑÀ» »ç¿ëÇØº» »ç¶÷À̶ó¸é ¾ó¸¶³ª À¯»çÇÑ ÅøÀÎÁö ÃæºÐÈ÷ ÀνÄÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÇÏÀ̹ö³×ÀÌÆ® 3.xÀÇ ¸ÅÇÎ ¼³Á¤¿¡´Â µåµð¾î ¾î³ëÅ×À̼ÇÀÌ Àû¿ëµÇ¾ú´Ù. EJB¿ÍÀÇ °øÁ¸°ø»ýÀ» ³ë¸° Àü·«¿¡ ¸Â°Ô ±× ¼³Á¤Àº ±âº»ÀûÀ¸·Î JPAÀÇ ¾î³ëÅ×À̼ÇÀ» ±×´ë·Î »ç¿ëÇß´Ù. µû¶ó¼ ÇÏÀ̹ö³×ÀÌÆ® ¾î³ëÅ×ÀÌ¼Ç ÇÁ·ÎÁ§Æ®´Â EJB3 JPAÀÇ ¾î³ëÅ×À̼ÇÀ» ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ÜÁö, ÇÏÀ̹ö³×ÀÌÆ®¿¡ ¸¹Àº Ãß°¡ÀûÀÎ ±â´ÉµéÀ» À§Çؼ ÇÏÀ̹ö³×ÀÌÆ® ¾î³ëÅ×À̼ÇÀÌ º¸Á¶ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÇÏÀ̹ö³×ÀÌÆ® 3.x¿¡¼ ¿©ÀüÈ÷ XMLÀ» ÀÌ¿ëÇÑ ¸ÅÇÎ ¼³Á¤À̳ª XdocletÀÇ Àû¿ëÀÌ °¡´ÉÇϱä ÇÏ´Ù. ÇÏÁö¸¸ ÀÚ¹Ù5 ÀÌ»óÀ» »ç¿ëÇÏ´Â °³¹ßÀÚµéÀº ´ç¿¬È÷ ¾î³ëÅ×À̼ÇÀ» Àû¿ëÇÒ °ÍÀÌ´Ù.
À§¿¡¼ »ìÆìº» XdocletÀ» ÀÌ¿ëÇÑ ÇÏÀ̹ö³×ÀÌÆ® ¸ÅÇÎ ¼³Á¤À» ¾î³ëÅ×À̼ÇÀ» ÀÌ¿ëÇÑ °ÍÀ¸·Î ´Ù½Ã »ìÆìº¸ÀÚ. <¸®½ºÆ® 5>´Â ÇÏÀ̹ö³×ÀÌÆ®°¡ Áö¿øÇÏ´Â JPA ¾î³ëÅ×À̼ǰú ÇÏÀ̹ö³×ÀÌÆ® Àü¿ë ¾î³ëÅ×À̼ÇÀ» °áÇÕÇØ Àû¿ëÇÑ ¿£Æ¼Æ¼ Ŭ·¡½ºÀÇ ¿¹ÀÌ´Ù.
| <¸®½ºÆ® 5> JPA¿Í ÇÏÀ̹ö³×ÀÌÆ® ¾î³ëÅ×À̼ÇÀ» ÀÌ¿ëÇÑ ¸ÅÇÎ ¼³Á¤ ¿¹ | | | |
@Entity
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Code {
int codeid;
String name;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
public int getCodeid() {
return this.codeid;
}
public void setCodeid(int codeid) {
this.codeid = codeid;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
...
}
| |
 |
¿©±â¼ »ç¿ëÇÑ ¾î³ëÅ×ÀÌ¼Ç Áß¿¡¼ @Entity¿Í @Id, @GeneratedValue´Â JPAÀÇ Ç¥ÁØ ¾î³ëÅ×À̼ÇÀ̰í @Cache´Â ÇÏÀ̹ö³×ÀÌÆ®ÀÇ Àü¿ë ¾î³ëÅ×À̼ÇÀÌ´Ù. ÀÌ µÑÀ» ÀûÀýÈ÷ È¥¿ëÇØ¼ ÇÏÀ̹ö³×ÀÌÆ®¿¡ ÃÖÀûÈµÈ ¼³Á¤À» ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù. ij½Ã(Cache)ó·³ º¸Á¶ÀûÀÎ ¼³Á¤À̶ó¸é ÀÌ ¼³Á¤À» ±×´ë·Î ´Ù¸¥ JPA ¿£Áø¿¡ Àû¿ëÇÏ´Â °Íµµ ÃæºÐÈ÷ °¡´ÉÇÏ´Ù.
±âÁ¸ÀÇ XDoclet·ù¿¡ ºñÇØ¼ ¾î³ëÅ×ÀÌ¼Ç ¼³Á¤¹æ½ÄÀÌ °¡Áö´Â ÀåÁ¡À» »ìÆìº¸ÀÚ.
ù °´Â º°µµÀÇ ºôµå°úÁ¤ÀÌ ÇÊ¿ä ¾ø´Ù´Â Á¡ÀÌ´Ù. À̴ ǥÁØ ±â¼úÀÌ ÁÖ´Â ´ëÇ¥ÀûÀÎ ÀåÁ¡ ÁßÀÇ ÇϳªÀÌ´Ù.
µÎ ¹øÂ°´Â Enum µîÀ» »ç¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡ ŸÀÔÀÇ ¾ÈÁ¤¼ºÀÌ º¸ÀåµÈ´Ù´Â Á¡ÀÌ´Ù. ¾î³ëÅ×À̼ÇÀÇ ¼³Á¤À» »ç¿ëÇÏ´Ùº¸¸é EnumÀÌ ÀÚÁÖ µîÀåÇÏ´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.
¼¼ ¹øÂ°´Â Ŭ·¡½ºÀÇ ±âº»ÀûÀÎ ¸ÞŸÁ¤º¸¸¦ ±×´ë·Î Ȱ¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. <¸®½ºÆ® 6>Àº ManyToOne °ü°èÀÇ ¸±·¹À̼ųΠÇʵåÀÇ ¼³Á¤ ¿¹ÀÌ´Ù. XdocletÀÇ ManyToOne ¼³Á¤¿¡´Â Ÿ±ê Ŭ·¡½ºÀÇ À̸§°ú ¿Ü·¡Å°·Î »ç¿ëµÉ Çʵå¸íÀÌ µé¾î°¡¾ß ÇÑ´Ù. ÇÏÁö¸¸ ¾î³ëÅ×À̼ÇÀ» ÀÌ¿ëÇÑ ManyToOne ¼³Á¤¿¡´Â À̰ÍÀ» »ý·«ÇÒ ¼ö ÀÖ´Ù.
À̰ÍÀº Ŭ·¡½ºÀÇ ¸ÞŸÁ¤º¸¸¦ ÀÌ¿ëÇØ¼ Ÿ±ê ¿£Æ¼Æ¼°¡ DUser¶ó´Â °ÍÀ» ¾Ë¾Æ³¾ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¿Ü·¡Å°´Â µðÆúÆ® ³×ÀÌ¹Ö ·êÀ» ÀÌ¿ëÇØ¼ ÀÚµ¿À¸·Î ºÎ¿©µÈ´Ù. ¹°·Ð XDoclet¿¡¼µµ À̸¦ ¾Ë¾Æ³¾ ¹æ¹ýÀº ÀÖÁö¸¸ ¾î³ëÅ×À̼ÇÀ» ÀÌ¿ëÇÑ °æ¿ì°¡ ÈξÀ Æí¸®Çϱ⠶§¹®¿¡ JPA¿Í ÇÏÀ̹ö³×ÀÌÆ® ¾î³ëÅ×À̼ǿ¡¼´Â ÀÌ·± ½ÄÀÇ °£°áÇÑ ¼³Á¤À» ÀÚÁÖ ¸¸³¯ ¼ö ÀÖ´Ù.
| <¸®½ºÆ® 6> Ŭ·¡½ºÀÇ ¸ÞŸÁ¤º¸¸¦ Ȱ¿ëÇÑ ¾î³ëÅ×ÀÌ¼Ç Àû¿ë ¿¹ | | | |
@ManyToOne
public DUser getCuser() {
return this.cuser;
}
public void setCuser(DUser cuser) {
this.cuser = cuser;
}
| |
 |
³× ¹øÂ°´Â IDEÀÇ Áö¿øÀÌ´Ù. Ç¥ÁØ ¾ð¾î ±â¼úÀÎ ¾î³ëÅ×À̼ÇÀº ´ç¿¬È÷ ´ëºÎºÐÀÇ ÀÚ¹ÙIDE¿¡¼ Áö¿øÇÑ´Ù. ´ç¿¬È÷ ÀÚµ¿ºôµå¸¦ ÅëÇØ¼ ¿À·ùµµ °ËÁõÇØÁØ´Ù. Xdocletµµ ÀÚµ¿¿Ï¼º ±â´ÉµéÀ» Áö¿øÇÏ´Â IDE°¡ ÀÖ¾úÁö¸¸ ±× Æí¸®ÇÔÀº ºñ±³ÇÒ ¹Ù°¡ ¾Æ´Ï´Ù.
ÇÏÀ̹ö³×ÀÌÆ®´Â ÀÚ¹Ù5 ÀÌÀü »ç¿ëÀÚ³ª XML ¼³Á¤À» ¼±È£ÇÏ´Â °³¹ßÀÚµéÀ» À§Çؼ ȣȯ¼º Â÷¿ø¿¡¼ ÄÚ¾îÆÐŰÁö¿¡´Â XML Áö¿ø ±â´É¸¸ ÀÖ°í ¾î³ëÅ×À̼ÇÀº ¿É¼Ç ¸ðµâ·Î Á¦°øÇÑ´Ù.
½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ© 2.x
½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©µµ 2.0¿¡¼ºÎÅÍ º»°ÝÀûÀ¸·Î ¾î³ëÅ×À̼ÇÀ» Áö¿øÇϱ⠽ÃÀÛÇß´Ù.
¡Ü ¸ÞŸµ¥ÀÌÅÍ ¾îÆ®¸®ºäÆ®(Metadata Attributes)
½ºÇÁ¸µÀÇ ¸ÞŸÁ¤º¸ ¼³Á¤¹æ½ÄÀº ÀÌÀüÀÇ Ä¿¸Õ ¾îÆ®¸®ºäÆ®¿Í ¾î³ëÅ×ÀÌ¼Ç µÎ °¡Áö¸¦ ¸ðµÎ Áö¿øÇϴµ¥ ½ºÇÁ¸µÀº À̸¦ ´Ù½Ã Ãß»óÈÇØ¼ ½ºÇÁ¸µ ¸ÞŸµ¥ÀÌÅÍ(Spring Metadata)ÀÇ ¾îÆ®¸®ºäÆ®(Attributes)¶ó´Â ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ¼ ÀϰüµÈ ¹æ½ÄÀ¸·Î Á¢±ÙÇÑ´Ù.
´Ù¾çÇÑ ±¸Çö°ú Àû¿ë ¹æ¹ýÀÌ Á¸ÀçÇÒ °æ¿ì Ç×»ó Ãß»óȸ¦ ÅëÇÑ ´À½¼ÇÑ °ü°è¸¦ ¼³Á¤ÇÏ´Â °ÍÀ» ÁöÇâÇÏ´Â ½ºÇÁ¸µÀ¸·Î½á´Â ´ç¿¬ÇÑ °á°úÀÏ °ÍÀÌ´Ù.
½ºÇÁ¸µ ¸ÞŸµ¥ÀÌÅÍ ¾îÆ®¸®ºäÆ®(Spring Metadata Attribute)ÀÇ µµÀÔ ¸ñÀûÀº ´ÜÁö ¾î³ëÅ×À̼ǰú ÀÌÀü Ä¿¸Õ ¾îÆ®¸®ºäÆ® ±â¼ú¿¡ ´ëÇÑ È£È¯¼º¹®Á¦ ¶§¹®¸¸Àº ¾Æ´Ï´Ù. ½ºÇÁ¸µ ¸ÞŸµ¥ÀÌÅÍ ¾îÆ®¸®ºäÆ®´Â ´ÙÀ½°ú °°Àº ÀÌÀ¯·Î ÀÎÇØ¼ °³¹ßµÇ¾ú´Ù.
ù°´Â ÀÚ¹Ù¾ð¾îÀÇ ¾î³ëÅ×À̼ÇÀº ½ºÅÂÆ½ÇÑ ±â¼úÀ̶ó´Â °ÍÀÌ´Ù. Çѹø ÄÄÆÄÀϵǼ Ŭ·¡½º ¾È¿¡ ±× Á¤º¸°¡ »ðÀÔµÇ¸é ¼öÁ¤ÇÒ ¼ö ¾ø°í Á¶È¸¸¸ °¡´ÉÇÏ´Ù. ¹°·Ð ¸®Ç÷º¼ÇÀ» ÀÌ¿ëÇØ¼ °Á¦·Î ¾î³ëÅ×ÀÌ¼Ç Á¤º¸¸¦ ¼öÁ¤ÇÒ ¼ö´Â ÀÖÁö¸¸ ÀÌ´Â ¹Ù¶÷Á÷ÇÑ Á¢±Ù¹æ¹ýÀÌ ¾Æ´Ï´Ù.
µÎ ¹øÂ°·Î ¾î³ëÅ×ÀÌ¼Ç Á¤º¸¸¦ XML¿¡¼Ã³·³ °èÃþÀûÀ¸·Î Ç¥ÇöÇØ¾ß ÇÒ °æ¿ì°¡ Àֱ⠶§¹®ÀÌ´Ù. ¶Ç ¸¹Àº °æ¿ì¿¡ À̸¦ ¿À¹ö¶óÀ̵ùÇÏ´Â °Íµµ ÇÊ¿äÇÏ´Ù.
¼¼ ¹øÂ°·Î´Â ÀÚ¹Ù5ÀÇ ¾î³ëÅ×ÀÌ¼Ç Á¤º¸´Â ¸®Ç÷º¼Ç API¸¦ ÀÌ¿ëÇϴµ¥ ÀÌ´Â ¸ñ(mock)À» ÀÌ¿ëÇØ¼ ´ëÄ¡ÇϱⰡ ¸Å¿ì ºÒÆíÇÏ´Ù. Á» ´õ Ãß»óÈµÈ ÀÎÅÍÆäÀ̽º°¡ Á¸ÀçÇØ¾ßÇÏ´Â Áß¿äÇÑ ÀÌÀ¯ ÁßÀÇ ÇϳªÀÌ´Ù.
¸¶Áö¸·À¸·Î ÇöÀåÀÇ ÀÚ¹Ùȯ°æÀÌ JDK1.5ÀÌ»óÀ¸·Î º¯ÈÇÏ´Â µ¥¿¡´Â ¾ÆÁ÷ ¸î ³âÀÇ ½Ã°£ÀÌ ´õ ÇÊ¿äÇÏ´Ù°í º¸±â ¶§¹®ÀÌ´Ù. ±×¶§±îÁö ÀÚ¹Ù5ÀÇ ¾î³ëÅ×À̼ÇÀ» »ç¿ëÇÏÁö ¾Ê´Â °æ¿ì¿¡µµ ¸ÞŸÁ¤º¸¸¦ Ȱ¿ëÇÏ´Â °ÍÀÌ ÇÊ¿äÇѵ¥ ÀÌÀÇ È£È¯À» À§Çؼ¶óµµ º°µµÀÇ Ãß»óÈµÈ ·¹À̾îÀÇ Á¸Àç°¡ ¿ä±¸µÈ´Ù.
½ºÇÁ¸µÀº <¸®½ºÆ® 7>¿¡ ³ª¿À´Â Attributes¶ó´Â ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ¼ Ç¥ÁØ ¸ÞŸÁ¤º¸¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Á¤ÀÇÇϰí ÀÖ´Ù.
| <¸®½ºÆ® 7>½ºÇÁ¸µÀÇ Metadata Attributes ÀÎÅÍÆäÀ̽º | | | |
public interface Attributes {
Collection getAttributes(Class targetClass);
Collection getAttributes(Class targetClass, Class filter);
Collection getAttributes(Method targetMethod);
Collection getAttributes(Method targetMethod, Class filter);
Collection getAttributes(Field targetField);
Collection getAttributes(Field targetField, Class filter);
}
| |
 |
ÀÌ ¸Þ¼ÒµåµéÀÇ ¸®ÅÏ °ªÀº ¿ÀºêÁ§Æ® ÇüÅÂÀÌ´Ù. µû¶ó¼ ´Ü¼øÇÑ ½ºÇÁ¸µ Á¤º¸¸¦ ¹Þ´Â °Í¿¡ ºñÇØ¼ ¸¹Àº Á¤º¸¸¦ ´ãÀ» ¼öµµ ÀÖ°í Ŭ·¡½º °èÃþ±¸Á¶¸¦ ÀÌ¿ëÇϰųª ¼³Á¤ ÆÄ¶ó¹ÌÅÍ °ª µîÀ¸·Î Ȱ¿ëÇÏ´Â µîÀÇ ¸¹Àº ÀåÁ¡ÀÌ ÀÖ´Ù.
ÀÚ¹Ù5 ¾î³ëÅ×ÀÌ¼Ç Áö¿ø
½ºÇÁ¸µÀº ¹°·Ð ÀÚ¹Ù5 »ç¿ëÀÚ¸¦ À§ÇÑ ´Ù¾çÇÏ°í Æí¸®ÇÑ »çÀü¿¡ Á¤ÀÇµÈ ¾î³ëÅ×À̼ÇÀ» Áö¿øÇÑ´Ù.
¡Ü @Required
Setter ¹æ½ÄÀÇ ÀÇÁ¸»ðÀÔÀº »ý¼ºÀÚ »ðÀÔº¸´Ù ¸¹Àº ÀåÁ¡ÀÌ ÀÖ´Ù. ÇÏÁö¸¸ ÇÑ °¡Áö °áÁ¤ÀûÀÎ ´ÜÁ¡ÀÌ ÀÖÀ¸´Ï ±×°ÍÀº ¹Ýµå½Ã ÇÊ¿äÇÑ ÇÁ·ÎÆÛƼ°¡ »ðÀԵǾú´ÂÁö È®ÀÎÇϱⰡ ºÒÆíÇÏ´Ù´Â °ÍÀÌ´Ù. À̸¦ À§Çؼ ½ºÇÁ¸µ ºóÀÇ ¶óÀÌÇÁ»çÀÌŬ ¸Þ¼Òµå µîÀ» ÀÌ¿ëÇØ¼ üũÇÏ´Â ºÎºÐÀ» ¸¸µé ¼ö ÀÖ±â´Â ÇÏÁö¸¸ ¹ø°Å·Ó´Ù.
ÇÏÁö¸¸ ½ºÇÁ¸µ2.0ºÎÅÍ µµÀÔµÈ @Requred¸¦ »ç¿ëÇÏ¸é °£´ÜÇÏ°Ô Çʼö ÇÁ·ÎÆÛƼ¸¦ ÁöÁ¤Çϰí À̸¦ °ËÁõÇÒ ¼ö ÀÖ´Ù.
<¸®½ºÆ® 8>Àº movieFinder¶ó´Â ºóÀ» Çʼö ÇÁ·ÎÆÛƼ·Î °¡Áö°í ÀÖ´Ù. ºñÁî´Ï½º ¸Þ¼Òµå¿¡¼ À̸¦ »ç¿ëÇØ¾ß Çϱ⠶§¹®¿¡ ¹Ýµå½Ã ¼³Á¤ÀÌ µÇ¾îÀÖ¾î¾ß ÇÑ´Ù. À̸¦ °ËÁõÇÏ´Â ±âÁ¸ÀÇ ¹æ¹ýÀº ºóÀÌ InitializingBean ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¼
afterPropertiesSet ÄÝ¹é ¸Þ¼Òµå¸¦ ÅëÇØ¼ °ËÁõÇÏ´Â Äڵ带 ÀÏÀÏÀÌ ÀÛ¼ºÇØ¾ß ÇÑ´Ù.
@Required ¾î³ëÅ×À̼ÇÀ» »ç¿ëÇÏ¸é ¾î³ëÅ×ÀÌ¼Ç ¼³Á¤¸¸À¸·Î ÇÊ¿äÇÑ ÇÁ·ÎÆÛƼ°¡ ¼¼ÆÃµÇ¾ú´ÂÁö¸¦ È®ÀÎÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÀÌ Àû¿ëÀ» À§Çؼ´Â RequiredAnnotationBeanPostProcessor¸¦ µî·ÏÇØ¾ßÇÑ´Ù.
| <¸®½ºÆ® 8>Çʼö ÇÁ·ÎÆÛƼ¸¦ °¡Áö´Â ½ºÇÁ¸µ ºó | | | |
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Required
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
// movieFinder¸¦ »ç¿ëÇÏ´Â ¸¹Àº ºñÁî´Ï½º ¸Þ¼Òµå
}
| |
 |
¡Ü @Transactional
½ºÇÁ¸µAOP¸¦ ÀÌ¿ëÇÑ Æ®·£Àè¼Ç ¼³Á¤ÀÇ ¹æ¹ý Áß¿¡¼ ¾î³ëÅ×À̼ÇÀ» ÀÌ¿ëÇÑ °ÍÀÌ @Transactional ¾î³ëÅ×À̼ÇÀÌ´Ù. XMLÀ» ÀÌ¿ëÇÑ Æ®·£Àè¼Ç ¼³Á¤Àº º¸Åë Æ÷ÀÎÆ®ÄÆ ¾ð¾î¸¦ ÀÌ¿ëÇØ¼ ³×ÀÌ¹Ö ·êÀ» ÅëÇÑ ÀϰýÀû¿ëÀ» ÀÌ¿ëÇÏ´Â °æ¿ì°¡ ¸¹´Ù. ±×·± ¹æ¹ýÀº ¼³Á¤ÀÌ °£°áÇØ Áú ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖÁö¸¸ ¹Ý´ë·Î °¢°¢ÀÇ ºó¸¶´Ù ¼¼¹ÐÇÑ ¼³Á¤À» ÇÏ´Â °ÍÀÌ ºÒÆíÇÏ´Ù.
@Transactional ű׸¦ ÀÌ¿ëÇÑ ¼³Á¤Àº Æ®·£Àè¼ÇÀ» ¼³Á¤ÇÒ ´ë»óÀÌ µÇ´Â Ŭ·¡½º³ª ÀÎÅÍÆäÀ̽º¿¡ °£´ÜÇÑ ¾î³ëÅ×À̼Ǹ¸ Àû¿ëÇÏ¸é ¹Ù·Î Àû¿ëÇÒ ¼ö ÀÖ´Ù. À̸¦ À§Çؼ´Â ½ºÇÁ¸µ ¼³Á¤ÆÄÀÏ¿¡ °£´ÜÈ÷
¸¦ Àû¿ëÇϱ⸸ ÇÏ¸é µÈ´Ù.
µðÆúÆ® Æ®·£Àè¼Ç ¼³Á¤À» º¯°æÇÏ·Á¸é °£´ÜÈ÷ ¾î³ëÅ×ÀÌ¼Ç ÇÁ·ÎÆÛƼ¸¦ ¼³Á¤ÇÏ¸é µÈ´Ù. Propagation, isolation, readOnly, timeout, rollbackFor, rollbackForClassname, noRollbackFor, noRollbackForClassnameÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
@TransactionalÀÇ ÀåÁ¡Àº °èÃþÀûÀÌ¸é¼ ¿À¹ö¶óÀ̵ùÀÌ °¡´ÉÇÏ´Ù´Â °ÍÀÌ´Ù. ¸¸¾à Ŭ·¡½º ·¹º§¸¸ ¼³Á¤Çß´Ù¸é ¸ðµç ¸Þ¼Òµå¿¡ µ¿ÀÏÇÑ Æ®·£Àè¼Ç ¼Ó¼ºÀÌ Àû¿ëµÈ´Ù. ±× Áß ¸î °³ÀÇ ¸Þ¼Òµå´Â ´Ù¸¥ ¼³Á¤ÀÌ ÇÊ¿äÇÏ´Ù¸é ¸Þ¼Òµå ·¹º§¿¡ ¾î³ëÅ×À̼ÇÀ» ÁöÁ¤Çϸé Ŭ·¡½º ¼Ó¼ºÀ» ¿À¹ö¶óÀ̵åÇØ¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¹Ý´ë·Î ÀÎÅÍÆäÀ̽º¿¡ Æ®·£Àè¼Ç ¾î³ëÅ×À̼ÇÀ» Àû¿ëÇß´Ù¸é À̸¦ ±¸ÇöÇÑ ¸ðµç Ŭ·¡½º¿¡µµ µ¿ÀÏÇÑ Æ®·£Àè¼Ç ¼³Á¤ÀÌ Àû¿ëµÈ´Ù. ´ç¿¬È÷ ¿À¹ö¶óÀ̵ùÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. <¸®½ºÆ® 9>´Â Ŭ·¡½º ·¹º§ÀÇ Æ®·£Àè¼Ç ¼³Á¤°ú À̸¦ ¿À¹ö¶óÀ̵åÇÑ ¸Þ¼Òµå ¼³Á¤ÀÇ ¿¹¸¦ º¸¿©ÁØ´Ù.
| <¸®½ºÆ® 9> °èÃþÀû Æ®·£Àè¼Ç ¼³Á¤ Àû¿ëÀÇ ¿¹ | | | |
@Transactional(readOnly = true)
public class DefaultFooService implements FooService {
public Foo getFoo(String fooName) {
¡¦
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void updateFoo(Foo foo) {
¡¦
}
}
| |
 |
¡Ü @Configurable
½ºÇÁ¸µ2.0¿¡¼ »õ·Ó°Ô µîÀåÇÑ ´ëÇ¥ÀûÀÎ ±â´ÉÀÌ ½ºÇÁ¸µ ºóÀ¸·Î µî·ÏµÇÁö ¾ÊÀº µµ¸ÞÀÎ ¿ÀºêÁ§Æ® µî¿¡ ÀÇÁ¸ »ðÀÔÀ» °¡´ÉÇÏ°Ô ÇÏ´Â °ÍÀÌ ÀÖ´Ù. º¸Åë µµ¸ÞÀÎ ¿ÀºêÁ§Æ®´Â new Ű¿öµå¿¡ ÀÇÇØ¼ »ý¼ºÀÌ µÇ°Å³ª ÇÏÀ̹ö³×ÀÌÆ® °°Àº ½áµåÆÄƼ ÇÁ·¹ÀÓ¿öÅ©¿¡¼ »ý¼ºµÇ¾î Àü´ÞµÇ´Â °ÍÀÌ ¸¹´Ù.
ÀÌ·± ¿ÀºêÁ§Æ®¿¡ ½ºÇÁ¸µÀÇ ÀÇÁ¸¼ºÀ» »ðÀÔÇÏ·Á¸é Ưº°ÇÑ ±â¼úÀÌ ÇÊ¿äÇÏ´Ù. ½ºÇÁ¸µ2.0Àº À̸¦ À§Çؼ AspectJÀÇ ·±Å¸ÀÓ À§ºù°ú °°Àº ±â¼úÀ» Àû¿ëÇß´Ù.
¸¸¾à User¶ó´Â µµ¸ÞÀÎ ¿ÀºêÁ§Æ®¿¡¼ PermissionService¶ó´Â ¼ºñ½º ºóÀ» »ç¿ëÇÏ°í ½Í´Ù°í ÇÏÀÚ. ÀÌ·¯±â À§Çؼ´Â ¿øÄ¢ÀûÀ¸·Î User Ŭ·¡½ºµµ ºóÀ¸·Î µî·ÏµÇ¾î¾ß ÇÑ´Ù. ÇÏÁö¸¸ User´Â ÆÛ½Ã½ºÅϽº °´Ã¼·Î ÇÏÀ̹ö³×ÀÌÆ®ÀÇ find¿¡ ÀÇÇØ¼ µ¹·ÁÁú ¼ö Àֱ⵵ ÇÏ´Ù. ÀÌ·± °æ¿ì ºóÀÇ µî·ÏÀ» ÅëÇÑ ¶óÀÌÇÁ»çÀÌŬ °ü¸®´Â ºÒ°¡´ÉÇÏ´Ù. ÀÌ·² ¶§ @ConfigurableÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
<¸®½ºÆ® 10>Àº @ConfigurableÀ» Àû¿ëÇÑ User Ŭ·¡½ºÀÌ´Ù. ÇÊ¿äÇÑ ÀÇÁ¸°ü°è ºóÀÇ Setter°¡ µî·ÏµÇ¾îÀÖ´Ù. ±× ´ÙÀ½¿¡ ÇÒ ÀÏÀº @Configurable ¾î³ëÅ×À̼ÇÀ» Ãß°¡ÇÏ´Â °ÍÀÌ´Ù. ÀÌ ÀÛ¾÷¸¸À¸·Î ½ºÇÁ¸µÀº ÀÌ µµ¸ÞÀÎ ¿ÀºêÁ§Æ®°¡ ½ºÇÁ¸µ ÀÇÁ¸°ü°è »ðÀÔÀÌ ÇÊ¿äÇÑ °ÍÀ¸·Î ÆÇ´ÜÇÏ°í °´Ã¼ÀÇ »ý¼º ½ÃÁ¡À» °¡·Îä¼ ÀÇÁ¸»ðÀÔÀ» ÁøÇàÇÑ´Ù.
¾î³ëÅ×À̼ÇÀ» ÀÌ¿ëÇÑ AspectJ¿Í ½ºÇÁ¸µÀÇ Àý¹¦ÇÑ °áÇÕÀÌ´Ù.
| <¸®½ºÆ® 10> ÀÇÁ¸»ðÀÔÀÌ °¡´ÉÇÑ µµ¸ÞÀÎ ¿ÀºêÁ§Æ®ÀÇ ¿¹ | | | |
@Configurable
public class User {
String userId;
String name;
PermissionService permissionService;
public void setPermissionService(PermissionService permissionSerivce) {
this.permissionService = permissionService;
}
public void dosomething() {
...
permissionService.checkPermission(this, "write_something");
...
}
}
| |
 |
¸¶Áö¸·À¸·Î ¾ÆÁ÷Àº Á¤½ÄÀ¸·Î ¸±¸®Áî µÇÁö ¾Ê¾ÒÁö¸¸ ½ºÇÁ¸µ2.1¿¡¼´Â µåµð¾î ÀÇÁ¸¼³Á¤ ÀÚü¸¦ ¾î³ëÅ×À̼ÇÀ» ÅëÇØ¼ °¡´ÉÇϵµ·Ï ÇÏ´Â ±â¼úÀÌ µµÀ﵃ ¿¹Á¤ÀÌ´Ù. À̸¦ ÀÌ¿ëÇØ¼ XMLÀÌ ¾ø´Â ½ºÇÁ¸µ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßµµ °¡´ÉÇÒ ¼öµµ ÀÖ´Ù.
 | ¾î³ëÅ×À̼ÇÀ» Ȱ¿ëÇÑ ¿ÀǼҽº ÇÁ·ÎÁ§Æ® |  |
½ºÇÁ¸µ°ú ÇÏÀ̹ö³×ÀÌÆ® À̿ܿ¡µµ ¸¹Àº ¿ÀǼҽº ÇÁ·ÎÁ§Æ®µéÀÌ Àû±ØÀûÀ¸·Î ¾î³ëÅ×À̼ÇÀ» Àû¿ëÇϰí ÀÖ´Ù.
AspectJ´Â ¹öÀü5¿¡¼ºÎÅÍ ¾î³ëÅ×ÀÌ¼Ç ¹æ½ÄÀÇ Æ÷ÀÎÆ®ÄÆ, Á¶ÀÎÆ÷ÀÎÆ® ¼³Á¤À» Áö¿øÇϰí ÀÖ´Ù. À̸¦ ÀÌ¿ëÇÏ¸é ´Ü¼øÇÑ POJOºóÀ» ¾Ö½ºÆåƮó·³ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Junitµµ 4.x¿¡¼´Â ¾î³ëÅ×À̼ÇÀ» Ȱ¿ëÇÑ Å×½ºÆ® ¼³Á¤À» Áö¿øÇÑ´Ù.
±âÁ¸ÀÇ ³×ÀÌ¹Ö ·êÀ» ÀÌ¿ëÇÑ ¹æ½Äº¸´Ù ÈξÀ Á÷°üÀûÀÌ°í Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. Google-Guice¶ó´Â ±¸±Û¿¡¼ »ç¿ëÇϰí ÀÖ´Â ÃֽŠIoC ÄÁÅ×À̳ʵµ ¾î³ëÅ×ÀÌ¼Ç ¼³Á¤À» ÁÖ¿ä °Á¡À¸·Î ³»¼¼¿ì´Â Á¦Ç°ÀÌ´Ù.
ÀÌ·¸°Ô ¸¹Àº ¿ÀǼҽº ±â¼ú°ú Á¦Ç°µéÀÌ ¾Õ´ÙÅõ¾î ¼Ò½ºÄÚµåÀÇ ¾î³ëÅ×ÀÌ¼Ç ±â¼úÀ» Àû¿ëÇϰí ÀÖ´Ù. ÇÏÁö¸¸ ¾ÆÁ÷ ÇØ°áÇØ¾ß ÇÒ ¸î °¡Áö ¹®Á¦Á¡µéÀ» °¡Áö°í ÀÖ´Â µí º¸ÀδÙ.
¾ÆÁ÷µµ ¸¹Àº °³¹ßÀÚµéÀº ¼Ò½ºÄÚµå¿Í ¸ÞŸÁ¤º¸¸¦ ÇÔ²² µÎ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù´Â ÀǰßÀ» °¡Áö°í ÀÖ´Ù. ºñ·Ï XMLÀÇ ¼³Á¤¹æ¹ýÀÌ ´õ ºÒÆíÇÏ´Ù°í ÇÒÁö¶óµµ ¸ÞŸÁ¤º¸¸¦ µ¶¸³½ÃŰ´Â °ÍÀÌ ÄÚµå¿Í ÇÔ²² µÎ´Â °Íº¸´Ù´Â ³´´Ù´Â ÁÖÀåÀÌ´Ù. ¾î³ëÅ×À̼ÇÀ̳ª À¯»ç ¸ÞŸÁ¤º¸ ±â¼úÀÇ ´ÜÁ¡Àº ±× ¸ÞŸÁ¤º¸°¡ ¹Ù²î¾úÀ» ¶§¸¶´Ù ÄÄÆÄÀÏÀÌ ´Ù½Ã ÀϾ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù.
µû¶ó¼ ¼Ò½º°¡ ÇÔ²² Á¦°øµÇÁö ¾Ê´Â ÇüÅÂÀÇ Á¦Ç°ÀÎ °æ¿ì ¾î³ëÅ×ÀÌ¼Ç »ç¿ë¿¡ Á¦¾àÀÌ ÀÖ´Ù. ´ÜÁö ±â¼úÀûÀÎ ¹®Á¦°¡ ¾Æ´Ï¶ó ÄÚµå¿Í ¸ÞŸÁ¤º¸ÀÇ È¥¿ë¿¡ ´ëÇÑ ¹®Á¦Á¦±âµµ ÀûÁö ¾Ê´Ù. ÀÌ·± ¸é¿¡¼ ¾ÆÁ÷ ¾î³ëÅ×À̼ÇÀÌ ±× Æí¸®ÇÔ¿¡µµ ºÒ±¸ÇÏ°í ¿ÏÀüÈ÷ ¸ÞŸÁ¤º¸ ±â¼úÀ» ÆòÁ¤Çϰí ÀÖÁö´Â ¾Ê´Â µíÀÌ º¸ÀδÙ.
°Ô´Ù°¡ ÀÚ¹ÙÀÇ ¾î³ëÅ×ÀÌ¼Ç ±â¼úÀÚü¿¡ ´ëÇÑ ¿©·¯ °¡Áö ºñÆÇµµ Á¦±âµÇ°í ÀÖ´Ù. °áÁ¤ÀûÀÎ °ÍÀº XML¿¡ ºñÇØ¼ ±× Á¤º¸±¸¼ºÀ» °ËÁõÇÏ´Â °ÍÀÌ ¸Å¿ì ºÒÆíÇÏ´Ù´Â °ÍÀÌ´Ù.
DTD³ª ½ºÅ°¸¶(Schema)¸¦ ÅëÇØ¼ ¼Õ½±°Ô Á¤º¸±¸¼ºÀ» °ËÁõÇÒ ¼ö ÀÖ´Â XML¿¡ ¹ÝÇØ ¾î³ëÅ×À̼ÇÀº ±×·¯ÇÑ ±â¼úÀÇ Áö¿øÀÌ ¾ÆÁ÷Àº ¹ÌºñÇÏ´Ù. À̸¦ ÀÏÀÏÀÌ ÄÚµå·Î °ËÁõÇÏ´Â °Íµµ »ç½Ç °³¹ßÀڵ鿡°Ô´Â ºÒÆíÇÑ ÀÛ¾÷ÀÌ ¾Æ´Ò ¼ö ¾ø´Ù.
ÀÌ·± Àå´ÜÁ¡À» °¡Áö°í ÀÖ´Â ¾î³ëÅ×ÀÌ¼Ç ±â¼úÀÌÁö¸¸ ¼Õ½¬¿î ¼³Á¤¹æ½ÄÀ̶ó´Â ¸Å·Â ¶§¹®ÀÎÁö ±× ±â¼úµµÀÔÀº Á¡Á¡ È®´ëµÇ¾î °¡°í ÀÖ´Ù. À̸¦ Àß È°¿ëÇÑ ¿ÀǼҽºÀÇ ´Ù¾çÇÑ ±â¼úµéÀÌ ÇöÀå¿¡¼ °ËÁõµÇ´Â °ÍÀ» ÅëÇØ¼ ´ÙÀ½ ¹öÀü ÀÚ¹ÙÀÇ ¾î³ëÅ×ÀÌ¼Ç ±â¼úÀÌ ÇÑÃþ ´õ ¹ßÀüÇÒ ¼ö ÀÖ´Â °è±â°¡ µÉ ¼ö Àֱ⸦ ±â´ëÇØº»´Ù. @
Âü°íÀÚ·á
1. Spring 2.0 reference manual, http://static.springframework.org/spring/docs/2.0.x/reference/index.html
2. Expert One-on-One J2EE Development without EJB, Rod Johnson, Wrox
3. Professional Java Development with the Spring Framework, Rod Johnson, Wrox
* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.