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

ÀÌâ½Å(¿ÀǸ¶·ç ½ºÆ©µð¿ÀÀÇ Ç÷§Æû ¿ÀÇÁ³Ê)   2007/11/30
1ºÎ | °³¹ßÀÚ¸¦ À§ÇÑ ³¡¾ø´Â °æÀï ÀÚ¹Ù vs ´å³ÝÀÇ ¸ÞŸµ¥ÀÌÅÍ È°¿ë
2ºÎ | °³¹ß »ý»ê¼º Çâ»óÀ» À§ÇÑ ÀÚ¹ÙEE5ÀÇ ¾î³ëÅ×ÀÌ¼Ç È°¿ë
3ºÎ | ÇüÀÌ»óÇÐÀû ¸ÞŸµ¥ÀÌÅÍ È°¿ëÀ» À§ÇÑ ¾î³ëÅ×ÀÌ¼Ç ÀÎ ¾×¼Ç
4ºÎ | ´å³Ý °³¹ßÀÚ¸¦ À§ÇÑ ¾îÆ®¸®ºäÆ® ¿À¸®¿£Æ¼µå ÇÁ·Î±×·¡¹Ö
5ºÎ | ÀÚ¹Ù ¾î³ëÅ×À̼ÇÀÇ ÁøÈ­ ¿ÀǼҽº¿Í ¾î³ëÅ×À̼Ç
ÀÚ¹Ù
¸ÞŸµ¥ÀÌÅÍ(metadata)¿¡¼­ ÀÚ¹ÙÀÇ ¾î³ëÅ×À̼Ç(Annotation)À» »©¸ÔÀ» ¼ö´Â ¾ø´Â ÀÏ. »ç½Ç ¸ðµç µ¥ÀÌÅÍ¿¡´Â ¸ÞŸµ¥ÀÌÅ͸¦ ºÙÀ̰íÀÚ ÇÏ´Â ¿å±¸°¡ »ý±â°Ô ¸¶·ÃÀÌ´Ù. ÇüÀÌÇÏÇÐÀûÀ¸·Î¸¸Àº »ì ¼ö ¾ø¾î ÇüÀÌ»óÇÐ(meta-physics)ÀÌ ÀÖµíÀÌ ¸»ÀÌ´Ù.

ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ¼Ò½º Äڵ忡 ¸ÞŸµ¥ÀÌÅ͸¦ ºÙÀ̰íÀÚ ÇÏ´Â ½Ãµµ´Â ±×·± ±Ùº»ÀûÀÎ ¿å±¸¿¡¼­ ½ÃÀÛÇß´Ù°í´Â ÇÏÁö¸¸, ±¸Ã¼ÀûÀÎ ¾µ¸ðµµ ¸¹¾Ò´Ù. ¾î³ëÅ×ÀÌ¼Ç Àü¿¡ ´ë¾ÈÀ¸·Î ¿©°ÜÁ³´ø DocletÀº XML ¼³Á¤ Áö¿ÁÀ¸·ÎºÎÅÍ °³¹ßÀÚ¸¦ ±¸¿øÇØÁÖ´Â ¸Þ½Ã¾Æ °°Àº Á¸Àç¿´´Ù. ¿ÀÁ×ÇßÀ¸¸é Attribute Oriented ProgrammingÀ̶ó´Â ¸»±îÁö ³ª¿ÔÀ»±î.

»ç½Ç ÀÚ¹ÙÀÇ ¾î³ëÅ×À̼ÇÀÌ ³ª¿Â µ¥¿¡´Â C#ÀÇ ¾îÆ®¸®ºäÆ®(Attribute)ÀÇ °øµµ ¾øÁö ¾Ê¾Ò´Ù. ȤÀÚ´Â MSÀÇ ¹®Á¦ ÇØ°á ¹æ¹ýÀ» µû¸£´Â °ÍÀº º°·Î ¼º°øÀûÀÌÁö ¾Ê¾Ò´Ù°í ²¿Áý±âµµ ÇÏÁö¸¸, ÆóÇØ¸¦ ¸ÕÀú ÁöÀûÇϱ⿡´Â ¾îÆ®¸®ºäÆ®³ª ¾î³ëÅ×À̼ÇÀÌ Ã¤¿öÁÖ´Â ¸ÞŸµ¥ÀÌÅÍÀÇ ±¸¸ÛÀº ¿ì¸®¿¡°Ô °±Áø °ÍÀÓÀÌ Æ²¸²¾ø´Ù.

»ý°¢Çغ¸¸é, ¼Ò½ºÄÚµå(µ¥ÀÌÅÍ)¸¦ ¼³¸íÇÑ´Ù´Â Á¡¿¡¼­ ÁÖ¼®(Comment)µµ ¸ÞŸµ¥ÀÌÅÍÀÇ ÀÏÁ¾À¸·Î º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¡¼­ Docletµµ öÇÐÀûÀ¸·Î´Â ±× Á¡¿¡ Âø¾ÈÇÑ ¹Ù°¡ Å©´Ù.

ÇÏÁö¸¸ ÇÁ·Î±×·¥ ÀÚü¶ó±âº¸´Ù´Â ¾î¶»°Ô ¿î¿ëÇÒ °ÍÀΰ¡¿¡ ´ëÇÑ ¼³Á¤(´ëÇ¥ÀûÀ¸·Î Java EEÀÇ º¹Àâ´Ù´ÜÇÑ XML ¼³Á¤ ÆÄÀϵé)ÀÌ ÄÚµå¿Í ºÐ¸®µÇ¸é¼­ °³¹ßÀÚ°¡ ´Ù·ç°í ¸Ã¾Æ¾ß ÇÒ °ÍµéÀÌ ÈξÀ ´õ ¸¹¾ÆÁ³°í ÀÚ¹Ù ÄÚµå¿Íµµ ÀÌÁúÀûÀÌ µÇ¾î°¬´Ù.

ºÒÆíÇÔÀº »ý»ê¼ºÀÇ ÀûÀÌ´Ù. ½É¸®ÀûÀÎ ÀÌÀ¯µµ ÀÖ°ÚÁö¸¸, ¿¬°ü¼ºÀÌ ³ôÀº Á¤º¸¸¦ ¶³¾î¶ß·Á ³õ´Â ÀÏÀº ¾Æ¹«·¡µµ Çö¸íÇÑ Ã³»ç´Â ¾Æ´Ò °ÍÀÌ´Ù. ¹¹µçÁö ¿À³²¿ëÀº ÁÁÁö ¾ÊÁö¸¸ ¾î¶»°Ô ¾²¸é ÁÁÀ»ÁöÁ¶Â÷ ¸ð¸¥´Ù¸é ¿À³²¿ë°ú´Â Â÷¿øÀÌ ´Ù¸¥ ºÒÆíÇÑ »óŸ¦ °Þ°Ô µÈ´Ù.

±×µ¿¾È ¾î³ëÅ×À̼ÇÀÇ »ç¿ë¿¡ ´ëÇØ¼­´Â ÀÚÁÖ ¼Ò°³°¡ µÇ¾ú±â ¶§¹®¿¡ ¿©±â¿¡¼­ ÇÊÀÚ´Â Á¶±Ý ´Ù¸¥ °üÁ¡À» °¡Á®º¸±â·Î Çß´Ù. ÇÊÀÚ°¡ Ƽ¸Æ½º¿¡ ÀÖÀ» ¶§ ÀÚ¹Ù EE 5 Ç÷§Æû °³¹ß¿¡ Âü¿©Çϸ鼭 ¸Â´Ú¶ß¸®°Ô µÈ ÀÓ¹«°¡ ¹Ù·Î ¾î³ëÅ×ÀÌ¼Ç Ã³¸®¿´´Ù.

JDK 5¿¡´Â ¾ÈŸ±õ°Ôµµ ¾î³ëÅ×À̼ÇÀ» Àаí ÀÌÇØÇÏ´Â API°¡ Ç¥ÁØÈ­µÇ¾î ÀÖÁö ¾Ê¾Æ JDK¿¡ µé¾îÀÖ´Â ½ã °íÀ¯ÀÇ ¶óÀ̺귯¸®¸¦ »ç¿ëÇß´Ù. ÇÏÁö¸¸ ¾î³ëÅ×À̼ÇÀÇ Ã³¸®´Â ºñ´Ü Ç÷§Æû º¥´õ¸¸ÀÇ ¹®Á¦°¡ ¾Æ´Ñ ÀÚ¹ÙÀÎ ¸ðµÎÀÇ ¹®Á¦¿©¼­, Àçºü¸£°Ô Ç¥ÁØÈ­°¡ ÁøÇàµÇ¾î ÀÚ¹Ù SE 6¿¡´Â ±âº»À¸·Î Æ÷ÇԵDZ⿡ À̸£·¶´Ù.

  JSR 269 Pluggable Annotation Processing API

°ø½Ä »çÀÌÆ®(http://jcp.org/en/jsr/detail?id=269)¸¦ º¸¸é ¾Ë ¼ö ÀÖ°ÚÁö¸¸, ÀÌ JSRÀº ²Ï ¿À·¡ ³íÀǸ¦ ÁøÇàÇÑ °ÍÀÌ´Ù(½ÃÀÛÀÌ 2005³â 2¿ùÀε¥ ³¡Àº 2006³â 12¿ùÀÌ´Ï °ÅÀÇ 2³âÀ̳ª °É·È´Ù). ±× »ç¿¬À» ÃßÃøÇØº»´Ù¸é, ¾î³ëÅ×ÀÌ¼Ç Ã³¸®¸¦ À§ÇÑ APIÀÇ Ç¥ÁØÈ­´Â ÀÏÂïºÎÅÍ(Âü°í·Î ÀÚ¹Ù SE 5´Â 2004³â 9¿ù¿¡ Ãâ½Ã) °ø°¨À» ¾ò¾î JSRÀ» ¹ßÀÇÇßÁö¸¸, Á¤ÀÛ ÀÌ JSRÀ» ǰÀ» ÀÚ¹Ù SE 6´Â 2006³â 12¿ù¿¡ ³ª¿Í¼­ JSR 269µµ ±×¿¡ ¸ÂÃá ²ÃÀÌ´Ù.

±×·¸´Ù°í JSR 269 ÀÌÀü¿¡´Â ¾î³ëÅ×À̼ÇÀ» ó¸®ÇÒ ¼ö ¾ø¾ú´ø °ÍÀº ¾Æ´Ï´Ù. ½ãÀÇ JDK 5¿¡´Â APT(Annotation Processing Tool)¶ó´Â ÆÐŰÁö°¡ Æ÷ÇԵǾî, JSR 269°¡ ³ª¿À±â Àü±îÁö Àӽ÷Π±× ¿ªÇÒÀ» ´ë½ÅÇß´Ù.

APT´Â Å©°Ô ¾î³ëÅ×ÀÌ¼Ç Ã³¸®¸¦ ÇÁ·Î±×·¡¹ÖÇϱâ À§ÇÑ Mirror(ÀÚ¹ÙÀÇ Reflection¿¡ ´ëÇÑ ¿À¸¶Áê·Î¼­ÀÇ À̸§) API¿Í ¾î³ëÅ×ÀÌ¼Ç ÇÁ·Î¼¼¼­¸¦ È£ÃâÇϱâ À§ÇÑ apt Åø·Î ÀÌ·ç¾îÁ® ÀÖ¾ú´Ù. ÀÌÁß¿¡¼­ API ºÎºÐÀÌ JSR 269·Î ¼ö¿ëµÇ¾î ÀÚ¹Ù SE 6ÀÇ ÄÚ¾î API¿¡ µé¾î°¬°í, apt ÅøÀº javac ÄÄÆÄÀÏ ¸í·ÉÀÇ ¿É¼ÇÀ¸·Î ½ÂÈ­µÇ¾ú´Ù.


Èï¹Ì·Î¿î Á¡Àº javax.lang.model ÆÐŰÁö°¡ »ý±ä ¸ð¾ç»õ´Ù. Mirror API·ÎºÎÅÍ ¿À±ä ÇßÁö¸¸, ¾î³ëÅ×À̼ǿ¡ ±¹ÇÑµÈ ³¿»õ¸¦ ¶ì°í ÀÖÁö ¾Ê´Ù. ¾î³ëÅ×ÀÌ¼Ç Ã³¸®¶ó´Â °ÍÀÌ ±âº»ÀûÀ¸·Î ¸ðµç ÀÚ¹Ù ¾ð¾î ¿ä¼Ò(ÆÐŰÁö, Ŭ·¡½º, ÇÊµå µî)¸¦ ´ë»óÀ¸·Î ÇϹǷΠ°ü·ÃµÈ ¸ðµ¨¸µÀÌ ÇÊ¿äÇØ ¸¸µç ÀÛ¾÷¹°ÀÌÁö¸¸, °á°úÀûÀ¸·Î ÀÚ¹Ù ¾ð¾îÀÇ ±¸¼º ¿ä¼ÒÀÇ ¸ðµ¨ÀÌ Ç¥ÁØÈ­µÈ ¼ÀÀÌ´Ù.

APT¸¦ ÀÌ¿ëÇÑ ¾î³ëÅ×ÀÌ¼Ç Ã³¸®´Â ÇÊÀÚ°¡ ¾ðÁ¨°¡ ¸¶¼Ò¿¡ ±â°íÇÑ ÀûÀÌ ÀÖ¾ú´Ù´Â ±â¾ïÀÌ ³­´Ù. ¾Æ¸¶µµ JSR 181 À¥ ¼­ºñ½º ¸ÞŸµ¥ÀÌÅÍ¿¡ ´ëÇÑ °ÍÀ̾úÀ» ÅÙµ¥, Ȥ½Ã³ª °ü½É ÀÖ´Â ºÐµéÀº °ú¿ùÈ£¸¦ °Ë»öÇØº¸±æ ¹Ù¶õ´Ù.

±×·³ JSR 269¶ó´Â µüµüÇÑ À̸§´ë½Å À̸§ÀÇ ÀÌ´Ï¼È PAPA°ú ÇÔ²² ±¸Ã¼ÀûÀÎ À̾߱âµéÀ» Ç®¾î°¡ º¸ÀÚ.

  Hello PAPA

¹é¹®ÀÌ ºÒ¿©ÀÏ·±(run). PAPA·Î © ¼ö ÀÖ´Â ¡®À̺¸´Ù ´õ °£´ÜÇÒ ¼ö ¾ø´Â¡¯ ¿¹Á¦¸¦ Çѹø ¸¸µé¾îº¸ÀÚ.

 <¸®½ºÆ® 1>HelloPapaProcessor.java


<¸®½ºÆ® 1>À» Æ÷ÇÔÇÑ ÀÌŬ¸³½º ÇÁ·ÎÁ§Æ®¸¦ http://iasos.googlecode.com/svn/trunk/maso-2007-07-papa/ ¿¡ ¿Ã·Á µÎ¾ú´Ù. SVNÀ¸·Î üũ¾Æ¿ôÇϸé ÀÚµ¿À¸·Î ºôµå µÇ¾î ½ÇÇàÇÏ½Ã±â ÆíÇÒ °ÍÀÌ´Ù. ¾Æ! ´ç¿¬È÷µµ ¾ÕÀ¸·ÎÀÇ ¾ê±â´Â ÀÚ¹Ù SE 6¸¦ ±âÁØÀ¸·Î ÁøÇàµÈ´Ù.

ÀÌ ¿¹Á¦¸¦ ½ÇÇàÇÏ·Á¸é ´ÙÀ½°ú °°Àº ½Ã³ª¸®¿À¸¦ ¾Ë¾Æ µÎ¾î¾ß ÇÑ´Ù.

1. javax.annotation.processing.Processor ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ ¾î³ëÅ×ÀÌ¼Ç ÇÁ·Î¼¼¼­´Â main ¸Þ¼Òµå°¡ ÀÖ´Â ½ÇÇà Ŭ·¡½º°¡ ¾Æ´Ï´Ù. µû¶ó¼­ ´Üµ¶À¸·Î ½ÇÇàµÉ ¼ö ¾ø°í, Ç×»ó ÀÌ ÇÁ·Î¼¼½º¸¦ Å» ´ë»ó ¼Ò½º ÆÄÀÏÀÌ ÇÊ¿äÇÏ´Ù.
2. javac ÄÄÆÄÀÏ·¯ ¸í·ÉÀ¸·Î ¼Ò½º ÆÄÀÏÀ» ÄÄÆÄÀÏÇÒ ¶§, -processor ¿É¼ÇÀ¸·Î »ç¿ëÇÑ ¾î³ëÅ×ÀÌ¼Ç ÇÁ·Î¼¼¼­¸¦ ¼³Á¤ÇÑ´Ù.
3. ¾î³ëÅ×ÀÌ¼Ç ÇÁ·Î¼¼¼­ Ŭ·¡½º ¶ÇÇÑ javac ¸í·É ½ÇÇà ½Ã Å¬·¡½ºÆÐ½º(CLASSPATH ȯ°æº¯¼ö ¶Ç´Â -classpath ¿É¼Ç)¿¡ µé¾î ÀÖ¾î¾ß ÇÑ´Ù.

javac ¸í·ÉÀº ±âº»ÀûÀ¸·Î ÄÄÆÄÀÏ ¸í·ÉÀ̹ǷÎ, ¾î³ëÅ×ÀÌ¼Ç ÇÁ·Î¼¼¼­ÀÇ ½ÇÇà°ú´Â º°µµ·Î ÄÄÆÄÀϵµ ÇÏ°Ô µÈ´Ù. µû¶ó¼­ Ŭ·¡½º(.class) ¹ÙÀ̳ʸ® ÆÄÀÏÀÌ ³ª¿À´Âµ¥, ÀÌ °úÁ¤À» »ý·«ÇÏ°í ¼ø¼öÇÏ°Ô ¼Ò½º ÆÄÀÏÀÇ ¾î³ëÅ×ÀÌ¼Ç Ã³¸®¸¸ ÇÏ°í ½Í´Ù¸é -proc:only ¿É¼ÇÀ» ÁØ´Ù.

±×·¡¼­ ¿¹Á¦ ÇÁ·ÎÁ§Æ® maso-2007-07-papa¸¦ üũ ¾Æ¿ôÇÑ µð·ºÅ丮·Î °¡¼­

javac -cp bin -proc:only -processor ias.HelloPapaProcessor src/ias/Child.java

¸í·É ÇÁ·ÒÆ®ÇÁ³ª ¼Ð¿¡¼­ ½ÇÇàÇϸé

Note: Hello PAPA

¶ó°í Ãâ·ÂµÈ´Ù.

HelloPapaProcessor´Â ¾î³ëÅ×ÀÌ¼Ç ÇÁ·Î¼¼¼­°¡ ¾ÆÁÖ ±âº»ÀûÀ¸·Î °¡Á®¾ß ÇÒ ¿ä¼Ò¸¦ º¸¿©Áִµ¥, ¾î¶² ¾î³ëÅ×À̼ÇÀ» ó¸®ÇÒÁö(@SupportedAnnotationTypes)¿Í ¼Ò½º ¹öÀü ¾îµðºÎÅÍ Ã³¸®ÇÒÁö(@SupportedSourceVersion)¸¦ ¾î³ëÅ×À̼ÇÀ¸·Î Á¤ÀÇÇÑ´Ù.

¿ø·¡ ¾Õ¼­ ¾ð±ÞÇßµíÀÌ javax.annotation.processing.Processor ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¾ß ÇÏÁö¸¸, °£´ÜÈ÷ ÇÁ·Î¼¼½º¿¡ Àü³äÇÏ°í ½ÍÀº °æ¿ì¿¡´Â ¿¹Á¦¿Í °°ÀÌ AbstractProcessor¸¦ »ó¼ÓÇÏ¿© Ãß»ó ¸Þ¼ÒµåÀÎ process¸¸ ±¸ÇöÇÏ¸é ÆíÇÏ´Ù.

process ¸Þ¼Òµå´Â javac ÄÄÆÄÀÏ·¯°¡ ¼Ò½º Äڵ带 ÄÄÆÄÀÏÇϸ鼭 ¾î³ëÅ×À̼ÇÀÌ ¹ß°ßµÇ¸é Àμöµé°ú ÇÔ²² È£ÃâÇØÁØ´Ù. ¿¹Á¦¿¡¼­´Â ¾Æ¹«·± ¾î³ëÅ×ÀÌ¼Ç Ã³¸®°¡ ¾øÀ¸¹Ç·Î false¸¦ ¹ÝȯÇÏÁö¸¸, ½ÇÁ¦ ÇÁ·Î¼¼¼­¿¡¼­´Â ´ë»ó ¾î³ëÅ×ÀÌ¼Ç Ã³¸® ¿©ºÎ¸¦ ¹ÝȯÇϵµ·Ï ¸¸µç´Ù.

ÇÏÁö¸¸ HelloPapaProcessor´Â °£´ÜÇØµµ ³Ê¹« °£´ÜÇØ¼­, ¾î³ëÅ×ÀÌ¼Ç Ã³¸®°¡ ½ÇÁ¦ ¾î¶»°Ô ÀÌ·ç¾îÁú Áö´Â ÀüÇô º¸¿©ÁÖÁö ¸øÇÏ´Â °¨ÀÌ ÀÖ´Ù. ±×·¡¼­ ¸ÕÀú ±× ´ë»óÀÎ Child.javaºÎÅÍ ¼Ò°³ÇÑ ´ÙÀ½ ÀÌ Å¬·¡½º¿¡ µé¾îÀÖ´Â ¾î³ëÅ×À̼ÇÀÇ ¸ñ·ÏÀ» Ãâ·ÂÇÏ´Â AnnotationListProcessor¸¦ »ìÆìº¸°Ú´Ù.

 <¸®½ºÆ® 2> Child.java


 <¸®½ºÆ® 3> AnnotationListProcessor


½ÇÇàÀº

javac -cp bin -proc:only -processor ias.AnnotationProcessor src/ias/Child.java

·Î Çϰí, °á°ú´Â

Note: java.lang.SuppressWarnings
Note: java.lang.Override
Note: java.lang.Deprecated

¿Í °°ÀÌ Child¿¡ ºÙÀº ¾î³ëÅ×À̼ÇÀÌ ¸ðµÎ Ãâ·ÂµÈ´Ù.

±×·±µ¥, process ¸Þ¼Òµå¿¡¼­ ¹«Á¶°Ç false¸¦ ¹ÝȯÇÏ´ø HelloPapaProcessor¿Í´Â ´Þ¸®, AnnotationListProcessor´Â ó¸® ´ë»ó Ŭ·¡½º¿¡ ¾î³ëÅ×À̼ÇÀÌ ÀÖÀ¸¸é ¸ðµÎ ¼öÁýÇÏ·Á ¸ñ·ÏÀ» Ãâ·ÂÇÑ ´ÙÀ½ true¸¦ ¹ÝȯÇÑ´Ù. ±×·¸´Ù¸é ÀÌ true¸¦ ¹ÝȯÇÑ °ÍÀº ¾î¶² °á°ú¸¦ °¡Á® ¿Ã±î?

ÇÁ·Î¼¼¼­¸¦ Çϳª¸¸ ¾²´Â °æ¿ì¿¡´Â º°´Ù¸¥ Â÷À̰¡ ¾ø°ÚÁö¸¸, ¿©·¯ °³ÀÇ ÇÁ·Î¼¼¼­¸¦ üÀÎó·³ À̾ ¾´´Ù¸é »óȲÀº Å©°Ô ´Þ¶óÁø´Ù. ¿¹¸¦ µé¾î

javac -cp bin -proc:only -processor ias.HelloPapaProcessor,ias.AnnotationListProcessor src/ias/Child.java

¿Í °°ÀÌ HelloPapaProcessor¸¦ ¸ÕÀú ½ÇÇàÇÑ ´ÙÀ½ AnnotationListProcessor¸¦ ½ÇÇàÇϸé, ¿¹»óó·³ µÎ ÇÁ·Î¼¼¼­°¡ ¼øÂ÷ÀûÀ¸·Î ½ÇÇàµÈ °á°ú°¡ ³ª¿Â´Ù.

Note: Hello PAPA
Note: java.lang.SuppressWarnings
Note: java.lang.Override
Note: java.lang.Deprecated

±×·±µ¥, ¼ø¼­¸¦ ¹Ý´ë·Î Çϸé Ãâ·Â ¼ø¼­µµ ¹Ý´ë·Î µÉ °Í °°Àº ¿¹»óÀ» ¸ÚÁö°Ô ºø³ª°¡ ¹ö¸°´Ù.

Note: java.lang.SuppressWarnings
Note: java.lang.Override
Note: java.lang.Deprecated

¾îÂîµÈ ÀÏÀÎÁö Hello PAPA°¡ Ãâ·ÂµÇÁö ¾Ê´Â´Ù. ±× ÀÌÀ¯´Â ¹Ù·Î AnnotationListProcessor°¡ true¸¦ ¹ÝȯÇÏ¿© Àڱ⿡°Ô ³Ñ¾î¿Â ¾î³ëÅ×ÀÌ¼Ç ÀüºÎ´Â ÀÌ¹Ì Ã³¸®µÇ¾úÀ¸´Ï ±× µÚ·Î´Â ó¸®ÇÏÁö ¸»¶ó°í ÀüÇ߱⠶§¹®ÀÌ´Ù. ±×·¡¼­ ´ÙÀ½À¸·Î È£ÃâµÈ HelloPapaProcessorÀÇ process ¸Þ¼Òµå¿¡´Â ¾Æ¹«·± ¾î³ëÅ×À̼ÇÀÌ ³Ñ¾î°¡Áö ¾Ê¾Ò´ø °ÍÀÌ´Ù.

¿©±â¼­ ÇÑ ¹ß¦ ´õ ³ª¾Æ°¡ »ý°¢Çغ¸ÀÚ. ¾Õ¿¡¼­´Â ÀÚ¹Ù ¾ð¾î°¡ ±âº»ÀûÀ¸·Î Á¤ÀÇÇÑ ¾î³ëÅ×À̼ÇÀÌÁö¸¸ ÀÚ½ÅÀÌ ¸¸µç ¾î³ëÅ×À̼Ç(User Created AnnotationÀ̶ó°í³ª ÇÒ±î?)¸¸À» ó¸®ÇÏ´Â ÇÁ·Î¼¼¼­¸¦ ¸¸µé¾îº¸´Â °ÍÀº ¾î¶³±î?

 <¸®½ºÆ® 4> Observation.java


ObservationÀº °£´ÜÇÑ ¸¶Ä¿ ¾î³ëÅ×À̼ÇÀÌ´Ù. À̰ÍÀ» ºÙÀÎ GrandChild Ŭ·¡½º¸¦ ¸¸µé¾îº¸ÀÚ.

 <¸®½ºÆ® 5> GrandChild.java


ObservationProcessor´Â Observation ¾î³ëÅ×À̼Ǹ¸À» ã¾Æ³»´Â ¿ªÇÒÀ» ÇÑ´Ù.

 <¸®½ºÆ® 6> ObservationProcessor.java


¸ÕÀú ObservationProcessor¸¸ ´Üµ¶À¸·Î ½ÇÇàÇØº¸¸é

javac -cp bin -proc:only -processor ias.ObservationProcessor src/ias/Child.java

Observation ¾î³ëÅ×À̼ÇÀ» ¼öÁýÇß´Ù°í Ç¥½ÃµÈ´Ù.

Note: Observation mark is claimed

±×·¸´Ù¸é, AnnotationListProcessor¿Í °°ÀÌ ½ÇÇàÇÏ¸é ¾î¶² °á°ú°¡ ³ª¿Ã±î? ÁüÀÛÀÌ Á¶±Ý °¡´Â°¡? GrandChild Ŭ·¡½º¿¡´Â Observation»Ó ¾Æ´Ï¶ó Overrideµµ ºÙ¾î ÀÖ´Ù. ±×·±µ¥ ObservationProcessor¿¡¼­ Observation¸¸À» ¼öÁýÇßÀ¸´Ï±î, AnnotationListProcessor¿¡°Ô´Â Override¸¸ ¼öÁý ´ë»óÀ¸·Î ³²À» °ÍÀÌ´Ù. ÀÚ ±×·³ ÀÌ·± ÃßÃøÀÌ ¸Â´ÂÁö È®ÀÎÇØº¸ÀÚ.

javac -cp bin -proc:only -processor ias.ObservationProcessor, ias.AnnotationListProcessor src/ias/Child.java

ÀÇ ½ÇÇà °á°ú´Â

Note: Observation mark is claimed
Note: java.lang.Override

¿Í °°¾Æ ¿ì¸®ÀÇ ¿¹»óÀÌ ¸ÚÁö°Ô ¸Â¾Æ µé¾úÀ½À» º¸¿©ÁØ´Ù.

  °³¹Ì(Ant)³ª ÆÛ¸Ô¾î~

¾Õ¼­ °£´ÜÈ÷ ¾î³ëÅ×ÀÌ¼Ç ÇÁ·Î¼¼¼­¸¦ javac ¸í·ÉÀ¸·Î ½ÇÇàÇØºÃÁö¸¸, ½ÇÁ¦·Î ÀÌ·¸°Ô ÇÏ½Ç ºÐµéÀº °ÅÀÇ ¾øÀ» °ÍÀÌ´Ù. Á¦¸ñÀÌ ´Ù¼Ò ¼±Á¤Àû(?)À¸·Î ´À²¸Áú Áöµµ ¸ð¸£°ÚÁö¸¸, ÀÌÁ¦ ÇÁ·ÎÁ§Æ®ÀÇ ºôµå¿¡´Â ¾ÆÆÄÄ¡ ¾ØÆ®(Apache Ant)¸¦ ¸¹ÀÌ ¾²°í Àֱ⠶§¹®ÀÌ´Ù.

¾î³ëÅ×À̼ÇÀÌ Ã³À½ ³ª¿Â ÀÚ¹Ù SE 5¿¡¼­´Â PAPA°¡ ¾ø¾ú±â ¶§¹®¿¡, APT¶ó´Â(ºñÇ¥ÁØÀûÀÎ) ÅøÀÌ ÀÖ¾î ¾ØÆ®µµ APT¿¡ ´ëÀÀÇÏ´Â ¾ØÆ® ŽºÅ©¸¦ µû·Î µÎ¾î Áö¿øÇß¾ú´Ù.

Apt ŽºÅ©ÀÇ ÀϺΠ 

´ÙÀ½Àº Apt ŽºÅ© ³»¿ë ¿ø¹®ÀÇ ÀϺÎÀÌ´Ù. Àü¹®Àº http://ant.apache.org/manual/CoreTasks/apt.html¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ´Ù.

Apt| Description
Runs the annotation processor tool (apt), and then optionally compiles the original code, and any generated source code. This task requires Java 1.5. It may work on later versions, but this cannot be confirmed until those versions ship. Be advised that the Apt tool does appear to be an unstable part of the JDK framework, so may change radically in future versions. In particular it is likely to be obsolete in JDK 6, which can run annotation processors as part of javac. If the task does break when upgrading JVM, please check to see if there is a more recent version of Ant that tracks any changes.
This task inherits from the Javac Task, and thus supports nearly all of the same attributes, and subelements. There is one special case, the fork attribute, which is present but which can only be set to true. That is, apt only works as a forked process.
In addition, it supports the following addition items:Apt| Description
Runs the annotation processor tool (apt), and then optionally compiles the original code, and any generated source code. This task requires Java 1.5. It may work on later versions, but this cannot be confirmed until those versions ship. Be advised that the Apt tool does appear to be an unstable part of the JDK framework, so may change radically in future versions. In particular it is likely to be obsolete in JDK 6, which can run annotation processors as part of javac. If the task does break when upgrading JVM, please check to see if there is a more recent version of Ant that tracks any changes.
This task inherits from the Javac Task, and thus supports nearly all of the same attributes, and subelements. There is one special case, the fork attribute, which is present but which can only be set to true. That is, apt only works as a forked process.
In addition, it supports the following addition items:

Apt ŽºÅ©´Â apt¸¦ ½ÇÇàÇÏ°í ¿É¼ÇÀ¸·Î ¿ø·¡ ÄÚµå¿Í »ý¼ºµÈ Äڵ嵵 ÄÄÆÄÀÏ ÇÑ´Ù. ÀÌ Å½ºÅ©´Â ÀÚ¹Ù 1.5°¡ ÇÊ¿äÇϸç ÀÌÈÄÀÇ ¹öÀü¿¡¼­ ½ÇÇàµÉ ¼ö ÀÖÁö¸¸, Á¤È®ÇÑ ³»¿ëÀº ÀÌÈÄ ¹öÀüÀÌ ³ª¿Í ºÁ¾ß È®ÀÎÇÒ ¼ö ÀÖ´Ù. APT ÅøÀº JDK ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ ÀÓ½ÃÀûÀÎ ºÎºÐÀ¸·Î º¸À̹ǷÎ, ´ÙÀ½ ¹öÀü¿¡¼­ ±Ùº»ÀûÀ¸·Î º¯ÇÒ ¼ö ÀÖÀ½À» ¾Ë·ÁµÐ´Ù.

ƯÈ÷ JDK 6¿¡¼­´Â javac ÄÄÆÄÀÏ·¯ ¸í·ÉÀÇ ÀϺηΠ¾î³ëÅ×ÀÌ¼Ç ÇÁ·Î¼¼¼­¸¦ ½ÇÇàÇÒ ¼ö ÀÖÀ» °ÍÀ¸·Î º¸¿©, APT°¡ »çÀå(obsolete)µÉ °¡´É¼ºÀÌ ¸¹´Ù. ¸¸¾à JVMÀ» ¾÷±×·¹À̵åÇÏ°í ³ª¼­ ŽºÅ©°¡ Á¦´ë·Î ½ÇÇàµÇÁö ¾ÊÀ¸¸é, ´õ ÃֽйöÀüÀÇ ¾ØÆ®°¡ ±× ¹®Á¦¸¦ ÇØ°áÇß´ÂÁö È®ÀÎÇ϶ó.

ÀÌ Å½ºÅ©´Â Javac Å×½ºÅ©¸¦ »ó¼ÓÇϹǷÎ, °ÅÀÇ °°Àº ¼Ó¼º°ú ºÎ¼Ó ¿ä¼Ò¸¦ Áö¿øÇÑ´Ù.

Parameters


APT ŽºÅ©ÀÇ ¼³¸í¿¡µµ ³ª¿Í ÀÖµíÀÌ Apt ŽºÅ©´Â JDK 6°¡ ³ª¿À±â Àü±îÁöÀÇ ÀӽùæÆíÀûÀÎ ¼º°ÝÀÌ Â£°Ô ±ò·Á ÀÖ´Ù(Áö¿øÇÏ´Â ÆÄ¶ó¹ÌÅ͵µ PAPA¿Í ºñ½ÁÇÏ´Ù). ÇÏÁö¸¸ ¾ÈŸ±õ°Ôµµ JDK 6°¡ ³ª¿Â ÇöÀç ½ÃÁ¡¿¡¼­ Apt¸¦ ´ëüÇÏ´Â Javac ŽºÅ©ÀÇ È®ÀåÀº ³ª¿ÀÁö ¾Ê°í ÀÖ´Ù.

¹°·Ð ÇÏÀ§ ȣȯ¼ºÀ» À§ÇØ JDK 6¿¡µµ APT´Â Áö¿øµÇ°í ÀÖÁö¸¸, ¾Æ¹«·¡µµ Ç¥ÁØÈ­µÈ PAPA·Î °¡´Â °ÍÀÌ ¿©·¯ Á¾·ùÀÇ JDK¸¦ °¡¸®Áö ¾ÊÀ»»Ó´õ·¯ ÇâÈÄ ÅõÀÚ¼ºµµ ÁÁÀ» °ÍÀÌ´Ù.

±×·¸´Ù¸é, PAPA ±â¹ÝÀ¸·Î ¸¸µç ÇÁ·Î¼¼¼­¸¦ ¾ØÆ®¿¡¼­ ¾î¶»°Ô ¾µ ¼ö ÀÖÀ»±î? ÇöÀç ¾ØÆ®(¹öÀü 1.7.0)ÀÇ Javac ŽºÅ©¿¡´Â ¾ÆÁ÷ PAPA¿Í °ü·ÃµÈ ÆÄ¶ó¹ÌÅÍ´Â ¾ø´Ù. ´Ù¸¸, compilerarg¶ó´Â ¿ä¼Ò¸¦ ½á¼­ Á÷Á¢ -processor³ª -processorpath¿Í °°Àº ¿É¼ÇÀ» ³ÖÀ» ¼ö ÀÖ´Ù.

 <¸®½ºÆ® 7> build.xml


ÀÌ ºôµå ÆÄÀÏÀº ¾Õ¼­ ¿¹Á¦¿Í´Â ´Ù¼Ò ´Ù¸¥ ¹æ½ÄÀ¸·Î ÇÁ·Î¼¼¼­¸¦ ¾²°í ÀÖ´Ù. ¸ÕÀú build-processor Ÿ±ê¿¡¼­´Â ÇÁ·Î¼¼¼­¸¦ ÄÄÆÄÀÏ ÇÏ¿© processor µð·ºÅ丮¿¡ º°µµ·Î µÐ´Ù. ±×´ÙÀ½ process-annotations¸¦ Çϸé ÇÁ·Î¼¼¼­°¡ ¾Æ´Ñ Ŭ·¡½º¿¡ ´ëÇØ ¾î³ëÅ×À̼ÇÀ» ó¸®Çϵµ·Ï Çß´Ù. ÀÌ ¶§ ÇÁ·Î¼¼¼­°¡ ÀÖ´Â °÷À» -processorpath·Î ÁöÁ¤Çϰí ÀÖ´Ù.

½ÇÇà °á°ú´Â ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏ ´ë»ó Ŭ·¡½º(Child, GrandChild µî)¿¡ ºÙÀº ¾î³ëÅ×À̼ÇÀÌ ¸ðµÎ Ãâ·ÂµÈ´Ù.

ias@openlab01:~/maso-2007-07-papa$ ant process-annotations
Buildfile: build.xml

init:

build-processors:

process-annotations:
[javac] Compiling 3 source files to /home/ias/maso-2007-07-papa/bin
[javac] Note: java.lang.Deprecated
[javac] Note: java.lang.SuppressWarnings
[javac] Note: java.lang.Override
[javac] Note: ias.Observation

BUILD SUCCESSFUL
Total time: 1 second

Metadata rules everywhere
PAPAÀÇ ÀÀ¿ë ¹üÀ§´Â ³î¶ó¿ï Á¤µµ·Î ³ÐÀ½À» ÁüÀÛÇÒ ¼ö ÀÖ´Ù. ¾î³ëÅ×À̼ÇÀÇ Ã³¸®´Â ´Ü¼øÈ÷ ¾î³ëÅ×À̼ÇÀÇ ÆÇµ¶»Ó ¾Æ´Ï¶ó, ±× ¾î³ëÅ×À̼ÇÀ» ¹ÙÅÁÀ¸·Î ¸ÞŸ Äڵ带 »ý¼ºÇÒ ¼öµµ Àֱ⠶§¹®ÀÌ´Ù.

¿¹¸¦ µé¾î ¾î¶² Ŭ·¡½º X¿¡ @Grand¶ó´Â ¾î³ëÅ×À̼ÇÀÌ ºÙÀ¸¸é ÀÚµ¿À¸·Î GrandX¶ó´Â Ŭ·¡½º¸¦ »ý¼ºÇÏ´Â ½ÄÀÌ´Ù. ¶ÇÇÑ ±×·¸°Ô »ý¼ºµÈ Ŭ·¡½ºµµ ´Ù½Ã ¾î³ëÅ×ÀÌ¼Ç Ã³¸®¸¦ ÇÒ ¼ö À־ ȸÂ÷(round)¶ó´Â °³³äÀÌ ÇÊ¿äÇÑ °ÍÀÌ´Ù.

´õºÒ¾î ÀÌ ±Û¿¡¼­´Â javac ¸í·ÉÀ» ¸í½ÃÀûÀ¸·Î »ç¿ëÇßÁö¸¸, JSR 199 Java Compiler API¸¦ »ç¿ëÇϸé(°í¸¿°Ôµµ ÀÌ ¶ÇÇÑ JDK 6¿¡ ±âº» Æ÷ÇԵǾî ÀÖ´Ù) ¾î³ëÅ×ÀÌ¼Ç Ã³¸®¸¦ Æ÷ÇÔÇÑ ÄÄÆÄÀÏ Ã³¸®¸¦ ÇÁ·Î±×·¥À¸·Î © ¼ö ÀÖ´Ù.

¾ÆÁ÷ ÀÚ¹Ù EE 5°¡ ÀÚ¹Ù SE 5±îÁö¸¸ ¿ä±¸Çϱ⠶§¹®¿¡ JSR 199 + JSR 269ÀÇ ¾Ó»óºíÀº ¾µ ¼ö ¾øÁö¸¸, Á¡Â÷ Java SE 6¸¦ ¸¹ÀÌ ¾²°Ô µÈ´Ù¸é ÀÚ¹ÙÀÇ ¸ÞŸ ÇÁ·Î±×·¡¹Ö¿¡ ±Ù°£ÀÌ µÉ ±â¼úµéÀ̶ó ¹Ï´Â´Ù. @

P.S. ¿¹Á¦¿Í °ü·ÃµÈ Áú¹®À̳ª ³íÀÇ´Â http://code.google.com/p/iasos/ ¿¡¼­ Groups³ª Issues·Î ´ëȯ¿µÇÑ´Ù. ^o^/

¾î³ëÅ×À̼ÇÀÇ Àû±ØÀûÀΠȰ¿ë ¿¹  


JSR 311 Java API for RESTful Web Services (JAX-RS)
Àڹ٠ǥÁØ ±â¼ú¿¡ ÀÖ¾î ¾î³ëÅ×À̼ÇÀÇ Ã¤ÅÃÀº µÎµå·¯Áø Çö»óÀÌ´Ù. ƯÈ÷ ÃÖ±Ù¿¡ Open APIÀÇ ¸Þ½ÃÁö ÇÁ·ÎÅäÄÝ·Î °¢±¤À» ¹Þ°í ÀÖ´Â REST¸¦ ÀÚ¹Ù ¼­¹ö Ãø¿¡¼­ Áö¿øÇϱâ À§ÇÑ Ç¥ÁØ APIÀÎ JSR 311 JAX-RS´Â À¥ ¼­ºñ½º¿Í EJB°¡ º¸¿©ÁØ POJO(Plain Old Java Object) ±â¹Ý ÀÎÅÍÆäÀ̽º ³ëÃâ ±â¼úÀ» ´õ¿í ÁøÈ­½ÃŲ ¸ð½ÀÀÌ´Ù.

¾ÆÁ÷ °ø½ÄÀûÀÎ Á¶±â ÃʾÈ(Early Draft)Á¶Â÷ ³»Áö ¾ÊÀº »óȲÀÌÁö¸¸, API¿Í RI(Reference Implementation) µÑ ´Ù ¿ÀÇ ¼Ò½º ÇÁ·ÎÁ§Æ®·Î °ø°³Çϰí ÀÖ¾î ½Ç½Ã°£À¸·Î ÁøÇà»óȲÀ» ¿³º¼ ¼ö ÀÖ´Ù.

JSR 311 API ÇÁ·ÎÁ§Æ® - https://jsr311.dev.java.net/
(JSR 311 RI) Jersey ÇÁ·ÎÁ§Æ® - https://jersey.dev.java.net/

µÎ ÇÁ·ÎÁ§Æ® ´Ù ¸ÅÁÖ ¹­Àº ¸±¸®Áî¿Í ´õºÒ¾î SVNÀ» ÅëÇØ ÃֽŠ¼Ò½º¸¦ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ±×·³, 2007³â 6¿ù¸» ÇöÀç·Î JAX-RS°¡ ¾î¶»°Ô ¾î³ëÅ×À̼ÇÀ» Ȱ¿ëÇϰí ÀÖ´ÂÁö È®ÀÎÇØ º¸ÀÚ.

package com.sun.ws.rest.samples.helloworld.resources;
import javax.ws.rs.HttpMethod;
import javax.ws.rs.ProduceMime;
import javax.ws.rs.UriTemplate;

// The Java class will be hosted at the URI path "/helloworld"
@UriTemplate("/helloworld")
public class HelloWorldResource {

// The Java method will process HTTP GET requests
@HttpMethod("GET")
// The Java method will produce content identified by the MIME Media
// type "text/plain"
@ProduceMime("text/plain")
public String getClichedMessage() {
// Return some cliched textual content
return "Hello World";
}
}

ÀÌ ÄÚµå´Â Jersey¿¡ Æ÷ÇԵǾî ÀÖ´Â HelloWorld °ÝÀÇ ¿¹Á¦´Ù. ¾î³ëÅ×À̼ÇÀÌ »ó´çÈ÷ ¸¹ÀÌ ºÙ¾îÀִµ¥, ±×°Í¸¸ »©¸é ÀÏ¹Ý Àڹ٠Ŭ·¡½º¿Í ´Ù¸¦ °ÍÀÌ ¾ø´Ù.

Áï, ¾î¶² ƯÁ¤ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ´Ù´ø°¡ ½Ã±×´ÏÃĸ¦ °íÁ¤ÇÏ´Â ÀÏ ¾øÀÌ, Àڱ⠸¶À½´ë·Î Ŭ·¡½º¸¦ Â¥°í °Å±â¿¡ ÇÊ¿äÇÑ ¾î³ëÅ×À̼ÇÀ» ºÙÀÌ´Â ¹æ½ÄÀ¸·Î §´Ù´Â °ÍÀÌ´Ù.

À§ÀÇ ¾î³ëÅ×À̼ǵéÀ» º¸¸é ´ÙÀ½°ú °°ÀÌ ¸Å¿ì Á÷°üÀûÀ¸·Î ¸ÞŸµ¥ÀÌÅ͸¦ ¹¦»çÇϰí ÀÖ´Ù.

@UriTemplate("/helloworld") -> HelloWorldResourceÀÇ REST ¸®¼Ò½º ÁÖ¼Ò¸¦ ÁöÁ¤
@HttpMethod("GET") -> getClichedMessage ¸Þ¼Òµå¸¦ ºÎ¸¦ ¶§ ¾µ HTTP ¸Þ¼Òµå
@ProduceMime("text/plain") -> getClichedMessageÀÇ ¹Ýȯ°ªÀÌ HTTP ÀÀ´äÀÇ ¾î¶² MIME ŸÀÔÀ¸·Î ³ª°¥Áö¸¦ ÁöÁ¤

Á» ´õ º»°ÝÀûÀÎ ¿¹Á¦ÀÎ Bookstore¸¦ º¸¸é JAX-RSÀÇ ¾î³ëÅ×À̼ÇÀÌ ¾ó¸¶³ª À¯¿ëÇÑÁö¸¦ ¾Ë ¼ö ÀÖ´Ù.

package com.sun.ws.rest.samples.bookstore.resources;
public class Item {
private String title;
private String author;
public Item(final String title, final String author) {
this.title = title;
this.author = author;
}
public String getTitle() {
return title;
}
public String getAuthor() {
return author;
}
}
package com.sun.ws.rest.samples.bookstore.resources;
import com.sun.ws.rest.api.NotFoundException;
import com.sun.ws.rest.api.view.Views;
import javax.ws.rs.UriParam;
import javax.ws.rs.UriTemplate;
@Views({"index.jsp"})
public class CD extends Item {
private final Track[] tracks;
public CD(final String title, final String author, final Track[] tracks) {
super(title, author);
this.tracks = tracks;
}
public Track[] getTracks() {
return tracks;
}
@UriTemplate("tracks/{num}/")
public Track getTrack(@UriParam("num") int num) {
if (num >= tracks.length)
throw new NotFoundException("Track, " + num + ", of CD, " + getTitle() + ", is not found");
return tracks[num];
}
}
package com.sun.ws.rest.samples.bookstore.resources;
import com.sun.ws.rest.api.view.Views;
@Views({"index.jsp"})
public class Book extends Item {
public Book(final String title, final String author) {
super(title, author);
}
}

¸Ç À§ÀÇ ItemÀº ÀÏÁ¾ÀÇ ÃÖ»óÀ§ Ŭ·¡½ºÀ̰í, CD¿Í BookÀÌ °¢°¢ »ó¼ÓÇÏ¿© ÀÚüÀûÀÎ REST ¸®¼Ò½º·Î µå·¯³­´Ù. ¿©±â¼­ ÁÖ¸ñÇÒ Á¡Àº, ¾î¶² ÀÚ¹Ù ¿ÀºêÁ§Æ®¸¦ REST ¸®¼Ò½º·Î µå·¯³»´Â µ¥¿¡ ±âÁ¸ÀÇ »ó¼Ó ±¸Á¶¸¦ Èçµé Çʿ䰡 ¾ø´Ù´Â °ÍÀÌ´Ù.

Àü¿¡´Â »ó¼ÓÀ̳ª ±¸ÇöÀ¸·Î(¹Û¿¡) Ç¥ÇöÇÒ ¼ö ¾ø¾ú´ø ÀÌ·± ±â´ÉÀûÀÎ ¸ÞŸµ¥ÀÌÅͰ¡ ¾î³ëÅ×À̼ÇÀ¸·Î Ç¥½ÃµÇ¸é¼­ ¿ì¸®´Â Á» ´õ ÀÚÀ¯·Ó°Ô µ¥ÀÌÅ͸¦ ¸ðµ¨¸µÇϸ鼭µµ ÀÎÅÍÆäÀ̽ºÀÇ ¼ö´ÜÀ¸·Î »ïÀ» ¼ö ÀÖ°Ô µÇ¾ú´Ù.



Âü°íÀÚ·á
1. ÀÚ¹Ù °ü·Ã ¸±¸®Áî Á¤º¸: http://mindprod.com/jgloss/javareleasedates.html
2. APT °ø½Ä »çÀÌÆ®: http://java.sun.com/j2se/1.5.0/docs/guide/apt/index.html
3. JSR 269 ½ºÆå ¸®µåÀÇ ºí·Î±×: http://blogs.sun.com/darcy
4. ƯÁ¤ ¾î³ëÅ×ÀÌ¼Ç Ã³¸® ¿¹Á¦: http://www.artima.com/forums/flat.jsp?forum=276&thread=179769
5. Àڹ٠Ŭ·¡½º ±¸Á¶¸¦ ºÐ¼®ÇÏ´Â ¿¹Á¦: http://blogs.sun.com/prats/entry/javac_demo%40foss-2006c


* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.
°ü·Ã±â»ç
[ÇÁ·¹ÀÓ¿öÅ© Àü·« ¨è] ÇÁ·¹ÀÓ¿öÅ© À̸ÓÀü½ºÀÇ ¹ÌÇÐ
ÀÚ¹Ù°³¹ßÀÚ Æä½ºÆ¼¹ú - The Power Of The Java¡¸2006 ÀÚ¹Ù¿ø ÄÁÆÛ·±½º¡¹
POJO·Î µ¹¾Æ¿Â¡¸EJB 3.0°ú ÀÚ¹Ù ÆÛ½Ã½ºÅϽº API¡¹
À¥ 2.0 ½Ã´ë¸¦ ¼±µµÇÒ¡¸ÀÚ¹Ù À¥ ¼­ºñ½º 2.0¡¹
ÇÁ·¹ÀÓ¿öÅ© Ȱ¿ëÀü·«
°´Ã¼ÁöÇâÀ» ³Ñ¾î °üÁ¡ÁöÇâÀ¸·Î AOP
[ÀÚ¹Ù SOA °³¹ß, ¥Á¿Í ¥Ø] ¨ê ¾À Ŭ¶óÀÌ¾ðÆ®¿Í J2ME Ŭ¶óÀÌ¾ðÆ® ±¸Ãà
[ÀÚ¹Ù SOA °³¹ß, ¥Á¿Í ¥Ø] ¨é EJB¿Í ¸®Ä¡ Ŭ¶óÀÌ¾ðÆ® ±¸Ãà
[ÀÚ¹Ù SOA °³¹ß, ¥Á¿Í ¥Ø] ¨è SOA ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß ¹æÇâ
µ¶ÀÚÀÇ°ß ³²±â±â (·Î±×ÀÎ ÈÄ µ¶ÀÚ ÀǰßÀ» ³²±â½Ç ¼ö ÀÖ½À´Ï´Ù.)
¾ÆÀ̵ð ºñ¹Ð¹øÈ£
 
 
?>
[Ã¥¼Ò°³]ÇÁ¸®Á¨Å×ÀÌ¼Ç Á¨: »ý°¢À»...
[DDD ¨ç] µµ¸ÞÀÎ ÁÖµµ °³¹ß
À©µµ¿ìCE µð¹ö±ë¿¡ °üÇÑ 12°¡Áö...
°¡»óÈ­¿¡ ½ÇÆÐÇÏ´Â 10°¡Áö ÀÌÀ¯
'°¡»óÈ­ °ü¸®'¿¡ ´ëÇÑ 10°¡Áö ...
[±â°í]±×¸° ½ºÅ丮Áö·Î °¡´Â±æ
[Ã¥¼Ò°³] CentOS ¸®´ª½º ±¸...
ÄÚ´Ú ÄÞÆÑÆ® µðÄ«,'ÅÍÄ¡¼¾¼­'·Î ¹Ù²Ù´Ï¡¦À¯Àúµé "Àú¿ä! Àú¿ä!" [00:04:05]
ÁøÇà ·ùÁØ¿µ ±âÀÚ, Á¦ÀÛ À¯È¸Çö PD
[Weekend TV]'½ºÅ¸Å©·¡ÇÁÆ®' ¼º´ë¸ð»çÀÇ ´ÞÀÎ [00:01:20]
ÁøÇà ·ùÁØ¿µ ±âÀÚ, Á¦ÀÛ À¯È¸Çö PD
º¸¾È°­È­ ±¸±Û ¡°À©µµ ¹ö¸®°í À¥À¸...
¡®À©µµXP¡¯½Ã´ë Æó¸·, »ç¿ëÀÚ¿¡°Ô...
¡®³ªÈ¦·Î ¾×ƼºêX¡¯¡¦¼¼°è ÀÎÅͳݰú...
ÀÎÅÍ³Ý ¹ðÅ· ºê¶ó¿ìÀú´Â µû·Î ÀÖ´Ù...
SKT µ¶Á¡ 800MHz Á֯ļö,...
ÃÖÈÖ¿µ NHN ´ëÇ¥ ¡°°Ë»ö¾î ¼øÀ§...
KTF, ¼¶¸¶À» ¼øÈ¸ 'SHOW³ª...
LGÆÄ¿öÄÞ, ¿ì¼öÇõ½Å»ç·Ê °æÁø´ëȸ...
°øÁ¤À§ "Çϳª·ÎÅÚ, °³ÀÎÁ¤º¸ µµ¿ë...
Çϳª·ÎÅÚ·¹ÄÞ, ÇϳªÆ÷½º ǰÁúÆò°¡´Ü...
ÁøÈ­ÇÏ´Â ÀüÀÚÁöµµ¡¦Æ¯Çã Ãâ¿ø ´Ù¾ç...
 
 
The Korean edition of 'ZDNet' is published under license from CNET Networks, Inc., San Francisco, CA, USA. Editorial items appearing in 'ZDNet Korea' that were originally published in the US Edition of 'ZDNet', 'CNET', and 'CNET News.com' are the copyright properties of CNET Networks, Inc. or its suppliers.
Copyright ¨Ï 2008 CNET Networks, Inc. All Rights Reserved. 'ZDNet', 'CNET' and 'CNET News.com' are trademarks of CNET Networks, Inc.