¼Ò¼³°°Àº ÀÚ¹Ù 4ºÎ  Á¦18Àå R M I  18.3.2 ¿ø°Ý °´Ã¼ ¹× ¼­¹ö ÇÁ·Î±×·¥ ÀÛ¼º  

 

    18.3.2 ¿ø°Ý °´Ã¼ ¹× ¼­¹ö ÇÁ·Î±×·¥ ÀÛ¼º

 

 2´Ü°è´Â ¿ø°Ý °´Ã¼ ¹× ¼­¹ö ÇÁ·Î±×·¥ ÀÛ¼ºÀÔ´Ï´Ù. ¿©±â¼­ ÀÛ¼ºÇÑ ¿ø°Ý °´Ã¼ ¾È¿¡´Â 1´Ü°è¿¡¼­ ÀÛ¼ºÇÑ ÀÎÅÍÆäÀ̽º¿¡¼­ Á¤ÀǵǾú´ø ¸Þ¼­µåµéÀÌ ½ÇÁ¦·Î ±¸ÇöµË´Ï´Ù. ¿ø°Ý °´Ã¼ ¿ª½Ã ÀÎÅÍÆäÀ̽º¸¦ ÀÛ¼ºÇÒ ¶§¿Í ¸¶Âù°¡Áö·Î, ¹Ýµå½Ã ÁöÄÑ¾ß ÇÏ´Â ¸î °¡Áö ±ÔÄ¢ÀÌ ÀÖ½À´Ï´Ù.

 

n        ¿ø°Ý ÀÎÅÍÆäÀ̽ºÀÇ ¸ðµç ¸Þ¼­µåµéÀ» ±¸ÇöÇØ¾ß ÇÑ´Ù.

n        ÀϹÝÀûÀ¸·Î java.rmi.server.UnicastRemoteObject Ŭ·¡½º¸¦ »ó¼Ó ¹Þ¾Æ¾ß ÇÑ´Ù.

 

¿ø°Ý °´Ã¼°¡ »ó¼Ó ¹Þ¾Æ¾ß ÇÏ´Â UnicastRemoteObject Ŭ·¡½º´Â, RMI¿¡¼­ ¿ø°Ý °´Ã¼°¡ ¼­¹ö·Î¼­ÀÇ ¿ªÇÒÀ» ÇÒ ¼ö ÀÖµµ·Ï, »ó¼ÓÀ» ¹ÞÀº °´Ã¼¿¡°Ô ¿ø°Ý °´Ã¼¸¦ »ý¼ºÇÏ°í ³»º¸³»´Â ±â´ÉÀ» Á¦°øÇØ ÁÝ´Ï´Ù. ´ëºÎºÐÀÇ °æ¿ì, ¿ì¸®°¡ ÀÛ¼ºÇÏ´Â ¿ø°Ý °´Ã¼µéÀº UnicastRemoteObject¸¦ ¹Ýµå½Ã »ó¼Ó ¹Þ¾Æ¾ß ÇÕ´Ï´Ù.

 

 ´ÙÀ½ BankImplŬ·¡½º´Â 1 ´Ü°è¿¡¼­ ÀÛ¼ºÇß´ø BankÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ ¿ø°Ý °´Ã¼ÀÔ´Ï´Ù.

 

BankImpl.java (RMI¿¡¼­ÀÇ ¼­¹ö Ŭ·¡½º ¿¹Á¦)

import java.rmi.*;

import java.rmi.server.*;

public class BankImpl extends UnicastRemoteObject implements Bank {

   private int total;

   public BankImpl(int total) throws RemoteException {

       this.total = total;

   }

  public int getBalance() throws RemoteException {

       return total;

   }

   public int deposit(int amount) throws RemoteException {

       total += amount;

       return getBalance();

   }

   public int withdraw(int amount) throws RemoteException {

       total -= amount;

       return getBalance();

   } 

   public static void main(String[] args) throws Exception {

       BankImpl bankip = new BankImpl(10000);

       Naming.rebind("//localhost/BankIp", bankip);

       System.out.println("bank was rebinded with name 'BankIp");   

   }

}

C:\JavaExample\18>javac BankImpl.java

 

BankImplŬ·¡½º¿¡´Â ¿ì¸®°¡ BankÀÎÅÍÆäÀ̽º¿¡¼­ Á¤ÀÇÇß´ø ¸ðµç ¸Þ¼­µåµéÀÌ ½ÇÁ¦·Î ±¸ÇöµÇ¾î ÀÖ½À´Ï´Ù.

 

n        implements Bank

 

À§ ¿¹Á¦¿¡ ±¸ÇöµÈ ¸Þ¼­µåµéÀÌ ½ÇÁ¦·Î Ŭ¶óÀÌ¾ðÆ®°¡ ¸Þ¼­µå È£ÃâÀ» ¿äûÇßÀ» ¶§ ½ÇÇàÀÌ µÇ´Â ¸Þ¼­µåµéÀÔ´Ï´Ù. ¸ðµç ¸Þ¼­µå´Â (»ý¼ºÀÚ±îÁö Æ÷ÇÔÇØ¼­) BankÀÎÅÍÆäÀ̽º¿¡¼­ Á¤ÀǵǾú´ø °Íó·³, RemoteExceptionÀ» ´øÁö°í ÀÖ½À´Ï´Ù.

 

n        throws RemoteException

 

ÀÌ ¿ø°Ý °´Ã¼´Â ¼­¹öÀÇ ±â´ÉÀ» ÇÒ ¼ö ÀÖµµ·Ï, UnicastRemoteObject¸¦ »ó¼ÓÇϰí ÀÖ½À´Ï´Ù.

 

n        extends UnicastRemoteObject

 

¸¸µé¾îÁø ¿ø°Ý °´Ã¼¿¡ Ŭ¶óÀÌ¾ðÆ®°¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï, ¿ø°Ý °´Ã¼ÀÇ ÂüÁ¶ÀÚ´Â RMI Registry¿¡ ½Äº° °¡´ÉÇÑ À̸§°ú ÇÔ²² µî·ÏµÇ¾î¾ß ÇÕ´Ï´Ù. ¿ì¸®´Â java.rmi.NamingÀ̶ó´Â Ŭ·¡½ºÀÇ ¸Þ¼­µåµéÀ» ÅëÇØ¼­ RMI Registry¿¡ ¿ø°Ý ÂüÁ¶ÀÚ¸¦ ÀúÀåÇÏ°í ºÒ·¯¿Ã ¼ö ÀÖ½À´Ï´Ù. ÀÌ NamingŬ·¡½º´Â RMI Registry¿¡ °´Ã¼¸¦ µî·ÏÇÏ°í °Ë»öÇÏ´Â µîÀÇ ÀÏÀ» À§ÇÑ ÀÏ·ÃÀÇ ¸Þ¼­µåµéÀ» °¡Áö°í ÀÖ½À´Ï´Ù. NamingŬ·¡½º°¡ °¡Áö°í ÀÖ´Â ¸Þ¼­µåµéÀº ÀüºÎ staticÀ¸·Î ¼±¾ðµÇ¾îÀֱ⠶§¹®¿¡, Ưº°ÇÑ »ý¼º °úÁ¤ ¾øÀÌ ¹Ù·Î È£ÃâÇØ¼­ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·³ ¿©±â¼­ NamingŬ·¡½ºÀÇ ÁÖ¿ä ¸Þ¼­µåµéÀ» Çѹø »ìÆìº¸°í ³Ñ¾î°¡ÁÒ.

 

Naming Ŭ·¡½º ÁÖ¿ä ¸Þ¼­µå

public static void bind (String name, Remote obj) : ÁÖ¾îÁø À̸§°ú ¿ø°Ý °´Ã¼¸¦ ¿¬°áÇØÁØ´Ù.

public static String[] list (String name) : RMI Registry¿¡ µî·ÏµÇ¾î ÀÖ´Â À̸§µéÀÇ ¸®½ºÆ®¸¦ ¹ÝÈ¯ÇØ ÁØ´Ù.

public static Remote lookup (String name) : ÁÖ¾îÁø À̸§°ú ¿¬°áµÇ¾î ÀÖ´Â ¿ø°Ý °´Ã¼ÀÇ ÂüÁ¶ÀÚ¸¦ ¹ÝÈ¯ÇØ ÁØ´Ù.

public static void rebind (String name, Remote obj) : ÁÖ¾îÁø À̸§°ú »õ·Î¿î ¿ø°Ý °´Ã¼¸¦ ¿¬°áÇØ ÁØ´Ù.

public static void unbind (String name) : ÁÖ¾îÁø À̸§À¸·Î ¿¬°áµÇ¾î ÀÖ´Â °´Ã¼¿Í ¿¬°áÀ» ÇØÁ¦ ÇÑ´Ù.

 

¿¹Á¦¿¡¼­´Â BankImpl°´Ã¼ÀÇ ÂüÁ¶ÀÚ¸¦ µî·ÏÇϱâ À§ÇØ Naming.rebind()¶ó´Â ¸Þ¼­µå¸¦ »ç¿ëÇß½À´Ï´Ù. ÀÌ ¸Þ¼­µå´Â StringÇüÅ·ΠÁÖ¾îÁø À̸§°ú ¿ø°Ý °´Ã¼ÀÇ ÂüÁ¶ÀÚ¸¦ ¸ÊÇÎ(mapping) ½ÃÄѼ­ ÀúÀåÇØ ÁÝ´Ï´Ù. Naming.bind()¸Þ¼­µåµµ °°Àº ÀÏÀ» ÇÏÁö¸¸, rebind()¸Þ¼­µåÀÇ °æ¿ì´Â, ÀÌÀü¿¡ ¸ÊÇεǾî ÀÖ´Â Á¤º¸¸¦ ¹«½ÃÇÏ°í ¹«Á¶°Ç ´Ù½Ã ÀúÀåÇØÁÝ´Ï´Ù.

 

¿ø°Ý °´Ã¼ÀÇ ÂüÁ¶ÀÚ¸¦ ½Äº°Çϴµ¥ »ç¿ëµÇ´Â À̸§Àº ´ÙÀ½°ú °°Àº Çü½ÄÀ» °¡Áý´Ï´Ù.

 

n        //host:port/name

 

host´Â RMI Registry°¡ Á¸ÀçÇϴ ȣ½ºÆ®ÀÇ ÁÖ¼ÒÀÔ´Ï´Ù. Áï, localhost³ª remote host°¡ µÅ°ÚÁÒ? ¸¸¾à host°¡ ÁöÁ¤ µÇÁö ¾Ê´Â´Ù¸é localhost°¡ ±âº»°ªÀ¸·Î »ç¿ëµË´Ï´Ù. RMI Registry´Â ±âº»ÀûÀ¸·Î 1099Æ÷Æ®¸¦ »ç¿ëÇϴµ¥, ƯÁ¤ Æ÷Æ®¸¦ ÁöÁ¤ÇØ ÁÙ ¼öµµ ÀÖ½À´Ï´Ù. ¿¹Á¦¿¡¼­´Â ±âº» Æ÷Æ®¸¦ »ç¿ëÇßÀ¸¹Ç·Î, Æ÷Æ® ¹øÈ£¸¦ »ý·«Çß½À´Ï´Ù. ±×¸®°í nameÀº ¿ø°Ý°´Ã¼ÀÇ À̸§À» ³ªÅ¸³À´Ï´Ù.

 

¾î·ÆÁÒ? RMI Registry¿¡ µî·ÏÇÏ´Â nameÀ» ½±°Ô À̾߱âÇϸé ÀÌ·¸½À´Ï´Ù. ½¬¿î ¿¹¸¦ µé¸é °­¾ÆÁö°¡ ÇѸ¶¸® Àִµ¥ ÀÌ °­¾ÆÁö À̸§ÀÌ ¡®¸Û¸ÛÀÌ¡¯Àε¥ ¡®¶¯Ä¥ÀÌ¡¯¶ó´Â ¿¹¸íÀ» ÇϳªÁÝ´Ï´Ù. ³ªÁß¿¡ ¡®¶¯Ä¥¾Æ!¡¯¶ó°í ºÎ¸£¸é ±× ¸Û¸ÛÀ̰¡ ÀÚ±âÀÚ½ÅÀ» ºÎ¸£´Â °ÍÀÎ °É ¾Ë°í ´Þ·Á¿À°Ô µÇ´Â µË´Ï´Ù. ÀÌ¿Í °°Àº ¿ø¸®¶ó°í »ý°¢À» ÇÏ½Ã¸é µË´Ï´Ù. ¿©±â¼­´Â Ŭ¶óÀÌ¾ðÆ®¿¡¼­ BankIp¸¦ ãÀ¸¸é ¼­¹ö¿¡¼­´Â bankip °´Ã¼µéÀÌ ´Þ·Á¿Í¼­ ÀÏÀ» ÇÏ°Ô µË´Ï´Ù.

 

n        Naming.rebind("//localhost/BankIp", bankip);

 

¢Ñ  2 ´Ü°è

¿ø°Ý °´Ã¼ ÀÛ¼º½Ã ÁöÄÑ¾ß ÇÒ ±ÔÄ¢ 

1. ¿ø°ÝÀÎÅÍÆäÀ̽ºÀÇ ¸Þ¼­µåµéÀ» ±¸ÇöÇØ¾ß ÇÑ´Ù.

2. java.rmi.server.UnicastRemoteObjectŬ·¡½º¸¦ »ó¼Ó ¹Þ¾Æ¾ß ÇÑ´Ù.

3. RMI Registry¿¡ ¿ø°Ý °´Ã¼ÀÇ ÂüÁ¶ÀÚ¸¦ µî·ÏÇÑ´Ù.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù4ºÎ
ÀúÀÚ:ÃÖ¿µ°ü