IBM Korea Skip to main content
       IBM Ȩ    |  Á¦Ç° & ¼­ºñ½º  |  °í°´Áö¿ø & ´Ù¿î·Îµå  |  È¸¿ø°¡ÀÔ  

±â¾÷¿¡¼­ÀÇ RMI-IIOP
¸ñ Â÷:
¿ø°Ý °´Ã¼ Àü¼Û
¿ø°Ý °´Ã¼ÀÇ À§Ä¡
RMI ´ë CORBA
RMI-IIOP °³¿ä
Do-it-yourself RMI-IIOP
Part 1: ÀÎÅÍÆäÀ̽º Á¤ÀÇÇϱâ
Part 2: ¼­¹ö ±¸ÃàÇϱâ
Part 3: Ŭ¶óÀ̾ðÆ® ±¸ÃàÇϱâ
Part 4 :¿¹Á¦ ½ÇÇà½ÃÅ°±â
RMI-IIOP¿Í EJB ÄÄÆ÷³ÍÆ®
°á·Ð
Âü°í ÀÚ·á
ÇÊÀÚ ¼Ò°³
±â»ç¿¡ ´ëÇÑ Æò°¡
°ü·Ã dW ¸µÅ©:
Enterprise JavaBeans ±âÃÊ
Enterprise JavaBeans ÄÄÆ÷³ÍÆ® ¹èÄ¡ ¹× »ç¿ëÇϱâ
IBM SDKs for Java technology
US ¿ø¹® Àбâ
IIOP»ó¿¡ RMI ½ÇÇà½ÃÅ°±â

Damian Hagge
¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î, IBM
2002³â 3¿ù

RMI¿Í CORBA´Â Á¾Á¾ °æÀï ±â¼ú·Î ºñÃçÁø´Ù. µÑ ´Ù ¿ø°ÝÁö·Î ºÐ»êµÈ °´Ã¼¿¡ Åõ¸íÇÏ°Ô Á¢±ÙÇϵµ·Ï ÇØÁֱ⠶§¹®ÀÌ´Ù. ±×·¯³ª ÀÌ µÎ ±â¼úÀº ½ÇÁ¦·Î´Â º¸¿ÏÀûÀÌ´Ù. °¢ÀÚ°¡ ¼­·ÎÀÇ ¾àÁ¡À» ÇØ°áÇØ ÁÙ ¼ö ÀÖ´Â °­Á¡À» °¡Áö°í Àֱ⠶§¹®ÀÌ´Ù. RMI¿Í CORBAÀÇ °áÇÕÀº ±â¾÷¿ë ¼­¹öÃø ÀÚ¹Ù °³¹ßÀÇ Ãʼ®ÀÌ µÈ RMI-IIOP¸¦ ³º¾Ò´Ù. ÀÌ ±Û¿¡¼­ ÀÚ¹Ù °³¹ßÀÚÀÎ Damian Hagge´Â RMI-IIOP¿¡ ´ëÇØ °£´ÜÈ÷ ¼Ò°³ÇÏ°í, °£´ÜÇÑ ÀÚ¹Ù ±â¹ÝÀÇ RMI-IIOP Ŭ¶óÀ̾ðÆ®/¼­¹ö ¾ÖÇø®ÄÉÀ̼ÇÀ» ±¸ÃàÇÏ°í ½ÇÇà½ÃÅ°´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù. RMI°¡ IIOP¿¡¼­ ¾ó¸¶³ª Àß ÀÛµ¿ÇÏ´ÂÁö º¸±â ¹Ù¶õ´Ù.

1997³â IBM°ú Sun Microsystems´Â ±â¾÷¿ë ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß ±â¼ú·Î ÀÚ¹ÙÀÇ ¹ßÀüÀ» ÃËÁø½ÃÅ°±â À§ÇØ °øµ¿ ³ë·ÂÀ» ½ÃÀÛÇß´Ù. ƯÈ÷ µÎ ȸ»ç´Â ÀÚ¹Ù°¡ ¼­¹öÃø ¾ð¾î·Î ¾î¶»°Ô »ç¿ëµÉ ¼ö ÀÖ´ÂÁö¿¡ ÃÊÁ¡À» ¸ÂÃß¾ú°í ±âÁ¸ ¾ÆÅ°ÅØó¿¡ ÅëÇÕµÉ ¼ö ÀÖ´Â ±â¾÷ ·¹º§ÀÇ Äڵ带 ¸¸µé¾ú´Ù. ÇÊ¿äÇÑ °ÍÀº ÀÚ¹ÙÀÇ RMI (Remote Method Invocation)ÀÇ ÀûÀº ÀÚ¿øÀ» »ç¿ëÇÏ´Â ±â¼ú°ú º¸´Ù ¼º¼÷ÇÑ CORBA (Common Object Request Broker Architecture) ±â¼úÀÇ °­°Ç¼ºÀ» °áÇÕ½ÃÅ°´Â ±â¾÷¿ë Àü¼Û ±â¼úÀ̾ú´Ù. ÀÌ·¯ÇÑ ÇÊ¿ä¿¡ ÀÇÇØ RMI-IIOP°¡ ź»ýÇÏ¿´´Âµ¥, RMI-IIOP´Â ÀÚ¹Ù°¡ ÇöÀç ¼±µÎÀûÀÎ ¼­¹öÃø ±â¾÷¿ë °³¹ß ¾ð¾î·Î ÀÚ¸®¸Å±èÇÏ´Â µ¥ ÃßÁøÁ¦ ¿ªÇÒÀ» ÇÏ¿´´Ù.

ÀÌ ±Û¿¡¼­ ³ª´Â RMI-IIOP¿¡ ´ëÇÑ ±âº» »çÇ×µéÀ» ¼Ò°³ÇÒ °ÍÀε¥, ¿©·¯ºÐÀÌ ±â¾÷¿ë °³¹ß ¼Ö·ç¼Ç¿¡ ÀÌ ±â¼úÀ» »ç¿ëÇϱ⠽ÃÀÛÇϵµ·Ï ÇÏ´Â °ÍÀÌ ¸ñÇ¥ÀÌ´Ù. ³ª´Â RMI-IIOP°¡ ½ÇÁ¦·Î ¹«¾ùÀÎÁö¸¦ ¼³¸íÇϱâ À§ÇØ CORBA¿Í RMI¿¡ ´ëÇØ ¼Ò°³ÇÑ ÀÏ¹Ý ÀÚ·áµé¿¡¼­ ¹ß°ßÇÒ ¼ö ¾ø¾ú´ø Á¤º¸¸¦ Á¦°øÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù°í »ý°¢ÇÑ´Ù. CORBA¿Í RMIÀÇ ±âº» »çÇ׵鿡 ´ëÇØ Àß ¸ð¸¥´Ù¸é ÀÌ ±ÛÀ» °è¼Ó Àо°¡±â Àü¿¡ ¸î °¡Áö ¼Ò°³ ÀÚ·áµéÀ» Àо±â¸¦ ±ÇÇÑ´Ù. Âü°íÀÚ·á¿¡ Á¤¼±µÈ ±Û°ú ±³ÀçµéÀÌ ³ª¿Í ÀÖ´Ù.

RMI-IIOP¿¡ ´ëÇØ ±¸Ã¼ÀûÀ¸·Î ¸»Çϱâ Àü¿¡ ¿ì¸®´Â CORBA¿Í RMI°¡ ¿äûÀ» Á¤·Ä½ÃÅ°±â À§ÇØ »ç¿ëÇÏ´Â ¸ÞÄ¿´ÏÁòÀ» »ìÆ캸ÀÚ. CORBA°¡ ¿ì¸®ÀÇ ÁÖµÈ ¿¹°¡ µÉ °ÍÀÌ´Ù. RMI-IIOP Á¤·ÄÈ­°¡ CORBA Àü¼Û ÇÁ·ÎÅäÄÝ (IIOP)¿¡ ±âÃÊÇÏ°í Àֱ⠶§¹®ÀÌ´Ù. ¿ì¸®´Â ¿äûÀ» º¸³»°í ¿ø°Ý °´Ã¼ÀÇ À§Ä¡¸¦ ã°í ³×Æ®¿öÅ© »ó¿¡¼­ ±× °´Ã¼¸¦ Àü¼ÛÇÏ´Â ÀÛ¾÷¿¡¼­ Àü¼Û ÇÁ·ÎÅäÄÝ°ú ORB (object request broker)°¡ ¼öÇàÇÏ´Â ±âº» ±â´ÉµéÀ» »ìÆ캸°Ú´Ù.

¿ø°Ý °´Ã¼ Àü¼Û

ÇÑ CORBA ¿äûÀÌ Á¤·ÄµÇ¸é ±×°ÍÀº IIOP ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ¼öÇàµÈ´Ù. °£´ÜÈ÷ ¸»ÇØ, IIOP´Â IDL (Interface Definition Language) »ý¼ºÀÚÀÇ ¿ä¼ÒµéÀ» ÀÏ·ÃÀÇ ¹ÙÀÌÆ®·Î µÈ Ç¥ÁØÈ­µÈ Æ÷¸ËÀ¸·Î Ç¥½ÃÇÑ´Ù. µû¶ó¼­ ÇÑ Àڹ٠Ŭ¶óÀ̾ðÆ®°¡ CORBA ¿äûÀ» C++ ¼­¹ö¿¡°Ô º¸³»°í ÀÖ´Ù°í °¡Á¤Çغ¸ÀÚ. Ŭ¶óÀ̾ðÆ® ¾ÖÇø®ÄÉÀ̼ÇÀº ¿ø°Ý °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶¸¦ ÀÚ¹Ù ÀÎÅÍÆäÀ̽º ÇüÅ·Π°¡Áö°í ÀÖ°í, ±× ÀÎÅÍÆäÀ̽º»ó¿¡ ÀÛ¾÷À» È£ÃâÇÑ´Ù. º¸´Ù ÀÚ¼¼È÷ ¸»Çϸé, ÀÎÅÍÆäÀ̽º´Â ±×¿¡ »óÀÀÇÏ´Â ÀÛ¾÷ÀÇ ±¸ÇöÀ» È£ÃâÇϸç, ÀÌ·¯ÇÑ ±¸ÇöÀº ½ºÅÓ¿¡ À§Ä¡ÇÏ°í ÀÖÀ» °ÍÀÌ´Ù.(ÀÌ ½ºÅÓÀº ¿©·¯ºÐÀÌ idlj¸¦ ÀÌ¿ëÇØ IDL·ÎºÎÅÍ ¸¸µé¾î³¾ °ÍÀÌ´Ù)

½ºÅÓÀº ¸Þ¼Òµå È£ÃâÀ» ORB·Î ³»·Áº¸³»´Âµ¥, ÀÌ°ÍÀº Ŭ¶óÀ̾ðÆ® ORB¿Í ¼­¹ö ORBÀÇ µÎ ºÎºÐÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù. Ŭ¶óÀ̾ðÆ® ORBÀÇ ÀÏÀº ¿äûÀ» ƯÁ¤ À§Ä¡·Î ÇâÇÏ´Â ³×Æ®¿öÅ©¿¡ Á¤·Ä½ÃÅ°´Â °ÍÀÌ´Ù. ¼­¹ö ORBÀÇ ÀÏÀº ³×Æ®¿öÅ©¿¡¼­ µé¾î¿À´Â ¿äûÀ» µè°í À̵éÀ» ¾ð¾î ±¸ÇöÀÌ ÀÌÇØÇÒ ¼ö ÀÖ´Â ¸Þ¼Òµå È£Ãâ·Î º¯È¯ÇÏ´Â °ÍÀÌ´Ù. CORBA ORBÀÇ ¿ªÇÒ¿¡ ´ëÇÑ º¸´Ù ½Éµµ ±íÀº ¼³¸íÀº Âü°íÀÚ·á ºÎºÐÀ» ÂüÁ¶ÇÑ´Ù.

½ºÅÓÀÌ ¸Þ¼Òµå È£ÃâÀ» º¸³½ ÈÄ¿¡ Ŭ¶óÀ̾ðÆ® ORB´Â ¸ðµç ¸Å°³º¯¼ö¸¦ Æ÷ÇÔÇØ ÀÛ¾÷ ¼öÇà ¿äûÀ» Ç¥ÁØÈ­µÈ ¹ÙÀÌÆ® Æ÷¸ËÀ¸·Î º¯È¯Çϴµ¥, ÀÌ °æ¿ì¿¡´Â IIOP·Î º¯È¯ÇÑ´Ù. ±×¸®°í ³ª¼­ µé¾î¿Ã ¿äûÀ» À§ÇØ ´ë±âÇÏ°í ÀÖ´Â ¼­¹ö ORB¿¡°Ô ³»Æ®¿öÅ©¸¦ ÅëÇØ ÀÛ¾÷À» º¸³»°Ô µÈ´Ù. ¼­¹öÃø ORB´Â µ¥ÀÌÅ͸¦ ¹ÙÀÌÆ® ´ÜÀ§·Î ÀÐ¾î ³ª°¡°í, ±× ¿äûÀ» C++ ¼­¹ö ±¸Çö¿¡°Ô ÀǹÌÀÖ´Â °ÍÀ¸·Î º¯È¯ÇÑ´Ù. C++ ¼­¹ö ¸Þ¼Òµå´Â ÀÚ½ÅÀÇ ¿ªÇÒ (Áï ¿äûµÈ ¸Þ¼Òµå È£Ãâ)À» ¼öÇàÇÏ°í, °á°ú°ªÀ» À§¿Í µ¿ÀÏÇÑ ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇØ IIOP»óÀÇ Å¬¶óÀ̾ðÆ®¿¡°Ô ¹ÝȯÇÒ °ÍÀÌ´Ù.

RMIµµ ¿äûÀ» ÀÌ¿Í ºñ½ÁÇÏ°Ô Ã³¸®ÇÏÁö¸¸, ´ë½Å Àü¼Û ÇÁ·ÎÅäÄÝ·Î JRMP (Java Remote Messaging Protocol)À» »ç¿ëÇÑ´Ù. ±×¸®°í ¹°·Ð RMI Àü¼Û ÀÛ¾÷Àº ÀÚ¹Ù °´Ã¼ÀÇ Á÷·ÄÈ­¸¦ Æ÷ÇÔÇÑ´Ù.

CORBA¿Í RMI°£ÀÇ Â÷ÀÌ
  • CORBA´Â IIOP ÇÁ·ÎÅäÄݻ󿡼­ ½ÇÇàµÈ´Ù; RMI´Â JRMP¸¦ »ç¿ëÇÑ´Ù.
  • CORBA´Â ¾ð¾î¿¡ µ¶¸³ÀûÀÌ´Ù; RMI´Â ¼ø¼öÇÏ°Ô ÀÚ¹Ù ´ë ÀÚ¹ÙÀÌ´Ù.
  • RMI´Â ¿ø°Ý °´Ã¼ÀÇ À§Ä¡¸¦ ã±â À§ÇØ JNDI¸¦ »ç¿ëÇÑ´Ù; CORBA´Â CosNamingÀ» »ç¿ëÇÑ´Ù.
  • RMI´Â °´Ã¼¸¦ Á÷·ÄÈ­ÇÑ´Ù; CORBA´Â ±×·¸°Ô ÇÏÁö ¾Ê´Â´Ù.

¿ø°Ý °´Ã¼ÀÇ À§Ä¡

CORBA´Â ¿ø°Ý °´Ã¼¸¦ ã±â À§ÇØ CosNaming À̸§ ¼­ºñ½º¸¦ »ç¿ëÇÑ´Ù. CosNamingÀº À̸§ ¼­¹ö°¡ CORBA ¼­¹ö ÇÁ·Î¼¼½º¿¡ ´ëÇÑ ¹ÙÀεù (ȤÀº ÂüÁ¶)À» °¡Áöµµ·Ï Çϱâ À§ÇÑ ÇÁ·¹ÀÓ¿öÅ©¸¦ Á¦°øÇÑ´Ù. CORBA Ŭ¶óÀ̾ðÆ®°¡ ¾î¶² À̸§ÀÇ ÇÑ ¼­¹ö ÇÁ·Î¼¼½º¸¦ ã±â À§ÇØ CosNaming ¿äûÀ» À̸§ ¼­¹ö¿¡°Ô º¸³»¸é, À̸§ ¼­ºñ½º´Â ±× ÇÁ·Î¼¼½º¿¡ ´ëÇÑ ¾ç¹æÇâ °´Ã¼ ÂüÁ¶ (interoperable object reference,IOR)¸¦ ¹ÝȯÇÑ´Ù. ±×·¯¸é Ŭ¶óÀ̾ðÆ®´Â ±× IOR¸¦ »ç¿ëÇÏ¿© ¼­¹ö ÇÁ·Î¼¼½º¿Í Á÷Á¢ Åë½ÅÇÑ´Ù.

IORÀº ¼­¹öÀÇ À§Ä¡µî ¼­¹ö ÇÁ·Î¼¼½º¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù. CosNaming ¼­ºñ½ºÀÇ ´ÜÁ¡ Áß Çϳª´Â »ç¶÷ÀÌ IORÀ» Æǵ¶ÇÒ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. Àû¾îµµ »çÀ̺¸±× µÎ³ú¸¦ °¡ÁöÁö ¾ÊÀº »ç¶÷Àº ¸»ÀÌ´Ù. ¹Ý¸é RMI´Â Á» ´õ »ç¿ëÀÚ¿¡°Ô Ä£±ÙÇÏ´Ù. RMI´Â JNDI¿¡¼­ ½ÇÇàµÇ´Â ·¹Áö½ºÆ®¸® (À̸§ ¼­ºñ½º¿Í À¯»ç)¸¦ »ç¿ëÇØ ¿ø°Ý °´Ã¼¸¦ ã´Â´Ù. RMI ·¹Áö½ºÆ®¸®´Â ¿ø°Ý °´Ã¼¸¦ È®ÀÎÇÏ°í À§Ä¡¸¦ ã±â À§ÇØ RefAddr °´Ã¼·Î ±¸¼ºµÈ ÀÚ¹Ù Reference °´Ã¼¸¦ »ç¿ëÇÑ´Ù. ÀÌ ÀÚ¹Ù °´Ã¼µéÀº IORº¸´Ù »ç¿ëÀÚ¿¡°Ô Ä£±ÙÇÏ´Ù.

CORBA´Â ¾ÆÁÖ ÃÖ±Ù¿¡ »óÈ£ÀÛ¿ë °¡´ÉÇÑ À̸§ ¼­ºñ½º (Interoperable Naming Service : INS)¸¦ ÀÚ½ÅÀÇ °´Ã¼ À§Ä¡ ½ºÅ°¸¶¿¡ ±¸Ã¼È­½ÃÄ×´Ù. INS´Â »ç¶÷ÀÌ ÀÐÀ» ¼ö ÀÖ´Â URLÀ» °´Ã¼ À§Ä¡·Î »ç¿ëÇϸç CosNaming »ó¿¡¼­ ÀÛµ¿ÇÑ´Ù. INS´Â À̸§ ¼­ºñ½º¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. ´ë½Å ÁöÁ¤µÈ URL¿¡ Á÷Á¢ È£ÃâÀ» º¸³½´Ù. INS¿¡ ´ëÇÑ »ó¼¼ Á¤º¸´Â Âü°íÀڷḦ ÂüÁ¶ÇÑ´Ù.

RMI ´ë CORBA

±×·¸´Ù¸é CORBA¿Í RMI Áß ¾î¶² °ÍÀÌ ³ªÀº°¡? ´ë´äÀº ¿©·¯ºÐÀÌ ¹«¾ùÀ» ÇÏ°í ½ÍÀº°¡¿¡ ´Þ·Á ÀÖ´Ù. CORBA´Â ¾÷°è Ç¥ÁØÀÇ 3¼¼´ë, ȤÀº 4¼¼´ë ÇÁ·ÎÅäÄݻ󿡼­ ÀÛµ¿ÇÏ´Â °Å´ëÇÏ°í °ËÁõµÈ ¾ÆÅ°ÅØóÀÌ´Ù. ¿©·¯ºÐÀÌ COBA°¡ Á¦°øÇÏ´Â ¸ðµç Ãß°¡ ±â´Éµé (Æ®·£Àè¼Ç ó¸®, º¸¾ÈÀ» À§ÇÑ ÀÎÅͼÁÅÍ, À̺¥Æ® ä³Îµî)À» °í·ÁÇÑ´Ù¸é CORBA°¡ ±â¾÷ ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇÑ ´äó·³ º¸ÀÏ °ÍÀÌ´Ù. CORBAÀÇ Å« °áÁ¡Àº º¹ÀâÇÏ´Ù´Â °ÍÀÌ´Ù. °³¹ßÀÚµéÀÌ CORBA¿¡ ´É¼÷ÇØÁö·Á¸é º¸Åë ¾ÆÁÖ Èûµç ÇнÀ °úÁ¤À» °ÅÃÄ¾ß ÇÑ´Ù.

¹Ý¸é RMI´Â ¾ÆÁÖ ¹è¿ì±â ½±´Ù. RMI¸¦ »ç¿ëÇØ Å¬¶óÀ̾ðÆ®/¼­¹ö ±¸ÇöÀ» »ý¼ºÇÏ°í ·¹Áö½ºÅ͸®¿Í ¿ø°Ý °´Ã¼¸¦ °áÇÕ½ÃÅ°°í ¿äûÀ» È£ÃâÇÏ°í ¹Þ´Â °ÍÀº ¸Å¿ì °£´ÜÇÏ´Ù. RMI´Â ¶ÇÇÑ CORBAº¸´Ù ÈξÀ ÀûÀº ÀÚ¿øÀ» »ç¿ëÇÑ´Ù. JRMP°¡ IIOPº¸´Ù »ó´çÈ÷ ºñ¿ëÀÌ ´ú µå´Â ÇÁ·ÎÅäÄÝÀ̱⠶§¹®ÀÌ´Ù. ±×·¯³ª RMI´Â CORBA°¡ °¡Áø °­·ÂÇÑ Ãß°¡ ±â´ÉÀÌ ¾ø°í ¼ø¼öÇÏ°Ô ÀÚ¹Ù¿¡ ±â¹ÝÇÑ ¸ÞÄ¿´ÏÁòÀÌ´Ù. µû¶ó¼­ ¿ì¸®°¡ ½ÇÁ¦·Î ¿øÇÏ´Â °ÍÀº RMIÀÇ À¯¿¬¼º ¹× »ç¿ëÀÇ ¿ëÀ̼ºÀ» CORBA°¡ °¡Áø ±â¾÷ ÄÄÇ»Æÿ¡ ´ëÇÑ Áغñ¼º°ú °áÇÕ½ÃŲ °ÍÀÌ´Ù. ±×·¸Áö ¾ÊÀº°¡? ÀÌÁ¦ RMI-IIOP·Î µé¾î°¡ º¸ÀÚ.

¿Ö RMI-IIOPÀΰ¡?
  • RMI-IIOP´Â CORBAÀÇ °­·ÂÇÔÀ» RMIÀÇ À¯¿¬¼º°ú °áÇÕ½ÃŲ´Ù.
  • RMI-IIOP´Â °³¹ßÀÚµéÀÌ »ç¿ëÇϱ⠽±°í ´ëºÎºÐÀÇ ±â¾÷ ÀÎÇÁ¶ó¿¡ ½±°Ô ÅëÇյȴÙ.

RMI-IIOP °³¿ä

RMI-IIOP´Â RMI È£ÃâÀ» °ÅÀÇ ¼öÁ¤ ¾øÀÌ IIOP¿¡¼­ ½ÇÇà½ÃÅ°µµ·Ï ÇØÁØ´Ù. RMI-IIOP·Î ¿©·¯ºÐÀº Á÷Á¢ÀûÀÎ ÀÚ¹Ù Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ°í, ¶ÇÇÑ CORBA°¡ Á¦°øÇϴ dzºÎÇÑ ±â¾÷ ÄÄÇ»Æà Áö¿ø ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´õ ³ª¾Æ°¡ ÄÚµå´Â RMI¿¡¼­µç IIOP¿¡¼­µç ½ÇÇàµÉ ¼ö ÀÖÀ»¸¸Å­ À¯¿¬ÇÏ´Ù. ÀÌ°ÍÀº ÀûÀº ÀÚ¿ø »ç¿ë°ú À¯¿¬¼ºÀÌ Áß¿äÇÑ ¹®Á¦°¡ µÇ´Â °æ¿ì¿¡ ¿©·¯ºÐÀÇ Äڵ带 ¼ø¼ö Àڹ٠ȯ°æ¿¡¼­ ½ÇÇà½Ãų ¼öµµ ÀÖ°í, ȤÀº ÃÖ¼ÒÇÑÀÇ ÄÚµå º¯°æÀ¸·Î ±âÁ¸ÀÇ CORBA ÀÎÇÁ¶ó¿¡ ÅëÇÕ½Ãų ¼öµµ ÀÖÀ½À» ÀǹÌÇÑ´Ù.

RMI-IIOPÀÇ ¸Å¿ì °­·ÂÇÑ ±â´É Áß Çϳª°¡ RMI Ŭ·¡½º Á÷·ÄÈ­ÀÇ À¯¿¬¼ºÀ» ÀÒÁö ¾ÊÀ¸¸é¼­ ¼ø¼ö Àڹ٠Ŭ¶óÀ̾ðÆ®/¼­¹ö ±¸ÇöÀ» ÀÛ¼ºÇϵµ·Ï ÇØÁشٴ °ÍÀÌ´Ù. RMI-IIOP´Â ÀÚ¹Ù Á÷·ÄÈ­¸¦ ¿À¹ö¶óÀ̵åÇÏ°í Àڹ٠Ŭ·¡½º¸¦ IIOP·Î º¯È¯ÇÏ¿© ³×Æ®¿öÅ©¿¡ ½Ç¾î ³»¸²À¸·Î½á À̸¦ °¡´ÉÄÉ ÇÑ´Ù. ´Ù¸¥ ÇÑ ÂÊ¿¡¼­´Â Àڹ٠Ŭ·¡½º°¡ ³×Æ®¿öÅ©·ÎºÎÅÍ IIOP·Î ÀÐÇô ¿Ã·ÁÁö¸ç, ÇØ´ç Ŭ·¡½º¿¡ ´ëÇØ ±× ¸â¹öµéÀÇ °ªÀÌ ÀüÇô º¯ÇÏÁö ¾ÊÀº ä »õ·Î¿î ÀνºÅϽº°¡(reflectionÀ» »ç¿ëÇÏ¿©) »ý¼ºµÇ¾îÁø´Ù - º¸½Ã¶ó: ÀÌ°ÍÀÌ IIOP»óÀÇ ÀÚ¹Ù Á÷·ÄÈ­ÀÌ´Ù.

RMI-IIOP°¡ Åõ¸íÇÏ°Ô °´Ã¼ À§Ä¡¸¦ ã°Ô Çϱâ À§ÇØ ORB º¥´õµéÀº ¿ª»çÀûÀ¸·Î Java CosNaming service provider (ºñÀü¹®°¡ ¿ë¾î·Î´Â Ç÷¯±×ÀÎ)¸¦ »ç¿ëÇØ ¿Ô´Ù. Ç÷¯±×ÀÎÀº JNDI API ÇÏ¿¡¼­ ÀÛµ¿ÇÏ¿© CORBA À̸§ ¼­ºñ½º¿¡ Á¢±ÙÇÑ´Ù. ÀÌ ±Û¿¡¼­´Â ±× ÀÌÀ¯¸¦ ¼³¸íÇÒ¸¸Å­ ¿©À¯°¡ ¾øÁö¸¸, ÀÌ À̸§ ¼­ºñ½º´Â ÀÌ»óÀûÀÌÁö ¾Ê´Ù. ±× °á°ú ¼ö¸¹Àº º¥´õ -ƯÈ÷ ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö º¥´õ -µéÀÌ RMI-IIOP¿¡ ´ëÇØ µ¶ÀÚÀûÀÎ °´Ã¼ À§Ä¡ ¸ÞÄ¿´ÏÁòÀ» °³¹ßÇØ ¿Ô´Ù.

RMI-IIOP´Â ¶ÇÇÑ ÀÚ¹Ù CosNaming ¼­ºñ½º¿¡ ´ëÇÑ È®ÀåÀÚ·Î INS¸¦ Áö¿øÇÑ´Ù. ³ª´Â INS°¡ ÇâÈÄ °´Ã¼ À§Ä¡ ±â´ÉÀ» À̲ø °ÍÀ̶ó°í ¹Ï±â ¶§¹®¿¡ ¿ì¸®°¡ ÀÌ ±Û¿¡¼­ ÀÛ¾÷ÇÒ ÄÚµå ¿¹Á¦¿¡¼­ INS¸¦ »ç¿ëÇÑ´Ù.

Note: SunÀÌ OMG INS Ç¥ÁØÀ» ¾ÆÁ÷ ¿ÏÀüÈ÷ ÄÄÆÄÀÏÇÏÁö ¾Ê¾Ò°í org.omg.CORBA.ORB ÀÎÅÍÆäÀ̽º¿¡ register_initial_reference¸¦ °ø°³ÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡ ÀÌ ±Û¿¡ ³ª¿Â ¼Ò½º ÄÚµå´Â Sun JDK¿Í´Â ÀÛµ¿ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ¿©·¯ºÐÀº IBM Developer Kit for Java technology, version 1.3.1 ÀÌ»óÀ» »ç¿ëÇØ¾ß ÇÒ °ÍÀÌ´Ù. ±×·¯³ª ³ª´Â À̸§ ¼­ºñ½º¸¦ »ç¿ëÇÏ´Â Sun ȣȯ ¿¹Á¦¸¦ ¸¸µé¾ú´Âµ¥, Âü°í ÀÚ·á ¼½¼Ç¿¡¼­ ´Ù¿î·Îµå¹ÞÀ» ¼ö ÀÖ´Ù.

Do-it-yourself RMI-IIOP

À̾߱â´Â ÃæºÐÈ÷ ÇßÀ¸´Ï ÀÌÁ¦ Äڵ带 ÀÛ¼ºÇØ º¸ÀÚ. ´ÙÀ½ ¼½¼Ç¿¡¼­ ¿ì¸®´Â °£´ÜÇÑ ÀÚ¹Ù ±â¹ÝÀÇ Å¬¶óÀ̾ðÆ®/¼­¹ö RMI-IIOP ¾ÖÇø®ÄÉÀ̼ÇÀ» ±¸ÃàÇÒ °ÍÀÌ´Ù. ÀÌ ¾ÖÇø®ÄÉÀ̼ÇÀº ¼¼ ºÎºÐÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù.: RMI ÀÎÅÍÆäÀ̽º¿Í ¼­¹ö ¾ÖÇø®ÄÉÀÌ¼Ç ¹× Ŭ¶óÀ̾ðÆ® ¾ÖÇø®ÄÉÀ̼ÇÀÌ ±×°ÍÀÌ´Ù. ¿¹Á¦´Â IIOP »ó¿¡ ÀÚ¹Ù Á÷·ÄÈ­ ±â´ÉÀ» ±¸ÇöÇϴµ¥, ¿©·¯ºÐÀº Àڹ٠Ŭ·¡½º°¡ Ŭ¶óÀ̾ðÆ®¿¡ ÀÇÇØ ¾î¶»°Ô ÀνºÅϽºÈ­µÇ°í, ¼­¹ö¿¡°Ô Àü´ÞµÇ°í, ¼­¹ö¿¡ ÀÇÇØ ¾î¶»°Ô º¯°æµÇ°í, ±×¸®°í ¾î¶»°Ô ±× º¯°æ »çÇ×µéÀÌ ¼Õ»óµÇÁö ¾ÊÀº ä Ŭ¶óÀ̾ðÆ®¿¡°Ô Àü´ÞµÇ´ÂÁö¸¦ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

Part 1: ÀÎÅÍÆäÀ̽º Á¤ÀÇÇϱâ

RMI-IIOP¿¡¼­ ¿ì¸®´Â RMI³ª IDL Áß¿¡¼­ ¼±ÅÃÇØ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ¿ì¸®´Â RMI°¡ IIOP¿¡¼­ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö¸¦ º¸°í ½Í±â ¶§¹®¿¡ RMI¸¦ »ç¿ëÇØ ¿¹Á¦ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÒ °ÍÀÌ´Ù. Listing 1Àº ¿ì¸®ÀÇ °£´ÜÇÑ ¿¹Á¦¿¡ ´ëÇÑ RMI ÀÎÅÍÆäÀ̽ºÀÌ´Ù:

Listing 1. RMIInterface.java

/*
 * Remote interface
 */
public interface RMIInterface extends java.rmi.Remote {
    public String hello() throws java.rmi.RemoteException;
    public SerClass alterClass(SerClass classObject) 
       throws java.rmi.RemoteException;
}

RMIInterface´Â hello() ¸Þ¼Òµå¿Í alterClass(SerClass) ¸Þ¼Òµå¸¦ Á¤ÀÇÇÑ´Ù. ÀÌ ¸Þ¼Òµå´Â SerializableÀ» ±¸ÇöÇÏ´Â Àڹ٠Ŭ·¡½ºÀÎ SerClass¸¦ ÃëÇÏ°í µ¿ÀÏÇÑ À¯ÇüÀÇ Å¬·¡½º¸¦ ¹ÝȯÇÑ´Ù. SerClass´Â ¸î °³ÀÇ ¸â¹ö¿Í ´ëÀÀÇÏ´Â getter ¸Þ¼Òµå¸¦ °¡Áø °£´ÜÇÑ Å¬·¡½ºÀÌ´Ù. Listing 2¿¡ ÀÌ ¸Þ¼Òµå°¡ ³ª¿Í ÀÖ´Ù:

Listing 2. SerClass.java

/**
 *  This class is intended to be serialized over RMI-IIOP.
 */
public class SerClass implements java.io.Serializable {
	// members
	private int x;
	private String myString;

	// constructor
	public SerClass(int x, String myString) 
	   throws java.rmi.RemoteException {
		this.x=x;
		this.myString=myString;
	} 
	
	// some accessor methods
	public int getX() {  return x;}
	public void setX(int x) { this.x=x; }
	public String getString() {  return myString;  }
	public void setString(String str) { myString=str; }
}

¿ì¸®ÀÇ °£´ÜÇÑ ÀÎÅÍÆäÀ̽º´Â ÀÌ°ÍÀÌ ÀüºÎÀÌ´Ù. ÀÌÁ¦ ¼­¹ö Ŭ·¡½º¸¦ »ìÆì º¸ÀÚ.

Part 2: ¼­¹ö ±¸ÃàÇϱâ

¿ì¸®´Â RMIInterface ±¸Çö Ŭ·¡½º·Î ÀÛµ¿ÇÏ°í ¿ì¸®ÀÇ ¼­ºñ½º¸¦ ±¸µ¿½Ãų ÁÖ ¸Þ¼Òµå¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â ¼­¹ö Ŭ·¡½º (Server.java) ¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. Server.java´Â javax.rmi.PortableRemoteObject¸¦ È®ÀåÇÑ´Ù. ÀÌ·± ½ÄÀ¸·Î Server.java´Â ÀÚ½ÅÀ» Remote ÀÎÅÍÆäÀ̽º·Î ORB¿¡ °áÇÕ½ÃÅ°°í ¿äûÀÌ ÀÖ´ÂÁö ´ë±âÇϱâ À§ÇØ ÇÊ¿äÇÑ ¸ðµç ±â´ÉÀ» °¡Áö°Ô µÈ´Ù. Listing 3Àº ¼­¹ö¿ë ÄÚµåÀÌ´Ù:

Listing 3. Server.java

/*
 * Simple server
 */
import java.util.*;
import java.rmi.Remote;
import java.rmi.RemoteException;
import javax.rmi.PortableRemoteObject;
import javax.rmi.CORBA.Tie;
import javax.rmi.CORBA.Util;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.*;
import org.omg.PortableServer.Servant;
import org.omg.CORBA.ORB;

public class Server extends PortableRemoteObject 
    implements RMIInterface {
    // must explicitly create default constructor 
    // to throw RemoteException
    public Server() throws RemoteException {
    }

    // implementation of RMIInterface methods
    public String hello() throws RemoteException {
    	return "Hello there!";
    }

    public SerClass alterClass(SerClass classObject) 
        throws RemoteException {
    	// change the values of SerClass and return it.
	// add 5 to X
    	classObject.setX( 
    	   classObject.getX() + 5 ); 
	// alter the string
    	classObject.setString( 
    	   classObject.getString() + " : I've altered you" ); 
    	return classObject;
    }	

    public static void main(String[] args) {
    	try {
    	    // create the ORB passing in the port to listen on
    	    Properties props = new Properties();
    	    props.put("com.ibm.CORBA.ListenerPort","8080");
    	    ORB orb = ORB.init(args, props);
    
    	    // instantiate the Server
    	    // this will automatically call exportObject(this)
    	    Server s = new Server();
            
    	    // now get the Stub for our server object - 
         // this will be both
    	    // a remote interface and an org.omg.CORBA.Object
    	    Remote r=PortableRemoteObject.toStub(s);        		
    
    	    // register the process under the name 
         // by which it can be found	
    	    ((com.ibm.CORBA.iiop.ORB)orb).
    		register_initial_reference("OurLittleClient",
			(org.omg.CORBA.Object)r);
    
    	    System.out.println("Hello Server waiting...");
    	    // it's that easy - 
	    // we're registered and listening for incoming requests
    	    orb.run();
    	} catch (Exception e) {
    	    e.printStackTrace();
    	}
    }
}

¿©±â¿¡¼­ ¹«½¼ ÀÏÀÌ ÀϾ´Â°¡?

¼­¹ö ¾ÖÇø®ÄÉÀ̼ÇÀº ¸¹Àº Äڵ带 °¡Áö°í ÀÖ´Ù. À̸¦ ³ª´©¾î º¸ÀÚ. ¿ì¼± À§¿¡¼­ ¾ð±ÞÇÑ´ë·Î Server Ŭ·¡½º´Â RMIInterface¸¦ ±¸ÇöÇÏ°í ¸ðµç ¸Þ¼Òµå¿¡ ´ëÇÑ ±¸ÇöÀ» Á¦°øÇÑ´Ù. ¿©·¯ºÐÀº ÄÚµåÀÇ ¼­µÎ¿¡¼­ RMIInterfaceÀÇ hello()¿Í alterClass(SerClass) ¸Þ¼ÒµåÀÇ ±¸ÇöÀ» º¼ ¼ö ÀÖ´Ù. hello() ¸Þ¼Òµå´Â °£´ÜÈ÷ 'Hello there"¶ó´Â ¹®ÀÚ¿­À» ¹ÝȯÇÑ´Ù. alterClass(SerClass)¸Þ¼Òµå´Â SerClass °´Ã¼¸¦ ÃëÇØ ¸â¹öÀÇ °ªÀ» º¯°æÇÑ ÈÄ »õ·Î¿î °´Ã¼¸¦ ¹ÝȯÇϴµ¥, ÀÌ ¸ðµç ÀÛ¾÷¿¡ RMI-IIOP¸¦ »ç¿ëÇÑ´Ù.

Server.javaÀÇ ÁÖ ¸Þ¼Òµå´Â ORB¸¦ ÃʱâÈ­ÇÏ°í, 8080À¸·Î ¼³Á¤µÈ com.ibm.CORBA.ListenerPort Ư¼ºÀ» ¸Å°³º¯¼ö·Î½á Àü´ÞÇÑ´Ù. ±×·¯¸é ORB´Â 8080 Æ÷Æ®¿¡ ¿äûÀÌ µé¾î¿ÈÀ» ¾Ë°Ô µÉ °ÍÀÌ´Ù. om.ibm.CORBA.ListenerPort´Â IBMÀÇ µ¶ÀÚÀûÀΠƯ¼ºÀÓ¿¡ ÁÖÀÇÇÑ´Ù. ¿©·¯ºÐÀÌ ÀÌ Äڵ带 ´Ù¸¥ º¥´õÀÇ ORB¿¡¼­ ½ÇÇà½ÃÅ°°í ½Í´Ù¸é ±× º¥´õÀÇ ¹®¼­¸¦ ÂüÁ¶ÇÏ¿© ÀûÀýÇÑ Æ¯¼ºÀ» ã¾Æ¾ß ÇÑ´Ù. (SunÀº com.sun.CORBA.POA.ORBPersistentServerPort¸¦ »ç¿ëÇÏÁö¸¸, ÀÌ Æ¯¼ºÀº ¿©·¯ºÐÀÌ POA (portable object adapter)¸¦ »ç¿ëÇÒ ¶§¸¸ ÀÛµ¿ÇÑ´Ù.)

ORB°¡ ÃʱâÈ­µÇ¸é ÁÖ ¸Þ¼Òµå´Â Server °´Ã¼¸¦ ÀνºÅϽºÈ­ÇÑ´Ù. ¼­¹ö °´Ã¼´Â ¶ÇÇÑ PortableRemoteObjectÀ̱⠶§¹®¿¡, ±âº» »ý¼ºÀÚ°¡ ÀÚµ¿À¸·Î exportObject(this)¸¦ È£ÃâÇÑ´Ù. °´Ã¼´Â ÀÌÁ¦ ¿ø°Ý È£ÃâÀ» ¹ÞÀ» Áغñ°¡ µÇ¾ú´Ù.

´ÙÀ½¿¡ ¿ì¸®´Â °´Ã¼¸¦ ORB.register_initial_reference(String,orb.omg.CORBA.Object)¿¡ ´ëÇÑ È£Ãâ¿¡ µî·ÏÇØ¾ß ÇÑ´Ù. ÀÌÁ¦, ¿ì¸®´Â ÀÌ °´Ã¼¸¦ È£ÃâÀ» ÅëÇØ ORB.register_initial_reference(String,orb.omg.CORBA.Object)¿¡ µî·ÏÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. À̸¦ À§ÇØ ¿ì¸®ÀÇ ¼­¹ö °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶¸¦ omg.CORBA.Object·Î °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. PortableRemoteObject.toStub(s) È£ÃâÀÌ À̸¦ ¼öÇàÇÏ°Ô µÇ´Âµ¥, ¹ÝȯµÇ´Â °´Ã¼°¡ java.rmi.Remote¿Í org.omg.CORBA.Object ¸ðµÎ¸¦ ±¸ÇöÇϱ⠶§¹®ÀÌ´Ù.

¹ÝȯµÈ org.omg.CORBA.Object °´Ã¼´Â ¼­¹öÃø ORB¿¡ "OurLittleClinet"·Î µî·ÏµÈ´Ù. INS ¿äûÀÌ °´Ã¼¸¦ ãÀ» ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ ¿ì¸®´Â µî·Ï È£Ãâ register_initial_referenceÀ» »ç¿ëÇÑ´Ù. INS È£ÃâÀÌ ORB¿¡ µé¾î ¿À¸é ORB´Â ¿äûµÈ À̸§ ÇÏ¿¡ µî·ÏµÈ °´Ã¼¸¦ ãÀ» °ÍÀÌ´Ù. ¿ì¸®°¡ °´Ã¼¸¦ "OurLittleClient"·Î µî·ÏÇ߱⠶§¹®¿¡ ¿ì¸®´Â INS È£ÃâÀÌ "OurLittleClient"¸¦ ã±â À§ÇØ ¿ì¸®ÀÇ ¼­¹ö ORB¿¡ µé¾î ¿Ã ¶§ Ŭ¶óÀ̾ðÆ®°¡ ¾î¶² °´Ã¼¸¦ ã°í ÀÖ´ÂÁö ¾Ë °ÍÀÌ´Ù.

¸¶Áö¸·À¸·Î, ¿©·¯ºÐÀº ORB¸¦ com.ibm.CORBA.iiop.ORB·Î º¯È¯ÇßÀ½À» ¾Ë¾ÆÂ÷·ÈÀ» °ÍÀÌ´Ù. SunÀº ¾ÆÁ÷ org.omg.CORBA.ORB ÀÎÅÍÆäÀ̽º¿¡ register_initial_reference¸¦ °ø°³ÇÏÁö ¾Ê¾Ò°í, IBM SDKµµ °ø°³ÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. µû¶ó¼­ ¿ì¸®´Â ORB¸¦ IBM ORB·Î º¯È¯ÇØ¾ß ÇÑ´Ù. SUNÀÇ OMG Áö¿øÀÌ ¹ßÀüÇÔ¿¡ µû¶ó JDK ÇâÈÄ ¹öÀü (1.4.0 ÀÌÈÄ)¿¡¼­´Â ¾Æ¸¶µµ ÀÌ·¯ÇÑ º¯È¯ÀÌ ÇÊ¿ä ¾øÀ» °ÍÀÌ´Ù.

ÀÌ°Ô ÀüºÎ´Ù. ¿ì¸® ¼­¹ö´Â ÀÌÁ¦ µé¾î¿À´Â Ŭ¶óÀ̾ðÆ® INS ¿äûÀ» ±â´Ù¸®°í ÀÖ´Ù. ±×·¸´Ù¸é Ŭ¶óÀ̾ðÆ®´Â ¾î¶°ÇÑ°¡?

Part 3: Ŭ¶óÀ̾ðÆ® ±¸ÃàÇϱâ

Ŭ¶óÀ̾ðÆ® ¾ÖÇø®ÄÉÀ̼ǿë Äڵ尡 Listing 4¿¡ ³ª¿Í ÀÖ´Ù:

Listing 4. Client.java

/*
 * Client application
 */
import javax.rmi.PortableRemoteObject;
import org.omg.CORBA.ORB;

public class Client {
  public static void main(String[] args) {
    try {
      ORB orb = ORB.init(args, null);
    
    	 // here's the URL for the local host
    	 String INSUrl = 
        "corbaloc:iiop:1.2@localhost:8080/OurLittleClient";	 
       
    	 // get the reference to the remote process
    	 org.omg.CORBA.Object objRef=orb.string_to_object(INSUrl);
    	 // narrow it into our RMIInterface
    	 RMIInterface ri = 
  (RMIInterface)PortableRemoteObject.narrow(objRef, RMIInterface.class);
    	
      // call the hello method
    	 System.out.println("received from server: "+ri.hello()+"\n");  
    
      // try RMI serialization
    	 SerClass se = new SerClass(5, "Client string! ");
    	 // pass the class to be altered on the server
    	 // of course behind the scenes this class is being 
      // serialized over IIOP
    	 se = ri.alterClass(se);
    	 // now let's see the result
    	 System.out.println("Serialization results :\n"+
    	    "Integer was 5 now is "+se.getX()+"\n"+
    	    "String was \"Client String! \" 
         now is \""+se.getString()+"\"");   
    	} catch (Exception e) {
    	    e.printStackTrace();
    	}
    }
}

Ŭ¶óÀ̾ðÆ® Äڵ带 ³ª´©´Â ¹æ¹ý

Ŭ¶óÀ̾ðÆ® ÄÚµå´Â ¼­¹ö Äڵ庸´Ù ´Ù¼Ò °£´ÜÇÏ´Ù. ¿ì¸®´Â ORB¸¦ ÃʱâÈ­ÇÏ°í string_to_object(String)À» È£ÃâÇϴµ¥, ¿©±â¼­ stringÀº ¿ì¸®ÀÇ INS URLÀÌ´Ù. INS URLÀ» ±¸¼ºÇÏ´Â °ÍÀº ºñ±³Àû °£´ÜÇÏ´Ù. : ¸ÕÀú ¿ì¸®°¡ corbaloc URL (Âü°í ÀÚ·á)°ú IIOP ÇÁ·ÎÅäÄÝ v.1.2¸¦ »ç¿ëÇÏ°í ÀÖÀ½À» ÁöÁ¤ÇÑ´Ù. ´ÙÀ½¿¡ È£½ºÆ®¸í(www.whatever.com)°ú Á¢¼ÓÇÒ Æ÷Æ®¸¦ Ãß°¡ÇÑ´Ù. ¸¶Áö¸·À¸·Î ¿ì¸®°¡ ã°í ÀÖ´Â ¼­ºñ½º À̸§À» ÁöÁ¤ÇÑ´Ù. ±× °á°ú corbaloc:iiop:1.2@localhost:8080/OurLittleClient¶ó´Â INS URLÀÌ ³ª¿Â´Ù.

¿ì¸®°¡ ÀÌ URLÀ» ORB.string_to_object(String)¿¡ Àü´ÞÇϸé ORB´Â ¿äûµÈ ¼­ºñ½º°¡ ÁöÁ¤µÈ ¼­¹ö¿¡°Ô ¿äûÀ» º¸³¾ °ÍÀÌ´Ù. ¸ðµç °ÍÀÌ Á¦´ë·Î ÀÛµ¿ÇÑ´Ù°í °¡Á¤Çϸé ORB´Â ¼­ºñ½º¿¡ ´ëÇÑ °´Ã¼ ÂüÁ¶ (½ÇÁ¦·Î´Â IOR)¸¦ µ¹·Á ¹ÞÀ» °ÍÀÌ´Ù. ±×·¯¸é ¿ì¸®´Â °´Ã¼ ÂüÁ¶¸¦ ¿ì¸®°¡ »ç¿ëÇÒ ¼ö ÀÖ´Â °Í, Áï RMIInterface·Î Á¼Èù´Ù. ÀÌÁ¦ ¿ì¸®´Â ¸Þ¼Òµå È£ÃâÀ» ½ÃÀÛÇÒ Áغñ°¡ µÇ¾ú´Ù.

°£´ÜÇÑ hello ¸Þ¼Òµå (¼³¸íÀÌ ÇÊ¿ä ¾øÀ» °ÍÀÌ´Ù.)¸¦ È£ÃâÇÑ ÈÄ ¿ì¸®´Â RMI-IIOPÀÇ Á÷·ÄÈ­ ±â´É¿¡ ´ëÇÑ Å½»ç¸¦ ½ÃÀÛÇÒ ¼ö ÀÖ´Ù. ¿ì¼± Á÷·ÄÈ­ °¡´ÉÇÑ Àڹ٠Ŭ·¡½ºÀÎ SerClass¸¦ ¸¸µé°í ±× ¸â¹ö º¯¼ö¸¦ ÃʱâÈ­ÇÑ´Ù. ±×¸®°í IIOP¸¦ ÅëÇØ ¼­¹ö¿¡°Ô ÀÌ Å¬·¡½º¸¦ Àû¾î ³»º¸³¾ ¿ì¸®ÀÇ ¸Þ¼Òµå·Î ÀÌ Å¬·¡½º¸¦ º¸³½´Ù. ¼­¹ö´Â Ŭ·¡½º¸¦ Àаí À̸¦ ¼­¹öÃø ÀÚ¹Ù °´Ã¼·Î Àç»ý¼ºÇÏ°í, ±× ¸â¹ö °ªÀ» º¯°æÇÑ ÈÄ ¿ì¸® ¸Þ¼ÒµåÀÇ ¹Ýȯ°ªÀ¸·Î½á (IIOP¸¦ »ç¿ëÇÏ¿©) ¹ÝȯÇÑ´Ù. ¿ø°Ý ¸Þ¼Òµå È£Ãâ ÈÄ ¿ì¸®°¡ Àç»ý¼ºµÈ °´Ã¼¸¦ ¹Þ¾ÒÀ» ¶§ ¿ì¸®´Â ±× ¸â¹ö°¡ ¼­¹ö¿¡ ÀÇÇØ ½ÇÁ¦·Î º¯°æµÇ¾úÀ½À» ¾Ë ¼ö ÀÖ´Ù. IIOP¿¡¼­ÀÇ ÀÚ¹Ù Á÷·ÄÈ­´Â ÀÌó·³ °£´ÜÇÏ´Ù.

Part 4: ¿¹Á¦ ½ÇÇà½ÃÅ°±â

¿ì¸®°¡ ¿©±â¿¡¼­ °³¹ßÇÑ ¿¹Á¦´Â IBM Developer Kit for Java technology, version 1.3.1 ÀÌ»ó°ú ÇÔ²² ½ÇÇàµÇ¾î¾ß ÇÔ¿¡ ÁÖÀÇÇÑ´Ù. Sun JDK¸¦ »ç¿ëÇÏ°í ½Í´Ù¸é Sun¿¡ µ¶ÀÚÀûÀÎ ¼Ò½º Äڵ带 ´Ù¿î¹Þ±â ¹Ù¶õ´Ù. ÀÌ ÄÚµå´Â Sun 1.4.0 JDK À̻󿡼­ ½ÇÇàµÇ¾î¾ß ÇÑ´Ù. ÀÌ ¼Ò½º Äڵ忡´Â IBM SDK¿Í Sun JDK°£ÀÇ Â÷À̸¦ ¼³¸íÇÑ readme.txt ÆÄÀÏÀÌ µé¾î ÀÖ´Ù. IBM Developer Kit for Java technology´Â Áö±Ý ´Ù¿î·Îµå¹ÞÀ» ¼ö ÀÖ´Ù. ¹«·áÀÌ´Ù.

¿¹Á¦¸¦ ½ÇÇà½ÃÅ°´Â ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù:

  1. ¼Ò½º ÆÄÀÏÀ» ´Ù¿î·Îµå¹Þ´Â´Ù.

  2. javac *.java¸¦ ÀÔ·ÂÇÏ¿© ¸ðµç ÆÄÀÏÀ» javac·Î ÄÄÆÄÀÏÇÑ´Ù.

  3. rmic -iiop Server¶ó´Â IIOP falg·Î ¼­¹ö Ŭ·¡½º¿¡ rmic¸¦ ½ÇÇà½ÃŲ´Ù.

  4. ¼­¹ö¸¦ ±¸µ¿½ÃŲ´Ù. : À©µµ¿ì¿¡ start java Server¸¦ ÀÔ·ÂÇÑ´Ù.

  5. Ŭ¶óÀ̾ðÆ®¸¦ ±¸µ¿½ÃŲ´Ù. : À©µµ¿ì¿¡ start java Client¸¦ ÀÔ·ÂÇÑ´Ù.

RMI-IIOP¿Í EJB ÄÄÆ÷³ÍÆ®¿¡ ´ëÇÑ ³ëÆ®

EJB 2.0 »ç¾ç¿¡´Â EJB ÄÄÆ÷³ÍÆ®°¡ RMI¿Í RMI-IIOP¸ðµÎ¿¡¼­ ½ÇÇàµÉ ¼ö ÀÖ¾î¾ß ÇÑ´Ù°í ³ª¿Í ÀÖ´Ù. RMI-IIOP¸¦ EJB ÄÄÆ÷³ÍÆ®¿¡ ´ëÇÑ Àü¼Û ÇÁ·ÎÅäÄÝ·Î Ãß°¡ÇÏ¸é ´ëºÎºÐ ¸Å¿ì CORBA Áý¾àÀûÀÎ ±âÁ¸ÀÇ ±â¾÷ ÀÎÇÁ¶ó¿¡ J2EE ȯ°æÀ» ÅëÇÕ½ÃÅ°´Â °ÍÀ» »ó´çÈ÷ µµ¿ÍÁØ´Ù. ±×·¯³ª ¸î °¡Áö ¹®Á¦µµ ÀÖ´Ù.

°£´ÜÇÏ°Ô ¸»ÇÏÀÚ¸é »ç¿ëÀÚ Á¤ÀÇ ÄÄÆ÷³ÍÆ®¿Í EJB ÄÄÆ÷³ÍÆ®¸¦ ÅëÇÕÇϸé, ÅëÇÕµÇÁö ¾Ê¾ÒÀ» °æ¿ì EJB ¾ÆÅ°ÅØó°¡ ¿ä¾àÇÏ¿© ¿©·¯ºÐ¿¡°Ô Àü´ÞÇßÀ» plumbingÀ» ¿©·¯ºÐ (°³¹ßÀÚ)ÀÌ ´Ù·ç¾î¾ß ÇÑ´Ù. ¾ÆÁ÷ ÀÌ ¹®Á¦¿¡ ´ëÇÑ °£´ÜÇÑ ¼Ö·ç¼ÇÀÌ ³ª¿Í ÀÖÁö ¾ÊÀ¸¸ç, ¾ÕÀ¸·Îµµ Èûµé °ÍÀÌ´Ù. À¥¼­ºñ½º¿Í °°ÀÌ ¶°¿À¸£´Â ±â¼úµé·ÎºÎÅÍ ¼Ö·ç¼ÇÀÌ ³ª¿Ã ¼ö ÀÖÀ» °ÍÀÌÁö¸¸, ¾ÆÁ÷Àº ¾Ë·ÁÁ®ÀÖÁö ¾Ê´Ù.

°á·Ð : ¿©±â¿¡¼­ ¾îµð·Î °¡¾ß ÇÒ °ÍÀΰ¡?

ÀÌ ±ÛÀÌ ¿©·¯ºÐ¿¡°Ô RMI-IIOP Ŭ¶óÀ̾ðÆ®/¼­¹ö ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ°í ½ÇÇàÇÏ´Â °ÍÀÌ ¾ó¸¶³ª ½¬¿îÁö¸¦ º¸¿© ÁÖ¾ú±â¸¦ ¹Ù¶õ´Ù. ¿ì¸®°¡ »ç¿ëÇÑ ¿¹Á¦¿¡¼­ Ŭ¶óÀ̾ðÆ®¿Í ¼­¹ö¸¦ ¼ø¼ö CORBA·Î ¹Ù²Ù¾î È°¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ±×·¸°Ô Çϸé ÀÚ¹Ù Á÷·ÄÈ­°¡ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ºüÁú °ÍÀÌ´Ù.

RMI-IIOP¸¦ CORBA ȯ°æ¿¡¼­ »ç¿ëÇÏ´Â °ÍÀ» °í·ÁÇÏ°í ÀÖ´Ù¸é IDLÀÌ ÀÚ¹Ù¿¡ ¾î¶»°Ô ´ëÀÀµÇ´ÂÁö, ±×¸®°í ÀÚ¹Ù°¡ IDL¿¡ ¾î¶»°Ô ´ëÀÀµÇ´ÂÁö¸¦ º¸´Â °ÍÀÌ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. RMI-IIOP¸¦ ¾ÈÀüÇÏÁö ¾ÊÀº ȯ°æ (¿©·¯ºÐµéÀÇ PC¸¦ À̾߱âÇÏ´Â °ÍÀº ¾Æ´Ï°í)¿¡ ¹èÄ¡ÇÒ °ÍÀ» °í·ÁÇÏ°í ÀÖ´Ù¸é ÀÎÅͼÁÅͳª CORBA º¸¾È ¸ðµ¨°ú °°Àº CORBA º¸¾È ±â´É°ú Æ®·£Àè¼Ç ó¸®¿Í °°Àº CORBAÀÇ ´Ù¸¥ ±â¾÷¿ë ±â´ÉµéÀ» »ìÆ캸´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù. RMI-IIOP¸¦ »ç¿ëÇϸé CORBAÀÇ Ç³ºÎÇÑ ¸ðµç ±â´ÉÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.

³ª¿¡°Ô Á÷Á¢, ȤÀº discussion forumÀ» ÅëÇØ ÀÌ ±Û¿¡ °üÇÑ ¿©·¯ºÐÀÇ ÀÇ°ßÀ» ÀÚÀ¯·Ó°Ô Á¦°øÇϱ⠹ٶõ´Ù. ³ª´Â ¿©·¯ºÐÀÇ »ý°¢¿¡ °ü½ÉÀ» °¡Áö°í ÀÖ´Ù.

Âü°íÀÚ·á

ÇÊÀÚ¼Ò°³
Damian Hagge´Â IBMÀÇ Hursley Development Laboratories¿¡¼­ ÀÏÇÏ°í ÀÖ´Ù.



ÀÌ ±â»ç¿¡ ´ëÇÏ¿© ¾î¶»°Ô »ý°¢ÇϽʴϱî?

Á¤¸» ÁÁ´Ù (5) ÁÁ´Ù (4) ±×Àú±×·¸´Ù (3) ¼öÁ¤º¸¿ÏÀÌ ÇÊ¿äÇÏ´Ù(2) ÇüÆí¾ø´Ù (1)

  È¸»ç¼Ò°³  |  °³ÀÎÁ¤º¸ º¸È£Á¤Ã¥  |  ¹ý·ü  |  ¹®ÀÇ