6´Ü°è´Â ¼¹ö ÇÁ·Î±×·¥°ú Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ ½ÇÇàÀÔ´Ï´Ù. ¸ðµç Áغñ°¡ ³¡³µÀ¸¸é, ¼¹ö ÇÁ·Î±×·¥À» ½ÃÀÛ ½ÃÄѼ ¿ø°Ý °´Ã¼¸¦ »ý¼ºÇϰí RMI Registry¿¡ ½Äº° °¡´ÉÇÑ À̸§°ú ÇÔ²² µî·Ï ½Ãŵ´Ï´Ù.
C:\JavaExample\18>java BankImpl bank was rebinded with name 'Bank' |
RMI Registry´Â ·ÎÄû󿡼¸¸ ¿ø°Ý °´Ã¼ÀÇ µî·ÏÀ» Çã¿ëÇϱ⠶§¹®¿¡, ¼¹ö ÇÁ·Î±×·¥Àº RMI Registry°¡ ½ÇÇàµÈ ¼¹ö¿¡¼ ½ÇÇàµÇ¾î¾ß ÇÕ´Ï´Ù.
¸¶Áö¸·À¸·Î Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥À» ½ÇÇà ½Ãŵ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÌ ½ÇÇà µÇ±â À§Çؼ± Ŭ¶óÀÌ¾ðÆ® ÄÄÇ»ÅÍÀÇ ·ÎÄÃ»ó¿¡ ¿ø°Ý °´Ã¼ÀÇ ÀÎÅÍÆäÀ̽º¿Í StubŬ·¡½º°¡ Á¸ÀçÇØ¾ß ÇÕ´Ï´Ù.
C:\JavaExample\18>java BankClient Bank was given from Server current balance : 10000 deposit 1000 current balance : 11000 withdraw 5000 current balance : 6000 |
¿¹Á¦ÀÇ ½ÇÇà °á°ú¸¦ ÅëÇØ Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÌ ¼¹ö¿¡ Á¢¼ÓÇØ¼ ¼ºñ½º¸¦ ¹Þ°í ÀÖÀ½À» ¾Ë ¼ö ÀÖ½À´Ï´Ù.
¢Ñ 6 ´Ü°è |
¼¹ö ÇÁ·Î±×·¥°ú Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÇ ½ÇÇà |
¾î·Á¿ï °Í¸¸ °°¾Ò´ø RMI¾îÇø®ÄÉÀ̼ÇÀ» ¸¸µå´Â °úÁ¤À» ÇѼû¿¡ ´Þ·Á¿Ô½À´Ï´Ù. ¿©±â±îÁö Á¤½Å¾øÀÌ ¿À´À¶ó Èûµå¼ÌÁÒ? ÀÌÇØµµ Àß ¾È µÅ´Â ºÎºÐµµ ÀÖ´Â °Íµµ °°±¸¿ä. ±×·¡¼ ´Þ·Á¿Â ±æÀ» µÚµ¹¾Æ º¼ °âµµ ÇØ¼ 17Àå ¼ÒÄÏÅë½Å¿¡¼ ÇØºÃ´ø DayTime ÇÁ·Î±×·¥À» RMI¸¦ ÀÌ¿ëÇØ °¢ ´Ü°èº°·Î ±¸ÇöÇØ º¸°Ú½À´Ï´Ù. ¼ÒÄÏÀ» ÀÌ¿ëÇÏ´Â ÇÁ·Î±×·¥°ú´Â ´Þ¸® RMI ÇÁ·Î±×·¥¿¡¼´Â ¼ÒÄÏ»ý¼º µîÀ» Á÷Á¢ ±¸ÇöÇÒ ÇÊ¿ä´Â ¾ø°í ¿ø°Ý¼ºñ½ºÀÇ À̸§°ú ÇÊ¿äÇÑ ¿ø°Ý¸Þ¼µå, ÀÎÀÚŸÀÔ ±×¸®°í ¸®ÅÏŸÀÔ¸¸ ¾Ë¸é µË´Ï´Ù. À̹ø ¿¹Á¦¿¡¼´Â ÀüüÀûÀ¸·Î ±¸¼º°ú È帧À» º¸´Â ´À³¦À¸·Î ¼³¸íÀº Á» ¾Æ³¢°Ú½À´Ï´Ù.
¸ÕÀú ¿ø°Ý°´Ã¼ÀÇ ÀÎÅÍÆäÀ̽º¸¦ ÀÛ¼ºÇØ¾ß °ÚÁÒ? ¾Æ·¡¿¡¼ getDayTime()¸Þ¼µå°¡ ¿ø°ÝÀûÀ¸·Î ½ÇÇàµÉ ¸Þ¼µåÀε¥ Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¸Þ¼µå¸¦ È£ÃâÇÒ ¶§ RemoteException ŸÀÔÀÇ ¿¹¿Ü°¡ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¸Þ¼µå Á¤ÀÇ ½Ã¿¡ ¸í½ÃÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù.
RMIDayTime.java (¼¹ö¿Í Ŭ¶óÀÌ¾ðÆ®¿¡¼ »ç¿ëÇÒ ÀÎÅÍÆäÀ̽º¸¦ »ý¼ºÇÑ ¿¹Á¦) |
import java.rmi.*; import java.util.Date; public interface RMIDayTime extends Remote { public Date getDayTime() throws RemoteException; } |
C:\JavaExample\18>javac RMIDayTime.java |
±× ´ÙÀ½À¸·Î ÀÌ RMIDayTimeÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÒ ¼¹ö ÇÁ·Î±×·¥(RMIDayTimeImplŬ·¡½º) ¸¦ ¸¸µå´Â °úÁ¤ÀÌ ÇÊ¿äÇÕ´Ï´Ù. ÀÌ Å¬·¡½º´Â UnicastRemoteObject¸¦ »ó¼Ó¹Þ¾ÒÀ¸¸ç »ý¼ºÀÚ´Â ÇÏ´Â ÀÏÀÌ ¾ø´õ¶óµµ RemoteException ¿¹¿Ü¸¦ ó¸®Çϱâ À§ÇØ Á¤ÀÇÇØ µÎ¾î¾ß ÇÕ´Ï´Ù. ±×¸®°í Naming.rebind()¸Þ¼µå¸¦ ÀÌ¿ëÇØ RMI Registry¿¡ RMIDayTimeImpl °´Ã¼ÀÇ ÂüÁ¶ÀÚ¸¦ µî·ÏÇÕ´Ï´Ù. ¿ø°Ý¸Þ¼µåÀÎ getDayTime()¸Þ¼µå°¡ ¿ø°Ý¿¡¼ È£Ã⠵ǾúÀ» ¶§´Â ´Ü¼øÈ÷ ÇöÀçÀÇ ½Ã°£À» DateŬ·¡½º ŸÀÔÀ¸·Î ¸®ÅÏÇÕ´Ï´Ù.
RMIDayTimeImpl.java (RMI¿¡¼ÀÇ ¼¹ö Ŭ·¡½º ¿¹Á¦) |
import java.rmi.*; import java.rmi.server.*; import java.util.Date; public class RMIDayTimeImpl extends UnicastRemoteObject implements RMIDayTime { public RMIDayTimeImpl() throws RemoteException{} public Date getDayTime() throws RemoteException { return new Date(); } public static void main(String[] args) throws Exception { RMIDayTimeImpl dateserver = new RMIDayTimeImpl(); Naming.rebind("//localhost/DateServer", dateserver); System.out.println("dateserver was rebinded with name 'DateServer'"); } } |
C:\JavaExample\18>javac RMIDayTimeImpl.java |
¼¼¹øÂ° °úÁ¤Àº ¼¹ö¿Í Ŭ¶óÀÌ¾ðÆ®°¡ Åë½ÅÀ» ¿øÇÒÇÏ°Ô Çϱâ À§Çؼ Stub / SkeletonÀ» »ý¼ºÇÕ´Ï´Ù. ±×·¯±â À§Çؼ rmic¸¦ ÀÌ¿ëÇØ RMIDayTimeImplŬ·¡½º¿¡¼ Stub / SkeletonÀ» ¸¸µì´Ï´Ù.
C:\JavaExample\18>rmic RMIDayTimeImpl C:\JavaExample\18>dir ¡¦. RMIDayTimeImpl_Stub.class RMIDayTimeImpl_Skel.class ¡¦. |
³×¹øÂ° ´Ü°è´Â ¹¹ÁÒ? Àß »ý°¢ÇØ º¸¼¼¿ä. ¹Ù·Î ¿ø°Ý°´Ã¼¸¦ »ç¿ëÇÒ Å¬¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥À» ¸¸µé¾î¾ß °ÚÁÒ? ¼¹ö´Â Àִµ¥ À̸¦ »ç¿ëÇÑ Å¬¶óÀÌ¾ðÆ®°¡ ¾øÀ¸¸é ³¡ÀÌ ¸·Èù µå·³ÅëÀÌ µÇ¹ö¸®°ÚÁÒ! ÀÌ ´Ü°è¿¡¼´Â ºÐ»ê°´Ã¼¸¦ ã´Â Naming.lookup()¸Þ¼µå¸¦ È£ÃâÇÏ¿© RMIDayTime ŸÀÔÀÇ ¿ø°ÝÂüÁ¶¸¦ ¾òÀº ´ÙÀ½, ÀÌ ¿ø°ÝÂüÁ¶¸¦ ÀÌ¿ëÇØ¼ ¿ø°Ý¸Þ¼µå getDayTime()¸¦ È£ÃâÇØ ¿ø°Ý°´Ã¼ÀÇ ÇöÀ糯¥¿Í ½Ã°£À» ¾ò½À´Ï´Ù.
RMIDayTimeClient.java (RMI¿¡¼ÀÇ Å¬¶óÀÌ¾ðÆ® Å¬·¡½º ¿¹Á¦) |
import java.rmi.*; import java.util.Date; public class RMIDayTimeClient { public static void main(String[] args) throws Exception { RMIDayTime rmidaytime = (RMIDayTime)Naming.lookup("//localhost/DateServer"); Date date = rmidaytime.getDayTime(); System.out.println( "ToDay Time : "+ date); } } |
C:\JavaExample\18>javac RMIDayTimeClient.java |
ÀÌÁ¦ ¸¶Áö¸·À¸·Î ¼¹ö¿Í Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥µµ ´Ù ¸¸µé¾ú°í Stub / Skeletonµµ »ý¼ºÀ» ÇßÀ¸´Ï Àß µ¹¾Æ°¡´ÂÁö È®ÀÎÇÏ´Â ´Ü°è°¡ ³²¾Æ ÀÖ½À´Ï´Ù. ±×·¯±â À§Çؼ ¸ÕÀú RMI Registry ¼ºñ½º¸¦ ½ÃÀÛ ÇÕ´Ï´Ù. ÀÌ ¸í·ÉÀº Çѹø¸¸ ½ÇÇàÇÏ¸é µÇ¸ç ¼¹ö³ª Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÌ º¯°æµÇ´õ¶óµµ ´Ù½Ã ½ÇÇà½Ãų ÇÊ¿ä´Â ¾ø½À´Ï´Ù.
C:\JavaExample\18>rmiregistry |
ÀÌÁ¦ Á¤¸» ¸¶Áö¸·À¸·Î °¢°¢ ¼¹ö¿Í Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄÑ¾ß ÇÕ´Ï´Ù.
C:\JavaExample\18>java RMIDayTimeImpl dateserver was rebinded with name 'DateServer' |
C:\JavaExample\18>java RMIDayTimeClient ToDay Time : Wed Oct 24 17:27:52 KST 2001 |
¸¶Áö¸· °úÁ¤¿¡¼ ÇØº¸¼Å¼ ¾Æ½Ã°ÚÁö¸¸ ÁÖÀÇÇØ¾ß ÇÒ °ÍÀº ½ÇÇàÇÏ´Â ¼¼°³ÀÇ ÇÁ·Î±×·¥ÀÌ °¢±â ´Ù¸¥ DOSâ¿¡¼ ÀÌ·ç¾î Á®¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ´Ù ¾Æ½Ã°í °è¼ÌÁÒ?
ÀÌ ¿¹Á¦¸¦ ½ÇÇàÇØ º¸´Ï 17Àå ¼ÒÄÏÅë½Å¿¡¼ÀÇ DayTimePortTest¿Í ¾î¶»°Ô Ʋ¸°Áö ¾Æ½Ã°Ú½À´Ï±î? RMI¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¥¿¡¼´Â Socket, ServerSocket ¶Ç´Â DatagramSocket°ú °°Àº ¼ÒÄÏ °ü·Ã Ŭ·¡½ºµéÀ» ´Ù·ê Çʿ䰡 ¾ø°í accept(), send(), receive() °°Àº ¸Þ¼µåµéµµ ´Ù·ê Çʿ䰡 ¾ø½À´Ï´Ù. ºÐ»ê ½Ã½ºÅÛÀÇ ÀåÁ¡À» ÀÌ¿ëÇØ ¿ø°ÝÁöÀÇ ¸Þ¼µåµéÀ» ÀÚÀ¯·Ó°Ô ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
¢Ñ RMI ¾îÇø®ÄÉÀÌ¼Ç ÀÛ¼º ¼ø¼ |
n 1 ´Ü°è : ¼ºñ½ºÇÒ ¿ø°Ý °´Ã¼ÀÇ ÀÎÅÍÆäÀ̽º ÀÛ¼º n 2 ´Ü°è : ¿ø°Ý °´Ã¼ ¹× ¼¹ö ÇÁ·Î±×·¥ ÀÛ¼º n 3 ´Ü°è : Stub / Skeleton »ý¼º n 4 ´Ü°è : ¿ø°Ý °´Ã¼¸¦ »ç¿ëÇÒ Å¬¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ ÀÛ¼º n 5 ´Ü°è : RMI Registry ½ÇÇà n 6 ´Ü°è : ¼¹ö ÇÁ·Î±×·¥°ú Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ ½ÇÇà |
jabookÀúÀÚ¸íÇÔ |
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù4ºÎ ÀúÀÚ:ÃÖ¿µ°ü |