±ÇÁ¤Çõ
±¸·ç
¿ø¾îµ¥ÀÌ

OSGi ½ÃÀÛÇϱâ 7 - ¼±¾ðÀû ¼­ºñ½º ¼Ò°³Çϱâ : [¹ø¿ª] Introducing Declarative Services

Friday, 09 May 2008

ÀÌ ±ÛÀº Neil Bartlett ÀÇ ¿¬Àç ±Û "Getting started with OSGi"ÀÇ ¹ø¿ªº»ÀÔ´Ï´Ù.
* ÆÄÆ® 1 - ù¹øÂ° ¹øµé : Your First Bundle
* ÆÄÆ® 2 - ÇÁ·¹ÀÓ¿öÅ©¿Í ¿¬µ¿Çϱâ : Interacting with the Framework
* ÆÄÆ® 3 - ¹øµé°£ÀÇ ÀÇÁ¸°ü°è : Dependencies between bundles
* ÆÄÆ® 4 - ¼­ºñ½º µî·ÏÇϱâ : Registering a Service
* ÆÄÆ® 5 - ¼­ºñ½º »ç¿ëÇϱâ : Consuming a Service
* ÆÄÆ® 6 - µ¿ÀûÀ¸·Î ¼­ºñ½º ÃßÀûÇϱâ : Dynamic Service Tracking
¿¡ À̾î 7¹øÂ° ±ÛÀÔ´Ï´Ù. ¿ÀÅ»ÀÚ ¹× ÀÌ»óÇÑ ¹ø¿ªÀº ´ñ±Û·Î ³²°ÜÁÖ¼¼¿ä


Getting started with OSGi : OSGi ½ÃÀÛÇÏ±â ÆÄÆ® 7 - ¼±¾ðÀû ¼­ºñ½º ¼Ò°³Çϱâ

ÀúÀÚ : Neil Bartlett < njbartlett at gmail dot com >
¿ªÀÚ : ±Ç Á¤Çõ < guruguru at gmail dot com >

±Û¿øº» : http://www.eclipsezone.com/eclipse/forums/t96740.html - Getting started with OSGi : Introducing Declarative Services


¸Å¿ì ´Ê¾îÁ® ¹ö¸° "Getting Started with OSGi" ½Ã¸®Áî¿¡ ¿À½Å°É ȯ¿µÇÕ´Ï´Ù. À̹ø ȸ´Â ¼±¾ðÀû ¼­ºñ½º¿¡ ´ëÇØ ¾Ë¾Æº¼°ÍÀ̹ǷΠ¸Å¿ì Àç¹ÌÀÖÀ» °ÍÀÔ´Ï´Ù.

¼±¾ðÀû ¼­ºñ½º(Declarative Services , DS) ½ºÆåÀº OSGi ÀÇ »õ·Î¿î ºÎºÐÁßÀÇ Çϳª·Î¼­, ¹øµé°£ÀÇ ¼­ºñ½º¸¦ ¿¬°áÇÒ¶§ »ý±â´Â À̽´µéÀÇ °á°ú·Î »ý°Ü³µ½À´Ï´Ù. ÀÌ ÀÛ¾÷ÀÌ ¾î·Æ´Ù´Â °ÍÀÌ ¾Æ´Ï¶ó ( Á¦ ¿¹Àü Æ©Å丮¾óµéÀÌ º¸¿©ÁÖ¾úÀ»²¨¶ó°í Èñ¸ÁÇÕ´Ï´Ù. ) ²Ï ¸¹Àº ¾çÀÇ ¹Ýº¹ÀûÀÎ ÄÚµå(boilerplate)¸¦ ÇÊ¿ä·Î Çϱ⠶§¹®ÀÔ´Ï´Ù. ¶ÇÇÑ, ¾²·¹µå ¹®Á¦¶§¹®¿¡ Á¶½ÉÇØ¾ß Çϸç ÀÌ´Â ½±°Ô ´ç½ÅÀÇ ¹ß¿¡ ÃÑÀ» ½ò¼ö ÀÖ°Ô µÈ´Ù´Â °ÍÀÔ´Ï´Ù. (shoot yourself in the foot, ¿ªÁÖ: ½±°Ô ½Ç¼öÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ¸·Î, ±×³É ¿ø¹®´ë·Î ¹ø¿ªÇß½À´Ï´Ù. http://burks.bton.ac.uk/burks/language/shoot.htm Âü°íÇϼ¼¿ä)

ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇÑ Ãʱ⠽õµ´Â Humberto Cervantes ¿Í Richard Hall ÀÌ ¸¸µç ÅøÀÎ Service Binder ¿´½À´Ï´Ù. Service Binder ´Â automated service dependency management(ÀÚµ¿ ¼­ºñ½º ÀÇÁ¸°ü°è °ü¸®) ¸¦ ¼Ò°³ÇÏ¿© °³¹ßÀÚ¿¡°Ô ÀڽŵéÀÇ ¼­ºñ½º¸¸À» ÀÛ¼ºÇϴµ¥ ÁýÁßÇϵµ·Ï Çß½À´Ï´Ù. ¼­ºñ½º°£ÀÇ ¿¬°áÀº ¼±¾ðÀûÀ¸·Î 󸮵Ǿú°í, ÀÌ ¼±¾ðµéÀº XML ·Î ÀÛ¼ºµÇ¾ú½À´Ï´Ù.

¼±¾ðÀû ¼­ºñ½ºÀÇ ½ºÆåÀº Service Binder ¿¡¼­ ¹ßÀüµÈ°ÍÀ¸·Î ÀÌÁ¦´Â OSGi ¹öÀü 4.0 À̻󿡼± Ç¥ÁØÀÌ µÇ¾ú½À´Ï´Ù. ±×·³, ÀÌÁ¦ À̰ÍÀÌ ¿ì¸®¿¡°Ô ¹«¾ùÀ» ÇØÁÙ¼ö ÀÖ´ÂÁö º¸ÁÒ.

Áö³­È¸¿¡¼­ ¸»¾¸µå·ÈµíÀÌ, ÀÌÁ¦ Ä¿¸Çµå ¶óÀο¡¼­ ¸ðµç°ÍÀ» ÇÏ´Â °ÍÀÌ Èûµé¾îÁ³À¸¹Ç·Î Áö±ÝºÎÅÍ´Â Eclipse SDK ¸¦ »ç¿ëÇϵµ·Ï ÇϰڽÀ´Ï´Ù. ±×·¸Áö¸¸ Á¦°¡ ¼Ò°³ÇÏ´Â °ÍµéÀÌ Á¤¸» Eclipse ¿¡ Á¾¼ÓÀûÀÌÁö´Â ¾Ê´Ù´Â°ÍÀ» ±â¾ïÇØÁÖ¼¼¿ä. ºñ·Ï Eclipse °¡ ¿ì¸®°¡ ÇÏ·Á´Â °ÍµéÀ» ¸¹ÀÌ µµ¿ÍÁÖ±â´Â ÇÏÁö¸¸, ¾î¶² Èæ¸¶¹ýµµ ¾øÀ¸¸ç, ¿©±â¼­ º¸½Ã´Â ¾î¶² °Íµµ NetBeans ³ª IntelliJ ¶Ç´Â ¿À·¡µÈ vi ¶óµµ °¡´ÉÇÕ´Ï´Ù.

ù¹øÂ°·Î ÇÒÀÏÀº ¼±¾ðÀû ¼­ºñ½º¿¡ ´ëÇÑ Equinox ±¸ÇöÀ» ´Ù¿î·Îµå Çϴ°ÍÀÔ´Ï´Ù. ¾ÈÁ¤ÀûÀÎ Eclipse ¹öÀüÀ» »ç¿ëÇϰí ÀÖÀ¸½Ã´Ù´Â °¡Á¤ÇÏ¿¡ ( ÀÌ±Û ¾²´Â ½ÃÁ¡¿¡¼­´Â 3.2.2 ), ´Ù¿î¹Þ±â ¸µÅ©´Â ¿©±â ÀÔ´Ï´Ù. ´Ù¸¥ ¹öÀüÀ» »ç¿ëÇÏ°í °è½Ã´Ù¸é, ¿©±â Equinox ÀÇ »óÀ§·¹º§ ´Ù¿î·Îµå ÆäÀÌÁö ¿¡¼­ ¸Â´Â ¹öÀüÀÇ org.eclipse.equinox.ds_x.x.x_xxxxx.jar ÆÄÀÏÀ» ãÀ¸¼Å¾ß ÇÕ´Ï´Ù. ´Ù¿î·Îµå°¡ ³¡³ª¸é, Eclipse°¡ ¼³Ä¡µÈ µð·ºÅ丮 ÇϺÎÀÇ plugins µð·ºÅ丮¿¡ º¹»çÇϰí Eclipse ¸¦ Àç½ÃÀÛ Çϼ¼¿ä. ¸¸¾à¿¡ ¿©·¯ºÐÀÌ Eclipse plug-ing °³¹ß¿¡ ¾à°£ ¾Ë°í °è½Å´Ù¸é, ÀÌ Jar ÆÄÀÏÀ» Target Platform Æú´õ¿¡ ³ÖÀ¸¼Å¾ß ÇÕ´Ï´Ù. "Target Platform"ÀÌ ¹ºÁö ¸ð¸£½Å´Ù¸é, ¾Æ¹« °ÆÁ¤¸¶½Ã°í ±×³É plugins Æú´õ¿¡ JAR ÆÄÀÏÀ» ³Ö¾îÁÖ¼¼¿ä.

ÀÚ ÀÌÁ¦ »õ·Î¿î ¹øµéÀ» ¸¸µé °ÍÀÔ´Ï´Ù. Eclipse ¿¡¼­ Plug-in ÇÁ·ÎÁ§Æ® À§Àڵ带 ÀÌ¿ëÇØ¼­ »õ·Î¿î ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇÕ´Ï´Ù.

  1. ¸ÞÀÎ ¸Þ´º¿¡¼­ File -> New -> Project ¸¦ ¼±ÅÃÇÕ´Ï´Ù.
  2. Plug-in ÇÁ·ÎÁ§Æ®¸¦ ¼±ÅÃÇϰí Next¸¦ ´©¸¨´Ï´Ù.
  3. ÇÁ·ÎÁ§Æ®ÀÇ À̸§À» SampleExporter ¶ó°í ÀÔ·ÂÇÕ´Ï´Ù.
  4. ¾Æ·¡ÂÊ "This plug-in is targeted to run with" Ç׸ñ ¹Ø¿¡, "an OSGi framework" ¸¦ ¼±ÅÃÇÏ°í ±× ¿· µå·Ó´Ù¿î¸®½ºÆ®¿¡¼­ "standard" ¸¦ ¼±ÅÃÇϼ¼¿ä. ÀÌ ´Ü°è´Â ²À ÇÊ¿äÇÑ>°ÍÀº ¾Æ´ÏÁö¸¸, ¿ì¸®°¡ ½Ç¼ö·Î¶óµµ ´Ù¸¥ OSGi ÇÁ·¹ÀÓ¿öÅ© ±¸ÇöµéÀÌ ±âº»À¸·Î °¡Áö°í ÀÖÀº ±â´É(Out-of-the-box)¿ÜÀÇ °ÍµéÀ» »ç¿ëÇÏÁö ¸øÇϵµ·Ï ¸·¾ÆÁÝ´Ï´Ù.
  5. Next ¸¦ ´©¸¨´Ï´Ù. ´ÙÀ½¿¡ ³ª¿À´Â Wizard ÆäÀÌÁö¿¡¼­, "Generate an activator..." ÀÇ Ã¼Å©¹Ú½º¸¦ ÇØÁ¦Çϰí, Finish ¸¦ ´©¸¨´Ï´Ù.

ÀÌÁ¦ ¿ì¸° ºó ¹øµé ÇÁ·ÎÁ§Æ®¸¦ Çϳª °¡Áö°Ô µÇ¾úÀ¸¹Ç·Î, Äڵ带 Ãß°¡ÇØ º¾´Ï´Ù. ÀÏÀ» ½±°Ô ÇϱâÀ§ÇØ , ¸ðµç ÀÚ¹Ù ·±Å¸ÀÓ¿¡ µé¾îÀÖ´Â ÀÎÅÍÆäÀ̽ºÀÎ java.lang.Runnable À» ÀÌ¿ëÇÏ´Â ¼­ºñ½º¸¦ ¸¸µé¾î º¾´Ï´Ù. ÀÌŬ¸³½º ´ÜÃà۸¦ ÀÌ¿ëÇØ¼­, ¾Æ·¡Äڵ带 ºê¶ó¿ìÀú¿¡¼­ Á÷Á¢ º¹»çÇÑÈÄ¿¡ SampleExporter ÇÁ·ÎÁ§Æ®¿¡ ÀÖ´Â src Æú´õ¸¦ ¼±ÅÃÇϰí, Edit->Paste ¸¦ ¼±ÅÃÇØº¸¼¼¿ä. Eclipse °¡ ÆÐŰÁö¿Í ¼Ò½ºÆÄÀÏÀ» ¸¸µé¾î ÁÙ°ÍÀÔ´Ï´Ù.

package org.example.ds;
 
public class SampleRunnable implements Runnable {
 
	public void run() {

		System.out.println("Hello from SampleRunnable");
	}
 
}

Áö±Ý±îÁö´Â Ưº°ÇÑ°Ô ¾ø½À´Ï´Ù¸¸, ÀÌÁ¦ Àç¹ÌÀÖ¾îÁö´Â ºÎºÐÀÌ ³ª¿É´Ï´Ù. ¿ì¸° SampleRunnable À» ¼­ºñ½º·Î ¼±¾ðÇÏ´Â XML ÆÄÀÏÀ» »ý¼ºÇÒ °ÍÀÔ´Ï´Ù. ÇÁ·ÎÁ§Æ® ÃÖ»ó´Ü¿¡ OSGI-INF ¶ó´Â Æú´õ¸¦ ¸¸µé°í ±× ¾È¿¡ samplerunnable.xml ÆÄÀÏ¿¡ ¾Æ·¡ ³»¿ëÀ» º¹»çÇϼ¼¿ä.

"1.0"?>
"samplerunnable">
	"org.example.ds.SampleRunnable"/>
	
		"java.lang.Runnable"/>

	


À̰ÍÀº ¿ì¸®°¡ DS ¿¡¼­ º¸°ÔµÉ °£´ÜÇÑ ¼±¾ð Çü½ÄÁß ÇϳªÀÔ´Ï´Ù. ³»¿ëÀÎ Áï½¼, java.lang.Runnable ÀÇ ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ¿© OSGI Service Registry¿¡°Ô ¼­ºñ½º¸¦ Á¦°øÇÏ´Â samplerunnable À̶ó´Â ÄÄÆ÷³ÍÆ®°¡ ÀÖ°í, ÄÄÆ÷³ÍÆ®ÀÇ ±¸Çö Ŭ·¡½º´Â org.example.ds.SampleRunnable À̶ó´Â °ÍÀÔ´Ï´Ù.

¸¶Áö¸· ´Ü°è´Â Declaratie Services ·±Å¸ÀÓ¿¡°Ô XML ÆÄÀÏÀÇ Á¸À縦 ¾Ë¸®´Â °ÍÀÔ´Ï´Ù. ¿ì¸° À̰ÍÀ» ¹øµéÀÇ MANIFEST.MF ¿¡ Çʵ带 Ãß°¡ÇÔÀ¸·Î½á °¡´ÉÇÕ´Ï´Ù. Manifest¸¦ ¿­°í(ÇÁ·ÎÁ§Æ®¿¡¼­ ¿ìÃø¹öư Ŭ¸¯ÈÄ PDE Tools -> Open Manifest¸¦ ÀÌ¿ëÇØº¸¼¼¿ä), Á÷Á¢ manifest ÆíÁýÀÌ °¡´ÉÇÑ MANIFEST.MF ÅÇÀ¸·Î °¡¼­ ¾Æ·¡ ¶óÀÎÀ» Ãß°¡ÇÕ´Ï´Ù.

Service-Component: OSGI-INF/samplerunnable.xml

±×¸®°í´Â ÆÄÀÏÀ» ÀúÀåÇÕ´Ï´Ù. ÀÌÀüȸ¿¡¼­Ã³·³, manifest ÀÇ ¸Ç ¸¶Áö¸· ºóÁÙÀ» ¸Å¿ì Áß¿äÇÕ´Ï´Ù. ÇÏÁö¸¸ ÀÌÀü°ú´Â ´Ù¸£°Ô ¸¸¾à ´ç½ÅÀÌ Àش´ÙÇØµµ Eclipse °¡ ¿¡·¯¸Þ½ÃÁö¸¦ Ãâ·ÂÇÒ °ÍÀÔ´Ï´Ù.

´õ ÁøÇàÇϱâ Àü¿¡, Equinox ¸¦ ½ÇÇàÇØ¼­ À̰ÍÀÌ µ¿ÀÛÇÏ´ÂÁö º¾½Ã´Ù. Run ¸Þ´º·Î °¡¼­ "Run..." ¸Þ´º¸¦ ¼±ÅÃÇØ¼­ ´ÙÀ̾ó·Î±×°¡ ¿­¸®¸é "Equinox OSGi Framework" ¸¦ ¿ÞÂÊ Æ®¸®¿¡¼­ ¼±ÅÃÇϰí New ¹öưÀ» ´©¸¨´Ï´Ù. ¸¸¾à ¿©·¯ºÐÀÌ Eclipse ¿¡´Â °æÇèÀÌ ÀÖÁö¸¸, OSGi °³¹ßÀº ¾ÈÇØº¸¼Ì´Ù¸é, ÀÌ ·±ÃÄ ´ÙÀ̾ó·Î±×´Â ¾à°£ ÀÌ»óÇØ º¸ÀϰÍÀÔ´Ï´Ù. Bundles ¶ó°í À̸§ºÙ¿©Áø ù¹øÂ° ÅÇÀº Launch ¼³Á¤¿¡¼­ ¾î¶² ¹øµéÀÌ ¼±ÅÃµÉ Áö, ÃʱâÈ­½Ã¿¡ ÀÚµ¿À¸·Î ½ÃÀÛÇÒÁö,¾Æ´ÏÁö¸¦ °áÁ¤ÇÒ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù. ÃÖ¼ÒÀÇ ¼¼Æ®¸¦ °¡Áö·Á¸é, Deselect All À» ´©¸£°í, ¾Æ·¡ ¹øµéµé¸¸À» ¼±ÅÃÇÕ´Ï´Ù.

  • SampleExporter (Workspace Ç׸ñ ÇϺο¡)
  • org.eclipse.equinox.ds (Target Platform Ç׸ñ ÇϺο¡)


ÀÌ ¹øµéµéÀÌ ¿ì¸®°¡ °ü½ÉÀ» °¡Áö°í Àִ°ÍÀÌÁö¸¸, À̵éÀº ÀÇÁ¸°ü°è¸¦ °¡Áö°í ÀÖÀ¸¹Ç·Î, Add Required Bundles ¸¦ ´­·¯¼­ ´Ù¸¥ ¹øµéµéÀ» ¼±ÅÃµÇ°Ô ÇÕ´Ï´Ù. "Validate bundles automatically prior to launching"(½ÇÇà½Ã ÀÚµ¿À¸·Î ¹øµé °ËÁõ) À» ¼±ÅÃÇϴ°͵µ ÁÁÀº »ý°¢ÀÔ´Ï´Ù. ¸¶Áö¸·À¸·Î Run À» ¼±ÅÃÇÏ¸é ¹Ù·Î osgi> ÇÁ·ÒÇÁÆ®°¡ Eclipse Äֿܼ¡ Ç¥½ÃµÉ°ÍÀÔ´Ï´Ù. OSGi ÇÁ·¹ÀÓ¿öÅ©°¡ ½ÇÇàÁßÀ̹ǷÎ, ÀÌÀü¿¡ ¹è¿ü´ø Ä¿¸ÇµåµéÀ» »ç¿ëÇØ º¼¼ö ÀÖ½À´Ï´Ù.

¿ì¸® ¼­ºñ½º°¡ µî·ÏµÇ¾ú³ª¿ä ? services ¸í·ÉÀ¸·Î È®ÀÎÇØ º¼¼ö ÀÖ½À´Ï´Ù. ¼­ºñ½º ¸®½ºÆ®Áß¿¡-¾Æ¸¶µµ ¸¶Áö¸·Âë¿¡-¾Æ·¡¿Í °°Àº°ÍÀ» º¸½Ç¼ö ÀÖ½À´Ï´Ù.

{java.lang.Runnable}={component.name=samplerunnable, component.id=1, service.id=22}
  Registered by bundle: initial@reference:file:..../SampleExporter/ [5]
  No bundles using service.

³× µî·ÏµÇ¾ú½À´Ï´Ù! ÁÖ¸ñÇÒ°Ç ¼­ºñ½º µî·ÏÀÌ Declarative Services ¹øµé¿¡ ÀÇÇØ¼­°¡ ¾Æ´Ï¶ó ¿ì¸® ¹øµé¿¡ ÀÇÇØ ÀÌ·ç¾î Á³´Ù´Â °ÍÀÔ´Ï´Ù. ½ÇÁ¦·Î DS °¡ ¿ì¸® ¹øµéÀ» ´ë½ÅÇÏ¿© µî·ÏÇØÁذÍÀÔ´Ï´Ù. µÚ¿¡ ¾î¶»°Ô ±×·¸°Ô ÇÏ´ÂÁö¸¦ »ìÆìº¼ °ÍÀÌÁö¸¸, ÀÌ ·¹½¼ÀÇ ¸ñÀûÀº ¿ì¸® ¼­ºñ½ºÀÇ »ç¿ëÀÚ°¡ ¾î¶² Ưº°ÇÑ ÀÏÀ» ÇÒ Çʿ䰡 ¾ø´Ù´Â°ÍÀÔ´Ï´Ù. ½ÇÁ¦·Ð »ç¿ëÀÚ´Â ¿ì¸®°¡ Declarative Services ¸¦ »ç¿ëÇϰí Àִٴ°ÍÀ» ¾Ë Çʿ䵵 ¾ø½À´Ï´Ù. »ç¿ëÀÚ ¶ÇÇÑ ¿øÇÑ´Ù¸é Declarative Services ¸¦ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ¶ÇÇÑ ±×³É OSGi Äڵ带 Á÷Á¢ ÀÌ¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

¶Ç Çϳª ÁÖ¸ñÇÒ°ÍÀº, ¿ì¸®ÀÇ ¹øµé¿¡´Â ¾î¶² OSGi °ü·Ã ÀÚ¹Ù Äڵ嵵 ¾ø´Ù´Â °ÍÀÔ´Ï´Ù. ´Ù¸¥¸»·Î, ¿ì¸®°¡ »ý¼ºÇÑ Å¬·¡½º´Â POJO À̰í, À̰ÍÀÌ Declarative Services ÀÇ ÁÖ¿ä ±â´ÉÀÔ´Ï´Ù.

À̹øÈ¸´Â ¿©±â±îÁöÀÔ´Ï´Ù. À̹ø ·¹½¼ÀÌ ³Ê¹« ±âÃÊÀûÀΰÍÀ̶ó ¹Ì¾ÈÇÕ´Ï´Ù. ´ÙÀ½È¸¿¡¼­´Â DS ¸¦ ÀÌ¿ëÇÏ¿© ¾î¶»°Ô ¼­ºñ½º¸¦ »ç¿ëÇÏ´ÂÁö ¾Ë¾Æº½À¸·Î½á DS°¡ Á¦°øÇÏ´Â ÆÄ¿ö¿Í Æí¸®ÇÔÀ» ¾Ë¼ö ÀÖÀ»°ÍÀÔ´Ï´Ù.


[ del.icio.us this | ±¸±Û ºÏ¸¶Å© | ´ÙÀ½ ºÏ¸¶Å© | ¸¶°¡¸° | Bookmakr | ÇÑRSS ºÏ¸¶Å© | Social bookmark This ] | [ Translate to english ]
  °ü·Ã ±Û  

2 Comments
  1. Àß ÀÐ°í °©´Ï´Ù. Çѱ۷δٽà ÀÐÀ¸´Ï Á¤¸®°¡ ½Ï µÇ´Â±º¿ä ¤¾
    commented by Jo Korea (South) [2008/06/30 17:31]
  2.   µµ¿òÀÌ µÇ¼Ì´Ù´Ï ´ÙÇàÀ̳׿ä :) ³Ê¹« Àú±Þ¹ø¿ªÀ̶ó ºÎ²ô..
    replied by ±¸·ç [2008/06/30 18:47]
À̸§ :  URL(Àִºи¸) :

[´ñ±Ûȯ¿µ!] Àú ´ñ±Û ¹«Áö ÁÁ¾ÆÇÕ´Ï´Ù. ^^      [´ñ±Û µî·Ï]