¼Ò¼³°°Àº ÀÚ¹Ù 4ºÎ  Á¦18Àå R M I  18.3.6 ¼­¹ö ÇÁ·Î±×·¥°ú Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ ½ÇÇà  

 

    18.3.6 ¼­¹ö ÇÁ·Î±×·¥°ú Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ ½ÇÇà

 

 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ºÎ
ÀúÀÚ:ÃÖ¿µ°ü