Session Facade ÆÐÅÏÀ¸·Î µ¥ÀÌÅ͸¦ ¾ÈÀüÇÏ°Ô °ü¸®Çϱâ
Brett
McLaughlin ÀÛ°¡/ÆíÁýÀÚ, O'Reilly and Associates 2002³â
10¿ù
¿£ÅÍƼ ºóÀ» À¥ Ƽ¾î(tier)¿¡°Ô Á÷Á¢ ³ëÃâÇÏÁö ¾Ê°í
¾ÖÇø®ÄÉÀ̼ǿ¡ »ç¿ëÀÚµéÀÌ ¾×¼¼½º ÇÒ ¼ö ÀÖµµ·Ï ÇÏ·Á¸é? ÇÏÁö¸¸ ÀÌ°ÍÀº ¾ÖÇø®ÄÉÀ̼ǿ¡ º¸¾È À§ÇùÀ» °¡Á®¿Ã ¼ö
ÀÖ´Ù. Brett McLaughlinÀº ¿£ÅÍƼ ºó¿¡´Â ¾ÈÀüÇÏ°í Àüü ¾ÖÇø®ÄÉÀ̼ǿ¡´Â È¿À²ÀûÀÎ ¼Ö·ç¼ÇÀ»
Á¦¾ÈÇÑ´Ù.
Enterprise JavaBeans ±â¼úÀº ¼¼ °³ÀÇ ÇÙ½É ºó(bean) À¯Çü- ¼¼¼Ç(session),
¸Þ½ÃÁö ±¸µ¿(message-driven), ¿£ÅÍƼ(entity)-À¸·Î ³ª´µ¾îÁø´Ù. ±×¸®°í, ºó(bean)Àº
ºñÁö´Ï½º °´Ã¼·Î¼ ÀÛµ¿ÇÏ´Â °Í°ú µ¥ÀÌÅÍ °´Ã¼·Î¼ ÀÛµ¿ÇÏ´Â °ÍÀ¸·Î ³ª´· ¼ö ÀÖ´Ù. ¼¼¼Ç ºó°ú ¸Þ½ÃÁö Á᫐ ºóÀº
ºñÁö´Ï½º °´Ã¼ÀÌ´Ù. ¿£ÅÍƼ ºóÀº µ¥ÀÌÅÍ °´Ã¼ÀÌ´Ù. ´ëºÎºÐ ºñÁö´Ï½º °´Ã¼µéÀº À¥ Ƽ¾î¿¡°Ô ³ëÃâµÇ¾î¾ß ÇÑ´Ù.
ºñÁö´Ï½º °´Ã¼´Â µ¥ÀÌÅÍ ½ºÅä¾î¸¦ ´Ù·ç´Âµ¥ µ¥ÀÌÅÍ °´Ã¼¸¦ »ç¿ëÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ¾î¶² °æ¿ì´Â »ç¿ëÀÚµéÀÌ
µ¥ÀÌÅÍ °´Ã¼¿¡ Á÷Á¢ ¾×¼¼½ºÇؼ Á¶ÀÛÇÒ ÇÊ¿äµµ ÀÖ´Ù. ´Ù½Ã ¸»Çؼ ¿£ÅÍƼ ºóÀ» À¥ Ƽ¾î¿¡°Ô ³ëÃâÇؾßÇÔÀ» ÀǹÌÇÑ´Ù.
ÀÌ°ÍÀº ¾ÖÇø®ÄÉÀ̼ÇÀ» º¸¾È À§Çù ¼Ó¿¡ ³ëÃâÇÏ´Â °ÍÀÌ°í °¡²û Äڵ尡 ±úÁö´Â °æ¿ìµµ »ý±ä´Ù.
³ëÃâÀÇ À§Çè ¿£ÅÍƼ
ºóÀº µ¥ÀÌÅͺ£À̽ºÀÇ ±â¹Ý ±¸Á¶¿¡ ´ëÇØ ¸¹Àº °ÍÀ» µå·¯³»°í ÀÖ´Ù. °¢ ºóÀº µ¥ÀÌÅͺ£À̽ºÀÇ °¢ Çʵ帶´Ù
¾×¼¼¼(accessor)¿Í ¹ÂÅ×ÀÌÅÍ(mutator) ¸Þ¼Òµå¸¦ Æ÷ÇÔÇÏ°í ÀÖ°í ¸Þ¼Òµå À̸§µéÀº º¸Åë ÇʵåÀ̸§°ú
Á¤·ÄµÇ±â ¶§¹®¿¡ ¿£ÅÍƼ ºó¿¡¼ Àüü µ¥ÀÌÅͺ£À̽º ±¸Á¶¸¦ °Ë»öÇÒ ¼ö ÀÖ´Ù. ÇÑ °³ÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡¼´Â ±×´ÙÁö Å«
ÀÏÀº ¾Æ´ÏÁö¸¸ ºóµéÀº ´Ù¸¥ ³×Æ®¿öÅ©»ó¿¡¼ ´Ù¸¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ Á¾Á¾ ³ëÃâµÈ´Ù. ¾ÖÇø®ÄÉÀ̼ǵéÀÌ ´ÙÁß ³×Æ®¿öÅ©¸¦
ÅëÇØ ¿¬°áµÇ¾î ÀÖ´Â À¥ ¼ºñ½º ½Ã½ºÅÛ¿¡¼´Â ƯÈ÷ ±×·¸´Ù.
³ëÃâµÈ ºó: ½ÇÇà
¿¹Á¦
Movie ¶ó´Â ¿£ÅÍƼ ºóÀ» »ý°¢Çغ¸ÀÚ. ÀÌ ºóÀÇ
¸Þ¼Òµå´Â getTitle() ,
getDirector() , getActors() .ÀÌ´Ù.
ºóÀÇ ¿ø°Ý ÀÎÅÍÆäÀ̽º¸¦ ³ëÃâÇ߱⠶§¹®¿¡ ¿©·¯ºÐÀÇ ¾ÖÇø®ÄÉÀ̼ǰú ¿©·¯ Ŭ¶óÀ̾ðÆ® ¾ÖÇø®ÄÉÀÌ¼Ç ¸ðµÎ
getDirector() ¸Þ¼Òµå¸¦ Æ÷ÇÔÇÏ´Â Äڵ带 ÀÛ¼ºÇß´Ù. ÇÏÁö¸¸
¾ÖÇø®ÄÉÀ̼ÇÀÌ ÁøÈÇÏ¸é¼ ´ÙÁß director¸¦ °¡Áø movie¸¦ ¼ö¿ëÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÌ
¸íÈ®ÇØ Á³´Ù. µ¥ÀÌÅͺ£À̽º´Â º¯ÇÏ°í getDirector() ¸Þ¼Òµå´Â
getDirectors() °¡ µÇ¾ú´Ù. ¸Þ¼Òµå°¡ º¹¼öÇüÀÌ°í ´ÜÀÏ °´Ã¼°¡ ¾Æ´Ñ
¸®½ºÆ®¸¦ ¸®ÅÏÇϵµ·Ï ÄÚµùµÇ¾ú´Ù. °á°úÀûÀ¸·Î ¿À·¡µÈ ¸Þ¼Òµå¸¦ »ç¿ëÇÏ´Â ¸ðµç ¸ðµå´Â ±ú¾îÁö°í ¿©·¯ºÐÀÇ
¾ÖÇø®ÄÉÀÌ¼Ç ÄÚµå´Â ÀçÀÛ¼ºµÇ¾î¾ß ÇÑ´Ù. |
µ¥ÀÌÅͺ£À̽º ±¸Á¶¸¦ ¾Ë·ÁÁöÁö ¾ÊÀº ¾ÖÇø®ÄÉÀ̼ǿ¡ µå·¯³¾ °æ¿ì¿¡ ³ªÅ¸³ª´Â ºÐ¸íÇÑ À§Çè »Ó¸¸¾Æ´Ï¶ó µ¥ÀÌÅÍ
±¸Á¶°¡ º¯°æµÉ ¶§ ¾î¶²ÀÏÀÌ ¹ß»ýÇÒ °ÍÀΰ¡¿¡ ´ëÇؼµµ »ý°¢ÇØ¾ß ÇÑ´Ù. ¿£ÅÍƼ ºóÀº µ¥ÀÌÅÍ ±¸Á¶¿Í ¹ÐÁ¢ÇÏ°Ô ¹¿©ÀÖ±â
¶§¹®¿¡ µ¥ÀÌÅͺ£À̽º Å×À̺íÀÇ Ä®·³ÀÌ º¯°æµÇ°Å³ª »õ·Î¿î Ä®·³ÀÌ Ãß°¡µÉ ¶§ ¿£ÅÍƼ ºóµµ Á¾Á¾ º¯ÇÑ´Ù. ¿£ÅÍƼ ºóÀ»
¾ÖÇø®ÄÉÀÌ¼Ç ·¹À̾ ³ëÃâÇÔÀ¸·Î¼ ¸Þ¼Òµå À̸§À» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ°í ÀÌ·¯ÇÑ ¸Þ¼Òµå À̸§µéÀº »õ·Î¿î
¾ÖÇø®ÄÉÀÌ¼Ç Äڵ忡 Ãß°¡µÈ´Ù. ½É°¢ÇÑ ÄÚµå ¿À·ù´Â ¿£ÅÍƼ ºóÀÌ º¯°æµÇ°Å³ª ÁøÈÇÒ ¶§ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.
Session Facade
ÆÐÅÏ ´ÙÇàÈ÷, ¿£ÅÍƼ ºóÀ» À¥ Ƽ¾î¿¡°Ô ³ëÃâÇÏÁö ¾Ê°í µ¥ÀÌÅÍ °´Ã¼·Î »ç¿ëÀÚ ¾×¼¼½º¸¦
°¡´ÉÇÏ°Ô ÇÏ´Â µðÀÚÀÎ ÆÐÅÏÀÌ ÀÖ´Ù. Session Facade ÆÐÅÏÀº ¿£ÅÍƼ ºó°ú ¾ÖÇø®ÄÉÀ̼Ç
Ŭ¶óÀ̾ðÆ® »çÀÌ¿¡ ¼¼¼Ç ºóÀ» ³õ´Â´Ù. ÀÌ°ÍÀº ´Ù¸¥ ¿£ÅÍƼ·ÎÀÇ ¾×¼¼½º¸¦ °ü¸®Çϱ⠶§¹®¿¡ ÀÌ·¯ÇÑ ¹æ½ÄÀ¸·Î ¼¼¼Ç ºóÀ»
»ç¿ëÇÒ ¶§ ¸Å´ÏÀú·Î¼ °£ÁֵȴÙ.
¼¼¼Ç ºóÀº ºñÁö´Ï½º ·ÎÁ÷°ú ¾ÖÇø®ÄÉÀÌ¼Ç ·ÎÁ÷°£ÀÇ ÀÎÅÍÆäÀ̽º·Î ÀÛµ¿Çϵµ·Ï ¼³°èµÇ¾ú´Ù. ½ÇÇà
¿¹Á¦ÀÇ °æ¿ì ·ÎÁ÷Àº ¸Å¿ì °£´ÜÇÏ´Ù. ÇϳªÀÇ ±â¹Ý ¿£ÅÍƼ ºóÀ» È£ÃâÇÏ´Â °ÍÀÌ´Ù. ½ÇÁ¦ ½Ã³ª¸®¿À¿¡¼´Â ¼¼¼Ç
ºóÀÌ µ¥ÀÌÅÍ Å¸´ç¼º°Ë»ç, º¸¾È, ±âŸ ºñÁö´Ï½º ÇÔ¼ö¸¦ °ü¸®Çϵµ·Ï ÇؾßÇÑ´Ù. ¼¼¼Ç ºó¿¡¼ ¿£ÅÍƼ ºóÀ» ·¡ÇÎÇÔÀ¸·Î¼
¿£ÅÍƼ ºó Äڵ带 ¼Õ»ó½ÃÅ°Áö ¾Ê°í ÇÊ¿äÇÑ ºñÁö´Ï½º ÇÔ¼ö¿¡ ¾×¼¼½º ÇÒ ¼ö ÀÖ´Ù.
½ÇÇà ¿¹Á¦¸¦ ºÐ¼®ÇϱâÀ§Çؼ MovieManager ¸¦ È£ÃâÇÏ´Â ¼¼¼ÇºóÀ» ¸¸µé¾î¾ßÇÑ´Ù.
MovieManager ºóÀº ¿À·¡µÈ ¸Þ¼ÒµåÀÎ
getDirector() ¿Í »õ·Î¿î ¸Þ¼ÒµåÀÎ
getDirectors() ¸¦ Æ÷ÇÔÇÏ°Ô µÈ´Ù. »õ·Î¿î ¸Þ¼Òµå°¡ Ãß°¡µÉ ¶§ ¿£ÅÍƼ ºóÀ» ÅëÇØ
"ÇÁ·Ï½ÃÈ(proxied)" µÈ´Ù. ù ¹ø° ¸Þ¼Òµå´Â ÀÌ ¿£ÅÍƼ ºó¿¡¼´Â ´õÀÌ»ó »ç´ÉÇÏÁö ¾Ê±â ¶§¹®¿¡ ¼¼¼Ç ºóÀº
À̸¦ ¼û±â±â À§ÇØ ÇïÆÛ ¸Þ¼Òµå¸¦ »ç¿ëÇÑ´Ù.(Listing 1):
Listing 1. "deprecated" ¸Þ¼Òµå ¼û±â±â
public Person getDirector() {
// We can't call getDirector() any more on the entity bean
// Call the new method, through this manager
List directors = getDirectors();
// Return the first one in the list
return (Person)directors.item(0);
}
|
ÇØ°á¹æ¹ý ¿©±â¿¡¼ ¼³¸íµÈ
¹®Á¦ À¯Çü¿¡ ´ëÇÑ ÀϹÝÀûÀÎ ¼Ö·ç¼ÇÀº ¿£ÅÍƼ ºó¿¡ ÇïÆÛ(helper) ¸Þ¼Òµå¸¦ ´Ü¼øÈ÷ Ãß°¡ÇÏ´Â °ÍÀÌ´Ù.
ÇÏÁö¸¸ ±×·¸°Ô ÇßÀ» ¶§ÀÇ °á°ú´Â Àç¾ÓÀÌ µÉ ¼öµµ ÀÖ´Ù. ¿£ÅÍƼ ºóÀÇ ¸ðµç ¸Þ¼Òµå°¡ Àϳ⿡ ´Ü Çѹø
¹Ù²î´õ¶óµµ ºóÀº ±× ÇØ ¿¬¸» ±îÁö µÎ¹èÀÇ ¸Þ¼Òµå¸¦ ¾ò´Â´Ù. ¸Þ¼Òµå°¡ Àϳ⿡ Çѹø ÀÌ»óÀ¸·Î ºü¸£°Ô
º¯°æÇÑ´Ù´Â °ÍÀ» »ý°¢ÇÑ´Ù¸é "Band-Aid" Á¢±Ù¹æ½ÄÀÌ ¼Ò¿ë¾ø´ÂÁö°¡ ¸í¹éÇØÁø´Ù. ¿£ÅÍƼºóÀÌ µ¥ÀÌÅÍ
°´Ã¼ ó·³ º¸ÀÌÁö ¾Ê°í ÇïÆÛ Å¬·¡½ºÃ³·³ º¸À̱⠽ÃÀÛÇÒ ¶§ ¹®Á¦°¡ ÀÖ´Ù´Â °ÍÀ» ¾Ë°ÔµÈ´Ù. ¹Ý¸é ¼¼¼ÇºóÀº
Á¤È®È÷ ÇïÆÛ Å¬·¡½ºÃ³·³ º¸ÀδÙ. ¿Ö³ÄÇϸé ÇÔ¼ö ¼¼¼Ç ºóµé Áß Çϳª°¡ ¼öÇàµÇµµ·Ï ¼³°èµÇ¾ú±â ¶§¹®ÀÌ´Ù.
|
Listing 1Àº Æ®¸¯À» ¼öÇàÇÏ°í ÀÖ´Ù. ¿À·¡µÈ ¸Þ¼Òµå´Â ¼û°ÜÁ®Àֱ⠶§¹®¿¡ ÀÌ°Í¿¡ ÀÇÁ¸ÇÏ´Â ¸ðµç
¾ÖÇø®ÄÉÀÌ¼Ç ÄÚµå´Â Àß µ¹¾Æ°£´Ù. ¶ÇÇÑ ¼ÓÇØÀÖ´Â ºñÁö´Ï½º °´Ã¼¾È¿¡ À̸¦ À§Ä¡½ÃÄѼ ¿£ÅÍƼ ºó ¹Û¿¡¼ ÇïÆÛ
¸Þ¼Òµå¸¦ À¯ÁöÇÑ´Ù. ±ÞÇÑ ¹®Á¦¸¦ ÇØ°áÇÒ ¶§ ºóÀÇ Å¬¶óÀ̾ðÆ®¸¦ »õ·Î¿î¸Þ¼Òµå·Î ¿Å±â°Å³ª ÇïÆÛ ¸Þ¼Òµå°¡ À̵¿À»
ÇÚµéÇϵµ·Ï ÇÏ´Â ¿É¼ÇÀÌ ÀÖ´Ù. µÎ ¹æ¹ý Áß ¾î¶² °ÍÀ» äÅÃÇÏ´õ¶óµµ ¾ÖÇø®ÄÉÀÌ¼Ç Äڵ峪 Ŭ¶óÀ̾ðÆ® ÄÚµå´Â ÇÇÇظ¦
ÀÔÁö ¾Ê´Â´Ù.
µ¥ÀÌÅÍ ±¸Á¶
¼û±â±â À§ ¼Ö·ç¼ÇÀÌ º¯°æ °ü¸® ¹®Á¦µéÀ» ÇØ°áÇÏÁö¸¸ º¸¾È ¹®Á¦´Â »ç¶óÁöÁö ¾Ê´Â´Ù. ¿£ÅÍƼ
ºóÀÌ À¥ Ƽ¾î¿¡°Ô ³ëÃâµÇÁö ¾Êµµ·Ï º¸È£ÇØ¾ß ÇÑ´Ù. ¸î °¡Áö °£´ÜÇÑ ºñÁö´Ï½º ·ÎÁ÷°ú µ¥ÀÌÅÍ Á¶ÀÛ ÇÔ¼ö¸¦ ¼¼¼Ç ºó¿¡
Ãß°¡ÇÏ¿© ¾ÖÇø®ÄÉÀÌ¼Ç µ¥ÀÌÅ͸¦ ¼û±â°í ¿©±â¿¡ Æ÷ÇÔµÈ Á¤º¸¸¦ ¼¼·ÃµÈ ¹æ½ÄÀ¸·Î Á¢±ÙÇÒ ¼ö ÀÖ´Ù.
¿¹¸¦ µé¾î ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¹ßÀüÇØ°¡¸é¼ »ç¿ëÀÚµéÀÌ ´Ù¾çÇÑ µ¥ÀÌÅÍ¿¡ °³º°ÀûÀ¸·Î ¾×¼¼½ºÇϵµ·Ï ÇÏ´Â °ÍÀÌ
ºñÈ¿À²ÀûÀ̶ó´Â °ÍÀ» ¾Ë°ÔµÈ´Ù. Á¤º¸ À¯ÇüÀº Ç×»ó »óÈ£ÀûÀ¸·Î »ç¿ëµÇ±â ¶§¹®¿¡ ¼¼¼ÇºóÀ» º¯°æÇÏ´Â °ÍÀÌ À¯¿ëÇÏ´Ù.
getDirector() ³ª getDirectors() ¸Þ¼Òµå ´ë½Å
¼¼¼ÇºóÀº »õ·Î¿î ºñÁö´Ï½º ·ÎÁ÷À» °¡Áú ¼ö ÀÖ´Ù(Listing 2):
Listing 2. µ¥ÀÌÅÍ ±¸Á¶¸¦ ¼¼¼Ç ºóÀ¸·Î ¼û±â±â
public List getCrew(String movieName)
throws NamingException, RemoteException {
List crew = new LinkedList();
EJBHomeFactory f = EJBHomeFactory.getInstance();
MovieHome movieHome =
(MovieHome)f.lookup("java:comp/env/ejb/Movie", MovieHome.class);
Movie movie = movieHome.findByName(movieName);
crew.add(movie.getDirectors());
crew.add(movie.getProducers());
crew.add(movie.getExecutiveProducers());
// and so on...
return crew;
}
public List getCast(String movieName)
throws NamingException, RemoteException {
List cast = new LinkedList();
EJBHomeFactory f = EJBHomeFactory.getInstance();
MovieHome movieHome =
(MovieHome)f.lookup("java:comp/env/ejb/Movie", MovieHome.class);
Movie movie = movieHome.findByName(movieName);
crew.add(movie.getActors());
crew.add(movie.getStandIns());
// and so on...
return cast;
}
|
¼·Î ´Ù¸¥ ¾ÖÇø®ÄÉÀÌ¼Ç Æ¼¾îµéÀ» ºÐ¸®ÇÏ°í ºñÁö´Ï½º ·ÎÁ÷À» »ç¿ëÇÏ¿© µ¥ÀÌÅÍ Á¶ÀÛÀ» ÇÚµéÇÔÀ¸·Î¼ Á÷Á¢ÀûÀÌ°í
ºÒ¾ÈÇÑ ¿£ÅÍƼ ºóÀ¸·ÎÀÇ ¾×¼¼½º¸¦ ¹æÁöÇÏ°í À¥ Ƽ¾î¿¡°Ôµµ ÁÁÀº ¸Þ¼Òµå¸¦ ¸¸µé¾ú´Ù. ÀÌ °æ¿ì Session
Facade´Â ¿£ÅÍƼ ºó°ú ºñÁö´Ï½º ·ÎÁ÷ ´ÜÀ§¿¡´Â ·¡Æ۷μ ÀÛ¿ëÇÏ¸é¼ ¿À¸®Áö³Î µ¥ÀÌÅ͸¦ ÀǹÌÀÖ´Â Á¤º¸·Î
¹Ù²Ù¾ú´Ù.
Âü°íÀÚ·á
|