IBM Korea Skip to main content
       IBM Ȩ    |  Á¦Ç° & ¼­ºñ½º  |  °í°´Áö¿ø & ´Ù¿î·Îµå  |  È¸¿ø°¡ÀÔ  

Java theory and practice: JTS ÀÌÇØÇϱâ -- º¸¾È°ú ÆÛÆ÷¸Õ½º ±ÕÇü¸ÂÃß±â
Æ®·£Àè¼Ç °æ°è¼³Á¤°ú °í¸³È­ °¡À̵å¶óÀÎ

Brian Goetz
ÄÁ¼³ÅÏÆ®, Quiotix Corp
2002³â 5¿ù

Column iconJTS ½Ã¸®Á ÅëÇØ BrianÀº Æ®·£Àè¼ÇÀÇ ±âÃÊ¿Í J2EE ÄÁÅ×À̳ʰ¡ Æ®·£Àè¼Ç ¼­ºñ½º¸¦ EJB ÄÄÆ÷³ÍÆ®¿¡ Åõ¸íÇÏ°Ô ÇÒ ¼ö ÀÖ´ÂÁö¸¦ ¼³¸íÇß´Ù. À̹ø¿¡´Â Æ®·£Àè¼Ç °æ°èÈ­¿Í °í¸³È­ °ü¸®¿¡ ÇÊ¿äÇÑ J2EE ±â´ÉÀ» ¼³¸íÇÑ´Ù. ¶ÇÇÑ ±×µéÀ» È¿°úÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â °¡À̵å¶óÀεµ Á¦½ÃÇÑ´Ù.

Part 1 ("JTS ÀÌÇØÇϱâ - Æ®·£Àè¼Ç¿¡ ´ëÇÑ ¼Ò°³")°ú Part 2 ("JTS ÀÌÇØÇϱâ - À帷 µÚÀÇ ¸¶¹ý ")¿¡¼­ Æ®·£Àè¼ÇÀÌ ¹«¾ùÀÎÁö¸¦ Á¤ÀÇÇß°í Æ®·£Àè¼ÇÀÇ ±âº» ¼Ó¼º, Java Transaction Service¿Í J2EE ÄÜÅ×À̳ʰ¡ ÇÔ²² ÀÛµ¿ÇÏ¿© J2EE ÄÄÆ÷³ÍÆ®¸¦ Áö¿øÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇß´Ù. ÀÌÁ¦´Â Æ®·£Àè¼Ç °æ°èÈ­(demarcation)¿Í °í¸³(isolation)¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.

EJB ÄÄÆ÷³ÍÆ®ÀÇ Æ®·£Àè¼Ç °æ°èÈ­¿Í °í¸³ ¼Ó¼ºÀ» Á¤ÀÇÇϴ åÀÓÀº ¾ÖÇø®ÄÉÀÌ¼Ç ¾î¼Àºí·¯¿¡ ÀÖ´Ù. À̵éÀ» ºÎÀûÀýÇÏ°Ô ¼³Á¤Çϸé ÆÛÆ÷¸Õ½º, È®À强, ¾ÖÇø®ÄÉÀ̼ÇÀÇ ³»±¸¼º¿¡ ½É°¢ÇÑ °á°ú¸¦ ÃÊ·¡ÇÒ ¼ö ÀÖ´Ù. ºÒÇàÈ÷µµ ÀÌ·¯ÇÑ ¼Ó¼ºµéÀ» ÀûÀýÈ÷ ¼³Á¤ÇÏ´Â µ¥¿¡ Á¤ÇØÁø ±ÔÄ¢ °°Àº °ÍÀº ¾ø´Ù. ´Ù¸¸ º´Ç༺ À§Çè°ú ÆÛÆ÷¸Õ½º À§Çè »çÀÌ¿¡¼­ ±ÕÇüÀ» ãµµ·Ï µµ¿ÍÁÖ´Â °¡À̵å¶óÀÎÀÌ ÀÖÀ» »ÓÀÌ´Ù.

Part 1¿¡¼­ ´Ù·ç¾úµíÀÌ Æ®·£Àè¼ÇÀº ±âº»ÀûÀ¸·Î ¿¹¿Ü ó¸®(exception-handling) ¸ÅÄ¿´ÏÁòÀÌ´Ù. ¹«¾ùÀΰ¡ À߸øµÇ¾ú´Ù¸é º¹±¸ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁØ´Ù. ½ÇÁ¦·Î ³ª»Û »óÅ°¡ µÇ´Â °ÍÀº °ÅÀÇ ¾ø±â ¶§¹®¿¡ ºñ¿ë°ú ½Ã°£ ÇÒ¾Ö¸¦ ÃÖ¼ÒÈ­ ÇÒ ¼ö ÀÖ´Ù. ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ Æ®·£Àè¼ÇÀ» »ç¿ëÇÏ´Â ¹æ¹ý¿¡ µû¶ó ¾ÖÇø®ÄÉÀÌ¼Ç ÆÛÆ÷¸Õ½º¿Í È®À强¿¡ Å« ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖ´Ù.

Æ®·£Àè¼Ç °æ°èÈ­
J2EE ÄÜÅ×À̳ʴ Ʈ·£Àè¼ÇÀÌ ¾îµð¿¡¼­ ½ÃÀÛÇÏ°í ³¡³ª´ÂÁö¸¦ Á¤ÀÇÇÏ´Â µÎ °¡Áö ¸ÅÄ¿´ÏÁò (ºó °ü¸®(bean-managed) Æ®·£Àè¼Ç°ú ÄÜÅ×ÀÌ³Ê °ü¸®(container-managed) Æ®·£Àè¼Ç)À» Á¦°øÇÑ´Ù. ºó °ü¸® Æ®·£Àè¼ÇÀÇ °æ¿ì UserTransaction.begin()°ú UserTransaction.commit()À» ÀÌ¿ëÇÏ¿© ºó(bean) ¸Þ¼Òµå¿¡¼­ Æ®·£Àè¼ÇÀ» ½ÃÀÛÇÏ°í ³¡³½´Ù. ¹Ý¸é, ÄÜÅ×ÀÌ³Ê °ü¸® Æ®·£Àè¼ÇÀÇ °æ¿ì Á» ´õ ¸¹Àº À¯¿¬¼ºÀ» Á¦°øÇÑ´Ù. ¾î¼Àºí¸® µð½ºÅ©¸³ÅÍ¿¡ °¢ EJB ¸Þ¼Òµå¸¦ À§ÇÑ Æ®·£Àè¼Ç ¼Ó¼ºÀ» Á¤ÀÇÇÔÀ¸·Î¼­ °¢ ¸Þ¼Òµå º°·Î Æ®·£Àè¼Ç ¿ä±¸»çÇ×ÀÌ ¹«¾ùÀÎÁö¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ°í ÄÜÅ×À̳ʰ¡ Æ®·£Àè¼ÇÀ» ¾ðÁ¦ ½ÃÀÛÇÏ°í ³¡³»¾ß ÇÏ´ÂÁö¸¦ °áÁ¤Çϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. µÎ °æ¿ì ¸ðµÎ Æ®·£Àè¼ÇÀ» ¼³°èÇÏ´Â ±âº» °¡À̵å¶óÀÎÀº °°´Ù.

Àü·«
Æ®·£Àè¼Ç °æ°èÈ­ÀÇ Ã¹ ¹ø° ±ÔÄ¢Àº "ª°Ô À¯ÁöÇÒ°Í!" Æ®·£Àè¼ÇÀº º´Çà Á¦¾î¸¦ Á¦°øÇÑ´Ù. ÀÌ°ÍÀº ¸®¼Ò½º ¸Å´ÏÀú°¡ Æ®·£Àè¼Ç °úÁ¤ Áß¿¡ ¾×¼¼½ºÇÑ µ¥ÀÌÅÍ ¾ÆÀÌÅÛÀ» ´ë½ÅÇÏ¿© lockÀ» ¾ò¾î Æ®·£Àè¼ÇÀÌ ³¡³¯¶§±îÁö ±×µéÀ» º¸À¯ÇÏ°í ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¿©·¯ºÐÀÌ lockÀ» º¸À¯ÇÏ°í ÀÖ´Â µ¿¾È¿¡ ´Ù¸¥ Æ®·£Àè¼ÇÀº lockÀ» ÇØÁ¦ÇÒ ¶§±îÁö ±â´Ù¸°´Ù. Æ®·£Àè¼ÇÀÌ ¸Å¿ì ±æ¾îÁö¸é ¸ðµç ´Ù¸¥ Æ®·£Àè¼ÇµéÀº ÀúÁö´çÇÏ°í ¾ÖÇø®ÄÉÀÌ¼Ç ¾²·çDzÀº ³»·Á°¡±â ¸¶·ÃÀÌ´Ù.

Rule 1: Æ®·£Àè¼ÇÀ» °¡´ÉÇÑ ÇÑ Âª°Ô À¯ÁöÇ϶ó!

Æ®·£Àè¼ÇÀ» ª°Ô À¯ÁöÇÔÀ¸·Î¼­ ¾ÖÇø®ÄÉÀ̼ÇÀÇ È®À强À» Çâ»ó½ÃŲ´Ù. Æ®·£Àè¼ÇÀ» °¡´ÉÇÑ Âª°Ô À¯ÁöÇÏ´Â ÃÖ»óÀÇ ¹æ¹ýÀº Æ®·£Àè¼ÇÀÇ Áß°£¿¡ ºÒÇÊ¿äÇÏ°Ô ½Ã°£À» ÇãºñÇÏ´Â ¾î¶² ÀÛ¾÷µµ ¼öÇàÇÏÁö ¾Ê°í Ưº°È÷ Æ®·£Àè¼ÇÀÇ Áß°£¿¡ »ç¿ëÀÚ ÀÎDzÀ» ±â´Ù¸®Áö ¾Ê´Â´Ù.

Æ®·£Àè¼ÇÀ» ½ÃÀÛÇÏ°í µ¥ÀÌÅͺ£À̽º¿¡¼­ µ¥ÀÌÅ͸¦ µµÃâÇÏ¿© µ¥ÀÌÅ͸¦ µð½ºÇ÷¹ÀÌÇÏ°í »ç¿ëÀÚ¿¡°Ô Æ®·£Àè¼Ç µ¿¾È ¼±ÅÃÀ» Çϵµ·Ï ¿äûÇÏ°í ½ÍÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ ÀÌ·¸°Ô ÇÏÁö ¸»±â¸¦ ¹Ù¶õ´Ù. »ç¿ëÀÚ°¡ ÁÖÀǸ¦ ±â¿ïÀÌ´õ¶óµµ ÀÀ´äÇϱ⠱îÁö´Â ¼ö ÃÊ°¡ °É¸®°í ÀÌ´Â µ¥ÀÌÅͺ£À̽º¿¡¼­ lockÀ» º¸À¯Çϱ⿣ ±ä ½Ã°£ÀÌ´Ù. »ç¿ëÀÚ°¡ Á¡½ÉÀ» ¸Ô°Å³ª Áý¿¡ °¡±âÀ§ÇØ ÄÄÇ»ÅÍ¿¡¼­ ¹°·¯³ª±â¶óµµ ÇÑ´Ù¸é ¾î¶»°Ô µÉ±î? ¾ÖÇø®ÄÉÀ̼ÇÀº °£´ÜÈ÷ ¸ØÃß°Ô µÉ °ÍÀÌ´Ù. Æ®·£Àè¼Ç µµÁß¿¡ I/O¸¦ ¼öÇàÇÏ´Â °ÍÀº Àç¾ÓÀ¸·Î °¡´Â ºñ°áÀÌ´Ù.

Rule 2: Æ®·£Àè¼Ç µµÁß »ç¿ëÀÚ ÀÎDzÀ» ±â´Ù¸®Áö ¸»°Í!

°ü·Ã ¿ÀÆÛ·¹À̼ÇÀ» ÇÔ²² ±×·ìÇÎ ÇÒ °Í
°¢ Æ®·£Àè¼ÇÀº Áß´ëÇÑ ¿À¹öÇìµå¸¦ °®°íÀֱ⠶§¹®¿¡ ¿ÀÆÛ·¹ÀÌ¼Ç ´ç ¿À¹öÇìµå¸¦ ÃÖ¼ÒÈ­ÇϱâÀ§ÇØ ´ÜÀÏ Æ®·£Àè¼Ç¿¡¼­ °¡´ÉÇÑ ¸¹Àº ¿ÀÆÛ·¹À̼ÇÀ» ¼öÇàÇÏ´Â °ÍÀÌ ÃÖ»óÀÇ ¹æ¹ýÀ̶ó°í »ý°¢ÇÒ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ Rule 1¿¡ µû¸£¸é ±ä Æ®·£Àè¼ÇÀº È®À强¿¡ ³ª»Ú´Ù°í ÇÑ´Ù. ±×·¸´Ù¸é ¿ÀÆÛ·¹ÀÌ¼Ç´ç ¿À¹öÇìµå¸¦ ÁÙÀÌ´Â °Í°ú È®À强 »çÀÌÀÇ ±ÕÇüÀ» ¾î¶»°Ô ¸ÂÃß¸é µÇ´Â°¡?

Rule 1--Æ®·£Àè¼Ç ´ç ÇÑ ¿ÀÆÛ·¹À̼Ç--À» ³í¸®Àû ¸¶Áö¸· ¼ö´ÜÀ¸·Î ÃëÇÑ´Ù¸é Ãß°¡ÀûÀÎ ¿À¹öÇìµå¸¦ °¡Á®¿Ã »Ó ¾Æ´Ï¶ó ¾ÖÇø®ÄÉÀÌ¼Ç »óÅÂÀÇ ÀÏ°ü¼ºµµ ŸÇùÇÏ°Ô µÈ´Ù. Æ®·£Àè¼Ç ¸®¼Ò½º ¸Å´ÏÀú´Â ¾ÖÇø®ÄÉÀÌ¼Ç »óÅÂÀÇ ÀÏ°ü¼ºÀ» °ü¸®Çϵµ·Ï µÇ¾îÀÖ´Ù. ÇÏÁö¸¸ ±×µéÀº ÀÏ°ü¼ºÀ» Á¤ÀÇÇϱâ À§ÇØ ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀÇÁ¸ÇÑ´Ù. »ç½Ç Æ®·£Àè¼ÇÀ» ¼³¸íÇÒ ¶§ ¿ì¸®°¡ »ç¿ëÇÏ´Â ÀÏ°ü¼ºÀÇ Á¤ÀÇ´Â ´Ù¼Ò ¸ðÈ£ÇÏ´Ù. ÀÏ°ü¼ºÀº ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¸»ÇÏ´Â ¸ðµç°ÍÀ» ÀǹÌÇÑ´Ù.

Part 1¿¡¼­´Â ÇÑ ¾îÄ«¿îÆ®¿¡¼­ ´Ù¸¥ ¾îÄ«¿îÆ®·Î ÀÚ±ÝÀ» À̵¿ÇÏ´Â ¹ðÅ· ¾ÖÇø®ÄÉÀÌ¼Ç ¿¹Á¦¸¦ º¸¾Ò´Ù. Listing 1Àº SQL·Î ÇÒ ¼ö ÀÖ´Â ±¸ÇöÀ» º¸¿©ÁØ´Ù. ´Ù¼¸ °³ÀÇ SQL ÀÛµ¿ÀÌ Æ÷ÇԵǾîÀÖ´Ù:

Listing 1. ÀÚ±Ý ÀÌü¿ë SQL ÄÚµå »ùÇÃ

SELECT accountBalance INTO aBalance 
    FROM Accounts WHERE accountId=aId;
IF (aBalance >= transferAmount) THEN 
    UPDATE Accounts 
        SET accountBalance = accountBalance - transferAmount
        WHERE accountId = aId;
    UPDATE Accounts 
        SET accountBalance = accountBalance + transferAmount
        WHERE accountId = bId;
    INSERT INTO AccountJournal (accountId, amount)
        VALUES (aId, -transferAmount);
    INSERT INTO AccountJournal (accountId, amount)
        VALUES (bId, transferAmount);
ELSE
    FAIL "Insufficient funds in account";
END IF

´Ù¼¸ °³ÀÇ °³º° Æ®·£Àè¼ÇÀ¸·Î¼­ ÀÌ ¿ÀÆÛ·¹À̼ÇÀ» ½ÇÇàÇÑ´Ù¸é ¾î¶² ÀÏÀÌ ¹ß»ýÇÒ±î? ´À·ÁÁö´Â °ÍÀº ¹°·Ð ÀÏ°ü¼ºµµ ÀҰԵȴÙ. ¿¹¸¦µé¾î ´©±º°¡°¡ ù ¹ø° SELECT ½ÇÇà°ú ¿¬¼ÓÀûÀÎ Â÷º¯ UPDATE »çÀÌ¿¡ °³º° Æ®·£Àè¼ÇÀ¸·Î ÀϺημ­ A ¾îÄ«¿îÆ®¿¡¼­ µ·À» ÀÎÃâÇÑ´Ù¸é ¾î¶»°Ô µÉ±î? ÀÌ°ÍÀº ÀÌ Äڵ忡 ÀÇÇØ ½ÃÇàµÇ¾î¾ß ÇÏ´Â ºñÁö´Ï½º ±ÔÄ¢À» À§¹ÝÇÑ °ÍÀÌ µÈ´Ù. ½Ã½ºÅÛÀÌ Ã¹ ¹ø° UPDATE¿Í µÎ¹ø° UPDATE »çÀÌ¿¡¼­ °íÀå³­´Ù¸é ¾î¶»°Ô µÉ±î? ½Ã½ºÅÛÀÌ º¹±¸µÇ¸é µ·Àº A ¾îÄ«¿îÆ®¿¡ ³²¾ÆÀÖ°Ô µÇÁö¸¸ B ¾îÄ«¿îÆ®¿¡ ±âÀÔµÇÁö ¾Ê°ÔµÇ°í ÀÌÀ¯´Â ±â·ÏµÇÁö ¾Ê´Â´Ù. ÀÌ°ÍÀº µÎ °èÁ¤ÀÇ ¼ÒÀ¯ÀÚ¿¡°Ô ¾ÈÁÁÀº ÀÏÀÌ´Ù.

Listing 1ÀÇ ´Ù¼¸ °³ÀÇ SQL ¿ÀÆÛ·¹À̼ÇÀº ÇϳªÀÇ °ü·ÃµÈ ¿ÀÆÛ·¹À̼ÇÀ¸·Î º¼ ¼ö ÀÖ´Ù. Áï µ·À» ÇÑ ¾îÄ«¿îÆ®¿¡¼­ ´Ù¸¥ ¾îÄ«¿îÆ®·Î Àü¼ÛÇÏ´Â °ÍÀ» ÀǹÌÇÑ´Ù. ±×·¯¹Ç·Î ¿ì¸®´Â ¸ðµç°ÍÀÌ ½ÇÇàµÇ°Å³ª ¾Æ¿¹ ½ÇÇàµÇÁö ¾Ê°Å³ª Çϱ⸦ ¹Ù¶ó´Â °ÍÀÌ´Ù. ±×µéÀÌ ´ÜÀÏ Æ®·£Àè¼Ç¿¡¼­ ¸ðµÎ ½ÇÇàµÇ¾î¾ß ÇÏ´Â ÀÌÀ¯°¡ ¹Ù·Î ÀÌ°ÍÀÌ´Ù.

Rule 3: °ü·Ã ¿ÀÆÛ·¹À̼ÇÀ» ´ÜÀÏ Æ®·£Àè¼ÇÀ¸·Î ±×·ìÇÎ ÇÒ°Í!

ÀÌ»óÀûÀÎ ±ÕÇü
Rule 1Àº Æ®·£Àè¼ÇÀÌ µÇµµ·ÏÀ̸é ª¾ÆÁ®¾ß ÇÒ °ÍÀ» ¿ä±¸ÇÏ°í ÀÖ´Ù. Listing 1ÀÇ ¿¹Á¦¿¡¼­´Â ÀÏ°ü¼ºÀ» À¯ÁöÇϱâ À§Çؼ­ °¡²ûÀº ¿ÀÆÛ·¹À̼ǵéÀ» ÇϳªÀÇ Æ®·£Àè¼ÇÀ¸·Î ¹­¾î¾ß ÇÑ´Ù´Â °ÍÀ» º¸¿©ÁÖ¾ú´Ù. ¹°·Ð ÀÌ ¸ðµç °ÍÀº ¾î¶² ±¸¼º¿ä¼ÒµéÀÌ "°ü·Ã ¿ÀÆÛ·¹À̼Ç"ÀÎÁö¸¦ °áÁ¤ÇÏ´Â ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀÇÁ¸ÇÑ´Ù. Rule 1°ú 3À» Á¶ÇÕÇÏ¿© Æ®·£Àè¼ÇÀÇ ¹üÀ§¸¦ ¼³¸íÇÏ´Â ÀϹÝÀûÀÎ °¡À̵å¶óÀÎÀ» ¸¸µé¼ö ÀÖ´Ù. ÀÌ°ÍÀÌ Rule 4 ÀÌ´Ù:

Rule 4: °ü·Ã ¿ÀÆÛ·¹À̼ÇÀ» ´ÜÀÏ Æ®·£Àè¼ÇÀ¸·Î ±×·ìÇÎÇ϶ó. ´Ü, ¿¬°ü¼º ¾ø´Â ¿ÀÆÛ·¹À̼ÇÀº °³º° Æ®·£Àè¼ÇÀ¸·Î ³õÀ»°Í!

ÄÜÅ×ÀÌ³Ê °ü¸® Æ®·£Àè¼Ç
ÄÜÅ×ÀÌ³Ê °ü¸® Æ®·£Àè¼ÇÀ» »ç¿ëÇÒ ¶§, Æ®·£Àè¼ÇÀÌ ¾îµð¼­ ½ÃÀÛÇÏ¿© ¾îµð¿¡¼­ ³¡³ª´ÂÁö¸¦ ¸íÈ®È÷ ¼³¸íÇÏ´Â ´ë½Å °¢ EJB ¸Þ¼Òµå¸¦ À§ÇÑ Æ®·£Àè¼Ç ¿ä±¸»çÇ×À» Á¤ÀÇÇÑ´Ù. Æ®·£Àè¼Ç ¸ðµå´Â ºóÀÇ assembly-descriptorÀÇ container-transaction ¼½¼ÇÀÇ trans-attribute ¿¤¸®¸ÕÆ®¿¡ Á¤ÀǵǾî ÀÖ´Ù. ¸Þ¼ÒµåÀÇ Æ®·£Àè¼Ç ¸ðµå´Â È£Ã⠸޼ҵ尡 Æ®·£Àè¼ÇÀÌ ÀÌ¹Ì Æ÷ÇԵǾî ÀÖ´ÂÁöÀÇ ¿©ºÎ¸¦ ³ªÅ¸³»´Â »óÅÂ¿Í ´õºÒ¾î EJB ¸Þ¼Òµå°¡ È£Ãâ µÉ ¶§ ÄÜÅ×À̳ʰ¡ ¾î¶² ¾×¼ÇÀ» ÃëÇÒÁö °áÁ¤ÇÑ´Ù:

  • ±âÁ¸ Æ®·£Àè¼Ç¿¡¼­ ¸Þ¼Òµå¸¦ Ãß°¡½Ãų°Í!
  • »õ·Î¿î Æ®·£Àè¼ÇÀ» ¸¸µé°í ¿©±â¿¡ ¸Þ¼Òµå¸¦ Ãß°¡½Ãų°Í!
  • ¸ðµç Æ®·£Àè¼Ç¿¡ ¸Þ¼Òµå¸¦ Ãß°¡ÇÏÁö ¸»°Í!
  • ¿¹¿Ü¸¦ ÁÙ°Í!

Listing 2. EJB ¾î¼Àºí¸® µð½ºÅ©¸³ÅÍ »ùÇÃ

<assembly-descriptor>
  ...
  <container-transaction>
    <method>
      <ejb-name>MyBean</ejb-name>
      <method-name>*</method-name>
    </method>
    <trans-attribute>Required</trans-attribute>
  </container-transaction>
  <container-transaction>
    <method>
      <ejb-name>MyBean</ejb-name>
      <method-name>logError</method-name>
    </method>
    <trans-attribute>RequiresNew</trans-attribute>
  </container-transaction>
  ...
</assembly-descriptor>

J2EE ½ºÆÑÀº ¿©¼¸ °³ÀÇ Æ®·£Àè¼Ç ¸ðµå¸¦ Á¤ÀÇÇÑ´Ù: Required, RequiresNew, Mandatory, Supports, NotSupported, Never. Table 1Àº °¢ ¸ðµåÀÇ ÀÛµ¿À» ¿ä¾àÇØ ³õÀº °ÍÀÌ´Ù. ±âÁ¸ Æ®·£Àè¼Ç¿¡ ÀÖÀ» ¶§ È£ÃâµÉ ¶§¿Í Æ®·£Àè¼Ç¿¡ ¾øÀ» ¶§ È£Ãâ µÉ °æ¿ì·Î ºÐ·ùÇß´Ù. °¢ ¸ðµå¸¦ Áö¿øÇÏ´Â EJB ÄÄÆ÷³ÍÆ® À¯Çüµµ ¼³¸íÇß´Ù

Table 1. Æ®·£Àè¼Ç ¸ðµå

Æ®·£Àè¼Ç ¸ðµå

ºó À¯Çü T Æ®·£Àè¼Ç¿¡ ÀÖÀ» ¶§ È£ÃâµÉ °æ¿ìÀÇ ¾×¼Ç Æ®·£Àè¼Ç ¹Û¿¡¼­ È£ÃâµÉ ¶§ÀÇ ¾×¼Ç
Required Session, Entity, Message-driven T¿¡ Æ÷ÇÔ »õ·Î¿î Æ®·£Àè¼Ç
RequiresNew Session, Entity »õ·Î¿î Æ®·£Àè¼Ç »õ·Î¿î Æ®·£Àè¼Ç
Supports Session, Message-driven T¿¡ Æ÷ÇÔ Æ®·£Àè¼Ç ¾øÀÌ ½ÇÇà
Mandatory Session, Entity T¿¡ Æ÷ÇÔ Error
NotSupported Session, Message-driven Æ®·£Àè¼Ç ¾øÀÌ ½ÇÇà Æ®·£Àè¼Ç ¾øÀÌ ½ÇÇà
Never Session, Message-driven Error Æ®·£Àè¼Ç ¾øÀÌ ½ÇÇà

ÄÜÅ×ÀÌ³Ê °ü¸® Æ®·£Àè¼Ç¸¸À» »ç¿ëÇÏ´Â ¾ÖÇø®ÄÉÀ̼ǿ¡¼­, Æ®·£Àè¼ÇÀ» ½ÃÀÛÇÒ ¼ö ÀÖ´Â À¯ÀÏÇÑ ¹æ¹ýÀº Æ®·£Àè¼Ç ¸ðµå°¡ Required ¶Ç´Â RequiresNewÀÎ EJB ¸Þ¼Òµå¸¦ ÄÄÆ÷³ÍÆ®°¡ È£ÃâÇÒ °æ¿ìÀÌ´Ù. ÄÜÅ×À̳ʰ¡ È£ÃâÇÑ °á°ú·Î¼­ Æ®·£Àè¼ÇÀ» ¸¸µé ¶§, ±× Æ®·£Àè¼ÇÀº ¸Þ¼Òµå°¡ ¿Ï·áµÉ ¶§ ´ÝÈù´Ù. ¸Þ¼Òµå°¡ Á¤»óÀûÀ¸·Î ¸®ÅϵǸé ÄÜÅ×À̳ʴ Ʈ·£Àè¼ÇÀ» ¹ß»ý½ÃŲ´Ù. ¿¹¿Ü¸¦ ÁÖ¾î ¸Þ¼Òµå°¡ Á¾·áÇϸé ÄÜÅ×À̳ʴ Ʈ·£Àè¼ÇÀ» ·Ñ¹é(roll back)ÇÏ°í ¿¹¿Ü¸¦ ¼±¾ðÇÑ´Ù. ¸Þ¼Òµå°¡ ±âÁ¸ T Æ®·£Àè¼Ç¿¡ ÀÖÀ» ¶§ È£ÃâµÇ°í ±× Æ®·£Àè¼Ç ¸ðµå´Â ¸Þ¼Òµå°¡ Æ®·£Àè¼Ç ¾øÀÌ ½ÇÇàµÇ°Å³ª »õ·Î¿î Æ®·£Àè¼Ç¿¡¼­ ½ÇÇàµÇ¾î¾ß ÇÑ´Ù´Â °ÍÀ» ÁöÁ¤Çϸé, T Æ®·£Àè¼ÇÀº ¸Þ¼Òµå°¡ ¿Ï·áµÉ ¶§ ±îÁö ÁßÁöÇÏ°í ÀÌÀüÀÇ T Æ®·£Àè¼ÇÀº ½ÃÀ۵ȴÙ.

Æ®·£Àè¼Ç ¸ðµå ¼±ÅÃÇϱâ
ºó ¸Þ¼Òµå¸¦ À§ÇØ ¾î¶² ¸ðµå¸¦ ¼±ÅÃÇØ¾ß ÇÒ±î? ¼¼¼Ç°ú message-driven beanÀÇ °æ¿ì ¸ðµç È£ÃâÀÌ Æ®·£Àè¼ÇÀÇ ÀϺημ­ ½ÇÇàµÉ °ÍÀ» È®ÀÎÇϱâ À§ÇØ Required¸¦ »ç¿ëÇØ¾ß ÇÏÁö¸¸ ¸Þ¼Òµå°¡ ´õ Å« Æ®·£Àè¼ÇÀÇ ÄÄÆ÷³ÍÆ®°¡ µÇµµ·Ï ÇÒ ¼ö ÀÖ´Ù. RequiresNew·Î ½ÃµµÇغ¸ÀÚ. ÀÌ°ÍÀº ¸Þ¼ÒµåÀÇ ÀÛµ¿ÀÌ È£ÃâµÈ ¸Þ¼ÒµåÀÇ Çൿ°ú °³º°ÀûÀ¸·Î ÀÌ·ç¾îÁø´Ù´Â °ÍÀ» È®½ÅÇÒ ¶§¸¸ »ç¿ëµÉ ¼ö ÀÖ´Ù. RequiresNew´Â ÀüÇüÀûÀ¸·Î ½Ã½ºÅÛ¿¡¼­ ´Ù¸¥ °´Ã¼µé°ú °ü·ÃÀÌ ¾ø´Â °´Ã¼¸¦ °¡Áö°í »ç¿ëµÈ´Ù.

ºÎÀûÀýÇÑ ¹æ¹ýÀ¸·Î RequiresNew ¸¦ »ç¿ëÇϸé À§¿¡ ¼³¸íÇÑ °Í°ú ºñ½ÁÇÑ °á°ú°¡ µÉ ¼ö ÀÖ´Ù. Listing 1ÀÇ ÄÚµå´Â Çϳª°¡ ¾Æ´Ñ ´Ù¼¸ °³ÀÇ °³º° Æ®·£Àè¼Ç¿¡¼­ ½ÇÇàµÇ¾ú°í ÀÌ´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÏ°ü¼º ¾ø´Â »óÅ·Π¸¸µé ¼ö ÀÖ´Ù.

CMP (container-managed persistence) ¿£ÅÍƼ ºóÀÇ °æ¿ì, Required¸¦ »ç¿ëÇØ¾ß ÇÒ °ÍÀÌ´Ù. Mandatory ¶ÇÇÑ ÇÕ´çÇÑ ¿É¼ÇÀÌ µÉ ¼ö Àִµ¥ Ưº°È÷ Ãʱ⠰³¹ß¿¡ ¸Â´Ù. CMP ¿£ÅÍƼºó¿¡ RequiresNew ¸¦ »ç¿ëÇÒ ¼ö´Â ¾ø´Ù. NotSupported¿Í Never´Â ºñ Æ®·£Àè¼Ç ¸®¼Ò½º¿ëÀÌ´Ù.

EJB ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¿Ã¹Ù¸£°Ô µðÀÚÀ뵃 ¶§ Æ®·£Àè¼Ç ¸ðµå¿¡ ´ëÇÑ À§ °¡À̵å¶óÀÎÀº Rule 4ÀÇ Æ®·£Àè¼Ç °æ°èÈ­¸¦ ¸¸µé¾î³½´Ù. J2EE ¾ÆÅ°ÅØÃÄ´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» °¡Àå ÀÛÀº ÇÁ·Î¼¼½Ì ûũ·Î ºÐÇصǴ °ÍÀ» Àå·ÁÇÑ´Ù.

°í¸³
Part 1¿¡¼­, °í¸³(isolation)Àº ÇÑ Æ®·£Àè¼ÇÀÇ È¿°ú°¡ µ¿½Ã¿¡ ½ÇÇàÇÏ°í ÀÖ´Â ´Ù¸¥ Æ®·£Àè¼Ç¿¡ º¸ÀÌÁö¾Ê´Â °ÍÀ̶ó°í Á¤ÀÇÇß´Ù. Æ®·£Àè¼ÇÀÇ °üÁ¡¿¡¼­ Æ®·£Àè¼ÇÀº º´·Äº¸´Ù´Â ¼øÂ÷ÀûÀ¸·Î ½ÇÇàÇÑ´Ù. Æ®·£Àè¼Ç ¸®¼Ò½º ¸Å´ÏÀú°¡ ¸¹Àº Æ®·£Àè¼ÇµéÀ» µ¿½Ã¿¡ ÇÁ·Î¼¼½º Çϸ鼭 "°í¸³ÀÇ È¯»ó"À» Á¦°øÇÑ´Ù. °¡²û¾¿ °í¸³ÀÇ Á¦¾àÁ¶°ÇÀº »õ·Î¿î Æ®·£Àè¼Ç ½ÃÀÛÀ» ±âÁ¸ Æ®·£Àè¼ÇÀÌ ¿Ï·áµÉ ¶§±îÁö ¹Ì·çµµ·Ï ÇÑ´Ù. Æ®·£Àè¼ÇÀ» ¿Ï·áÇÏ´Â °Í¿¡´Â Àû¾îµµ ÇϳªÀÇ µ¿±â½Ä(synchronous)ÀÇ µð½ºÅ© I/O°¡ Æ÷ÇԵǾîÀֱ⠶§¹®¿¡ ÃÊ´ç Æ®·£Àè¼ÇÀÇ ¼ö¸¦ ÃÊ´ç µð½ºÅ© ¾²±âÀÇ ¼ö·Î Á¦ÇÑÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº È®À强¿¡ ÁÁÁö ¾Ê´Ù.

½ÇÁ¦·Î °í¸³ ¿ä±¸Á¶°ÇÀ» Ç®¾î¼­ ´õ ¸¹Àº Æ®·£Àè¼ÇµéÀÌ µ¿½Ã¿¡ ½ÇÇàµÉ ¼ö ÀÖµµ·Ï ÇÏ°í ½Ã½ºÅÛ ÀÀ´ä°ú ´õ ³ªÀº È®À强À¸·Î Çâ»ó½Ãų ¼ö ÀÖ´Ù. °ÅÀÇ ¸ðµç µ¥ÀÌÅͺ£À̽º´Â ³× °³ÀÇ Ç¥ÁØ °í¸³ ·¹º§À» Áö¿øÇÑ´Ù: Read Uncommitted, Read Committed, Repeatable Read, Serializable.

ÄÜÅ×ÀÌ³Ê °ü¸® Æ®·£Àè¼ÇÀ» À§ÇÑ °í¸³ °ü¸®´Â ÇöÀç J2EE ½ºÆÑÀÇ ¹üÀ§¸¦ ¹þ¾î³ªÀÖ´Ù. ÇÏÁö¸¸ IBM WebSphere¿Í BEA WebLogic °°Àº ¸¹Àº J2EE ÄÜÅ×À̳ʴ ÄÜÅ×ÀÌ³Ê ½ºÆÑÀÇ È®ÀåÀ» Á¦°øÇÏ¿© Æ®·£Àè¼Ç ¸ðµå°¡ ¾î¼Àºí¸® µð½ºÅ©¸³ÅÍ¿¡ ¼³Á¤µÇ´Â °Í°ú °°Àº ¹æ½ÄÀ¸·Î ¸Þ¼Òµå ±â¹ÝÀ¸·Î Æ®·£Àè¼Ç °í¸³ ·¹º§À» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ºó °ü¸® Æ®·£Àè¼ÇÀÇ °æ¿ì JDBC ¶Ç´Â ´Ù¸¥ ¸®¼Ò½º ¸Å´ÏÀú Ä¿³Ø¼ÇÀ» ÅëÇØ °í¸³ ·¹º§À» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.

°í¸³ ·¹º§ °£ Â÷ÀÌÁ¡À» º¸±âÀ§ÇØ ¿©·¯°¡Áö º´Ç༺ À§ÇèÀ» ºÐ·ùÇØ º¸°Ú´Ù. ´ÙÀ½ À§Çè¿ä¼Òµé ¸ðµÎ´Â µÎ ¹ø° Æ®·£Àè¼ÇÀÌ ÀÌ¹Ì ½ÃÀÛÇÑ ÈÄ¿¡µµ ù ¹ø° Æ®·£Àè¼ÇÀÌ µÎ ¹ø° Æ®·£Àè¼Ç¿¡ º¸¿©Áø °á°ú¿Í ¿¬°üµÇ¾îÀÖ´Ù:

  • Dirty Read: ÇÑ Æ®·£Àè¼ÇÀÇ Áß°£ °á°ú°¡ ´Ù¸¥ Æ®·£Àè¼Ç¿¡ º¸¿©Áú ¶§ ¹ß»ý.

  • Unrepeatable Read: ÇÑ Æ®·£Àè¼ÇÀÌ µ¥ÀÌÅÍ ¾ÆÀÌÅÛÀ» ÀÐ°í ±× ´ÙÀ½¿¡ °°Àº ¾ÆÀÌÅÛÀ» ´Ù½Ã ÀоúÀ» ¶§ ´Ù¸¥ °ªÀÌ º¸ÀÏ ¶§ ¹ß»ý.

  • Phantom Read: ÇÑ Æ®·£Àè¼ÇÀÌ ´ÙÁß ¿­(row)À» ¸®ÅÏÇÏ´Â ÁúÀǸ¦ ¼öÇàÇÏ°í ÈÄ¿¡ °°Àº ÁúÀǸ¦ ´Ù½Ã ¼öÇàÇÒ ¶§, ù ¹ø° ÁúÀÇ ¼öÇà¿¡¼­´Â º¸ÀÌÁö ¾Ê´ø Ãß°¡ ¿­ÀÌ »ý±â´Â °æ¿ì ¹ß»ý.

³× °³ÀÇ Ç¥ÁØ °í¸³ ·¹º§Àº ÀÌ·¯ÇÑ ¼¼ °³ÀÇ °í¸³ À§Çè°ú °ü·ÃµÇ¾îÀÖ´Ù. (Table 2). °¡Àå ³·Àº °í¸³ ·¹º§Àº Read Uncommitted ·Î¼­ ´Ù¸¥ Æ®·£Àè¼Ç¿¡¼­ ÀÌ·ç¾îÁø º¯°æÀ» ¸·Áö ¸øÇÑ´Ù. ÇÏÁö¸¸ Àбâ lock¿¡ ´ëÇÑ °æÀï(contention)À» ¿ä±¸ÇÏÁö ¾Ê±â ¶§¹®¿¡ °¡Àå ºü¸£´Ù. °¡Àå ³ôÀº °í¸³ ·¹º§ÀÎ SerializableÀº À§¿¡ Á¦»çÇÑ °í¸³ÀÇ Á¤ÀÇ¿Í ÀÏÄ¡ÇÑ´Ù. °¢ Æ®·£Àè¼ÇÀº ´Ù¸¥ Æ®·£Àè¼ÇÀÇ È¿°ú·ÎºÎÅÍ ¿ÏÀüÈ÷ °í¸³µÈ´Ù.

Table 2. Æ®·£Àè¼Ç °í¸³ ·¹º§

°í¸³ ·¹º§ Dirty read Unrepeatable read Phantom read
Read Uncommitted Yes Yes Yes
Read Committed No Yes Yes
Repeatable Read No No Yes
Serializable No No No

´ëºÎºÐÀÇ µ¥ÀÌÅͺ£À̽º °æ¿ì ±âº» °í¸³ ·¹º§Àº Read Committed Àε¥ Æ®·£Àè¼ÇÀÇ ¾î¶² ÁöÁ¡¿¡¼­µµ ¾ÖÇø®ÄÉÀÌ¼Ç µ¥ÀÌÅÍ°¡ º¸ÀÌ´Â °ÍÀ» ¹æÁöÇØÁֱ⠶§¹®¿¡ À¯¿ëÇÏ´Ù. Read Committed´Â °¡Àå ÀüÇüÀûÀΠªÀº Æ®·£Àè¼Ç¿¡ »ç¿ëÇϱ⠾˸ÂÀº °í¸³ ·¹º§ÀÌ´Ù.

³ôÀº ¼öÁØÀÇ °í¸³ÀÎ Repeatable Read¿Í SerializableÀº Æ®·£Àè¼Ç Àüü¿¡¼­ ³ôÀº ¼öÁØÀÇ ÀÏ°ü¼ºÀÌ ÇÊ¿äÇÒ ¶§ ¾Ë¸Â´Ù. µ¥ÀÌÅÍ ÀÏ°ü¼ºÀÌ Àý´ëÀûÀ¸·Î ÇÊ¿äÇÑ °æ¿ì »õ·Î¿î ¿­ »ý¼ºÀ» ¹æ¾îÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. À̶§ SerializableÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.

°¡Àå ³·Àº °í¸³ ·¹º§ÀÎ Read Uncommitted´Â °ÅÀÇ ¾²ÀÌÁö ¾Ê´Â´Ù. Á¤È®ÇÏÁö ¾Ê´Â °ªÀ» ¾ò°íÀÚ ÇÒ ¶§ ¾²À̸ç ÁúÀÇ´Â ¿¹±âÄ¡ ¾ÊÀº ÆÛÆ÷¸Õ½º ¿À¹öÇìµå¸¦ ¸¸µé°Ô µÈ´Ù. ÁÖ¹® ¼ö·® ¶Ç´Â ´çÀÏ ÁÖ¹®¹ÞÀº ´Þ·¯ °°ÀÌ, ºü¸£°Ô ¼ö·®À» °è»êÇÒ ¶§¿¡´Â Read Uncommitted°¡ ÀüÇüÀûÀ¸·Î »ç¿ëµÈ´Ù.

°í¸³°ú È®À强 »çÀÌ¿¡´Â ¸ð¼øÀÌ Á¸ÀçÇϱ⠶§¹®¿¡ Æ®·£Àè¼Ç¿¡ °í¸³ ·¹º§À» ¼±ÅÃÇÒ ¶§¿¡´Â Ưº°ÇÑ ÁÖÀǸ¦ ±â¿ï¿©¾ß ÇÑ´Ù. ³Ê¹« ³·Àº ·¹º§À» ¼±ÅÃÇÏ¸é µ¥ÀÌÅÍ¿¡ À§ÇèºÎ´ãÀÌ »ý±ä´Ù. ¶Ç, ³Ê¹« ³ôÀº ·¹º§À» ¼±ÅÃÇϸé ÆÛÆ÷¸Õ½º¿¡ ÁÁÁö ¾Ê´Ù. ÀϹÝÀûÀ¸·Î µ¥ÀÌÅÍ ÀÏ°ü¼º ¹®Á¦´Â ÆÛÆ÷¸Õ½º ¹®Á¦º¸´Ù ´õ ½É°¢ÇÏ´Ù:

Rule 5: µ¥ÀÌÅ͸¦ ¾ÈÀüÇÏ°Ô ÇÏ´Â °¡Àå ³·Àº °í¸³ ·¹º§À» »ç¿ëÇ쵂 ºÒÈ®½ÇÇÒ °æ¿ì SerializableÀ» »ç¿ëÇÒ°Í!

ÄÄÆ÷³ÍÆ®¸¦ °³¹ß ÇÒ ¶§ °í¸³ÀÇ ¿ä±¸ »çÇ׿¡ ´ëÇØ ½ÅÁßÇÏ°Ô »ý°¢ÇغÁ¾ß ÇÑ´Ù. ¸¸¾à ÆÛÆ÷¸Õ½º°¡ ¹®Á¦°¡ µÈ´Ù¸é ³ªÁß¿¡ ´çȲÇÏÁö ¾Êµµ·Ï ³·Àº °í¸³ ·¹º§µµ °ßµô ¼ö ÀÖ´Â Æ®·£Àè¼ÇÀ» ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ¾î¶² ¸Þ¼Òµå°¡ ÀÛµ¿ÇÏ°í °í¸³ ·¹º§À» Á¤È®È÷ ¼³Á¤Çϱâ À§ÇÑ ÀÏ°ü¼º ÀüÁ¦Á¶°ÇÀÌ ¹«¾ùÀÎÁö¸¦ ¾Ë ÇÊ¿ä°¡ ÀÖÀ¸¹Ç·Î °³¹ßÇϸ鼭 ÀÏ°ü¼º ¿ä±¸»çÇ×°ú ÀüÁ¦Á¶°ÇÀ» ¼¼½ÉÇÏ°Ô ¹®¼­È­ ÇÏ´Â °ÍÀÌ ÁÁ´Ù.

°á·Ð
ÀÌ ±Û¿¡ Á¦½ÃµÈ °¡À̵å¶óÀεéÀÌ ´Ù¼Ò ¸ð¼øó·³ º¸ÀδÙ. Æ®·£Àè¼Ç °æ°èÈ­¿Í °í¸³Àº ±Ùº»ÀûÀ¸·Î ¸ð¼ø ±× ÀÚüÀ̱⠶§¹®ÀÌ´Ù. ¾ÈÀü¼º°ú ÅøÀÇ ÆÛÆ÷¸Õ½º ¿À¹öÇìµå»çÀÌÀÇ ±ÕÇüÀ» À¯ÁöÇØ¾ß ÇÑ´Ù.

Âü°íÀÚ·á

¸ñ Â÷:
Æ®·£Àè¼Ç °æ°èÈ­
ÄÜÅ×ÀÌ³Ê °ü¸® Æ®·£Àè¼Ç(Container-managed transaction)
°í¸³
°á·Ð
Âü°íÀÚ·á
ÇÊÀÚ¼Ò°³
±â»ç¿¡ ´ëÇÑ Æò°¡
°ü·Ã dW ¸µÅ©:
JTS ÀÌÇØÇϱâ, Part 1
JTS ÀÌÇØÇϱâ, Part 2
Subscribe to the developerWorks newsletter
US ¿ø¹® Àбâ
Also in the Java zone:
Tutorials
Tools and products
Code and components
Articles
ÇÊÀÚ¼Ò°³
Brian Goetz ´Â ¼ÒÇÁÆ®¿þ¾î ÄÁ¼³ÅÏÆ®À̸ç Áö³­ 15³â°£ Àü¹®ÀûÀÎ ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ·Î ÀÏÇØ¿Ô´Ù. ±×´Â Ķ¸®Æ÷´Ï¾ÆÁÖ Los Altos ¼ÒÀç ¼ÒÇÁÆ®¿þ¾î °³¹ß ¹× ÄÁ¼³Æà ¾÷üÀÎ Quiotix»çÀÇ ¼ö¼® ÄÁ¼³ÅÏÆ®ÀÌ´Ù. BrianÀÇ Àú¼­µéµµ ÂüÁ¶Çϱ⠹ٶõ´Ù.
ÀÌ ±â»ç¿¡ ´ëÇÏ¿© ¾î¶»°Ô »ý°¢ÇϽʴϱî?

Á¤¸» ÁÁ´Ù (5) ÁÁ´Ù (4) ±×Àú±×·¸´Ù (3) ¼öÁ¤º¸¿ÏÀÌ ÇÊ¿äÇÏ´Ù(2) ÇüÆí¾ø´Ù (1)

  È¸»ç¼Ò°³  |  °³ÀÎÁ¤º¸ º¸È£Á¤Ã¥  |  ¹ý·ü  |  ¹®ÀÇ