[Áöµð³ÝÄÚ¸®¾Æ]ÆÄÀÌ¾îÆø½º°¡ ±â¹ÝÀ¸·Î Çϰí ÀÖ´Â ¸ðÁú¶ó´Â ³Ý½ºÄÉÀÌÇÁ ½ÃÀýºÎÅÍ º»´Ù¸é 10³âÀÌ ³Ñ´Â ¼¼¿ù µ¿¾È ¼ö¹é ¸íÀÇ °³¹ßÀÚµéÀÇ ¼ÕÀ» °ÅÃÄ ¼ö¹é ¸¸ÇàÀÌ ³Ñ´Â ¹æ´ëÇÑ ¼Ò½ºÄÚµå·Î ¹ßÀüÇØ ¿Ô´Ù.
±×·¯³ª ³Ý½ºÄÉÀÌÇÁ ¼Ò½º°¡ Ãʱ⿡ °ø°³µÇ¾úÀ» ¶§¸¸ ÇØµµ ÇöÀçÀÇ ¸ðÁú¶ó¿Í´Â ¸¹ÀÌ ´Þ¶ú´Ù. ¼Ò½ºÄÚµå °ø°³ ÈÄ 1~2³â°£ ·»´õ¸µ ¿£ÁøÀ¸·Î¼ °ÔÄÚ(Gecko)¸¦ ¼±ÅÃÇϰí, XUL(eXtensible User interface Language)À» ±â¹ÝÀ¸·Î ÇÏ´Â UI¸¦ °³¹ßÇÏ´Â µî °³¹ß ·Îµå¸ÊÀÇ Áß¿äÇÑ ºÎºÐÀ» °áÁ¤Çß´Ù. ¶ÇÇÑ ´Ù¾çÇÑ ¿î¿µÃ¼Á¦(OS)¸¦ Áö¿øÇϸ鼵µ OS ÀÇÁ¸ÀûÀÌÁö ¾Ê±â À§ÇØ XPCOMÀ̶ó´Â º°µµÀÇ ÄÄÆ÷³ÍÆ® ¸ðµ¨À» ¸¸µå´Â µ¥ ¿À·£ ½Ã°£À» ÅõÀÚÇß´Ù.
¸ðÁú¶ó°¡ ´Ü¼øÇÑ À¥ ºê¶ó¿ìÀú°¡ ¾Æ´Ï¶ó °³¹ß Ç÷§ÆûÀ¸·Î Á¶¸í ¹Þ´Â ÀÌÀ¯µµ OS ÀÇÁ¸ÀûÀÌÁö ¾ÊÀº ±â¹Ý ±â¼ú°ú À¥ Ç¥ÁØ ±â¼úÀ» ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀûÀýÇÏ°Ô Á¶È½ÃÄÑ, °³¹ßÀÚ´Â ¼ÒÇÁÆ®¿þ¾î¸¦ ½±°Ô È®ÀåÇÒ ¼ö ÀÖ°í »ç¿ëÀÚ´Â ÀÌ·± È®Àå±â´ÉÀ» ¸¾²¯ ´©¸± ¼ö Àִ ȯ°æÀ» Á¦°øÇϱ⠶§¹®ÀÌ´Ù.
ÆÄÀÌ¾îÆø½º, ¹«¾ùÀÌ ´Ù¸¥°¡?
ÆÄÀÌ¾îÆø½ºÀÇ ±â¹ÝÀÎ ¸ðÁú¶ó ¼Ò½º´Â ¸Å¿ì ¹æ´ëÇÏ´Ù. ÀÌ ¼Ò½ºÄÚµå´Â ¸ðµâ ÇüÅ·Π±¸ºÐÇØ °¢ ¸ðµâ¸¶´Ù ¼ÒÀ¯ÀÚ(owner)³ª ´ã´çÀÚ(peer)°¡ Á¤ÇØÁ® ÀÖ´Ù. À̵éÀº ¸ðµâ¿¡ ÀԷµǴ ´ëºÎºÐÀÇ ¼Ò½ºÄÚµå ¼öÁ¤°ú Ãß°¡ »çÇ×À» ó¸®ÇÑ´Ù. °¢ ¸ðµâÀº 100¿© °³°¡ ³ÑÀ¸¸ç, ÇÙ½É ¸ðµâ°ú È®Àå ¸ðµâ·Î ±¸ºÐÇØ °ü¸®µÈ´Ù.
¼Ò½ºÄڵ带 ÀÌ·ç´Â ÆÄÀÏ Çü½ÄÀº ´ëºÎºÐ ÄÄÆÄÀÏ ¾ð¾îÀÎ C++·Î ±¸¼ºµÅ ÀÖÁö¸¸ ³×ÀÌÆ¼ºê ÄÚµå ³»¿¡ °´Ã¼¸¦ Ȱ¿ëÇÏ´Â µ¥´Â ÀÎÅÍÇÁ¸®ÅÍ(interpreter) ¾ð¾îÀÎ ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®´Â À¥ »ó¿¡¼ ±â´É ±¸ÇöÀÌ ½¬¿î ¾ð¾î·Î¼ µ¿ÀûÀÎ µ¥ÀÌÅÍ Ã³¸®°¡ °¡´ÉÇÑ ÀåÁ¡ÀÌ ÀÖ´Ù. ±× ¹Û¿¡ ¸Þ½ÃÁö ÆÄÀÏ Ã³¸®¸¦ À§ÇÑ DTD ÆÄÀÏ, ¿Ü¾çÀ» °áÁ¤ÇÏ´Â CSS ÆÄÀÏ, UI¸¦ °áÁ¤ÇÏ´Â XUL ÆÄÀÏ, ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÏ´Â IDL ÆÄÀÏ µîÀ¸·Î ±¸¼ºµÅ ÀÖ´Ù.
¸ðÁú¶ó°¡ ÄÄÆÄÀϵнÇÇàµÇ¸é C++ ÄÄÆ÷³ÍÆ®°¡ ½ÇÇàµÇ°í ÀÚ¹Ù½ºÅ©¸³Æ®¿Í ¿¬°áÀ» ´ã´çÇÏ´Â XPConnect¶ó°í ºÒ¸®´Â ±â¼úÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÀÌ ÀÚ¹Ù½ºÅ©¸³Æ®´Â ³»ºÎ °´Ã¼¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â Á¡¿¡¼ À¥ ÆäÀÌÁö¿¡ ÀÖ´Â ÀÚ¹Ù½ºÅ©¸³Æ®¿Í ±¸º°µÈ´Ù. ÈÄÀÚ´Â À¥ ÆäÀÌÁö ·»´õ¸µ½Ã ½ÇÇàµÇ¸ç ³»ºÎ °´Ã¼¸¦ È£ÃâÇÒ ¼ö ¾øµµ·Ï °Ý¸®µÈ´Ù. ¸ðÁú¶ó ³»ºÎ Äڵ忡¼ »ç¿ëµÇ´Â ÀÚ¹Ù½ºÅ©¸³Æ®´Â »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º »óÈ£ ÀÛ¿ë¿¡ ¾²ÀÌ´Â »ç¿ëÀÚ À̺¥Æ®(event)¸¦ ó¸®ÇÏ´Â µ¥ ÁÖ·Î ÀÌ¿ëµÈ´Ù.
¸ðÁú¶óÀÇ ¼Ò½ºÄÚµå´Â öÀúÇÏ°Ô °´Ã¼ ÁöÇâ ÇÁ·Î±×·¡¹Ö(OOP) ¿øÄ¢À» µû¸£¸ç, °¢ ÄÄÆ÷³ÍÆ®µéÀº öÀúÈ÷ ¸ðµâȵŠÀÖ´Ù. À̵éÀÌ ¼·Î Åë½ÅÇÒ ¶§µµ ÀÚüÀÇ XP ȯ°æ ÇÏ¿¡ ÄÄÆ÷³ÍÆ® °´Ã¼ ¸ðµ¨(COM)¿¡ ±âÃÊÇÑ Àß Á¤ÀÇµÈ ÀÎÅÍÆäÀ̽º¸¸À» »ç¿ëÇØ Åë½ÅÇÑ´Ù. ÀÎÅÍÆäÀ̽ºÀÇ ÁÖ¿ä ¾ÆÀ̵ð¾î´Â ÄÚ¹Ù(CORBA)¿¡¼ ¿ÔÀ¸¸ç, XPIDL(CROSS Platform Interface Definition Language)À̶ó°í ÇÏ´Â ¾ð¾î¸¦ ÀÌ¿ëÇØ »ç¿ëÇÑ´Ù.
¸ðÁú¶ó¸¦ ÄÄÆÄÀÏÇÒ ¶§´Â ÀÌ·¯ÇÑ ÀÎÅÍÆäÀ̽º Á¤ÀÇ(IDL) ÆÄÀÏÀ» ÀÚµ¿À¸·Î xpidlÀ̶ó´Â IDL ÄÄÆÄÀÏ·¯¸¦ ÅëÇØ C/C++ Çì´õ ÆÄÀÏ·Î º¯È¯ÇÑ´Ù. ÀÎÅÍÆäÀ̽º´Â UUID¶ó´Â ½Äº° °¡´ÉÇÑ °íÀ¯¹øÈ£¸¦ °®°í ÀÖÀ¸¸ç, ÀÌ´Â ÀÚ¹Ù½ºÅ©¸³Æ® Äڵ忡¼ ÀÎÅÍÆäÀ̽º¿¡ Á¢±ÙÇÒ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù. ±×·¯³ª ÀÌ·¯ÇÑ È°¿ëÀº ÀÚ¹Ù½ºÅ©¸³Æ® ·±Å¸ÀÓ ¹üÀ§ ³»¿¡¼ À¯È¿ÇÑ ÆÄ¶ó¹ÌÅ͸¦ À§ÇØ µ¥ÀÌÅÍ Å¸ÀÔÀ» »ç¿ëÇÏ´Â °æ¿ì·Î ÇÑÁ¤µÅ ÀÖ´Ù.
¸ðÁú¶ó¿¡¼ ÄÚµå ½ÇÇà¿¡ ½ÇÆÐÇϸé C++ ºÎºÐÀÌ ¾Æ´Ñ ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼ ¿¹¿Ü 󸮸¦ ÇÑ´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ try-catch¸¦ »ç¿ëÇØ C++ ³»ÀÇ ¹Ýȯ°ªÀ» Ç¥½ÃÇÑ´Ù. ¸ðÁú¶ó´Â ŸÀÔ ¶óÀ̺귯¸®¿Í ½ÇÇà °¡´ÉÇÑ ÄÄÆ÷³ÍÆ®ÀÇ ³»ºÎ ·¹Áö½ºÆ®¸®¿Í ÀÎÅÍÆäÀ̽º¿¡ Á¾¼ÓµÅ ÀÖ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀÌ ½ÃÀÛµÇ¸é ·¹Áö½ºÆ®¸®ÀÇ ÃֽżºÀ» È®ÀÎÇÑ ÈÄ º¯°æµÈ ºÎºÐÀÌ ÀÖÀ¸¸é ·¹Áö½ºÆ®¸®¸¦ °»½ÅÇÑ´Ù. ±×¹Û¿¡ °´Ã¼ ÁöÇâ ÇÁ·Î±×·¡¹Ö¿¡¼ ÄÄÆ÷³ÍÆ® °£ÀÇ »óŸ¦ °üÂûÇØ ÀÀ´äÇϱâ À§ÇÑ nsIObserver¸¦ ÀÌ¿ëÇØ ³»ºÎ ¸Þ½ÃÁö Àü´Þ üÁ¦¸¦ °®Ãß°í ÀÖ´Â °Íµµ Ư¡ÀÌ´Ù.
¸ðÁú¶ó ¼Ò½ºÄڵ忡´Â ÅØ½ºÆ® ¸Þ½ÃÁö¸¦ ¼Ò½º¿¡ Çϵå ÄÚµùÇÒ ¼ö ¾øÀ¸¸ç º°µµÀÇ ¸Þ½ÃÁö ÆÄÀÏ¿¡ ³Ö¾î °ü¸®¿Í Áö¿ªÈ°¡ ¿ëÀÌÇϵµ·Ï ¼Ò½º¿Í ³»¿ëÀ» ºÐ¸®Çϰí ÀÖ´Ù. ÀÌ ¸Þ½ÃÁö ÆÄÀÏÀº ½ÇÇà½Ã¿¡ º¯¼ö µîÀ» Æ÷ÇÔÇØ ±¸ÇöÇÒ °æ¿ì Properties ÆÄÀÏ¿¡ ±â·ÏÇϸç ÀϹÝÀûÀÎ ¸Þ½ÃÁö´Â ¸ðµÎ DTD ÆÄÀÏ¿¡ Á¤ÀÇÇØ XUL ÆÄÀÏ¿¡¼ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù(ÀÌ·± ³»¿ëµéÀº ´ÙÀ½ ±Û¿¡¼ ½ÇÁ¦ È®Àå±â´ÉÀ» °³¹ßÇØ º¸¸ç ÀÚ¼¼ÇÏ°Ô »ìÆìº¼ ¿¹Á¤ÀÌ´Ù).
 |
| <±×¸²1>¸ðÁú¶óÀÇ ±â¼ú ±â¹Ý ±¸Á¶ |
ÆÄÀÌ¾îÆø½ºÀÇ ÁÖ¿ä ±â¹Ý ±â¼ú
¸ðÁú¶ó¿¡¼ »ç¿ëÇÏ´Â ±â¹Ý ±â¼úÀº Å©°Ô Çü½Ä¿¡ µû¶ó ³×ÀÌÆ¼ºê ÄÚµå¿Í ÅØ½ºÆ® ÄÚµå·Î ±¸º°µÈ´Ù. ³×ÀÌÆ¼ºê ÄÚµå´Â ÄÄÆÄÀÏµÇ¾î ¹ÙÀ̳ʸ® ÇàÅ·ΠÁ¸ÀçÇϰí ÅØ½ºÆ® ÄÚµå´Â ÄÄÆÄÀÏ ÈÄ¿¡µµ ÀÐÀ» ¼ö ÀÖ´Â °ÍÀÌ Æ¯Â¡ÀÌ´Ù. ¸ðÁú¶ó °³¹ß½Ã Á¦ 1¿øÄ¢Àº ƯÁ¤ OS¿¡ Á¦ÇѵÇÁö ¾Ê´Â Å©·Î½º Ç÷§Æû(XP, CROSS Platform) ¼ÒÇÁÆ®¿þ¾î¿©¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. À̸¦ À§ÇØ ¸ðÁú¶ó¿¡´Â <±×¸² 1>°ú °°ÀÌ NSPR(Netscape Portable Runtime)À̶ó´Â ¶óÀ̺귯¸®°¡ ÀÖ´Ù.
 |
| <ȸé1>XPCOMºä¾î·Î º» COM ÀÎÅÍÆäÀ̽º |
NSPRÀº ¿ø·¡ ³Ý½ºÄÉÀÌÇÁ Á¦Ç°±º¿¡ Æø³Ð°Ô »ç¿ëµÆ´Âµ¥, ¿©·¯ ¿î¿µÃ¼Á¦ ȯ°æ¿¡¼ µ¶¸³ÀûÀÎ ¾²·¹µå(thread)¿Í µ¿±âÈ, ÆÄÀÏ ÀÔÃâ·Â, ¸Þ¸ð¸® °ü¸® µîÀ» ó¸®ÇÒ ¼ö ÀÖ´Â ÇÔ¼öµéÀÇ APIÀÌ´Ù. ƯÈ÷ NSPRÀº ¸ÖƼ ¾²·¹µùÀÌ °¡´ÉÇÑ OS µ¶¸³ÀûÀÎ ±â´ÉÀ» Á¦°øÇØ, µ¥ÀÌÅÍ Àü¼ÛÀ» Çϰí ÀÖ´Â µ¿¾È¿¡µµ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º°¡ ÀÀ´äÇÒ ¼ö ÀÖ´Â »óÅ·Π¾²·¹µå ÀÛ¾÷À» ÇÏ´Â °ÍÀÌ Æ¯Â¡ÀÌ´Ù.
NSPRÀº ¸ðÁú¶ó ¼Ò½ºÀÇ ns/nspr¿¡¼ ãÀ» ¼ö ÀÖÀ¸¸ç ¸ðÁú¶ó ³»ºÎ ÇÁ·ÎÁ§Æ®·Î Áö¼ÓÀûÀ¸·Î °³¹ßµÇ°í ÀÖ´Ù(
www.mozilla.org/projects/nspr/). ³×ÄÚ(Necko)¶ó°í ºÒ¸®´Â ³×Æ®¿öÅ© ¶óÀ̺귯¸®´Â ¿ÜºÎ¿ÍÀÇ Åë½Å°ú ij½Ã, ¾ÏÈ£È, ÀÎÁõ ó¸® µîÀ» ´ã´çÇÑ´Ù. À̹ۿ¡ ¸ðÁú¶ó¿¡ »ç¿ëµÈ ±â¼úÀº <Ç¥ 1>°ú °°´Ù.
 |
| <Ç¥ 1>¸ðÁú¶ó¿¡ »ç¿ëµÈ ÁÖ¿ä±â¼ú |
¿î¿µÃ¼Á¦¸¦ ³Ñ³ªµå´Â ºñ¹Ð, XPCOM
XPCOMÀº ¸ðÁú¶ó¸¦ ±â¹ÝÀ¸·Î Å©·Î½º Ç÷§Æû ȯ°æÀÇ ¸ðµâ ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇÏ´Â Ç÷§ÆûÀÌ´Ù. XPCOMÀº MSÀÇ COM°ú ¸Å¿ì À¯»çÇÏ¸ç ¿©·¯ Á¾·ùÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç ÄÄÆ÷³ÍÆ®¿Í Åë½ÅÇϱâ À§ÇÑ ÇÁ·Ï½Ã ¸ÞÄ¿´ÏÁòÀ» Á¦¿ÜÇϰí´Â °ÅÀÇ °°´Ù°í ÇÒ ¼ö ÀÖ´Ù. ¾çÂÊ ¸ðµÎ ÀÎÅÍÆäÀ̽º ±â¹ÝÀÌ¸ç ¸ðµç ÀÎÅÍÆäÀ̽º¸¦ ¼¼ °³ÀÇ ¸Þ½îµå(method), Áï QueryInterface, AddRef, Release°¡ Á¤ÀÇµÈ ±âº» ÀÎÅÍÆäÀ̽º¿¡¼ ¸¸µé ¼ö ÀÖ´Ù(±×·¯³ª ÀÌ·± ±âº»ÀûÀÎ °øÅëÁ¡À» Á¦¿ÜÇϸé MSÀÇ COM°ú XPCOMÀº ÄÄÆ÷³ÍÆ®»ó ȣȯÀ̳ª µ¥ÀÌÅÍ ±³È¯ÀÌ »ç½Ç»ó ºÒ°¡´ÉÇÏ´Ù).
XPCOMÀÇ °¢ ÀÎÅÍÆäÀ̽º¿¡´Â ÇâÈÄ ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼ ÂüÁ¶ÇÒ ¼ö ÀÖ´Â ContractID¿Í IDLÀ» ÅëÇØ Á¤ÀÇÇØ¼ »ç¿ëÇÏ´Â ClassID¸¦ Æ÷ÇÔÇϰí ÀÖÀ¸¸ç À̸¦ ÅëÇØ ½Äº°ÇÑ´Ù. XPCOM¿¡¼´Â ¸î °¡Áö Ư¡ÀÌ Àִµ¥ ¸ÕÀú °´Ã¼¿¡¼ ¸Þ¸ð¸®¸¦ Á¤È®È÷ »ç¿ëÇÏ°í ¹Ý³³ÇÏ°Ô Çϱâ À§ÇØ nsMemory¶ó´Â ÇÒ´ç ¹× ¹Ý³³ ü°è¸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½Ã³·³ È£Ãâ ¹ÞÀº ÂÊ¿¡¼ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ°í »ç¿ëÇÑ ÂÊ¿¡¼ ¹Ý³³ÇÏ´Â ±ÔÄ¢À» ÁöÄÑ¾ß ÇÑ´Ù.
void GetString(char **aResult) {
Const original_message[]= ¡°hello, world¡±;
char *message = (char*)nsMemory::Alloc(sizeof(char)
*sizeof(original_message));
strcpy(message, original_message);
*aResult = message;
}
...
char *result;
GetString(&result);
Process(result);
nsMemory::Free(result);
À̸¦ ÅëÇØ ¸Þ¸ð¸® ¸®½ºÅ©¸¦ ÁÙ¿© ¼ÒÇÁÆ®¿þ¾î ¿À·ù¸¦ ÁÙÀδÙ. À̰ÍÀº °¢ °´Ã¼µéÀ» ÂüÁ¶, ¹Ý³³ÇÏ´Â µ¥µµ ¾ö°ÝÇÏ°Ô Àû¿ëµÇ´Âµ¥ ¿¹¸¦ µé¸é ´ÙÀ½°ú °°Àº ¹æ½ÄÀ» »ç¿ëÇÑ´Ù.
void GetSample(nsISample **aResult) {
*aResult = someobject;
NS_ADDREF(*aResult);
}
void doSomething() {
nsISample *sample;
GetSample(&sample);
ProcessSample(sample);
NS_RELEASE(sample);
}
±×·¯³ª ÂüÁ¶¿Í ¹Ý³³¿¡ µå´Â È¿À²¼º ¹®Á¦ ¶§¹®¿¡ °¢ ÀνºÅϽº¿¡ ÂüÁ¶ Ƚ¼ö¸¦ Æ÷ÀÎÅÍ·Î ÀúÀåÇØ »ç¿ëÇÑ´Ù. ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â ¸ðµç Ŭ·¡½º´Â ÂüÁ¶ Ƚ¼ö ÀúÀå ±â´É°ú ÀÚµ¿ ÆÄ±â ±â´ÉÀ» °®Ãá nsI Supports¶ó´Â °øÅë ±âÃÊ Å¬·¡½º¸¦ °øÀ¯Çϰí ÀÖ´Ù. ¸Å¹ø ÀÌ·± ¸Þ½îµå¸¦ È£ÃâÇØ¾ß ÇÏ´Â ¹ø°Å·¯¿òÀ» ÁÙÀ̰í ÄÚµå °¡µ¶¼ºÀ» ³ôÀ̰í return°ú °°Àº ¿©·¯ Ãⱸ¿¡¼µµ °´Ã¼ ÂüÁ¶ ¹Ý³³À» ½±°Ô Çϱâ À§ÇØ nsCOMPtr¶ó´Â COM °´Ã¼ Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ´Ù.
void doSomething() {
nsCOMPTr sample;
GetSample(getter_AddRefs(sample));
ProcessSample(sample);
}
nsCOMPTr´Â »ç¿ëÀÌ ³¡³ª¸é °´Ã¼¸¦ ÀÚµ¿À¸·Î ¹Ý³³ÇÑ´Ù. C++ Äڵ忡¼´Â ÀÌ·¯ÇÑ ±ÔÄ¢À» ¾ö°ÝÇÏ°Ô Áö۱â À§ÇØ nsCOMPTrÀ» Ç×»ó »ç¿ëÇØ¾ß ÇÑ´Ù. ±×·¯³ª ÀÌ·¯ÇÑ µ¿ÀÛÀº ÀÚ¹Ù½ºÅ©¸³Æ® °°Àº ½ºÅ©¸³Æ® ¾ð¾î¿¡¼´Â °¡ºñÁö ÄÝ·º¼ÇÀ̱⠶§¹®¿¡ ÇÊ¿äÇÒ ¶§ ÂüÁ¶¸¦ ÀÚµ¿À¸·Î ÁÙ¿©ÁØ´Ù.
XPCOMÀÇ ¶Ç ´Ù¸¥ ÁÖ¿äÇÑ Æ¯Â¡Àº ÇâÈÄ ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼ ÂüÁ¶ÇÒ ¼ö ÀÖµµ·Ï IDL·Î ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÑ´Ù´Â Á¡ÀÌ´Ù. ¸ÕÀú CID¸¦ ±âÃÊ·Î ÁÖ°í ´ÙÀ½°ú °°Àº IDLÀ» Á¤ÀÇÇÑ´Ù.
[scriptable, uuid(76f216a0-6c2f-11d9-9669-0800200c9a66)]
interface nsISample : nsISupports {
attribute string value;
void writeValue(in string aPrefix);
void poke(in string aValue);
}
C++ Äڵ忡¼ IDL·Î Á¤ÀÇÇÑ nsISampleÀº ´ÙÀ½°ú °°ÀÌ ±¸ÇöÇÑ´Ù. IDL ÆÄÀÏÀº º°µµÀÇ xpidlÀ» ÅëÇØ ÄÄÆÄÀÏÇØ xpt¶ó´Â Çì´õ ÆÄÀÏÀ» »ý¼ºÇÑ´Ù.
class nsISample : public nsISupports {
NS_IMETHOD SetValue(¡¦) = 0;
NS_IMETHOD GetValue(¡¦) = 0;
NS_IMETHOD WriteValue(¡¦) = 0;
NS_IMETHOD Poke(¡¦) = 0;
}
ÀÌ·¸°Ô ÀÚ¹Ù½ºÅ©¸³Æ®¿¡¼ ¸¸µé¾îÁø xpt Çì´õ ÆÄÀÏÀ» ÂüÁ¶ÇØ »ý¼ºÇÑ ÀÎÅÍÆäÀ̽º´Â XPCOM¿¡¼µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. XPCOM ÀÎÅÍÆäÀ̽º´Â ¡®nsI¡¯Ã³·³ Áß°£¿¡ I¸¦ ³Ö°Ô µÇ¸ç À̸¦ ±¸ÇöÇÏ´Â ¸Þ½îµå´Â I°¡ ºüÁö°í ImplÀ» ºÙÀδÙ. ÄÄÆ÷³ÍÆ®´Â URI ¹æ½ÄÀ¸·Î Ç¥ÇöÇÏ°í ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇØ Çʿ信 µû¶ó ¼³Ä¡ÇÑ´Ù. ¸¸¾à ¾î¶² ·ÎÄÃÆÄÀÏÀÌ ÀÖ¾î nsILocalFile¿¡ Á¦°øµÇ´Â ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÏ¸é ¡®@mozilla.org/file/ local;1¡¯À» »ç¿ëÇØ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½À» ½ÇÇàÇÏ¸é ÆÄÀÏ ÄÄÆ÷³ÍÆ®°¡ °Ë»öµÇ¾î aFile¿¡ ÀúÀåµÈ´Ù.
var aFile = Components.classes[¡°@mozilla.org/file/local;1¡±].createInstance();
if (!aFile) return false;
aLocalFile=aFile.QueryInterface(Components.interfaces.nsILocalFile);
if (!aLocalFile) return false;
aLocalFile.initWithPath(¡°/mozilla/testfile.txt¡±);
aLocalFile.delete(false);
 |
| <±×¸²2>XPConnectÀÇ ¾Æ±³ ¿ªÈ° |
components´Â ÄÄÆ÷³ÍÆ®¿¡ °ü·ÃµÇ´Â ¸î °³ÀÇ ÇÔ¼ö¸¦ Á¦°øÇÏ´Â ÀϹÝÀûÀÎ °´Ã¼¸¦ ÂüÁ¶Çϰí classes Àڻ꿡¼ ÄÄÆ÷³ÍÆ®¸¦ ÃëµæÇÑ´Ù. ÇÔ¼ö¸¦ È£ÃâÇÏ·Á¸é ÀÎÅÍÆäÀ̽º Áß Çϳª¸¦ È£ÃâÇÑ´Ù. QueryInterface´Â ¸ðµç ÄÄÆ÷³ÍÆ®¿¡ Á¦°øµÇ´Â ÇÔ¼ö·Î À̸¦ »ç¿ëÇϸé ÄÄÆ÷³ÍÆ®·ÎºÎÅÍ ÁöÁ¤µÈ ÀÎÅÍÆäÀ̽º¸¦ ÃëµæÇÒ ¼ö ÀÖ´Ù.
XPCOM ÀÎÅÍÆäÀ̽º´Â ´Ù¸¥ ÀÎÅÍÆäÀ̽º¸¦ »ó¼Ó ¹ÞÀ» ¼ö ÀÖ´Ù. ÀÌ ÀÎÅÍÆäÀ̽º´Â ±× ¾ÈÀÇ ¸ðµç ÇÔ¼ö¸¦ °¡Áö°Ô µÇ´Âµ¥, ÃÖ»óÀ§ ÀÎÅÍÆäÀ̽ºÀÎ nsISupports´Â ¸ðµç ÀÎÅÍÆäÀ̽º°¡ »ó¼Ó ¹Þ¾Æ »ç¿ëÇÒ ¼ö ÀÖ´Ù(nsISupports¿¡ Á¦°øµÇ´Â ÇÔ¼ö°¡ ¹Ù·Î QueryInterface·Î, ¸ðµç ÄÄÆ÷³ÍÆ®¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù). ´Ü ¾î´À °´Ã¼·Î QueryInterface¸¦ È£ÃâÇÏµç ±× °´Ã¼°¡ ÇÊ¿ä·Î ÇÏ´Â ÀÎÅÍÆäÀ̽º°¡ Áö¿øµÇÁö ¾ÊÀ» °æ¿ì null ¿©ºÎ¸¦ Ç×»ó È®ÀÎÇØ¾ß ÇÑ´Ù. ±× ÀÌÈÄ¿¡ È£ÃâÇÑ ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇØ ƯÁ¤ ÆÄÀÏÀ» »èÁ¦ÇÒ ¼ö ÀÖ´Ù.
XPCOM ÄÄÆ÷³ÍÆ® ¾È¿¡´Â ¼ºñ½º¶ó°í ºÒ¸®´Â Ư¼öÇÑ ÄÄÆ÷³ÍÆ®°¡ ÀÖ´Ù. ¼ºñ½º´Â ±Û·Î¹ú µ¥ÀÌÅ͸¦ ÃëµæÇϰųª ¼³Á¤, ´Ù¸¥ °´Ã¼¸¦ ½ÇÇàÇÏ´Â ¿ªÇÒÀ» Çϴµ¥ ÀϹÝÀûÀÎ createInstance ´ë½Å getService¸¦ È£ÃâÇÑ´Ù. ºÏ¸¶Å©°¡ ´ëÇ¥ÀûÀÎ »ç·Ê·Î ´ÙÀ½°ú °°ÀÌ Çϸé ÇöÀçÀÇ À¥ »çÀÌÆ®¸¦ ºÏ¸¶Å©¿¡ Ãß°¡ÇÒ ¼ö ÀÖ´Ù.
var bmarks = Components.classes[¡°@mozilla.org/browser/bookmarks-service;1¡±].getService();
bmarks = bmarks.QueryInterface(Components.interfaces.nsIBookmarksService);
bmarks.AddBookmark(¡°http://www.mozilla.org¡±,¡±Mozilla¡±);
XPCOMÀº ¿À·§µ¿¾È ½ÉÇ÷À» ±â¿ï¿© ÀÛ¾÷ÇØ ¿Â ¼öõ °³ÀÇ ÀÎÅÍÆäÀ̽º·Î ±¸¼ºµÅ ÀÖÀ¸¸ç ´Ù¾çÇÑ ¿î¿µÃ¼Á¦¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â Á¡¿¡¼ ¸ðÁú¶óÀÇ ÇÙ½É ÄÚµå´Ù. XPCOM¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸´Â
www.mozilla.org/projects/xpcom¿¡¼ ãÀ» ¼ö ÀÖ´Ù.
UI¿Í XPCOMÀÇ Áß°èÀÚ, XPConnect
XPConnect´Â ÀÌ¹Ì ¾ð±ÞÇÑ ´ë·Î ÀÚ¹Ù½ºÅ©¸³Æ®·Î XPCOMÀ» Á¶ÀÛÇÒ ¼ö ÀÖ´Â ±â¼úÀÌ´Ù. XPCOM Çü½ÄÀÇ ÀÎÅÍÆäÀ̽º ÇÑÂÊ¿¡¼ Åë½ÅÇÏ´Â °´Ã¼°¡ ¹Ý´ëÂÊ °´Ã¼ÀÇ ½ÇÇà ¾ð¾î¿¡ ¿µÇâÀ» ¹ÞÁö ¾Ê°Ô ÇÔÀ¸·Î½á ÀÚ¹Ù½ºÅ©¸³Æ®»Ó¸¸ ¾Æ´Ï¶ó ¾î¶² ¾ð¾î¿¡¼µµ ÂüÁ¶ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù(½ÇÁ¦·Î ÆÄÀ̽ãÀ» À§ÇÑ pyXPCOMÀ̶ó´Â ÇÁ·ÎÁ§Æ®°¡ ÁøÇàÁßÀ̸ç, ÀÚ¹Ù½ºÅ©¸³Æ®¿¡ ÆÄÀ̽ãÀ̳ª PerlÀ» ¹ÙÀεùÇÏ¿© »ç¿ëÇÒ ¼öµµ ÀÖ´Ù).
À̸¦ À§ÇØ ³×ÀÌÆ¼ºê Äڵ忡¼ IDL ÄÄÆÄÀÏ·¯(idlc)¸¦ »ç¿ëÇØ C ¼Ò½ºÄڵ带 ´ë·®À¸·Î »ý¼ºÇÑ ÈÄ JSAPI¸¦ »ç¿ëÇÏ´Â ÀÚ¹Ù½ºÅ©¸³Æ® ·±Å¸ÀÓ °´Ã¼¿¡ ¹Ý¿µÇÑ´Ù. ±× ¼Ò½º´Â ÄÄÆÄÀϵЏðÁú¶ó ¹ÙÀ̳ʸ®°¡ µÈ´Ù. À̷νá ÈξÀ ÀûÀº ÄÚµå·Îµµ ´õ µ¿ÀûÀÎ ±¸ÇöÀÌ °¡´ÉÇÏ´Ù.
XPConnect´Â MSCOM°ú IDispatch ÀÎÅÍÆäÀ̽º¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù. ¿ÀÁ÷ XPCOMÀÇ ±Ô¾àÀ» Áö۰í XPIDL¿¡¼ ¼±¾ðµÈ ÀÎÅÍÆäÀ̽º¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇöÀç ÀÚ¹Ù½ºÅ©¸³Æ® ¿Ü¿¡´Â ´Ù¸¥ ¾ð¾î¸¦ Áö¿øÇÏÁö ¾ÊÀ¸³ª XPIDL ÄÄÆÄÀÏ·¯°¡ ÀÚ¹Ù½ºÅ©¸³Æ® ¸ÊÇÎÀ» À§ÇØ C++ °íÀ¯ Çì´õ¸¦ ÅëÇØ typelib¸¦ »ý¼ºÇÏ´Â °ÍÀº °¡´ÉÇÏ´Ù. ´©±º°¡ ÄÄÆÄÀÏ·¯¸¦ È®ÀåÇÏ¸é ´Ù¸¥ Æ÷¸ËÀ» »ý¼ºÇϰųª ´Ù¸¥ ¾ð¾î¿¡ ¸ÊÇÎÇÒ ¼ö ÀÖÀ¸³ª, ÇöÀç´Â ÀÚ¹Ù½ºÅ©¸³Æ®¸¸ Áö¿øÇÑ´Ù.
 |
| <ȸé2>XUL¸¦ ÀÌ¿ëÇÑ ´Ù¾çÇÑ ¸ðÁú¶ó Å׸¶ |
´Ù¾çÇÑ Å׸¶¸¦ Áö¿øÇÏ´Â ºñ¹Ð, XUL
´ëºÎºÐ ¿î¿µÃ¼Á¦¿¡¼´Â µ¶ÀÚÀûÀÎ ±×·¡ÇÈ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º(GUI)¸¦ °¡Áö°í ÀÖÀ¸³ª, ¸ðÁú¶ó¿Í °°Àº XP(Å©·Î½º Ç÷§Æû) ÇÁ·Î±×·¥Àº OS ÀÇÁ¸¼ºÀ» Á¦°ÅÇϱâ À§ÇØ µ¶ÀÚÀûÀÎ GUI ·¹À̾ƿôÀ» Á¤ÀÇÇß´Ù. ¹«¾ùº¸´Ù ±âÁ¸ÀÇ GUI ¶óÀ̺귯¸®¿¡¼ »ç¿ëÇÏ´Â Àý´ë À§Ä¡¸¦ ÁöÁ¤ÇÏ´Â ¹æ½Äº¸´Ù´Â ´õ À¯¿¬ÇÑ °ÍÀÌ ÇÊ¿äÇß´Ù. ¸ðÁú¶ó´Â À̸¦ À§ÇØ ÀÏ´Ü UI´Â ³í¸®ÀûÀ¸·Î ƯÁ¤ À§Ä¡¿¡ ¹Ì¸® µðÀÚÀÎÇÏ°í ¿©±â¿¡ ±Û²ÃÀ» ¸ÂÃß¾î UI¸¦ µ¿ÀûÀ¸·Î »ý¼ºÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇß´Ù.
À̰ÍÀº À¥ ºê¶ó¿ìÀú°¡ À¥ ÆäÀÌÁö¸¦ Ç¥½ÃÇÏ´Â ¹æ¹ý°ú À¯»çÇÏ´Ù. ¸ðÁú¶ó´Â À¥ÀÌ ±×·¸µí µ¶ÀÚÀûÀÎ UI¸¦ Á¤ÀÇÇϱâ À§ÇØ À¥ Ç¥ÁØÀÎ XML ±â¹Ý ¹®¹ý¿¡ µû¶ó XULÀ» ¸¸µé¾ú´Ù. ÇöÀç´Â UI ÆíÁý±â°¡ º°µµ·Î ¾øÁö¸¸ »ç¶÷µéÀº XML ¹®¹ý¸¸À¸·Î Á÷°üÀûÀ¸·Î ¸Þ´º³ª À©µµ¿ì µîÀ» ¼³°èÇÒ ¼ö ÀÖµµ·Ï Áö¿øÇÑ´Ù. XULÀº ºê¶ó¿ìÀúÀÇ ¿Ü¾çÀ» ¸Å¿ì °£´ÜÇÏ°Ô ¹Ù²Ü ¼ö ÀÖ´Â ±âÃʰ¡ µÆ´Ù. ¿¹¸¦ µé¸é <ȸé 3>°ú °°ÀÌ À©µµ¿ì Åø¹Ù¿¡ File, Edit¶ó´Â ¸Þ´º¸¦ ³ÖÀº UI´Â ´ÙÀ½°ú °°ÀÌ ±¸ÇöÇÒ ¼ö ÀÖ´Ù.
<toolbox flex=¡±1¡±>
<menubar id=¡±sample-menubar¡±>
<menu id=¡±file-menu¡± label=¡±File¡±>
<menupopup id=¡±file-popup¡±>
<menuitem label=¡±New¡±/>
<menuitem label=¡±Open¡±/>
<menuitem label=¡±Save¡± oncommand=¡±Save();¡± />
<menuseparator/>
<menuitem label=¡±Exit¡± oncommand=¡±window.close();¡± />
</menupopup>
</menu>
<menu id=¡±edit-menu¡± label=¡±Edit¡±>
</menu>
</menubar>
</toolbox>
 |
| <ȸé3>XULÀ» ÀÌ¿ëÇØ°£´ÜÇÏ°Ô ¸¸µç UI |
XULÀº XHTML, MathML ¶Ç´Â SVG¿Í °°Àº ´Ù¸¥ XML ¾ð¾î¸¦ XUL ³»¿¡ »ðÀÔÇÒ ¼ö ÀÖÀ¸¸ç ½ºÅ¸ÀÏ½ÃÆ®(CSS)¸¦ ÀÌ¿ëÇØ ÀÎÅÍÆäÀ̽ºÀÇ ¿Ü¾çÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ¾î¼ ½ºÅ²°ú Å׸¶¸¦ Á¦ÀÛÇÏ´Â µ¥µµ ¿ëÀÌÇÏ´Ù. ÇÊ¿äÇÑ ´ëºÎºÐÀÇ UI ¿ä¼Ò¸¦ »ý¼ºÇÒ ¼ö ÀÖÀ¸¸ç ¾î¶² ±â±âÀÇ Æ¯º°ÇÑ Çʿ信µµ ¸ÂÃâ ¼ö ÀÖÀ» ¸¸Å º¸ÆíÀûÀÌ´Ù. ´ëÇ¥ÀûÀÎ UI ¿ä¼Ò´Â ´ÙÀ½°ú °°´Ù.
¡ß ÅØ½ºÆ® ¹Ú½º¿Í üũ ¹Ú½º¿Í °°Àº ÀÔ·Â ÄÁÆ®·Ñ
¡ß ¹öưÀ̳ª ´Ù¸¥ ÄÁÅÙÃ÷¸¦ °®°í ÀÖ´Â Åø¹Ù
¡ß ¸Þ´º ¹Ù ¶Ç´Â ÆË¾÷ ¸Þ´º»óÀÇ ¸Þ´º
¡ß ÅÇ ´ëÈ»óÀÚ
¡ß ±¸Á¶Àû ¶Ç´Â Å×À̺íÈµÈ Á¤º¸ÀÇ Æ®¸®
¡ß Űº¸µå ´ÜÃàŰ
XUL ÆÄÀÏ¿¡¼ µ¥ÀÌÅ͸¦ Á¦°øÇØ ±×°ÍÀ¸·Î ³»¿ëÀ» ±¸¼ºÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. Ȱ¿ëÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍ´Â ¸ÞÀÏÇÔ, ºÏ¸¶Å©, °Ë»ö °á°ú´Â ¹°·Ð µ¿ÀûÀ¸·Î »ý¼ºµÈ µ¥ÀÌÅͳª RDF ÆÄÀÏ¿¡¼ Á¦°øµÈ µ¥ÀÌÅͷΠǥÇöÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·¸µí XUL ÆÄÀÏÀº ¸Þ´º, À©µµ¿ì, Åø¹Ù °°Àº UI ¿ä¼Ò »Ó¸¸ ¾Æ´Ï¶ó »ç¿ëÀÚ À̺¥Æ®¿¡ ´ëÇÑ ÀÚ¹Ù½ºÅ©¸³Æ® ÇÔ¼ö¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. XPCOM °´Ã¼¸¦ Á¤ÀÇÇØ ¸¸µç ÀÚ¹Ù½ºÅ©¸³Æ®µµ È£ÃâÇÒ ¼ö ÀÖ´Ù.
¶ÇÇÑ XULÀº ·ÎÄà ÆÄÀÏÀ̳ª ¿ø°Ý »çÀÌÆ®¿¡¼ È£ÃâÇØ »ç¿ëÇϰųª ´Ù¿î·ÎµåÇØ ¼³Ä¡ÇÒ ¼ö ÀÖ´Â ÆÐŰÁö·Î ¹èÆ÷ÇÒ ¼ö ÀÖ´Ù. ´ë°³ XUL È®ÀåÀÚ¸¦ °¡Áö´Â ÆÄÀÏ¿¡ ÀúÀåµÇ´Âµ¥ ´Ù¸¥ ÆÄÀÏó·³ ¸ðÁú¶ó·Î ¿¾î º¼ ¼ö ÀÖÀ¸¸ç, À̶§ Á¤ÀÇµÈ UI°¡ µ¿ÀûÀ¸·Î »ý¼ºµÇ¾î ³ªÅ¸³´Ù. ¿ø°Ý »çÀÌÆ®¿¡¼ XUL ÄÁÅÙÃ÷¸¦ Á¦°øÇÒ ¶§´Â À¥ ¼¹ö°¡ ¡®application/vnd. mozilla.xul +xml¡¯ Çü½ÄÀ¸·Î XUL ÆÄÀÏÀ» Àü¼ÛÇÒ ¼ö ÀÖµµ·Ï ¼³Á¤ÇÏ¸é µÈ´Ù.
 |
| <±×¸²3>XUL,CSS,XBL »çÀÌÀÇ µ¥ÀÌÅÍ »óÈ£ ¿¬µ¿ |
ÇÑÆí Á¤ÇØÁø UI ´ë½Å XBL(eXtensible Binding Language)À» »ç¿ëÇÏ¸é º¸´Ù µ¿ÀûÀÎ UI¸¦ ±¸¼ºÇÒ ¼ö ÀÖ´Ù. <±×¸² 3>Àº XUL¿¡¼ °íÀ¯ÇÏ°Ô Á¤ÀÇÇÑ UI ¿ä¼Ò¸¦ CSS¿¡¼ Ç¥ÇöÇϰí XBL·Î Á¤ÀÇÇØ »ç¿ëÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù.
<¸®½ºÆ® 1>Àº nextbackÀ̶ó´Â ¹Ú½º Ŭ·¡½º¸¦ Á¤ÀÇÇϰí À̸¦ CSS¸¦ ÅëÇØ º°µµ XBL·Î ¹ÙÀεùÇÑ ¿¹Á¦ÀÌ´Ù. nextbackÀº Next¿Í Back ¹öưÀ» Æ÷ÇÔÇϰí ÀÖ´Ù.
| <¸®½ºÆ® 1>XUL,CSS,XBLÀ» ÀÌ¿ëÇÑ UI ¸¸µé±â | | | |
XUL (example.xul):
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://example/skin/example.css" type="text/css"?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<box class="nextback"/>
</window>
CSS (example.css):
box.nextback {
-moz-binding: url('chrome://example/skin/example.xml#nextback');
}
XBL (example.xml):
<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl" xmlns:
xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<binding id="nextback">
<content>
<xul:button label="Back"/>
<xul:button label="Next"/>
</content>
</binding>
</bindings>
| |
 |
ÀÌ·± ¹æ¹ýÀº DOMÀ» ÀÌ¿ëÇØ °´Ã¼¸¦ µ¿ÀûÀ¸·Î ¿òÁ÷ÀÌ°í ½ÍÀ» ¶§ »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î ½½¶óÀ̵å¼î¿Í °°Àº °æ¿ì Next, Back ¹öưÀ» ÀÌ¿ëÇØ ƯÁ¤ DOM °´Ã¼¸¦ µ¿ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.ÀÌó·³ XULÀº UI ºÐ¸®¿¡ È¿°úÀûÀÌ°í ¿©·¯ ¿î¿µÃ¼Á¦¸¦ Áö¿øÇϸç Áö¿ªÈ°¡ ½¬¿î ÀåÁ¡ÀÌ ÀÖ´Ù. XML, RDF, CSS µîÀÇ À¥ Ç¥ÁØ ±â¼ú¿¡ ±â¹ÝÇϰí ÀÖ¾î ÀÌ¹Ì °³¹ßÀÚ¿¡°Ô Ä£¼÷ÇÑ ±â¼úÀ̹ǷΠ°³¹ß ½Ã°£µµ Å©°Ô ´ÜÃà½Ãų ¼ö ÀÖ´Ù.
XUL¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸´Â ¸ðÁú¶ó ·¹À̾ƿô ÇÁ·ÎÁ§Æ®(
www.mozilla.org/newlayout) ȤÀº XULPlanet(
www.xulplanet.com)¿¡¼ ãÀ» ¼ö ÀÖ´Ù.
¸ðÁú¶ó ¾ÖÇø®ÄÉÀÌ¼Ç ¼³Ä¡ Çʼöǰ, XPInstall
XPInstallÀº ¸ðÁú¶ó ¾ÖÇø®ÄÉÀ̼ǵéÀ» ¿î¿µÃ¼Á¦¿Í »ó°ü¾øÀÌ ¼³Ä¡Çϰí È®Àå, ¾÷±×·¹À̵åÇÏ´Â µ¥ ÇÊ¿äÇÑ ±â¼úÀÌ´Ù. ÀÌ ±â¼úÀº XPI¶ó°í ºÎ¸£´Â ZIP Çü½ÄÀÇ ¾ÐÃà ÆÄÀÏÀ» ÀÚ¹Ù½ºÅ©¸³Æ® ȤÀº RDF ±â¹ÝÀ¸·Î ¼³Ä¡ÇÏ´Â °ÍÀÌ´Ù. ºê¶ó¿ìÀú ½ºÅ²À̳ª ÆÐÄ¡, È®Àå±â´É, °ÔÄÚ¸¦ ±â¹ÝÀ¸·Î ÇÏ´Â ¾ÖÇø®ÄÉÀÌ¼Ç µîÀ» ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. XPInstallÀ» ÀÌ¿ëÇÏ¸é ¹öÀü È®ÀÎ, ¼³Ä¡¿¡ ´ëÇÑ ·Î±ë(Logging), ·¹Áö½ºÆ®¸® ¼³Á¤ ¾÷µ¥ÀÌÆ® µîÀÇ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ¾î °³¹ßÇÑ ¼ÒÇÁÆ®¿þ¾î¸¦ ½±°Ô ¹èÆ÷ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº xpinstall¿¡¼ »ç¿ëµÇ´Â ÁÖ¿ä ÇÔ¼öÀÌ´Ù.
// Register chrome
registerChrome(PACKAGE | DELAYED_CHROME, getFolder(¡°Chrome¡±,¡±xmlterm.jar¡±), ¡°content/xmlterm/¡±);
registerChrome(SKIN | DELAYED_CHROME, getFolder(¡°Chrome¡±,¡±xmlterm.jar¡±), ¡°skin/modern/xmlterm/¡±);
registerChrome(LOCALE | DELAYED_CHROME, getFolder(¡°Chrome¡±,¡±xmlterm.jar¡±), ¡°locale/en-US/xmlterm/¡±);
if (getLastError() == SUCCESS)
performInstall();
else {
alert(¡°Error detected: ¡°+getLastError());
cancelInstall();
}
ÀÚ¹Ù½ºÅ©¸³Æ®·Î ÀÛ¼ºµÈ install.js¿¡¼ registerChrome¿¡ ¼³Ä¡ÇÒ ÆÄÀÏÀ» ÀÐ¾î Æ¯Á¤ µð·ºÅ丮¿¡ ¼³Ä¡Çϵµ·Ï Áö¿øÇÑ´Ù. XPInstall¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â
www.mozilla.org/scriptableÀ» Âü°íÇÏ¸é µÈ´Ù.
¸ðÁú¶ó ³×Æ®¿öÅ© ¶óÀ̺귯¸®, ³×ÄÚ
ÈçÈ÷ ³×ÄÚ(Necko)¶ó°í ºÒ¸®´Â ¸ðÁú¶ó ³×Æ®¿öÅ© ¶óÀ̺귯¸®´Â È®ÀåµÈ ±â´ÉÀÇ ³×Æ®¿öÅ©¿Í Àü¼Û ±â´ÉÀ» Á¦°øÇÏ´Â OS µ¶¸³ÀûÀÎ API´Ù. URLÀ» ÀνÄÇØ http, ftp, file, chrome µîÀÇ ±âº»ÀûÀÎ ÇÁ·ÎÅäÄÝ Åë½ÅÀ» ¼öÇàÇÑ´Ù. ƯÈ÷ ºñµ¿±âÀûÀÎ I/O¸¦ Áö¿øÇÏ°í µð½ºÅ© ¹× ¸Þ¸ð¸® ij½Ã, ºñµ¿±â DNS ij½Ã, ÇÁ·Ï½Ã ¹× HTTPS ¾ÏÈ£ Åë½Å µîÀÇ ¿ªÇÒµµ ÇÑ´Ù. NeckoÀÇ ±¸Á¶´Â <±×¸² 4>¿Í °°´Ù.
 |
| <±×¸²4>³×ÄÚ ¶óÀ̺귯¸®ÀÇ ±âº» ±¸Á¶ |
ƯÈ÷ °³ÀÎ º¸¾È µµ±¸(Personal Security Manager), ³×Æ®¿öÅ© º¸¾È ¼ºñ½º(Network Security Service) µîÀº SSLÀ» ±â¹ÝÀ¸·Î Çϴ ǥÁØ ¾ÏÈ£È ¾Ë°í¸®Áò°ú ÀÎÁõ¼ °ü¸® µîÀÇ ±â´ÉÀ» ¸ðµÎ Áö¿øÇÑ´Ù. ÃÖ±Ù Çѱ¹¼ÒÇÁÆ®¿þ¾îÁøÈï¿ø¿¡¼ Áö¿øÇÑ ¸ðÁú¶ó ±â¹Ý ÀÎÅÍ³Ý ¹ðÅ· ¼Ö·ç¼Ç ÇÁ·ÎÁ§Æ®(project.oss.or.kr/LinuxPKI)¿¡ µû¸£¸é, ÀüÀÚ ¼¸í¿ë ±¹³» ¾ÏÈ£ Ç¥ÁØÀÎ SEED¸¦ ¸ðÁú¶óÀÇ NSS¿Í ¾ÆÆÄÄ¡ OpenSSL¿¡ °¢°¢ »ðÀÔÇØ Ç¥ÁØ SSL Åë½ÅÀ» ÅëÇØ °øÀÎ ÀÎÁõ ¼¸í µ¥ÀÌÅ͸¦ ±³È¯ÇÏ´Â µ¥ ¼º°øÇß´Ù°í ÇÑ´Ù.
·»´õ¸µ ¿£Áø, °ÔÄÚ
°ÔÄÚ´Â ¸ðÁú¶ó Ç÷§Æû¿¡ ±â¹ÝÀÌ µÇ´Â ·»´õ¸µ ¿£ÁøÀÌ´Ù. °ÔÄÚ´Â 1998³â ³Ý½ºÄÉÀÌÇÁ ¼Ò½º°¡ °ø°³µÈ ÀÌÈÄ ±âÁ¸ÀÇ ¸¶¸®³Ê ·»´õ¸µ ¿£ÁøÀ» ´Ù½Ã °³¹ßÇÑ °ÍÀ¸·Î, ±¤¹üÀ§ÇÑ À¥ Ç¥ÁØ ±â¼ú Áï, HTML, XHTML, CSS, DOM, XML, RDF µîÀ» Ç¥½ÃÇÒ ¼ö ÀÖ´Â ±â¹Ý Ç÷§ÆûÀÌ´Ù. ÇöÀç °ÔÄÚ¸¦ ºñ·ÔÇØ MSÀÇ Æ®¸®µ§Æ®, ¾ÖÇÃÀÇ KHTML, ¿ÀÆä¶óÀÇ ·»´õ¸µ ¿£Áø µîÀÌ ³ª¿Í ÀÖ´Ù. <Ç¥ 2>¿Í °°ÀÌ ÀÌ ¿£Áøµé¿¡ ´ëÇÑ ±âº» ºñ±³¸¦ º¸¸é Å©·Î½º Ç÷§Æû ¿£ÁøÀÌ Àû¿ë ºñ¿ëÀÌ Àú·ÅÇÑ °ÍÀº ¹°·Ð ¿©·¯ °¡Áö Ãø¸é¿¡¼ ¿ì¼öÇÏ´Ù´Â »ç½ÇÀ» ¾Ë ¼ö ÀÖ´Ù.
 |
| <Ç¥2>°¢ ·»´õ¸µ ±â¼ú¿¡ ´ëÇÑ ºñ±³ |
½ÇÁ¦·Î ÀÌ ¶§¹®¿¡ °ÔÄÚ´Â ¿¡ÇÇÆÄ´Ï(Epiphany), ºä(Nvu, HTML ÆíÁý±â), °¥·¹¿Â(Galeon), Ä«¹Ì³ë(Camino) °°Àº À¥ ºê¶ó¿ìÀúÀÇ ±âº» ·»´õ¸µ ¿£ÁøÀ¸·Î žÀçµÅ ÀÖ´Ù. ¸ðµç °³¹ß ȯ°æ¿¡¼ ½±°Ô ÀÓº£µùÇÒ ¼ö ÀÖÀ¸¸ç °¡´ÉÇÑ Å©±â¸¦ ÁÙ¿© ¸Þ¸ð¸® Á¡À¯À²ÀÌ ³·°í ¼Óµµ¸¦ ºü¸£°Ô ÇÏ´Â ÃÖÀûÈ ÀÛ¾÷À» °ÅÃÄ ¿Ô´Ù. ÀÌ·¯ÇÑ Áß¿äÇÑ ±â¼úÀû ÁøÀüÀ» ÅëÇØ ÆÄÀÌ¾îÆø½º¶ó´Â ÀÛ°í ºü¸¥ ºê¶ó¿ìÀú¸¦ ¼±º¸ÀÏ ¼ö ÀÖ¾ú°í, ÃÖ±Ù¿¡´Â ³ëŰ¾Æ¿¡¼ Áö¿øÇÏ´Â ¹Ì´Ï¸ð(Minimo)¶ó´Â ¸ð¹ÙÀÏ ºê¶ó¿ìÀú±îÁö À̾îÁö°í ÀÖ´Ù.
ÀÌÁ¦ °ÔÄÚ¸¦ ÅëÇØ µ¥ÀÌÅͰ¡ ½ÇÁ¦·Î ¾î¶»°Ô 󸮵ǴÂÁö ¾Ë¾Æº¸ÀÚ. ÀÎÅͳÝÀ̳ª ·ÎÄà ÆÄÀϷκÎÅÍ HTML µ¥ÀÌÅͰ¡ °ÔÄÚ·Î µé¾î¿À¸é HTML ÆÄ¼°¡ ±¸¹® ºÐ¼®À» ½ÃÀÛÇÑ´Ù. ÄÁÅÙÃ÷ ¸ðµ¨(contents model)ÀÌ ºÐ¼®µÈ µ¥ÀÌÅ͸¦ Å« Æ®¸® ±¸Á¶·Î ´Ã¾î ³õ´Âµ¥ ÀÌ ±¸Á¶´Â W3C ¹®¼ °´Ã¼ ¸ðµ¨(DOM)¿¡ ±Ù°ÅÇϰí ÀÖ´Ù.
±×¸®°í CSS ÇÁ·¹ÀÓ ±¸Á¶Ã¼(frame constructor) µ¥ÀÌÅ͸¦ ÇÁ·¹ÀÓ ³»¿¡ ³õ´Â´Ù. À̰ÍÀº HTMLÀÇ ÇÁ·¹ÀÓÀÌ ¾Æ´Ï¶ó DOMÀÇ ¿ä¼Ò°¡ Ç¥½ÃµÇ´Â Ãß»óÀûÀÎ ¹Ú½º·Î, ¿©±â¼µµ ÇÁ·¹ÀÓ Æ®¸®°¡ ¸¸µé¾îÁ® µ¥ÀÌÅ͸¦ Ç¥½ÃÇϱâ À§ÇØ ±×¸²°ú ±ÛÀÚÀÇ À§Ä¡¸¦ °è»êÇÑ´Ù. ½ÇÁ¦ È¸é »óÀÇ À§Ä¡´Â CSS ±ÔÄ¢¿¡ µû¶ó °è»êµÇ´Âµ¥ À̶§ ¸ð´ÏÅÍ È¸é°ú ÇÁ¸°ÅͰ¡ ´Ù¸¥ ¡®Ç¥Çö(presentation)¡¯ ¸ðµå¸¦ °¡Áö°Ô µÈ´Ù.
 |
| <±×¸²5>°ÔÄÚ ³»ºÎÀÇ HTML µ¥ÀÌÅÍ Ã³¸® ¸ð½Äµµ |
<±×¸² 5>´Â ÀÌ·¯ÇÑ ÀÏ·ÃÀÇ °úÁ¤À» µµ½ÄÈÇÑ °ÍÀÌ´Ù. À§Ä¡ °è»êÀÌ °è¼Ó µÇ´Â µ¿¾È ¸®Ç÷οì(reflow) °úÁ¤À» ÅëÇØ »õ Á¤º¸°¡ ½Ã½ºÅÛ ¾ÈÀ¸·Î °è¼Ó À¯ÀԵǴµ¥, ½Ã½ºÅÛ Æ®¸®¸¦ º¯°æ½ÃŲ Ç׸ñÀº ¡®Á¶Àâ(dirty)¡¯À̶ó°í Ç¥½ÃÇϰí ÀçÀÛ¾÷ÇØ ¿Ï·á(clean)µÉ ¶§±îÁö °è¼Ó Ç׸ñÀ» ó¸®ÇÑ´Ù.
ÇÁ·¹ÀÓ Æ®¸® ¾ÈÀÇ ¸ðµç ¾ÆÀÌÅÛÀº ±× ÄÁÅÙÃ÷ ¸ðµ¨ ¾È¿¡ ÀÏÄ¡ÇÏ´Â ¾ÆÀÌÅÛÀ¸·Î µÇµ¹¸®´Â Æ÷ÀÎÅ͸¦ °¡Áö°í ÀÖ´Ù. Áï Æ¯Á¤ ¿ä¼Ò¸¦ º¸ÀÌÁö ¾ÊÀº »óÅ¿¡¼(hidden) º¸À̵µ·Ï(visible)ÇÒ ¶§ DOM API¸¦ »ç¿ëÇØ ÄÁÅÙÃ÷ ¸ðµ¨ ¾ÈÀÇ º¯°æÀÌ ÇÁ·¹ÀÓ Æ®¸®¿¡¼ °°Àº º¯È¸¦ °¡Á®¿Â´Ù.
´ÙÀ½ ´Ü°è´Â Ç¥½Ã °ü¸®ÀÚ(view manager)·Î, ÀÛÀº ¿¹¿Ü »çÇ×À» ó¸®Çϰųª ÇÁ·¹ÀÓ ±¸Á¶Ã¼°¡ ±×¸²À» Àаí ó¸®ÇÏ´Â ±âº» °úÁ¤ÀÌ´Ù. µð½ºÇ÷¹ÀÌ¿¡ µ¥ÀÌÅ͸¦ Ç¥½ÃÇÏ´Â µ¥´Â GFX³ª WIDGET °°Àº ±×·¡ÇÈ ¿£ÁøÀ» ÀÌ¿ëÇÑ´Ù. ¸ðÁú¶ó ¼Ò½º¿¡¼ ÄÁÅÙÃ÷ ¸ðµ¨ÀÇ ÄÚµå´Â /mozilla/ content Æú´õ¸¦, ÇÁ·¹ÀÓ ±¸Á¶Ã¼¿Í CSS ¸®Ç÷οì ÄÚµå´Â mozilla/ layout, Ç¥½Ã °ü¸®ÀÚ ÄÚµå´Â /mozilla/view, DOM API ÄÚµå´Â /mozilla/dom Æú´õ¸¦ Âü°íÇÏ¸é µÈ´Ù.
°ÔÄÚ·Î °£´ÜÇÑ ¾ÖÇø®ÄÉÀÌ¼Ç ¸¸µé±â
°ÔÄÚ´Â ±âº»ÀûÀ¸·Î ¿©·¯ °¡Áö °³¹ß ȯ°æ¿¡ ÀÓº£µùÇØ ÀÚüÀûÀÎ ºê¶ó¿ìÀú¸¦ °³¹ßÇÒ ¼ö ÀÖ´Ù. °ÔÄÚ¸¦ ÀÌ¿ëÇØ »õ·Î¿î À¥ ºê¶ó¿ìÀú¸¦ ¸¸µé ¶§ ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â ¸î °¡Áö ÀÎÅÍÆäÀ̽º°¡ Àִµ¥, ÀÌ °¡¿îµ¥ °ÔÄÚ ÃʱâÈ¿Í Á¾·á¿¡´Â ÃʱâÈ ÇÔ¼ö(NS_InitEmbedding)¿Í ¼Ë´Ù¿î ÇÔ¼ö(NS_TermEmbedding) µî 2°³ÀÇ C++ ÇÔ¼ö°¡ »ç¿ëµÈ´Ù.
ÃʱâÈ µ¿¾È¿¡ nsIWebBrower ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇϸé ÀüÇüÀûÀÎ ºê¶ó¿ìÀúÀÇ À©µµ¿ì¸¦ Ç¥½ÃÇÏ¸é¼ Àüü ÇÁ·Î±×·¥ÀÇ chrome°ú ¿¬°á½Ãų ¼ö ÀÖ°í DOM °´Ã¼¸¦ ¾ò´Â µ¥µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. nsIWeb BrowserSetupÀº ºê¶ó¿ìÀú°¡ ¿¸± ¶§ ±×¸²À» Ç¥½ÃÇÒÁö ¿©ºÎ µî°ú °°Àº ÀϹÝÀûÀÎ ¼³Á¤À» ÇÏ´Â µ¥ »ç¿ëÇϸç nsIWebNavigationÀº URI ¹æ¹® ±â·Ï¿¡¼ ¾Õ ¶Ç´Â µÚ·Î °¡´Â Á¦¾î¸¦ ´ã´çÇÑ´Ù. nsIBaseWindow´Â À©µµ¿ì¿Í ±âº»ÀûÀÎ ¸í·É(Å©±â, À§Ä¡ , ŸÀÌÆ² °Ë»ö µî)À» Ç¥ÇöÇϸç nsISHistory´Â ¹æ¹® ±â·ÏÀ», nsIWebBrowserFind´Â °Ë»ö ¹× ½ÇÇàÀ» Á¦¾îÇÑ´Ù.
nsIWebBrowserChromeÀº °ÔÄÚ À¥ ºê¶ó¿ìÀúÀÇ °¡Àå ±âÃÊ ÀÎÅÍÆäÀ̽º·Î nsIWebBrowser¸¦ ÀÌ¿ëÇØ À¥ ºê¶ó¿ìÀú·Î ¸¸µé ¼ö ÀÖ´Â Çʼö ÀÎÅÍÆäÀ̽ºÀÌ´Ù. nsIEmbeddingSiteWindow´Â °ÔÄÚ¿¡ À©µµ¿ì Å©±â¸¦ º¯°æÇϰųª ¼û±â°Å³ª À©µµ¿ì ŸÀÌÆ² µîÀ» º¯°æÇÒ ¶§ »ç¿ëÇϸç nsIContextMenuListener´Â »ç¿ëÀÚ°¡ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯ÇßÀ» ¶§ ³ªÅ¸³ª´Â ¸Þ´º¸¦ ¾Ë°í ½ÍÀ» ¶§ »ç¿ëÇÏ´Â ÀÎÅÍÆäÀ̽ºÀÌ´Ù.
 |
| <±×¸²6>°ÔÄÚ ÀÓº£µù API¸¦ ÀÌ¿ëÇÑ ¾ÖÇø® ÄÉÀÌ¼Ç °³¹ß ±¸Á¶ |
°ÔÄÚÀÇ ³»ºÎ
ÀÌÁ¦ À©µµ¿ìÀÇ MFC¸¦ ÀÌ¿ëÇØ °ÔÄÚ¸¦ »ç¿ëÇÏ´Â Äڵ带 »ìÆìº¸ÀÚ. ÀÌ ¼Ò½ºÄÚµå´Â ÀÌ¹Ì ¸ðÁú¶ó Å×½ºÆ® Äڵ忡 Æ÷ÇԵŠÀÖÀ¸¸ç ´Ù¸¥ ¿î¿µÃ¼Á¦³ª °³¹ß ȯ°æ¿¡ ´ëÇÑ ¿¹Á¦µµ ¼Ò°³µÅ ÀÖÀ¸´Ï Âü°íÇϱ⠹ٶõ´Ù(l
lxr.mozilla.org/seamonkey/source/embedding/tests/mfcembed/).
°ÔÄÚ¸¦ »ç¿ëÇϱâ Àü¿¡ ¸ÕÀú ÀÓº£µù ·¹À̾ ÃʱâÈÇØ¾ß ÇÑ´Ù. ±×·¯¸é XPCOMÀÌ ½ÃÀ۵ǰí ÄÄÆ÷³ÍÆ®°¡ µî·ÏµÅ ±Û·Î¹úÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÓº£µù ·¹À̾î´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¾÷ µð·ºÅ丮¸¦ °¡¸£Å°´Â nsnull°ú ÇÁ·ÎÇÊ ÆÄÀÏ À§Ä¡¸¦ Áö½ÃÇÏ´Â provider ÆÄ¶ó¹ÌÅͷΠȣÃâÇÒ ¼ö ÀÖ´Ù.
nsresult rv;
rv = NS_InitEmbedding(nsnull, provider);
if(NS_FAILED(rv))
{
ASSERT(FALSE);
return FALSE;
}
ÀÓº£µùÇÑ BrowserView °´Ã¼´Â CreateBrowser ¸Þ½îµå¸¦ È£ÃâÇÑ´Ù. °¢ ºê¶ó¿ìÀú °´Ã¼´Â ´ÜÀÏ ºê¶ó¿ìÀú âÀ» ´ëÇ¥ÇÑ´Ù. ºê¶ó¿ìÀú ÀνºÅϽº¸¦ »ý¼ºÇϱâ À§ÇØ »ý¼ºÇÑ BrowserView °´Ã¼´Â ¸Þ½îµå Create Browser¸¦ È£ÃâÇÑ´Ù. °¢°¢ÀÇ ºê¶ó¿ìÀú °´Ã¼(webbrowser)´Â ´ÜÀÏ ºê¶ó¿ìÀú À©µµ¿ì¸¦ Ç¥ÇöÇÏ¸ç Æ¯È÷ À¯Æ¿¸®Æ¼ ¸í·É do_Create Instance¿Í ¸ÅÅ©·Î »ç¿ë¿¡´Â ÁÖÀÇÇØ¾ß ÇÑ´Ù.
HRESULT CBrowserView::CreateBrowser()
{
nsresult rv;
mWebBrowser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID, &rv);
if(NS_FAILED(rv))
return rv;
Çѹø nsWebBrowser °´Ã¼°¡ ¸¸µé¾îÁö¸é ±× ¾ÖÇø®ÄÉÀ̼ÇÀº nsIWebNavigation ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ mWebNav ¸â¹ö º¯¼ö·Î ÀÐ¾î ¿À±â À§ÇØ do_QueryInterface¸¦ »ç¿ëÇÑ´Ù. À̰ÍÀº À¥ ÆäÀÌÁö ³×ºñ°ÔÀ̼ǿ¡¼ »ç¿ëµÈ´Ù.
rv = NS_OK;
mWebNav = do_QueryInterface(mWebBrowser, &rv);
if(NS_FAILED(rv))
return rv;
±× ´ÙÀ½ CBrowserImpl °´Ã¼°¡ ¸¸µé¾îÁö°í °³¹ßÀÚ´Â °ÔÄÚ°¡ ¾ÖÇø®ÄÉÀ̼ǰú Åë½Å °¡´ÉÇÑ ¿©·¯ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¾ß ÇÑ´Ù. »ùÇÿ¡ ÀÖ´Â CBrowserImplÀº ±×·¯ÇÑ ÀÎÅÍÆäÀ̽º¸¦ ¿ä±¸ÇÏ´Â °´Ã¼·Î ±¸ÇöµÇ¾î¾ß Çϰí SetContainerWindow()·Î È£ÃâµÉ ¶§ »ç¿ëµÈ´Ù.
mpBrowserImpl = new CBrowserImpl();
if(mpBrowserImpl == nsnull)
return NS_ERROR_OUT_OF_MEMORY;
mWebBrowser ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅÍ´Â CBrowserImpl ¸Þ½îµå¸¦ ÅëÇØ¼ ¹Þ´Â´Ù. Ç÷§Æû¿¡ ÀÇÁ¸ÇÏ´Â BrowserFrameGlue ÀÎÅÍÆäÀ̽º¿¡ 2°³ Æ÷ÀÎÅ͵µ °Ç³×¹Þ¾Æ º¸Á¸ÇÑ´Ù. BrowserFrameGlue Æ÷ÀÎÅÍ¿¡ ÀÇÇØ CBrowserImplÀÌ »óÅ ¹Ù³ª ÁøÇà ¹Ù µîÀ» °»½ÅÇϱâ À§Çؼ ¸Þ½îµå¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.
mpBrowserImpl->Init(mpBrowserFrameGlue, mWebBrowser);
mpBrowserImpl->AddRef();
ÀÌÁ¦ °³¹ßÀÚ´Â ´ÙÀ½°ú °°ÀÌ webbrowser¿Í °ü·ÃµÈ chrome °´Ã¼¸¦ ¿¬°áÇÒ ¼ö ÀÖ´Ù.
mWebBrowser->SetContainerWindow
(NS_STATIC_CAST(nsIWebBrowserChrome*, mpBrowserImpl));
nsCOMPtrsetup(do_QueryInterface(mWebBrowser));
if (setup)
setup->SetProperty(nsIWebBrowserSetup::SETUP_IS_CHROME_WRAPPER,PR_TRUE);
ÀÌÁ¦ ´ÙÀ½°ú °°ÀÌ À¥ ºê¶ó¿ìÀú À©µµ¿ì¸¦ ¸¸µç´Ù.
rv = NS_OK;
mBaseWindow = do_QueryInterface(mWebBrowser, &rv);
if(NS_FAILED(rv))
return rv;
¸¸µç À¥ ºê¶ó¿ìÀú¸¦ ´ÙÀ½ Äڵ忡¼ ±âº»ÀûÀÎ À§Ä¡¸¦ ¹Þ´Â´Ù.
RECT rcLocation;
GetClientRect(&rcLocation);
if(IsRectEmpty(&rcLocation))
{
rcLocation.bottom++;
rcLocation.top++;
}
rv = mBaseWindow->InitWindow(nsNativeWidget(m_hWnd),
nsnull,0, 0, rcLocation.right - rcLocation.left,
rcLocation.bottom - rcLocation.top);
rv = mBaseWindow->Create();
m_hWnd´Â ÀÌ¿Í °°Àº È£ÃâÀ» ÅëÇØ InitWindow()·Î ¿Å°ÜÁø´Ù. CBrowserView´Â CWnd·ÎºÎÅÍ m_hWnd¸¦ »ó¼Ó ¹Þ°í ÀÓº£µù ºê¶ó¿ìÀúÀÇ ±âº» âÀ¸·Î »ç¿ëµÈ´Ù. BrowserImpl °´Ã¼´Â nsIWebProgress Listener¿¡ ´õÇØÁö°í ÁøÇà ¸Þ½ÃÁö¸¦ ¹Þ¾ÆµéÀÏ Áغñ°¡ µÈ´Ù. ÀÌ callbacks Á¤º¸µéÀº »óÅ ¹Ù³ª ÁøÇà ¹Ù¿¡ Á¤º¸¸¦ ¾÷µ¥ÀÌÆ®ÇÏ°Ô µÈ´Ù.
nsWeakPtr weakling
(dont_AddRef(NS_GetWeakReference
(NS_STATIC_CAST(nsIWebProgressListener*, mpBrowserImpl))));
void mWebBrowser->AddWebBrowserListener(weakling, NS_GET_IID(nsIWebProgressListener));
ÀÌÁ¦ ¸¶Áö¸·À¸·Î À¥ ºê¶ó¿ìÀú À©µµ¿ì¸¦ Ç¥½ÃÇÑ´Ù.
mBaseWindow->SetVisibility(PR_TRUE);
nsCOMPtr print(do_GetInterface(mWebBrowser));
if (print)
{
print->GetNewPrintSettings(getter_AddRefs(m_PrintSettings));
}
return S_OK;
À¥ ÆäÀÌÁö ¹æ¹® ±â·ÏÀ» Ž»öÇϱâ À§Çؼ´Â nsIWebNavigation ¼¼¼Ç ±â·Ï¿¡ ÀúÀåµÈ Á¤º¸¸¦ ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
void CBrowserView::OnNavBack()
{
if(mWebNav)
mWebNav->GoBack();
}
°ÔÄÚ ¿£ÁøÀÇ ÀÓº£µù ¿¹Á¦°¡ ´ã±ä ¼Ò½º µð·ºÅ丮¿¡´Â MFC »Ó¸¸ ¾Æ´Ï¶ó Win32¿Í ¸ÅŲÅä½Ã, OS/2¿¡¼ ÀÓº£µùÇÏ´Â ¼Ò½ºµµ Æ÷ÇԵŠÀÖ´Ù. ¶ÇÇÑ ¾Õ¼ ¾ð±ÞÇÑ ¸ð¹ÙÀÏ ±â¹ÝÀÇ À¥ ºê¶ó¿ìÀúÀÎ ¹Ì´Ï¸ðÀÇ ¼Ò½ºÄÚµå(
lxr.mozilla.org/seamonkey/source/embedding/minimo/)µµ Âü°íÇϱ⠹ٶõ´Ù.
 |
| <ȸé4>LXR À¥»çÀÌÆ® |
¼ÒÇÁÆ®¿þ¾î °øÇÐÀ¸·Î¼ ¸ðÁú¶ó
¸ðÁú¶ó ÇÁ·ÎÁ§Æ®´Â ´Ù¼öÀÇ °³¹ßÀÚ°¡ °øµ¿À¸·Î ÀÛ¾÷ÇÏ´Â °³¹ß ½Ã½ºÅÛÀÌ´Ù. ÀÌ·¯ÇÑ °Å´ëÇÑ ÇÁ·ÎÁ§Æ®¸¦ ¿òÁ÷ÀÌ´Â µ¥´Â ÇÊ¿¬ÀûÀ¸·Î °¢Á¾ ±ÔÄ¢°ú Áö¿ø ½Ã½ºÅÛÀÌ °®Ãß¾îÁ® ÀÖ´Ù. ƯÈ÷ ¼Ò½ºÀÇ ¿¶÷°ú ¼öÁ¤ÀÌ ¸Å¿ì ÀÚÀ¯·Î¿î ¸ðÁú¶ó°¡ ´Ù¼öÀÇ ÀǰßÀ» Á¾ÇÕÇØ ¿Ã¹Ù¸¥ ÄÚµå·Î ³ª°¡°Ô Çϱâ À§ÇØ »ç¿ëÇÏ´Â ¹æ¹ý·ÐÀº °³¹ß ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÏ´Â ¸ðµç °³¹ßÀÚµéÀÌ Âü°íÇÒ ¸¸ÇÏ´Ù.
¸ðÁú¶óÀÇ ¼Ò½ºÄÚµå ¼öÁ¤¿¡´Â µÎ ´Ü°èÀÇ ÄÚµå ¸®ºä ±ÔÄ¢ÀÌ ÀÖ´Ù. ¸ÕÀú ¼öÁ¤µÈ ÆÐÄ¡³ª ¼Ò½º°¡ ¹ö±×Áú¶ó¸¦ ÅëÇØ Á¦ÃâµÇ¾úÀ» ¶§, °¢ ¸ðµâÀÇ ¼ÒÀ¯ÀÚ°¡ ù ¹øÂ° ¸®ºä¸¦ ÇÑ´Ù. ÀÌ °úÁ¤¿¡¼ Çã°¡°¡ ³ª¸é ¸ðÁú¶ó ÇÁ·ÎÁ§Æ®¸¦ ¿òÁ÷ÀÌ´Â »ç¶÷µé·ÎºÎÅÍ ½´ÆÛ ¸®ºä¶ó´Â ´Ü°è¸¦ °ÅÄ£´Ù.
¾çÂÊÀÇ ¸®ºä¸¦ ¹Þ°í ³ª¸é ´ëºÎºÐÀÇ ÄÚµå´Â ¼Ò½º Æ®¸®¿¡ üũÀεȴÙ. ¸¹Àº üũÀÎÀÌ ¼öÇàµÇ°í Àֱ⠶§¹®¿¡ ¸ðÁú¶ó´Â ÄÚµå ¼öÁ¤¿¡ µû¶ó ¾ÖÇø®ÄÉÀ̼ÇÀÌ µ¿ÀÛÇÏÁö ¾Ê°Å³ª ÄÄÆÄÀÏÇÏÁö ¸øÇÏ´Â »óȲ¿¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ¼Ò½º Æ®¸®¿¡ ¹®Á¦°¡ »ý±â¸é üũÀÎÀº Áß´ÜµÇ°í ¹®Á¦ ÇØ°á¿¡ ÁýÁßÇÑ´Ù.
ÀÌ·¯ÇÑ ¼Ò½ºÄÚµå´Â ¸î ÁÖ¿¡ Çѹø¾¿ »õ·Î¿î ½º³À¼¦(snapshot)À» ¸¸µé¾î ¹ö±×¸¦ ¼öÁ¤ÇÏ°Ô µÈ´Ù. °³¹ß ·Îµå¸Ê¿¡ µû¶ó Á¦Ç°À» Ãâ½ÃÇØ¾ß ÇÒ ¶§´Â ¸çÄ¥ µ¿¾È µå¶óÀ̹ö(driver)¶ó°í ºÒ¸®´Â ¸î¸î »ç¶÷µéÀÇ ½ÂÀÎÀ» ¹Þ¾Æ¾ß¸¸ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. µå¶óÀ̹öµéÀº ¼Ò½ºÄڵ尡 ¸ñÇ¥·Î ÇÑ °³¹ß ·Îµå¸Ê¿¡ µû¶ó Á¦´ë·Î ÁغñµÇ¾ú´ÂÁö ¼Ò½ºÀÇ »óŸ¦ Á¡°ËÇϰí ÀÏÁ¤À» ¸¸µå´Â ÀÛ¾÷À» ÇÑ´Ù.
¸ðÁú¶óÀÇ Á¦Ç° Ãâ½Ã´Â ¼Ò½ºÄÚµå¿Í ¾ÐÃà ¹öÀü, ¼³Ä¡ ¹öÀü µîÀ¸·Î ³ª´©¾î Á¦°øµÇ´Âµ¥, °³¹ß ·Îµå¸Ê¿¡ µû¶ó <Ç¥ 3>°ú °°Àº Ãâ½Ã »çÀÌŬÀ» °¡Áö°í ÀÖ´Ù. ƯÈ÷ ÀÏÀÏ ¹öÀüÀ» ÅëÇØ ÇÏ·ç ´ÜÀ§·Î ¼öÁ¤µÈ »çÇ×À» È®ÀÎÇÏ´Â ¹öÀüÀ» ³»°í ÀÖ´Ù.
°Å´ëÇÑ ÇÁ·ÎÁ§Æ®¸¦ Á¶Á÷ÀûÀ¸·Î ¿òÁ÷À̱â À§ÇØ ÇʼöÀûÀ¸·Î ¸ðÁú¶ó ÇÁ·ÎÁ§Æ®¿¡¼´Â Â÷¿ëµÇ°Å³ª Á÷Á¢ °³¹ßÇÏ¿© »ç¿ëÇϰí ÀÖ´Â Áö¿ø ½Ã½ºÅÛµéÀÌ Á¸ÀçÇÑ´Ù. À̵é Áß ÀϺδ ¼Ò½º°¡ °ø°³µÅ ¼ÒÇÁÆ®¿þ¾î °³¹ß ÇÁ·ÎÁ§Æ®¿¡ µµ¿òÀ» ÁÖ°í ÀÖ´Ù.
 |
| <Ç¥3>¸ðÁú¶ó Á¦Ç°ÀÇ Ãâ½Ã »çÀÌŬ µµÇ¥ |
¸ðÁú¶óÀÇ ¼Ò½º °ü¸®, CVS
¸ðÁú¶ó ÇÁ·ÎÁ§Æ®¿¡¼´Â ¼Ò½º °ü¸®¸¦ À§ÇØ CVS¸¦ »ç¿ëÇϰí ÀÖ´Ù. CVS´Â ¹öÀü °ü¸®°¡ °¡´ÉÇÏ°í ¼Ò½º¸¦ ºÐ±âÇØ °³¹ßÇÒ ¼ö ÀÖ´Ù. ·Îµå¸Ê¿¡ µû¶ó Á¦Ç°ÀÌ Ãâ½ÃµÉ ¶§´Â ±âÁ¸ ¼Ò½ºÄڵ忡¼ ºÐ±âÇϴµ¥, ÀÌ´Â ¿ø·¡ ¼Ò½ºÄÚµå´Â °³¹ßÀ» °è¼Ó ÁøÇàÇϰí Ãâ½Ã¸¦ À§ÇÑ ¼Ò½ºÄڵ尡 »õ·Î ÀÛ¾÷¿¡ µé¾î°¥ ¼ö Àֱ⠶§¹®ÀÌ´Ù. CVS´Â µ¿½Ã ÀÛ¾÷À̳ª Àü ¼¼°èÀûÀÎ Á¢±ÙÀÌ °¡´ÉÇϱ⠶§¹®¿¡ ¸¹ÀÌ »ç¿ëµÇ´Â Çü»ó °ü¸® µµ±¸ÀÌ´Ù.
¸ðÁú¶ó ¼Ò½ºÄڵ忡 ´ëÇÑ °Ë»ö¿£Áø, LXR
LXRÀº ¸ðÁú¶ó ¼Ò½ºÄڵ带 º¸±â À§ÇÑ °Ë»ö »çÀÌÆ®(
lxr.mozilla.org)ÀÌ´Ù. Æ®¸® ±¸Á¶ÀÇ ³»¿ëÀ» Ŭ¸¯ÇÏ´Â °ÍÀ¸·Î ¼Ò½ºÄڵ带 º¼ ¼ö ÀÖÀ¸¸ç µð·ºÅ丮 º°·Î ÀÏ, ÁÖ, ¿ù ´ÜÀ§ÀÇ º¯°æ À̷µµ ¹Ù·Î È®ÀÎÇÒ ¼ö ÀÖ´Ù. LXRÀÇ ¼Ò½ºÄÚµå´Â ¸®´ª½º Glimpse ¿£ÁøÀ¸·Î ³ª¿Â ¿ÀǼҽº·Î À̸¦ ¸ðÁú¶ó ÇÁ·ÎÁ§Æ® ³»ºÎÀûÀ¸·Î ¼öÁ¤Çؼ »ç¿ëÇϰí ÀÖ´Ù.
ÄÚµå ¼öÁ¤ ³»¿ªÀ» ÃßÀûÇÏ´Â º»»çÀÌ
º»»çÀÌ(bonsai.mozilla.org)´Â ¼Ò½ºÄڵ忡¼ ´©°¡ ¾ðÁ¦ ¾î¶² Äڵ带 ¼öÁ¤Çß´ÂÁö ±× ³»¿ªÀ» º¼ ¼ö ÀÖ´Â À¥ »çÀÌÆ®ÀÌ´Ù. º¯°æ ÀÌ·ÂÀ» ¹®ÀÇÇÒ ¼ö ÀÖ´Â °·ÂÇÑ ÀÎÅÍÆäÀ̽ºµµ Á¦°øÇÑ´Ù.
¿î¿µÃ¼Á¦º° ÀÚµ¿ ÄÄÆÄÀÏ ½Ã½ºÅÛ, ƾ´õ¹Ú½º
¸ðÁú¶ó´Â ¿Ï¼ºµÈ ¼Ò½ºÄڵ带 ¿©·¯ ¿î¿µÃ¼Á¦¿¡ µû¶ó ÀÚµ¿À¸·Î ÄÄÆÄÀÏ ÇÏ´Â ½Ã½ºÅÛÀ» °®Ãß°í ÀÖ´Ù. ƾ´õ¹Ú½º´Â ÄÄÆÄÀÏ °úÁ¤°ú °á°ú¿¡ ´ëÇØ º¸°íÇØ ÁÖ´Â À¥ »çÀÌÆ®ÀÌ´Ù. ÄÄÆÄÀÏÀÌ ³¡³µÀ» ¶§ ÇÁ·Î±×·¥ÀÌ ¿Ã¹Ù¸£°Ô µ¿ÀÛÇÏ´ÂÁö üũÇϱâ À§ÇÑ ¸î °¡Áö ÀÚµ¿ Å×½ºÆ®°¡ ½ÇÇàµÇ´Âµ¥ ÀÌ·¯ÇÑ Å×½ºÆ®ÀÇ °á°ú¸¦ ƾ´õ¹Ú½º¿¡¼ º¼ ¼ö ÀÖ´Ù. ƾ´õ¹Ú½º´Â ¼¼·ÎÃàÀÌ ½Ã°£ÀÌ¸ç °¡·ÎÃàÀÌ OS¸¦ ³ªÅ¸³»¹Ç·Î ½Ã°£¿¡ µû¶ó ¾î¶² º¯È°¡ ÀÖ¾ú´ÂÁö ¹Ù·Î ¾Ë ¼ö ÀÖ´Ù.
Å×½ºÆ® °á°ú´Â »ö»óÀ¸·Î ³ªÅ¸³»´Âµ¥ ÃÊ·Ï»öÀº ¹®Á¦°¡ ¾ø´Ù´Â °ÍÀ» ³ªÅ¸³½´Ù. ³ë¶õ»öÀº ÄÄÆÄÀÏÁßÀÎ °æ¿ì, ¿À·»Áö»öÀº ÄÄÆÄÀϰú ºôµå´Â ³¡³µÁö¸¸ ÀÚµ¿ Å×½ºÆ®¿¡¼ ½ÇÆÐÇÑ °ÍÀ» ³ªÅ¸³½´Ù. ºÓÀº»öÀº ¼Ò½ºÄÚµå ÄÄÆÄÀÏÀÌ ¼º°øÇÏÁö ¾ÊÀº °ÍÀ» ³ªÅ¸³»¸ç °³¹ßÀÌ ÁߴܵÆÀ½À» ÀǹÌÇÑ´Ù.
ÀÌ ±â´ÉÀº ¸Å¿ì Áß¿äÇÑ °ÍÀ¸·Î, ¼Ò½ºÄڵ尡 º¯°æµÈ ÈÄ¿¡ ³ªÅ¸³ª´Â °á°ú¸¦ ÅëÇØ ¹®Á¦¸¦ ½±°Ô Áø´ÜÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù. ÄÄÆÄÀÏÀÌ ½ÇÆÐÇÑ °æ¿ì ½ÇÆÐ ·Î±×¸¦ ³²°Ü ÁÖ°í ÀÌ¿Í °ü·ÃµÈ üũÀÎ Ç׸ñµµ Ç¥½ÃµÈ´Ù.¸ÖƼ Ç÷§Æû ȯ°æ¿¡¼ ÀÏÀÏ ¹öÀüÀ» ¸¸µé¾î ³»´Â ÇÁ·ÎÁ§Æ®ÀÇ Æ¯Â¡»ó ²À ÇÊ¿äÇÑ °³¹ß µµ±¸ÀÌ´Ù.
 |
| <ȸé5>º»»çÀÌ À¥ »çÀÌÆ® |
À¥ ±â¹Ý ¹ö±× ÃßÀû ½Ã½ºÅÛ, ¹ö±×Áú¶ó
¹ö±×Áú¶ó´Â À¥ ±â¹ÝÀÇ ¹ö±× ÃßÀû ½Ã½ºÅÛÀÌ´Ù. Á¦Ç°¿¡ ¾î¶² ¹®Á¦°¡ ¹ß»ýÇßÀ» ¶§ »ç¿ëÀÚ´Â ¾ðÁ¦¶óµµ ¹ö±×¸¦ Á¦ÃâÇÒ ¼ö ÀÖ´Ù. ¹ö±×°¡ Á¦ÃâµÇ¸é ¹øÈ£°¡ ¹ß±ÞµÇ°í ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÏ´Â »ç¶÷¿¡°Ô Àü´ÞµÈ´Ù. ¹®Á¦ ÇØ°áÀ» À§ÇØ ÄÚµå»óÀÇ ¹®Á¦ ÇØ°á ¹æ¹ýÀ» ¾Ë°í ÀÖÀ¸¸é ÆÐÄ¡¸¦ ÷ºÎÇÒ ¼ö ÀÖ´Ù. ÆÐÄ¡°¡ ÷ºÎµÇ¸é ¸®ºä ¿äû(?), üũÀÎ Çã°¡(+), üũÀÎ ±ÝÁö(-) µîÀÇ ¹æ¹ýÀ¸·Î ¸®ºä¿Í ½´ÆÛ ¸®ºä¸¦ °ÅÄ¥ ¼ö ÀÖ´Ù.
ÀÌ ¶§ ¹ö±×¶õ ´ÜÁö ¼ÒÇÁÆ®¿þ¾î ³»ÀÇ ¿¡·¯¸¸À» Æ÷ÇÔÇÏ´Â °ÍÀÌ ¾Æ´Ï´Ù. ƯÁ¤ÇÑ ÇÁ·Î¼¼½º¸¦ °ÅÃÄ¾ß ÇÏ´Â °æ¿ì³ª ±â´É È®ÀåÀ» ¿ä±¸ÇÏ´Â °æ¿ì ¸ðµÎ ¹ö±×Áú¶ó¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ¹ö±×Áú¶ó´Â ¸ðÁú¶ó ÇÁ·ÎÁ§Æ®¿¡¼ °£´ÜÇÑ ¹ö±× ¸®Æ÷ÆÃ µµ±¸·Î °³¹ßµÆÀ¸³ª, ¼Ò½º°¡ °ø°³µÅ ÀÖ¾î ÇöÀç IBM, ·¹µåÇÞ µî ÁÖ¿ä IT ±â¾÷ÀÇ ¹ö±× ¸®Æ÷ÆÃ µµ±¸·Îµµ »ç¿ëµÇ°í ÀÖ´Ù.
 |
| <ȸé6>ƾ´õ¹Ú½ºÀÇ À¥ »çÀÌÆ® |
·ÕÈ¥Àº ¸ðÁú¶ó Ç÷§ÆûÀ» ´à¾Ò´Ù?
Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î ½ÃÀåÀÌ ±Þ°ÝÇÑ º¯È¸¦ °Þ°í ÀÖ´Â Áö±Ý MS´Â ±× µ¿¾È GDI ±â¹Ý Win32 API¿Í NTFS, ±×¸®°í COM/DCOM ¹× ´ÙÀÌ·ºÆ®X¿¡ ±â¹ÝÇØ ¿ÔÁö¸¸ ÀÌ·¯ÇÑ ¸ðµ¨¿¡¼ ·ÕÈ¥(Longhorn)À̶ó´Â ȹ±âÀûÀÎ ¸ðµ¨·Î ´ëüÇÏ°Ú´Ù°í ¹àÇû´Ù. ·ÕÈ¥Àº Å©°Ô ´ÙÀ½°ú °°Àº Ư¡À» °¡Áö°í ÀÖ´Ù.
¡ß ¾Æ¹ß·Ð(Avalon) : ½ºÅ©¸° ·¹À̾ƿô ¿£Áø
¡ß Àεð°í(Indigo) : °í±Þ ¼öÁØÀÇ ³×Æ®¿öÅ© ¶óÀ̺귯¸®
¡ß À©FS(WinFS) : »õ·Î¿î ÇüÅÂÀÇ ÆÄÀÏ ½Ã½ºÅÛ
¡ß ´å³Ý(.NET) : COMÀ» ´ëüÇÒ ¸¸ÇÑ ÀÚ¹Ù ´ëÀÀ °´Ã¼ ÇÁ·Î±×·¡¹Ö
MS°¡ Â÷¼¼´ë Ç÷§ÆûÀ¸·Î ³»¼¼¿î ·ÕÈ¥Àº ¸ðÁú¶ó Ç÷§Æû¿¡ ´ëÇÑ ¹ÝÀÀÀ̶ó°íµµ º¼ ¼ö ÀÖ´Ù. ½ÇÁ¦·Î ¾Æ¹ß·ÐÀº ¸ðÁú¶óÀÇ °ÔÄÚ ¸ðµ¨°ú À¯»çÇÏ´Ù. XULÀ̶ó´Â XML ±â¹Ý »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¸¦ º» µû XAMLÀ̶ó´Â Ç¥ÁؾÈÀ» Áö¿øÇÏ·Á°í Çϰí ÀÖ´Ù. Àεð°í ¿ª½Ã ¸ðÁú¶óÀÇ ³×ÄÚ¿Í ´àÀº Á¡ÀÌ ¸¹´Ù. À©FS´Â ¸ðÁú¶ó¿¡ ´ëÀÀÇÒ ¸¸ÇÑ Ç÷§ÆûÀÌ ¾øÁö¸¸ ½ÇÁ¦·Î MS³»¿¡¼µµ À©FSÀÇ ½Çü¿¡ ´ëÇØ ȸÀÇÀûÀÎ °ÍÀ¸·Î ¾Ë·ÁÁ® ÀÖ´Ù.
¸ðÁú¶ó´Â ´å³ÝÀ» Áö¿øÇÏÁö´Â ¾ÊÁö¸¸ XPCOMÀ̶ó´Â Ç÷§ÆûÀ» °¡Áö°í ÀÖ´Ù. ·ÕÈ¥¿¡¼ µ¥ÀÌÅÍ Ç¥ÁØÀ¸·Î ¸¹ÀÌ »ç¿ëÇÒ ¿¹Á¤ÀÎ XML ½ºÅ°¸¶ Çü½ÄÀº ÀÌ¹Ì ¸ðÁú¶ó¿¡¼ RDF¿Í ¿À¹ö·¹ÀÌ ½Ã½ºÅÛÀ¸·Î »ç¿ëµÇ°í ÀÖ´Ù. ¸ðÁú¶ó Ç÷§ÆûÀÌ ¸î ³â°£ ÁÖ¿ä À¥ ±â¼úÀ» ÅëÇÕ ¹ßÀü½ÃÄÑ ¿À°í ÀÖ´Ù´Â Á¡À» °í·ÁÇϸé MSÀÇ ·ÕÈ¥ Çຸ´Â ÀÌ¿¡ ´ëÇÑ Ãß°ÝÀ¸·Î ºÁµµ ¹«¹æÇÒ °Í °°´Ù.
 |
| <Ç¥4>¾Æ¹ß·Ð°ú ¸ðÁú¶óÀÇ ÄÚµå ºñ±³ |
<Ç¥ 4>´Â À©µµ¿ì¸¦ Ç¥½ÃÇÏ´Â UI ÄÚµå¿Í ¸ðÁú¶ó¸¦ ºñ±³ÇÑ °ÍÀÌ´Ù. ³×ÀÓ½ºÆäÀ̽º¿Í ű״ ´Ù¸£Áö¸¸ Çü½Ä°ú ¾ÆÀ̵ð¾î´Â °°´Ù°í º¼ ¼ö ÀÖ´Ù. °³¹ß Äڵ忡¼µµ À¯»ç¼ºÀ» º¸À̰í ÀÖ´Ù. Àεð°í¿Í ³×ÄÚ¿¡¼ »ç¿ëÇÏ´Â ³×Æ®¿öÅ© ½ºÅ©¸³ÆÃ Äڵ带 º¸¸é ¾Ë ¼ö ÀÖ´Ù.
<Ç¥ 5>¸¦ º¸¸é XAML À̺¥Æ® Çڵ鷯¸¦ ó¸®ÇÏ´Â ºÎºÐÀº Á¦¿ÜÇßÁö¸¸ Jscript.Net°ú ³×ÄÚÀÇ Äڵ尡 °ÅÀÇ À¯»çÇÏ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ³×ÄÚÀÇ Äڵ忡´Â SOAP °´Ã¼¸¦ for loop·Î ºÒ·¶Áö¸¸ Àεð°íÀÇ °æ¿ì SOAP¸¦ ±âº» ¸Þ½ÃÁö ¹®¹ýÀ¸·Î °®°í Àֱ⠶§¹®¿¡ ±× ¼Ò½º ¸ð¾çÀ̳ª °´Ã¼ »ç¿ë¹ý µîÀº °ÅÀÇ °°´Ù.
°£´ÜÇÑ Äڵ常À» ºñ±³ÇØ °Å´ëÇÑ ¿î¿µÃ¼Á¦ ÇÁ·ÎÁ§Æ®ÀÎ ·ÕÈ¥À» ¸ðÁú¶ó¿Í ¶È°°´Ù°í ´ÜÁ¤ÇÒ ¼ö´Â ¾ø´Ù. ±×·¯³ª Àû¾îµµ ·ÕÈ¥¿¡ µé¾î°¡ ÀÖ´Â ¾ÆÀ̵ð¾î´Â ¸ðÁú¶ó¿¡¼ ÀÌ¹Ì ±¸ÇöµÅ ¼º°øÀûÀ¸·Î »ç¿ëÇϰí ÀÖ´Â °ÍµéÀ» ¸¹ÀÌ Â÷¿ëÇßÀ½À» ¾Ë ¼ö ÀÖ´Ù.
 |
| <ȸé7>¹ö±×Áú¶ó À¥ »çÀÌÆ® |
 |
| <ȸé8>Ä«À̷θ¦ ÀÌ¿ëÇÑ ¹éÅÍ µ¥½ºÅ©Å¾ ȸé |
½ÇÁ¦·Î ·ÕÈ¥ÀÇ ÇÁ·ÎÅä ŸÀÔÀÌ Á¦´ë·Î ¼¼»ó¿¡ ³ª¿ÀÁö´Â ¾Ê¾ÒÁö¸¸ ¾Æ¹ß·ÐÀÇ º¤ÅÍ ·»´õ¸µÀº »ç½Ç Ç÷¡½Ã³ª ¼ï¿þÀÌºê µî°ú ºñ±³ÇØ º¸¸é »õ·Î¿î ±â¼úÀÌ ¾Æ´Ï´Ù. XAML »Ó¸¸ ¾Æ´Ï¶ó Laszlo ¼¹öÀÇ °æ¿ì Ç÷¡½Ã¸¦ ±â¹ÝÀ¸·Î XML ÀÎÅÍÆäÀ̽º º¤ÅÍ ±×·¡ÇÈ ¿£ÁøÀ» ÀÌ¹Ì ¼±º¸ÀÎ ¹Ù Àֱ⠶§¹®ÀÌ´Ù. ÀÌ¿¡ ºñÇØ ¸ðÁú¶ó Áø¿µ¿¡¼ ÀÌ¹Ì 70% °¡·® ±¸ÇöÇÑ À¥ Ç¥ÁØ º¤ÅÍ ±×·¡ÇÈ ±â¼úÀÎ SVG¸¦ ±âÁ¸ÀÇ Ç÷§Æû¿¡ ÀåÂøÇÑ´Ù¸é ´õ¿í °·ÂÇÑ Ç÷§ÆûÀÌ µÉ °ÍÀÌ´Ù.
¸ðÁú¶ó 2.0À» ÇâÇØ
µ¶¸³ ºê¶ó¿ìÀúÀÎ ÆÄÀÌ¾îÆø½º¿Í ÀüÀÚ¸ÞÀÏ Å¬¶óÀÌ¾ðÆ® ½ã´õ¹öµå°¡ Å« ¼º°øÀ» °ÅµÎ¸é¼ ÅëÇÕ ÀÎÅÍ³Ý Ç÷§ÆûÀ¸·Î °³¹ßµÆ´ø ¸ðÁú¶ó°¡ ¾î¶»°Ô ¹Ù²ðÁö ±â´ë¸¦ ¸ðÀ¸°í ÀÖ´Ù. ¸ÕÀú ¸ðÁú¶ó´Â ÇöÀç ÇüÅ·Π°è¼Ó °³¹ßµÉ °ÍÀ¸·Î º¸ÀδÙ. ´Ù¸¸ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º³ª ±â´ÉÀÇ º¯È ¾øÀÌ ³»ºÎ ±â¹Ý ±â¼úÀ» °è¼Ó ÃàÀûÇÏ´Â ±×¾ß¸»·Î °³¹ß Ç÷§Æû(developer platform)ÀÇ ¸ð¾çÀ» ¶é °ÍÀÌ´Ù. ÇöÀç ¸ðÁú¶ó´Â 1.8a6 ¹öÀüÀÌ Ãâ½ÃµÈ ÀÌÈÄ °è¼ÓÇØ¼ °³¼± ÀÛ¾÷ÀÌ ÁøÇàµÇ°í ÀÖ´Ù.
¸ðÁú¶ó 2.0ÀÇ ÁÖ¿äÇÑ ¸ñÇ¥´Â ±×·¡ÇÈ ±â´ÉÀ» °³¼±ÇÏ´Â °ÍÀÌ´Ù. ÇöÀç »ç¿ëÇϰí ÀÖ´Â GFX¸¦ Ä«ÀÌ·Î(Cairo)·Î ´ëüÇÒ °èȹÀ» °®°í ÀÖ´Ù. Ä«ÀÌ·Î(
cairographics.org)´Â ¿ÀǼҽº º¤ÅÍ ±×·¡ÇÈ ¿£Áø °³¹ß ÇÁ·ÎÁ§Æ®·Î¼ ¹Ì·ÁÇÑ ±×·¡ÇÈ Ç¥ÇöÀÌ °¡´ÉÇØ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽ºÀÇ Çõ½ÅÀ» °¡Á®¿Ã °ÍÀ¸·Î ±â´ëµÈ´Ù. ¶ÇÇÑ ±× µ¿¾È ÁøÃ´µÇ¾î ¿Ô´ø SVG¸¦ ¿Ïº®ÇÏ°Ô ±¸ÇöÇØ °¢Á¾ º¤ÅÍ ±×·¡ÇÈ Æ÷¸ËÀ» Ç÷¯±×ÀÎ ¾øÀÌ ºê¶ó¿ìÀú¿¡ ¹Ù·Î Ç¥ÇöÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
 |
| <Ç¥5>SOAP ¿äûÀ» º¸³»´Â ÄÚµå ºñ±³ |
ƯÈ÷ 2005³â¿¡´Â XULÀ» ±â¹ÝÀ¸·Î ÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇϱâ À§ÇØ °æ·®ÀÇ XUL Loader(Runner)À» °³¹ßÇϰí libxul.so ÇüÅÂÀÇ ¶óÀ̺귯¸®¸¦ ¹èÆ÷ÇØ °³¹ßÀÚµéÀÌ ½±°Ô XUL ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µéµµ·Ï ÇÒ °èȹÀÌ´Ù. XUL2·Î ¸í¸íµÈ ÀÌ ÇÁ·ÎÁ§Æ®´Â ÅÛÇø´ ½Ã½ºÅÛ, ½Ì±Û ÆÄÀÏ ¾ÖÇø®ÄÉÀ̼Ç, XÀÎÅͳݿ¡ ´ëÀÀµÇ´Â ¿ø°Ý ÀÎÅÍ³Ý ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀ» Áö¿øÇÏ°Ô µÉ °ÍÀÌ´Ù.
»Ó¸¸ ¾Æ´Ï¶ó ¾ÖÇÃÀÇ »çÆÄ¸®¿Í °°Àº µå·¡±× ¾Ø µå·Ó ±â¼ú°ú Åõ¸í ¹× ºñ»ç°¢Çü À©µµ¿ì¿¡ ´ëÇÑ ±¸Çö¿¡µµ ÃÊÁ¡À» ¸ÂÃâ ¿¹Á¤ÀÌ´Ù. ¸ðÁú¶ó¿Í ¿ÀÆä¶ó°¡ ÆîÄ¡°í ÀÖ´Â À¥ ¾ÖÇø®ÄÉÀÌ¼Ç Ç¥Áؾȿ¡ µû¶ó WebForm2¿Í W3C Ç¥ÁؾÈÀÎ XFormÀ» ±¸ÇöÇÏ´Â °Íµµ ¿ÃÇØÀÇ ¸ñÇ¥ÀÌ´Ù.
¸ðÁú¶ó´Â °³¹ß Ç÷§ÆûÀ¸·Î ¸¹Àº ¹ßÀüÀ» °ÅµìÇØ ¿ÔÁö¸¸ ¾ÆÁ÷µµ ½ÃÀÛ ´Ü°è¿¡ ¼ ÀÖÀ» »ÓÀÌ´Ù. ³Ý½ºÄÉÀÌÇÁ°¡ ºñ·Ï ÀÎÅÍ³Ý ÀͽºÇ÷η¯¿ÍÀÇ ½ÃÀå Á¡À¯À² ½Î¿ò¿¡¼´Â Á³Áö¸¸, ±×µéÀÌ ¼Ò½º¸¦ ¿ÀÇÂÇÔÀ¸·Î½á °á°úÀûÀ¸·Î ¸¹Àº °³¹ßÀÚµéÀÌ ±×·Î ÀÎÇØ ¿µ°¨À» ¹Þ¾Æ ±â¼úÀ» ¼±µµÇÒ ¼ö ÀÖ´Â Ç÷§ÆûÀ¸·Î ¹ßÀü½Ã۸®¶ó°í´Â »ý°¢ÇÏÁö ¸øÇßÀ» °ÍÀÌ´Ù.
ÇöÀç ¿ì¸®³ª¶ó¿¡µµ ¸¹Àº ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÚµéÀÌ ÀÖ´Ù. ´ÜÁö ÀÏ·Î ÇÏ´Â °³¹ß»Ó¸¸ ¾Æ´Ï¶ó ±â¼úÀ» ¹ßÀü½Ã۰í Áøº¸½ÃŰ´Â µµ±¸·Î, ¸ðÁú¶ó Ç÷§Æû¿¡ °ü½ÉÀ» °¡Á® º¸±â¸¦ ±â´ëÇÑ´Ù.@
* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.