ÀÚ¹Ù RMI (Remote Method Invovation) »ç¿ëÇϱâ
¼­Ã¢±Ù <chang@webdox.co.kr>

2001³â 3¿ù 7ÀÏ

°³¿ä
°´Ã¼ÁöÇâ ¼ÒÇÁÆ®¿þ¾î °³¹ß
Çö´ë ¼ÒÇÁÆ®¿þ¾î °³¹ß °³³ä Áß ±Ù·¡¿¡ °¡Àå ¸¹Àº ÁÖ¸ñÀ» ¹Þ°í ÀÖ´Â °ÍÀÌ ¹Ù·Î °´Ã¼ÁöÇâ °³¹ßÀÌ´Ù. C¿Í °°Àº ¼øÂ÷ÀûÀÎ °³¹ß ¾ð¾î´Â ÇÁ·Î±×·¥ÀÌ ½ÃÀÛ¿¡¼­ ³¡±îÁö ¼ø¼­´ë·Î ½ÇÇàµÇÁö¸¸ °´Ã¼ÁöÇâ °³¹ß °³³äÀº °¢ ÇÁ·Î±×·¥ÀÌ °´Ã¼·Î ±¸¼ºµÇ¾î ÀÖ°í ±× °´Ã¼ °£ÀÇ ¸Þ¼¼Áö Àü¼ÛÀ¸·Î ½ÇÇàµÈ´Ù. ÇöÀç ÀÚ¹Ù·Î ´ëº¯µÇ´Â °´Ã¼ÁöÇâ °³¹ß °³³äÀº ¼ÒÇÁÆ®¿þ¾î °øÇко߿¡ ¸¹Àº ¹ßÀüÀ» °¡Á®¿Ô´Ù. ¹°·Ð ÀÚ¹Ù°¡ °´Ã¼ÁöÇâ °³¹ë °³³äÀ» ±¸ÇöÇÏ°í ÀÖ´Â À¯ÀÏÇÑ ¾ð¾î´Â ¾Æ´Ï´Ù. ½ÇÁ¦ °´Ã¼ÁöÇâ °³¹ß °³³äÀº ²Ï ¿À·¡ÀüºÎÅÍ Smalltalk µî¿¡¼­ ±¸ÇöµÇ¾úÀ¸¸ç ¾ó¸¶ Àü±îÁö¸¸ Çصµ C++°¡ ´ëÇ¥ÀûÀÎ Á¸Àç¿´´Ù. ±×·¯³ª, ÇöÀç °¡Àå ÀαⰡ ¸¹°í ÁÖ¸ñÀ» ¹Þ°í ÀÖ´Â ¾ð¾î°¡ ÀÚ¹ÙÀÎ °Í¸¸Àº »ç½ÇÀÌ¸ç »ç½Ç»ó C++´Â °³¹ßÀÇ ¾î·Á¿ò µîÀ¸·Î ÀÎÇØ ÀÚ¹Ù¸¸ÇÑ ´ëÁß¼ºÀº ¾òÁö ¸øÇÏ°í ÀÖ´Ù.

ºÐ»ê½Ã½ºÅÛ
¼ÒÇÁÆ®¿þ¾î °³¹ß¿¡¼­ °¡Àå ÁÖ¸ñ¹Þ°í ÀÖ´Â °ÍÀÌ °´Ã¼ÁöÇâ °³¹ßÀ̶ó¸é ½Ã½ºÅۺо߿¡¼­ °¡Àå ÁÖ¸ñ¹Þ´Â °ÍÀº ºÐ»ê½Ã½ºÅÛÀÇ °³³äÀÌ´Ù. ¾î¼¸é ÀÌ ºÐ»ê½Ã½ºÅÛÀÇ °³³äÀÌ °´Ã¼ÁöÇâ °³¹ßÀ» Àý´ëÀûÀ¸·Î ÇÊ¿äÇÏ°Ô ÇßÀ»Áöµµ ¸ð¸¥´Ù. ºÐ»ê½Ã½ºÅÛÀ̶õ ±âº»ÀûÀ¸·Î ´Ù¼öÀÇ ÄÄÇ»ÅÍ°¡ ÇϳªÀÇ ½Ã½ºÅÛó·³ ÀÛµ¿ÇÏ¸ç »ç¿ëÀÚ¿¡°Ô ±× Â÷À̸¦ ´À³¢Áö ¸øÇÏ°Ô ÇÏ´Â ½Ã½ºÅÛÀ» ¸»ÇÑ´Ù. ºÐ»ê½Ã½ºÅÛÀÇ Áß¿äÇÑ °³³äÀº ¸í·É½ÇÇàÀÇ Åõ¸í¼º (transparency), È¿À²¼º (efficiency), ÀÏ°ü¼º (consistency), À¯¿¬¼º (flexibility), ±×¸®°í robustness µîÀ» µé ¼ö Àִµ¥ ±× Áß °¡Àå ¸¹ÀÌ °­Á¶ÇÏ´Â °ÍÀÌ Åõ¸í¼ºÀÌ´Ù. Áï, »ç¿ëÀÚ°¡ ¾î¶² ¸í·ÉÀ» ½ÇÇà½ÃÄ×À» °æ¿ì ±× ¸í·ÉÀÌ Áö±Ý »ç¿ëÀÚ°¡ »ç¿ëÇÏ°í ÀÖ´Â ÄÄÇ»ÅÍ¿¡¼­ ½ÇÇàµÇ°í ÀÖ´ÂÁö, ¾Æ´Ï¸é ³×Æ®¿öÅ©¿¡ ¿¬°áµÈ ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼­ ½ÇÇàµÇ°í ÀÖ´ÂÁö ºÐ°£ÇÒ ¼ö ¾øÀ½À» ¸»ÇÑ´Ù. ´ëÇ¥ÀûÀÎ ºÐ»ê½Ã½ºÅÛÀ¸·Î UNIXÀÇ NFS (Network File System), AFS (Andrew File System), CODA µîÀÌ ÀÖ´Ù.

ÀÌ·¯ÇÑ ½Ã½ºÅÛ¿¡¼­ Áß¿äÇÑ °ÍÀº ¹Ù·Î ½Ã½ºÅÛ¿¡ ¼Ò¼ÓµÇ¾î ÀÖ´Â ÄÄÇ»ÅÍ °£ÀÇ Åë½ÅÀÌ´Ù. ´õ¿í ÀÚ¼¼ÇÏ°Ô ¸»ÇÏ¸é °¢ ÄÄÇ»ÅÍ¿¡¼­ ½ÇÇàµÇ°í ÀÖ´Â ÇÁ·Î±×·¥, ¶Ç´Â ÇÁ·Î¼¼½ºµéÀÌ ¼­·Î Åë½ÅÀÌ °¡´ÉÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥ »çÀÌÀÇ Åë½ÅÀ» °¡´ÉÇÏ°Ô ÇÏ´Â °Í Áß ÇöÀç UNIX¿¡¼­ °¡Àå ¸¹ÀÌ »ç¿ëµÇ°í ÀÖ´Â Åë½Å ÇÁ·ÎÅäÄÝÀÌ ¹Ù·Î RPC (Remote Procedure Call)ÀÌ´Ù. RPC´Â ³×Æ®¿öÅ©¿¡ ¿¬°áµÇ¾î ÀÖ´Â ´Ù¸¥ ÄÄÇ»ÅÍ¿¡ Á¸ÀçÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÀÚ°¡ ´«Ä¡Ã¤Áö ¸øÇϵµ·Ï ½ÇÇàÇØ ÁÜÀ¸·Î½á ºÐ»ê½Ã½ºÅÛÀÇ ±¸ÇöÀ» °¡´ÉÇÏ°Ô Çß´Ù. ±×·¯³ª, RPC´Â °´Ã¼ÁöÇâ °³¹ß°³³äÀ» ±¸ÇöÇÏÁö´Â ¾ÊÀ¸¸ç ´ÜÁö ´Ù¸¥ ÄÄÇ»ÅÍ¿¡ ÀúÀåµÇ¾î ÀÖ´Â ¼øóÀûÀÎ ¾ð¾î·Î °³¹ßµÈ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÇÔ¼ö¸¦ ºÎ¸¦ ¼ö ÀÖµµ·Ï ÇØÁÖ´Â ¿ªÇÒÀ» ÇÒ µû¸§ÀÌ´Ù.

RMI (Remote Method Invocation) ¶õ?
À§¿¡¼­ °´Ã¼ÁöÇâ °³¹ß °³³äÀ» ¼³¸íÇÒ ¶§ ÇÁ·Î±×·¥ÀÌ °´Ã¼ °£ÀÇ ¸Þ¼¼Áö Àü¼ÛÀ¸·Î ½ÇÇàµÈ´Ù°í Çß´Ù. ±×·¸´Ù¸é ¸¸¾à ÀÌ °´Ã¼µéÀÌ ¼­·Î ´Ù¸¥ ÄÄÇ»ÅÍ¿¡ Á¸ÀçÇÑ´Ù¸é ¾î¶»°Ô ÇؾßÇÒ±î? Áï, ¿¹ÀüÀÇ ºÐ»ê½Ã½ºÅÛÀÇ °³³äÀº ¼­·Î ´Ù¸¥ ÇÁ·Î±×·¥µéÀÌ ´Ù¸¥ ÄÄÇ»ÅÍ¿¡ Á¸ÀçÇÏ°í ½ÇÇàµÇ´Â °ÍÀÌ¿´´Ù¸é ±Ù·¡¿£ °¢ °´Ã¼°¡ ºÐ»êµÇ¾î Á¸ÀçÇÏ´Â °³³äÀÎ °ÍÀÌ´Ù. ƯÈ÷ Çö´ë ½Ã½ºÅÛ °³¹ßÀº ¾²¸®Æ¼¾î ½Ã½ºÅÛ (three-tier system)ÀÌ ÁÖ·ù¸¦ ÀÌ·ç¹Ç·Î µ¥ÀÌÅͺ£À̽º, ¾ÖÇø®ÄÉÀ̼Ç, ±×¸®°í Ŭ¶óÀ̾ðÆ®°¡ ¸ðµÎ °´Ã¼¸¦ ÅëÇÏ¿© ±¸ÇöµÇ°í µû·Î ÀúÀåµÇ´Â ÀÏÀÌ ¸¹¾ÆÁ³´Ù. ÀÌ·¸°Ô ºÐ»êµÇ¾î Á¸ÀçÇÏ´Â °´Ã¼°£ÀÇ ¸Þ¼¼Áö Àü¼Û(¸Þ½îµå¸¦ ºÎ¸£´Â °Í°ú µ¿ÀÏÇÔ)À» °¡´ÉÄÉ ÇØÁÖ´Â °ÍÀÌ ¹Ù·Î RMI ÇÁ·ÎÅäÄÝÀÌ´Ù. ±×¸®°í, °´Ã¼ÁöÇâ °³¹ß °³³äÀ» ±âº»À¸·Î RMIÀÇ ±â´É°ú transaction, securityµî ¿£ÅÍÇÁ¶óÀÌÁî±Þ ±â´ÉÀ» Æ÷°ýÀûÀ¸·Î ÄÞÆ÷³ÍÆ® ¸ðµ¨È­ÇÑ °ÍÀÌ ¹Ù·Î EJB (Enterprise JavaBeans)°¡ µÇ°Ú´Ù. ÀϹÝÀûÀ¸·Î ÀÚ¹Ù RMI¶ó°í Çϸé ÀÚ¹Ù ¾ÖÇø®ÄÉÀÌ¼Ç °£ÀÇ Åë½ÅÀ» °¡´ÉÄÉ ÇØÁÖ´Â ÇÁ·ÎÅäÄÝ·Î »ý°¢Çϳª ½ÇÁ¦·Î RMI ÀÚü´Â ÀÚ¹Ù RMI ÀÌÀüºÎÅÍ ¾²¿©Áö´ø ´Ü¾îÀÌ¸ç ´õ¿í Æ÷°ýÀûÀÎ Àǹ̸¦ Áö´Ñ´Ù. RMI´Â ºÐ»ê°´Ã¼ °³³äÀ» ±¸ÇöÇÏ´Â CORBA ¶Ç´Â DCOM µî¿¡¼­ ºÐ»ê°´Ã¼ °£ÀÇ Åë½ÅÀ» ±¸ÇöÇÏ´Â ¸ðµç ÇÁ·ÎÅäÄÝÀ» ÀǹÌÇÑ´Ù. CORBA³ª DCOMÀº ÀÌ ±ÛÀÇ ¹üÀ§ ¹ÛÀ̹ǷΠÁ¢¾îµÎ°í À̹ø ±Û¿¡¼± ƯÈ÷ ÀÚ¹Ù ¾ÖÇø®ÄÉÀÌ¼Ç °£ÀÇ RMI¿¡ ´ëÇØ ÁýÁßÀûÀ¸·Î »ìÆ캸µµ·Ï ÇÏÀÚ.

¿Ö RMI¸¦ »ç¿ëÇϴ°¡?
³×Æ®¿öÅ© ÇÁ·Î±×·¡¹ÖÀ» Çغ¸½Å µ¶ÀÚ¶ó¸é °ð ÀÌ·± Àǹ®À» °¡Áö°Ô µÉ °ÍÀÌ´Ù. ¿Ö³ÄÇÏ¸é ¸¹Àº µ¶ÀÚµéÀÌ Áö±Ý±îÁö µ¥ÀÌÅÍ Àü¼ÛÀ» À§Çؼ­ ¼ÒÄÏ(socket)À» »ç¿ëÇØ ¿Ô±â ¶§¹®ÀÌ´Ù. ±×·¯³ª, RMI¸¦ ¹è¿ì°í ³ª¸é ¾Æ¸¶µµ ÃÖ¼ÒÇÑ ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ¼ÒÄÏÀ» »ç¿ëÇÏ°íÀÚ ÇÏ´Â °³¹ßÀÚ´Â º°·Î ¾øÀ» °ÍÀÌ´Ù. ÇÁ·Î±×·¡¹ÖÀÇ ±âº»Àº µ¥ÀÌÅÍÀÇ Àü¼ÛÀÌ´Ù. RMI´Â ºÐ»ê°´Ã¼ °£ÀÇ µ¥ÀÌÅÍ Àü¼ÛÀ» ¸Þ½îµå¸¦ ºÎ¸¥´Â °Í°ú °°Àº ¹æ¹ýÀ¸·Î ½ÇÇö½ÃŲ´Ù. ¼ÒÄÏÀ» ´Ù·ç¾î º» µ¶ÀÚ¶ó¸é ¹ú½á ¾Ë°ÚÁö¸¸ ¸Þ½îµå¸¦ ºÎ¸£´Â °Í°ú ¼ÒÄÏÀ¸·Î µ¥ÀÌÅ͸¦ º¸³»´Â °Í Áß ¾î´À °ÍÀÌ ´õ ÆíÇÑ°¡? ´ç¿¬È÷ ¸Þ½îµå¸¦ ºÎ¸£´Â °ÍÀÌ ÈξÀ ´õ ÆíÇÏ´Ù. ¶È°°Àº µ¥ÀÌÅÍ Àü¼Û ¹æ¹ýÀÇ ÀÏȯÀε¥ ´õ ¾î·Æ°í ºÒÆíÇÑ ¹æ¹ýÀ» ¾µ ÇÊ¿ä°¡ ¾ø´Â °ÍÀÌ´Ù.

Áö±ÝºÎÅÍ ÀÚ¹Ù RMIÀÇ ±âº»ÀûÀÎ »ç¿ë ¹æ¹ýÀ» ¿¹Á¦¸¦ ÅëÇÏ¿© »ìÆ캸°í ´õ ÀÌ»ó ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö¿¡ ±¸¾Ö¹ÞÁö ¾Ê´Â ´õ¿í °­·ÂÇÏ°í ¼¼·ÃµÈ °³¹ßÀÚ°¡ µÇ¾îº¸µµ·Ï ÇÏÀÚ. ƯÈ÷ ÀÚ¹Ù RMI´Â EJBÀÇ Åë½Å ÁßÃßÀ̹ǷΠRMI¸¦ ÀÌÇØÇÏ°í ÀÖÀ¸¸é EJB¸¦ °øºÎÇϴµ¥µµ ´õ¿í ¼ö¿ùÇÏ´Ù. ÇöÀç EJB¸¦ °øºÎÇÏ°í Àְųª ³ªÁß¿¡ ¹è¿ì±â¸¦ ¿øÇÏ´Â µ¶Àڵ鿡°Õ RMIÀÇ ±âº» °³³äÀÇ ÀÌÇØ´Â ÇʼöÀûÀ̶ó ÇÏ°Ú´Ù.

RMI¿¡ °üÇؼ­
RMIÀÇ ±âº»°³³ä
RMI°¡ ÀÚ¹Ù¿¡¼­ ¾î¶»°Ô ±¸ÇöµÇ´ÂÁö »ìÆ캸±â Àü¿¡ ¸ÕÀú RMI°¡ ¾î¶»°Ô °¡´ÉÇÑÁö »ìÆ캸±â·Î ÇÏÀÚ. RMIÀÇ ±âº»ÀûÀÎ ÀÌ·ÐÀ» ¸ÕÀú °øºÎÇÏ´Â °ÍÀÌ ³ªÁß¿¡ ÀÚ¹Ù RMI¸¦ °øºÎÇÒ ¶§ ÀÌÇØÇϱ⠽±´Ù. ±×¸®°í ¹¹µçÁö ±×·¸Áö¸¸ ±â¹Ý ÀÌ·ÐÀ» ÀÌÇØÇÏ´Â °ÍÀÌ ³ªÁß¿¡ ¹®Á¦°¡ ¹ß»ýÇÏ¿´À» °æ¿ì ¹®Á¦¸¦ ¾Ë¾Æ³»°í ÇØ°áÇϱ⠽±±â ¶§¹®ÀÌ´Ù. RMIÀÇ °³³äÀ» ÀÚ¹Ù Áß½ÉÀ¸·Î ¼­¼úÇÏ¿´Áö¸¸ ´Ù¸¥ RMI ±â¹ýµéµµ ÀÌ¿Í ºñ½ÁÇÏ´Ù°í º¸¸é µÈ´Ù.

±×·¸´Ù¸é µµ´ëü RMI¿¡¼­ ¾î¶»°Ô ÇÑ °´Ã¼°¡ ´Ù¸¥ ÄÄÇ»ÅÍ¿¡ Á¸ÀçÇÏ´Â °´Ã¼¿¡°Ô ¸Þ¼¼Áö¸¦ Àü¼ÛÇÒ ¼ö ÀÖÀ»±î? °¡Àå ±âº»ÀûÀÎ ¹®Á¦´Â ±× °´Ã¼°¡ ´Ù¸¥ °´Ã¼ÀÇ Á¸À縦 ¾Ë¾Æ¾ß Çϸç, ±× °´Ã¼¿¡°Ô ¸Þ¼¼Áö¸¦ Àü¼ÛÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æ¾ß ÇÏ°í, ±×¸®°í ¸¶Áö¸·À¸·Î ±× °´Ã¼·ÎºÎÅÍ ¸Þ¼¼ÁöÀÇ ´äº¯À» ¹Þ¾Æ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ÀÌ °úÁ¤¿¡¼­ ¼ö¹ÝµÇ´Â ¹®Á¦´Â ¸Þ¼¼Áö¸¦ Àü¼ÛÇÏ°í ´äº¯À» ¹ÞÀ»¶§ ¾î¶°ÇÑ Á¾·ùÀÇ µ¥ÀÌÅ͸¦ ÁÖ°í ¹Þ¾Æ¾ß Çϴ°¡ÀÌ´Ù. RMI´Â À§¿¡ ³ª¿­µÈ ¹®Á¦¸¦ µÎ °¡ÁöÀÇ ¹æ¹ýÀ¸·Î ÇØ°áÇÑ´Ù. ù°°¡ ½ºÅÓ(stub)ÀÌ¸ç µÑ°°¡ parameter marshalling ÀÌ´Ù.

½ºÅÓ(stub) °ú Parameter Marshalling
¼³¸íÀ» À§Çؼ­ ¸Þ½îµå¸¦ ºÎ¸£·Á°í ÇÏ´Â °´Ã¼°¡ Á¸ÀçÇÏ´Â ÄÄÇ»Å͸¦ Ŭ¶óÀ̾ðÆ®¶ó°í ÇÏ°í ±× ¸Þ½îµå¸¦ ½ÇÇàÇÏ´Â °´Ã¼°¡ Á¸ÀçÇÏ´Â ÄÄÇ»Å͸¦ ¼­¹ö¶ó°í ÇÏÀÚ. ÀϹÝÀûÀÎ ÀǹÌÀÇ Å¬¶óÀ̾ðÆ®¿Í ¼­¹ö¿Í´Â ¾à°£ ´Ù¸£¹Ç·Î È¥µ¿ÇÏÁö ¸»±â¸¦ ¹Ù¶õ´Ù. ¿©±â¼± ´©°¡ ´©±¸ÀÇ ¸Þ½îµå¸¦ ºÎ¸£³Ä¿¡ µû¶ó ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®ÀÇ ¿ªÇÒÀÌ ¹Ù²ð¼öµµ ÀÖ´Ù. Ŭ¶óÀ̾ðÆ®ÀÇ °´Ã¼°¡ ¼­¹ö¿¡ Á¸ÀçÇÏ´Â °´Ã¼ÀÇ ¸Þ½îµå¸¦ ºÎ¸£·Á°í ÇÒ °æ¿ì ±× ¸Þ½îµåÀÇ Á¸À縦 ¾Ë·ÁÁÖ°í Ãß»óÀûÀ¸·Î ³ªÅ¸³» ÁÖ´Â °ÍÀÌ ¹Ù·Î ½ºÅÓÀÌ´Ù. ÀÌ ½ºÅÓÀº ½ÇÁ¦·Î ÀÎÅÍÆäÀ̽ºÀÇ ÇüÅ·Π¼­¹ö¿¡ ÀÖ´Â °´Ã¼°¡ ¿ø°ÝÀûÀ¸·Î ºÎ¸¦ ¼ö ÀÖ´Â ¸Þ½îµå¸¦ °ø°³ÇÏ´Â °ÍÀ¸·Î ¼­¹ö¿¡ ÀúÀåµÇ¾î ÀÖÀ¸¸ç Ŭ¶óÀ̾ðÆ®ÀÇ °´Ã¼°¡ ¼­¹ö¿¡ ÀÖ´Â ¸Þ½îµå¸¦ ºÎ¸£·Á°í ÇÒ ¶§ Ŭ¶óÀ̾ðÆ®·Î Àü´ÞÀÌ µÈ´Ù. ½ºÅÓ Å¬·¡½º´Â ¿ø·¡ ¼­¹öÀÇ °´Ã¼·ÎºÎÅÍ »ý¼ºÀÌ µÇÁö¸¸ Ŭ¶óÀ̾ðÆ®¿¡ ¸Ó¹«¸£¸é¼­ Ŭ¶óÀ̾ðÆ®°¡ ¼­¹öÀÇ ¸Þ½îµå¸¦ ºÎ¸¦ ¼ö ÀÖµµ·Ï µµ¿ÍÁØ´Ù. EJB¿¡¼­´Â ÀÌ°ÍÀ» ¿ø°Ý ÀÎÅÍÆäÀ̽º (remote interface)¶ó°íµµ ÇÑ´Ù.

½ºÅÓÀÌ ÇÏ´Â Áß¿äÇÑ ÀÏÀº µÎ °¡Áö°¡ ÀÖ´Ù. ù°´Â ´ç¿¬È÷ ¼­¹ö¿¡ Á¸ÀçÇÏ´Â ¸Þ½îµå¸¦ ºÒ·¯Áà¾ß ÇÏ°í µÑ°´Â ±× ¸Þ½îµåÀÇ ÀÎÀÚ¸¦ ÀÏÁ¤ÇÑ Æ÷¸ËÀ¸·Î ¹Ù²ãÁÖ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ÀÎÀÚ¸¦ ÀÏÁ¤ÇÑ Æ÷¸ËÀ¸·Î ¹Ù²ãÁÖ´Â ÀÏÀ» parameter marshalling À̶ó°í ÇÑ´Ù. Áï, ÀÎÀÚ¸¦ Á¶À²ÇÏ°í Á¤¸®ÇÏ´Â ¿ªÇÒÀ» ÇÏ´Â °ÍÀÌ´Ù. ¿Ö ÀÌ·± parameter marshalling ÀÌ ÇÊ¿äÇÑ °ÍÀϱî? ÄÄÇ»ÅÍ°³·ÐÀ» °øºÎÇØ º» µ¶ÀÚµéÀº ¾Ë°ÚÁö¸¸ ¸ðµç ÄÄÇ»ÅͽýºÅÛ¿¡¼­ µ¥ÀÌÅÍ Ç¥Çö¹æ¹ýÀÌ ¾à°£¾¿ ´Ù¸£´Ù´Â °ÍÀ» ¾Ë °ÍÀÌ´Ù. ¿¹¸¦ µé¾î ¾î¶² ½Ã½ºÅÛÀº big-endianÀ¸·Î Ç¥ÇöÇÏ°í ¾î¶² ½Ã½ºÅÛÀº little-endianÀ¸·Î Ç¥½ÃÇÑ´Ù. Á¤¼ö°¡ Â÷ÁöÇÏ´Â ¸Þ¸ð¸®ÀÇ ¾çµµ ´Ù¸¦ ¼ö ÀÖ´Ù. ÀÚ¹Ù´Â Ç÷§Æû°ú´Â µ¶¸³ÀûÀ¸·Î ÀÛµ¿ÇÏ´Â ¾ð¾îÀÌ´Ù. ¸¸¾à ÇÑ °´Ã¼°¡ À©µµ¿ì ½Ã½ºÅÛ¿¡¼­ ÀÛµ¿ÇÏ°í ´Ù¸¥ °´Ã¼´Â À¯´Ð½º ȯ°æ¿¡¼­ ÀÛµ¿ÇÏ°í ÀÖ´Ù¸é ÀÌ·¯ÇÑ µ¥ÀÌÅÍÀÇ ±¸Çö ¹æ¹ýÀ» ÅëÀÏÇØ ÁÙ ÇÊ¿ä°¡ ÀÖ´Ù. ƯÈ÷ ¾²¸®Æ¼¾î½Ã½ºÅÛ(three-tier system)ÀÇ °æ¿ì µ¥ÀÌÅͺ£À̽º ¼­¹ö, ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö, ±×¸®°í Ŭ¶óÀ̾ðÆ®°¡ ÀÏÀÏÈ÷ ´Ù¸¥ Ç÷§ÆûÀ¸·Î ±¸ÇöµÉ ¼öµµ ÀÖÀ¸¹Ç·Î µ¥ÀÌÅÍÀÇ ±¸Çö¹æ¹ýÀ» ÀÏ°üÀûÀ¸·Î Ç¥ÇöÇÏ´Â ÀÏÀº ¾ÆÁÖ Áß¿äÇÏ´Ù. ±× ÀÏÀÌ ¹Ù·Î paramter marshalling ÀÌ´Ù.

Parameter marshalling ÀÌ ³¡³µÀ¸¸é ½ºÅÓÀº ¼­¹ö¿¡ Á¸ÀçÇÏ´Â °´Ã¼ÀÇ ¸Þ½îµå¸¦ ºÎ¸£°Ô µÈ´Ù. À̶§ ½ºÅÓÀÌ ¼­¹ö¿¡ º¸³»´Â Á¤º¸´Â ¼­¹ö °´Ã¼ÀÇ ¾ÆÀ̵ð, ½ÇÇàÇؾßÇÒ ¸Þ½îµå, ±×¸®°í º¯È¯µÈ ÀÎÀÚÀÌ´Ù. Ŭ¶óÀ̾ðÆ® ÂÊ¿¡¼­ ½ºÅÓÀÌ ´ë¸®ÀÎÀÇ ¿ªÇÒÀ» ÇÏµí ¼­¹öÂÊ¿¡¼­µµ ÀÌ·¯ÇÑ ´ë¸®ÀÎÀÇ ¿ªÇÒÀ» ÇÏ´Â Á¸Àç°¡ Àִµ¥ ¼ö½ÅÀÚ(receiver) ¶Ç´Â ½ºÄÌ·¹Åæ(skeleton, ÁÖ: ÇØ°ñ ¶Ç´Â °ñ°ÝÀ̶ó°í ºÎ¸£±â¿£ Á» ³Ê¹«ÇÏ´Ù´Â »ý°¢ÀÌ µé¾ú´Ù.) À̶ó°íµµ ÇÑ´Ù. ¼ö½ÅÀÚ°¡ ÇÏ´Â ¿ªÇÒÀº ½ºÅÓÀÇ ¹Ý´ë¶ó°í »ý°¢ÇÏ¸é µÈ´Ù. Á¶À²µÈ ÀÎÀÚµéÀ» ´Ù½Ã ±× ¼­¹ö¿¡ ¸Â´Â ÇüÅ·Π¹Ù²ãÁØ µÚ ½ºÅÓÀÌ º¸³½ ¾ÆÀ̵ðÀÇ °´Ã¼°¡ °®°í ÀÖ´Â ¾Ë¸Â´Â ¸Þ½îµå¸¦ ½ÇÇà½ÃŲ´Ù. ±×¸®°í ½ÇÇàÀÌ ³¡³µÀ¸¸é °á°ú¸¦ ´Ù½Ã parameter marshalling À» ÅëÇÏ¿© º¯È¯ÇÑ µÚ, ´Ù½Ã ½ºÅÓ¿¡°Ô º¸³»ÁØ´Ù. ½ºÅÓÀº ÀÌ °á°ú¸¦ ¹Þ¾Æ¼­ ´Ù½Ã ½Ã½ºÅÛ¿¡ ¸Â°Ô º¯È¯½ÃŲ µÚ, ¿ø·¡ ¸Þ½îµå¸¦ ºÒ·¶´ø °´Ã¼¿¡°Ô °á°ú¸¦ ³Ñ°ÜÁØ´Ù. ¹°·Ð °á°ú°¡ ¿¹¿ÜÀÏ ¼öµµ ÀÖ´Ù.

µ¿Àû Ŭ·¡½º ·Îµù (Dynamic Class Loading)
±×·¸´Ù¸é ¿©±â¼­ ¶Ç ÇϳªÀÇ Àǹ®Á¡ÀÌ »ý±â°Ô µÈ´Ù. ¸¸¾à ÀÎÀÚ°¡ ÀϹÝÀûÀÎ µ¥ÀÌÅÍ Å¸ÀÔ, Áï ¼ýÀÚ³ª ¹®ÀÚµîÀÏ °æ¿ì¿£ parameter mashallingÀÌ °£´ÜÇÏÁö¸¸ ¸¸¾à ¾î¶°ÇÑ °´Ã¼¶ó¸é ¾î¶»°Ô ÇÒ±î? ƯÈ÷ °á°ú°ªÀÌ ¼­¹ö¿¡ Á¸ÀçÇÏ°í ÀÖ´Â ¶Ç ´Ù¸¥ ¿ø°Ý°´Ã¼¶ó¸é Ŭ¶óÀ̾ðÆ®¿£ ±× °´Ã¼ÀÇ Äڵ尡 ¾øÀ¸¹Ç·Î ¹®Á¦´Â ½É°¢ÇÏ´Ù. ¿¹¸¦ µé¾î ¼­¹ö¿¡ Computer¶ó´Â °´Ã¼°¡ ½ÇÇàµÇ°í ÀÖ´Ù°í ÇÏÀÚ. ÀÌ °´Ã¼ÀÇ ¸Þ½îµå Áß¿¡ getType()À̶ó´Â ¸Þ½îµå°¡ Àִµ¥ ÄÄÇ»ÅÍÀÇ Á¾·ù¸¦ Ãß»óÈ­ÇÏ´Â ComputerTypeÀ̶ó´Â °´Ã¼¸¦ µ¹·ÁÁشٰí ÇÏÀÚ. Áï, Ŭ¶óÀ̾ðÆ®¿¡¼­ ´ÙÀ½°ú °°ÀÌ ½ÇÇà½Ãų ¼ö ÀÖ´Ù´Â ¾ê±â°¡ µÇ°Ú´Ù.

Computer remote_comp = new Computer();
ComputerType mycomp = (ComputerType)remote_comp.getType();
mycomp.someMethod();

¹®Á¦´Â ¿©±â¼­ getType() ¸Þ½îµå¸¦ ºÒ·¶À» ¶§ µ¹¾Æ¿À´Â °ªÀÌ ¾î¶² ¼ýÀÚ³ª ¹®ÀÚ°¡ ¾Æ´Ï¶ó ¼­¹ö¿¡ Á¸ÀçÇÏ´Â °´Ã¼¶ó´Â °ÍÀÌ´Ù. ±×¸®°í Ŭ¶óÀ̾ðÆ®´Â ÀÌ »õ·Î¿î ¿ø°Ý°´Ã¼ÀÇ someMethod()¶ó´Â ¸Þ½îµå¸¦ ºÒ·¯ÁÖ°í ÀÖ´Ù. ¹°·Ð Ŭ¶óÀ̾ðÆ®´Â ÇÔ¼ö°ªÀ¸·Î µ¹¾Æ¿À´Â °´Ã¼°¡ ComputerTypeÀ̶ó´Â °´Ã¼¶ó´Â °ÍÀº ¾ËÁö¸¸ ½ÇÁ¦·Î µ¹¾Æ¿À´Â °´Ã¼´Â ComputerTypeÀÇ ¼­ºêŬ·¡½ºÀÏ ¼öµµ ÀÖ´Ù. °Ô´Ù°¡ ÀÌ »õ·Î¿î °´Ã¼°¡ ¼­¹ö¿¡ Á¤ÀǵŠÀÖ´Â »õ·Î¿î ¿¹¿Ü°´Ã¼¸¦ ÇÊ¿ä·Î ÇÒ ¼öµµ ÀÖ´Ù. ¹°·Ð ÀÌ »õ·Î¿î °´Ã¼ÀÇ someMethod()¶ó´Â ¸Þ½îµå¸¦ ºÎ¸£·Á¸é Ŭ¶óÀ̾ðÆ®°¡ ÀÌ »õ·Î¿î °´Ã¼¿¡ ´ëÇؼ­ ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ Å¬¶óÀ̾ðÆ®¿¡ ÀÌ °´Ã¼¸¦ Á¤ÀÇÇØÁÖ°í ÀúÀåÇÏ´Â ¹æ¹ýµµ ÀÖ°í ¼­¹ö¿Í µ¿½Ã¿¡ ÀÏÀÏÈ÷ Ŭ¶óÀ̾ðÆ®¸¦ ¾÷µ¥ÀÌÆ® ÇØÁÖ´Â °Íµµ ¹æ¹ýÀÌ°ÚÁö¸¸ »õ·Î¿î Á¾·ùÀÇ ComputerTypeÀ» ¼­¹ö¿¡ Á¤ÀÇÇÒ ¶§¸¶´Ù ÀÏÀÏÀÌ Å¬¶óÀ̾ðÆ®¸¦ ¾÷µ¥ÀÌÆ® ÇÒ ¼ö´Â ¾ø´Ù. ±×·¡¼­ ÇÊ¿äÇÑ °ÍÀÌ ¹Ù·Î µ¿Àû Ŭ·¡½º ·ÎµùÀÌ´Ù.

µ¿Àû Ŭ·¡½º ·ÎµùÀº ÀÌ·¸°Ô Ŭ¶óÀ̾ðÆ®°¡ ¾ËÁö ¸øÇÏ´Â °´Ã¼°¡ ÇÊ¿äÇÒ °æ¿ì ¼­¹ö¿¡¼­ ±×¶§ ±×¶§ ÇÊ¿äÇÒ ¶§¸¶´Ù Ŭ¶óÀ̾ðÆ®·Î ±× ÇÊ¿äÇÑ °´Ã¼ÀÇ ½ºÅÓŬ·¡½º¸¦ ºÒ·¯¿À´Â °ÍÀ» ¸»ÇÑ´Ù. ÀÚ¹ÙÀÇ ¾ÖÇø´°ú ºñ½ÁÇÑ °³³äÀ̶ó°í »ý°¢ÇÏ¸é µÇ°Ú´Ù. À§ÀÇ ¿¹Á¦ÀÇ °æ¿ì ÀÚµ¿À¸·Î ComputerTypeÀÇ ¼­ºêŬ·¡½ºÀÇ ½ºÅÓŬ·¡½º°¡ Ŭ¶óÀ̾ðÆ®·Î ·ÎµùµÇ¾î someMethod()¸¦ ºÎ¸£´Â°ÍÀ» °¡´ÉÄÉ ÇÑ´Ù. ÇÏÁö¸¸ ÀÌ·¸°Ô ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼­ ³×Æ®¿öÅ©¸¦ ÅëÇÏ¿© ½ºÅÓŬ·¡½º¸¦ ºÒ·¯¿Ã °æ¿ì º¸¾ÈÀÇ ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¹Ç·Î ½ÇÁ¦·Î ÀÌ·¯ÇÑ ½Ã½ºÅÛÀ» °¡µ¿½Ãų ¶© ²À º¸¾È¿¡ ½Å°æÀ» ½á¼­ ÀÚ¹Ù º¸¾È ¸Å´ÏÀú (Java Security Manager)µîÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù.

ÀÚ¹Ù RMI ÇÁ·Î±×·¡¹Ö
ÀÚ¹Ù¿¡¼­ÀÇ RMI ±¸Çö
ÀÌÁ¦ RMIÀÇ ±âº»ÀûÀÎ °³³ä°ú ¼ö¹ÝµÇ´Â À̽´µé¿¡ ´ëÇØ ¾Ë¾Æ ºÃÀ¸¹Ç·Î º»°ÝÀûÀ¸·Î ÀÚ¹Ù RMI¿¡ ´ëÇØ °øºÎÇØ º¸±â·Î ÇÏÀÚ. ÀÚ¹Ù RMI¸¦ ±¸ÇöÇϱâ À§Çؼ± ÀÏ´Ü Å¬¶óÀ̾ðÆ®¿Í ¼­¹ö¿¡ ÀûÀýÇÑ ÄÚµùÀ» ÇØ¾ß Çϴµ¥ ÀÚ¹Ù RMI´Â °³¹ßÀÚ¿¡°Ô Æí¸®ÇÏ°Ô °³¹ßµÇ¾úÀ¸¹Ç·Î ½ÇÁ¦·Î ÄÚµùÀº Áß¿äÇÑ ¹®Á¦°¡ ¾Æ´Ï´Ù. ÇÏÁö¸¸, RMI¶ó´Â °ÍÀÌ ±Ùº»ÀûÀ¸·Î °£´ÜÇÑ ¹®Á¦°¡ ¾Æ´Ï¹Ç·Î ½ÇÁ¦·Î RMI¸¦ ½ÇÇà½Ãų ¼ö Àִ ȯ°æÀ» ¸¸µå´Â °ÍÀÌ ½ÇÁ¦ ÄÚµùº¸´Ù ´õ º¹ÀâÇÏ´Ù. ÀÏ´Ü Å¬¶óÀ̾ðÆ®¿Í ¼­¹ö¿¡¼­ ÄÚµùÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸°í RMI¸¦ ½ÇÇà½Ãų ¶§ ÇÊ¿äȯ ȯ°æ°ú ÇÁ·Î±×·¥, ±×¸®°í ÁÖÀÇ»çÇ× µîÀ» ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.

¼­¹ö ÂÊ ÇÁ·Î±×·¡¹Ö
ÀÏ´Ü Å¬¶óÀ̾ðÆ® ÂÊ¿¡¼­´Â ¼­¹ö¿¡ Á¸ÀçÇÏ´Â °´Ã¼¿Í Åë½ÅÀ» Çϱâ À§Çؼ­ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇØ ÁÖ¾î¾ß ÇÑ´Ù. Ŭ¶óÀ̾ðÆ®ÀÇ °´Ã¼°¡ ¼­¹öÀÇ °´Ã¼°¡ °¡Áö°í ÀÖ´Â ¸Þ½îµå¸¦ ºÎ¸¦ ¶§ ÀÌ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ¿© ºÎ¸£°Ô µÈ´Ù. ÀÌ ÀÎÅÍÆäÀ̽º´Â ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ® ¾çÂÊ¿¡ Á¸ÀçÇÏ°Ô µÈ´Ù. ¿¹¸¦ µé¾î ºñÇà±â Á¼®À» ¿¹¾àÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µç´Ù°í ÇÏÀÚ. ¸¸¾à ÀÌ Á¼®À» ¼­¹ö¿¡ Á¸ÀçÇÏ´Â °´Ã¼·Î Ç¥ÇöÇÏ°í Ŭ¶óÀ̾ðÆ®°¡ ÀÌ Á¼®ÀÌ ÇöÀç ºó Á¼®ÀÎÁö ¾Ë¾Æº¸·Á°í ÇÑ´Ù°í ÇÏÀÚ. ±×·¸´Ù¸é ÀÏ´Ü ´ÙÀ½°ú °°ÀÌ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇØÁÖ¾î¾ß ÇÑ´Ù.

interface Seat extends Remote
{
public boolean isReserved(int seat_number) throws RemoteException;
}

¿©±â¼­ ÁÖÀÇÇØ¾ß ÇÒ °ÍÀº ¸ðµç ¿ø°Ý ÀÎÅÍÆäÀ̽º´Â Remote Ŭ·¡½º¸¦ »ó¼ÓÇÏ¿©¾ß ÇÏ°í ¿ø°ÝÀûÀ¸·Î °ø°³µÇ´Â ¸Þ½îµå´Â ¸ðµÎ RemoteException ¿¹¿ÜŬ·¡½º¸¦ ´øÁ®¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ÀÌ ÀÎÅÍÆäÀ̽º¸¦ ÇϳªÀÇ ÀÚ¹ÙÆÄÀÏ·Î ¸¸µé¾î¼­ ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ® ¾çÂÊ¿¡ ÀúÀåÇÏ¸é µÇ°Ú´Ù.

ÀÌ·¸°Ô ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇßÀ¸¸é ´ÙÀ½¿£ ½ÇÁ¦ °´Ã¼¸¦ ±¸ÇöÇØ¾ß ÇÑ´Ù. ¿©±â¼± ´Ù¸¥ ¸Þ½îµå´Â ¹èÁ¦ÇÏ°í isReserved() ¸Þ½îµå¸¸ ±¸ÇöÇØ º¸±â·Î ÇÏ°Ú´Ù.

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class SeatImpl extends UnicastRemoteObject implements Seat
{
public boolean isReserved(int seat_number) throws RemoteException
{
// µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåµÇ¾îÀÖ´Â ¿¹¾à°á°ú¸¦ ºÒ·¯¿Â´Ù.
// µ¥ÀÌÅͺ£À̽º¿¡ ¹ú½á ¿¬°áÀÌ µÇ¾îÀÖ´Ù°í ÇÏÀÚ.

String query = "SELECT reserved FROM seats WHERE plane = ? AND seat_no = ?";

PreparedStatement ps = connection.prepareStatement(query);
ps.setString(1, String.valueOf(plane_id));
ps.setString(2, String.valueOf(seat_number));

ResultSet rs = ps.executeQuery();

boolean reserved = rs.getBoolean("reserved");

return(reserved);
}

public static void main(String args[]) {

// À̸§À» µî·ÏÇÑ´Ù.
try {
SeatImpl seat = new SeatImpl();
Naming.rebind("seat", seat);
} catch (Exception e) {
System.out.println("SeatImpl err: " + e.getMessage());
e.printStackTrace();
}
}
}

¿©±â¼­ ÁÖÀÇÇØ¾ß ÇÒ °ÍÀº ¹Ù·Î ¼­¹ö°´Ã¼°¡ UnicastRemoteObject Ŭ·¡½º¸¦ »ó¼ÓÇÑ´Ù´Â °ÍÀÌ´Ù. ÀÌ Å¬·¡½º°¡ ¹Ù·Î ¼­¹ö°´Ã¼¸¦ ¿ø°Ý°´Ã¼·Î ¸¸µé¾îÁִ Ŭ·¡½º°¡ µÇ°Ú´Ù. UnicastRemoteObject ¸¦ »ç¿ëÇÏ¸é ²À ¼­¹ö°´Ã¼°¡ TCP/IP·Î Á¢±ÙÀÌ °¡´ÉÇÏ¿©¾ß ÇÑ´Ù. ±× À§¿¡ Á¤ÀÇÇß´ø Seat À̶ó´Â ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â °Íµµ ÀØÁö ¸»ÀÚ.

´ÙÀ½À¸·Î ÇØ¾ß ÇÒ °ÍÀÌ °´Ã¼ÀÇ À̸§À» RMI Registry¿¡ µî·ÏÇÏ´Â °ÍÀÌ´Ù. JNDI (Java Naming and Directory Interface)ÀÇ ÀÏȯÀ̱⵵ Çѵ¥ Ŭ¶óÀ̾ðÆ®¿¡ ÀÖ´Â °´Ã¼¿¡°Ô ¼­¹ö°´Ã¼ÀÇ Á¸À縦 ¾Ë·ÁÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. Áï, ¼­¹ö°´Ã¼¸¦ ¾î¶°ÇÑ À̸§ÇÏ¿¡ µî·ÏÇÏ¿© Ŭ¶óÀ̾ðÆ®ÀÇ °´Ã¼°¡ ±× À̸§À¸·Î ¿ø°Ý°´Ã¼¸¦ ãÀ» ¼ö ÀÖµµ·Ï ÇØÁÖ´Â °ÍÀ» ¸»ÇÑ´Ù. Ŭ¶óÀ̾ðÆ®´Â ÀÌ À̸§À¸·Î ¼­¹ö°´Ã¼¸¦ ãÀ¸¸ç ã¾ÒÀ» °æ¿ì ±× À̸§¿¡ ÇØ´çÇÏ´Â ¼­¹ö°´Ã¼ÀÇ ½ºÅÓŬ·¡½º°¡ Ŭ¶óÀ̾ðÆ®·Î Àü¼ÛµÇ¾î ¼­¹ö°´Ã¼ÀÇ ¸Þ½îµå¸¦ ºÎ¸£´Â °ÍÀ» °¡´ÉÄÉ ÇÑ´Ù. ƯÈ÷ JNDI´Â EJB¿¡¼­µµ »ç¿ëµÇ¹Ç·Î °³³äÀ» ÀÌÇØÇصθé EJB¸¦ °øºÎÇϱ⵵ ÆíÇÏ´Ù.

À§ÀÇ ¿¹Á¦¸¦ º¸¸é seatÀ̶ó´Â À̸§ Çϳª¸¸ µî·ÏÇÑ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ½ÇÁ¦·Î ºñÇà±â Á¼® ¿¹¾à ½Ã½ºÅÛÀ» ¸¸µç´Ù°í ÇÏÀÚ. SeatImpl À̶ó´Â ¼­¹ö°´Ã¼°¡ ¸¸¾à¿¡ Á¼® ÇϳªÇϳª¸¦ ±¸ÇöÇÑ´Ù°í ÇÏ¸é ±× Á¼® ÇϳªÇϳª¸¦ ´Ù µî·ÏÇÒ ¼ö´Â ¾ø´Â ÀÏÀÌ´Ù. ¿Ö³ÄÇϸé ÀÌ À̸§Àº Ŭ¶óÀ̾ðÆ®¿¡°Ô ¼­¹ö°´Ã¼ÀÇ Á¸À縦 ¾Ë°Ô ÇØÁÖ´Â °ÍÀ̹ǷΠŬ¶óÀ̾ðÆ®°¡ ¾î¶°ÇÑ ¸Þ½îµå¸¦ ºÎ¸£±â Àü¿¡ ¹ú½á µî·ÏÀÌ µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ÇÏÁö¸¸ ¿©±â¼­ Naming.bind() ¸Þ½îµåÀÇ ÀÎÀÚ Áß Çϳª°¡ ¹Ù·Î SeatImpl °´Ã¼ÀÌ´Ù. ±×·¸´Ù¸é Á¼® ÇϳªÇϳªÀÇ °´Ã¼¸¦ ´Ù »ý¼ºÇؼ­ ±× À̸§µéÀ» µû·Î µî·ÏÇØ¾ß ÇÑ´Ù´Â ¿¹±â°¡ µÈ´Ù. ƯÈ÷ Á¼®ÀÇ µ¥ÀÌÅÍ°¡ µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåµÇ¾î ÀÖÀ» °æ¿ì ±×°ÍÀ» ÀÏÀÏÈ÷ µ¿ÀûÀ¸·Î ºÒ·¯¿Í¾ß Çϴµ¥ ±×·¸´Ù¸é Ŭ¶óÀ̾ðÆ®°¡ ¸Þ½îµå¸¦ ºÎ¸£±â Àü¿¡ ±× À̸§À» µî·ÏÇÑ´Ù´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. ÀÌ°ÍÀº »ó´çÈ÷ ºñÈ¿À²ÀûÀÎ °³¹ß¹æ¹ýÀÌ´Ù. ¿©±â¼± SeatImpl °´Ã¼°¡ ÇÑ ºñÇà±âÀÇ ¸ðµç Á¼®À» ±¸ÇöÇÏ°Ô °³¹ßÇÏ´Â °ÍÀÌ ´õ¿í È¿À²ÀûÀ̸ç RMI Registryµµ ´õ °£´ÜÇØ Áø´Ù. seat À̶ó´Â À̸§À» ÅëÇÏ¿© Ŭ¶óÀ̾ðÆ®¿¡°Ô ¼­¹ö°´Ã¼ÀÇ Á¸À縦 ¾Ë·ÁÁÖ°í SeatImpl À̶ó´Â ¼­¹ö°´Ã¼°¡ µû·Î °¢ Á¼®ÀÇ µ¥ÀÌÅ͸¦ µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ ºÒ·¯¿À´Â °ÍÀÌ ´õ È¿À²ÀûÀÎ °ÍÀÌ´Ù. °Ô´Ù°¡ RMI Registry´Â ¸ðµç °´Ã¼µéÀÌ °øÀ¯ÇÏ´Â ¼­ºñ½ºÀ̹ǷΠÇÑ ÇÁ·Î±×·¥ÀÌ ´Ù µ¶Â÷ÁöÇؼ­µµ ¾ÈµÈ´Ù.

Ŭ¶óÀ̾ðÆ®ÂÊ ÇÁ·Î±×·¡¹Ö
À§¿Í °°ÀÌ ¼­¹öÂÊÀÇ ÇÁ·Î±×·¡¹ÖÀÌ µÇ¾îÀÖÀ¸¸é ÀÌÁ¨ Ŭ¶óÀ̾ðÆ®ÂÊÀ» ±¸ÇöÇÏ¸é µÈ´Ù. ÀÏ´Ü À§¿¡¼­ ÄÚµùÇÑ ÀÎÅÍÆäÀ̽º ÆÄÀÏÀÌ ÇÊ¿äÇÏ°í ±× ´ÙÀ½¿£ ±× ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ¿© ¼­¹ö°´Ã¼ÀÇ ¸Þ½îµå¸¦ ºÒ·¯ÁÖ¸é µÇ°Ú´Ù.

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;

public class Reservation
{
// ÀÚ¹Ù º¸¾È¸Å´ÏÀú´Â ¹ú½á ´Ù¸¥°÷¿¡¼­ ½ÇÇà ½ÃÄ×´Ù°í »ý°¢ÇÏÀÚ.
// ½ÇÁ¦ ½ÇÇàÀº ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.
// º¸ÅëÀº Ŭ¶óÀ̾ðÆ®ÀÇ main() ¿¡¼­ ½ÇÇà½ÃŲ´Ù.
// if (System.getSecurityManager() == null) {
// System.setSecurityManager(new RMISecurityManager());
// }

public boolean isReserved(int seat_numer) throws Exception {

boolean result;

try {
// ¸ÕÀú ¿ø°Ý°´Ã¼¸¦ RMI Registry¿¡¼­ ã¾Æº»´Ù.
Seat seat = (Seat)Naming.lookup("rmi://server.com/seat");

// ¿ø°Ý°´Ã¼¸¦ ã´Âµ¥ ¼º°øÇßÀ¸¸é ¸Þ½îµå¸¦ ºÎ¸£ÀÚ
result = seat.isReserved(seat_number);
}
catch (Exception e) {
throw new Exception(e.getMessage());
}

return result;
}
}

¸ÕÀú Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ±â ½ÃÀÛµÉ ¶§ ÀÚ¹Ù º¸¾È¸Å´ÏÀú¸¦ ²À ½ÇÇà½ÃÅ°µµ·Ï ÇÏÀÚ. ¸¸¾à Ŭ¶óÀ̾ðÆ®°¡ ÀÚ¹Ù ¾ÖÇø´ÀÏ °æ¿ì¿£ ÀÚµ¿À¸·Î º¸¾ÈÀÌ ½ÇÇàµÇ¹Ç·Î »ó°ü¾øÁö¸¸ ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀ̶ó¸é ²À ½ÇÇà½ÃÄÑÁÖµµ·Ï ÇÑ´Ù. ±×¸®°í ¼­¹ö°´Ã¼ÀÇ À̸§À» ãÀ»¶§ URLÀ» »ç¿ëÇϴ°ÍÀ» ±â¾ïÇϵµ·Ï ÇÏÀÚ. "rmi://¼­¹öÀ̸§/µî·ÏµÈ °´Ã¼À̸" ÀÇ Çü½ÄÀÌ¸é µÇ°Ú´Ù. ±×¸®°í ¿¹¿ÜŬ·¡½º´Â ²À ó¸®Çϵµ·Ï ÇؾßÇÑ´Ù. RMI°¡ ³×Æ®¿öÅ©¸¦ ÅëÇؼ­ ÀÌ·ç¾îÁö¹Ç·Î ¾î¶°ÇÑ ¿¡·¯°¡ ¹ß»ýÇÒÁö ¸ð¸£±â ¶§¹®ÀÌ´Ù.

RMIÀÇ ½ÇÇà
À§¿Í °°ÀÌ ÄÚµùÀÌ ³¡³µÀ¸¸é ÀÌÁ¨ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â Àϸ¸ ³²¾Ò´Ù. ±×·¯³ª ÀÚ¹Ù RMI¸¦ ½ÇÇàÇϱâ À§Çؼ± ¾à°£ÀÇ º¹ÀâÇÑ Áغñ°¡ ÇÊ¿äÇÏ´Ù. ÀÌ·¸°Ô ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ® »çÀ̸¦ ¿¬°áÇØÁÖ´Â °í¸®°¡ ÇÊ¿äÇѵ¥ ±×°ÍÀÌ ¹Ù·Î rmiregistry ÀÌ´Ù. rmiregistry ´Â RMI¸¦ »ç¿ëÇÏ´Â °´Ã¼ÀÇ µî·ÏÀ» °üÀåÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ÀÌÁ¦ºÎÅÍ rmiregistry ÀÇ »ç¿ë¹æ¹ý°ú ÇÔ²² ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®°¡ RMI¸¦ ½ÇÇàÇÏ·Á¸é ¾î¶°ÇÑ °úÁ¤À» °ÅÃÄ¾ß ÇÏ´ÂÁö ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.

¼­¹ö
1. ¼­¹ö°´Ã¼¿Í ÀÎÅÍÆäÀ̽º ÆÄÀÏ ÄÄÆÄÀÏÇϱâ

2. rmic ¸¦ ÀÌ¿ëÇÏ¿© ½ºÅÓŬ·¡½º »ý¼º

3. rmiregistry ½ÇÇà

4. ¼­¹ö ÇÁ·Î±×·¥ ½ÇÇà

À§¿¡ ³ª¿­ÇÑ °Í°ú °°ÀÌ ½ÇÇàÇϸé RMI¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ÀÏ´Ü ÀÎÅÍÆäÀ̽º¿Í ¼­¹ö ÇÁ·Î±×·¥À» ÀÚ¹Ù ÄÄÆÄÀÏ·¯·Î ÄÄÆÄÀÏ ´Ù. óÀ½¿¡ ¼­¼úÇßµíÀÌ Å¬¶óÀ̾ðÆ®°´Ã¼°¡ ¼­¹ö°´Ã¼¸¦ »ç¿ëÇÏ·Á¸é ½ºÅÓŬ·¡½º°¡ ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ ½ºÅÓŬ·¡½º¸¦ »ý¼ºÇÏ´Â °ÍÀÌ rmic ÇÁ·Î±×·¥ÀÌ µÇ°Ú´Ù. rmic ·Î »ý¼ºµÈ ½ºÅÓŬ·¡½º°¡ µ¿Àû Ŭ·¡½º·ÎµùÀ» ÅëÇؼ­ Ŭ¶óÀ̾ðÆ®°¡ ÇÊ¿ä·ÎÇÒ ¶§ Ŭ¶óÀ̾ðÆ®·Î ¿Å°Ü °¡°Ô µÇ´Â °ÍÀÌ´Ù. rmic ´Â ´ÙÀ½°ú °°ÀÌ ½ÇÇà½ÃÅ°¸é µÈ´Ù.

rmic SeatImpl

¸¸¾à ÀÚ¹Ù 1.1 °´Ã¼¸¦ Áö¿øÇØ¾ß ÇÑ´Ù¸é -v1.2 ¿É¼ÇÀ» »ç¿ëÇÏ¸é µÈ´Ù. Ŭ·¡½º À̸§Àº ÆÐÅ°Áö À̸§±îÁö ´Ù »ç¿ëÇÏ¿©¾ß ÇÑ´Ù. ¸¸¾à¿¡ SeatImpl Ŭ·¡½º°¡ com.myairline À̶ó´Â ÆÐÅ°ÁöÀÇ ÀϺζó¸é

rmic com.myairline.SeatImpl

À̶ó°í ÇØ¾ß ÇÑ´Ù. rmic ¸¦ ½ÇÇà½ÃÅ°¸é ¾Õ¿¡¼­ ¸»ÇÑ ¹Ù¿Í °°ÀÌ ½ºÅÓ Å¬·¡½º¿Í ½ºÄÌ·¹Åæ Ŭ·¡½º°¡ SeatImpl_Stub.class, SeatImpl_Skel.class ¶ó´Â À̸§À¸·Î »ý¼ºµÈ´Ù. ÇÏÁö¸¸ ½ºÄÌ·¹Åæ Ŭ·¡½º´Â ÀÚ¹Ù 2¿¡¼± ´õÀÌ»ó »ç¿ëÇÏÁö ¾ÊÀ¸¹Ç·Î ¹«½ÃÇصµ ÁÁ´Ù.

ÀÌ·¸°Ô ½ºÅÓÀ» ¸¸µé¾úÀ¸¸é ´ÙÀ½Àº rmiregistry ¸¦ ½ÇÇà½ÃÅ°´Â Àϸ¸ÀÌ ³²¾Ò´Ù. À©µµ¿ìÁî ¼­¹ö¿¡¼­´Â

start rmiregistry

À¯´Ð½º³ª ¸®´ª½º¿¡¼±


rmiregistry &


°ú °°ÀÌ ½ÇÇà½ÃÄÑÁÖ¸é µÈ´Ù. ¿©±â¼­ rmiregistry ÀÇ ¿ªÇÒÀº ¸íÈ®ÇÒ °ÍÀÌ´Ù. Ŭ¶óÀ̾ðÆ®°¡ ¼­¹öÀÇ À̸§°ú °´Ã¼ÀÇ À̸§À¸·Î ¼­¹ö°´Ã¼¸¦ ãÀ¸¸é ±× ¿ä±¸°¡ rmiregistry ·Î ¿À°Ô µÈ´Ù. ¹ú½á ¼­¹öÂÊ¿¡¼± rmiregistry ¿¡ ¼­¹ö°´Ã¼°¡ µî·ÏµÇ¾î ÀÖÀ¸¹Ç·Î ±× ¼­¹ö°´Ã¼ÀÇ ½ºÅÓŬ·¡½º°¡ Ŭ¶óÀ̾ðÆ®·Î ·ÎµùµÈ´Ù. ±×·¯¸é Ŭ¶óÀ̾ðÆ® °´Ã¼´Â ±× ½ºÅÓŬ·¡½º¸¦ ÀÌ¿ëÇÏ¿© ¼­¹ö°´Ã¼ÀÇ ¸Þ½îµå¸¦ ºÎ¸¦ ¼ö ÀÖ°Ô µÈ´Ù.

ÀÌ·¸°Ô rmiregistry °¡ ½ÇÇà µÆÀ¸¸é ¼­¹ö ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄÑÁÖ¸é µÇ°Ú´Ù. ¿©±â¼­ ÁÖÀÇÇØ¾ß ÇÒ°ÍÀº ¼­¹öÇÁ·Î±×·¥À» ¼­ºñ½º ÇÁ·Î±×·¥À¸·Î ½ÇÇà½ÃÄÑ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. Áï, rmiregistry ¿Í °°Àº ¹æ¹ýÀ¸·Î ¸»ÀÌ´Ù. À§ÀÇ ¿¹Á¦¿¡¼±

start java SeatImpl

¶Ç´Â


java SeatImpl &


¿Í °°ÀÌ ½ÇÇà½ÃÄÑ¾ß ÇÑ´Ù.

Ŭ¶óÀ̾ðÆ®
1. Ŭ¶óÀ̾ðÆ®¿Í ÀÎÅÍÆäÀ̽º ÆÄÀÏ ÄÄÆÄÀÏ Çϱâ

2. º¸¾ÈÁ¤Ã¥À» Á¤ÀÇÇÏ´Â ÆÄÀÏ ¸¸µé±â

3. Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÇ ½ÇÇà

¼­¹ö¿Í ¸¶Âù°¡Áö·Î Ŭ¶óÀ̾ðÆ® °´Ã¼ÀÇ ÀÚ¹Ù ÆÄÀÏ°ú ÀÎÅÍÆäÀ̽º ÆÄÀÏÀ» ÀÚ¹Ù ÄÄÆÄÀÏ·¯·Î ÄÄÆÄÀÏ ÇØÁØ´Ù. ¿©±â¼­ ÀÎÅÍÆäÀ̽º ÆÄÀÏÀº ¼­¹ö¿¡¼­ ÄÄÆÄÀÏÇÑ °Í°ú °°Àº ÆÄÀÏÀ̾î¾ß ÇÑ´Ù.

ÄÄÆÄÀÏÀÌ ¼º°øÇßÀ¸¸é ´ÙÀ½Àº º¸¾ÈÁ¤Ã¥À» ¼³Á¤ÇØÁÖ´Â ÆÄÀÏÀ» ¸¸µé¾î¾ß ÇÑ´Ù. ÆÄÀÏÀ̸§Àº ¾Æ¹«·¡µµ »ó°ü¾ø´Ù. ¿©±â¼± client_security.policy ¶ó°í ÇÏ°Ú´Ù. À§¿¡¼­ ÀÚ¹Ù º¸¾È¸Å´ÏÀú¸¦ ½ÇÇà½ÃŲ °ÍÀ» ±â¾ïÇÒ °ÍÀÌ´Ù. ÀÚ¹Ù º¸¾È¸Å´ÏÀú´Â ¿ø·¡ ¾î¶°ÇÑ ³×Æ®¿÷ ¿¬°áµµ Çã¿ëÇÏÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î ÀÌ·¯ÇÑ º¸¾ÈÁ¤Ã¥À» ¼³Á¤ÇØ ÁÖ¾î¾ß ÇÏ´Â °ÍÀÌ´Ù. º¸¾ÈÁ¤Ã¥ ÆÄÀÏ¿£ ´ÙÀ½°ú °°ÀÌ ÇØÁÖ¸é µÇ°Ú´Ù.

grant
{
permission java.net.SocketPermission
"*:1024-65535", "connect";
};

¿©±â¼± RMI°¡ Æ÷Æ®¹øÈ£ 1024¿¡¼­ 65535 »çÀÌÀÇ ¾Æ¹« Æ÷Æ®³ª »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ¿´´Ù. RMIÀÇ ±âº»¼³Á¤Àº 1099ÀÌ´Ù. º¸¾ÈÁ¤Ã¥ ÆÄÀÏ¿£ ÀÌ¿Ü¿¡ ´Ù¸¥ ¸¹Àº Á¤º¸°¡ µé¾î°¥ ¼ö Àִµ¥ Á¤Ã¥ÆÄÀÏ°ú º¸¾È ¸Å´ÏÀú¿¡ °üÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â ´Ù¸¥ ±ÛµéÀ» ÂüÁ¶ÇÏ±æ ¹Ù¶õ´Ù.

ÀÌ·¸°Ô º¸¾ÈÁ¤Ã¥ÀÌ ¼³Á¤µÇ¾úÀ¸¸é ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°´Â Àϸ¸ÀÌ ³²¾Ò´Ù. ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°ÀÌ ½ÇÇà½ÃÅ°¸é µÈ´Ù. º¸¾ÈÁ¤Ã¥ ÆÄÀÏÀ» ÁöÁ¤ÇØ ÁÖ´Â °ÍÀ» ÀØÁö ¾Êµµ·Ï ÇÏÀÚ.

java Reservation -Djava.security.policy=client_security.policy

µ¿Àû Ŭ·¡½º·Îµù¿¡ °üÇØ ÁÖÀÇÇÒÁ¡
À§¿¡¼­ ÀÚ¹Ù RMIÀÇ °³³ä Áß¿¡ µ¿Àû Ŭ·¡½º·ÎµùÀ̶ó´Â °ÍÀÌ ÀÖ¾ú´Ù. Ŭ¶óÀ̾ðÆ®°¡ ÇÊ¿ä·Î ÇÏ´Â ½ºÅÓŬ·¡½º¸¦ ±×¶§±×¶§¸¶´Ù ¼­¹ö¿¡¼­ºÎÅÍ ¹Þ¾Æ¿À´Â °ÍÀ» ¸»ÇÑ´Ù. ÀÌ µ¿Àû Ŭ·¡½º·Îµù ¶§¹®¿¡ ½ÇÁ¦·Î ÇÁ·Î±×·¥À» °³¹ßÇÒ ¶§ ÁÖÀÇÇؾßÇÒ »çÇ×ÀÌ ¸î°¡Áö ÀÖÀ¸¹Ç·Î ¿©±â¼­ ¤°í ³Ñ¾î°¡·Á°í ÇÑ´Ù.

À§¿¡¼­ ¾ð±ÞÇÑ´ë·Î Ŭ¶óÀ̾ðÆ® °´Ã¼´Â ¿ø°Ý ÀÎÅÍÆäÀ̽º¸¦ ÅëÇÏ¿©, Áï ½ºÅÓŬ·¡½º¸¦ ÅëÇÏ¿© ¼­¹ö°´Ã¼ÀÇ ¸Þ½îµå¸¦ ºÎ¸£°Ô µÈ´Ù. ´Ù½Ã ¸»Çϸé Ŭ¶óÀ̾ðÆ®´Â ¿ø°Ý ÀÎÅÍÆäÀ̽º¿¡ °ø°³µÇ¾î ÀÖ´Â ¸Þ½îµå¹Û¿¡ ºÎ¸¦ ¼ö ¾ø´Ù´Â ¸»ÀÌ´Ù. ¼­¹ö°´Ã¼ ³»¿¡ ´Ù¸¥ ¿©·¯°¡Áö ¸Þ½îµå°¡ ÀÖÀ» ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¿ø°Ý ÀÎÅÍÆäÀ̽º¿¡ °ø°³µÇ¾î ÀÖÁö ¾ÊÀ¸¸é Ŭ¶óÀ̾ðÆ® °´Ã¼´Â ±× ¸Þ½îµå¸¦ ºÎ¸¦ ¼ö ¾ø´Ù.

¿¹¸¦ µé¾î Ŭ¶óÀ̾ðÆ® °´Ã¼°¡ ¼­¹ö°´Ã¼ÀÇ ¾î¶°ÇÑ ¸Þ½îµå¸¦ ºÒ·¶´Âµ¥ ±× °ªÀ¸·Î ¿ø°Ý°´Ã¼¸¦ »ó¼ÓÇÑ ¾î¶°ÇÑ °´Ã¼°¡ µ¹¾Æ¿Ô´Ù°í ÇÏÀÚ. ±×¸®°í ¿ø°Ý°´Ã¼´Â ¿ø°Ý ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏÁö¸¸ ±× ¿ø°Ý°´Ã¼¸¦ »ó¼ÓÇÑ °´Ã¼´Â ¿ø°Ý ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏÁö ¾Ê´Â´Ù°í ÇÏÀÚ. ±×·¸´Ù¸é Ŭ¶óÀ̾ðÆ® °´Ã¼°¡ ¹ÞÀº ÀÌ °´Ã¼´Â ¾î¶°ÇÑ ¸Þ½îµåÀÇ ½ÇÇöÀÌ °¡´ÉÇÒ±î? ´äÀº ¼öÆÛŬ·¡½º°¡ ±¸ÇöÇÑ ¿ø°Ý ÀÎÅÍÆäÀ̽º¿¡ °ø°³µÇ¾î ÀÖ´Â ¸Þ½îµå »ÓÀÌ´Ù. »ó¼ÓÇÑ Å¬·¡½º°¡ ´Ù¸¥ ¾î¶² ¸Þ½îµå¸¦ Á¤ÀÇÇßÀ»Áö¶óµµ ±×°ÍÀº Ŭ¶óÀ̾ðÆ®°¡ ½ÇÇà½Ãų ¼ö ¾ø´Ù. ÀÌ°ÍÀº ±× °´Ã¼°¡ ¸Þ½îµåÀÇ ÀÎÀÚ·Î »ç¿ëµÇ´ø µ¹¾Æ¿À´Â °ªÀ¸·Î »ç¿ëµÇ´ø ¸¶Âù°¡Áö´Ù.

±×·¸´Ù¸é ¿ø°Ý ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏÁö ¾Ê´Â ´Ù¸¥ Ŭ·¡½ºµéÀº ¾î¶»°Ô µÉ±î? ¿¹¸¦ µé¾î ¼­¹ö°´Ã¼ÀÇ ¸Þ½îµå¸¦ ºÎ¸¦¶§ String Ŭ·¡½º¸¦ ÀÎÀÚ·Î »ç¿ëÇß´Ù°í ÇÏÀÚ. ÀÌ·² °æ¿ì String Ŭ·¡½º´Â Remote ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏÁö ¾ÊÀ¸¹Ç·Î ½ÇÁ¦·Ð °´Ã¼°¡ º¹»ç°¡ µÇ¾î ¼­¹ö·Î º¸³»Áö°Ô µÈ´Ù. ¸¸¾à ¼­¹ö°¡ String °´Ã¼ÀÇ ¾î¶°ÇÑ ¸Þ½îµå¸¦ »ç¿ëÇÑ´Ù°í Çصµ °´Ã¼ ÀÚü°¡ º¹»ç°¡ µÇ¾î º¸³»Á³À¸¹Ç·Î ¹®Á¦°¡ ¾ø´Ù.

°£´ÜÈ÷ ¸»ÇÏ¸é ¿ø°Ý ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â °´Ã¼°¡ ÀÎÀÚ³ª ¸Þ½îµå °ªÀ¸·Î º¸³»Áú °æ¿ì ½ºÅÓŬ·¡½º¸¸ÀÌ º¸³»Áö°í ¿ø°Ý ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏÁö ¾Ê´Â °´Ã¼¸¦ º¸³¾ °æ¿ì °´Ã¼ ÀÚü°¡ º¹»çµÇ¾î º¸³»Áø´Ù´Â ¾ê±â°¡ µÇ°Ú´Ù.

¸¶Ä¡¸ç
°´Ã¼ÁöÇâ °³¹ß°³³ä°ú ºÐ»ê½Ã½ºÅÛÀÇ °³³äÀÌ ¸Â¹°·Á ºÐ»ê°´Ã¼ ½Ã½ºÅÛÀ̶ó´Â °ÍÀÌ Åº»ýÇÏ°Ô µÇ¾ú°í ÀÌ·¸°Ô ºÐ»êµÇ¾î ÀÖ´Â °´Ã¼ °£ÀÇ Åë½Å°ú µ¥ÀÌÅÍ ±³È¯À» °¡´ÉÇÏ°Ô ÇØÁÖ´Â °ÍÀÌ RMI¶ó´Â °ÍÀ» º¸¾Ò´Ù. ƯÈ÷ ÀÚ¹Ù¿¡¼­ ±¸ÇöÇÏ´Â ÀÚ¹Ù RMIÀÇ °³³ä, °³¹ß¹æ¹ý, ±×¸®°í ¼³Ä¡, ½ÇÇà¹æ¹ý±îÁö ¾Ë¾Æ º¸¾Ò´Ù. Áö±Ý±îÁö ¼ÒÄϸ¸À» »ç¿ëÇÏ¿© µ¥ÀÌÅÍ ±³È¯À» ÇÑ µ¶ÀÚ¶ó¸é ÀÚ¹Ù RMIÀÇ Æí¸®ÇÔÀ» ¾Ë°Ô µÆÀ¸¸®¶ó ¹Ï´Â´Ù. °Ô´Ù°¡ ÇöÀç ¼­¼­È÷ ÁÖ¸ñÀ» ¹Þ°í ÀÖ´Â EJBÀÇ °æ¿ì RMI´Â ¹°·Ð À§¿¡¼­ º¸¾Ò´ø NamingÀÌ °´Ã¼°£ Åë½ÅÀÇ ÁßÃß°¡ µÈ´Ù. ±×·¯¹Ç·Î ¾ÕÀ¸·Î EJB¸¦ °øºÎÇÏ·Á°í »ý°¢ÇÏ´Â µ¶Àڵ鿡°Õ ÀÚ¹Ù RMIÀÇ °³³äÀ» ÀÌÇØÇÏ´Â °ÍÀº ÇʼöÀûÀ̸ç EJBÀÇ ºÐ»ê°´Ã¼ °³³ä°ú ±× ±¸Çö¹æ¹ýÀÌ ´õ¿í È®¿¬ÇÏ°Ô ÀÌÇصǸ®¶ó ¹Ï´Â´Ù. ¾ÕÀ¸·Î ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǰ£ÀÇ µ¥ÀÌÅÍ ±³È¯ÀÌ ÇÊ¿äÇÒ °æ¿ì ´õ¿í °£ÆíÇÏ°í °³¹ßÀÌ ¼ö¿ùÇÑ ÀÚ¹Ù RMI¸¦ »ç¿ëÇÏ¿© ´õ¿í °­·ÂÇÏ°í ¼¼·ÃµÈ °³¹ßÀÚ°¡ µÆÀ¸¸é ÇÑ´Ù. ±×¸®°í ÀÚ¹Ù RMI¸¦ ÀÌÇØÇÔÀ¸·Î½á ¾ÕÀ¸·ÎÀÇ EJB °øºÎ¿¡µµ ´õ¿í µµ¿òÀÌ µÆÀ¸¸é ÇÑ´Ù.