¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
Java Distributed Computing
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
Written By
½Å¼ºÈ£skid1206@hitel.net
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
ÇÏÀÌÅÚ ºÐ»ê°´Ã¼ µ¿È£È¸
¡¡
¡¡
¡¡
¡¡
¡¡
¸ñ Â÷
¡¡
¡¡
1. °³ ¿ä
¡¡
2.
Socket Programming¡¡
3. RMI (Remote Method Invocation)
¡¡
4. Corba (Common Object Request Broker
Architecture)
¡¡
5. EJB (Enterprise JavaBeans)
¡¡
6.
±â Ÿ6.1 JAVA IDL
6.2 RMI_OVER_IIOP
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
1. °³ ¿ä
1) ºÐ»êÄÄÇ»ÆÃ
ºÐ»êÄÄÇ»ÆÃÀº ³×Æ®¿÷»óÀÇ ´Ù¸¥ »ç¿ëÀÚ³ª ÄÄÇ»ÅÍÀÇ ÀÚ¿øÀ» °øÀ¯ÇÒ
¼ö ÀÖ°Ô ÇÑ´Ù.
ÇϳªÀÇ ÄÄÇ»Åͳ»¿¡ ÀÖ´Â ¾ÖÇø®ÄÉÀÌ¼Ç ¹× ¾ÖÇø´Àº Àº ´Ù¸¥±â°è
ÀÇ
CPU, Memory, Disk ÀúÀåÀåÄ¡ µîÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.µû¶ó¼ ºÐ»êÄÄÇ»ÆÃÀº ¿öµåÇÁ·Î¼¼¼¿Í °°Àº ´ÜÀÏ »ç¿ëÀÚ ¾ÖÇø®ÄÉ
ÀÌ¼Ç µîÀ» Á¦¿ÜÇÑ ¸ÖƼ Ŭ¶óÀÌ¾ðÆ® / ¼¹ö ȯ°æ¿¡¼´Â ÇÁ·Î±×·¥ÀÇ
¼º´ÉÀ» Çâ»ó ½Ãų ¼ö °¡ ÀÖ´Ù.
2) ºÐ»ê °´Ã¼
ºÐ»ê°´Ã¼´Â ¿ø°ÝÁö¿¡¼ Á¢±Ù °¡´ÉÇÑ °´Ã¼¸¦ ¸»ÇÑ´Ù.
À̰ÍÀº ºÐ»ê°´Ã¼°¡ ÀϹÝÀûÀÎ ·ÎÄð´Ã¼Ã³·³ ÇൿÇÏÁö¸¸ ³×Æ®¿÷»ó
ÀÇ ¾î´À°÷¿¡¼¶óµµ Á¢±ÙµÉ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù.
ºÐ»ê°´Ã¼°¡ °®´Â ÀÕÁ¡Àº ´ë´ÜÇÏ´Ù.
RMI(Remote Method Invocation) ³ª CORBA(Common Object
Request Broker Architecture)
¿Í °°Àº ºÐ»ê°´Ã¼°¡ µîÀåÇϱâ ÀÌÀü¿¡µµ ºÐ»êȯ°æÀº Á¸ÀçÇÏ¿´´Ù.
´ëÇ¥ÀûÀÎ ¿¹·Î
Sun ¿¡¼ ¸¸µç RPC(Remote Procedure Call)°¡ÀÖÀ¸¸ç ÀÌ °³³äÀº ÇöÀçÀÇ
RMI, CORBA, DCOM ÀÇ ±â¹ÝÀÌ µÇ°íÀÖ´Ù.
´Ù¸¥Á¡Àº °´Ã¼³Ä ¾Æ´Ï³ÄÀÇ Â÷ÀÌ´Ù.
RPC ´Â ´ÜÁö ¸®¸ðÆ® ÄÄÇ»ÅÍ»óÀÇ Æ¯Á¤ ¸Þ¸ð¸® ¹øÁö¿¡
Á¸ÀçÇÏ´Â ÇÔ¼ö¸¦ È£ÃâÇÒ »ÓÀÌÁö¸¸ À§¿¡¼ ¾ð±ÞÇÑ ºÐ»ê°´Ã¼´Â
¸®¸ðÆ® °´Ã¼ÀÇ ·¹ÆÛ·±½º¸¦ ÅëÇØ ¼ºñ½º(
Remote Method)¸¦ È£ÃâÇÑ´Ù.
Áï,
OOP(Object Oriented Programming) ¿¡¼ Á¦°øÇÏ´Â »ó¼Ó,´ÙÇü¼º µîÀÇ ÀÕÁ¡À» ±×´ë·Î ´©¸±¼ö ÀÖ´Ù.
3) ºÐ»ê ÄÄÆ÷³ÍÆ®
°´Ã¼¿Í ÄÄÆ÷³ÍÆ®ÀÇ Â÷ÀÌÁ¡Àº ¹«¾úÀϱî?
ÈçÈñ ¾ê±âÇϵíÀÌ °´Ã¼´Â ¼Ò½ºÄÚµå ¼öÁØÀÇ Àç»ç¿ë¼º¸¸À» Á¦°øÇÏÁö
¸¸ ÄÄÆ÷³ÍÆ®´Â ¹ÙÀ̳ʸ® ÄÚµå ¼öÁØÀÇ Àç»ç¿ëÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù.
Áï, ÄÄÆ÷³ÍÆ®´Â ÀçÄÄÆÄÀϾøÀÌ
Tool À» ÀÌ¿ëÇØ ÀÔ¸À¿¡ ¸Â°ÔProperty µîÀ» ¼öÁ¤ÇÑµÚ ¹Ù·Î »ç¿ëµÇ¾î Áú ¼ö ÀÖ´Ù.
ÄÄÆ÷³ÍÆ®´Â ÇϳªÀÌ»óÀÇ °´Ã¼°¡ ¸ð¿©¼ ±¸¼ºµÈ´Ù.
ÀÚ¹Ù¿¡´Â
JavaBeans ¶ó°í ÇÏ´Â ÄÄÆ÷³ÍÆ® ¸ðµ¨ÀÌ ÀÖ´Ù.ÇÏÁö¸¸
JavaBeans´Â ºÐ»êȯ°æÇÏ¿¡¼ ¼¹öÃø Business LogicÀ»ÄÄÆ÷³ÍÆ®È ÇϱâÀ§ÇÑ ¸ðµ¨Àº ¾Æ´Ï´Ù.
RMI ¼¹ö°´Ã¼ ¶ÇÇÑ ÄÄÆ÷³ÍÆ®´Â ¾Æ´Ï´Ù.
±×°ÍÀº ÇöÀç±îÁö ³ª¿ÍÀÖ´Â ¹öÀü(2.3)ÀÇ
CORBA µµ ¸¶Âù°¡Áö´Ù.CORBA ÀÇ °¡Àå Å« ´ÜÁ¡Áß¿¡ Çϳª´Â ÄÄÆ÷³ÍÆ® ¸ðµ¨ÀÇ ºÎÀçÀÌ´Ù.
ÇÁ·Î±×·¡¸Ó´Â
CORBA ¿¡¼ Á¦°øÇÏ´Â Service ¹× Facility ¸¦ »ç¿ëÇÏ°Ô µÇ¸ç
IDL(Interface Definition Language) À» ÅëÇØ Ŭ¶óÀÌ¾ðÆ®¸¦ À§ÇÑ ¼ºñ½º¸¦ Á¤ÀÇÇÏ°Ô µÈ´Ù.
Áï, ÇÁ·Î±×·¡¸Ó¿¡°Ô ÁÖ¾îÁö´Â°ÍÀº
IDL ÀÌ ÀüºÎÀ̸ç IDLÀº ÀÎÅÍÆäÀ̽º Á¤ÀǾð¾îÀÏ »Ó ÄÄÆ÷³ÍÆ® ¸ðµ¨À» Ç¥ÇöÇÏÁö ¸øÇÑ´Ù.
À̰ÍÀº
CORBA °¡ ¾ð¾î¿¡ µ¶¸³ÀûÀ̶ó´Â°ÍÀ» °¨¾ÈÇÑ´Ù¸é ÃæºÐÈ÷³³µæÇÒ ¼ö ÀÖ´Â ÀÏÀÌ´Ù.
½ÇÁ¦ ±¸Çö¾ð¾î°¡
C++ À̸é COM / DCOM ÀÌ µÉ ¼ö ÀÖÀ»°ÍÀ̸ç
JAVA ¶ó¸é EJB(Enterprise JavaBeans)°¡ µÉ ¼ö ÀÖÀ»°ÍÀÌ´Ù.
OMG(Object Management Group)
¿¡¼´Â 99³â 4/4 ºÐ±â¿¡ ³ª¿ÃCORBA 3.0 Spec ¿¡¼ EJB ¸¦ ±â¹ÝÀ¸·Î Çϴ ǥÁØ ÄÄÆ÷³ÍÆ® ¸ðµ¨
À» Á¦½ÃÇÑ´Ù°í ÇÏ´Ï ±â´ëÇØµµ ÁÁÀ»µí ÇÏ´Ù.
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
2.
Socket ProgrammingSocket
Àº À¯´Ð½º¿¡ ±â¹ÝÇÏ¸ç °´Ã¼±â¹Ý ºÐ»êÄÄÇ»ÆÃÀÌ ³ª¿À±â ÀÌÀü±îÁö °¡Àå º¸ÆíÀûÀ¸·Î »ç¿ëµÇ¾îÁø Ŭ¶óÀÌ¾ðÆ® / ¼¹ö °£ÀÇ Åë½Å¹æ¹ýÀÌ
¸ç
CORBA ³ª RMIµîÀÇ ½ºÅÓ, ½ºÄÌ·¹Åæ ÀÌ ½ÇÁúÀûÀ¸·Î Åë½ÅÇϴ¹æ¹ýÀ̱⵵ ÇÏ´Ù.
´º½º±×·ì¿¡ ±ÛÀ» ¿Ã¸®´Â ¿¹Á¦¸¦ µé¾îº¸µµ·Ï ÇϰڴÙ.
1) Ŭ¶óÀÌ¾ðÆ®´Â
NNTP ¼¹ö¿¡ Á¢¼ÓÀ» ÇÑ´Ù.Socket clientSocket = new Socket("news.kaist.ac.kr", 119);
Ŭ¶óÀÌ¾ðÆ®´Â Æ¯Á¤ µµ¸ÞÀÎ ³×ÀÓÀ̳ª IP ¸¦ ÀÌ¿ëÇØ ƯÁ¤Æ÷Æ®¿¡¼
¼ºñ½º ÁßÀÎ ¼¹ö¿¡ Á¢¼ÓÇÑ´Ù.
¼ÒÄÏÇÁ·Î±×·¡¹Ö¿¡¼ Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö´Â ¼·ÎÀÇ ¹°¸®ÀûÀÎ À§Ä¡
¿¡ ¸Å¿ì ¹Î°¨ÇÏ´Ù.
2) Ŭ¶óÀÌ¾ðÆ®´Â ¼¹ö·Î
Posting ÇÑ´Ù.// Ŭ¶óÀÌ¾ðÆ®´Â ¼¹ö¿¡°Ô "
POST" ¶ó´Â Command¸¦ º¸³¿À¸·Î½á//
Posting Çϰڴٴ ¶æÀ» ÀüÇÑ´Ù.out.println("Post");
// Ŭ¶óÀÌ¾ðÆ®´Â »ç¿ëÀÚ À̸§°ú ¸ÞÀÏÁÖ¼Ò¸¦ º¸³½´Ù.
out.println("From: " + UserName + "<" + Mail Address + ">");
// Ŭ¶óÀÌ¾ðÆ®´Â Æ÷½ºÆÃ ÇϰíÀÚ ÇÏ´Â ´º½º±×·ì¸íÀ» º¸³½´Ù.
out.println("Newsgroups: " + group);
// Á¦¸ñÀ» Àü¼ÛÇÑ´Ù.
out.println("Subject: " + subject);
// ¿Ã¸°±Û¿¡ ´ëÇÑ ´äÀåÀ» ¹Þ±âÀ§ÇÑ ¸ÞÀÏ ÁÖ¼Ò¸¦ ÁöÁ¤ÇÑ´Ù.
out.println("Reply-To: " + mail address);
// Ŭ¶óÀÌ¾ðÆ®°¡ ¼ÓÇÑ ¼Ò¼ÓÀ» ÁöÁ¤ÇÑ´Ù.
out.println("Organization: " + organization);
//
HEAD ÀÇ ³¡À» ¾Ë¸®±â À§ÇØ ºó¶óÀÎÀ» Àü¼ÛÇÑ´Ù.out.println();
out.println();
//
BODY, Áï º»¹®À» Àü¼ÛÇÑ´Ù.out.println(Message);
// ¸Þ¼¼ÁöÀÇ ³¡À» ¾Ë¸°´Ù.
out.println(".");
Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö´Â
RFC¿¡ Á¤ÀÇµÈ Ç¥ÁØ Command(Post,From
µî) ¸¦ ÀÌ¿ëÇØ ¼·Î Åë½ÅÇÑ´Ù.¿ì¸®°¡ ÀÍÈ÷ Àß ¾Ë°í ÀÖ´Â CommID.REQUEST, CommID.VALIDATE
µµ
Command ¿¡ ÇØ´çÇÑ´Ù.
¼ÒÄÏÇÁ·Î±×·¡¹Ö°ú ÇöÁ¸ÇÏ´Â ºÐ»ê°´Ã¼µéÀÇ Åë½Å¹æ¹ýÀ» °£´ÜÈ÷ ºñ±³
ÇØ º¸¸é...
¼ÒÄÏÀº ¹°¸®ÀûÀÎ À§Ä¡¸¦ ÀÌ¿ëÇØ¼ ¼¹ö¸¦ ãÁö¸¸
Corba µîÀÇ ºÐ»ê°´Ã¼¿¡¼´Â
Directory and Name Service ¸¦ ÀÌ¿ëÇØ¼ °´Ã¼ÀÇ ¹®ÀÚ¿À̸§À» ÅëÇØ ·¹ÆÛ·±½º¸¦ ¾ò¾î¿Â´Ù.
Post, Subject.. µî°ú °°Àº Command ´Â ºÐ»ê°´Ã¼¿¡¼ÀÇ ¼ºñ½º
(¸Þ¼Òµå) À̸§°ú ´ëÀÀµÇ¸ç
Command: ÀÌÈÄÀÇ ¸Þ¼¼Áö´Â ÇØ´ç ¼ºñ½º(¸Þ¼Òµå) ¿¡ ´ëÇÑ Àü´ÞÀÎÀÚ¿¡ ÇØ´çÇÑ´Ù.
ÀÌ»óÀ¸·Î °£·«ÇÏ°Ô ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇØ¼ ¾Ë¾Æº¸¾Ò´Ù.
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
3.
RMI (Remote Method Invocation)RMI ´Â ³×Æ®¿÷»ó¿¡¼ ÀÚ¹Ù °´Ã¼µéÀ» ºÐ»ê½Ãų¼ö ÀÖ´Â ¹æ¹ýÀÌ´Ù.
RMI ´Â EJB, JINI µî ÀÚ¹Ù ºÐ»ê±â¼úÀÇ ±â¹Ý ±â¼úÀÌ´Ù.
RMI API ´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô °´Ã¼°¡ ³×Æ®¿÷»ó¿¡¼ ºÐ»êµÇ¾î ÀÖ
´Ù´Â »ç½ÇÀ» ´ëºÎºÐ ¹«½ÃÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù.
RMI ´Â JRMP ¶ó´Â ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ°Ô µÇ¸ç Ŭ¶óÀÌ¾ðÆ® / ¼¹ö
¸ðµÎ ÀÚ¹Ù·Î ±¸ÇöµÇ¾î¾ß ÇÑ´Ù.
RMI ¿¡ ´ëÇØ¼´Â °£´ÜÈ÷ »ìÆìº¸°í ³Ñ¾î °¡°Ú´Ù.
RMI ¸¦ ºñ·ÔÇÑ ¸ðµç ºÐ»ê°´Ã¼ ½Ã½ºÅÛµéÀÌ °®´Â °øÅëÀûÀΠƯ¡ÀÌ
ÀÖ´Ù.
1). Ŭ¶óÀÌ¾ðÆ®¿¡ ¼ºñ½ºÇϱâ À§ÇÑ °´Ã¼¸¦ Á¤ÀÇÇÑ´Ù.
Ŭ¶óÀÌ¾ðÆ®´Â ¼¹ö°¡ Ŭ¶óÀÌ¾ðÆ®¸¦ À§ÇØ Á¦°øÇÏ´Â ¼ºñ½º¸¸À» È£
ÃâÇÒ ¼ö ÀÖ´Ù.
RMI ¿¡¼´Â java.rmi.Remote ÀÎÅÍÆäÀ̽º¸¦ »ó¼ÓÇÏ´Â ÀÎÅÍÆäÀ̽º
¸¦ ¿ø°Ý ÀÎÅÍÆäÀ̽º¶ó°í ÇÏ¸ç ¿ø°Ý ÀÎÅÍÆäÀ̽º³»¿¡ Á¤ÀÇµÈ ¸Þ¼Òµå
¸¸ÀÌ Å¬¶óÀÌ¾ðÆ®·ÎºÎÅÍ È£Ãâ µÉ ¼ö ÀÖ´Ù.
ÀÌ ¿ÜÀÇ Å¬·¡½º³ª ¸Þ¼Òµå´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ó¸®Çϱâ À§ÇØ
¼¹ö³»ºÎÀûÀ¸·Î »ç¿ëµÇ¾îÁö´Â °ÍµéÀÌ´Ù.
2). Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö´Â ½ºÅÓ(
Stub), ½ºÄÌ·¹Åæ(Skeleton) À» ÀÌ¿ëÇØÅë½ÅÇÑ´Ù.
- ½ºÅÓ : Ŭ¶óÀ̾ðÆ®Ãø¿¡ À§Ä¡ÇÏ¸ç ¼¹ö°´Ã¼ÀÇ
Proxy ¿ªÇÒÀ»ÇÑ´Ù.
Ŭ¶óÀÌ¾ðÆ®´Â ½ÇÁ¦·Î ¿ø°Ý°´Ã¼¸¦ È£ÃâÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó
·ÎÄûóÀÇ ½ºÅÓÀ» È£ÃâÇÔÀ¸·Î½á ¼ºñ½º¸¦ ¿äûÇÑ´Ù.
±×·¯¸é ½ºÅÓÀÌ °¡Áö°í ÀÖ´Â ¿ø°Ý°´Ã¼ÀÇ À§Ä¡Á¤º¸
(
IP Address)¸¦ ÀÌ¿ë ½ÇÁ¦·Î ³×Æ®¿÷À» ÅëÇØ ¼¹ö»óÀǽºÄÌ·¹ÅæÀ» È£ÃâÇϸç ÀÌ °úÁ¤¿¡¼ ¸Ó½Å°£ÀÇ ¹ÙÀÌÆ® ¼ø¼
µîÀÇ Â÷ÀÌÁ¡À» ÇØ°áÇϱâ À§ÇØ ¸¶¼£¸µÀ» ÇÑ´Ù.
- ½ºÄÌ·¹Åæ : ¼¹öÃø¿¡ À§Ä¡ÇÏ¸ç ½ºÅÓÀ¸·ÎºÎÅÍ ³Ñ¾î¿À´Â
¸Å°³º¯¼ö µîÀ» ¾ð¸¶¼£Çϸç, ³×Æ®¿÷À¸·ÎºÎÅÍ Àü¼ÛµÈ
µ¥ÀÌŸ¸¦ ÀÚ¹Ù °´Ã¼µé·Î º¯È¯ÇÑ ´ÙÀ½ ¿ø°Ý°´Ã¼¿¡
ÀÖ´Â Àû´çÇÑ ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù.
½ºÅÓ, ½ºÄÌ·¹Åæ ±¸Á¶´Â ½ÇÁ¦·Î ºÐ»ê°´Ã¼°£ÀÇ Åë½ÅÀ» °¡´ÉÇϰÔ
ÇØÁÖ´Â °¡Àå Áß¿äÇÑ ¿ä¼ÒÀÌ¸ç ³»ºÎÀûÀ¸·Î´Â ¼·Î ¼ÒÄÏÀ» ÀÌ¿ëÇÑ
Åë½ÅÀ» ÇÏ°Ô µÇ¸ç ÇÁ·Î±×·¡¸Ó¿¡°Ô´Â »óÀ§·¹º§ÀÇ ÀÎÅÍÆäÀ̽º¸¦
Á¦°øÇÔÀ¸·Î½á ¹Ýº¹µÈ ÀÛ¾÷À» ÁÙ¿©ÁØ´Ù.
¿ø°Ý¸Þ¼Òµå È£Ãâ½Ã Àü´ÞµÇ´Â ¸Å°³º¯¼ö¿Í ¸®ÅϰªÀ» Á÷·ÄÈ °¡´É
(±âº»ÀÚ·áÇü ȤÀº
java.io.Serializable ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´ÂŬ·¡½º
)Çϰųª ¿ø°Ý °´Ã¼(¿ø°ÝÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â °´Ã¼)À̾î¾ßÇÑ´Ù.
ºñ ¿ø°Ý °´Ã¼ÀÏ °æ¿ì´Â °´Ã¼ Á÷·ÄÈ µÇ¾î º¹»çµÈ °´Ã¼°¡ Àü´ÞµÇ¸ç,
¿ø°Ý °´Ã¼ÀÏ °æ¿ì´Â ½ºÅÓŬ·¡½ºÀÇ °´Ã¼°¡ º¹»çµÇ¾î Àü´ÞµÇ¸ç,
°´Ã¼ ÀÚü°¡ º¹»çµÇ¾î Àü´ÞµÇÁö´Â ¾Ê´Â´Ù.
¸¶Áö¸·À¸·Î
RMI ¸¦ À§ÇØ ÇÊ¿äÇÑ jdk³»¿¡ Æ÷ÇÔµÈ Åøµé¿¡ ´ëÇØ¼ ¾Ë¾Æº¸ÀÚ
1)
RMIC
Ŭ¶óÀÌ¾ðÆ® / ¼¹ö°£ÀÇ Åë½ÅÀ» À§ÇÑ ½ºÅÓ, ½ºÄÌ·¹ÅæÀ» »ý¼ºÇÏ´Â
ÄÄÆÄÀÏ·¯ÀÌ´Ù.
2)
RMIREGISTRYCORBA ORB
Á¦Ç°ÁßÀÇ ÇϳªÀÎ Visibroker ÀÇ OSAgent ¿Í µ¿ÀÏÇѱâ´ÉÀ» ÇÏ¸ç °´Ã¼¼¹ö°¡ ÀÖ´Â ¸Ó½Å»óÀÇ Æ÷Æ®¿¡ ±Í±â¿ïÀ̰í
ÀÖÀ¸¸ç, °´Ã¼ ¼¹ö´Â Ưº°ÇÑ ÇüÅÂÀÇ
URL(rmi://...)À» ÅëÇØ °´Ã¼ÀνºÅϽº¸¦ ÀÌ Æ÷Æ®¿¡ Â÷·Ê·Î ¹ÙÀεùÇÔÀ¸·Î½á ³ªÁß¿¡ Ŭ¶óÀ̾ðÆ®
°¡ ¼¹ö°´Ã¼¸¦ ¹ß°ßÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
4. Corba (Common Object Request Broker Architecture)
Corba
´Â 1984³â 700 ¿©°³ ÀÌ»óÀÇ ÄÄÇ»ÆÃ °ü·Ã ȸ»çµéÀÌ °øµ¿ ¼³¸³ÇÑ ÄÁ¼Ò½Ã¾öÀÎ
OMG(Object Management Group)¿¡¼ Á¦¾ÈÇÑ OMA(Object Management Architecture)
Ç¥ÁØÀÇ ÀϺÎÀÌ´Ù.OMA
´Â Corba, UML µî°ú °°Àº °´Ã¼, ºÐ»ê µî¿¡ °üÇÑ ¼Ö·ç¼ÇÀ» Á¦°øÇÑ´Ù.
Corba ´Â ÁÖ·Î ºÐ»êȯ°æÇÏ¿¡¼ °´Ã¼°£ÀÇ Åë½Å±â´É°ú À̸¦ Á¶ÀÛÇÏ´Â
µ¥ ÇÊ¿äÇÑ ±â´ÉµéÀ» ÁÖ·Î ¾ð±ÞÇϰí ÀÖÀ¸¸ç
ORB ´Â Corba Ç¥ÁؾÈÀ¸·Î½á ÁÖ·Î Åë½ÅºÎºÐ¸¸ ´ã´çÇϰí ÀÖ´Ù.
Corba ÀÇ ¸ñÀûÀº Ç÷§Æû, ¾ð¾î¿¡ µ¶¸³ÀûÀ̰í À§Ä¡¿¡ Åõ¸íÇÑ ¹æ½ÄÀ¸
·Î Ŭ¶óÀÌ¾ðÆ® / ¼¹ö°¡ Åë½ÅÇÒ ¼ö ÀÖ´Â ÇϺα¸Á¶¸¦ Á¦°øÇÑ´Ù.
Áï,
Corba ´Â ¹æ¹ý·ÐÀÌ´Ù.1)
IDL (Interface Definition Language)
IDL
Àº ¼·Î´Ù¸¥ ¾ð¾î, Ç÷§Æû°£ÀÇ Åë½ÅÀ» À§ÇÑ Ç¥ÁØÀ» Á¦°øÇÑ´Ù.IDL Àº ÄÚ¹Ù°´Ã¼°¡ Á¦°øÇÏ´Â ¼ºñ½º¸¦ Á¤ÀÇÇϱâ À§ÇÑ ¸í¼¼¾ð¾î
À̸ç
IDL Àº ¼±¾ð¸¸ ÀÖÀ»»Ó ±¸ÇöÀº ¾ø´Ù.
2)
ORB (Object Request Broker)ORB
´Â Corba °´Ã¼ ¹ö½º(Bus)ÀÌ´Ù.
ORB ÀÇ ¸ñÀûÀº Corba °´Ã¼ÀÇ À§Ä¡ Åõ¸í¼ºÀ» º¸ÀåÇϱâ À§ÇÔÀ̸ç
ÇÁ·Î¼¼½º³», µ¿ÀÏ ÄÄÇ»Åͳ», ´Ù¸¥ ¸Ó½®°£ÀÇ ÄÚ¹Ù°´Ã¼È£ÃâÀ» ÁßÀç
ÇÔÀ¸·Î½á ÄÚ¹Ù°´Ã¼¿¡ À§Ä¡ Åõ¸í¼ºÀ» º¸ÀåÇÑ´Ù.
Áï,
ORB ´Â Ŭ¶óÀÌ¾ðÆ® °´Ã¼°¡ ¼¹ö°´Ã¼ÀÇ ¿ÀÆÛ·¹À̼Ǹ¦ È£ÃâÇÒ¶§ Ŭ¶óÀ̾ðÆ®ÀÇ È£ÃâÀ» ¹Þ¾Æ ÀÚ½ÅÀÌ °¡Áö°í ÀÖ´Â ¼¹ö°´Ã¼µéÀÇ
Á¤º¸¸¦ ÂüÁ¶ÇÏ¿© Ŭ¶óÀÌ¾ðÆ®°¡ ¿øÇÏ´Â ¼¹ö°´Ã¼¸¦ ã°í Ŭ¶óÀ̾ð
Æ®¿¡¼ º¸³»ÁØ ¼ºñ½º ¿äûÁ¤º¸¸¦ ÇØ´ç ¼¹ö°´Ã¼¿¡°Ô Àü´ÞÇÏ¿©
°´Ã¼·Î ÇÏ¿©±Ý ±× ÀÛ¾÷À» ¼öÇàÇÏ°Ô ÇÑ´Ù.
±×¸®°í ÀÛ¾÷ÀÌ ¿Ï·áµÇ¸ç
ORB ´Â ¿ªÀ¸·Î ±× °á°ú °ªÀ» ¹Þ¾Æ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô Àü´ÞÇÏ´Â ¿ªÇÒÀ» ¼öÇàÇÑ´Ù.
µû¶ó¼
Corba Ŭ¶óÀ̾ðÆ®, ¼¹ö´Â ¸ðµÎ ORB ¸¦ ÇÊ¿ä·Î ÇÏ¸ç ¼·Î´Ù¸¥ ȸ»çÁ¦Ç°ÀÇ
ORB °¡ ¼·Î »óÈ£ÀÛ¿ëÇÒ ¼ö ÀÖµµ·Ï ORB °£Ç¥ÁØ Åë½Å ÇÁ·ÎÅäÄÝÀÎ
IIOP(Internet Inter ORB Protocol) À» »ç¿ëÇÏ¿© Åë½ÅÇÑ´Ù.
3) ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò (
Interface Repository)ÀÎÅÍÆäÀ̽ºÀúÀå¼Ò´Â IDLÀÌ ÀúÀåµÇ¾î ÀÖ´Â µ¥ÀÌŸº£À̽ºÀÌ´Ù.
°¡Àå Áß¿äÇÑ ¸ñÀûÀº ÄÚ¹Ùµ¿ÀûÈ£Ãâ(
DII, Dynamic InvocationInterface)
À» °¡´ÉÇÏ°Ô ÇÏ¸ç ¼¹ö¿Í ´Ù¸¥ ¾ð¾î·Î ÀÛ¼ºµÈ Ŭ¶óÀÌ¾ðÆ®°¡ ¼ºñ½º¸¦ È£ÃâÇÒ ¼ö ÀÖµµ·Ï Á¤º¸¸¦ Á¦°øÇÏ´Â °ÍÀÌ´Ù.
4) °´Ã¼ ¾î´ðÅÍ(
Object Adapter)ÄÚ¹Ù°´Ã¼¸¦ ´ë½ÅÇÏ¿© ½ºÅÓÀ¸·ÎºÎÅÍÀÇ È£Ãâ¿äûÀ» ¹Þ¾Æ Àü´ÞÇØ
ÁÖ¸ç, ÄÚ¹Ù°´Ã¼¿¡ °´Ã¼
ID(°´Ã¼ÂüÁ¶) ¸¦ ÇÒ´çÇÑ´Ù.°´Ã¼ ¾î´ðÅÍ´Â
BOA(Basic Object Adapter) ¿Í POA(PortableObject Adapter)
°¡ ÀÖÀ¸¸ç BOA ´Â º¥´õ¸¶´Ù ¼·Î´Ù¸¥ ¹æ½ÄÀ» »ç¿ëÇÔÀ¸·Î À̽ļºÀÌ ¶³¾îÁüÀ¸·Î
JDK1.2 ¿¡¼´Â POA ¸¸À» Áö¿øÇÑ´Ù.5) ½ºÅÓ(
Stub), ½ºÄÌ·¹Åæ(Skeleton)Corba
ÀÇ Á¤ÀûÈ£ÃâÀ» À§ÇØ »ç¿ëµÇ¸ç IDL ÄÄÆÄÀÏ·¯·ÎºÎÅÍ ÇØ´ç±¸Çö¾ð¾î·Î »ý¼ºµÈ´Ù.
6) µ¿Àû È£Ãâ ÀÎÅÍÆäÀ̽º (
DII, Dynamic Invocation Interface)½ºÅÓ, ½ºÄÌ·¹ÅæÀ» ÀÌ¿ëÇÑ Á¤ÀûÈ£ÃâÀÌ¾Æ´Ñ ·±Å¸Àӽà »õ·ÎÀÌ »ý¼ºµÇ
µÈ ÄÚ¹Ù°´Ã¼¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡¼ È£ÃâÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
7) µ¿Àû ½ºÄÌ·¹Åæ ÀÎÅÍÆäÀ̽º (
DSI, Dynamic Skeleton Interface)½ºÅÓ, ½ºÄÌ·¹ÅæÀÌ ¾ø´Â ÄÚ¹Ù°´Ã¼¿¡ ´ëÇÑ È£Ãâ ¿äûÀ» ó¸®Çϴµ¥
»ç¿ëµÈ´Ù.
8) ÄÚ¹Ù °´Ã¼ ÂüÁ¶
-
Corba °´Ã¼ ÂüÁ¶´Â ºÐ»êȯ°æ¿¡¼ Corba °´Ã¼¸¦ ã¾Æ³»±â À§ÇѰ´Ã¼ ½Äº°ÀÚ(
ID) ÀÌ´Ù.- Ŭ¶óÀÌ¾ðÆ®´Â ÄÚ¹Ù °´Ã¼ÂüÁ¶¸¦ ¾ò¾î¾ß¸¸ ÄÚ¹Ù °´Ã¼¸¦ È£ÃâÇÒ
¼ö ÀÖ´Ù.
- ÄÚ¹Ù °´Ã¼ÂüÁ¶´Â ÄÚ¹Ù ³×ÀÌ¹Ö ¼ºñ½º¸¦ »ç¿ëÇÏ¿© °´Ã¼À̸§
(¹®ÀÚ¿)À¸·Î ¾òÀ» ¼ö ÀÖ´Ù.
- ÀÌ¹Ì ¾ò¾îÁø °´Ã¼ ÂüÁ¶·Î ÄÚ¹Ù °´Ã¼¸¦ È£ÃâÇÏ¿© ´Ù¸¥ ÄÚ¹Ù °´Ã¼
ÂüÁ¶¸¦ ¾òÀ» ¼ö µµ ÀÖ´Ù.
- ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò
API ¸¦ »ç¿ëÇÏ¿© °´Ã¼ ÂüÁ¶¸¦ ¾òÀ» ¼ö ÀÖ´Ù.9) IIOP (Internet Inter ORB Protocol)
ÄÚ¹Ù¿¡¼ Åë½ÅÀ» À§ÇØ »ç¿ëÇÏ´Â GIOP ¸¦ TCP/IP »ó¿¡¼ ±¸ÇöÇÑ °ÍÀÓ
10)
Corba Service°¢°¢ÀÇ Corba ±¸Çö º¥´õ¿¡¼ Á¦°øÇØ¾ß ÇÏ´Â ½Ã½ºÅÛ Â÷¿øÀÇ ¼ºñ½º
ÀÌ¸ç ´ÙÀ½°ú °°Àº 15°³ÀÇ Ç¥ÁØ ¼ºñ½º°¡ ÀÖ´Ù.
- ³×À̹Ö(
Naming) ¼ºñ½º
°¡Àå±âº»ÀûÀ̸鼵µ °¡Àå Áß¿äÇÑ ¼ºñ½ºÀÌ´Ù.
ÄÚ¹Ù°´Ã¼ À̸§À» ÅëÇØ °´Ã¼ÂüÁ¶¸¦ ¾ò±âÀ§ÇÑ ¼ºñ½ºÀÌ´Ù.
- »ý¸íÁÖ±â (
Life Cycle) ¼ºñ½º°´Ã¼ÀÇ »ý¼º, ¼Ò¸ê, À̵¿, º¹»ç µîÀÇ Á¶ÀÛ±â´ÉÀ» Á¦°øÇÑ´Ù.
- ¿µ¼Ó¼º (
Persistence) ¼ºñ½º
ODBMS, RDBMS, File System µî¿¡ °´Ã¼¸¦ ÀúÀåÇϱâ À§ÇÑ
¸ÞÄ¿´ÏÁòÀ» Á¦°øÇÑ´Ù.
- ¿ÜºÎÈ (
Externalization) ¼ºñ½º½ºÆ®¸² ¹æ½ÄÀ» »ç¿ëÇÏ¿© °´Ã¼ÀÇ ³»¿ëÀ» ÀúÀå, Àü¼ÛÇϰųª °Ë»ö,
Àü¼Û¹Þ¾Æ ä¿ö³ÖÀ» ¼ö ÀÖ´Â ¼ºñ½º ÀÌ´Ù.
- À̺¥Æ® (
Event) ¼ºñ½ºÆ¯Á¤ °´Ã¼¿¡°Ô À̺¥Æ®¸¦ Àü´ÞÇÏ¿© »õ·Î¿î ¼ºñ½º¸¦ ¿ä±¸Çϰųª
¼öÇà½Ã۱â À§ÇÑ ¼ºñ½º¸¦ Á¦°øÇÑ´Ù.
-
ÇÁ·ÎÆÛƼ(Peoperty) ¼ºñ½ºIDLÀ» ÅëÇØ Á¤ÀÇµÈ Á¤ÀûÀÎ ¼Ó¼ºµé¿¡ µ¿ÀûÀ¸·Î Ãß°¡ÀûÀÎ ¼Ó¼ºÀ»
Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
Áï, ÇÁ·Î±×·¥ ¼öÇàÁß¿¡ »õ·Î¿î µ¥ÀÌŸ¸â¹ö¸¦ Ŭ·¡½º¿¡ Ãß°¡ÇÏ
°Ô ÇØ ÁÖ´Â ±â´ÉÀÌ´Ù.
- °ü°è (
Relationship) ¼ºñ½º°´Ã¼°£ÀÇ µ¿ÀûÀÎ ¸µÅ©ÀÇ »ý¼º ¹× ÀÌµé ¸µÅ©ÀÇ °Ë»öÀ» À§ÇÑ
¼ºñ½ºÀÌ´Ù.
- ÁúÀÇ (
Query) ¼ºñ½ºÄÚ¹Ù°´Ã¼¿¡ ´ëÇÑ ÁúÀÇ ¼ºñ½º·Î½á
SQL À» Æ÷ÇÔÇϸç SQL3 ¹×OQL(Object Query Language)¿¡ ±â¹ÝÇÑ´Ù.
- °´Ã¼ Æ®·£Àè¼Ç
¼ºñ½º(OTS, Object Transaction Service)°¡Àå ÁÖ¸ñ¹Þ´Â ¼ºñ½º ÁßÀÇ ÇϳªÀÌ¸ç ±âÁ¸ÀÇ ¹Ìµé¿þ¾î·Î ¸¹ÀÌ
¾²ÀÌ´Â
TP-Monitor(Åνõµ, ¿£½Ã³ª µî) ¸¦ ´ëüÇÏ´Â Â÷¼¼´ë¹Ìµé¿þ¾î·Î½á
Corba °¡ ÁÖ¸ñ¹ÞÀ» ¼ö ÀÖ´Â Áß¿äÇÑ ¼ºñ½ºÀÌ´Ù.OTS ´Â Flat Transaction, Nested Transaction µÑ´Ù¸¦ Áö¿øÇϸç
2-
phase commit ¹æ½ÄÀÌ´Ù.- µ¿½Ã¼º Á¦¾î (
Concurrency Control) ¼ºñ½º
Æ®·£Àè¼Ç, ¾²·¹µå°£ÀÇ
lock À» °ü¸®ÇÏ´Â lock °ü¸®ÀÚÀÌ´Ù.- °´Ã¼ ½Ã°£ (
Object Time) ¼ºñ½º½Ã°£ µ¿±âÈ ¹× ½Ã°£±â¹ÝÀÇ À̺¥Æ®¸¦ Á¤ÀÇ, »ý¼ºÇϴ°ÍÀ» °¡´É
ÇÏ°Ô ÇÑ´Ù.
- ¶óÀ̼¾½º (
Licensing) ¼ºñ½º¾ÆÁÖ Àç¹ÌÀÖ´Â ¼ºñ½º·Î¼ °´Ã¼ »ç¿ë¿¡ °üÇÑ ºñ¿ëÀ» °è»êÇϱâ
À§ÇÑ ¼ºñ½º¸¦ Á¦°øÇÑ´Ù.
ÃøÁ¤·®Àº ¼¼¼Ç´ÜÀ§, ³ëµå´ÜÀ§, ÀνºÅϽº ´ÜÀ§, »çÀÌÆ® ´ÜÀ§ µî
ÀÌ µÉ ¼ö ÀÖ´Ù.
- °´Ã¼ º¸¾È (
Object Security) ¼ºñ½ºÀÎÁõ, Á¢±ÙÁ¦¾î¸®½ºÆ®(
ACL, Access Control List), ½Å·Úµµ µîÀ»À§ÇÑ ¼ºñ½º¸¦ Á¦°øÇÑ´Ù.
ÀÌ ¼ºñ½º´Â ¹ÌÁ¤ºÎ°¡ Á¦Á¤ÇÑ º¸¾ÈÇ¥ÁØ µî±ÞÀÎ
C2 Â÷¿øÀǺ¸¾È ±â´ÉÀ» Á¦°øÇÑ´Ù.
Áï,
ID, ¾ÏÈ£ ÀÎÁ¤ÀýÂ÷¸¦ °ÅÄ¡µµ·Ï ÇÏ´Â ¹æ¹ýÀÌ´Ù.- Æ®·¹À̵ù(
Trading) ¼ºñ½ºCorba Æ®·¹À̵ù ¼ºñ½º´Â 114 ÀüÈ ¾È³»¿Í °°Àº ¿ªÇÒÀ» ÇÑ´Ù.
Ŭ¶óÀÌ¾ðÆ®´Â ÇÁ·Î±×·¥ ¼öÇà Áß Æ®·¹À̵ù ¼ºñ½º¸¦ ÅëÇØ ¿øÇÏ
´Â ¼ºñ½º¸¦ Á¦°øÇÏ´Â ¼¹ö°´Ã¼¸¦ ã°í µ¿ÀûÈ£Ãâ ±â´ÉÀ» »ç¿ë
ÇÏ¿© ¿øÇÏ´Â ¼ºñ½º¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.
- Ä÷º¼Ç (
Collections) ¼ºñ½º°´Ã¼µéÀÇ ÁýÇÕÀ» »ý¼ºÇϰí Á¶ÀÛÇϵµ·Ï ÇÏ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù.
¡¡
11)
Corba FacilitiesCorba Facilities
´Â Corba Serice ¿Í´Â´Þ¸® »óÀ§·¹º§ÀÇ ¼ºñ½ºÀÌ¸çÆ¯Á¤ µµ¸ÞÀÎ(±ÝÀ¶, Á¦Á¤...)¿¡¼ °øÅëÀûÀ¸·Î »ç¿ë°¡´ÉÇÑ ¼ºñ½º
µéÀÌ´Ù.
¿©±â¿¡´Â ´ÙÀ½ µÎ°¡Áö ¿Ü¿¡ ¿©·¯°¡Áö
Facilities µéÀÌ Á¸ÀçÇÑ´Ù.-
Mobile Agent
°´Ã¼ÀÇ µ¿ÀûÀÎ À̵¿±â´É°ú À¯¿ë¼ºÀ» Áö¿øÇϱâ À§ÇÑ Åä´ë¸¦ Á¦°ø
ÇÑ´Ù.
-
Data Interchange
°´Ã¼µé »çÀÌÀÇ µ¥ÀÌŸ Àü¼Û°ú ÀÀ¿ëÇÁ·Î±×·¥ ¼öÁØÀÇ »óȣȣȯÀ»
À§ÇÑ ±â´ÉÀÌ´Ù.
12)
Corba 3.0 ¿¡ Æ÷Ç﵃ ±â´Éµé- ºñµ¿±â Åë½ÅÀ» À§ÇÑ ¸Þ¼¼Â¡ ¼ºñ½º
-
IIOP firewall proxy- CORBA / DCOM
¿¬µ¿-
EJB ¿¡ ±â¹ÝÇÑ ºñÁî´Ï½º °´Ã¼ °ñ°Ý±¸Á¶- µµ¸ÞÀÎ ¼ºñ½º °ñ°Ý±¸Á¶ : Á¦Á¶, ÀüÀÚ»ó°Å·¡, ¼ö¼Û, Åë½Å µî
¡¡
Áö±Ý±îÁö
Corba¿¡¼ ¸¹ÀÌ ¾²ÀÌ´Â ¿ë¾î¸¦ Áß½ÉÀ¸·Î »ìÆìº¸¾Ò´Ù.Corba ´Â ¿©·¯°¡Áö ¼ºñ½º¸¦ Á¦°øÇÑ´Ù.
³Ê¹« ¸¹´Ù º¸´Ï ³×Àּ̹ºñ½º, À̺¥Æ® ¼ºñ½º, Æ®·£Á§¼Ç ¼ºñ½º µî
À» Á¦¿ÜÇÑ ³ª¸ÓÁö °ÍµéÀº ±¸°æÇϱâ Á¶Â÷ Èûµç Áö°æÀÌ´Ù.
Áï, ½ÇÁ¦
Corba ±¸Çö Á¦Ç°À» ³»³õÀº º¥´õµéÀÌ ÀÌ ¸¹Àº ±â´ÉÀ» ¸ðµÎ±¸ÇöÇÏ´Â °ÍÀÌ Èûµç°Í °°´Ù.
¿¹·Î½á ¸¹ÀÌ ¾²ÀÌ´Â
Inprise ÀÇ Visibroker for Java ¿¡´Â ORB ¿Í ÇÔ²²³×Àּ̹ºñ½º, À̺¥Æ® ¼ºñ½º ¸¸À» Á¦°øÇÑ´Ù.
Æ®·£Àè¼Ç ¼ºñ½º¸¦ À§Çؼ´Â
ITS ¶ó´Â Á¦Ç°À» Ãß°¡·Î »ç¿ëÇØ¾ß ÇÑ´Ù.±×¿ÜÀÇ ¼ºñ½ºµéÀº Çà¹æºÒ¸íÀΰ¡?
±×°Ç ±×·¸°í...
ÀÚ¹ÙÇÁ·Î±×·¡¸ÓµéÀº
Corba ¸¦ ¿©·¯¹æ¹ýÀ¸·Î ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.IDL À» ¸ð¸£´Â °³¹ßÀÚ¶óµµ Caffeine on Visibroker ¸¦ ÀÌ¿ëÇϸé ÀÚ¹Ù
ÀÎÅÍÆäÀ̽º·Î ½ÃÀÛÇØ¼
IDL, ½ºÅÓ, ½ºÄÌ·¹Åæ µîÀ» ¾òÀ» ¼ö ÀÖ´Ù.±×¸®°í
JDK1.2 Core ³»¿¡´Â ±âº»Àû ¼ºñ½º¿Í ORB °¡ Æ÷ÇԵǾîÀÖ´Ù.
¶ÇÇÑ, ÀÌÈÄ¿¡ ¼³¸íÇÒ
RMI_OVER_IIOP ¸¦ ÀÌ¿ëÇϸé RMI ¸¦ ÀÌ¿ëÇØ¼ÄÚ¹Ù¿Í Åë½ÅÀÌ °¡´ÉÇÏ´Ù.
ÄÚ¹Ù¿Í ÀÚ¹Ù´Â ±× À¯¸íÇÑ "
ObjectWeb" À̶ó´Â °³³äÀ» ź»ý½ÃŲÀ庻ÀδÙ.
ÀÚ¹Ù´Â »ê¾÷°è Ç¥ÁØÀÎ ÄÚ¹Ù¸¦ ÀÌ¿ëÇØ ¿µ¿ªÀ» È®´ë ÇÒ ¼ö ÀÖ°í
ÄÚ¹Ù ¶ÇÇÑ ÀÚ¹Ù¶ó´Â ¾ð¾î¿¡ ÈûÀÔ¾î ¸¹Àº °ÍµéÀ» ¾ò°ÔµÉ °ÍÀÌ´Ù.
´ÙÀ½ Àå¿¡¼´Â Àå¾ÈÀÇ ÈÀç(?)°¡ µÇ°í ÀÖ´Â
EJB ¿¡ ´ëÇØ¼ ¾Ë¾Æº¸ÀÚ¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
¡¡
5. EJB (Enterprise JavaBeans)
Sun ÀÇ Enterprise JavaBeans ½ºÆÑ¿¡ µû¸£¸é "EJB´Â ºÐ»êȯ°æÇÏÀÇ
ÄÄÆ÷³ÍÆ® ¾ÆÅ°ÅØÃ³"¶ó°í Á¤ÀǵǾî ÀÖ´Ù.
Áï,
EJB ´Â ƯÁ¤ User Interface ¸¦ °¡ÁöÁö ¾Ê´Â ¼¹öÃø ÄÄÆ÷³ÍÆ®¸ðµ¨À̸ç
Java ÀÇ ¿©·¯°¡Áö Enterprise API(JNDI, RMI, JAVA IDL,SERVLET & JSP, JMS, JTS, JTA, JDBC
µî)µé°ú ¾î¿ì·¯Á® ¶ÇÇϳªÀǿϺ®ÇÑ ºÐ»êȯ°æÀÌ ¸¸µé¾î Áø´Ù.
Sun ÀÇ ¿£ÅÍÇÁ¶óÀÌÁî ½ÃÀåÀ» À§ÇÑ ³ë·ÂÀÌ °á½ÇÀ» °ÅµÎ°í ÀÖ´Â °ÍÀÌ
´Ù.
EJB ÀÇ Æ¯Â¡Àº ´ÙÀ½°ú °°´Ù.
1)
Enterprise Bean's instances µéÀº Container ¿¡ ÀÇÇØ RunTime¿¡ »ý¼ºµÇ°í °ü¸®µÈ´Ù.
2)
Enterprise Bean ´Â environment properties¸¦ ¼öÁ¤ÇÔÀ¸·Î½ádeployment time ¿¡ ÃÖÀûÈ µÉ¼ö ÀÖ´Ù.
3) Æ®·£Àè¼Ç¸ðµå, º¸¾È¼Ó¼ºµî ´Ù¾çÇÑ Metadata ´Â EnterPrise
Beans Ŭ·¡½º ·ÎºÎÅÍ ¿ÜºÎ¿¡ ºÐ¸®Çؼ À§Ä¡ÇÒ¼ö ÀÖ´Ù.
À̰ÍÀº design and deployment time ¿¡ Container Tools ¸¦
ÀÌ¿ëÇØ ´Ù·ç¾î Áú¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù.
4) Client Access ´Â Containe
r ȤÀº EJB Server(OS, DBMS µî)¿¡ÀÇÇØ Á¶Á¤µÉ¼ö ÀÖ´Ù.
5)
Enterprise Bean ÀÌ EJB specification ¿¡ Á¤ÀÇµÈ standardcontainer services ¸¸ »ç¿ëÇÑ´Ù¸é ¾î¶² Container ¿¡¼µµ ÀçÄÄÆÄ
ÀÏ ¾øÀÌ »ç¿ë°¡´ÉÇÏ´Ù.
6)
Enterprise Bean ´Â ÀçÄÄÆÄÀÏÀ̳ª ¼Ò½ºÄÚµå º¯°æ¾øÀÌ ¾ÖÇø®ÄÉÀ̼DZ¸¼º¿¡ Æ÷ÇԵɼö ÀÖ´Ù.
EJB °¡ µ¹¾Æ°¡±â À§Çؼ´Â EJB ¼¹ö¿Í EJB ÄÁÅ×À̳ʰ¡ ÇÊ¿äÇÏ´Ù.
´ëÇ¥ÀûÀÎ
EJB ¼¹ö´Â DBMS°¡ µÉ ¼öÀÖÀ¸¸ç OS ¹× File System ÀÌ µÉ¼ö µµ ÀÖ´Ù.
ÀÌµé ¼¹ö´Â
EJB ÀÇ »óÅÂÀúÀå¼Ò ¿ªÇÒÀ» ÇÑ´Ù.
EJB ÄÁÅ×À̳ʴ EJB °¡ µ¿ÀÛÇϴ ȯ°æÀ» Á¦°øÇÑ´Ù.
³î¶ø°Ôµµ ÇöÀç ³ª¿ÍÀÖ´Â
EJB ¼¹ö´Â 100¿©°¡Áö°¡ ³Ñ´Â´Ù.BEA Weblogic Server, IBM À¥½ºÇÇ¾î µî°ú°°Àº µ¢Ä¡Å« ÄÁÅ×À̳ʰ¡
ÀÖ´Â ¹Ý¸é
Voyager Server, OrbixHome, PowerTier ¿Í °°Àº ºÒ°ú¸î ¸Þ°¡¿¡ ´ÞÇÏ´Â
thin ¼¹öµµ Á¸ÀçÇÑ´Ù.±×·³
EJB ¿¡ ´ëÇØ Á»´õ ÀÚ¼¼È÷ ¾Ë¾Æº¸ÀÚÇϳªÀÇ
Enterprise JavaBeans ´Â 2°³ÀÇ ÀÎÅÍÆäÀ̽º¿Í 1°³ÀÇ Å¬·¡½º·Î ÀÌ·ç¾î Áø´Ù.
1) Ȩ ÀÎÅÍÆäÀ̽º
javax.ejb.EJBHome ÀÎÅÍÆäÀ̽º¸¦ »ó¼ÓÇϸç Ŭ¶óÀÌ¾ðÆ®´Â JNDI
(Java Naming and Directory Interface)
¸¦ ÀÌ¿ëÇÏ¿© ȨÀÎÅÍÆäÀ̽º¸¦¾òÀ» ¼ö ÀÖ´Ù.
Ŭ¶óÀÌ¾ðÆ®´Â Ç×»ó EJB ÀÇ ¸®¸ðÆ® °´Ã¼¸¦ ¾ò±âÀü¿¡ Ȩ ÀÎÅÍÆäÀ̽º¸¦ ¾ò¾î
¾ß¸¸ ¸®¸ðÆ® ÀÎÅÍÆäÀ̽º¸¦ ¾òÀ» ¼ö ÀÖ´Ù.
2) ¸®¸ðÆ® ÀÎÅÍÆäÀ̽º
javax.ejb.EJBObject ÀÎÅÍÆäÀ̽º¸¦ »ó¼ÓÇϸç Ŭ¶óÀÌ¾ðÆ®´Â È¨
ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ ¸®¸ðÆ® ÀÎÅÍÆäÀ̽º¸¦ ¾òÀ» ¼ö ÀÖ´Ù.
¸®¸ðÆ® ÀÎÅÍÆäÀ̽º´Â
Enterprise Bean Ŭ·¡½º¸¦ À§ÇÑ Proxy ÀÌ´Ù.Áï, Ŭ¶óÀÌ¾ðÆ®´Â ½ÇÁ¦
Enterprise Bean Ŭ·¡½º³»ÀÇ ¸Þ¼Òµå¸¦ Á÷Á¢È£Ãâ ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ¸®¸ðÆ® ÀÎÅÍÆäÀ̽º ³»ÀÇ ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù
3)
Enterprise Bean Ŭ·¡½º¿£Æ¼Æ¼ºóÀÏ °æ¿ì´Â
javax.ejb.EntityBean ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϸ缼¼ÇºóÀÏ °æ¿ì´Â
javax.ejb.SessionBean ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϸçÃß°¡ÀûÀ¸·Î SessionSynchronization ¶ÇÇÑ ±¸Çö°¡´ÉÇÏ´Ù
ÀÌ Å¬·¡½º´Â ½ÇÁ¦ ¸ðµç ºñÁî´Ï½º ·ÎÁ÷ÀÌ ±¸ÇöµÇ¾î Àִ Ŭ·¡½ºÀÌ´Ù.
EJB ´Â Å©°Ô Session Bean°ú Entity BeanºóÀ¸·Î ³ª´¶´Ù.
Session Bean Àº ¶ÇÇÑ Statefull Session Bean °ú Stateless Session
Bean
À¸·Î ³ª´µ¸ç Entity Bean Àº Bean Managed Entity Bean ¿ÍContainer Managed Entity Bean À¸·Î ³ª´µ¾î Áø´Ù.
1)
Session BeanÀϹÝÀûÀ¸·Î ¸»ÇÏ´Â ÄÄÆ÷³ÍÆ®(DCOM µî)°¡ Session Bean ÀÌ´Ù.
Áï, ºñÁî´Ï½º ·ÎÁ÷À» Æ÷ÇÔÇϰí ÀÖ´Â ºóÀÌ´Ù.
Session Bean Àº ¼¹ö»ó¿¡¼ ½ÇÇàÇÏ´Â ºñÁî´Ï½º ·ÎÁ÷À» ´Ù·ç´Â
ºñÁö¼Ó¼º °´Ã¼ÀÌ¸ç ¸ÖÆ¼ Ŭ¶óÀÌ¾ðÆ®»çÀÌ¿¡¼ °øÀ¯µÇÁö ¾Ê´Â °´Ã¼
ÀÌ´Ù.
Ŭ¶óÀÌ¾ðÆ®´Â
JNDI ¸¦ ÀÌ¿ëÇØ Home Interface ¸¦ ã°í HomeÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ Remote °´Ã¼¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ ȹµæÇÑ´Ù.
±×·±´ÙÀ½ ÀÌ ·¹ÆÛ·±½º¸¦ ÅëÇÑ ¸ðµç ¸Þ¼Òµå È£ÃâÀº ½ÇÁ¦ ·ÎÁ÷ÀÌ
±¸ÇöµÇ¾î ÀÖ´Â
Enterprise Beans °´Ã¼³»ÀÇ ´ëÀÀµÇ´Â ¸Þ¼Òµå È£Ãâ·Î Àü´ÞµÈ´Ù.
ÀÌ·¯ÇÑ °úÁ¤Àº
entity Bean µµ ¸¶Âù°¡Áö´Ù.
-
Stateless Session BeanŬ¶óÀ̾ðÆ®ÀÇ ¿äûÀÌ ÀÖÀ»¶§ ½ÇÇàÀÌ µÈ´Ù.
°ÅÀÇ ´ëºÎºÐ »ç¿ëÀÚ ¿äûÀ» ó¸®ÇÑÈÄ ¼Ò¸êµÈ´Ù.
À̸§¿¡¼¾Ë ¼ö ÀÖµíÀÌ ¼¼¼ÇºóÀº 1ȸ¿ëÀÌ´Ù.
¾î¶²ÇÑ »óÅÂÁ¤º¸µµ ÀúÀåµÇÁö ¾Ê´Â ºóÀÌ´Ù.
´ëÇ¥ÀûÀÎ »ç¿ë¿¹´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ¹Þ¾Æ
DBMS ¿¡ Äõ¸®¸¦º¸³½ÈÄ °á°ú¸¦ Ŭ¶óÀÌ¾ðÆ®·Î ¸®ÅÏÇѴٰųª ´Ù¸¥
Session BeanÀ̳ª Entity Bean À» È£ÃâÇϴµ¥ »ç¿ëµÇ¾î Áú ¼ö ÀÖ´Ù.
-
Statefull Session BeanŬ¶óÀ̾ðÆ®ÀÇ ¿äûÀÌ ÀÖÀ»¶§ ½ÇÇàµÇ°í Socket ÀÚ¿øÀ̳ª JDBC
Connection
ÀÚ¿øµîÀÇ »óÅÂÁ¤º¸¸¦ ÆÄÀϽýºÅÛÀ̳ª DBMS ¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Ù.
ÀÌ·±ÇÑ »óÅÂÁ¤º¸´Â Á÷·ÄÈ °¡´ÉÇÑ µ¥ÀÌÅÍ ¸â¹öÀÌ´Ù.
2)
Entity BeanEntity Bean
Àº IBM ¿¡¼ Á¦¾ÈÇÑ °ÍÀ¸·Î ¾ÆÁÖ Àç¹ÌÀÖ´Â ³ðÀÌ´Ù.
ÄÁÅ×À̳ʳ»ÀÇ Entity Bean °´Ã¼µéÀº DBMS ȤÀº File System µî¿¡
ÀúÀåµÇ¾î Áö¼Ó¼ºÀ» °¡Áø´Ù.
ÇϳªÀÇ
Entity Bean Ŭ·¡½º´Â µ¥ÀÌŸº£À̽º³»ÀÇ ÇϳªÀÇ Å×À̺í,ȤÀº ÆÄÀÏ ½Ã½ºÅÛ ³»ÀÇ ÇϳªÀÇ µð·ºÅ丮¿¡ ´ëÀÀµÇ¸ç
Entity Bean
Ŭ·¡½º ³»ÀÇ µ¥ÀÌŸ ¸â¹öµéÀº Å×ÀÌºí³»ÀÇ ÇϳªÀÇ Çʵ忡 ÀúÀåµÈ´Ù.
µû¶ó¼ ÇϳªÀÇ
Entity Bean °´Ã¼´Â DB Å×ÀÌºí³»ÀÇ ÇϳªÀÇ·¹Äڵ带 Â÷ÁöÇÏ°Ô µÈ´Ù.
Áï, 10°³ÀÇ °´Ã¼°¡
create µÇ¾ú´Ù¸é 10°³ÀÇ ·¹Äڵ尡 ¸¸µé¾îÁ³´Ù´Â °ÍÀÌ´Ù.
ÀÌ·¸°Ô »ý¼ºµÈ °´Ã¼´Â ÀÌÈÄ¿¡
ejbFind~() µîÀÇ ¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ¼´Ù½Ã ãÀ» ¼ö ÀÖ´Ù.
(¼¼¼ÇºóÀº ºñ Áö¼Ó¼ºÀ̹ǷÎ
find~ ¸Þ¼Òµå°¡ ¾ø¾î¾ß¸¸ ÇÑ´Ù)Bean Managed entity Bean ÀÎ °æ¿ì´Â °³¹ßÀÚ°¡ Á÷Á¢Enterprise Bean ³»¿¡
¼
JDBC¸¦ »ç¿ëÇÏ¿© DB ¿¡ ÀúÀåÇϰí ÀоîµéÀδÙ.Container Managed Bean Àΰæ¿ì´Â µ¥ÀÌŸ ¸â¹ö¸¦ DBMS ¿¡ ÀúÀå
ÇÏ°í ²¨³»¿À´Â ÀÏ·ÃÀ» ÀϵéÀ» ÄÁÅ×À̳ʰ¡ ¾Ë¾Æ¼ ó¸®ÇÑ´Ù.
Áï, Àû´çÈ÷
JDBC³ª JSQL Code ¸¦ »ðÀÔÇØ ÁØ´Ù.ÇÁ·Î±×·¡¸Ó´Â ´ÜÁö ºó Ŭ·¡½º°¡ ¾î¶²ÇÑ Å×ÀÌºí¿¡ ´ëÀÀÇÏ´ÂÁö ¶Ç
µ¥ÀÌŸ¸â¹ö°¡ Å×ÀÌºí ³»ÀÇ ¾î¶°ÇÑ Çʵ忡 ÀúÀåµÇ¾î¾ß ÇÏ´ÂÁö¸¸À»
ÁöÁ¤ÇÏ¸é ³¡ÀÌ´Ù.
Á÷Á¢ »ç¿ëÇØº¸¸é Á¤¸» Æí¸®ÇÏ´Ù´Â °ÍÀ» ´À³¥¼ö°¡ ÀÖÀ» °ÍÀÌ´Ù.
´Ù¸¸ ÆÛÆ÷¸Õ½º´Â ¶³¾îÁö´Â ÆíÀÌ´Ù.
¸ðµç
EJB ÄÁÅ×À̳ʰ¡ Entity Bean À» Áö¿øÇÏ´Â °ÍÀº ¾Æ´Ï´Ù.±×°ÍÀº
EJB ½ºÆÑ»ó¿¡¼µµ ¸í½ÃµÇ¾úÁö¸¸ ÇöÀç±îÁö ¹öÀü(1.1) Àº¿É¼ÇÀ̸ç 1³âÈÄ¿¡ ³ª¿Ã
EJB2.0 ¿¡¼´Â ÇʼöÁ¶°ÇÀÌ µÈ´Ù°í ÇÑ´Ù.À§¿¡¼ ¼³¸íÇÑ
Voyager Server´Â Container Managed EntityBeanÀÌ Áö¿øµÇÁö¾ÊÀ¸¸ç, Oracle 8i´Â ¿£Æ¼Æ¼ºóÀ» ¾Æ¿¹ Áö¿øÇÏÁö ¾Ê°íOrbixHome¿¡¼
Container Managed Entity Bean Àº Oracle¿¡¼¸¸ °¡´ÉÇϰí, IBM À¥½ºÇǾî´Â
DB2 ¸¸À» Áö¿øÇÕ´Ï´Ù.
ÀÌÁ¦
EJBÀÇ Æ®·£Àè¼Ç 󸮿¡ ´ëÇØ¼ ¾Ë¾Æº¸ÀÚºó °³¹ßÀÚ´Â
JTS ¸¦ ÀÌ¿ëÇØ Æ®·£Àè¼ÇÀÇ ¹üÀ§¸¦ ÁöÁ¤ÇØ ÁÙ ¼ö ÀÖ°íÄÁÅ×ÀÌ³Ê º¥´õ´Â
JTA ¸¦ ÀÌ¿ëÇØ¼ ½ÇÁ¦ Æ®·£Àè¼Ç ·ÎÁ÷À» ±¸ÇöÇÑ´Ù.Enterprise JavaBeans ´Â OMG Object Transaction Service 1.1 (OTS)
À» µû¸£´Â flat transactions À» Áö¿øÇÑ´Ù.
Enterprise JavaBeans ÀÇ Æ¯Â¡Áß Çϳª°¡ ºÐ»ê Æ®·£Àè¼ÇÀ» Áö¿øÇÑ´Ù´Â °ÍÀÌ´Ù.
Áï, ¼·Î´Ù¸¥ DBMS, ¼·Î´Ù¸¥ Container ¸¦ °¡·ÎÁú·¯ Æ®·£Àè¼Ç 󸮰¡
°¡´ÉÇÏ´Ù´Â °ÍÀÌ´Ù.
¹°·Ð, ÀÌ°Ç ½ºÆå»óÀÇ ¾ê±â°í ±×·±Ã³¸®¸¦ ÇØÁÖÁö ¸øÇÏ´Â ÄÁÅ×À̳ʰ¡ ´ëºÎºÐÀÌ
´Ù.
´ÙÀ½Àº Æ®·£Àè¼ÇÀ» À§ÇÑ ¼Ó¼º°ªÀ̰í À̰͵éÀº enterprise Bean's deployment
descriptor ³»¿¡ ÁöÁ¤µÈ´Ù.
ÀÌ·± ¼Ó¼º°ªÀº ºó Àüü¿¡ Àû¿ëµÉ¼öµµ ÀÖ°í °³°³ÀÇ ¸Þ¼Òµå ´ÜÀ§·Î Àû¿ëµÉ¼öµµ
ÀÖ´Ù.
1) TX_NOT_SUPPORTED
Ŭ¶óÀ̾ðÆ®ÀÇ Æ®·£Àè¼Ç »óÅ À¯¹«¿¡ °ü°è¾øÀÌ ºóÁî ³»ºÎÀÇ Æ®·£Àè¼ÇÀº
Áö¿øµÇÁö ¾Ê´Â´Ù
¸¸¾à Ŭ¶óÀÌ¾ðÆ®°¡ Æ®·£Àè¼Ç »óÅ¿¡¼ È£ÃâÇÑ´Ù¸é ÄÁÅ×À̳ʴ ºó¿¡´ëÇÑ
¸Þ¼Òµå È£ÃâÀ» À§ÀÓÇϱâ ÀÌÀü¿¡ ÇöÀç ¾²·¹µå¿Í ÇÔ²² Æ®·£Àè¼ÇÀ» suspend
Çϰí, ºó ¸Þ¼ÒµåÀÇ ½ÇÇàÀÌ ¿Ï·áÇϸé resume ÇÑ´Ù.
Ŭ¶óÀ̾ðÆ®ÀÇ suspendµÈ transaction context ´Â enterprise Bean
object ·ÎºÎÅÍ È£ÃâµÇ´Â ´Ù¸¥ enterprise Bean object ¶Ç´Â resource
¿¡°Ô·Î Àü´ÞµÇÁö ¾Ê´Â´Ù.
2) TX_BEAN_MANAGED
ºó ³»ºÎ¿¡¼ javax.jts.UserTransaction interface ¸¦ ÀÌ¿ëÇØ Æ®·£Àè¼ÇÀ»
Á¶ÀýÇÒ ¼ö ÀÖ´Ù.
3) TX_REQUIRED
Ŭ¶óÀÌ¾ðÆ®°¡ Æ®·£Àè¼Ç ÇÏ¿¡¼ ¸Þ¼Òµå¸¦ È£ÃâÇϸé ÄÁÅ×À̳ʴ Ŭ¶óÀ̾ðÆ®ÀÇ
transaction context¿Í ÇÔ²² ºóÀÇ ¸Þ¼Òµå¸¦ È£ÃâÇϰí,
Ŭ¶óÀÌ¾ðÆ®°¡ Æ®·£Àè¼Ç »óÅ¿¡ ÀÖÁö ¾ÊÀ¸¸é ÄÁÅ×À̳ʴ ÀÚµ¿ÀûÀ¸·Î »õ·Î¿î
Æ®·£Àè¼ÇÀ» ½ÃÀÛÇÏ°í ºóÀ» È£ÃâÇÏ¸ç ¸Þ¼Òµå È£ÃâÀÌ ¿Ï·áµÇ°í °á°ú°¡ Ŭ¶óÀÌ
¾ðÆ® ¿¡ º¸³»¾îÁö±â ÀÌÀü¿¡ commit ¸¦ ½ÃµµÇÑ´Ù.
transaction context ´Â enterprise Bean object·ÎºÎÅÍ È£ÃâµÇ´Â ´Ù¸¥
enterprise Bean object ¶Ç´Â resource ¿¡°Ô·Î Àü´ÞµÈ´Ù.
4) TX_SUPPORTS
Ŭ¶óÀÌ¾ðÆ®°¡ Æ®·£Àè¼Ç »óÅ¿¡ ÀÖÁö ¾Ê´Ù¸é ºóÁî¶ÇÇÑ »õ·Î¿î Æ®·£Àè¼ÇÀÇ
½ÃÀÛ¾øÀÌ È£ÃâµÈ´Ù.
¸¸¾à Á¸ÀçÇÑ´Ù¸é transaction context ´Â enterprise Bean object·ÎºÎÅÍ
È£ÃâµÇ´Â ´Ù¸¥ enterprise Bean object ¶Ç´Â resource ¿¡°Ô·Î Àü´ÞµÈ´Ù.
5) TX_REQUIRES_NEW
ºóÀÌ È£ÃâµÉ¶§¸¶´Ù »õ·Î¿î Æ®·£Àè¼ÇÀ» ½ÃÀÛ½ÃŲ´Ù.
Ŭ¶óÀÌ¾ðÆ®°¡ Ʋ·£Àè¼Ç »óÅ¿¡¼ ºóÀ» È£ÃâÇÑ´Ù¸é »õ·Î¿î Æ®·£Àè¼ÇÀÌ ½ÃÀÛµÇ
±âÀü ¿¡ suspend µÇ°í »õ·Î¿î Æ®·£Àè¼ÇÀÌ Á¾·áµÈÈÄ resume µÈ´Ù.
New transaction context ´Â enterprise Bean object·ÎºÎÅÍ È£ÃâµÇ´Â ´Ù¸¥
enterprise Bean object ¶Ç´Â resource ¿¡°Ô·Î Àü´ÞµÈ´Ù.
¡¡
6) TX_MANDATORY
Ŭ¶óÀÌ¾ðÆ®´Â ¹Ýµå½Ã Æ®·£Àè¼Ç »óÅ¿¡¼ ºóÀ» È£ÃâÇØ¾ß ÇÑ´Ù.
¸¸¾à Ŭ¶óÀÌ¾ðÆ®°¡ Æ®·£Àè¼Ç»óŰ¡ ¾Æ´Ï¶ó¸é ÄÁÅ×À̳ʴ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô
TransactionRequired exception À» ´øÁú °ÍÀÌ´Ù.
transaction context ´Â enterprise Bean object·ÎºÎÅÍ È£ÃâµÇ´Â ´Ù¸¥
enterprise Bean object ¶Ç´Â resource ¿¡°Ô·Î Àü´ÞµÈ´Ù
¡¡
6.
±â Ÿ6.1 JAVA IDL
java IDL
ÀÌ ±âÃÊ·Î ÇϰíÀÖ´Â ³»¿ëÀº ´ÙÀ½°ú °°´Ù- IDL to Java Mapping : IDL
ÀÇ °¢¿ä¼Ò¸¦ ÀÚ¹Ù ¾ð¾î ¿ä¼Ò¿¡ ¸ÅÇÎÇÑ´Ù.- idltojava
ÄÄÆÄÀÏ·¯ : IDL Á¤ÀǷκÎÅÍ ½ºÅÓ°ú ½ºÄÌ·¹Åæ ÆÄÀÏÀ» Á¦°øÇÑ´Ù.- IIOP
¸¦ Áö¿øÇÏ´Â ÀÚ¹Ù ORB : ½ºÅÓ°ú ½ºÄÌ·¹Åæ°£ÀÇ Åë½Å°ú OAÀÇ Åõ¸íÇÑ»ý¼ºÀ» Áö¿øÇÑ´Ù. ±×¸®°í ´Ù¾çÇÑ ORB »çÀÌ
ÀÇ Åë½ÅÀ» Áö¿øÇÑ´Ù
-
ÀϽÃÀûÀÎ °´Ã¼ ³×ÀÓ ¼¹ö(Tnameserv) : °èÃþÀûÀÎ °´Ã¼ °ø°£À¸·ÎºÎÅÍ¿ø°Ý °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶¸¦ ±¸ÇÒ ¼ö
ÀÖ°Ô ÇØÁØ´Ù.
- API
ÆÐŰÁöÀÇ org.omg.CORBA¿Í org.omg.CosNaming ÆÐ¹Ð¸® :CORBA
¿Í ÀÚ¹Ù°´Ã¼¸¦ ÅëÇÕÇϱâ À§ÇØ ÇÊ¿äÇÑ ÀÚ¹Ù API Ŭ·¡½º¿ÍÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù.
Object Times
¿¡ ½Ç¸° ±ÛÀ» º¸¸é "Java + Corba = Java IDL" ¶ó´Â ¹®±¸°¡ÀÖ´Ù.
Áï java IDL Àº ¼ø¼ö ÀÚ¹Ù ¼Ö·ç¼Ç¸¸À¸·Î ÄÚ¹Ù ÇÁ·Î±×·¡¹ÖÀ» °¡´ÉÇÏ°Ô ÇØÁØ
´Ù.
´ÙÀ½±ÛÀº Object TimesÀÇ ±â»ç¸¦ ¹ßÃéÇß´Ù.
Sun
»ç¿¡¼ Java2 Ç÷§ÆûÀÌ ¹ßÇ¥µÇ¸é¼ »õ·Ó°Ô µîÀåÇÑ Æ¯Â¡ °¡¿îµ¥ Çϳª´Â Java ¾ð¾î¿Í ºÐ»ê Ç¥ÁØ ¾ÆÅ°ÅØÃÄÀÎ CORBA¿ÍÀÇ »óÈ£ ¿¬µ¿À» Áö¿øÇÏ´Â
¡°Java IDL¡±
À̶ó°í º¼ ¼ö ÀÖ´Ù. ÇÁ·Î±×·¡¸ÓµéÀÌ Æ¯Á¤ ¾ð¾î·Î °³¹ßÇÑ ¸ðµâÀÌ ¼·Î ´Ù¸¥ Ç÷§ÆûÀ̳ª ¼·Î ´Ù¸¥ ¾ð¾î·Î °³¹ßµÈ ´Ù¸¥ ¸ðµâ°ú »óÈ£ ¿¬µ¿
ÀÌ ÀÌ·ç¾îÁø´Ù¸é °³¹ßµÈ ÇÁ·Î±×·¥ÀÌ ÈξÀ ¾ÈÁ¤ÀûÀÌ°Ô µÉ °ÍÀÌ´Ù. »õ·Ó°Ô
µîÀåÇÑ Java IDLÀÌ ¹Ù·Î ÀÌ·¯ÇÑ ºÎºÐÀ» ÇØ°áÇØ ÁØ´Ù. º» ±â»ç¿¡¼´Â Java
2
Ç÷§ÆûÀÇ ÀϺκÐÀ¸·Î Á¦°øµÇ´Â Java IDL¿¡ ´ëÇÑ °³¿ä¿Í CORBA¿Í ¾î¶»°Ô ¿¬µ¿ÇÒ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇØ »ìÆìº¸°íÀÚ ÇÑ´Ù.
1) Java IDL
ÀÇ Á¤Ã¼Java IDL
Àº JDK 1.2¶ó°í ¾Ë·ÁÁø Java 2 Ç÷§ÆûÀÇ ÇÑ ºÎºÐÀÌ´Ù. ÀÌ JavaIDL
Àº IDL ½ºÆå(Specification)À» Java ÀÎÅÍÆäÀ̽º·Î ÄÄÆÄÀÏÇØ¼ Java ¾ð¾î·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥µéÀÌ CORBA¸¦ ±¸ÇöÇÑ ¸ðµç ORB¿Í ¿¬µ¿ÇÒ ¼ö
ÀÖµµ·Ï ÇÑ´Ù. Áï, Java IDLÀº IDL ÄÄÆÄÀÏ·¯¿Í ORB¸¦ Æ÷ÇÔÇÏ´Â °ÍÀ̶ó°í
»ý°¢ÇÏ¸é µÈ´Ù. Java ¾ÖÇø®ÄÉÀ̼ǰú Java ¾ÖÇø´µéÀÌ ¾î¶°ÇÑ ORB¿Íµµ
»óÈ£ ¿¬µ¿ÀÌ °¡´ÉÇϸç ORB·Î ¿¬°áµÈ ¸ðµç ½Ã½ºÅÛ°úµµ ¿¬µ¿ÀÌ °¡´ÉÇϰÔ
µÈ´Ù. µû¶ó¼, ÀÌÁ¦´Â ¾ÖÇø´µµ ORB¸¦ ÅëÇØ ±¸Çö ¾ð¾î¿¡ »ó°ü¾øÀÌ ±âÁ¸
ÀÇ Legacy ½Ã½ºÅÛ°ú »óÈ£ ¿¬µ¿ÀÌ °¡´ÉÇÏ°Ô µÈ´Ù.
2) Java ORB
Java IDL
¿¡´Â IIOP ¸¦ ÀÌ¿ëÇÑ ºÐ»ê ÄÄÇ»ÆÃÀ» À§ÇÑ Java ORB°¡ Æ÷ÇԵǾî ÀÖ°í, ´Ù¸¥ ORB¿Í Java °´Ã¼µéÀ» ¿¬µ¿½Ã۱â À§ÇÑ Stub°ú Server
Ŭ·¡½ºµéÀÌ Æ÷ÇԵǾî ÀÖ´Ù. Java ORB´Â CORBA/IIOP 2.0 ½ºÆåÀ» ±â¹ÝÀ¸
·Î ÇÑ ORBÀÌ´Ù. ±×·¯³ª, ÇöÀç ¹öÀü¿¡¼´Â ´ÜÁö COSNaming ¼ºñ½º¸¸
Áö¿øµÇ°í ÀϽÃÀû(Transient)ÀÎ CORBA °´Ã¼µé¸¸ Áö¿øÇÑ´Ù. µû¶ó¼ Java
ORB
»óÀÇ °´Ã¼µéÀº ¼¹öÀÇ ÇÁ·Î¼¼½º°¡ »ì¾Æ ÀÖÀ» µ¿¾È¿¡¸¸ °´Ã¼µéÀÌÁ¸ÀçÇÏ°Ô µÈ´Ù. Áï, ¼¹ö ÇÁ·Î¼¼½º°¡ ³¡³ª¸é °´Ã¼µéµµ ¼Ò¸êµÇ°Ô µÈ´Ù.
3) Java Name
¼¹öJava IDL
Àº °´Ã¼µéÀ» Æ®¸® µð·ºÅ丮 ±¸Á¶¿¡ ÀúÀåÇϱâ À§ÇØ transientÇÑname
¼¹ö¸¦ Á¦°øÇϰí ÀÖ´Ù. ÀÌ name ¼¹ö´Â CORBAÀÇ CommonObject Services
½ºÆå¿¡ ÀÖ´Â Naming Service ½ºÆåÀ» ±¸ÇöÇÑ °ÍÀÌ´Ù.Java IDL
¿¡¼ ÀÌ name ¼¹ö¸¦ ±¸µ¿½Ã۱â À§Çؼ´Â µµ½º âÀÇ Ä¿¸Çµå¶óÀÎ(¸í·É¾î ¶óÀÎ) »ó¿¡¼ ¡°tnameserv¡± ÇÁ·Î±×·¥À» ½ÇÇà½ÃÄÑ¾ß ÇÑ´Ù.
¿¹) c:\>tnameserv -ORBInitialPort 1234
ORBInitialPort
´ÙÀ½¿¡ »ç¿ëµÈ ¹øÈ£(1234)´Â name ¼¹ö¿Í ¿¬°áÇϱâ À§ÇÑÆ÷Æ® ¹øÈ£¿¡ ÇØ´çÇÑ´Ù. µðÆúÆ®·Î tnameserv´Â 900Æ÷Æ®¿¡¼ ½ÇÇàµÈ´Ù.
±×·¯³ª ÀϹÝÀûÀ¸·Î 1024ÀÌÇÏÀÇ Æ÷Æ® ¹øÈ£µéÀº ½Ã½ºÅÛ ¼ºñ½º ¿ëÀ¸·Î ¿ë
µµ°¡ Á¦ÇѵǾú±â ¶§¹®¿¡ 1024 ÀÌÇÏÀÇ Æ÷Æ®¹øÈ£´Â »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ
¹Ù¶÷Á÷ÇÏ´Ù.
Name
¼¹ö´Â Æ®¸® ±¸Á¶¿¡ À̸§¿¡ ±â¹ÝÀ¸·Î °´Ã¼ ·¹ÆÛ·±½ºµéÀ» ÀúÀåÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®´Â À̸§À» °¡Áö°í °´Ã¼ ·¹ÆÛ·±½º¸¦ ã´Â´Ù. Name ¼¹ö´Â
transient
ÇÑ ¼¹öÀ̱⠶§¹®¿¡, Àüü µð·ºÅ丮 ±¸Á¶´Â tnameserv°¡ ½ÇÇàÀ» ¸ØÃß¸é »ó½ÇÇÏ°Ô µÈ´Ù.
4) JavaIDL ORB
¸¦ ÀÌ¿ëÇÑ ºÐ»ê ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß °úÁ¤ÀÌÁ¦ JavaIDL ORB¸¦ ÀÌ¿ëÇÏ¿© ºÐ»ê ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ´Â °úÁ¤À»
»ìÆìº¸ÀÚ. Àüü °³¹ß °úÁ¤À» ¿ä¾àÇÏ¸é ´ÙÀ½°ú °°Àº ¼ø¼·Î ÁøÇàµÈ´Ù.
- IDL
ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÑ´Ù.-
Á¤ÀÇµÈ idl ½ºÆå¿¡ ´ëÇØ ¡°idltojava¡± ÄÄÆÄÀÏ·¯¸¦ ÀÌ¿ëÇÏ¿© ÄÄÆÄÀÏÇÑ´Ù.-
¼¹ö Ŭ·¡½º(ÇÁ·Î±×·¥)¸¦ ±¸ÇöÇÑ´Ù.-
Ŭ¶óÀÌ¾ðÆ® Å¬·¡½º(ÇÁ·Î±×·¥)¸¦ ±¸ÇöÇÑ´Ù.- Name
¼¹ö/orb¸¦ ÃʱâÈ ÇÑ´Ù.-
¼¹ö¸¦ ½ÇÇàÇÑ´Ù.-
Ŭ¶óÀÌ¾ðÆ®¸¦ ½ÇÇàÇÑ´Ù.
6.2 RMI_OVER_IIOP
RMI_OVER_IIOP
´Â RMI ÀÌ´Ù.
Â÷ÀÌÁ¡Àº java.rmi ÆÐŰÁö¿¡ ÀÖ´Â RMI´Â JRMP ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇϴµ¥
¹ÝÇØ RMI_OVER_IIOP´Â javax.rmi ÆÐŰÁö³»¿¡ Æ÷ÇԵǾî ÀÖÀ¸¸ç IIOP ÇÁ·Î
ÅäÄݻ󿡼 À籸ÇöµÇ¾ú´Ù.
RMI_OVER_IIOP
´Â Sun ÀÇ ÄÚ¹Ù¸¦ À§ÇÑ ¶Ç´Ù¸¥ ³ë·ÂÀÌ´Ù.RMI
´Â ´Ù¸¥¾ð¾î¿ÍÀÇ À̽ļºÀÌ ºÎÁ·ÇÏ´Ù¿Ö³ÄÇÏ¸é ºñÇ¥ÁØ Åë½Å ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇϱ⠶§¹®¿¡ Corba °´Ã¼¿Í Åë½ÅÇÒ
¼ö ¾ø´Ù.
RMI_OVER_IIOP
ÀÇ ¸ñÀûÀº ±âÁ¸ÀÇ RMI ¿Í µ¿ÀÏÇѹæ½ÄÀ¸·Î °£ÆíÇÑ ÇÁ·Î±×·¡¹ÖÀ» Á¦°øÇÏ¸é¼ CORBA °´Ã¼¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Ô ÇÏ´Â °ÍÀÌ´Ù.
ÇöÀç RMI_OVER_IIOP ´Â º£Å¸¹öÀü±îÁö ¸±¸®Áî µÇ ÀÖÀ¸¸ç
IIOP
¸¦ À§ÇÑ ½ºÅÓÀ» »ý¼ºÇÏ´Â »õ·Î¿î RMIC ÄÄÆÄÀÏ·¯¿Í Call By value¸¦Áö¿øÇÏ´Â »õ·Î¿î idlj ÄÄÆÄÀÏ·¯¸¦ °¡Áö°í ÀÖ´Ù.
ÀÌÁ¦ RMI_OVER_IIOPÀÇ »õ·Î¿î ¸éÀ» ¾Ë¾Æº¸ÀÚ
1)
¸¸ÀÏ ³×ÀÓ ¼ºñ½º¸¦ À§ÇØ RMI registry ¸¦ »ç¿ëÇÑ´Ù¸é CosNaming Ç÷¯±×Àΰú ÇÔ²² JNDI ¸¦ »ç¿ëÇ϶ó
-
Ŭ¶óÀÌ¾ðÆ® / ¼¹ö Äڵ忡 ´ÙÀ½°ú °°ÀÌ º¯°æÇ϶óimport javax.naming.*;
Context initialContext = new InitialContext();
-
±âÁ¸ÀÇ RMI registry ÀÇ lookup(), bind() ¸Þ¼Òµå¸¦ »ç¿ëÇÏÁö ¸¶¶óRMI_OVER_IIOP
¿¡¼´Â JNDI ÀÇ lookup()°ú bind() ¸¦ »ç¿ëÇ϶ó
Áï, ¾Æ·¡¿Í °°Àº ÄÚµå ´ë½Å¿¡...
import java.rmi.*;
Naming.rebind("MyObject", myobj);
´ÙÀ½°ú °°Àº Äڵ带 »ç¿ëÇ϶ó
import javax.naming.*;
initialNamingContext.rebind("MyObject", myobj);
-
¸¸ÀÏ Å¬¶óÀÌ¾ðÆ®°¡ ¾ÖÇø´À̶ó¸é JNDI ÀÇ CosNaming Ç÷¯±×Àο¡ this¸¦ Àü´ÞÇ϶ó
import java.util.*;
import javax.naming.*;
Hashtable env = new Hashtable();
env.put("java.naming.applet", this);
Context ic = new InitialContext(env);
2)
¸¸¾à RMI registry ¸¦ ³×ÀÓ ¼ºñ½º·Î »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é Ãʱ⠸®¸ðÆ®°´Ã¼ÀÇ ·¹ÆÛ·±½º¸¦ bootstrapping ÇϱâÀ§ÇÑ ¿©·¯°¡Áö ¹æ¹ýÀ» »ç¿ëÇÒ
¼ö ÀÖ´Ù.
¿¹¸¦ µé¾î ¼¹ö ÄÚµå´Â RMI °´Ã¼ ÂüÁ¶¸¦ ObjectOutputStreamÀ¸·Î
¾²°í Ŭ¶óÀÌ¾ðÆ® Äڵ忡 º¸³½ÈÄ ´Ù½Ã ¿ªÁ÷·ÄÈÇÏ´Â Java Serialization
À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¼¹öÃø¿¡¼´Â ½ºÅÓÀ» ¾ò±â À§ÇØ PortableRemoteObject.toStub() À»
È£ÃâÇÒ¼ö ÀÖ°í, ±×·±´ÙÀ½ weiteObject() ¸¦ ÀÌ¿ëÇØ ½ºÅÓÀ» Á÷·ÄÈ
ÇÑ´Ù.
±×·± ÄÚµå´Â ´ÙÀ½°ú °°Àº ¸ð½ÀÀÏ °ÍÀÌ´Ù.
org.omg.CORBA.ORB myORB = org.omg.CORBA.ORB.init(new String[0], null);
Wombat myWombat = new WombatImpl();
javax.rmi.CORBA.Util.write_RemoteObject(myORB.create_output_stream(),
myWombat);
// myWombat
Àº ÀÌÁ¦ myORB ¿¡ ¿¬°áµÇ¾ú´Ù//
°°Àº ORB ³»ÀÇ ´Ù¸¥ °´Ã¼¿¡ ¿¬°áÇϱâ À§Çؼ´Â// PortableRemoteObject.connect(nextWombat, myWombat);
//
¸¦ »ç¿ëÇ϶óFileOutputStream myFile = new FileOutputStream("t.tmp");
ObjectOutputStream myStream = new ObjectOutputStream(myFile);
myStream.writeObject(PortableRemoteObject.toStub(myWombat));
¡¡
Ŭ¶óÀÌ¾ðÆ® Ãø¿¡¼´Â ¿ªÁ÷·Äȸ¦ À§ÇØ readObject() ¸¦ »ç¿ëÇÑ´Ù.
FileInputStream myFile = new FileInputStream("t.tmp");
ObjectInputStream myStream = new ObjectInputStream(myFile);
Wombat myWombat = (Wombat)myStream.readObject();
org.omg.CORBA.ORB myORB = org.omg.CORBA.ORB.init(new String[0], null);
((javax.rmi.CORBA.Stub)myWombat).connect(myORB);
// myWombat
Àº ÀÌÁ¦ myORB ¿¡ ¿¬°áµÇ¾ú´Ù//
°°Àº ORB ³»ÀÇ ´Ù¸¥ °´Ã¼¿¡ ¿¬°áÇϱâ À§Çؼ´Â// PortableRemoteObject.connect(nextWombat, myWombat);
//
¸¦ »ç¿ëÇ϶ó3) CosNaming
¼¹ö¸¦ ½ÃÀÛÇϱâ À§ÇØ "tnameserv"¸¦ »ç¿ëÇ϶óµðÆúÆ® Æ÷Æ® 900¹øÀ» ¹Ù²Ù±â À§Çؼ´Â "tnameserv -ORBInitialPort 1050"
°ú °°ÀÌ »ç¿ëÇ϶ó
4)
Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö¸¦ ½ÇÇàÇϱâ ÀÌÀü¿¡ ´ÙÀ½°ú °°Àº ¿É¼ÇÀ» ÁÖ¾î¼ ½ÃÀÛÇ϶ó.
java -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
-Djava.naming.provider.url=iiop://<hostname>:900 <appl_class>
¸¸¾à Ŭ¶óÀÌ¾ðÆ®°¡ ¾ÖÇø´À̶ó¸é ´ÙÀ½°ú°°Àº applet tag ¸¦ »ç¿ëÇ϶ó
java.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
java.naming.provider.url=iiop://<hostname>:900