¼¼¹øÂ° ¸¶´ç. °´Ã¼
ÇÁ·¹ÀÓ ÇÁ·Î±×·¡¹Ö
4¸· CORBA ÇÁ·Î±×·¡¹Ö
1Àå CORBA IDL
1.1 CORBA ÀÎÅÍÆäÀ̽º¶õ?
CORBA ÀÎÅÍÆäÀ̽º´Â
¸» ±×´ë·Î CORBA Ŭ¶óÀÌ¾ðÆ®¿Í
¼¹ö ±¸Çö °´Ã¼ »çÀÌÀÇ Ã¢±¸ÀÌ´Ù. ÀÎÅÍÆäÀ̽º´Â
[±×¸²4-1]ó·³
CORBA °´Ã¼
¸ðµ¨¿¡¼ ¿ÜºÎ¿¡ ÀÚ½ÅÀÇ ¸ð½ÀÀ» º¸¿©ÁÖ´Â ¾ó±¼ ¿ªÇÒÀ» Çϸç,
¼¹ö ±¸Çö °´Ã¼¿Í Ŭ¶óÀÌ¾ðÆ®¸¦
±¸ºÐ ¢´Â °æ°è¼±ÀÌ´Ù. ¶ÇÇÑ
ÀÎÅÍÆäÀ̽º´Â Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ±¸Çö °´Ã¼°¡ ¾î¶² ¸ð½ÀÀ» Çϰí ÀÖ´ÂÁö(¾î¶²
¸Þ¼Òµå¸¦ Á¦°øÇÏ´Â Áö), ±×¸®°í
¾î¶»°Ô »óÈ£ÀÛ¿ëÀ» ÇÏ´Â Áö¿¡ ´ëÇÑ ³»¿ëÀ» Á¤ÀÇÇϰí ÀÖ´Ù.
´Ù½Ã ¸»Çϸé,
ÀÎÅÍÆäÀ̽º´Â Ŭ¶óÀÌ¾ðÆ®¿Í ±¸Çö
°´Ã¼ ½Ö¹æ°£¿¡ ¸Î¾îÁø Åë½Å ±ÔÄ¢À̶ó ÇÒ ¼ö ÀÖ´Ù.
¾Õ¿¡¼ »ìÆìº» °Íó·³ CORBA
Ç¥ÁØ¿¡¼ Á¦°øÇÏ´Â ¸ðµç ¼ºñ½º¿Í
Áö¿ø ±â´ÉµéÀº ¸ðµÎ IDL·Î
Ç¥ÇöµÈ´Ù. IDL(Interface Definition Language)Àº
ÇØ´ç °´Ã¼ÀÇ ÀÎÅÍÆäÀ̽º¿Í °ü·ÃµÈ ±â´É, Ç¥Çö
ÇüÅÂ, °ü·Ã
¼º°Ý µîÀÇ ³»¿ëÀ» ±â¼úÇϰí ÀÖ´Ù. ¾Æ¿ï·¯
CORBA ÀÎÅÍÆäÀ̽º´Â
¿ÀÆÛ·¹À̼Ç(¸Þ¼Òµå),
¼Ó¼º, ±×¸®°í
µ¥ÀÌŸ ŸÀÔÀ¸·Î Á¤ÀÇµÈ ÁýÇÕüÀ̸ç, ´Ù¸¥
ÀÎÅÍÆäÀ̽ºµé·Î ºÎÅÍ ¸ðµç ±â´ÉÀ» »ó¼Ó¹ÞÀ» ¼ö ÀÖ´Ù.
ÀÌ·± ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ¼ CORBA´Â
±¸Çö¾ð¾î¿¡ Á߸³ÀûÀ̰í Ç÷¯±×-¾Ø-Ç÷¹À̰¡
°¡´ÉÇÑ ÄÄÆ÷³ÍÆ® ¼ÒÇÁÆ®¿þ¾î ȯ°æÀ» Á¦°øÇϰí ÀÖ´Ù.
1.2 CORBA IDL
OMG IDL˼
±¸Çö °´Ã¼°¡ Á¦°øÇÏ´Â ÀÎÅÍÆäÀ̽º¸¦ ±â¼úÇϱâ À§ÇÑ ¾ð¾îÀÌ´Ù.
ÀÌ ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ¿© Ŭ¶óÀÌ¾ðÆ®´Â
±¸Çö °´Ã¼ÀÇ ¼ºñ½º¸¦ È£ÃâÇÑ´Ù. µû¶ó¼
OMG´Â CORBA
°´Ã¼ÀÇ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÒ ¶§
¹Ýµå½Ã CORBA IDL¾ð¾î¸¦
»ç¿ëÇϵµ·Ï ¿ä±¸Çϰí ÀÖÀ¸¸ç, CORBA Ç¥ÁØ¿¡
IDL·Î ÀÛ¼ºµÈ
ÀÎÅÍÆäÀ̽º¸¦ C++°ú
°°Àº ±¸Çö ¾ð¾î·Î º¯È¯Çϱâ À§ÇÑ ±ÔÄ¢À» ±â¼úÇϰí ÀÖ´Ù.
OMG IDL·Î Á¤ÀǵÈ
ÀÎÅÍÆäÀ̽º´Â ¿ÀÆÛ·¹À̼Ç, ¿ÀÆÛ·¹À̼ÇÀÇ
¸Å°³º¯¼ö, ±×¸®°í
¿¹¿Ü ó¸® ¿ä¼Ò·Î ±¸¼ºµÈ´Ù. IDLÀÇ
¹®¹ý ±¸Á¶´Â [±×¸²4-2]¿Í
°°´Ù. IDL ¹®¹ýÀ»
ÀÌ Ã¥ÀÇ ¾ÕºÎºÐ¿¡¼ »ìÆìº»C++¾ð¾îÀÇ
¹®¹ý°ú ¾ÆÁÖ À¯»çÇÏ´Ù. ¸ÕÀú
°¡Àå Å« ¹üÀ§·Î À̸§ ÄÁÅØ½ºÆ®(naming context)°¡
ÀÖ´Ù. À̸§
ÄÁÅØ½ºÆ®´Â ³»ºÎ¿¡ Á¤ÀǵǴ °ÍµéÀ» ÇϳªÀÇ À̸§ °ø°£¿¡ Á¤¸®ÇØ µÎ´Â
¿ªÇÒÀ» ÇÑ´Ù. À̸§
ÄÁÅØ½ºÆ® ³»ºÎ¿¡´Â ´Ù¾çÇÑ º¯¼ö¿Í »ó¼ö¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù.
¾Æ¿ï·¯C++¿¡¼
Ŭ·¡½º¸¦ ¼±¾ðÇÏ´Â °Íó·³ CORBA°´Ã¼¸¦
ÀÎÅÍÆäÀ̽º Á¤ÀǸ¦ ÅëÇØ ¼±¾ðÇÑ´Ù. ¾Æ¿ï·¯
ÀÎÅÍÆäÀ̽º´Â ³»ºÎ¿¡ º¹ ¼ö °³ÀÇ ¸Þ¼Òµå¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù.
±â¾ïÇÒ °ÍÀº IDLÀº
±¸Çö¾ð¾î°¡ ¾Æ´Ï¶ó Ŭ¶óÀÌ¾ðÆ®¿Í ±¸Çö °´Ã¼»çÀÌÀÇ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÏ´Â
¾ð¾î¶ó´Â »ç½ÇÀÌ´Ù. ÀÌ
¶§¹®¿¡ IDLÀº
ÀÎÅÍÆäÀ̽º Á¤ÀǾî¶ó°í ¸í¸íµÇ¾ú´Ù.
ÀÚ! Á¤¸®ÇÏ´Â
Â÷¿ø¿¡¼ ¾Õ¼ »ìÆìº» IDL ±¸Á¶¸¦
¹ÙÅÁÀ¸·Î ¿¹Á¦ IDL ÆÄÀÏÀ»
ÀÛ¼ºÇØ º¸ÀÚ. ´ÙÀ½Àº
vehicle °ú
owner¶ó´Â
ÀÎÅÍÆäÀ̽º¸¦ »ó¼Ó¹Þ¾Æ automobileÀ̶ó´Â
ÀÎÅÍÆäÀ̽º¸¦ ¼±¾ðÇÑ ¿¹ÀÌ´Ù. Àüü
À̸§ ÄÁÅØ½ºÆ®´Â MyCarsÀÌ´Ù.
MyCars³»ºÎ¿¡´Â typedef¸¦
ÅëÇØ »õ·Î¿î µ¥ÀÌŸ ÇüÀ» ¼±¾ðÇßÀ¸¸ç °ú¼Ó½Ã ¿¹¿Ü»óȲÀ» ¹ß»ý½ÃŰ´Â
overspeed ¿¹¿Ü»óȲÀ»
Á¤ÀÇÇÏ¿´´Ù. ¶ÇÇÑ
vehicle°ú
owner¶ó´Â
ÀÎÅÍÆäÀ̽ºµµ ¼±¾ðÇÏ¿´´Ù. °ü½ÉÀ»
²ô´Â ºÎºÐÀº automobile ÀÎÅÍÆäÀ̽ºÀÇ
¼±¾ðÀÌ´Ù. automobile ÀÎÅÍÆäÀ̽º´Â
vehicle°ú
owner ÀÎÅÍÆäÀ̽º¸¦
´ÙÁß»ó¼Ó ¹Þ´Â´Ù. ´Ù½Ã
¸»ÇØ, vehicle°ú
owner ÀÎÅÍÆäÀ̽º¿¡
Á¤ÀÇµÈ ¸ðµç °ÍµéÀ» ¼±¾ð¾øÀÌ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½ Àý¿¡¼ IDL
¹®¹ý¿¡ ´ëÇØ »ìÆìº¸¸é º¸´Ù Á¤È®È÷
´ÙÀ½ ¿¹Á¦¸¦ ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
module MyCars{
typedef string Indentifier;
exception overspeed(short currentspeed);
interface vehicle { }
interface owner {
attribute integer age;
attribute string name;
...
}
interface automobile : vehicle , owner {
attribute string car;
void go (in int speed) raises(overspeed);
void turn_right() raises(overspeed);
void turn_right(in int speed) raises(overspeed);
...
}
}
[ ¿¹Á¦
4-1 ] IDL ÀÛ¼º
¿¹
IDL˼ C,
C++, ½º¸ôÅå,
ÀÚ¹Ù °°Àº ±¸Çö ¾ð¾î¿¡ Á߸³ÀûÀÌ´Ù.
±×·¯³ª IDL
¹®¹ýÀº ANSI
C++ ¹× ÀÚ¹Ù ¾ð¾îÀÇ ¹®¹ý°ú ¾ÆÁÖ
À¯»çÇÏ´Ù. ½ÇÁ¦
ÀÚ¹Ù ¹®¹ýÀÌC++º¸´Ù
IDL¿¡ ´õ
À¯»çÇÏ´Ù. ÀÌ
Ã¥¿¡¼´Â ÀÚ¹Ù ¾ð¾î¿¡ ´ëÇØ ÀÚ¼¼È÷ ´Ù·çÁö ¾ÊÁö¸¸ ¿©·¯ºÐÀº ÀÌ Ã¥ÀÇ
´ÙÀ½ ÆÇ¿¡¼ ÀÚ¹Ù ¾ð¾î¸¦ »ç¿ëÇÏ¿© CORBA¸¦
´Ù·ç´Â ¹æ¹ý¿¡ ´ëÇØ ¾òÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÀÏ´Ü ÀÛ¼ºµÈ IDLÀº
IDL ÄÄÆÄÀÏ·¯¿¡
ÀÇÇØ ½ÇÁ¦ ÇÁ·Î±×·¡¸Ó°¡ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ ¾ð¾î·Î º¯È¯µÈ´Ù.
À̶§ º¯È¯ °¡´ÉÇÑ ¾ð¾î·Î´Â ÇöÀç±îÁö
C, C++, ½º¸ôÅåÀÌ
ÀÖÀ¸¸ç, ÇöÀç
Ada¿Í COBOL
, ÀÚ¹Ù º¯È¯ ±ÔÄ¢À» Á¦Á¤ÇÏ´Â
ÀÛ¾÷À» ÁøÇàÇϰí ÀÖÀ¸¸ç °ÅÀÇ ¸¶¹«¸® µÇ¾ú´Ù.
±×·¯³ª ½ÇÁ¦ ÀÚ¹Ù ¾ð¾îÀÇ ±¤¹üÀ§ÇÑ
È®»ê°ú ¾Æ¿ï·¯ ¸¹Àº Á¦Ç°µéÀÌ ÀÌ¹Ì ÀÚ¹Ù º¯È¯ ±â´ÉÀ» Á¦°øÇϰí ÀÖ´Ù.
1.3 CORBA IDL ¹®¹ý
¾Õ¼ ¾ð±ÞÇÑ °Íó·³ CORBA
IDL ¹®¹ýÀº C++°ú
¾ÆÁÖ À¯»çÇÏ´Ù. ¸¸¾à
¹Ì¸® C++À»
¾Ë°í Àְųª 1¸·¿¡¼ÀÇ
³»¿ëÀ» ÀÍÇû´Ù¸é ¼Õ½±°Ô ¹è¿ï ¼ö ÀÖÀ» °ÍÀÌ´Ù.
C++°ú µ¿ÀÏÇϰÔ
"//"¿Í
"/* .. */"
¸ðµÎ »ç¿ëÀÌ °¡´ÉÇÏ´Ù. //´Â
ÇÑ ÁÙ ÁÖ¼®À̰í /* .. */ Àº
º¹¼ö ÁÙ¿¡ ´ëÇÑ ÁÖ¼®ÀÌ´Ù.
IDLÀº [Ç¥4.1]°ú
°°Àº ¿¹¾à¾î¸¦ °¡Áö°í ÀÖ´Ù. ´ëºÎºÐ
C++¿¡¼
»ç¿ëÇÏ´Â °Í°ú µ¿ÀÏÇÏ¸ç ½ÇÁ¦ »ç¿ë¹æ¹ý°ú Àǹ̵µ µ¿ÀÏÇÏ´Ù.
¸î°¡Áö ƯÀÌÇÑ °Íµé·Î´Â ´ÙÀ½°ú
°°Àº °ÍµéÀÌ ÀÖ´Ù.
ÇØ´ç ¸Þ¼Òµå È£Ãâ ÈÄ ¹Ù·Î ±× °á°ú¸¦ ó¸®ÇÏÁö ¾Ê°í ³ªÁß¿¡ ó¸®ÇÒ ¼ö
ÀÖ´Ù.
| any default inout out switch attribute double | interface raises TRUE boolean enum long readonly | typedef case exception module sequence unsigned char | FALSE Object string short union const float | octet void context in oneway struct |
[Ç¥ 4-1 ] IDL ¿¹¾à¾î
ÀÎÅÍÆäÀ̽º¿¡¼ ¿ÀÆÛ·¹À̼Ç(¸Þ¼Òµå)¸¦
¼±¾ðÇÒ °æ¿ì ¹Ýµå½Ã ¿ÀÆÛ·¹À̼ÇÀÇ ¸Å°³º¯¼ö,
¹Ýȯ °ªÀÇ µ¥ÀÌŸ ÇüÀ» ÁöÁ¤ÇÏ¿©¾ß
ÇÑ´Ù(Âü°í·Î
¿ÀÆÛ·¹À̼ǰú ¸Þ¼Òµå´Â °°Àº ÀǹÌÀÌ´Ù. ±×·¯³ª
CORBAÀÇ
Ç¥ÁØ¿¡¼´Â ¿ÀÆÛ·¹À̼ÇÀ̶õ ¿ë¾î¸¦ »ç¿ëÇϹǷΠ¿©±â¼´Â °¡±ÞÀû ¸Þ¼Òµåº¸´Ù´Â
¿ÀÆÛ·¹À̼ÇÀÌ·± ¿ë¾î¸¦ »ç¿ëÇϱâ·Î ÇÑ´Ù). IDLÀº
±âº»ÀûÀÎ µ¥ÀÌŸ Çü (char, short, long, float),
±¸Á¶Ã¼ À¯Çü(struct,
union, enumeration), ±×¸®°í
ÅÛÇø´ À¯Çü(sequence, array, string)À»
Áö¿øÇÑ´Ù. IDLÀº
any µ¥ÀÌŸ
Çüµµ Á¦°øÇϴµ¥ ÀÌ À¯ÇüÀº ¾î¶°ÇÑ IDL µ¥ÀÌŸ
ÇüÀÌ¶óµµ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦
µé¸é, ¾î¶²
¿ÀÆÛ·¹À̼ÇÀÇ ¸Å°³º¯¼ö°¡ ¹ÞÀ» ¼ö ÀÖ´Â µ¥ÀÌŸ ÇüÀÌ ´Ù¾çÇÑ °æ¿ì any
µ¥ÀÌŸ ÇüÀ» »ç¿ëÇÑ´Ù.
ÀÌµé µ¥ÀÌŸ ÇüÀº typedef¸¦
»ç¿ëÇÏ¿© ´Ù¸¥ À̸§(alias name)À¸·Î
¹Ù²Ü ¼ö ÀÖ´Ù.
IDLÀº ¼¼°¡Áö À¯ÇüÀÇ
±¸Á¶Ã¼¸¦ Áö¿øÇÑ´Ù- ±¸Á¶Ã¼,
À¯´Ï¿Â,
³ª¿.
- ±¸Á¶Ã¼(Structure)
¿¬°ü °ü°è°¡ ±íÀº µ¥ÀÌŸµé¿¡ ´ëÇ¥µÇ´Â
À̸§À» ºÎ¿© ÇÔÀ¸·Î½á ÇØ´ç µ¥ÀÌŸµéÀ» ±×·ìÀ¸·Î ¹À» ¼ö ÀÖ´Ù
| struct date {
unsigned short month; unsigned short day; short year; }; |
- À¯´Ï¿Â(Union)
¼·Î ´Ù¸¥ µ¥ÀÌŸ Çü°ú Å©±â¸¦ °¡Áö°í
ÀÖ´Â µ¥ÀÌŸµéÀÌ ÀÖÀ» °æ¿ì °øÅëÀÇ À̸§À¸·Î ÇÊ¿äÇÑ µ¥ÀÌŸ Çü ¹×
º¯¼ö¸¦ ¼±ÅÃÇϱâ À§ÇØ »ç¿ëÇÑ´Ù. C³ª
C++¿Í ´Þ¸®
°¢ µ¥ÀÌŸ ¸â¹ö´Â case ¶óº§°ú
ÇÔ²² ¼±¾ðµÈ´Ù.
|
union token switch (long) { case 1: char cval; case 2: float fval; case 3: double dval; default: long lval; }; |
- ³ª¿(enumeration)
µ¥ÀÌŸ ¸â¹öµéÀ» ƯÁ¤ ¼ø¼·Î ³ª¿ÇÒ
¶§ »ç¿ëÇϸç, ù¹øÂ°
¸â¹ö¿¡ ƯÁ¤ ¼ýÀÚ¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é 0 °ªÀÌ
ÇÒ´çµÇ°í ³ª¿µÈ ¼ø¼´ë·Î 1¾¿
Áõ°¡ µÈ´Ù. ´ÙÀ½
¿¹¿¡¼ Monday¿¡´Â
0ÀÌ ÇÒ´çµÈ´Ù
| enum workday { Monday, Tuesday, Wednesday, Thursday, Friday }; |
IDLÀº µÎ Á¾·ùÀÇ
ÅÛÇø´ À¯ÇüÀ» Á¦°øÇÑ´Ù - sequence¿Í
string.
- ½ÃÄö½º(Sequence)
¼±ÅÃÀûÀ¸·Î ÃÖ´ë Å©±â¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Â 1Â÷¿ø ¹è¿ÀÌ´Ù ½ÃÄö½º°¡ ÃÖ´ë Å©±â¸¦ °¡Áö°í ÀÖ´Ù¸é ¹Ù¿îµå ½ÃÄö½º(bounded sequence)¶ó Çϰí, ÃÖ´ë Å©±â°¡ ¾øÀ¸¸é ¾ð¹Ù¿îµå ½ÃÄö½º(unbounded sequence)¶ó ÇÑ´Ù. ½ÃÄö½ºÀÇ ±æÀÌ´Â ÇÒ´çµÇ´Â °ª¿¡ µû¶ó µ¿ÀûÀ¸·Î º¯°æµÇ¸ç, ÃÖ´ë°ªÀ» °¡Áö°í ÀÖ´Â ½ÃÄö½º´Â ÃÖ´ë Å©±â¸¦ ³ÑÀ» ¼ö ¾øÀ¸¸ç, ½ÃÄö½º°¡ ÃëÇÒ ¼ö ÀÖ´Â À¯ÇüÀº ¾î¶² IDL À¯ÇüÀÌ¶óµµ °¡´ÉÇÏ´Ù.
typedef¸¦ »ç¿ëÇÏ¿©
µ¥ÀÌŸ Çü¿¡ »õ·Î¿î ¸íĪÀ» ºÎ¿©ÇÑ´Ù.
| ¹Ù¿îµå ½ÃÄö½º
typedef sequence<long, 64> vec64; ¾ð¹Ù¿îµå ½ÃÄö½º typedef sequence<long> vec; |
- ¹®ÀÚ¿(String)
½ÃÄö½º¿Í µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î »ç¿ëÇϳª,
½ÃÄö½º¿Í ´Ù¸¥Á¡Àº ´ÜÁö ¹®ÀÚÇü¸¸À¸·Î
ÀÌ·ç¾îÁø 1Â÷¿ø
¹è¿À̶ó´Â Á¡ÀÌ´Ù. À̰Í
¿ª½Ã ¹Ù¿îµå ¹®ÀÚ¿°ú ¾ð¹Ù¿îµå ¹®ÀÚ¿ µÎ Á¾·ù¸¦ »ç¿ëÇÑ´Ù.
|
¹Ù¿îµå ¹®ÀÚ¿
typedef string<16> name16; ¾ð¹Ù¿îµå ¹®ÀÚ¿ typedef string name; |
IDLÀº C³ª
C++¿Í ´Þ¸®
¹è¿ÀÇ Å©±â°¡ °íÁ¤µÇ¾î ÀÖ´Â ´ÙÂ÷¿ø ¹è¿ÀÌ´Ù.
±×·¯¹Ç·Î ÇÁ·Î±×·¡¸Ó´Â ¹Ýµå½Ã
¹è¿ÀÇ Å©±â¸¦ Á¤ÇØ ÁÖ¾î¾ß Çϸç typedef·Î¼
¹è¿ À̸§À» ºÎ¿©ÇÑ´Ù.
|
¹Ù¿îµå ¹®ÀÚ¿ typedef short table[64][64]; |
Çѹø ÃʱâÈµÈ °ªÀ» º¯°æÇÒ ¼ö ¾ø´Â µ¥ÀÌŸ
ÇüÀÌ´Ù. »ó¼öÇüÀº
´ÙÀ½°ú °°Àº µ¥ÀÌŸ Çü°ú ÇÔ²² ¼±¾ð µÉ ¼ö ÀÖ´Ù.
| boolean | short | char |
| string | double | unsigned long |
| float | unsigned short | long |
[Ç¥4-2]
»ó¼ö ¼±¾ð °¡´É µ¥ÀÌŸ Çü
¾Õ¼ ¼Ò°³ ÇßµíÀÌ ÀÎÅÍÆäÀ̽º´Â ±¸Çö
°´Ã¼°¡ Á¦°øÇÏ´Â ¼Ó¼º°ú ¿ÀÆÛ·¹À̼ǵ鿡 ´ëÇØ Á¤ÀÇÇÑ ¸í¼¼ÀÌ´Ù.
ÀÎÅÍÆäÀ̽º ±¸¼º ¿ä¼Òµé°ú ÀÎÅÍÆäÀ̽º
Á¤ÀǸ¦ À§ÇÑ ¸ÞÄ¿´ÏÁòÀº ´ÙÀ½°ú °°´Ù.
- ¿ÀÆÛ·¹À̼Ç(Operation,
¸Þ¼Òµå)
¿ÀÆÛ·¹À̼ÇÀº ÀÎÅÍÆäÀ̽º ³»ºÎ¿¡ ¼±¾ðµÇ¾î¾ß
ÇÑ´Ù. ÀÎÅÍÆäÀ̽º¸¦
±¸¼ºÇÏ´Â ¿ÀÆÛ·¹À̼ÇÀº ¿ÀÆÛ·¹ÀÌ¼Ç ¸Å°³º¯¼ö,
¿¹¿Üó¸®(exception),
¹Ýȯ °ªÀÇ À¯Çü,
¸Å°³º¯¼öÀÇ Àü´Þ ¹æÇâÀ¸·Î ±¸¼ºµÈ´Ù,
´ÙÀ½ ¿¹´Â getOuote¿Í
getLowHigh ¿ÀÆÛ·¹À̼ÇÀ»
º¸¿©ÁÖ°í ÀÖ´Ù. µ¥ÀÌŸ
Çü ¾Õ¿¡ ÀÖ´Â in°ú
outÀº ¸Å°³º¯¼öÀÇ
Àü´Þ ¹æÇâÀÌ´Ù.
| typedef float quote;
typedef float price; interface QuoteService { quote getQuote( in string stock); void getLowHigh(in string stock, out price low, out price high); }; |
| ¼Ó¼º | ÀÇ ¹Ì |
| in | ¸Å°³º¯¼ö°¡ Ŭ¶óÀÌ¾ðÆ®¿¡¼ ±¸Çö °´Ã¼·Î Àü´Þ |
| out | ¸Å°³º¯¼ö°¡ ±¸Çö °´Ã¼¿¡¼ Ŭ¶óÀÌ¾ðÆ®·Î Àü´Þ |
| inout | ¾ç¹æÇâ ¸ðµÎ °¡´É |
[Ç¥4-3] ¸Å°³º¯¼ö Àü´Þ ¹æÇâ ¼Ó¼º
- ¿¹¿Ü ó¸®(Exception)
¿¹¿Ü 󸮴 Ŭ¶óÀÌ¾ðÆ®°¡ ±¸Çö °´Ã¼ÀÇ
¿ÀÆÛ·¹À̼ÇÀ» È£ÃâÇÑ ÈÄ ¼ºñ½º ¿äû¿¡ ´ëÇÑ °á°ú·Î¼ Ưº°ÇÑ ¿¹¿Ü
»óȲÀÌ ¹ß»ýÇßÀ» ¶§ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô µÇµ¹·Á ÁÖ´Â µ¥ÀÌŸ ±¸Á¶ ÀÌ´Ù.
¿¹¿Ü 󸮿¡´Â »ç¿ëÀÚ°¡ Á÷Á¢
Á¤ÀÇÇÑ ¿¹¿Ü¿Í ½Ã½ºÅÛ¿¡¼ ¹Ì¸® Á¤ÀÇµÈ ¿¹¿Ü,
µÎ Á¾·ù°¡ ÀÖ´Ù.
ÁÖÀÇÇÒ Á¡Àº ¿¹¿Ü´Â ¿ÀÆÛ·¹À̼ÇÀÇ
¸Å°³º¯¼ö³ª ´Ù¸¥ µ¥ÀÌŸ ¸â¹ö ¶Ç´Â ´Ù¸¥ µ¥ÀÌŸ ÇüÀ¸·Î »ç¿ëÇØ¼´Â
¾È µÈ´Ù.
¿¹¿Ü 󸮸¦ ¼±¾ðÇϱâ À§Çؼ´Â ¾î¶² ¿ÀÆÛ·¹À̼ǿ¡ raises¶ó´Â Ű¿öµå¿Í ÇÔ²² ¿¹¿Ü ó¸® À̸§À» ¼±ÅÃÀûÀ¸·Î ºÎ¿©ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹´Â »ç¿ëÀÚ°¡ Á¤ÀÇÇÑ ¿¹¿ÜÀÌ´Ù.
| typedef float quote;
typedef float price; interface QuoteService { exception no_quote { string reason }; quote getQuote( in string stock) raises (no_quote); void getLowHigh(in string stock, out price low, out price high); }; |
½Ã½ºÅÛ¿¡¼ Á¤ÀÇ ÇÑ ¿¹¿Ü´Â ¾î¶² ¼ºñ½º
¿äû¿¡ ´ëÇÑ Ã³¸® °á°ú·Î¼ ORB°¡
³»º¸³»´Â Ç¥ÁØ ½ÇÇà ¿¡·¯ÀÌ´Ù. ´ÙÀ½Àº
½Ã½ºÅÛ Á¤ÀÇ ¿¹¿Ü ó¸®ÀÇ ¿¹ÀÌ´Ù.
|
Enum complete_status { COMPLETED_YES, COMPLETED_NO, COMPLETED_MAYBE }; ..... exception <½Ã½ºÅÛ Á¤ÀÇ ¿¹¿Ü ¸í> { unsigned long minor; completion_status completed; } |
- ÄÁÅØ½ºÆ®
±¸Çö °´Ã¼ÀÇ Æ¯Á¤ ¿ÀÆÛ·¹À̼ǿ¡ ¿µÇâÀ»
ÁÙ ¼ö Àִ Ŭ¶óÀÌ¾ðÆ® È¯°æ ¿ä¼Ò¿Í °ü·ÃµÈ ¸®½ºÆ®¸¦ ÄÁÅØ½ºÆ®¶ó ÇÑ´Ù.
´Ù¸¥ ¸»·Î´Â Ŭ¶óÀ̾ðÆ®ÀÇ Æ¯¼ºÀ»
Ç¥ÇöÇØÁÖ´Â º°ÄªÀ¸·Î ÀÌÇØÇÒ ¼ö ÀÖ´Ù. ÄÁÅØ½ºÆ®¸¦
»ç¿ëÇϱâ À§Çؼ´Â raises ¹®Àå
¹Ù·Î µÚ¿¡ context(context1, context2, ...)
ÇüÅ·Π¼±¾ðÇÏ¿© Áֱ⸸ Çϸé
µÈ´Ù. °¡´ÉÇÑ
»ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù. ¿¹¸¦
µé¸é, ´ÙÀ½
¿¹´Â Query¶ó´Â
¿ÀÆÛ·¹À̼ÇÀÇ °á°ú¸¦ BULK_TRANSFER_DEVICE
ÄÁÅØ½ºÆ® °´Ã¼¸¦ ÅëÇØ ´Ù¸¥ ÀåÄ¡·Î
¿Å±â´Â °ÍÀÌ´Ù. Âü°í·Î
À¯´Ð½ºÀÇ ±×¸² ¿î¿µ üÁ¦ÀÎ XÀ©µµ¿ì
½Ã½ºÅÛ¿¡ Àͼ÷ÇÑ »ç¶÷À̶ó¸é µð½ºÇ÷¹À̸¦ ´Ù¸¥ °÷À¸·Î µ¹¸®´Â °ÍÀ»
ÀÌÇØÇÒ °ÍÀÌ´Ù. ÀÌó·³
ÄÁÅØ½ºÆ®´Â Ŭ¶óÀ̾ðÆ®ÀÇ ³»¿ëÀ» ´Ù¸¥ °´Ã¼³ª ¼¹ö ±¸Çö °´Ã¼·Î º¯°æÇÏ´Â
±â´ÉµéÀ» Á¦°øÇÑ´Ù.
Status_t Query( in Query_t query, out DataObj_t reponse)
raises( BAD_PARAM , WRONG_SYNTAX, UNKNOWN_INPUT )
context(BULK_TRANSFER_DEVICE , WINDOWS_SYSTEM,
REP_PREFERENCE) ;
- ÀϹæÅëÇà ¿ÀÆÛ·¹À̼Ç(Oneway
Operation)
ÀϹæÅëÇàÀ̶õ Ŭ¶óÀÌ¾ðÆ®°¡ ±¸Çö °´Ã¼ÀÇ
¿ÀÆÛ·¹À̼ÇÀ» È£ÃâÇÏ°í ±× °á°ú¿¡ ´ëÇØ ´çÀå °ü½ÉÀÌ ¾øÀ½À» ¼±¾ðÇÏ´Â
°ÍÀÌ´Ù. Áï,
ÀÏ´Ü Å¬¶óÀÌ¾ðÆ®´Â È£Ã⸸Çϰí
±× °á°ú¿¡ ´ëÇØ¼´Â Ŭ¶óÀÌ¾ðÆ® ¹× ±¸Çö °´Ã¼ ¸ðµÎ ±× °á°ú °ª¿¡ ´ëÇØ¼´Â
Ã¥ÀÓÀ» ÁöÁö ¾ÊÀ½À» ³ªÅ¸³»´Â °ÍÀÌ´Ù. ÀϹæÅëÇà
¿ÀÆÛ·¹À̼ÇÀº ´Ù¸¥ ÀϹÝÀûÀÎ ¿ÀÆÛ·¹ÀÌ¼Ç ¹®À庸´Ù ¸ÕÀú ¼±¾ðµÅ¾ß ÇÑ´Ù.
|
interface alarms { oneway void notify(in string event); }; |
ÀϹÝÀûÀ¸·Î [±×¸²4-3]ó·³
Ŭ¶óÀÌ¾ðÆ®°¡ ÀÚ½ÅÀÌ º¸³½ ¼ºñ½º ¿äû¿¡ ´ëÇÑ ÀÀ´äÀ» ±â´Ù¸®´Â È£Ãâ
¹æ½ÄÀ» ºí·°Å·(blocking) È£ÃâÀ̶ó
Çϸç, ÀϹæÅëÇà
¿ÀÆÛ·¹À̼ǰ°Àº ÇüÅÂÀÇ È£ÃâÀ» ºñºí·°Å·(non-blocking)
È£ÃâÀ̶ó ÇÑ´Ù.
¾ÖÆ®¸®ºäÆ®´Â CORBA¿¡¼
Á¤ÀÇÇÑ µ¶Æ¯ÇÑ ¿ÀÆÛ·¹À̼ÇÀ¸·Î¼ ¾Æ·¡ ¿¹¿¡¼ º¸ÀÌ´Â °Íó·³ À̰ÍÀº
¾ð¶æ º¸±â¿¡ ƯÁ¤ µ¥ÀÌŸ ÇüÀÇ º¯¼ö¸¦ ¼±¾ðÇÑ °Íó·³ º¸À̳ª ½ÇÁ¦
¿ÀÆÛ·¹À̼ÇÀ̶ó »ý°¢ÇÏ¸é Æ²¸²ÀÌ ¾ø´Ù. ÀÌ
¿ÀÆÛ·¹À̼ÇÀº Ŭ¶óÀÌ¾ðÆ®°¡ ƯÁ¤ º¯¼ö¿¡ ƯÁ¤ °ªÀ» ¼³Á¤Çϰųª °Ë»öÇÒ
¶§¿¡ ¼Õ½±°Ô IDL·Î
Ç¥ÇöÇϱâ À§ÇØ °í¾ÈµÈ °ÍÀÌ´Ù À̰ÍÀº ½ÇÁ¦ C,
C++, ½º¸ôÅå°°Àº ƯÁ¤ ÇÁ·Î±×·¥
¾ð¾î·Î º¯È¯µÇ¾î _get°ú
_set µÎ°³ÀÇ
¿ÀÆÛ·¹À̼ÇÀ» »ý¼ºÇÑ´Ù. ¾ÖÆ®¸®ºäÆ®´Â
¿É¼ÇÀ¸·Î attribute Ű¿öµå
¾Õ¿¡ readonly¸¦
»ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ
¿É¼ÇÀÌ ¼±¾ðµÈ º¯¼ö´Â ÇÒ´çµÈ °ªÀ» ¾ò¾î¿À´Â _get
¿ÀÆÛ·¹À̼Ǹ¸À» »ý¼ºÇÑ´Ù.
| Interface MyInterface {
attribute float radius; }; |
±âÁ¸¿¡ ÀÛ¼ºµÈ ÀÎÅÍÆäÀ̽º°¡ Á¸ÀçÇÏ´Â
°æ¿ì ÇØ´ç ÀÎÅÍÆäÀ̽º³»¿¡ ¼±¾ðµÈ ¸ðµç ¿ä¼ÒµéÀ» ±×´ë·Î ¹°·Á¹Þ¾Æ
»õ·Î¿î ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇ ÇÏ´Â °ÍÀ» »ó¼ÓÀ̶ó ÇÑ´Ù.
´ÙÀ½ ¿¹¿¡¼´Â QuoteServiceÀÎÅÍÆäÀ̽º¸¦
»ó¼Ó¹Þ°í ¿©±â¿¡ createGroup°ú
getGroupQuote ¿ÀÆÛ·¹À̼ÇÀ»
Ãß°¡ÇÑ ÆÄ»ý GroupQuoteService ÀÎÅÍÆäÀ̽º¸¦
¼±¾ðÇÑ °ÍÀÌ´Ù.
|
#inlcude "QuoteService.idl" interface GroupQuoteService : QuoteService { void createGroup( in string groupName, in string symbol1, in string symbol2, in string symbol3); void getGroupQuote ( in string groupName, out quote quote1, out quote quote2, out quote quote3); }; |
QuoteService´Â GroupQuoteServiceÀÇ
±â¹Ý ÀÎÅÍÆäÀ̽º(base interface)¶ó
Çϸç GroupQuoteService´Â
QuoteServiceÀÇ
ÆÄ»ý ÀÎÅÍÆäÀ̽º¶ó ÇÑ´Ù. ±×¸®°í,
ÆÄ»ý ÀÎÅÍÆäÀ̽º´Â º¹¼öÀÇ ±â¹Ý
ÀÎÅÍÆäÀ̽º·ÎºÎÅÍ ÆÄ»ý µÉ ¼ö ÀÖ´Ù. ±â¹Ý
ÀÎÅÍÆäÀ̽º´Â °£Á¢(indirect) ±â¹Ý
ÀÎÅÍÆäÀ̽º¿Í Á÷Á¢ (direct) ±â¹Ý
ÀÎÅÍÆäÀ̽º µÎ °¡Áö Á¾·ù·Î ±¸ºÐ µÈ´Ù.
- °£Á¢ ±â¹Ý ÀÎÅÍÆäÀ̽º
¾î¶² ÆÄ»ý ÀÎÅÍÆäÀ̽ºÀÇ ±â¹Ý ÀÎÅÍÆäÀ̽º°¡
´Ù¸¥ ±â¹Ý ÀÎÅÍÆäÀ̽º·ÎºÎÅÍ ÆÄ»ýµÈ ÀÎÅÍÆäÀ̽º ÀÏ ¶§.
- Á÷Á¢ ±â¹Ý ÀÎÅÍÆäÀ̽º
¾î¶² ÆÄ»ý ÀÎÅÍÆäÀ̽ºÀÇ ±â¹Ý ÀÎÅÍÆäÀ̽º°¡ ´Ù¸¥ ±â¹Ý ÀÎÅÍÆäÀ̽º·ÎºÎÅÍ ÆÄ»ýµÇ
Áö ¾ÊÀº ÀÎÅÍÆäÀ̽º
ÀÏ ¶§.
ÆÄ»ý ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÒ ¶§ ÆÄ»ý ÀÎÅÍÆäÀ̽º´Â
µ¿ÀÏÇÑ ¿ÀÆÛ·¹À̼ÇÀ̳ª ¾ÖÆ®¸®ºäÆ® À̸§À» °¡Áö°í ÀÖ´Â ±â¹Ý Ŭ·¡½º·ÎºÎÅÍ
»ó¼Ó ¹ÞÀ» ¼ö ¾øÀ¸¸ç, ¶ÇÇÑ
»ó¼Ó ¹ÞÀº ¿ÀÆÛ·¹À̼ǰú ¾ÖÆ®¸®ºäÆ® À̸§À» Àç Á¤ÀÇ ÇÒ ¼ö ¾ø´Ù.
¸ðµâÀº Á¤ÀÇÇϰíÀÚ ÇÏ´Â ÀÎÅÍÆäÀ̽ºµéÀ»
ÇϳªÀÇ ¼¼Æ®·Î ¹±â À§ÇÑ À̸§°ø°£(namespace)À»
Á¦°øÇϸç, º¯¼ö
À̸§°ú °°Àº ½Äº°ÀÚ(Identifier)µéÀÇ
»ç¿ë ¹üÀ§¸¦ Á¦¾îÇϱâ À§ÇØ »ç¿ëÇÑ´Ù. ¸ðµâ
³»¿¡¼ ÀûÀýÇÏ°Ô IDL ¼±¾ðµé¿¡
´ëÇÑ ¹üÀ§¸¦ ¼³Á¤ÇÔÀ¸·Î¼ ´Ù¸¥ ¸ðµâ¿¡¼ »ç¿ëµÈ ½Äº°ÀÚµé°ú Ãæµ¹ÀÌ
¹ß»ýÇÏ´Â °ÍÀ» ÇÇÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. Áï,
¾î¶² ¸ðµâ¿¡¼ ¼±¾ðµÈ ½Äº°ÀÚ´Â
±× ¸ðµâ ¹Û¿¡ Á¤ÀǵǾî ÀÖ´Â ½Äº°ÀÚ¿Í µ¿ÀÏÇÑ À̸§À» °®À» ¼ö ÀÖ´Ù´Â
°ÍÀ» ÀǹÌÇÑ´Ù.
¾î¶² ¸ðµâ¿¡¼ »ç¿ëµÈ ½Äº°ÀÚµéÀ» ¿ÜºÎ¿¡¼
»ç¿ëÇϰíÀÚ ÇÒ ¶§¿¡´Â '::'(À̸§
ÇØ°á ¿¬»êÀÚ, name resolution operator)¾Õ¿¡
¸ðµâ À̸§À» ºÙ¿© »ç¿ëÇÑ´Ù. ¾Æ·¡
¿¹Á¦¿¡¼ ù ¹øÂ° °æ¿ì(1)´Â
¸ðµâ business ³»¿¡¼
Á¤ÀÇµÈ MaxVal°ú
¸ðµâ ¿ÜºÎ¿¡¼ Á¤ÀÇµÈ MaxValÀº
º°°³ÀÇ ½Äº°ÀÚÀÌ´Ù. business¸ðµâ³»ÀÇ
MaxValÀ»
»ç¿ëÇÒ ¶§´Â business::MaxVal ó·³
À̸§ ÇØ°á ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© Á¢±ÙÇÑ´Ù. µÎ
¹øÂ° °æ¿ì(2)´Â
¼·Î ´Ù¸¥ ¸ðµâ¿¡¼ µ¿ÀÏÇÑ ÀÎÅÍÆäÀ̽º¸¦ ¼±¾ðÇÑ ¿¹ÀÌ´Ù.
| (1) const long MaxVal = 100;
module business { const long MaxVal = 50; .... }; (2) module NYSE { interface QuoteService { ..... } }; module AMEX { interface QuoteService { ..... } }; |
any ÇüÀº ¾î¶°ÇÑ
IDL °ªµµ
ÀúÀåÇÒ ¼ö ÀÖ´Â µ¥ÀÌŸ ÇüÀ¸·Î¼ ´Ù¾çÇÑ µ¥ÀÌŸ ÇüÀ» Àü´ÞÇØ¾ß¸¸ ÇÏ´Â
¸Å°³º¯¼ö¿¡¼ »ç¿ëµÈ´Ù. ¶ÇÇÑ
any´Â ´Ù¸¥
any À¯Çüµµ
°¡´ÉÇÏ´Ù. any´Â
¾îÇø®ÄÉÀ̼ÇÀÌ any¿¡
ÀúÀåµÇ¾î ÀÖ´Â µ¥ÀÌŸ ÇüÀ» ÇØ¼®ÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â Typecode
±¸Á¶Ã¼¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù.
any´Â C³ª
C++ÀÇ void*
¿Í À¯»çÇÏ´Ù°í »ý°¢ÇÒ ¼ö ÀÖ´Ù.
Typedef´Â ƯÁ¤
µ¥ÀÌŸ Çü¿¡ À̸§À» ºÎ¿©ÇÏ´Â ¸ÞÄ¿´ÏÁòÀÌ´Ù.
ÇÁ·Î±×·¡¸Ó´Â ±âº»ÀûÀÎ µ¥ÀÌŸ
Çü»Ó ¾Æ´Ï¶ó ±¸Á¶Ã¼Çü µ¥ÀÌŸ, ÅÛÇø´
À¯Çü¿¡ À̸§À» ºÎ¿©ÇÑ´Ù. C,C++¿¡¼ÀÇ
typedef¿Í
µ¿ÀÏÇÏ´Ù.
2Àå CORBA ÇÁ·Î±×·¡¹Ö
Áö±Ý±îÁö ¿ì¸®´Â CORBA
±¸Á¶, Ŭ¶óÀÌ¾ðÆ®¿Í
±¸Çö °´Ã¼°£ÀÇ Åë½Å ¹æ¹ý, ±×¸®°í
IDL ¹®¹ý
±¸Á¶¿¡ ´ëÇØ¼ »ìÆì º¸¾Ò´Ù. ÀÌÁ¦
½ÇÁ¦·Î CORBA ÇÁ·Î±×·¥À»
ÀÛ¼ºÇÏ´Â ¹æ¹ýÀ» »ìÆìº¸¸é¼ º¸´Ù ±¸Ã¼ÀûÀ¸·Î ºÐ»ê °´Ã¼¿¡ ´ëÇØ »ìÆìº¸ÀÚ.
º» Àå¿¡¼´Â ¾Æ´Ï¿À³ª»çÀÇ Orbix°ú
¿¢½ºÆÛ¼ÒÇÁÆ®»çÀÇPowerBroker¸¦
»ç¿ëÇÑ´Ù.
2.1 Orbix ¸¦
ÀÌ¿ëÇÑ CORBA ÇÁ·Î±×·¡¹Ö
CORBA ÀÀ¿ëÇÁ·Î±×·¥
°³¹ß°úÁ¤Àº RPC(Remote Procedure Call)ÀÇ
°³¹ß°úÁ¤°ú À¯»çÇÏ´Ù. ´Ù½Ã
¸»ÇØ, RPC¿¡¼
¿øÇÏ´Â ÇÁ·Î½ÃÁ®¸¦ ¼¹ö¿¡ Á¤ÀÇÇØµÎ°í Ŭ¶óÀÌ¾ðÆ®¿¡¼ À̸¦ È£ÃâÇÏ´Â
°Íó·³ CORBA ¿¡¼µµ
¿øÇϴ Ŭ·¡½º¿Í ¸Þ¼Òµå(¿ÀÆÛ·¹À̼Ç)¸¦
¼¹ö ±¸Çö °´Ã¼¿¡ Á¤ÀÇÇØµÎ°í ÀÌ ¸Þ¼Òµå¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡¼ È£ÃâÇÑ´Ù.
RPC»ó¿¡¼ ¼¹ö¿Í Ŭ¶óÀ̾ðÆ®
ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °úÁ¤¿¡¼ ÇÁ·Î±×·¡¸Ó¿¡°Ô ¹ß»ýÇÏ´Â ¾î·Á¿î
ºÎºÐµéÀ» °¡·ÁÁÖ±â À§ÇØ RPCGEN(RPC Generator)
À̶ó´Â ÄÄÆÄÀÏ·¯°¡ ÀÖµíÀÌ CORBA¿¡¼´Â
IDLÄÄÆÄÀÏ·¯°¡
Á¸ÀçÇÑ´Ù. °¡Àå
¸ÕÀú CORBA ÀÀ¿ë
ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â µ¥ ÀÖ¾î »ý°¢ÇØ¾ß ÇÒ ÀÏÀº ¸ðµç °´Ã¼ÁöÇâ ÇÁ·Î±×·¥
°³¹ß°ú ¸¶Âù°¡Áö·Î ÇØ´ç ¹®Á¦¿¡ ÀûÇÕÇÑ Å¬·¡½º¸¦ µðÀÚÀÎÇÏ´Â °ÍÀÌ´Ù.
ÀÌ Ã¥¿¡¼´Â ÀÌ·¯ÇÑ µðÀÚÀÎ ¹æ¹ý¿¡
´ëÇØ ´Ù·çÁö´Â ¾Ê´Â´Ù. ÀÌ
Ã¥¿¡¼´Â CORBA ÇÁ·Î±×·¥À»
ÀÛ¼ºÇÏ´Â ÀýÂ÷¸¦ ÀÌÇØÇϰí CORBAÀÇ
ÀÛµ¿¿ø¸®¸¦ ÀÌÇØÇÏ´Â µ¥ ±× ¸ñÀûÀ» µÎ°í ÀÖ´Ù.
À̸¦ À§ÇØ ¿©±â¼´Â CORBA
Ç¥ÁØÀ» ±¸ÇöÇÑ Á¦Ç° Áß ¾ÆÀÌ¿À³ª»ç¿¡¼
°³¹ßÇÑ OrbixÀ»
ÀÌ¿ëÇÏ¿© ÀÀ¿ë ½Ã½ºÅÛÀ» ÀÛ¼ºÇϵµ·Ï ÇÑ´Ù. Orbix¿¡
´ëÇÑ º¸´Ù ÀÚ¼¼ÇÑ ³»¿ëÀº ¹Ú½º ±â»ç¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.
¸ÕÀú ÆíÀÇ»ó ¿¹Á¦ ÇÁ·Î±×·¥¿¡¼ »ç¿ëÇÒ
½Ã³ª¸®¿À¸¦ ±¸»óÇØº¸ÀÚ. ¾ÆÁÖ
°£´ÜÇϸ鼵µ ºÐ»ê ÇÁ·Î±×·¥À» ÀÌÇØÇÏ´Â µ¥ ¾ÆÁÖ ÀûÀýÇÑ ¿¹Á¦ÀÎ °ÝÀÚ(grid)¸¦
»ç¿ëÇϵµ·Ï ÇÑ´Ù. °ÝÀÚ´Â
2Â÷¿øÀÇ
¹è¿ ÇüŸ¦ °®´Â´Ù. µû¶ó¼
°ÝÀÚ(grid)´Â
Æø(width)°ú
³ôÀÌ(height)¶ó´Â
¼Ó¼ºÀ» °®°í ÀÖÀ¸¸ç Æø°ú ³ôÀÌ·Î ±¸ºÐµÇ´Â ÁöÁ¡¿¡ ƯÁ¤ÇÑ °ªÀ» ÀÔ·ÂÇÏ´Â
set ¸Þ¼Òµå¿Í
°ªÀ» ¾ò¾î¿À´Â get ¸Þ¼Òµå¸¦
°®´Â´Ù. ±âŸ
´Ù¸¥ ¸Þ¼Òµå¸¦ Áö¿øÇÒ ¼öµµ ÀÖÁö¸¸ ÇØ´ç ¸Þ¼Òµå¸¸À¸·Î Ŭ·¡½º¸¦ ±¸¼ºÇϱâ·Î
ÇÑ´Ù. Á¤¸®Çϸé
º» ¿¹Á¦¿¡¼ »ç¿ëµÇ´Â Ŭ·¡½º´Â ´ÙÀ½°ú °°´Ù.
ÇÁ·Î±×·¥ À̸§ gridSrv , gridCnt
Ŭ·¡½º À̸§ grid
¾ÖÆ®¸®ºäÆ® short height
short width
¸Þ¼Òµå set(width , height, value)
get(width,
height)
ÀÏ´Ü gridŬ·¡½º¿¡
´ëÇÑ ÀÌÇØ°¡ ³¡³µ´Ù¸é º»°ÝÀûÀ¸·Î grid Ŭ·¡½º¸¦
ÀÌ¿ëÇÑ Å¬¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥°ú ¼¹ö ÇÁ·Î±×·¥ÀÌ ¾î¶² °úÁ¤À» ÅëÇØ
»óÈ£ÀÛ¿ë ÇÏ´Â Áö ¾Ë¾Æº¸ÀÚ.
grid Ŭ¶óÀÌ¾ðÆ® grid ±¸Çö °´Ã¼
set(1,1,10) È£Ãâ Ŭ¶óÀÌ¾ðÆ® ¼¹ö set(1,1,10) ¼öÇà
½ºÅÍºê ½ºÄÌ·ÎÅÏ
get(1,1) È£Ãâ get(1,1) ¼öÇàÈÄ
10À» ¹Ýȯ
³×Æ®¿÷
[ ±×¸²4-4
] grid Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö ±¸Çö
°´Ã¼»çÀÌÀÇ ÀÛµ¿ ½Ã³ª¸®¿À
³×Æ®¿÷À» °æÀ¯ÇÑ ºÐ»êȯ°æ¿¡¼ grid
Ŭ¶óÀÌ¾ðÆ®´Â [±×¸²4-4]¿¡¼
ó·³ ±¸Çö °´Ã¼¿¡°Ô ¿øÇÏ´Â °ªÀ» ÀÔ·ÂÇϱâ À§ÇØ set()
¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù.
ÀÌ ¸Þ¼Òµå´Â Ŭ¶óÀ̾ðÆ®ÀÇ ½ºÅͺ긦
ÅëÇØ ´Ù½Ã ±¸Çö °´Ã¼ÀÇ ½ºÄÌ·ÎÅÏÀ» °ÅÃÄ ½ÇÁ¦ Äڵ尡 Á¸ÀçÇÏ´Â ¼¹ö
°´Ã¼»óÀÇ set() ¸Þ¼Òµå¸¦
È£ÃâÇÑ´Ù. ¸¶Âù°¡Áö·Î
¿øÇÏ´Â À§Ä¡ÀÇ °ªÀ» ¾ò±â À§ÇØ Å¬¶óÀÌ¾ðÆ®´Â get()¸Þ¼Òµå¸¦
È£ÃâÇÑ´Ù. ±¸Çö
°´Ã¼ÂÊ¿¡¼ È£ÃâµÈ get()¸Þ¼Òµå´Â
ÇØ´ç ¸Þ¼Òµå¸¦ ¼öÇàÇÑ ÈÄ °á°ú °ªÀ» ´Ù½Ã ½ºÄÌ·ÎÅÏÀ» ÅëÇØ Ŭ¶óÀ̾ðÆ®ÀÇ
½ºÅͺ긦 ÅëÇØ ¹ÝȯÇÑ´Ù.
ÀÌ °úÁ¤¿¡¼ ÇÁ·Î±×·¡¸Ó´Â ÀüÇô ³×Æ®¿÷
±â´ÉÀ» Á¦°øÇÏ´Â ½ºÅͺê¿Í ½ºÄÌ·ÎÅÏ¿¡ ´ëÇØ °í¹ÎÇÒ Çʿ䰡 ¾ø´Ù.
¿Ö³ÄÇϸé CORBA°¡
ÀÚµ¿ÀûÀ¸·Î ÇÊ¿äÇÑ Äڵ带 »ý¼ºÇØ Áֱ⠶§¹®ÀÌ´Ù.
=================== Orbix¿¡
´ëÇÑ ÂªÀº °íÂû =======================
1. OrbixÀÇ ½ÇÇ౸Á¶
OrbixÀº ÀÀ¿ë ÇÁ·Î±×·¥À»
°³¹ß, ±¸µ¿½Ã۱â
À§ÇØ 3°¡Áö
°³¹ß ¹× ½ÇÇàȯ°æÀ» Á¦°øÇÑ´Ù. Çϳª´Â
Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ëÇÁ·Î±×·¥À» À§ÇÑ ¶óÀ̺귯¸® ITcltÀ̰í
¶Ç Çϳª´Â ¼¹ö ÀÀ¿ë ÇÁ·Î±×·¥À» À§ÇÑ ¶óÀ̺귯¸® ITsrcÀÌ´Ù.
¸¶Áö¸·À¸·Î´Â Orbix
½ÇÇà µ¥¸óÀÎ Orbixd°¡
ÀÖ´Ù. ½ÇÁ¦
ITclt ´Â
ITsrc ÀÇ
¼ºê¼ÂÀÌ´Ù. ¼¹ö
¶óÀ̺귯¸®´Â °´Ã¼Á¶ÀÛÀ» À§ÇØ ¿ø°ÝÁöÀÇ ¿ä±¸»çÇ×À» ¿äûÇϰųª Àü´Þ
¹ÞÀ» ¼ö ÀÖ´Ù. ±×·¯³ª
Ŭ¶óÀÌ¾ðÆ® ¶óÀ̺귯¸®´Â ¿ä±¸ »çÇ×µéÀ» ÃʱâÈÇϰí Àü´ÞÇÏ´Â ±â´É¸¸À»
Á¦°øÇÑ´Ù. Orbix ½ÇÇà
µ¥¸óÀÎ Orbixd ´Â
¼¹öÂÊ¿¡¼¸¸ ÇÊ¿äÇÏ´Ù. ¼¹öÂÊ¿¡
À§Ä¡ÇÑ Orbixd´Â
Ŭ¶óÀÌ¾ðÆ® ¿äû¿¡ ´ëÇØ ½Ç½Ã°£¿¡ ÀÚµ¿ÀûÀ¸·Î ¼¹öÂÊÀÇ ±¸ÇöºÎºÐÀ»
¸Þ¸ð¸®»ó¿¡ ·Îµå½ÃŰ´Â ¿ªÇÒÀ» ÇÑ´Ù. ±¸Çö
°´Ã¼ÀÇ ±¸ÇöºÎºÐÀ» ·Îµå½Ãų ¶§ Orbixd´Â
CORBAÇ¥ÁØ¿¡¼
Á¦¾ÈÇÑ ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î ±¸Çö °´Ã¼ÀÇ ±¸ÇöºÎºÐÀ» ±¸µ¿½Ãų ¼ö ÀÖ´Ù.
´ÙÀ½ [±×¸²4-5]´Â
½ÇÁ¦ 2°³ÀÇ
¸Ó½®»ó¿¡¼ ¼³Ä¡°¡´ÉÇÑ ½Ã³ª¸®¿ÀÁß ÇϳªÀÌ´Ù.
[ ±×¸²4-5
] OrbixÀÇ ½ÇÇà½Ã°£ ȯ°æÀÇ ¿¹
2. OrbixÀÇ ½Ã½ºÅÛ ±¸Á¶
OrbixÀÇ ½Ã½ºÅÛÀº
[±×¸²4-6]°ú
°°Àº ±¸Á¶·Î ±¸¼ºµÇ¾î ÀÖ´Ù. CORBAÇ¥ÁؾÈ
ÀÚü°¡ ±¸ÇöÂÊ º¸´Ù´Â ±â´É ¹¦»ç¿¡ ÁßÁ¡À» µÎ¾ú±â ¶§¹®¿¡ ½ÇÁ¦ ±×
±¸Çö¿¡ °üÇÑ ºÎºÐÀº °³¹ßÀÚ¿¡°Ô ¸ðµç °ÍÀÌ ¸Ã°ÜÁ® ÀÖ´Ù°í ÇÒ ¼ö ÀÖ´Ù.
OrbixÀÇ ½Ã½ºÅÛ ±¸Á¶¸¦ °£´ÜÈ÷
»ìÆìº¸¸é ´ÙÀ½°ú °°´Ù.

[ ±×¸²4-6
] OrbixÀÇ ±¸Á¶
Orbix´Â Å©°Ô Åë½Å
ºÎºÐÀ» ´ã´çÇÏ´Â ¸Þ¼¼Â¡ ¿£Áø ºÎºÐ°ú CORBA ·±Å¸ÀÓ
¼ºñ½º¸¦ Á¦°øÇÏ´Â ·±Å¸ÀÓ ¿£Áø, ±×¸®°í
±âŸ ºÎ°¡ ¼ºñ½º¸¦ Á¦°øÇÏ´Â ºÎºÐÀ¸·Î ³ª´¶´Ù.
°¢ ºÎºÐÀÇ ³»¿ëÀº ´ÙÀ½°ú °°´Ù.
¸Þ¼¼Â¡ ¿£Áø ºÎºÐÀº ÇϺο¡ Ç÷¯±×-ÀÎ
°¡´ÉÇÑ ´Ù¾çÇÑ ÇÁ·ÎÅäÄÝÀ» ±â¹ÝÀ¸·Î ÇÏ¿© OrbixÀÇ
ÇʼöÀûÀÎ Àü¼Û±â´ÉÀ» Á¦°øÇÑ´Ù. ƯÈ÷,
ÀÌ ºÎºÐÀº ±âÁ¸ÀÇ 1.X
¹öÀü°ú ºñ±³ÇÒ ¶§ °¡Àå ¸¹ÀÌ º¯ÈµÈ
ºÎºÐÀÌ´Ù.
½ÇÁ¦ ÀÌ ºÎºÐÀº 4°³ÀÇ
Ãß»óÈ Å¬·¡½º·Î ±¸ÇöµÇ¾î ÀÖ´Ù.
Channel , Protocol , Corder , EventHandler
¿©±â¼ Channel
Ãß»óÈ Å¬·¡½º´Â Ŭ¶óÀÌ¾ðÆ®¿Í
¼¹ö ±¸Çö °´Ã¼»çÀÌÀÇ ¿¬°áÀ» ´ã´çÇÑ´Ù. ƯÈ÷,
Orbix´Â ´ÜÀÏ Ã¤³Î»ó¿¡ °´Ã¼µé°£ÀÇ
´ÙÁß ¿¬°áÀ» Áö¿øÇϸç ä³Î·Î TCP/IP¸¦
ºñ·ÔÇÏ¿© IIOP, OLTP ½Ã½ºÅÛ¿¡¼
Á¦°øÇÏ´Â MQSeries ä³Î,
ÆúÆ®Å緱Ʈ ±â´ÉÀ» Á¦°øÇÏ´Â ISIS
ä³Î µîÀ» ¼±ÅÃÀûÀ¸·Î ÀÌ¿ëÇÒ
¼ö ÀÖ´Ù.
Protocol Ãß»óÈ
Ŭ·¡½º´Â ä³Î»ó¿¡¼ »ç¿ëµÇ´Â Åë½Å ÇÁ·ÎÅäÄÝÀ» Á¦°øÇÑ´Ù.
ÀÌ Å¬·¡½º´Â ±âº»ÀûÀ¸·Î ¸ðµç
ÇÁ·ÎÅäÄÝÀÌ request , reply, exception reply
¶ó´Â ¹æ½ÄÀ» »ç¿ëÇÑ´Ù°í °¡Á¤ÇÑ´Ù.
ÀÌ Å¬·¡½º¸¦ ±¸Ã¼ÈÇÑ Å¬·¡½º·Î´Â
OMG IIOP¸¦
±¸ÇöÇÑ IIOP Ŭ·¡½º¿Í
±âÁ¸ÀÇ Orbix¿¡¼
»ç¿ëÇÏ´ø OrbixProtocol ÀÌ
ÀÖ´Ù.
Loader Ãß»óÈ Å¬·¡½º´Â
Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö °´Ã¼»çÀÌÀÇ µ¥ÀÌŸ ±³È¯½Ã ÀÌ µé µ¥ÀÌŸ¸¦ÀÇ ¸¶¼£¸µ
, ¾ð¸¶¼£¸µ
±â´ÉÀ» Á¦°øÇÑ´Ù. Loader Ŭ·¡½ºÀÇ
ÇÏÀ§ Ŭ·¡½º·Î IIOP ÇÁ·ÎÅäÄÝÀÇ
CDR(Common Data Representation)À»
±¸ÇöÇÑ IIOP Encoder¿Í
ÀÌÀüÀÇ OrbixProtocol¿¡¼
»ç¿ëÇÏ´ø XDR Ç¥ÇöÀ»
±¸ÇöÇÑ OrbixProtocol Encoder, °°Àº
µ¥ÀÌŸ Ç¥Çö ±¸Á¶¸¦ °®´Â ½Ã½ºÅÛ°£ÀÇ ÃÖÀûÈ Åë½ÅÀ» À§ÇÑ Null
Encoder°¡ ÀÖ´Ù.
EventHandler´Â
Ŭ¶óÀ̾ðÆ®ÀÇ µ¿±â ¶Ç´Â ºñµ¿±â Åë½Å ¹æ¹ý¿¡ ´ëÇÑ À̺¥Æ® 󸮸¦ ´ã´çÇÑ´Ù.
Orbix ·±Å¸ÀÓ ¿£Áø ºÎºÐÀº Ŭ¶óÀÌ¾ðÆ®¿Í ±¸Çö °´Ã¼ÀÇ API, IDL ÄÄÆÄÀϽà ÇÊ¿äÇÑ ±â´ÉµéÀ» Á¦°øÇÑ´Ù. ±âº»ÀûÀ¸·Î ½ÇÇà½Ã½ºÅÛÀº Request Ŭ·¡½º¿Í Object Ŭ·¡½º·Î ±¸¼ºµÇ¾î Àִµ¥ Request Ŭ·¡½º´Â ¿ø°ÝÁöÀÇ °´Ã¼¿Í Åë½ÅÇϴµ¥ ÇÊ¿äÇÑ ±âº» Á¤º¸¸¦ °®°í ÀÖÀ¸¸ç ObjectŬ·¡½º´Â ¸ðµç IDLŬ·¡½ºµéÀÇ Åä´ë Ŭ·¡½ºÀÌ´Ù. Request¿Í ObjectÀ̿ܿ¡µµ C ³ª C++¿¡¼ void* °°Àº ¿ªÇÒÀ» ÇÏ´Â any Ŭ·¡½º¿Í ½ÇÇà½Ã°£¿¡ °¢Á¾ ŸÀÔ¿¡ ´ëÇÑ Á¤º¸¸¦ °áÁ¤ÇϱâÀ§ÇØ ÇÊ¿äÇÑ TypeCodeµî ÀÌ ÀÖÀ¸¸ç ÇÁ·Î±×·¥À» ½ÇÇà Áß ¿ø°ÝÁöÀÇ °´Ã¼¸¦ ·ÎÄÿ¡¼ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖ´ÂProxy °´Ã¼¸¦ »ý¼ºÇÏ´Â ¿ªÇÒµµ ÇÑ´Ù.
¸Þ¼¼Â¡ ¿£Áø ºÎºÐ°ú ·±Å¸ÀÓ ¿£Áø ºÎºÐ¿Ü¿¡
Á¦°øµÇ´Â ½Ã½ºÅÛ ±¸¼º ¿ä¼ÒµéÀº ÀÀ¿ë ÇÁ·Î±×·¥ ÀÛ¼ºÀÚ¿¡°Ô ÁÖ¾îÁö´Â
°´Ã¼ Á¶ÀÛ ±â´ÉµéÀÌ´Ù. CORBA¿¡¼
Á¤ÀÇÇÑ ´ëºÎºÐÀÇ ±âº» ±â´ÉµéÀ» Á¦°øÇÑ´Ù. ±×·¯³ª
CORBA ¼ºñ½º¿¡
Á¤ÀÇµÈ ¸ðµç ±â´ÉÀ» Á¦°øÇÏ´Â °ÍÀº ¾Æ´Ï´Ù.
Orbix¿¡¼ Á¦°øÇÏ´Â ±â´ÉÀ» À̾î¼
°è¼Ó ¼³¸íÇϵµ·Ï ÇÑ´Ù.
´Ü°è1) ÇÁ·Î±×·¥ÀÇ ¼³Ä¡
ÇØ´ç ÀνºÅç CD-ROMÀ»
³Ö°í À©µµ¿ì ¿î¿µÃ¼Á¦ÇÏ¿¡¼ setup.exe ÇÁ·Î±×·¥À»
½ÇÇàÇϰųª À¯´Ð½º»ó¿¡¼ ´ÙÀ½ÀÇ ¸í·ÉÀ» ½ÇÇàÇÏ¿© ÇÁ·Î±×·¥À» ¼³Ä¡ÇÑ´Ù.
% pkgadd -d devicename
Âü°í·Î Orbix2.2.¹öÀüÀ» ¼³Ä¡ÇÏ¸é ´ÙÀ½°ú °°Àº ÇÁ·Î±×·¥ ±×·ìÀ» ¾òÀ» ¼ö ÀÖ´Ù. ÀÌ ±×·ì¿¡´Â Orbix µ¥¸óÀ» ºñ·ÔÇÏ¿© ´Ù¾çÇÑ À¯Æ¿¸®Æ¼ µîÀÌ Æ÷ÇԵǾî ÀÖ´Ù.

[ ±×¸²
4-7 ] Orbix ÇÁ·Î±×·¥
±×·ì
´Ü°è2) ȯ°æ
Á¶Àý
OrbixÀÇ È¯°æ Á¶ÀýÀº
´ÙÀ½ÀÇ 2°³ÀÇ
ÆÄÀÏÀ» ÅëÇØ ±¸¼ºµÈ´Ù.
ORBIX.CFG ORBVARS.BAT
ORBIX.CFG ÆÄÀÏÀº
Orbixȯ°æ
Àü¹Ý¿¡ °üÇÑ Á¤º¸°¡ ´ã°ÜÁ® ÀÖ´Ù. ´ÙÀ½Àº
ORBIX.CFG¿¡
¼±¾ðµÈ ȯ°æ º¯¼öµéÀÌ´Ù. Orbixd µ¥¸ó
ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ°Ô µÉ Åë½Å Æ÷Æ®µé¿¡ ´ëÇÑ Á¤º¸¿Í µµ¸ÞÀÎ À̸§ÀÌ
¼±¾ðµÇ¸ç ¿¡·¯ÆÄÀÏÀÇ À§Ä¡, ±¸Çö
ÀúÀå¼Ò¿Í ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò, OrbixÀÇ
Ȩµð·ºÅ丮 µî¿¡ ´ëÇÑ Á¤º¸¸¦ ´ã°í ÀÖ´Ù. ´ÙÀ½
¿¹´Â ÇÊÀÚ°¡ À©µµ¿ìNT¿¡¼
»ç¿ëÇϰí ÀÖ´Â Orbix ȯ°æ
Á¤º¸ÀÌ´Ù.
// Orbix.cfg
IT_DAEMON_PORT 1570
IT_DAEMON_SERVER_BASE 1590
IT_LOCAL_DOMAIN hit.co.kr
IT_ERRORS D:\ORBIX22\errmsgs
IT_IMP_REP_PATH D:\ORBIX22\imprep
IT_INT_REP_PATH D:\ORBIX22\intrep
IT_LOCATOR_PATH D:\ORBIX22\
IT_TEMPLATE_CODE D:\ORBIX22\CORBA2\template
ORBVARS.BAT˼ Orbix
ÀÀ¿ë ÇÁ·Î±×·¥ ÀÛ¼º½Ã ÇÊ¿äÇÑ
ȯ°æ º¯¼ö¸¦ ½Ã½ºÅÛ¿¡ ¼³Á¤ÇÏ´Â µ¥ ÇÊ¿äÇÑ Á¤º¸°¡ ´ã°ÜÁ® ÀÖ´Ù.
´ÙÀ½Àº ÇÊÀÚ°¡ »ç¿ëÇϰí ÀÖ´Â
ORBVARS.BAT ÆÄÀÏÀÇ
¿¹ÀÌ´Ù.
SET ORBIX_ROOT=E:\ORBIX22
SET IT_CONFIG_PATH=%ORBIX_ROOT%
SET PATH=%PATH%;%ORBIX_ROOT%\BIN
SET INCLUDE=%INCLUDE%;%ORBIX_ROOT%\INCLUDE
SET LIB=%LIB%;%ORBIX_ROOT%\LIB
SET IT_IDL_TEMPLATE_CODE=%ORBIX_ROOT%%MAPPING%\TEMPLATE
ÀÌ ÆÄÀÏ¿¡¼´Â OrbixÀÇ
Ȩµð·ºÅ丮¿Í idlµî
°¢Á¾ Orbix ½ÇÇà
¸í·É¾î°¡ µé¾îÀÖ´Â À§Ä¡¿Í ¶óÀ̺귯¸® ¹× ÀÎÅ©·çµå ÆÄÀϵ鿡 ´ëÇÑ
Á¤º¸°¡ ¼±¾ðµÇ¾î ÀÖ´Ù. À¯´Ð½ºÀÇ
°æ¿ì¿¡µµ °°Àº ÆÄÀÏÀÌ Á¸ÀçÇÑ´Ù. ´Ü
È®ÀåÀÚ¸¸ÀÌ .VAR¿¡¼
.sh ³ª .csh·Î
¹Ù²ð »ÓÀÌ´Ù.
Âü°í·Î À©µµ¿ì ¹öÀü¿¡¼ "Orbix
configuration"À̶õ ÇÁ·Î±×·¥Àº
[±×¸²4-8]
ó·³ À©µµ¿ì»ó¿¡¼ ¼Õ½±°Ô Orbix
¼³Á¤À» °ü¸®ÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù.

[ ±×¸²4-8
] Orbix ¼³Á¤ ÇÁ·Î±×·¥
4. OrbixÀÇ ±âº»±â´É
IDLÀº CORBA¿¡¼
°´Ã¼ ¾Æ´äŸ¿Í ´õºÒ¾î °¡Àå Áß¿äÇÑ ±â´É Áß ÇϳªÀÌ´Ù.
IDLÀº ±¸Çö ¾ð¾î¿¡ µ¶¸³ÀûÀÎ
ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÏ°Ô ÇØÁØ´Ù. ´Ù½Ã
¸»ÇØ, ±¸Çö¾ð¾î
Á߸³ÀûÀÎ ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù.
ƯÈ÷ IDLÀº
C++¿¡ ³»ÀçµÈ
º¹À⼺À» Á¦°ÅÇÏ¿© ´Ü¼øÈ½ÃŰ°í ¿©±â¿¡ »õ·Î¿î ±â´ÉÀ» Ãß°¡ÇÏ¿´´Ù.
Ãß°¡ÇÑ ±â´ÉÀº ´ÙÀ½°ú °°´Ù.
°¢ ±â´É¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº
¾Õ¼± ÀýÀ» ÂüÁ¶Ç϶ó.
attributes , sequence , string , exception , parameter
modes , context clause
- Interface
IDLÀÇ ±âº»´ÜÀ§´Â
InterfaceÀÌ´Ù.
´Ù½Ã ¸»ÇØ °´Ã¼ÀÇ Å¸ÀÔÀÌ Interface·Î
°áÁ¤µÈ´Ù´Â ¸»ÀÌ´Ù. ½ÇÁ¦
Interface´Â
C++ÀÇ Class¿Í
µ¿ÀÏÇÏ´Ù. µû¶ó¼
Interface»çÀÌ¿¡´Â
»ó¼Ó(is-a)°ú
³»Æ÷(is-part-of) °ü°è°¡
³»ÀçµÇ¾î ÀÖ´Ù. ´ÙÀ½ÀÇ
¿¹¸¦ »ìÆìº¸ÀÚ.
// account.idl
interface account {
// attributes
readonly attributes string dateLastmodified;
readonly attributes float balance;
attributes string owner;
// operations
void makeDeposit( in float amount);
boolean makeWithdrawal( in float amount , out float balance );
};
interface´Â attributeµé°ú operationÀ¸·Î ±¸¼ºµÈ´Ù.
attribute´Â Ŭ·¡½ºÀÇ ¸â¹öº¯¼ö·Î ¸ÅÇ뵃 ¼ö ÀÖ´Ù. ±×·¯³ª ½ÇÁ¦ interfaceÀÇ attribute´Â 2°³ÀÇ ¸â¹öÇÔ¼ö·Î º¯È¯µÈ´Ù.
attribute ->
set the value , get the value
±×·¯³ª ¸¸¾à attribute°¡
readonly·Î
¼±¾ðµÇ¸é get ÇÔ¼ö·Î¸¸
º¯È¯µÈ´Ù.
readonly attribute
-> get the value
½ÇÁ¦ ÀÌ attributeµéÀº
°¢±â ŸÀÔÀ» °®°í Àִµ¥ ŸÀÔ¿¡´Â ½Ã½ºÅÛ¿¡¼ Áö¿øÇϴ ŸÀÔ°ú »ç¿ëÀÚ°¡
Á¤ÀÇÇÑ Å¸ÀÔ ¸ðµÎ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
Orbix ½Ã½ºÅÛ¿¡¼
Áö¿øÇϴ ŸÀÔÀº ´ÙÀ½°ú °°´Ù.
short , long , unsigned short, unsigned long , float
, double , char , boolean , octet , any , string
¿©±â¼ Áß¿äÇÑ Á¡Àº int¿Í unsigned char ÀÇ °æ¿ì ½Ã½ºÅÛ¸¶´Ù °¢±â ±× Áö¿ø¹üÀ§°¡ ´Ù¸£±â ¶§¹®¿¡ ±âº»Å¸ÀÔÀ¸·Î Áö¿øÇÏÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. ¶ÇÇÑ stringÀÇ °æ¿ì IDL¿¡¼ Æ÷ÀÎÅͰ¡ ¾Æ´Ï±â¶§¹®¿¡ ²À char* ¿Í µ¿ÀÏÇÑ °Í¸¸Àº ¾Æ´Ï´Ù. µû¶ó¼ ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
string , string[10]
operationµéÀº
C++ÀÇ ¸â¹öÇÔ¼ö¿Í
´ëºÎºÐ µ¿ÀÏÇÑ´Ù. ´ÜÁö
´Ù¸¥ Á¡Àº ¸Å°³º¯¼öÀÇ Àü´Þ ¸ðµå¸¦ °®´Â´Ù´Â Á¡ÀÌ´Ù.
´ÙÀ½Àº operation¿¡¼
»ç¿ë°¡´ÉÇÑ Àü´Þ ¸ðµåµéÀÌ´Ù.
in È£ÃâÇÏ´Â °´Ã¼¿¡¼ È£Ãâ´çÇÏ´Â °´Ã¼·Î Àü´Þ
out È£Ãâ´çÇÏ´Â °´Ã¼¿¡¼ È£ÃâÇÏ´Â °´Ã¼·Î Àü´Þ
inout ¾ç¹æÇâÀ¸·Î
Àü´Þ °¡´É
½ÇÁ¦ ¸Å°³º¯¼öÀÇ Àü´Þ¹æÇâÀÌ ÇÊ¿äÇÑ °ÍÀº
Ŭ¶óÀ̾ðÆ®ÀÇ ½ºÅͺê¿Í ±¸Çö °´Ã¼ÀÇ ½ºÄÌ·ÎÅÏ»çÀÌ¿¡¼ °ªÀ» ÆÐÅ·(pack
, marshal)ÇÒ ¶§ ÇÊ¿äÇÏ´Ù.
Is-a
½Ç¼¼°è¸¦ µðÀÚÀÎÇÒ ¶§ °¡Àå ÀÚÁÖ ¹ß»ýÇÏ´Â
interface»çÀÌÀÇ
°ü°è°¡ Is-a ÀÌ´Ù.
½ÇÁ¦ ÀÌ °ü°è¸¦ interface´Â
»ó¼Ó °³³äÀ¸·Î Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº
½ÇÁ¦ is-a °ü°èÀÇ
Ç¥ÇöÀÌ´Ù.
interface currentAccount : account {
attribute float overDraftLimit;
};
°á±¹ "currentAccount is a account"°¡ µÈ´Ù. ´Ù½Ã ¸»ÇØ currentAccount´Â accountÀÇ ¸ðµç attribute¿Í operationÀ» °®°Ô µÈ´Ù. ±×·¯³ª ¿©±â¼ »ç¿ë»óÀÇ Á¦¾àÀÌ ¹ß»ýÇÑ´Ù.
¸ÕÀú currentAccount°°ÀÌ
account¿¡¼
À¯ÃßµÈ interfaceµéÀº
types°ú
constants, exceptionsµéÀ»
ÀçÁ¤ÀÇ ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª
operation°ú
attributeµéÀº
ÀçÁ¤ÀÇ ÇÒ ¼ö ¾ø´Ù. ´Ù½Ã
¸»ÇØ IDL operationÀº
overloadµÉ
¼ö ¾ø´Ù¶ó´Â ¸»ÀÌ´Ù. ¶ÇÇÑ
Interafce´Â
º¹¼ö °³ÀÇ interfaceµé·ÎºÎÅÍ
»ó¼Ó¹ÞÀ» ¼ö ÀÖ´Ù.
module
interfaceµéÀº module¿¡
ÀÇÇØ¼ ÀÏÁ¤ÇÏ°Ô ÀçºÐ·ùµÈ´Ù. ÀÌ¿¡
µû¶ó Àü¿ªº¯¼ö °ø°£¿¡ ¾µµ¥¾ø´Â ³¶ºñ¸¦ ¸·¾ÆÁÖ´Â ¿ªÇÒµµ ÇÑ´Ù.
´ÙÀ½Àº ¾Õ¼± ¿¹Á¦µéÀ» finance¶ó´Â
°ÍÀ¸·Î ¸ðµâÈÇÑ °ÍÀÌ´Ù.
module finance {
interfcae account {
.....
};
interface currentAccount : account {
...
};
interface bank {
...
};
};
»ç¿ëÀÚ´Â finance::account
°°Àº ¹æ½ÄÀ¸·Î ¸ðµâ³» interface¿¡
Á¢±ÙÇÒ ¼ö ÀÖ´Ù.
struct
struct´Â interface³»¿¡¼
¼±¾ðÇÒ ¼ö ÀÖ´Ù.
interface account {
struct personInfo{
string name;
short age;
};
personInfo getPersonInfo();
};
´ÙÀ½Àº ¾Õ¼ ¼³¸íÇÑ ±â´Éµé ¿Ü¿¡ »ç¿ë°¡´ÉÇÑ
±â´ÉµéÀÌ´Ù.
enum , union , typedef , sequence , 1D ¶Ç´Â
2D arrays , exception , context
DII´Â ½ÇÇà½Ã°£¿¡
¿øÇÏ´Â ±¸Çö °´Ã¼ÀÇ ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù.
µû¶ó¼ »ç¿ëÀÚ´Â ½ÇÇ൵Áß °´Ã¼ÀÇ
»óŰ¡ º¯ÇѴٰųª »õ·Î¿î °ªµéÀ» °»½ÅÇÒ °æ¿ì ÀÌ ±â´ÉÀ» ÀÌ¿ëÇÒ ¼ö
ÀÖ´Ù. ´ëÇ¥ÀûÀÎ
»ç¿ë »óȲÀ¸·Î´Â °´Ã¼µéÀÇ ºÎ¶ó¿ì¡À̳ª ½Ç½Ã°£ °ü¸® µîÀ» µé ¼ö ÀÖ´Ù.
°á±¹ DII±â´ÉÀ»
ÀÌ¿ëÇϱâ À§Çؼ OrbixÀº
½Ã½ºÅÛ Â÷¿ø¿¡¼ ½ÇÇà½Ã°£¿¡ °´Ã¼¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇØ¾ß ÇÑ´Ù.
°´Ã¼ÀÇ Å¸ÀÔ,
¸Å°³º¯¼ö,
¹Ýȯ °ª µî ´Ù¾çÇÑ Å¸ÀÔ°ú ½ºÅ°¸¶
Á¤º¸°¡ ÇÊ¿äÇÏ´Ù. ÀÌ·¯ÇÑ
Á¤º¸¸¦ Á¦°øÇϱâ À§ÇØ »ý¼ºÇÑ µ¥ÀÌŸº£À̽º°¡ ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò(Interface
Repository , IR)ÀÌ´Ù.
½ÇÁ¦ IR¿¡´Â
¸ÞŸµ¥ÀÌŸ°¡ ÀúÀåµÇ´Â µ¥ ¿©±â¼ ¸ÞŸµ¥ÀÌŸ¶õ Orbix
½Ã½ºÅÛÀÌ ½ÇÇà½Ã°£¿¡ °´Ã¼¸¦ Á¶ÀÛÇÏ´Â
µ¥ ÇÊ¿äÇÑ ¸ðµç Á¤º¸¸¦ ÀǹÌÇÑ´Ù.
OrbixÀÇ DII¸¦
ÀÌ¿ëÇÏ´Â °ÍÀº ´Ù¼Ò ¹ø°Å·ÓÁö¸¸ ±×´ÙÁö ¾î·ÆÁö´Â ¾Ê´Ù.
½ÇÁ¦ OrbixÀº
request¶ó´Â
DII°´Ã¼¸¦
»ý¼ºÇϰí À̸¦ ÅëÇØ ¿øÇÏ´Â ¸Þ¼Òµå¸¦ È£ÃâÇÔÀ¸·Î¼ ¸ðµç °ÍÀÌ ³¡³´Ù.
´ÙÀ½Àº Orbix¿¡¼
DII¸¦ »ç¿ëÇÏ´Â
¿¹ÀÌ´Ù.
- request °´Ã¼ »ý¼º
- ¸Å°³º¯¼ö µî·Ï
- ¿øÇÏ´Â ¸Þ¼Òµå¸¦ µî·Ï
- Invoke ¸Þ¼Òµå
±¸µ¿
// gridclient
CORBA::Object_ptr gridptr;
CORBA::Request r(gridptr , "get"); // gridptr°´Ã¼¿¡ ´ëÇÑrequest °´Ã¼¸¦ »ý¼ºÇϰí
// È£ÃâÇÒ ¸Þ¼Òµå¸¦ µî·ÏÇÑ´Ù.
r << 2 << 4 ; // get() ¸Þ¼Òµå¿¡
¸Å°³º¯¼ö µî·Ï
r.invoke(IT_X); // Invoke¸Þ¼Òµå
±¸µ¿
long result;
r >> result;
....
DII´Â ¿øÇÏ´Â °´Ã¼ÀÇ
¸Þ¼Òµå¸¸ ±¸µ¿½ÃŰ´Â °ÍÀÌ ¾Æ´Ï¶ó ¾ÖÆ®¸®ºäÆ®µéµµ Á¶ÀÛÇÒ ¼ö ÀÖ´Ù.
½ÇÁ¦ ¾ÖÆ®¸®ºäÆ®¿¡ °¢Á¾ °ªÀ»
ÀÔ·ÂÇϰųª ¹Ýȯ¹Þ À» ¼ö ÀÖÀ¸¸ç ±¸Á¶Ã¼ , sequence
, unionµîÀÇ ÀԷµµ °¡´ÉÇÏ´Ù.
°á·ÐÀûÀ¸·Î DII´Â
Orbix¿¡¼
ÀÚµ¿ÀûÀ¸·Î Á¦°øÇØÁÖ´Â ÄÚµåÀÎ Á¤Àû È£Ã⺸´Ù´Â »ç¿ëÇÏ±â ¾î·ÆÁö¸¸
¾Õ¼ ¾ð±ÞÇÑ´ë·Î µ¿ÀûÀÎ °´Ã¼Á¶ÀÛÀ» ¿äÇÏ´Â ºÐ¾ß¿¡¼´Â ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù.
IRÀº ½Ã½ºÅÛ¿¡¼
Á¤ÀÇÇÑ °¢Á¾ ŸÀÔ°ú ÀÎÅÍÆäÀ̽º Á¤ÀÇ¿¡ °üÇÑ Á¤º¸¸¦ À¯ÁöÇÑ´Ù.
µû¶ó¼ IRÀº
DII¿Í ÇÔ²²
»ç¿ëµÇ¸ç °¢Á¾ ½Ã½ºÅÛ °ü¸®³ª µ¿ÀûÀΠŸÀÔ °Ë»çµî¿¡ ÀÌ¿ëµÈ´Ù.
½ÇÁ¦ OrbixÀÇ
IR±¸Á¶´Â
»óÀ§ÀÇ container¿Í
contained¸¦
Áß½ÉÀ¸·Î ÇÏ¿© °¢ ŸÀÔÇ׸ñ¸¶´Ù IDLÀÎÅÍÆäÀ̽º·Î
Á¤ÀǵǾî ÀÖ´Ù.
Container
Repository
ModuleDef ½ÇÁ¦ °¢ Ç׸ñµéÀÌ ¼øÈ¯ÀûÀ¸·Î
InterfaceDef ±¸¼ºµÈ´Ù.
Contained
ModuleDef
InterfaceDef
ConstantDef
TypeDef
ExceptionDef
AttributeDef
OperationDef
ParameterDef
[±×¸²4-9]
OrbixÀÇ IR
±¸¼º
»ç¿ëÀÚ´Â ÇÁ·Î±×·¥³»¿¡¼ ÀÛ¼ºµÈ IRÀÇ
Á¤º¸¸¦ ¹ß°ßÇϰí È®ÀÎÇÏ´Â µî °¢Á¾ Á¶ÀÛÀ» ÇÒ ¼ö ÀÖ´Ù.
Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ µû¶ó Orbixd
½ÇÇà µ¥¸óÀº ÇØ´ç ±¸Çö °´Ã¼¸¦
±¸µ¿½ÃÄÑ¾ß ÇÑ´Ù. À̶§
ÇÊ¿äÇÑ Á¤º¸°¡ ÇØ´ç ±¸Çö °´Ã¼ÀÇ À§Ä¡ ¹× Åë½Å¹æ¹ý,
±¸µ¿ ¿É¼Ç µîÀÌ ÇÊ¿äÇÏ´Ù.
ÀÌ Á¤º¸°¡ ÀúÀåµÈ °÷ÀÌ ±¸Çö ÀúÀå¼ÒÀÌ´Ù.
½ÇÁ¦ À̰÷¿¡ Á¤º¸¸¦ ÀúÀåÇÏ·Á¸é
putitÀ̶õ
¸í·É¾î¸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½Àº
½ÇÁ¦ Orbix¿¡¼
grid¶ó´Â
±¸Çö °´Ã¼¸¦ ±¸Çö ÀúÀå¼Ò¿¡ ÀúÀåÇÏ´Â ¸í·ÉÀÌ´Ù.
putit gridserver d:\orbix22\demo\grid\server.exe
½ÇÁ¦ ÀÌ ¸í·ÉÀ» ½ÇÇàÇÑ ÈÄ,
±¸Çö ÀúÀå¼Ò¿¡´Â grid.imp¶õ
ÆÄÀÏÀÌ »ý¼ºµÇ´Âµ¥ ±× ³»¿ëÀº ´ÙÀ½°ú °°´Ù.
Name : gridserver
Comms : xdr/tcp
Activation : shared
Owner : Administrator
Launch : ;
Invoke : ;
Marker Launch Command
* D:\ORBIX22\DEMO\GRID\SERVER.EXE
¿©±â¼ Áß¿äÇÑ ±â´ÉÁßÀÇ Çϳª°¡ ±¸Çö
°´Ã¼ÀÇ ±¸µ¿¸ðµå¿¡ ´ëÇÑ Á¤º¸ÀÎ Activation ¸ðµåÀÌ´Ù.
ÀÌ ¿¹¿¡¼´Â shared·Î
»ç¿ëµÇ¾ú´Âµ¥ Orbix¿¡¼
Á¦°øÇÏ´Â ¸ðµå´Â ´ÙÀ½ÀÇ 4°³°¡
ÀÖ´Ù.
- shared
°¢ È£½ºÆ®¿¡ ÇÑ ¼¹ö ÇÁ·Î¼¼½º¸¸ÀÌ Á¸ÀçÇÑ´Ù. ¸ðµç Ŭ¶óÀÌ¾ðÆ®´Â ÇÑ °³ÀÇ
±¸Çö °´Ã¼¿Í Åë½ÅÇÑ´Ù.
- unshared
±¸Çö ÀúÀå¼Ò¿¡ µî·ÏµÈ °³º°ÀûÀÎ ±¸Çö °´Ã¼µé¿¡ ´ëÇØ ÇÁ·Î¼¼½ºµéÀÌ ±¸µ¿µÈ´Ù.
- per-method call
±¸Çö ÀúÀå¼Ò¿¡´Â °³º°ÀûÀÎ ¸Þ¼ÒµåµéÀÌ µî·ÏµÉ ¼ö ÀÖ´Ù. ÀÌ °³º°ÀûÀÎ ¸Þ¼Òµåµé¿¡
´ëÇØ ÇÁ·Î¼¼½º°¡ »ý¼ºµÈ´Ù.
- persistent
»ç¿ëÀÚ°¡ Á÷Á¢(manually) shared¸ðµå·Î ±¸µ¿ÇÒ ¼ö ÀÖ´Â ¼¹ö¸¦ persistent ¼¹ö¶ó°í
¸»ÇÑ´Ù.
ANY µ¥ÀÌŸ
ÇüÀº ÇѸ¶µð·Î void* °°Àº
±â´ÉÀ» ÇÑ´Ù. ´Ù½Ã
¸»ÇØ ¾î¶² ÇüÀÌµç »ó°ü¾øÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â µ¥ÀÌŸ ÇüÀ» ÀǹÌÇÑ´Ù.
ÀÌ Å¸ÀÔÀº ODMG¿¡¼
°áÁ¤µÈ Ç¥ÁØ µ¥ÀÌŸ Çü Áß ÇϳªÀÌ´Ù. µû¶ó¼
ANYŸÀÔÀÇ
¸Å°³º¯¼ö´Â ´Ù¸¥ ¸ðµç ±âº» µ¥ÀÌŸ ÇüÀ̳ª ±¸Á¶Ã¼ ,
°´Ã¼ÂüÁ¶·Î »ç¿ëµÉ ¼ö ÀÖ´Ù.
´ÙÀ½Àº Orbix¿¡¼
Á¦°øÇÏ´Â ANY µ¥ÀÌŸ
ÇüÀÇ ±¸Á¶ÀÌ´Ù.
struct any {
typeCode *_type; // ½ÇÁ¦ ŸÀÔÀ» ÀǹÌÇÑ´Ù.
void *_value; // ½ÇÁ¦ °ª¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ÀǹÌÇÑ´Ù.
any();
any(const &any);
any(const char *type, const void *val);
~any();
any& operator=(const any&);
...
void operator<<(unsigned char o);
...
void insertObjectRef(const TypeCode tc, const ObjectRef
, Environment&);
...
}
»ç¿ëÀÚ´Â
´ÙÀ½°ú °°ÀÌ ANY ÀÚ·áÇüÀ»
ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.
any a1;
char * name = new char[strlen("hyundai")+1];
al << name;
5. OrbixÀÇ ºÎ°¡±â´É
ÇÊÅʹ ƯÁ¤ °´Ã¼È£ÃâÀÌ ¹ß»ýÇÏ¿´À» ¶§
ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ °´Ã¼¿¡ ´ëÇÑ Á¶ÀÛ±ÇÇÑÀ» ¾òÀ» ¼ö ÀÖ°Ô ÇØÁÖ´Â ±â´ÉÀ»
¸»ÇÑ´Ù. ´Ù½Ã
¸»ÇØ Æ¯Á¤ ÁÖ¼Ò °ø°£³»¿¡¼ °´Ã¼È£ÃâÀÌ ¹ß»ýÇϰųª,
µµÂø ¶Ç´Â È£Ãâ¿¡ ´ëÇÑ ¹ÝÀÀÀÌ
º¸³»Áö°Å³ª ¹Þ¾ÒÀ» ¶§ ÀÌ °´Ã¼¸¦ Á¶ÀÛÇÏ´Â ±ÇÇÑÀ» Orbix¿¡°Ô¼
³Ñ°Ü¹Þ´Â °ÍÀ» ¸»ÇÑ´Ù. ½ÇÁ¦·Î
°´Ã¼¸¦ ¸ð´ÏÅ͸µÇϰųª µð¹ö±ë, Ãß°¡ÀûÀÎ
º¸¾È ÀåÄ¡ µîÀÌ ÇÊ¿äÇÑ °æ¿ì À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù.
½ÇÁ¦ ÀÌ·¯ÇÑ ÇÊÅÍ´Â ÇÁ·Î¼¼½º
´ÜÀ§ ¶Ç´Â °´Ã¼ ´ÜÀ§·Î Àû¿ëÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½Àº Orbix¿¡¼
°´Ã¼³ª ÇÁ·Î¼¼½º¿¡ ÇÊÅ͸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â À§Ä¡¸¦ ³ªÅ¸³½ °ÍÀÌ´Ù.
event request event
event reply
event
A. ÇÁ·Î¼¼½º
´ÜÀ§ÀÇ ÇÊÅÍÀ§Ä¡
marshal request unmarshal
unmarshal reply marshal
B. °´Ã¼´ÜÀ§ÀÇ
ÇÊÅÍÀ§Ä¡
[±×¸²4-10]
OrbixÀÇ ÇÊÅÍ»ç¿ëÀ§Ä¡
Orbix¿¡¼ ½ÇÁ¦
ÇÊÅÍ´Â CORBA::Filter¶ó´Â
Ŭ·¡½º¿¡ ÀÇÇØ¼ ±¸ÇöµÈ´Ù. ´ÙÀ½Àº
½ÇÁ¦ ÀÌ Å¬·¡½ºÀÇ ¼±¾ð ³»¿ëÀÌ´Ù.
class Filter {
protected :
Filter();
virtual Filter();
public:
virtual unsigned char outRequestPreMarshal(...);
virtual unsigned char outRequestPostMarshal(...);
virtual int inRequestPreMarshal(...);
virtual unsigned char inRequestPostMarshal(...);
virtual unsigned char outReplytPreMarshal(...);
virtual unsigned char outReplyPostMarshal(...);
virtual unsigned char inReplyPreMarshal(...);
virtual unsigned char inReplyPosMarshal(...);
};
½ÇÁ¦ ÀÌ Ãß»óÈµÈ ÇÊÅÍ Å¬·¡½º¸¦ »ó¼Ó¹Þ°í
¿øÇÏ´Â ÇÁ·Î¼¼½º ÇÊÅ͸¦ ÀÛ¼ºÇÑ ÈÄ È£ÃâÇÔÀ¸·Î¼ ¸ðµç ÇÊÅͱâ´ÉÀ»
ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. À̶§
Ŭ¶óÀÌ¾ðÆ®¿Í ±¸Çö °´Ã¼ÂÊ ¸ðµÎ ÇÊÅͰ¡ ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ù.
Orbix¿¡¼´Â 2°³ÀÇ Æ¯º°ÇÑ ÇÁ·Î¼¼½º ÇÊÅ͸¦ Á¦°øÇÑ´Ù.
Authentication
ÇÊÅÍ ,
Thread ÇÊÅÍ
AuthenticationÇÊÅÍ´Â
ÇÁ·Î¼¼½º»çÀÌ¿¡ ±ÇÇѰú °ü·ÃµÈ Á¤º¸¸¦ Àü´ÞÇϸç ThreadÇÊÅÍ´Â
°´Ã¼¿äû½Ã »õ·Î¿î thread¸¦
»ý¼ºÇØÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù.
À̹ۿ¡ °´Ã¼´ÜÀ§ÀÇ ÇÊÅ͸¦ »ç¿ëÇÏ·Á¸é TIE¹æ½ÄÀ» ÅëÇØ¾ß¸¸ ÇÑ´Ù. µû¶ó¼ ÄÄÆÄÀϽà IDL -F¿É¼ÇÀ» »ç¿ëÇÑ ÈÄ ÇÊÅ͸¦ »ç¿ëÇϰíÀÚ ÇÏ´Â °´Ã¼¿¡ ÀÛ¼ºÇÑ ÇÊÅ͸¦ ºÙÀÌ¸é µÈ´Ù.
Orbix´Â »ç¿ëÀÚ°¡
°´Ã¼ÀÇ »óÅÂÁ¤º¸¸¦ ij½³(caching)ÇÒ
¼ö ÀÖµµ·Ï ÇÁ·Ï½Ã ÆÑÅ丮(Proxy Factory) Ŭ·¡½º¸¦
Á¦°øÇÑ´Ù. ÇÁ·Ï½Ã
ÆÑÅ丮´Â ÀÏ¹Ý ÇÁ·Ï½Ã¿Í ½º¸¶Æ® ÇÁ·Ï½Ã¸¦ ±¸¼ºÇÒ ¼ö ÀÖ´Ù.
¿©±â¼ ÀÏ¹Ý ÇÁ·Ï½Ã´Â Orbix¿¡¼
Á¦°øÇÏ´Â ¶óÀ̺귯¸®¸¦ ÅëÇØ ÀÚµ¿À¸·Î »ý¼ºµÈ´Ù.
½ÇÁ¦ µÚ¿¡¼ ¿ì¸®´Â IDLÄÄÆÄÀÏ
ÈÄ gridProxyFactoryClass¶õ
ÇÁ·Ï½Ã ÆÑÅ丮 Ŭ·¡½º°¡ »ý¼ºµÇ´Â °ÍÀ» º¸°Ô µÉ °ÍÀÌ´Ù.
½ÇÁ¦ grid°´Ã¼ÀÇ
ÇÁ·Ï½Ã¸¦ »ý¼ºÇÒ ¶§¸¶´Ù ÀÌ Å¬·¡½º¸¦ »ç¿ëÇÏ°Ô µÈ´Ù.
ÀÌ ÀÏ¹Ý ÇÁ·Ï½Ã´Â in
, out ¸Å°³º¯¼ö¸¦ ¸¶½©¸µ(marshal)Çϰųª
¾ð¸¶½©¸µ(unmarshal)Çϰí
°¢Á¾ °´Ã¼¿äûÀ» Àü´ÞÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ÀÌ¿¡
¹ÝÇØ ½º¸¶Æ® ÇÁ·Ï½Ã´Â °´Ã¼ÀÇ ½ÇÁ¦ °ªÀ̳ª »óÅÂÁ¤º¸¸¦ ij½³Çϰųª
Ŭ¶óÀ̾ðÆ®ÀÇ ·ÎÄà ¸Ó½®¿¡ ÀÖ´Â ¸®¼Ò½º¸¦ ÀÌ¿ëÇÒ °æ¿ì »ç¿ëÇÒ ¼ö ÀÖ´Ù.
±×·¯³ª ÀÌ·¯ÇÑ ½º¸¶Æ® ÇÁ·Ï½Ã¸¦ »ç¿ëÇÒ ¶§ À¯ÀÇÇØ¾ß ÇÒ »çÇ×ÀÌ ÀÖ´Ù. ´Ù¸§¾Æ´Ï¶ó ½ÇÁ¦ °´Ã¼¿¡ ´ëÇØ º¹¼ö °³ÀÇ ÇÁ·Ï½Ã°¡ Á¸ÀçÇϱ⠶§¹®¿¡ ¿ÀÁ÷ ÇÑ ¼ø°£¿¡ ÇÑ Å¬¶óÀÌ¾ðÆ® ÇÁ·Ï½Ã¿¡ ÀÇÇØ¼¸¸ º¯°æµÉ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù.
Orbix´Â Ŭ¶óÀ̾ðÆ®ÀÇ
¿äûÀÌ µµÂøÇÏ´Â ¼ø°£, È£ÃâÇϱâ
À§ÇÑ ±¸Çö °´Ã¼¸¦ ã´Â´Ù. À̶§
ÇØ´ç ±¸Çö °´Ã¼¸¦ ¹ß°ßÇÏÁö ¸øÇÑ´Ù¸é INV_OBJREF¶ó´Â
¿¹¿Ü»óȲÀ» Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ¹ß»ý½ÃŲ´Ù. ÀÌ·±
»óȲ¿¡¼ Orbix´Â
Ŭ¶óÀÌ¾ðÆ®¿¡°Ô °´Ã¼ ÆúÆ®(Object fault)»óȲÀ»
¾Ë¸± ¼ö ÀÖ´Â °´Ã¼¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù.
ÀÌ °´Ã¼°¡ LoaderŬ·¡½ºÀÌ´Ù.
±âº»ÀûÀ¸·Î OrbixÀÇ
¸ðµç °´Ã¼´Â ±âº»Loader¸¦
°®°í ÀÖ´Ù.
LoaderŬ·¡½º´Â
º¹¼ö °³¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ÀÌ
Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¸é ÆÄÀϽýºÅÛÀ̳ª µ¥ÀÌŸº£À̽º ½Ã½ºÅÛ°°Àº Áö¼Ó¼º
ÀúÀåµµ±¸·ÎºÎÅÍ Orbix°´Ã¼¸¦
ÀúÀåÇϰí ÃßÃâÇÒ ¼ö ÀÖ´Ù. µ¿½Ã¿¡
ÀÌÁ¾ÀÇ Áö¼Ó¼º ÀúÀ屸Á¶¸¦ ÀÌ¿ëÇÔÀ¸·Î¼ ´ÙÁß ÀúÀ屸Á¶·Î ½Ã½ºÅÛ ±¸¼ºÀ»
°¡´ÉÇÏ°Ô ÇÑ´Ù. ÇöÀç
Orbix˼
LoaderŬ·¡½º¸¦
È®ÀåÇÏ¿© °´Ã¼ÁöÇâ DBMS¿Í
¿¬µ¿ÇÔÀ¸·Î¼ °´Ã¼ÀÇ Áö¼Ó¼ºÀ» ±¸ÇöÇÏ¿´´Ù.
»ç¿ëÀÚ°¡ Á¤ÀÇÇÑ LoaderŬ·¡½º´Â
¸ðµÎ ÃÖ»óÀ§ÀÇ CORBA::LoaderClass¸¦
»ó¼ÓÇØ¾ß ÇÑ´Ù. ÃÖ»óÀ§ÀÇ
CORBA::LoaderClass´Â
´ÙÀ½ÀÇ ¸â¹öÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.
virtual ObjectRef load ( const char* interface, const char* marker,
unsigned char isBind, CORBA::Environment&);
virtual void save(Object* ,saveReason reason, CORBA::Environment& );
virtual void record(Object* ,char* marker, CORBA::Environment& );
virtual unsigned char rename(Object* ,char* marker, CORBA::Environment& );
À§ÀÇ ¸â¹öÇÔ¼öÀÇ ÀÎÀÚÁß marker´Â
½ÇÁ¦ ÆÄÀÏÀ̸§À̳ª µ¥ÀÌŸº£À̽º À̸§ µîÀ¸·Î ¸ÅÇ뵃 ¼ö ÀÖ´Ù.
µû¶ó¼ ÀÚ½ÅÀÌ ÀúÀåÇϰíÀÚ ÇÏ´Â
Áö¼Ó¼º ¸Åü¿¡ ´ëÇØ ÀÌ ÇÔ¼ö¸¦ ¿À¹ö·Îµù ÇÔÀ¸·Î¼ ¿øÇÏ´Â LoaderŬ·¡½º¸¦
ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ÀÏ´Ü
ÀÚ½ÅÀÇ LoaderŬ·¡½º¸¦
ÀÛ¼ºÇÑ ÈÄ ÀÌ Å¬·¡½º¸¦ ÀúÀåÇÏ±æ ¿øÇϴ Ŭ·¡½º¿¡ µî·Ï½ÃÅ´À¸·Î¼
»ç¿ëÇÒ ¼ö ÀÖ´Ù.
Orbix´Â ºÐ»êµÈ
½Ã½ºÅÛ»ó¿¡¼ _bind()¿¡
ÀÇÇØ¼ ¿äûµÈ °´Ã¼¸¦ locator¿¡
ÀÇÇØ¼ ã´Â´Ù. ±âº»
locator·Î´Â
Orbix.hosts¿Í
Orbix.hostgroups ÆÄÀÏÀÌ
ÀÖ´Ù.
Orbix.hostsÆÄÀÏ¿¡´Â
´ÙÀ½°ú °°Àº ±¸Á¶·Î Á¤º¸°¡ ÀúÀåµÈ´Ù.
<server_name>:<list_hosts>:<list_host_groups>
¸ÕÀú <server_name>Àº
¼¹ö ÇÁ·Î±×·¥ÀÇ À̸§À» ÀǹÌÇϰí <list_hosts>¿¡´Â
¼¹ö ÇÁ·Î±×·¥ÀÌ ¼öÇàµÇ´Â ÄÄÇ»Å͵éÀÇ À̸§À» ¸í½ÃÇÑ´Ù.
¸¶Áö¸·À¸·Î <list_host_groups>¿¡´Â
Orbix.hostgroups¿¡
¸í½ÃµÈ ±×·ì¸íÀÌ ¸í½ÃµÈ´Ù. ´ÙÀ½
±× ½ÇÁ¦ ¿¹ÀÌ´Ù.
bank:host1,host2,host3:financial
Orbix.hostgroupsÆÄÀÏ¿¡´Â
´ÙÀ½°ú °°Àº ±¸Á¶·Î Á¤º¸°¡ ÀúÀåµÈ´Ù.
<group_name>:<list_hosts>
<group_name>˼
¿øÇϴ ȣ½ºÆ®µéÀÇ ±×·ìÀ̸§ÀÌ ¸í½ÃµÇ¸ç <list_hosts>¿¡´Â
ÇØ´ç ±×·ì¿¡ ¼ÓÇϴ ȣ½ºÆ® À̸§ÀÌ ¸í½ÃµÈ´Ù.
´ÙÀ½Àº ±× »ç¿ë ¿¹ÀÌ´Ù.
financial:host1,host2
»ç¿ëÀÚ´Â ±âº»locator¸¦
º¯°æÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀÚ´Â
Orbix¿¡¼
Á¦°øÇÏ´Â CORBA::locatorClass¸¦
»ó¼Ó¹Þ¾Æ ÀÚ½ÅÀÇ locatorŬ·¡½º¸¦
ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. CORBA::locatorClass´Â
´ÙÀ½ÀÇ ¸â¹öÇÔ¼ö¸¦ °®´Â´Ù.
virtual _IDL_SEQUENCE_string lookup ( const char *ServiceName ,
insigned long MaxHops,
const Context& context ,
Environment& env) ;
lookup¸Þ¼Òµå´Â
¼¹öÀ̸§À» ÀÎÀÚ·Î ¹Þ°í ÀÌ ¼¹ö°¡ Á¸ÀçÇϴ ȣ½ºÆ®µéÀÇ À̸§À» sequence±¸Á¶·Î
¹ÝȯÇÑ´Ù. maxHopsÀº
Orbix¿¡
ÀÇÇØ¼ ÀÚµ¿ÀûÀ¸·Î °áÁ¤µÇ±âµµ ÇÏÁö¸¸ »ç¿ëÀÚ°¡ Á÷Á¢ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
Orbix°¡ ¿î¿µµÇ±â
À§Çؼ ÇÊ¿äÇÑ °¡Àå ±âº»ÀûÀÎ Á¶Á¤ÆÄÀÏÀº Orbix.cfg
ÀÌ´Ù. ÀÌ
ÆÄÀÏÀº À¯´Ð½º¿¡¼ /etc¿¡
À§Ä¡Çϰųª IT_CONFIG_PATH¶ó´Â
ȯ°æº¯¼ö¿¡ ÀÇÇØ¼ ¼³Á¤µÈ´Ù. ´ÙÀ½Àº
ÀÌ ÆÄÀÏ¿¡ Á¸ÀçÇÏ´Â Á¶Á¤ º¯¼öµéÀÌ´Ù.
- IT_DAEMON_PORT
Orbix µ¥¸óÀÌ »ç¿ëÇÏ´Â Æ÷Æ®°¡ ¸í½ÃµÈ´Ù. ±âº»°ªÀº 1221 ÀÌ´Ù.
- IT_DAEMON_SERVER_BASE
°¢ ¼¹ö¿Í Åë½ÅÇϱâ À§ÇÑ Æ÷Æ®°¡ ¸í½ÃµÈ´Ù. ±âº»Àº 1241ÀÌ´Ù.
-IT_LOCAL_DOMAIN
OrbixÀÌ ±¸µ¿µÇ´Â µµ¸ÞÀΠȯ°æÁ¤º¸°¡ ¸í½ÃµÈ´Ù.
- IT_ERRORS
¿¡·¯ ·Î±×ÆÄÀÏÀÇ À§Ä¡¿Í À̸§ÀÌ ¸í½ÃµÈ´Ù.
- IT_IMP_REP_PATH
±¸Çö ÀúÀå¼ÒÀÇ À§Ä¡¿Í À̸§ÀÌ ¸í½ÃµÈ´Ù.
- IT_INT_REP_PATH
ÀÎÅÍÆäÀ̽º ÀúÀå¼ÒÀÇ À§Ä¡¿Í À̸§ÀÌ ¸í½ÃµÈ´Ù.
- IT_LOCATOR_PATH
OrbixÀÇ ¼³Ä¡
µð·ºÅ丮°¡ ¸í½ÃµÈ´Ù.
¾Õ¼± ȯ°æ º¯¼öÀ̿ܿ¡µµ LocatorÀÇ
À§Ä¡¸¦ ÁöÁ¤Çϱâ À§ÇÑ IT_LOCATOR_PATH¿Í
È£½ºÆ® Á¢¼Ó½Ã Á¢¼Ó½Ãµµ ȸ¼ö¸¦ ÁöÁ¤ÇÏ´Â IT_CONNECT_ATTEMPTS,
IIOPÆ÷Æ®¸¦ ÁöÁ¤ÇÏ´Â IT_IIOP_PORT°¡
ÀÖ´Ù.
- serverhosts
serverhosts servername [ -h hostname ] [ -v ] [ -r hostlist ] [ -a hostlist ] [ -l ]
ÀÌ ¸í·É¾î´Â Orbix.hostsÆÄÀÏ¿¡ Á¢±ÙÇÏ¿© ¸í½ÃµÈ ¼¹ö°¡ À§Ä¡Çϴ ȣ½ºÆ®ÀÇ À̸§À» ¾Ë·ÁÁØ´Ù. ¶ÇÇÑ -r¿É¼Ç°ú ÇÔ²² »ç¿ëÇÏ¸é ¸í½ÃµÈ ¸®½ºÆ®¸¦ Á¦°ÅÇÒ ¼ö ÀÖÀ¸¸ç -a¿É¼ÇÀº ÇØ´ç ¸®½ºÆ®¿¡ ¸í½ÃµÈ È£½ºÆ®¸¦ ¸í½ÃµÈ ¼¹ö¿¡ Ãß°¡ÇÑ´Ù. ¸¶Áö¸·À¸·Î -lÀº ¸í½ÃµÈ ¼¹ö¿¡ ´ëÇÑ ¸ðµç È£½ºÆ®¸¦ ¾Ë·ÁÁØ´Ù.
- servergroups
servergroups servername [ -h hostname ] [ -v ] [ -r hostlist ] [ -a hostlist ] [ -l ]
ÀÌ ¸í·É¾î´Â Orbix.hostsÆÄÀÏ¿¡ Á¢±ÙÇÏ¿© È£½ºÆ® ±×·ì¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë·ÁÁְųª »èÁ¦( -r ) ¶Ç´Â Ãß°¡(-a)ÇÒ ¼ö ÀÖ´Ù.
- grouphosts
grouphosts servername [ -h hostname ] [ -v ] [ -r hostlist ] [ -a hostlist ] [ -l ]
ÀÌ ¸í·É¾î´Â Orbix.hostgroupsÆÄÀÏ¿¡
Á¢±ÙÇÏ¿© ¸í½ÃµÈ ±×·ì¿¡ ¼ÓÇÑ È£½ºÆ® Á¤º¸¸¦ Á¦°øÇϰųª »èÁ¦(-r),
Ãß°¡(-a)ÇÒ
¼ö ÀÖ´Ù.
- catit
catit [ -v ] [ -h hostname ] server_name
ÁÖ¾îÁø ¼¹ö¿¡ ´ëÇÑ Á¤º¸¸¦ ÇØ´ç IR¿¡¼ ÃßÃâÇÏ¿© º¸¿© ÁØ´Ù.
- lsit
lsit [-R] [ -v ] [ -h hostname ] server_name or dir_name
IR¿¡¼ ÇØ´ç ¼¹ö¸¦
Á¶È¸Çϰųª ÀÎÀÚ¾øÀÌ »ç¿ëÇÒ °æ¿ì ¸ðµç ±¸Çö °´Ã¼ÀÇ À̸§À» º¸¿©ÁØ´Ù.
- rmit
rmit [ -v ] [ -h hostname ] [ -marker marker | -method method ] server_name
IR¿¡¼ ÇØ´ç ¼¹ö¸¦
»èÁ¦ÇÑ´Ù.
- mkdirit
mkdirit [-v] [-h hostname] dir_name
¼¹ö ±¸Çö °´Ã¼ÀÇ À̸§Àº °èÃþÀûÀ¸·Î
±¸¼ºÇÒ ¼ö ÀÖ´Ù. °¡·É,
bank¼¹ö ¾Æ·¡¿¡ pohang
, seoulµîÀÇ °èÃþÀû ¼¹ö¸¦ ¸¸µé
¼ö ÀÖ´Ù. À̶§
mkdiritÀ»
»ç¿ëÇÑ´Ù.
- rmdirit
rmdirit [-v] [-h hostname] dir_name
mkdiritµî¿¡ ÀÇÇØ
ÀÛ¼ºµÈ µð·ºÅ丮¸¦ »èÁ¦ÇÑ´Ù.
- putit
putit [-v] [-h <host>] [-per-client | -per-client-process]
[ -shared [ -persistent ] | -unshared ]
[ -marker <marker>] |
[ -per-method ] [ -method <method> ]
<serverName> <commandLine>
ÀÌ ¸í·É¾î´Â ¾Õ¼ »ç¿ëÇÑ °Íó·³ IR¿¡
±¸ÇöµÈ ¼¹ö ±¸Çö °´Ã¼ÀÇ À§Ä¡Á¤º¸¿Í À̸§À» ¸í½ÃÇÒ ¼ö ÀÖµ¥ ÇØ ÁØ´Ù.
- psit
psit [ -v ] [ -h hostname ]
ÀÌ ¸í·É¾î´Â Orbixd¿¡
¾Ë·ÁÁø ¼¹ö ±¸Çö °´Ã¼ÀÇ ¸ñ·ÏÀ» ¾Ë·Á ÁØ´Ù.
- killit
killit [ -v ] [ -h hostname ] [-m marker] server_name
¼¹ö ±¸Çö °´Ã¼¸¦ »èÁ¦ÇØ ÁØ´Ù.
- pingit
pingit [ -v ] [ -h hostname ]
Orbixd µ¥¸óÀÇ »ý»ç
¿©ºÎ¸¦ È®ÀÎÇØ ÁØ´Ù.
- chmodit
chmodit [ -v ] [ -h hostname ] server_name
[ i{+,-}{user_name,group_name} | l{+,-}{user_name,group_name} ]
IRÀÇ ¼ÒÀ¯±ÇÇÑÀ»
º¯°æÇÒ ¶§ »ç¿ëÇÑ´Ù.
- chownit
chownit [ -v ][-R] [ -h hostname ] server_or_dir_name new_owner
IR¿¡ ´ëÇÑ Á¢±Ù±ÇÇÑÀ»
Á¶Á¤ÇÒ ¶§ »ç¿ëÇÑ´Ù.
- °¢ ¿É¼Ç¼³¸í
-v ÇÁ·Î±×·¥ÀÇ ¹öÀüÁ¤º¸¸¦ ¾Ë·Á ÁØ´Ù.
-R ¸ðµç µð·ºÅ丮³ª IR¿¡ ´ëÇØ ¹Ýº¹ÀûÀ¸·Î ¸í·É¾î¸¦ Àû¿ëÇÑ´Ù.
-h Àû¿ëÇϰíÀÚ
Çϴ ȣ½ºÆ® À̸§À̳ª IRÀ»
¸í½ÃÇÑ´Ù.
=========================================================================
À§ÀÇ ³»¿ëÀ» ÃæºÐÈ÷ ÀÌÇØÇßÀ¸¸®¶ó ¹Ï°í
ÀÌÁ¦´Â º»°ÝÀûÀ¸·Î CORBA ÀÀ¿ë
ÇÁ·Î±×·¥À» ÀÛ¼ºÇغ¸ÀÚ. CORBA ÀÀ¿ë
ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â µ¥¿¡´Â ±âº»ÀûÀ¸·Î ´ÙÀ½ÀÇ 3
´Ü°è¸¦ °ÅÄ£´Ù.
´Ü°è1) IDL ÆÄÀÏ ÀÛ¼º ¹× ÄÄÆÄÀÏ
´Ü°è2) Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö ±¸Çö ÄÚµå ÀÛ¼º
´Ü°è3) ´Ü°è1ÀÇ »êÃâ¹°°ú ´Ü°è2ÀÇ »êÃâ¹°À» ÅëÇÕÇÏ¿© Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö ¹ÙÀ̳ʸ® ÄÚµå
»ý¼º
ÀÌµé °¢ ´Ü°è´Â ´ÙÀ½ÀÇ 7´Ü°è·Î ¼¼º°ÇÒ ¼ö ÀÖ´Ù.
´Ü°è1) IDLÀÛ¼º
´Ü°è2 ) IDL ÄÄÆÄÀÏ
´Ü°è3) ¼¹ö ±¸Çö °´Ã¼ ±¸Çö
´Ü°è4) Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö ¸ÞÀÎ ºÎºÐ ÀÛ¼º
´Ü°è5) ¼¹ö ±¸Çö °´Ã¼¿Í Ŭ¶óÀÌ¾ðÆ® ½ÇÇàÆÄÀÏ ÀÛ¼º
´Ü°è6) ±¸Çö °´Ã¼ÀÇ ±¸Çö ÀúÀå¼Ò¿¡ ½ÇÇà Á¤º¸ ÀúÀå
´Ü°è7) Ŭ¶óÀ̾ðÆ®
ÇÁ·Î±×·¥ ½ÇÇà
´ÙÀ½ [±×¸²4-11]Àº CORBA¿¡¼ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °³¹ß°úÁ¤À» µµ½ÄÈÇÑ °ÍÀÌ´Ù. ¸ÕÀú Á¦1´Ü°è·Î ÇØ´ç Ŭ·¡½º¸¦ IDL ¹®¹ý¿¡ ¸Â°Ô ÀÛ¼ºÇÑ´Ù. ÀÏ´Ü ÀÛ¼ºµÈ IDLÆÄÀÏÀº IDLÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ¼ Ŭ¶óÀÌ¾ðÆ®¿ë ½ºÅͺê ÄÚµå¿Í ±¸Çö °´Ã¼ÀÇ ½ºÄÌ·ÎÅÏÀ» »ý¼ºÇØ ³½´Ù. ÀÏ´Ü CORBA ¿¡ ÀÇÇØ¼ ÀÚµ¿ÀûÀ¸·Î »ý¼ºµÈ ÄÚµå´Â ³×Æ®¿÷ ºÎºÐÀ» À§ÇÑ Äڵ常 Á¦°øµÇ±â ¶§¹®¿¡ ÇÊ¿äÇÑ ·ÎÁ÷À» ±¸ÇöÇØ¾ß ÇÑ´Ù. µû¶ó¼ Á¦2´Ü°è·Î Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö ÇÁ·Î±×·¥ÀÇ ·ÎÁ÷À» ±¸ÇöÇÑ´Ù. ±×¸®°í ¸¶Áö¸·À¸·Î Á¦3´Ü°è¿¡¼ ÀÌ ¸ðµç °ÍÀ» ÄÄÆÄÀÏÇÏ°í ¸µÅ©ÇÑ ÈÄ ¿øÇÏ´Â ¹ÙÀ̳ʸ®¸¦ »ý¼ºÇÑ´Ù.
ÀÌ °úÁ¤À» Á¤È®È÷ ÀÌÇØÇÏ´Â °ÍÀÌ CORBAÇÁ·Î±×·¥ÀÇ
ù°ÉÀ½ÀÌÀÚ °¡Àå Áß¿äÇÑ ºÎºÐÀÌ´Ù.
[ ±×¸²4-11]
CORBA ÀÀ¿ëÇÁ·Î±×·¥ °³¹ßÀýÂ÷
´ÙÀ½Àº °¢ ´Ü°èº°·Î grid ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ¿¹ÀÌ´Ù.
´Ü°è1) IDLÀÛ¼º
¹× ÄÄÆÄÀÏ
[±×¸²4-11]¿¡¼
ó·³ ¸ÕÀú CORBA ÇÁ·Î±×·¡¸Ó´Â
°³¹ßÇϰíÀÚ ÇÏ´Â ÀÀ¿ë½Ã½ºÅÛÀ» µðÀÚÀÎ ÇÑ ÈÄ CORBA¿¡¼
Á¦°øÇÏ´Â IDL(Interface Definition Language)À»
ÀÌ¿ëÇÏ¿© ÇØ´ç Ŭ·¡½ºÀÇ ¸í¼¼¸¦ ÀÛ¼ºÇÑ´Ù. µû¶ó¼
CORBA ÇÁ·Î±×·¡¸Ó´Â
IDL ¸í¼¼¸¦
ÀÌÇØÇØ¾ß ÇÑ´Ù.
interface grid
{
readonly attribute short height;
readonly attribute short width;
void set(in short n, in short m, in long value);
long get(in short n , in short m);
}
[ ¿¹Á¦4-2
] gridŬ·¡½ºÀÇ IDL±¸Çö
(grid.idl)
ÀÏ´Ü ÀÛ¼ºµÈ IDLÆÄÀÏ(
grid.idl )Àº IDLÄÄÆÄÀÏ·¯¿¡
ÀÇÇØ¼ ÄÄÆÄÀϵȴÙ. IDLÄÄÆÄÀÏ·¯´Â
Ŭ¶óÀÌ¾ðÆ®¿ë ½ºÅͺê ÇÁ·Î±×·¥°ú ¼¹ö¿ë ½ºÄÌ·ÎÅÏ ÇÁ·Î±×·¥,
±×¸®°í ÀÌ µÎ ÇÁ·Î±×·¥¿¡ °øÅëÀûÀ¸·Î
»ç¿ëÇÏ´Â Çì´õÆÄÀÏÀ» »ý¼ºÇØ ³½´Ù. ÀÌ
°úÁ¤À» ÅëÇØ »ç¿ëÀÚ´Â ºÐ»ê ÇÁ·Î±×·¥½Ã ÇÊ¿äÇÑ ³×Æ®¿÷ Äڵ带 IDLÀ»
ÅëÇØ ÀÚµ¿ÀûÀ¸·Î ¾òÀ» ¼ö ÀÖ´Ù. ¿¹¸¦
µé¾î , ½ÇÁ¦
idl·Î ÀÛ¼ºµÈ
grid.idl ÆÄÀÏÀº
idl ÄÄÆÄÀÏ·¯¸¦
ÅëÇØ C++ ÇüÅ·Î
º¯È¯µÈ´Ù. À̶§
interface´Â
class·Î
attribute´Â
¸â¹ö µ¥ÀÌŸ·Î º¯È¯µÈ´Ù. ´Ù½Ã
¸»ÇØ ÇØ´ç idl ÆÄÀÏÀº
C++·ÎÀÇ
º¯È¯±ÔÄ¢¿¡ µû¶ó C++ÆÄÀÏ·Î
º¯È¯µÈ´Ù.
´Ü°è 2) grid.idlÀÇ
ÄÄÆÄÀÏ
ÀÏ´Ü ¿øÇϴ Ŭ·¡½º¸¦ idlÀ»
ÅëÇØ ÀÛ¼ºÇÑ ÈÄ »ç¿ëÀÚ´Â ÇØ´ç idlÆÄÀÏÀ»
C++ÇüÅÂÀÇ
¼Ò½ºÄÚµå·Î º¯È¯Çϱâ À§ÇÑ ÀÛ¾÷À» ÁøÇàÇØ¾ß ÇÑ´Ù.
Orbix¿¡¼´Â À̸¦ À§ÇØ idl
ÄÄÆÄÀÏ·¯¸¦ Áö¿øÇÑ´Ù.
´ÙÀ½Àº ½ÇÁ¦ grid.idlÀ»
ÄÄÆÄÀÏÇÏ´Â »óȲÀÌ´Ù.
% idl -B grid.idl
½ÇÁ¦ idlÄÄÆÄÀÏ·¯´Â
´ÙÀ½ÀÇ Çì´õ ÆÄÀϰú ¼Ò½º ÄÚµåµéÀ» »ý¼ºÇØ ³½´Ù.
¿©±â¼ -B¿É¼ÇÀº
BOA(Basic Object Adapter)ÀÇ
ÀÌ¿ëÀ» ÀǹÌÇÑ´Ù. µû¶ó¼
BOA¸¦ ÀÌ¿ëÇÏ´Â
µ¥ ÇÊ¿äÇÑ ±â´É¸¸À» »ý¼ºÇØ ³½´Ù.
grid.hh , grids.cpp , gridc.cpp
ÀÌ ÆÄÀÏ¿¡´Â gridŬ·¡½º¸¦
³×Æ®¿÷»óÀÇ ¼·Î ´Ù¸¥ °÷À̳ª ¼·Î ´Ù¸¥ ¸Þ¸ð¸® °ø°£³»¿¡ À§Ä¡½ÃŰ´Â
°¢Á¾ Åë½Å ±â´ÉµéÀÌ Æ÷ÇԵǾî ÀÖ´Ù. ½ÇÁ¦
ÀÌ ÆÄÀϵéÀº »ç¿ëÀÚµéÀÌ º¯°æÇÒ ÇÊ¿ä¾øÀÌ ÃÖÁ¾ ÇÁ·Î±×·¥ ÄÄÆÄÀϽÃ
ÀÌ¿ëµÈ´Ù. °¢
ÆÄÀÏÀÇ ÁÖ¿ä ³»¿ëÀº ´ÙÀ½°ú °°´Ù.
// grid.hh
grid.hh ÆÄÀÏ¿¡´Â
OrbixÀÇ
ÃÖ»óÀ§ ·çÆ® Ŭ·¡½ºÀÎ CORBA.h¸¦
ÀÎŬ·çµåÇÑ´Ù. CORBA.h¿¡´Â
OrbixÀ»
¿î¿ëÇÏ´Â µ¥ ÇÊ¿äÇÑ °¢Á¾ flag¿Í
exception Ŭ·¡½º
µî °¢Á¾ ½Ã½ºÅÛ Å¬·¡½º°¡ Á¤ÀǵǾî ÀÖ´Ù.
¶ÇÇÑ grid.hh¿¡´Â
Å©°Ô ´ÙÀ½ÀÇ 5°¡Áö
Ŭ·¡½º ¼±¾ðÀ» °®°í ÀÖ´Ù.
ÇØ´ç °´Ã¼¸¦ µð½ºÆÐÄ¡Çϴµ¥ ÇÊ¿äÇÑ ¸Þ¼Òµå°¡
¼±¾ðµÇ¾î ÀÖ´Ù.
grid.idl·Î ÀÛ¼ºµÈ
grid ÀÎÅÍÆäÀ̽º´Â
idl ÄÄÆÄÀÏ·¯¸¦
ÅëÇØ ´ÙÀ½°ú °°ÀÌ º¯È¯µÈ´Ù. interface¶õ
Ű¿öµå´Â class·Î
°¢°¢ÀÇ attribute´Â
¸Þ¼Òµå·Î º¯È¯µÈ´Ù. ÀÌ·¯ÇÑ
°úÁ¤Àº idlÀ»
C++·Î º¯È¯½ÃŰ´Â
±ÔÄ¢¿¡ ÀÇÁ¸ÇÑ´Ù. ´ÙÀ½Àº
gridÀÎÅÍÆäÀ̽º°¡
C++ Ŭ·¡½º·Î
º¯È¯µÈ °á°úÀÌ´Ù.
class grid : public virtual CORBA_Object {
public :
static grid* _bind(...); //overloaded
virtual short height(CORBA:Environment &IT_ENV =
CORBA:default_environment);
virtual short weight(.....);
virtual short set(.....);
virtual short get(.....);
};
[ ¿¹Á¦4-3
] C++·Î º¯È¯µÈ grid.idl
Orbix´Â °´Ã¼¿¡
Á¢±ÙÇÒ ¶§ ÇÁ·Ï½Ã °´Ã¼¸¦ »ý¼ºÇϰí ÀÌ °´Ã¼¸¦ ÅëÇØ ÇØ´ç °´Ã¼¿¡ Á¢±ÙÇÑ´Ù.
À̸¦ À§ÇØ ¸ðµç °´Ã¼´Â ÇÁ·Ï½Ã
°´Ã¼¸¦ »ý¼ºÇϰí Á¶ÀÛÇϱâ À§ÇØ »óÀ§ ÇÁ·Ï½Ã Ŭ·¡½º¸¦ »ó¼Ó¹Þ´Â´Ù.
Orbix¿¡¼ ºÐ»ê°´Ã¼¸¦
ó¸®ÇÏ´Â ¸ðµ¨Àº BOA¸¦
ÀÌ¿ëÇÑ ¹æ¹ý°ú TIE¶ó´Â
¹æ¹ýÀÌ ÀÖ´Ù. BOA´Â
Ãß°¡ÀûÀÎ ±â´É¾øÀÌ Orbix¿¡¼
Á¦°øÇÏ´Â ÀϹÝÀûÀÎ ºÐ»ê±â´ÉÀ» ÀÌ¿ëÇÏ´Â °ÍÀ» ÀǹÌÇÑ´Ù.
ÀÌ °æ¿ì CORBA_object¶ó´Â
Ŭ·¡½º¸¦ »ó¼Ó¹Þ´Â´Ù.
grid client process
server process
grid object proxy target object
[ ±×¸²4-12
] BOA¸¦ ÀÌ¿ëÇÑ ÀϹÝÀûÀÎ °´Ã¼Á¢±Ù
ÀÌ ¹æ¹ý ¿Ü¿¡ TIE¸¦
ÀÌ¿ëÇÑ °´Ã¼Á¢±ÙÀº BOA¿¡¼
Á¦°øÇÏ´Â ±â´ÉÀ» »ó¼Ó¹ÞÁö ¾Ê´Â´Ù. TIE¹æ¹ýÀº
ÀÏ´Ü grid °´Ã¼¸¦
ÀÛ¼ºÇÑ ÈÄ TIE °´Ã¼¿¡
µî·Ï½ÃÅ´À¸·Î¼ °¡´ÉÇÏ´Ù. À̸¦
À§ÇØ grid.hh¿¡´Â
´ÙÀ½ÀÇ Å¬·¡½º¸¦ Á¤ÀÇÇÑ´Ù.
TIE¸¦ ÅëÇÑ °´Ã¼Á¢±ÙÀº
¿øÇÏ´Â °´Ã¼¿¡ Á¢±ÙÇÒ ¶§ TIE°´Ã¼¶ó´Â
Áß°£°´Ã¼¸¦ ÀÏ´Ü»ý¼ºÇϰí À̸¦ ÅëÇØ ¿øÇÏ´Â °´Ã¼¿¡ Á¢±ÙÇÏ´Â °ÍÀ»
ÀǹÌÇÑ´Ù. ´ÙÀ½Àº
TIE°´Ã¼ÀÇ
»ý¼º°ú Á¢±Ù ¿¹ÀÌ´Ù.
grid_i *q = new grid_i(...)
grid *p = new TIE_account(account_i)(q);
q
p
TIE °´Ã¼
½ÇÁ¦ °´Ã¼
[ ±×¸²4-13
] TIE°´Ã¼¸¦ ÀÌ¿ëÇÑ ÀϹÝÀûÀÎ
°´Ã¼Á¢±Ù
// gridC.cpp
gridC.cpp¿¡´Â grid.hh¿¡
Á¤ÀÇÇÑ Å¬·¡½ºÀÇ ¸â¹ö ÇÔ¼öµéÀÌ ±¸ÇöµÇ¾î ÀÖ´Ù.
´Ù½Ã ¸»ÇØ Å¬¶óÀÌ¾ðÆ®°¡ ±¸Çö
°´Ã¼ÀÇ ±¸ÇöºÎºÐ¿¡ ¿ä±¸»çÇ×À» Àü´ÞÇϱâ À§ÇÑ ÇÔ¼öµéÀÌ ±¸ÇöµÇ¾î ÀÖ´Ù.
// gridS.cpp
ÀÌ ÆÄÀÏ¿¡´Â gridÀÇ
¼¹ö ±¸Çö °´Ã¼¿¡¼ ÇÊ¿äÇÑ ¸Þ¼ÒµåÀÎ grid_dispatch::dispatch()°¡
¼±¾ðµÇ¾î ÀÖ´Ù.
#include "gridC.cpp"
grid_dispatch:dispatch();
´Ü°è3) ¼¹ö ±¸Çö °´Ã¼ ±¸Çö
¾Õ¼µµ ¼³¸íÇßÁö¸¸ ºÐ»ê°´Ã¼¿¡¼ Ŭ¶óÀÌ¾ðÆ®´Â
¼¹ö ±¸Çö °´Ã¼¿¡ Á¤ÀÇµÈ Å¬·¡½ºÀÇ ¸Þ¼Òµå¸¦ ¿ø°ÝÁö¿¡¼ È£ÃâÇϰí
ÀÌ °á°ú¸¦ Àü´Þ¹Þ´Â °úÁ¤À» ÅëÇØ ÀÛ¾÷ÇÑ´Ù. Áï,
Ŭ¶óÀÌ¾ðÆ®¿¡¼´Â Á¤ÀÇµÈ ¸Þ¼Òµå¸¸À»
È£ÃâÇÏ°í ±¸Çö °´Ã¼¿¡¼´Â ÀÌ ¸Þ¼Òµå¸¦ ±¸ÇöÇØ¾ß¸¸ ÇÑ´Ù.
µû¶ó¼ ¾Õ¼ grid.idl¿¡¼
Á¤ÀÇÇÑ gridŬ·¡½º¸¦
¼¹ö ±¸Çö °´Ã¼ÂÊ¿¡ ±¸ÇöÇØ¾ß ÇÑ´Ù.
µû¶ó¼ ¸ÕÀú »ç¿ëÀÚ´Â ´ÙÀ½ÀÇ »çÇ×À»
¹Ì¸® °áÁ¤ÇØ¾ß ¸¸ ÇÑ´Ù: ¸ÕÀú
»ç¿ëÀÚ°¡ Á÷Á¢ ¿øÇϴ Ŭ·¡½º¸¦ ÀÛ¼ºÇÒ °ÍÀÎÁö ¾Æ´Ï¸é OrbixÀÇ
idlÀÌ Á¦°øÇÏ´Â
°£´ÜÇÑ ÇÁ·ÎÅäŸÀÔ ÆÄÀÏÀ» ÀÌ¿ëÇÒ °ÍÀÎÁö °áÁ¤Çؾ߸¸ ÇÑ´Ù.
°¡·É, ÀüÇô
OrbixÀÇ
µµ¿òÀÌ ¾øÀÌ ±¸Çö °´Ã¼¸¦ ±¸ÇöÇÏ·Á¸é ¾Õ¼ ¸¸µé¾î µÐ gridBOAImpl
Ŭ·¡½º¸¦ »ó¼Ó¹Þ°Å³ª TIE¹æ½Ä¿¡
µû¶ó Á÷Á¢ Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ±×·¯³ª
OrbixÀÇ
idlÀ» ÀÌ¿ëÇϸé
°£´ÜÇϰí ÀϰüÀûÀ¸·Î ±¸Çö °´Ã¼¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½Àº OrbixÀÇ
idlÀ» ÀÌ¿ëÇÏ¿©
±¸Çö °´Ã¼ÀÇ Äڵ带 ÀÛ¼ºÇÏ´Â ¿¹ÀÌ´Ù.
e:\Orbix22\bin\idl -S grid.idl
¿©±â¼ -S ¿É¼ÇÀº
¼¹öÂÊÀÇ ±¸ÇöºÎºÐ¿¡ ´ëÇÑ ¿øÇüÀ» Á¦°øÇÑ´Ù.
´Ù½Ã ¸»ÇØ »ç¿ëÀÚ°¡ ¼¹öÂÊ¿¡¼
±¸ÇöÇØ¾ß ÇÒ ºÎºÐÀ» ¸í½ÃÇØ ÁÖ´Â °ÍÀÌ´Ù. ¾Õ¼±
¸í·É¾î¸¦ ¼öÇàÇÏ¸é ´ÙÀ½ÀÇ ÆÄÀϵéÀ» »ý¼ºÇس½´Ù.
grid.hh , grids.cpp , gridc.cpp , grid.ih
, grid.ic
¾Õ¼ 3°³ÀÇ ÆÄÀÏ(grid.hh , grids.cpp , gridc.cpp )Àº ¾Õ¼ -B ¿É¼Ç½Ã »ý¼ºµÈ °Í°ú µ¿ÀÏÇÏ´Ù. ±×·¯³ª -C¿¡¼´Â grid.ih¿Í grid.icÀ̶õ ÆÄÀÏÀ» Ãß°¡ÀûÀ¸·Î »ý¼ºÇØ ÁØ´Ù.
½ÇÁ¦ grid.ih
¿Í grid.ic
ÆÄÀÏÀÇ ³»¿ëÀº ´ÙÀ½°ú °°´Ù.
// grid.ih
#ifndef grid_ih
#define grid_ih
#include "grid.hh"
class grid== {
public:
virtual short height (CORBA_Environment &IT_env=CORBA_default_environment);
virtual short width (CORBA_Environment &IT_env=CORBA_default_environment);
virtual void set (short n, short m, long value, CORBA_Environment
&IT_env=CORBA_default_environment);
virtual long get (short n, short m, CORBA_Environment &IT_env=CORBA_default_environment);
};
#endif
// grid.ic
#include "grid.ih"
short grid==:: height (CORBA_Environment &IT_env) {}
short grid==:: width (CORBA_Environment &IT_env) {}
void grid==:: set (short n, short m, long value, CORBA_Environment &IT_env) {}
long grid==:: get (short n, short m, CORBA_Environment
&IT_env) {}
½ÇÁ¦ ¾Æ¹«·± ÄÚµå ³»¿ë¾øÀÌ grid¿¡
´ëÇÑ Å¬·¡½º ¼±¾ð°ú ¸Þ¼Òµå ¼±¾ð¸¸ÀÌ ¹¦»çµÇ¾î ÀÖ´Ù.
»ç¿ëÀÚ´Â ´ÜÁö ÀÌ ÆÄÀÏ¿¡ ÀÚ½ÅÀÇ
·ÎÁ÷¸¸À» Ãß°¡ÇÔÀ¸·Î¼ ¸ðµç ÀÀ¿ë ÇÁ·Î±×·¥ ¿Ï¼ºÇÒ ¼ö ÀÖ´Ù.
½ÇÁ¦ ¾ÆÀÌ¿À³ª»ç¿¡ µû¸£¸é ´ÙÀ½ÀÇ
ÇÁ·Î±×·¥ ±ÔÄ¢¿¡ ÀÇÇØ¼ ÀÀ¿ëÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ±æ ±ÇÀåÇϰí ÀÖ´Ù.
idl¿¡ ÀÇÇØ¼ ÀÛ¼ºµÈ ¸ðµç ÆÄÀÏÀ»
´ÙÀ½°ú °°ÀÌ º¯°æÇÑ ÈÄ »ç¿ëÇ϶ó´Â °ÍÀÌ´Ù.
grid.ih ->
grid_i.h , grid.ic -> grid_i.cc
¹ø°Å·ÓÁö¸¸ ÀÏ´Ü ÀÌ ±ÔÄ¢À» µû¸£¸é Àû¾îµµ
¾î´À ÆÄÀÏÀÌ ±¸Çö °´Ã¼ÂÊÀÇ ÆÄÀÏÀÎÁö ±¸ºÐÇϱ⠽±´Ù.
grid.idl
idl
-s
grid.ih grid.hh grids.cpp gridc.cpp
grid.ic
[ ±×¸²
4-14 ] idl -S ¿¡
ÀÇÇØ¼ »ý¼ºµÈ ÆÄÀϵé
µû¶ó¼ ¾Õ¼ ÆÄÀÏ¿¡ °¢±â ¿øÇÏ´Â ·ÎÁ÷À»
Ãß°¡ÇÑ´Ù. ¿¹¸¦
µé¸é, º»
¿¹Á¦¿¡¼ ·ÎÁ÷À» Ãß°¡ÇÑ grid_i.h , grid_i.cc
ÆÄÀÏÀº ´ÙÀ½°ú °°´Ù.
// »õ·Î ÀÛ¼ºµÈ grid_i.h
// ¼¹ö gridŬ·¡½º´Â
BOA±â´ÉÀ»
ÀÌ¿ëÇÏ¿´À½
#include "grid.hh"
class grid_i : public gridBOAImpl {
short m_height; // store the height
short m_width; // store the width
long **m_a; // a 2-D array to store the grid data itself
public:
grid_i(short h, short w);
virtual ~grid_i();
virtual short width(CORBA_(Environment) &env);
virtual short height(CORBA_(Environment) &env);
virtual void set(short n, short m, long value,
CORBA_(Environment) &env);
virtual long get(short n, short m,
CORBA_(Environment) &env);
};
// »õ·Î ÀÛ¼ºµÈ grid_i.cc
#include "grid_i.h"
grid_i::grid_i(short h, short w) {
m_height=h; // set up height
m_width=w; // set up width
m_a = new long* [h];
for (int i = 0; i < h; i++ )
m_a[i] = new long[w];
}
grid_i::~grid_i() {
// free the individual 1-D arrays:
for (int i = 0; i < m_height; i++)
delete[] m_a[i];
// then free the overall array:
delete[] m_a;
}
short grid_i::height(CORBA(Environment) &) {
return m_height;
}
short grid_i::width(CORBA(Environment) &) {
return m_width;
}
void grid_i::set(short n, short m, long value, CORBA(Environment) &) {
m_a[n][m] = value;
}
long grid_i::get(short n, short m, CORBA(Environment) &) {
return m_a[n][m];
}
´Ü°è4) Ŭ¶óÀ̾ðµå¿Í ±¸Çö °´Ã¼ÀÇ ¸ÞÀÎ ÇÁ·Î±×·¥ ÀÛ¼º
Ŭ¶óÀÌ¾ðÆ® ºÎºÐ°ú ±¸Çö °´Ã¼ ºÎºÐ¿¡
ÇÊ¿äÇÑ ¸ðµç Ŭ·¡½ºÀÇ ÀÛ¼ºÀÌ ³¡³ ÈÄ ¸¶Áö¸·À¸·Î ÇØ¾ß ÇÒ ÀÏÀº °¢
ºÎºÐ¿¡ ÇÊ¿äÇÑ ¸ÞÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ´Ù.
Áï, 2°³ÀÇ
¸ÞÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ µÈ´Ù. ÀÌ
¶§ ÀÛ¼º¿ä·ÉÀº ´ÙÀ½°ú °°´Ù.
1) ÇØ´ç Ŭ·¡½º ¼±¾ð(grid *p;)
2) ±¸Çö °´Ã¼ÀÇ ±¸ÇöºÎºÐ°ú ÇØ´ç Ŭ·¡½º¸¦ ¹ÙÀεù( p = grid::_bind(); )
3) ÇØ´ç Ŭ·¡½ºÀÇ
¸Þ¼Òµå È£Ãâ( p->height(); )
´ÙÀ½Àº ½ÇÁ¦ ±¸Çö °´Ã¼ÂÊÀÇ grid_iŬ·¡½º¸¦
ÀÌ¿ëÇϴ Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÌ´Ù.
// grid Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥
#include "grid.hh"
#include <iostream.h>
#include <stdlib.h>
main (int argc, char **argv) {
grid* p; // pointer the grid object that will be used.
short h, w;
long v , v1;
if (argc < 2) {
cout << "usage: " << argv[0] << " <hostname>" << endl;
exit (-1);
}
TRY {
// First bind to the grid object.
// argv[1] has the hostname (if any) of the target grid object;
// The default is the local host:
p = grid::_bind("", argv[1], IT_X);
} CATCHANY {
// an error occurred while trying to bind to the grid object.
cerr << "Bind to object failed" << endl;
cerr << "Unexpected exception " << IT_X << endl;
exit(1);
} ENDTRY
TRY {
// try to read the height and width of the grid:
h = p->height(IT_X);
w = p->width(IT_X);
} CATCHANY {
// an error occurred while trying to read the height and width:
cerr << "call to height or width failed" << endl;
cerr << "Unexpected exception " << IT_X << endl;
exit(1);
} ENDTRY
// no problem reading the height and width:
cout << "height is " << h << endl;
cout << "width is " << w
<< endl;
TRY {
// try to set element [2,4] of the grid - to value 123
p->set(2, 4, 123, IT_X);
p->set(2, 5, 1235, IT_X);
// then read back what we have just set:
v = p->get(2, 4, IT_X);
v1 = p->get(2, 5, IT_X);
} CATCHANY {
// an error occurred while calling set or get:
cerr << "Call to set or get failed" << endl;
cerr << "Unexpected exception " << IT_X << endl;
exit(1);
} ENDTRY
// no problem setting and getting the elememt:
cout << "grid[2,4] is " << v << endl;
cout << "grid[2,5] is " <<
v1 << endl;
// sanity check: make sure we got the value 123 back:
if ( v != 123 ) {
// oops - we didn't:
cerr << "something went seriously wrong" << endl;
exit(1);
}
delete p;
}
±¸Çö °´Ã¼ÀÇ ¸ÞÀÎ ÇÁ·Î±×·¥Àº ¼¹öÂÊ
Ŭ·¡½ºÀÎ grid_i ¸¦
¼±¾ðÇϰí À̸¦ Ŭ¶óÀÌ¾ðÆ®¿¡¼ »ç¿ë°¡´ÉÇϵµ·Ï ÇØÁÖ¸é µÈ´Ù.
´ÙÀ½Àº ½ÇÁ¦ gridŬ·¡½ºÀÇ
¼¹ö ÇÁ·Î±×·¥ÀÌ´Ù.
// gridServer.C
#include <iostream.h>
#include "grid_i.h"
int main() {
// create a grid object - using the implementation class grid_i
grid_i myGrid(100,100);
TRY {
// tell Orbix that we have completed the server's initialisation:
CORBA(Orbix).impl_is_ready("grid",IT_X);
}
CATCHANY {
// an error occured calling impl_is_ready() - output the error.
cout << IT_X;
}
ENDTRY
// impl_is_ready() returns only when Orbix times-out an idle server
// (or an error occurs).
cout << "server exiting" << endl;
return 0;
}
´Ü°è5) Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö ¹ÙÀ̳ʸ® ¿Ï¼º
ÀÏ´Ü ¸ðµç ÇÁ·Î±×·¥ÀÇ ÀÛ¼ºÀÌ ³¡³µÀ¸¸é
½ºÅͺê¿Í ½ºÄÌ·ÎÅÏ ÄÚµå ±×¸®°í ÀÛ¼ºÇÑ ÇÁ·Î±×·¥µéÀ» ÅëÇÕ ÇÏ¿© ÄÄÆÄÀÏÀ»
ÇÑ ÈÄ ¹ÙÀ̳ʸ®¸¦ »ý¼ºÇÑ´Ù: client.exe , server.exe
´Ü°è6) ±¸Çö °´Ã¼ÀÇ ±¸Çö ÀúÀå¼Ò¿¡ ½ÇÇàÁ¤º¸ ÀúÀå
Orbix´Â ½ÇÁ¦ ¼öÇà½Ã
½ÇÇà µ¥¸ó(orbixd)ÀÇ
ÀÇÇØ¼ ¿øÇÏ´Â ¼¹öÂÊÀÇ ±¸ÇöºÎºÐÀ» ±¸µ¿½ÃŲ´Ù.
µû¶ó¼ ±¸Çö °´Ã¼ÀÇ ½ÇÇà µ¥¸óÀÎ
Orbixd°¡
ÇØ´ç ±¸ÇöºÎºÐÀ» ±¸Çö ÀúÀå¼Ò¿¡¼ ãÀ» ¼ö ÀÖµµ·Ï ÇØÁÖ¾î¾ß ÇÑ´Ù.
ÀÌ °úÁ¤Àº OrbixÀÇ
putitÀ̶ó´Â
¸í·É¾î¸¦ ÅëÇØ¼ ÀÌ·ç¾îÁø´Ù.
putit gridserver d:\orbix22\demo\grid\server.exe
ÀÌ ¿¹´Â gridserver¶ó´Â
¼¹ö À̸§ÀÇ ±¸ÇöºÎºÐÀÌ ÇØ´ç À§Ä¡( d:\orbix22\demo\grid\server.exe
)¿¡ ÀÖ´Ù´Â Á¤º¸¸¦ ±¸Çö ÀúÀå¼Ò¿¡
ÀúÀåµÈ´Ù. ½ÇÁ¦
ÀúÀåµÇ´Â ³»¿ëÀº ´ÙÀ½°ú °°´Ù.
//grid.imp
Name : gridserver
Comms : xdr/tcp
Activation : shared
Owner : Administrator
Launch : ;
Invoke : ;
Marker Launch Command
* D:\ORBIX22\DEMO\GRID\SERVER.EXE
½ÇÁ¦ ±¸Çö °´Ã¼ÀÇ À̸§°ú Åë½Å ¹æ¹ý,
±¸Çö °´Ã¼ÀÇ ±¸µ¿ ¸ðµå(shared),
¼ÒÀ¯ÀÚ,
½ÇÁ¦ À§Ä¡ µîÀÇ Á¤º¸°¡ Æ÷ÇԵȴÙ.
´Ü°è7) Ŭ¶óÀÌ¾ðÆ® ¹ÙÀ̳ʸ® ½ÇÇà
½ÇÁ¦ ±¸Çö ÀúÀå¼Ò¿¡ ¸ðµç µî·ÏÀÌ ³¡³ª°í
Orbixd ½ÇÇà
µ¥¸óÀ» ¼öÇà½ÃÄ×´Ù¸é ¸ðµç Áغñ°¡ ³¡³ ¼ÀÀÌ´Ù.
ÃÖÁ¾ÀûÀ¸·Î ¼¹ö¿Í Ŭ¶óÀ̾ðÆ®
ÇÁ·Î±×·¥¸¸ ¼öÇà½ÃŰ¸é ¿ø°ÝÁöÀÇ ¼¹ö¸¦ ÀÌ¿ëÇÏ¿© ¿øÇÏ´Â ÀÛ¾÷À» ¼öÇàÇÒ
¼ö ÀÖ´Ù.
[ ±×¸²4-15
] ÀÛµ¿ÁßÀÎ Orbixd
µ¥¸ó ÇÁ·Î±×·¥
Âü°í·Î, ÇØ´ç
ÇÁ·Î±×·¥À» ¼öÇàÇÒ ¶§ ¹Ì¸® TCP/IP ¿¬°áÀÌ
¼öÇàµÇ°í ÀÖ¾î¾ß ÇÑ´Ù. µû¶ó¼
³×Æ®¿÷ ȯ°æÀÌ ±¸ÃàµÇ¾î ÀÖÁö ¾Ê´Ù¸é ÇØ´ç ÇÁ·Î±×·¥µéÀ» ½ÇÇàÇÒ ¼ö
¾ø´Ù.
2.2 PowerBroker¸¦
ÀÌ¿ëÇÑ CORBA ÇÁ·Î±×·¡¹Ö
¾Õ¼ Orbix¸¦
ÀÌ¿ëÇÏ¿© grid¶ó´Â
°£´ÜÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ¸é¼ À̸¦ ºÐ¼®ÇØ º¸¾Ò´Ù.
ÀÌÁ¦ CORBAÀÇ
ÀÛµ¿ ¸ÞÄ¿´ÏÁòÀ» ¿Ïº®È÷ ÀÌÇØÇßÀ» °ÍÀÌ´Ù. À̹ø¿¡´Â
¿¢½ºÆÛ¼ÒÇÁÆ®ÀÇ PowerBroker¶ó´Â
Á¦Ç°À» ÀÌ¿ëÇÏ¿© Á» ´õ º¹ÀâÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇغ¸ÀÚ.
2.2.1 ÇÁ·Î±×·¥
ÁøÇà ¼ø¼
2.2.2 ÇÁ·Î±×·¡¹Ö
ȯ°æ
2.2.3 ½Ã³ª¸®¿À
ÀÌ ÇÁ·Î±×·¥Àº DB(¿¹Á¦¿¡¼´Â
´Ü¼ø ÅØ½ºÆ® ÆÄÀÏÀ» »ç¿ë)¿¡
ÀúÀåµÇ¾î Àִ ȸ»çÀÇ ÁÖ½Ä ½Ã¼¼¸¦ ¾Ë¾Æº¸´Â ÇÁ·Î±×·¥À¸·Î ÇÑ È¸»çÀÇ
ÁÖ½Ä ½Ã¼¼¸¦ ¾Ë¾Æº¸´Â ¹æ¹ý°ú ¿©·¯ ȸ»çµéÀ» ±×·ìÈ ÇÏ¿© ÇØ´ç ±×·ì¿¡
¼ÓÇØ Àִ ȸ»çµéÀÇ ÁÖ½Ä ½Ã¼¼¸¦ ¾Ë¾Æº¸´Â ³»¿ëÀ¸·Î ÀÛ¼ºµÇ¾î ÀÖ´Ù.
±¸Çö °´Ã¼´Â ¼ºñ½º°¡ ÇϳªÀÎ
±¸Çö °´Ã¼¸¦ °ü¸®Çϸç, ´Ù¼öÀÇ
Ŭ¶óÀÌ¾ðÆ®¿¡¼ µ¿½Ã¿¡ ÇϳªÀÇ ±¸Çö °´Ã¼·ÎºÎÅÍ ¼ºñ½º¸¦ ¹Þ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
[±×¸² 4-16
] ÂüÁ¶
2.2.4 IDL ÀÛ¼º
getQuote() - ȸ»ç¸í(symbol)À» ¹Þ¾Æ ±× ȸ»çÀÇ Áֽݪ(quote)À» ¸®ÅÏ
createGroup()-¼¼°³ÀÇ È¸»ç¸í(sym1,sym2,sym3)À¸·Î ±¸¼ºµÈ ±×·ì¸í (groupName)À» »ý¼ºÇÏ°í ¼º°øÇϸé TRUE ¹Ýȯ
getGroupQuote() - ±×·ì¸í groupNameÀ» ¹Þ¾Æ °¡Àå ÃÖ±ÙÀÇ ÁֽĽü¼¸¦ ¹ÝȯÇϸé TRUE, ½ÇÆÐÇϸé FALSE ¹Ýȯ
typedef float quote;typedef string symbol;interface QuoteService{ quote getQuote(inout symbol stock); boolean createGroup(inout, string groupName, in symbol sym1, in symbol sym2, in symbol sym3); boolean getGroupQuote(inout string groupName, out quote quo1,
out quote quo2, out quote quo3);
boolean getGroupSymbols(inout string groupName, out symbol sym1,
out symbol sym2, out symbol sym3 );
};
2.2.5 IDL ÄÄÆÄÀÏ
IDL ÄÄÆÄÀÏ·¯´Â
´ÙÀ½°ú °°Àº ³× °³ÀÇ ÆÄÀÏÀ» ¸¸µé¾î ³½´Ù.
[ ±×¸² 4-17
] IDL ÄÄÆÄÀÏ ÈÄ »ý¼ºµÈ ÆÄÀϵé
2.2.6 ¼¹ö ÇÁ·Î±×·¥
ÀÛ¼º
ÀÌÁ¦ IDL ÄÄÆÄÀÏÀÌ
¿Ï·áµÇ°í ¾Õ¼ ¾ð±ÞÇß´ø 4°³
ÆÄÀÏÀÌ ¸¸µé¾î Áö¸é, ÀÌÁ¦
±¸Çö °´Ã¼¸¦ ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ´Ù½Ã
¸»ÇØ QuoteService ±¸Çö
°´Ã¼¿Í ±¸Çö °´Ã¼¸¦ °ü¸®(¼¹ö)ÇÏ´Â
main ÇÁ·Î±×·¥À»
ÀÛ¼ºÇØ¾ß ÇÑ´Ù.
QSVC.H¿Í QSVC_S.H ÆÄÀÏ¿¡¼ °ü½ÉÀ» ²ô´Â Ŭ·¡½º´Â Interface base classÀÎ Class QuoteService¿Í Implementation base classÀÎ Class QuoteService_base_implÀÌ´Ù. QuoteService´Â CORBA::object Ŭ·¡½º·ÎºÎÅÍ »ó¼ÓÀ» ¹ÞÀ¸¸ç, QuoteService_base_implÀº QuoteService·Î ºÎÅÍ »ó¼ÓÀ» ¹Þ´Â´Ù[±×¸²4-18] ÂüÁ¶. ÀÌÁ¦ ÇÁ·Î±×·¡¸Ó´Â QuoteService_implÀ» Á¤ÀÇÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱ⸸ ÇÏ¸é µÈ´Ù.
.
±¸Çö °´Ã¼ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ ÇÁ·Î±×·¡¸Ó´Â
QuoteService Ŭ·¡½º°¡
¼±¾ðµÇ¾î ÀÖ´Â QSVC_S.H¸¦
¹Ýµå½Ã Æ÷ÇÔÇÏ¿©¾ß Çϸç, getQuote(), createGroup(),
getGroupQuote() ¿ÀÆÛ·¹À̼ÇÀ»
QuoteService_impl Ŭ·¡½º¿¡
´Ù½Ã ¼±¾ðÇØ ÁÖ¾î¾ß ÇÑ´Ù. ÀÌÁ¦
Àüü Ŭ·¡½º ¼±¾ð ºÎºÐÀÌ ¸¶¹«¸® µÇ°í ÇÁ·Î±×·¡¸Ó´Â À̵é Ŭ·¡½º¿¡
´ëÇÑ Äڵ常 ÀÛ¼ºÇÔÀ¸·Î ½á ±¸Çö °´Ã¼ÀÇ ÇÁ·Î±×·¥Àº ¿Ï·á°¡ µÈ´Ù.
ÀÌÁ¦ ³²Àº ÀÏÀº ¼¹ö main
ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ´Ù.
¼¹ö ÇÁ·Î±×·¥Àº [±×¸²4-19]¿Í
°°Àº ÀÛ¾÷À» ÇÏ¿©¾ß ÇÑ´Ù.
[ ±×¸²4-19
] ¼¹ö ÇÁ·Î±×·¥
2.2.7 Ŭ¶óÀ̾ðÆ®
ÇÁ·Î±×·¥ ÀÛ¼º
SII¸¦ »ç¿ëÇÏ´Â
Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº ÀÛ¾÷À» ÇÏ¿©¾ß ÇÑ´Ù [
±×¸² 4-18
] ÂüÁ¶.
============================ ¿ä ¾à : PowerBroker ===========================
PowerBroker´Â 1991³â¿¡
1.0 ¹öÁ¯À»
¹ßÇ¥ÇÑ ÀÌÈÄ·Î ÇöÀç±îÁö ¹öÁ¯ 2.0À»
¹ßÇ¥ÇÏ¿´À¸¸ç, CORBA 2.0¿¡¼
Ç¥ÁØÈÇÑ ORBÀÇ
¸ðµç ÄÄÆ÷³ÍÆ®µéÀ» ÁؼöÇÑ ORB¸¦
Á¦°øÇϰí ÀÖ´Ù. ¶ÇÇÑ
º¹ÀâÇÑ ºÐ»ê °´Ã¼ ½Ã½ºÅÛÀ» ¼Õ½±°Ô °ü¸®Çϱâ À§ÇÏ¿© ´Ù¾çÇÑ GUIÅøÀ»
Á¦°øÇϸç, ÀÌ
GUIÅø¿¡´Â
º¸¾È ½Ã½ºÅÛ ¼³Ä¡, ƯÁ¤
¸Ó½®ÀÇ ÄÄÆ÷³ÍÆ® µî·Ï, ±×¸®°í
ÄÄÆ÷³ÍÆ®ÀÇ ½ÃÀÛ µîÀÇ ±â´ÉÀÌ Æ÷ÇԵǾî ÀÖ´Ù.
PowerBroker´Â C++¿Í
½º¸ôÅåÀ» Áö¿øÇÏ´Â µÎ Á¾·ùÀÇ Á¦Ç°ÀÌ ÀÖ´Ù. ¶ÇÇÑ,
ÇÁ·Î±×·¡¸Ó°¡ ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¡¹Ö¿¡¸¸
Àü³äÇÒ ¼ö ÀÖµµ·Ï C++ ±â¹ÝÀÇ
´ë±Ô¸ð ºÐ»ê ½Ã½ºÅÛ °³¹ß ¹× °ü¸®¸¦ À§ÇÑ Extended
C++ Á¦°øÇϰí ÀÖ´Ù.
¿©±â¼´Â Extended
C++Á¦Ç°À» Áß½ÉÀ¸·Î ¼³¸íÇϵµ·Ï
ÇÑ´Ù.
ÁÖ¿ä Æ¯Â¡
¿ø°ÝÁö»óÀÇ ±¸Çö °´Ã¼°¡ ¼ºñ½º¸¦ ÁøÇàÇϰí ÀÖ´Â µ¿¾È ÇÁ·Î±×·¥ÀÌ ÇÁ·Î¼¼½ÌÀ» °è¼Ó ÁøÇà ½Ãų ¼ö ÀÖ´Ù.
´ÜÀÏ ¾²·¹µå ¹× ´ÙÁß ¾²·¹µå Ç÷§Æû ȯ°æÀ» Áö¿øÇÑ´Ù.
ÀÎÅÍÆäÀ̽º ÀúÀå¼ÒÀÇ ÄÄÆ÷³ÍÆ®¸¦ ÆíÁý,
°Ë»ö, ºÎ¶ó¿ì¡
ÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù. ÀÌ
±â´ÉÀ» ÅëÇØ »õ·Î¿î IR Á¤ÀÇ
¹× ¸Å°³º¯¼ö À¯ÇüÀ» Ãß°¡ ¶Ç´Â º¯°æ ÇÒ ¼ö ÀÖÀ¸¸ç IDLÀ»
»ý¼ºÇÒ ¼ö µµ ÀÖ´Ù. ¾Æ¿ï·¯
³×Æ®¿÷ »ó¿¡¼ ´Ù¸¥ »ç¿ëÀÚ°¡ IR ³»¿ëÀ»
º¯°æÇÏ´Â °æ¿ì ´Ù¸¥ »ç¿ëÀÚ¿¡°Ô À̸¦ ÅëÁöÇÏ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù.
Áö¿ø ¼ºñ½º
PowerBrokerÀº ¸í¸í
¼ºñ½º, »ý¸íÁÖ±â
¼ºñ½º,À̺¥Æ®
¼ºñ½º¸¦ Á¦°øÇÑ´Ù. ¸í¸í
¼ºñ½º´Â ±¸Çö °´Ã¼µéÀÇ À§Ä¡¸¦ ã±â À§ÇØ »ç¿ëÀÚ¿¡°Ô Ä£¼÷ÇÑ À̸§À»
°¡Áø ¼öÁ÷Àû µð·ºÅ丮¸¦ Á¦°øÇÑ´Ù. ±×¸®°í
ºü¸¥ 󸮸¦ À§ÇØ ´ÙÁß ¾²·¹µå ±â¹ýÀ» »ç¿ëÇÏ¸ç ºÐ»êµÈ ¸í¸í ¼ºñ½ºÀÇ
ÅëÇÕÀ» Áö¿øÇÑ´Ù
¿ø°Ý ¸Þ¼ÒµåµéÀÇ È£Ãâ ÀÛ¾÷½Ã ºí·°Å·¾øÀÌ ºñµ¿±âÀûÀ¸·Î ¾î´À À§Ä¡¿¡ ÀÖµç »ó°ü¾øÀÌ È£ÃâµÇµµ·Ï ÇÑ´Ù.
¿©·¯ Á¾·ùÀÇ Ç÷§Æû»ó¿¡¼ ¹Ýȯ °ª ¹× ¸Å°³º¯¼ö·Î¼ º¹ÀâÇÑ ÀÓÀÇÀÇ ±¸Çö °´Ã¼ÀÇ Àü´ÞÀ» Áö¿øÇÑ´Ù.
µ¿ÀûÀ¸·Î ±¸Çö °´Ã¼ À̵¿À» Áö¿øÇϱâ À§ÇØ °´Ã¼ °ª ¸Å°³º¯¼ö¸¦ »ç¿ëÇÑ´Ù. ¾îÇø®ÄÉÀ̼ǵéÀº Åõ¸íÇÏ°Ô È£½ºÆ®¿¡¼ È£½ºÆ®·Î ½ÇÇà ÁßÀÎ ±¸Çö °´Ã¼µéÀ» Á÷Á¢ À̵¿ÇÒ ¼ö ÀÖ´Ù. PowerBroker´Â ÀÚµ¿ÀûÀ¸·Î ±¸Çö °´Ã¼ÀÇ »óÅ Á¤º¸¸¦ Àü´ÞÇϰí Ŭ¶óÀ̾ðÆ®ÀÇ ±¸Çö °´Ã¼¿¡ ´ëÇÑ ¿¬°áÀ» Àç¼³Á¤ÇÑ´Ù.
¸í¸í ¼ºñ½º¿Í °°Àº ±¸Çö °´Ã¼ ¼ºñ½º
³»ÀÇ ¿ÀÆÛ·¹ÀÌ¼Ç Á¾·á, ±¸Çö
°´Ã¼ ¹× ÇÁ·Î¼¼½ºÀÇ »ý¼º°ú Á¾·á°°Àº »óÅ º¯È¸¦ º¸°íÇÏ°í °Ë»öÇÒ
¼ö ÀÖ´Â ±â´ÉÀ» ÅëÇØ¼ °´Ã¼µéÀÇ »óŸ¦ ¸ð´ÏÅ͸µÇÒ ¼ö ÀÖ´Ù.
¾îÇø®ÄÉÀ̼ÇÀº Àüü µµ¸ÞÀÎ ¶Ç´Â
ƯÁ¤ È£½ºÆ®¿¡¼ »ç¿ëÇϰíÀÚ ÇÏ´Â À̺¥Æ®¸¦ À̺¥Æ® Ŭ·¡½º ³»¿¡ µî·ÏÇÒ
¼ö ÀÖÀ¸¸ç Extended C++´Â
À̺¥Æ® °ü¸® Ŭ·¡½º¸¦ ÅëÇÏ¿© È¿°úÀûÀ¸·Î ¾îÇø®ÄÉÀ̼ǿ¡°Ô ºñµ¿±â
ÅëÁö¸¦ Àü´ÞÇÒ ¼ö ÀÖ´Ù.
¸ÕÀú PowerBrokerÀº
ÇÁ·Î±×·¥ °³¹ß Ãø¸é¿¡¼ [ ±×¸²
4-19 ]¿Í
°°Àº ±¸Á¶¸¦ °®´Â´Ù. °¢
±¸Á¶ÀÇ ±¸¼º¿ä¼Ò´Â ´ÙÀ½°ú °°´Ù.
- IDL ÄÄÆÄÀÏ·¯
IDL ¼Ò½º¸¦ Àоî
µé¿© Ŭ¶óÀ̾ðÆ®, ±¸Çö
°´Ã¼ Ãø ÇÁ·Î±×·¥À» ¸¸µé¾î ³½´Ù. C++ Çì´õ
ÆÄÀÏÀº Ŭ¶óÀÌ¾ðÆ® , ±¸Çö
°´Ã¼¿¡ Æ÷ÇԵǰí ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ¸µÅ© µÇ´Â C++
½ÇÇà Äڵ尡 Æ÷ÇԵȴÙ.
¶ÇÇÑ ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò ÆÄÀÏÀ»
»ý¼ºÇÑ´Ù.
- ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò ÆÄ¼¿Í ·Î´õ( Interface Repository Parser and Loader , IRPAL)
IDL ÄÄÆÄÀÏ·¯°¡
¸¸µç ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò ÆÄÀÏÀ» ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò ¿£Áø¿¡ µî·ÏÇϰí
ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ °´Ã¼ ÁöÇâÀû ¼³¸í(description)À»
¸¸µé¾î ³½´Ù.
[ ±×¸²4-19
] PowerBrokerÀÇ °³¹ß ±¸Á¶µµ
- ÀÎÅÍÆäÀ̽º ÀúÀå ¼¹ö(Interface Repository Server)
ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò ¿£Áø¿¡¼ ¼öÇà °¡´ÉÇÑ
¹ÙÀ̳ʸ® ÆÄÀÏÀ» ÀúÀåÇÑ´Ù.
- IFR Ž»ö±â
ÀÎÅÍÆäÀ̽º ÀúÀå ¼¹ö¿Í ÆÄÀϵéÀ» °Ë»öÇϰųª
¼öÁ¤ÇÏ´Â ±×·¡ÇÈ ÅøÀÌ´Ù. À̰ÍÀº
CORBA Ç¥ÁØ¿¡¼
Á¤ÀÇÇÑ °ÍÀÌ ¾Æ´Ï¶ó PowerBroker¿¡¼
µ¶ÀÚÀûÀ¸·Î Á¦°øÇÏ´Â À¯Æ¿¸®Æ¼ÀÌ´Ù.
¾Õ¼ »ìÆìº»
±¸Á¶°¡ PowerBrokerÀÇ
°³¹ß ±¸Á¶¸¦ »ìÆìº» °ÍÀ̶ó¸é ´ÙÀ½ [±×¸²
4-20 ]˼
PowerBrokerÀÇ
¼öÇà ±¸Á¶¸¦ ³ªÅ¸³½ °ÍÀÌ´Ù.
°¢ ¼öÇà ±¸Á¶´Â ´ÙÀ½°ú °°´Ù.
[ ±×¸²
4-20 ] PowerBroker ¼öÇà
±¸Á¶µµ
- °´Ã¼ ºÐ»ê Ä¿³Î( Object Distribution Kernel, ODK)
ODK´Â [±×¸²4-21]
±¸Á¶¸¦ °®À¸¸ç °´Ã¼ÀÇ ºÐ»ê Åõ¸í¼ºÀ»
°ü¸®Çϴ Ʋ(framework)ÀÌÀÚ
µðÀÚÀÎ ÆÐÅÏÀÌ´Ù. ÀÌ·±
ÆÐÅÏÀº CORBA Ç¥ÁØ¿¡¼´Â
Á¤ÀÇ µÇÁö ¾Ê¾Ò´Ù. ODK´Â
PowerBrokerÀÇ
ÇÙ½ÉÀÌ¸ç ½ÇÇà ½Ã°£ ¶§ ¼öÇàµÇ´Â ÇÁ·Î¼¼½ºÀÌ´Ù.
ODK´Â ´ÙÀ½°ú °°Àº ±â´ÉÀ» ¼öÇàÇÑ´Ù.
* ¸Þ½ÃÁö Çü¼º(Message structure and formatting)
* ¸Å°³º¯¼ö Àü´Þ
* ¾²·¹µå °ü¸®
* ÀÔ/Ãâ·Â °ü¸®
* ºñµ¿±â °ü¸®
* Ŭ¶óÀ̾ðÆ®Ãø Request/Reply °ü¸®
* ±¸Çö °´Ã¼ À§Ä¡¿Í Request °ü¸®
* ±¸Çö °´Ã¼ÀÇ ½ÇÇà°ú Áß´Ü
* °´Ã¼ ÂüÁ¶ÀÚÀÇ
»ý¼º°ú °ü¸®
ÀÌ·± ±â´ÉµéÀÌ Ãß»óÈ µÇ¾î ´Ù¸¥ ÇÁ·Î±×·¥
¾ð¾î, ´Ù¸¥
¿î¿µÃ¼Á¦ , ´Ù¸¥
°´Ã¼ ¸ðµ¨, ´Ù¸¥
³×Æ®¿÷ ȯ°æ µî ¿¡¼µµ Àç»ç¿ëÀ» ¿ëÀÌÇÏ°Ô ÇÑ´Ù.
[ ±×¸²4-21
] ODK ºí·° ±¸¼ºµµ
- CORBA ¶óÀ̺귯¸®
ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò,
DII, DSI, ORB ¿Í BOA
pseudo-objectµî°ú °°Àº CORBA
ÀÎÅÍÆäÀ̽º´Â ÀÀ¿ë ÇÁ·Î±×·¥¿¡
Á¤Àû, µ¿ÀûÀ¸·Î
¸µÅ©°¡ µÉ ¼ö ÀÖµµ·Ï ¶óÀ̺귯¸®·Î ±¸ÇöµÇ¾ú´Ù.
- ÀÎÅÍÆäÀ̽º ÀúÀå¼Ò
IDL·Î ÀÛ¼ºÇÑ ÀÎÅÍÆäÀ̽ºÀÇ
Á¤º¸¸¦ ÀúÀåÇÑ´Ù. µ¿Àû
È£Ãâ½Ã ÀÌ¿ëµÈ´Ù.
- BOA µ¥¸ó
ÁÖ¿ä ±â´ÉÀº ±¸Çö °´Ã¼ÀÇ ½ÇÇà°ú °ü¸®À̸ç
±× ¿ÜÀÇ ±â´ÉÀº ´ÙÀ½°ú °°´Ù.
* Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ ÀÇÇÑ ±¸Çö °´Ã¼ÀÇ ½ÇÇà
* ±¸Çö °´Ã¼ÀÇ °ü¸®¿Í À§Ä¡ ÁöÁ¤
* Á¤ÀÇµÈ ½ÇÇà ±ÔÄ¢ÀÇ ÁýÇà
* ¼¹ö ±¸Çö °´Ã¼¿¡
´ëÇÑ ¼³¸í ÀúÀå
- ±¸Çö°ú ½ÇÇà ÀúÀå¼Ò(Implementation and Executable Repositories)
BOA µ¥¸óÀº Ŭ¶óÀÌ¾ðÆ®¿¡¼
º¸³½ request¸¦
¹Þ¾Æ ½ÇÇà½Ãų ±¸Çö °´Ã¼¸¦ ã´Â´Ù. À̶§
Àû´çÇÑ ¼¹ö ±¸Çö °´Ã¼¸¦ ÁöÁ¤ÇÒ ¼ö ¾øÀ» ¶§ ±¸Çö ÀúÀå¼Ò¿Í ½ÇÇà
ÀúÀå¼Ò¸¦ ã´Â´Ù. ´Ù¸¥
ORB Á¦Ç°°ú´Â
´Þ¸® PowerBroker¿¡¼´Â
±¸Çö°ú ½ÇÇàÀ» ±¸º°ÇÑ´Ù. ±¸ÇöÀº
CORBA ÀÎÅÍÆäÀ̽º
ŸÀÔÀ» ±¸ÇöÇÑ ÄÚÆ®·Î¼ ¿©·¯ ´Ù¸¥ ½ÇÇà ÆÄÀÏ¿¡ ¸µÅ© µÇ¾î »ç¿ëµÈ´Ù.
- ½ÇÇàÀÚ(Activators)
ORB°¡ ÇöÀç ½ÇÇàµÇÁö
¾Ê´Â ±¸Çö °´Ã¼¿¡ ´ëÇÑ ¿äûÀ» ¹Þ¾ÒÀ» ¶§ ÇØ´ç ±¸Çö °´Ã¼ÀÇ ½Äº°ÀÚ¿¡
´ëÇÑ ¸ÅÇÎÀ» ½ÇÇàÀÚ°¡ ´ã´çÇÑ´Ù. Áï,
ORB°¡ ±¸Çö °´Ã¼¿¡ ´ëÇÑ ¿äûÀ»
¹Þ¾ÒÀ» ¶§ ÇØ´ç ŸÀÔ¿¡ ´ëÇÑ ½ÇÇàÀÚ¸¦ ¼öÇà ½ÃŲ´Ù.
½ÇÇàÀÚ´Â ½ÇÇàÇÒ ±¸Çö °´Ã¼¿¡
´ëÇÑ ½Äº°ÀÚ¸¦ ³Ñ°Ü ÁÖ°Ô µÈ´Ù. ÀÌ·¯ÇÑ
½Äº°ÀÚ Á¤º¸´Â µ¥ÀÌŸº£À̽º ÁúÀÇ Å°·Î »ç¿ëµÇ°í ÁúÀÇÀÇ °á°ú·Î¼
»õ·Î¿î ÀνºÅϽº¸¦ ¸¸µé°í À̸¦ ORB¿¡
³Ñ±â°Ô µÈ´Ù. ±×·¯¸é
ORB´Â ¼¹ö
±¸Çö °´Ã¼¸¦ µî·ÏÇϰí Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ½ÇÇàÇÑ´Ù.
- ¸í¸í ¼ºñ½º
CORBA ¼ºñ½º¿¡¼
Á¤ÀÇÇÑ ¸í¸í ¼ºñ½º¸¦ Á¦°øÇϸç ÀÌ·± ¼ºñ½º¸¦ Á¦°øÇÏ´Â ¼¹ö´Â ÇϳªÀ̰í
¿©·¯ È£½ºÆ®¿¡¼ ½ÇÇà µÈ´Ù.
PowerBrokerÀÇ ¸í¸í
¼ºñ½º¸¦ °ü¸®Çϱâ À§ÇÑ GUI ÅøÀÌ´Ù.
½ÇÇà ½Ã¿¡ »ç¿ëÀÚ´Â PowerBrokerÀÇ
À̸§ º¸°ü Àå¼Ò³»¿¡ µî·ÏµÈ Á¤º¸¸¦ ´Ù½Ã ±¸¼ºÇϰųª,
¼öÁ¤ ¹× ºÎ¶ó¿ì¡ ÇÒ ¼ö ÀÖ´Ù.
PowerBrokerÀ» »ç¿ëÇÏ¿©
´Ù¾çÇÑ À̺¥Æ®¿¡ ´ëÇÑ ·Î±× ³»¿ëÀ» ¸¸µé ¼ö ÀÖ´Ù.
·Îµå ÅøÀ» »ç¿ëÇÏ¿© µ¿ÀûÀ¸·Î
·Î±× ³»¿ëÀ» º¼ ¼ö ÀÖ´Ù.
µî·Ï ÅøÀº µ¿ÀûÀÎ ±¸Çö °´Ã¼ÀÇ µî·ÏÀ»
À§ÇØ Á¦°øµÇ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
Ȱ¼ºÈµÈ Ŭ¶óÀ̾ðÆ®, ±¸Çö °´Ã¼°£ÀÇ ¿¬°á »óÅÂ, °ü¸®µÇ´Â ±¸Çö °´Ã¼ ¹× ¾îÇø®ÄÉÀ̼ÇÀÇ ÇÁ·Î¼¼½º »óŸ¦ µ¿ÀûÀ¸·Î º¸¿©ÁÖ´Â °ü¸® ÇÁ·Î±×·¥ÀÌ´Ù. ÀÌ ÅøÀº ¿ø°ÝÁöÀÇ ±¸Çö °´Ã¼¿¡¼ Á¦°øÇÏ´Â ¼ºñ½º¿Í ·ÎÄà ÀÎÅÍÆäÀ̽º »çÀÌÀÇ Åë½Å»óŸ¦ ÃßÀûÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù.
========================================================================
4¸·À» ¸¶Ä¡¸ç
CORBAÀÇ ±âº» öÇÐÀº ÀÌÁ¾ÀÇ È¯°æÇÏ¿¡¼ ƯÁ¤ ±¸Çö¾ð¾î¿¡ Á¾¼ÓµÇÁö ¾Ê´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ¿© ½Ã½ºÅÛÀ» ÅëÇÕÇÏ´Â °ÍÀÌ´Ù. À̸¦ À§ÇØ °¡Àå Áß¿äÇÑ ±â´ÉÀÌ IDL¾ð¾îÀÌ´Ù. IDLÀº C, C++°°Àº ±¸Çö ¾ð¾î°¡ ¾Æ´Ï¶ó »ç¿ëÀÚ°¡ »ý°¢Çϰí ÀÖ´Â ¹®Á¦ÀÇ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇØÁÖ´Â ¾ð¾îÀÌ´Ù.
IDLÀº °´Ã¼ÁöÇâ
°³³äÀ» Áö¿øÇϸç C++À̳ª
ÀÚ¹Ù°°Àº ±¸Çö¾ð¾î·Î º¯È¯µÈ´Ù. »ç¿ëÀÚ´Â
¿øÇÏ´Â IDL ÆÄÀÏÀ»
ÀÛ¼ºÇϰí IDL ÄÄÆÄÀÏ·¯¸¦
ÅëÇØ ¿øÇÏ´Â ¾ð¾î·Î º¯È¯ÇÑ ÈÄ ÇÊ¿äÇÑ ·ÎÁ÷À» Ãß°¡ÇÏ¸é µÈ´Ù.
¿ì¸®´Â ¿©±â¼ Orbix¿Í
PowerBroker¶ó´Â
Á¦Ç°À» »ç¿ëÇÏ¿© ÀÀ¿ë ÇÁ·Î±×·¥À» ÀÛ¼ºÇØ º¸¾Ò´Ù.
[ ´ÙÀ½ | ÀÌÀü ]