±âŸ(framework)
2019.05.29 / 24:46

3. Scouter Server BuiltInPluginÀ» Á¦ÀÛÇغ¸ÀÚ - (1) ¿ä±¸»çÇ× ºÐ¼®

Źµ¹ÀÌ°³¹ßÀÚ
Ãßõ ¼ö 280

À̹ø ÁÖÁ¦´Â Á¶±Ý ±æ¾îÁú µíÇÏ¿© 1, 2ºÎ·Î ³ª´©¾ú´Ù.
1ºÎ¿¡¼­´Â Built-in PluginÀÇ °³³ä°ú °³¹ßÇϱâ À§ÇÑ Çʼö ¿ä±¸»çÇ׿¡ ´ëÇØ ºÐ¼®ÇÏ°í,
2ºÎ¿¡¼­´Â ½ÇÁ¦·Î ºôÆ®ÀÎ Ç÷¯±×ÀÎ(.jar)À» Á¦ÀÛÇغ¸µµ·Ï ÇÏ°Ú´Ù.

º» °Ô½Ã±ÛÀ» ÀÌÇØÇϱâ À§Çؼ­´Â Java ReflectÀÇ °³³ä¿¡ ´ëÇØ Á¶±Ý ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù.

¸ñÂ÷´Â ¾Æ·¡¿Í °°´Ù.
1. PluginÀÇ °³³ä
  1-1. Scripting Plugin VS Built-in Plugin
2. Built-in Plugin °³¹ß ¿ä±¸»çÇ×
  2-1. ¿ä±¸»çÇ× ¿ä¾à
  2-2. ¼Ò½ºÄÚµå ºÐ¼®
3. °á·Ð

1. PluginÀÇ °³³ä

1.1 Scripting Plugin VS Built-in Plugin

½ºÄ«¿ìÅÍ´Â ½Ã½ºÅÛ ¸ð´ÏÅ͸µÇÑ Á¤º¸¸¦ Ŭ¶óÀ̾ðÆ®¿¡¼­ È®ÀÎÇÏ´Â ¹æ¹ýÀ» Á¦¿ÜÇÏ°íµµ ´Ù¾çÇÑ ¹æ½ÄÀ¸·Î ¸ð´ÏÅ͸µ µ¥ÀÌÅ͸¦ È°¿ëÇϵµ·Ï ÇØÁØ´Ù.
¿¹¸¦ µé¸é Email Àü¼ÛÀ̳ª, ½½·¢ ¾Ë¸²µîÀÌ Àִµ¥, ÀÌ ¶§ »ç¿ëµÇ´Â °ÍÀÌ PluginÀÌ´Ù.

PluginÀº Scripting Plugin°ú Built-in PluginÀ¸·Î ³ª´¶´Ù.

1. Scripting PluginÀº Java¸¦ ÀÌ¿ëÇÏ´Â ½ºÅ©¸³Æ®·Î, Àüó¸®¿Í °°Àº ´Ü¼øÇÑ ÀÛ¾÷À» Áö¿øÇÑ´Ù. 
À̴ ÄÚµå º¯°æÀÌ µ¿ÀûÀ¸·Î ÀÌ·ïÁ®¼­ Server°¡ µ¹¾Æ°¡´Â Áß¿¡ ¼öÁ¤À» Çصµ ¹Ù·Î º¯°æ»çÇ×ÀÌ Àû¿ëµÈ´Ù. 
±×·¯³ª ¾îµð±îÁö³ª ´Ü¼ø ÀÛ¾÷¿ëÀ̹ǷΠ±â´ÉÀû ÇÑ°è°¡ ÀÖ´Ù.
½ºÅ©¸³Æ® Ç÷¯±×ÀÎ ÆÄÀÏÀº server ³»ºÎÀÇ plugin Æú´õ¿¡ À§Ä¡ÇÑ´Ù.
Ç÷¯±×ÀÎÀÇ À̸§Àº ¾Æ·¡¿Í °°ÀÌ Áö¾î¾ß Çϸç, À̸§ º¯°æÀ» ÇÒ ¼ö ¾ø´Ù.

https://github.com/scouter-project/scouter/blob/master/scouter.document/main/Plugin-Guide_kr.md#1-scripting-plugin

³»ºÎ´Â ÀÚ¹Ù ¸Þ¼­µå·Î ÀÌ·ïÁ® ÀÖÀ¸¸ç ¾Æ·¡¿Í °°Àº Çü½ÄÀ¸·Î ÀÛ¼ºÇÏ¸é µÈ´Ù.

https://github.com/scouter-project/scouter/blob/master/scouter.document/main/Server-Plugin-Scripting.md



2. Built-in PluginÀº µ¶¸³µÈ Java Project·Î À̸ÞÀÏ Àü¼Û µîÀÇ Á»´õ °íÂ÷¿øÀÇ ¸¹Àº ±â´ÉÀ» Áö¿øÇÑ´Ù.
½ºÅ©¸³Æ®¿Í ´Ù¸£°Ô º¯°æ»çÇ× µîÀ» Àû¿ëÇÏ·Á¸é ServerÀÇ Àç ½ÃÀÛÀÌ ÇÊ¿äÇÏ´Ù.
ºôÆ®ÀÎ Ç÷¯±×ÀÎ ÆÄÀÏÀº server ³»ºÎÀÇ lib Æú´õ¿¡ À§Ä¡Çϸç, ¿ä±¸»çÇ׿¡ ¸ÂÃç »ý¼ºµÈ jarÆÄÀÏÀÌ´Ù.

º» °Ô½Ã±Û¿¡¼­´Â Built-in PluginÀÇ ¿ä±¸»çÇ× ºÎºÐ¿¡ ÁýÁßÇϵµ·Ï ÇÏ°Ú´Ù.

2. Built-in Plugin °³¹ß ¿ä±¸»çÇ×

2-1. ¿ä±¸»çÇ× ¿ä¾à

¹«¾ùÀ» ÃæÁ·ÇØ¾ß ÇÏ´ÂÁö °á·Ð¸¸ ¾Ë°í ½ÍÀº »ç¶÷µéÀ» À§ÇØ °á·ÐºÎÅÍ Àû¾îº¸¸é ´ÙÀ½°ú °°´Ù.

1. ½ºÄ«¿ìÅÍÀÇ ½ºÄÉÁì·¯¿¡ ¿Ã¸± ¸Þ¼­µå´Â public À̾î¾ß Çϸç, ¹Ýµå½Ã ¾Æ·¡ÀÇ 6°³ AnnotationÁß Çϳª´Â °¡Á®¾ß ÇÑ´Ù.

https://github.com/scouter-project/scouter/blob/master/scouter.document/main/Plugin-Guide_kr.md#2-annotation


2. ¶ÇÇÑ ¸Þ¼­µåÀÇ ÆĶó¹ÌÅͷδ Pack ÀÎÅÍÆäÀ̽º ¶Ç´Â À̸¦ ±¸ÇöÇÑ ÇÏÀ§ Ŭ·¡½º 1°³¸¦ ¹Þ¾Æ¾ß ÇÑ´Ù.

Pack ÀÎÅÍÆäÀ̽º¿Í ±× ±¸Çö Ŭ·¡½ºµé


3. À§ÀÇ ¸Þ¼­µå°¡ ´ã±ä Ŭ·¡½º´Â ¹Ýµå½Ã public class¿©¾ß ÇÑ´Ù.
4. À§ÀÇ public class´Â ¹Ýµå½Ã scouter.plugin.server ÆÐÅ°Áö ÇÏÀ§¿¡ ÀÖ¾î¾ß ÇÑ´Ù.
  ex) scouter.plugin.server.mypackage.yolo (O)
        mypackage.yolo (X)
5. Dependency·Î scouter.server¿Í scouter.commonÀ» °®´Â´Ù.
  (1) server plugin À̱⠶§¹®¿¡ scouter.server°¡ ÇÊ¿äÇÏ°í
  (2) annotation ¹× ±âŸ À¯Æ¿ÀÌ scouter.common ¿¡ Àֱ⠶§¹®ÀÌ´Ù.


À̸¦ ´Ù ÃæÁ·½ÃŲ ¿¹½Ã´Â ¾Æ·¡¿Í °°´Ù.

https://github.com/scouter-project/scouter/blob/master/scouter.document/main/Plugin-Guide_kr.md#2-annotation



2-2. ¼Ò½ºÄÚµå ºÐ¼®
(1) Main Ŭ·¡½º

Á¦ÀÏ ¸ÕÀú Main Ŭ·¡½º¸¦ º¸¸é 56¹ø ¶óÀο¡¼­ Built-in PluginÀÌ È£ÃâµÇ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.

scouter.server.MainÀÇ main() ¸Þ¼­µå ³»ºÎ


(2) BuiltInPluginManager Ŭ·¡½º

À̸¦ µû¶ó¼­ BuiltInPluginManager·Î °¡º¸¸é ¾Æ·¡¿Í °°´Ù.

scouter.server.plugin.builtin ³»ºÎ BuiltInPluginManager Ŭ·¡½º


À§¿¡¼­ºÎÅÍ Â÷±ÙÂ÷±Ù ºÐ¼®Çغ¸µµ·Ï ÇÏ°Ú´Ù.

¸ÕÀú 18¹ø ¶óÀÎÀÇ HashMapÀ» º¸¸é key·Î StringÀ», value·Î´Â List¸¦ °®´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.


ÀÌ HashMapÀº ½ºÄ«¿ìÅÍ Ç÷¯±×ÀεéÀ» ¸ðµÎ ´ã¾Æ³õÀº Ä÷º¼ÇÀ¸·Î, °¢ ¾î³ëÅ×ÀÌ¼Ç º°·Î Ç÷¯±×ÀÎÀ» ¸ð¾Æ °ü¸®ÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ ³ªÅ¸³¾ ¼ö ÀÖ´Ù.

(³ªÁß¿¡ ¼³¸íÇÏ°ÚÁö¸¸ ¸ðµç Ç÷¯±×ÀÎÀ» ºÒ·¯¿Â µÚ, key°ªÀ» °¡Áö°í °¢ Ç÷¯±×ÀεéÀ» È£ÃâÇÏ¿© ½ÇÇà½ÃŲ´Ù.)


´ÙÀ½À¸·Î 21¹ø ¶óÀÎÀ» º¸¸é scouter.plugin.server ÆÐÅ°Áö ³»ºÎÀÇ ¸ðµç Ŭ·¡½º¸¦ »Ì¾Æ¼­ Set¿¡ ´ã¾Æ³õÀº °ÍÀ» º¼ ¼ö ÀÖ´Ù. ÀÌ ¶§¹®¿¡ ¹Ýµå½Ã scouter.plugin.server ÆÐÅ°Áö ÇÏÀ§¿¡ Äڵ带 ÀÛ¼ºÇØ¾ß ÇÏ´Â °ÍÀÌ´Ù.




±× ´ÙÀ½À¸·Î IterationÀ» ÇÏ´Â while ³»ºÎÀÇ 27 ~ 29¹ø ¶óÀÎÀ» º¸¸é, ÃßÃâÇÑ classµé Áß¿¡¼­ public class¸¸ ó¸®ÇÏ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ÀÌÀ¯·Î ¹Ýµå½Ã ½ºÄÉÁì·¯¿¡¼­ ºÒ·¯¿Ã Ŭ·¡½º´Â public class¿©¾ß ÇÑ´Ù.




±× ´ÙÀ½ ºÎºÐÀ¸·Î ³Ñ¾î°¡¼­ ¸Þ¼­µå¸¦ ºÒ·¯¿À´Â 31 ~ 46¹ø ¶óÀÎÀ» »ìÆ캸ÀÚ
ÀÌ ºÎºÐ¿¡¼­ ¿Ö public ¸Þ¼­µå¿©¾ß µÇ´ÂÁö, ÁöÁ¤µÈ annotationÀÌ ²À ÇÊ¿äÇÑÁö°¡ ³ª¿Â´Ù.



(3) PluginInvocation Ŭ·¡½º

¸¶Áö¸·À¸·Î 62¹ø ¶óÀÎÀÇ invokeAllPlugins()À» »ìÆ캸ÀÚ.
ÀÌ ¸Þ¼­µå´Â ¸» ±×´ë·Î pluginPoint Á¾·ù¿¡ ÇØ´çÇÏ´Â ¸ðµç Ç÷¯±×ÀεéÀ» ½ÇÇà½ÃÅ°´Â ¸Þ¼­µåÀÌ´Ù.

°¢ packº°·Î ´ã°ÜÀÖ´Â ¸ðµç ¸Þ¼­µå¸¦ invoke()

ÀÌ invokeAllPlugins()´Â ½ºÄ«¿ìÅÍ°¡ ½ÇÇàµÇ¸ç ³»ºÎÀÇ Scala¿¡¼­ È£ÃâµÇ´Âµ¥, ³Ê¹« º¹ÀâÇÏ¿© »ý·«Çϵµ·Ï ÇÏ°Ú´Ù.
´ÜÁö ¿ä±¸»çÇ×À» ¸ðµÎ ¸¸Á·½ÃÅ°´Â ¸Þ¼­µå¿¡ ÇÑÇؼ­ invokeAllPlugins()¿¡¼­ È£ÃâµÇ¾î ½ÇÇàµÈ´Ù´Â °Í¸¸ ¾Ë¸é µÈ´Ù.


Á¤»ó ½ÇÇà °á°ú¸¦ º¸¸é ¾Æ·¡¿Í °°ÀÌ ·Î±×°¡ ÂïÈù´Ù.

ºôÆ®ÀÎ Ç÷¯±×ÀÎÀÇ Á¤»ó È£Ã⠷α×





3. °á·Ð

À§ÀÇ ¼Ò½ºÄÚµå ºÐ¼® °úÁ¤À» ÅëÇØ ¾î¶² ¿ä±¸»çÇ×À» ÃæÁ·ÇØ¾ß ÇÏ´ÂÁö¿¡ ´ëÇØ ¾Ë¾Æº¸¾Ò´Ù.

¸¶Áö¸·À¸·Î ÃÖÁ¾ÀûÀ¸·Î Á¤¸®ÇÏ¸é ¾Æ·¡ÀÇ ¿ä±¸»çÇ×À» ÃæÁ·ÇØ¾ß ÇÑ´Ù°í ¸»ÇÒ ¼ö ÀÖ´Ù.

Çʼö ¿ä±¸»çÇ×
¿¹½Ã


¿©±â±îÁö ÇÏ¿© ½ºÄ«¿ìÅÍÀÇ Built-in PluginÀÇ Çʼö ¿ä±¸»çÇ׿¡ ´ëÇØ ¾Ë¾Æº¸¾Ò´Ù.
´ÙÀ½ éÅÍ¿¡¼± ÀÌ Á¶°ÇÀ» °¡Áö°í ¾î¶»°Ô ÁøÂ¥·Î ºôÆ®ÀÎ Ç÷¯±×ÀÎÀ» Á¦ÀÛÇÒ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇØ ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú´Ù.