CORE
HOME > JAVA > J2SE > CORE
2018.07.30 / 11:17

ÀÚ¹Ù¿¡¼­ µ¥ÀÌÅÍ Ä³½Ã ±¸ÇöÇϱâ

summerman
Ãßõ ¼ö 221

¿À´ÃÀº ÀÚ¹Ù(Java)¿¡¼­ µ¥ÀÌÅÍ Ä³½Ã(cache)¸¦ Á÷Á¢ ±¸ÇöÇÏ´Â ¹æ¹ýÀ» Á¤¸®Çغ¸°íÀÚ ÇÑ´Ù. ¸¹ÀÌµé »ç¿ëÇÏ´Â Ehcache °°Àº ¶óÀ̺귯¸®µµ ÀÖ°í º°µµÀÇ ±â°è·Î ij½Ã ¼­¹ö¸¦ µÎ´Â ¹æ¹ýµµ ÀÖÁö¸¸ ij½ÃÀÇ °³³äÀº ±×¸® ¾î·Á¿î °Ô ¾Æ´Ï¸ç ƯÈ÷ Àбâ Àü¿ë ij½Ã´Â ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ °£´ÜÇÏ°Ô ±¸ÇöÇÒ ¼ö ÀÖ´Ù. ¡°Ä³½Ã! ¾î·ÆÁö ¾Ê¾Æ¿ä~¡±

ij½ÃÀÇ °³³ä

¿ì¸®³ª¶óÀÇ ±â¾÷¿ë À¥¾ÖÇø®ÄÉÀ̼ÇÀº ´ëºÎºÐ °ü°èÇü µ¥ÀÌÅͺ£À̽º(RDBMS)¸¦ ¹é¿£µå¿¡ µÎ°í µ¥ÀÌÅÍ Æ®·£Àè¼Ç À§ÁÖ·Î ¿î¿µµÇ´Â °æ¿ì°¡ ¸¹´Ù. ±Ô¸ð°¡ Å« »çÀÌÆ®´Â ¼º´ÉÀ» À§ÇØ ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö³ª µ¥ÀÌÅͺ£À̽º ¼­¹ö¸¦ ÀÌÁßÈ­Çϴµ¥ »ç¿ëÀÚ°¡ ¸¹ÀÌ ¸ô¸®¸é °á±¹ º´¸ñ(bottleneck)ÀÌ µÇ´Â °÷Àº µ¥ÀÌÅͺ£À̽ºÀÎ °æ¿ì°¡ ¸¹´Ù.

µ¥ÀÌÅͺ£À̽ºÀÇ ¼º´ÉÀ» Çâ»óÇÏ´Â ¹æ¹ýÀÌ ¿©·¯°¡Áö°¡ Àִµ¥ °¡Àå ±Ùº»ÀûÀÎ ¹æ¹ýÀº µ¥ÀÌÅͺ£À̽º ÁúÀǸ¦ ÁÙÀÌ´Â °ÍÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù. ¾ÖÇø®ÄÉÀÌ¼Ç ÀÔÀå¿¡¼­ ij½Ã´Â µ¥ÀÌÅͺ£À̽ºÀÇ µ¥ÀÌÅ͸¦ Á¤ÀûÀÎ ¸Þ¸ð¸®¿¡ º¸°üÇص״ٰ¡ ÇÊ¿äÇÒ ¶§ µ¥ÀÌÅͺ£À̽º°¡ ¾Æ´Ï¶ó ¸Þ¸ð¸®¿¡¼­ ¹Ù·Î ²¨³» ¾²¸é µÇ´Â °ÍÀÌ´Ù.

±×·¡¼­ ij½ÃÀÇ ±âº»ÀûÀÎ ÇüÅ´ ¾Æ·¡ ±×¸²°ú °°ÀÌ µ¥ÀÌÅ͸¦ ½×¾ÆµÎ°í ¿øÇÏ´Â µ¥ÀÌÅ͸¦ ¹Ù·Î ãÀ» ¼ö ÀÖµµ·Ï Å°(key)¸¦ ºÎ¿©ÇÏ¿© È£Ãâ Ãø¿¡¼­ ÇØ´ç Å°¸¦ ij½Ã¿¡ ³Ñ±â¸é ±×¿¡ ÇØ´çÇÏ´Â µ¥ÀÌÅÍ°¡ ¹ÝȯµÇ°Ô ÇÏ´Â °ÍÀÌ´Ù. Å°/°ª ÇüÅÂÀÇ µ¥ÀÌÅÍ ±¸Á¶´Â ´ëÇ¥ÀûÀ¸·Î ÇؽÃÅ×À̺íÀ» »ç¿ëÇÏ¸é ¹Ù·Î ±¸ÇöÀÌ °¡´ÉÇÏ´Ù.

ij½Ã °³³ä
±âº»ÀûÀÎ Å°/°ª ÇüÅÂÀÇ Ä³½Ã

ij½Ã¿¡ µé¾î°¥ µ¥ÀÌÅÍ´Â ÀÚÁÖ »ç¿ëÇϸ鼭µµ º¯°æÀº ÀÚÁÖ ÀϾÁö ¾Ê°í(Àбâ´Â ¸¹Áö¸¸ ¾²±â´Â ÀûÀº °Í) ¶Ç ±× µ¥ÀÌÅÍ ¾çÀÌ ³Ê¹« Å©Áö ¾ÊÀº °ÍÀ» ¼±ÅÃÇÏ´Â °ÍÀÌ ÀûÇÕÇÏ´Ù. ÀÚÁÖ »ç¿ëÇÏ´Â °ÍÀ» ij½ÌÇÒ ¼ö·Ï ¼º´É Çâ»ó¿¡ µµ¿òÀÌ µÉ °ÍÀε¥ ¾çÀÌ Å©´Ù¸é ±× ¸¸Å­ ¾ÖÇø®ÄÉÀ̼ÇÀÌ »ç¿ëÇÒ ¸Þ¸ð¸®¸¦ ¼Ò¸ðÇϹǷΠ¸Þ¸ð¸® ¼º´É¿¡ ¾Ç¿µÇâÀÌ ÀÖÀ» ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¶Ç º¯°æÀÌ ÀÚÁÖ ÀϾ¸é ij½Ã³ª µ¥ÀÌÅͺ£À̽º¸¦ ±×¿¡ ¸Â°Ô °»½ÅÇØÁà¾ß ÇϹǷΠij½Ã¿Í µ¥ÀÌÅͺ£À̽º°£ÀÇ Æ®·£Àè¼ÇÀÌ ÀÚÁÖ ¹ß»ýÇÏ°Ô µÉ °ÍÀÌ´Ù.

±×·¡¼­ ij½Ì¿¡ ÀûÇÕÇÑ µ¥ÀÌÅÍÀÇ ¿¹¸¦ µéÀÚ¸é ±âÁØ Á¤º¸¼º µ¥ÀÌÅÍ°¡ ÀÖ´Ù(°Ô½ÃÆÇÀ̶ó¸é °Ô½ÃÆÇ ¼³Á¤, ¼îÇθôÀ̶ó¸é »óÇ° Ä«Å×°í¸®, ¶Ç ±× ¹Û¿¡µµ ¸Þ´º¶óµç°¡ ´Ù¾çÇÑ ¾÷¹« ÄÚµåµé). ±âÁØ Á¤º¸¼º µ¥ÀÌÅÍ´Â Çѹø ¼Â¾÷µÇ¸é ÀÚÁÖ ¹Ù²îÁö ¾Ê°í ¶Ç ±× °³¼ö°¡ ¸¹¾Æ¾ß ¸î ¹é°³ÀÎ °æ¿ì°¡ ´ëºÎºÐÀ̹ǷΠ¸Þ¸ð¸® ºÎ´ãÀÌ Å©Áö ¾ÊÀ¸¸é¼­µµ µ¥ÀÌÅͺ£À̽º ÁúÀÇ È¸¼ö¸¦ ÁÙÀÌ´Â µ¥ »ó´çÇÑ µµ¿òÀÌ µÉ ¼ö ÀÖ´Ù.

ÀÚ¹Ù¿¡¼­ÀÇ Ä³½Ã ±¸Çö

Å°/°ª ÇüÅÂÀÇ Ä³½Ã¸¦ ±¸ÇöÇÏ·Á¸é ±âº»ÀûÀ¸·Î ´ÙÀ½°ú °°Àº µ¿ÀÛÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù.

  • µ¥ÀÌÅÍ ÁúÀÇ – Å°¸¦ ¹Þ¾Æ ¿øÇÏ´Â µ¥ÀÌÅ͸¦ ã¾Æ ¹ÝȯÇϱâ
  • ij½Ã ÀûÀç – µ¥ÀÌÅͺ£À̽º¿¡¼­ µ¥ÀÌÅÍ ·ÎµùÇϱâ

ÀÌÁ¦ ij½Ã Ŭ·¡½º¸¦ ¼³°èÇÏ´Â °úÁ¤À» ¹â¾Æº¸ÀÚ. ÀÌ ±ÛÀº ½Ç¿ëÀûÀ¸·Î »ç¿ëÇÒ Å¬·¡½º¸¦ À§ÇÑ ¹æ¹ýÀ» Á¦½ÃÇÏ·Á´Â °ÍÀÌÁö¸¸ °úÁ¤À» ´Ù º¸ÀÌ°íÀÚ ÇÑ´Ù.

¿©±â¼­´Â ¿¹¸¦ µé¾î »óÇ° Ä«Å×°í¸®¸¦ ±¸ÇöÇÑ´Ù°í Çغ¸ÀÚ. ÀÌ »óÇ° Ä«Å×°í¸®´Â ¼îÇθô¿¡ ÇÑ ¼¼Æ®¸¸ ÀÖ´Â °Ô ¾Æ´Ï°í ¿©·¯ ¼¼Æ®°¡ ÀÖ´Ù°í ÇÑ´Ù. ¼îÇθô ¸ÞÀÎ ¸Þ´º¸¦ ÅëÇØ º¸ÀÌ´Â ±âº»ÀûÀÎ »óÇ° Ä«Å×°í¸®µµ ÀÖÁö¸¸ ÆǸÅÀÚº°·Î ¼­ºê¸ôÀÌ À־ ÀÌ·¯ÇÑ ¼­ºê¸ô¸¶´Ù º°µµÀÇ »óÇ° Ä«Å×°í¸®°¡ °ü¸®µÈ´Ù. ¹æ¹®ÀÚ°¡ ¼îÇθôÀÇ °ÅÀÇ ¸ðµç À¥ÆäÀÌÁö¿¡ µé¾î°¥ ¶§¸¶´Ù »óÇ° Ä«Å×°í¸®¸¦ ¸Þ´º³ª È­¸é¿¡ Ç¥½ÃÇØ¾ß ÇÒ ÅÙµ¥ ÀÌ·± µ¥ÀÌÅ͸¦ ¸Å¹ø µ¥ÀÌÅͺ£À̽º¿¡¼­ Àоî¿Â´Ù¸é ºÎ´ãÀÌ »ó´çÇÒ °ÍÀÌ´Ù. (½ÇÁ¦·Î´Â µ¥ÀÌÅͺ£À̽º ÀÚü¿¡µµ ij½Ã ±â´ÉÀÌ ÀÖ´Â µî ¹«Á¶°Ç µ¥ÀÌÅͺ£À̽º¿¡ 100% ºÎ´ãÀÌ °¡´Â °ÍÀº ¾Æ´ÏÁö¸¸¡¦)

¾Æ¹«Æ° ÀÌ·± »óȲÀ» °¡Á¤ÇßÀ» ¶§ ´ë·« ´ÙÀ½°ú °°ÀÌ »óÇ° Ä«Å×°í¸®¿¡ ´ëÇÑ ¾÷¹« ·ÎÁ÷À» ó¸®ÇÏ´Â ¼­ºñ½º Ŭ·¡½ºÀÇ ÀÎÅÍÆäÀ̽º¸¦ »ý°¢Çغ¼ ¼ö ÀÖ´Ù. ½ºÇÁ¸µ ±â¹ÝÀ¸·Î °³¹ßÇÏ´Â °æ¿ì°¡ ¸¹¾Æ ±×·¯ÇÑ ¹æ½ÄÀ¸·Î Ŭ·¡½º¸¦ »ý°¢ÇغÃÀ¸³ª ±âº» °³³äÀÌ °£´ÜÇϹǷΠ´Ù¸¥ °÷¿¡ Àû¿ëÇÏ´Â µ¥ º° ¹®Á¦´Â ¾øÀ» °ÍÀÌ´Ù.

public interface CategoryService {
    // ÁúÀÇ ¸Þ¼­µå
    public List<Category> findCategoryGroup(String categoryGroupKey);
 
    // ÀûÀç ¸Þ¼­µå
    public void loadCategryGroups();
 
    // ±× ¹ÛÀÇ ¾÷¹« ·ÎÁ÷ ¸Þ¼­µåµé
    ...
}

ÀÌ·¸°Ô ÀÎÅÍÆäÀ̽º¸¦ »ý°¢Çغ¸´Ï ¹®Á¦°¡ Çϳª »ý±ä´Ù. ¡°ÀûÀç ¸Þ¼­µå¡±´Â ¾ðÁ¦ È£ÃâÇØ¾ß Çϴ°¡? ij½Ã¸¦ »ç¿ëÇϱâ Àü¿¡ ºÒ·¯µÎ±ä ÇØ¾ß Çϴµ¥ È£ÃâÇÏ´Â ÂÊ¿¡¼­ µ¥ÀÌÅÍ ÀûÀç°¡ µÆ´ÂÁö ¾ÈµÆ´ÂÁö ½Å°æ¾²¸é¼­ È£ÃâÇÒ ¼ö ÀÖÀ»±î? ¹°·Ð ´äÀº No´Ù. È£Ãâ ¹Þ´Â ÀÌ Ä³½Ã ¼­ºñ½º Ŭ·¡½º Ãø¿¡¼­ µ¥ÀÌÅÍ ÀûÀç°¡ µÆ´ÂÁö¸¦ ÆÇ´ÜÇÏ´Â °Ô ½¬¿ï °ÍÀÌ´Ù. ±×¸®°í µ¿½Ã¼ºµµ °í·ÁÇØ¾ß ÇÑ´Ù. ÀûÀç ¸Þ¼­µå¸¦ ÅëÇØ µ¥ÀÌÅ͸¦ µ¥ÀÌÅͺ£À̽º¿¡¼­ °¡Á®¿À´Â ÀÛ¾÷Àº »ó´ëÀûÀ¸·Î »ó´çÇÑ ½Ã°£ÀÌ °É¸®´Â ÀÛ¾÷ÀÌ´Ù. µû¶ó¼­ À¥ ȯ°æ°ú °°ÀÌ µ¿½Ã »ç¿ëÀÚ°¡ ¸¹Àº ȯ°æ¿¡¼­´Â ÀÌ·¯ÇÑ ÃʱâÈ­ ÀÛ¾÷ÀÌ µ¿½Ã¿¡ ´Ù¼ö ¹ß»ýÇÒ °¡´É¼ºÀ» ¿°µÎ¿¡ µÖ¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ ¹®Á¦µéÀ» °í·ÁÇßÀ» ¶§ À§ ÀÎÅÍÆäÀ̽º´Â ¾Æ·¡¿Í °°ÀÌ ¹Ù²î¾î¾ß Çϸç,

public interface CategoryService {
    // ÁúÀÇ ¸Þ¼­µå
    public List<Category> findCategoryGroup(String categoryGroupKey);
 
    // ÃʱâÈ­ ¸Þ¼­µå
    public void invalidateCategoryGroups();
 
    // ±× ¹ÛÀÇ ¾÷¹« ·ÎÁ÷ ¸Þ¼­µåµé
    ...
}

±¸Çö Ŭ·¡½º´Â ´ÙÀ½°ú °°ÀÌ ¸¸µé ¼ö ÀÖ´Ù.

@Service
public class CategoryServiceImpl implements CategoryService {
 
    @Autowired
    private CategoryDao categoryDao;
 
    private final Map<String, List<Category>> categoryGroups = new HashMap<String, Listlt;Category>>();
 
    // ÁúÀÇ ¸Þ¼­µå
    @Override
    public List<Category> findCategoryGroup(String categoryGroupKey) {
        // µ¥ÀÌÅÍ°¡ ÀûÀçµÇÁö ¾Ê¾ÒÀ¸¸é µ¥ÀÌÅÍ ÀúÀå¼Ò(DB)¿¡¼­ µ¥ÀÌÅÍ °¡Á®¿À±â
        if (categoryGroups.isEmpty()) {
            synchronized (categoryGroups) {
                if (categoryGroups.isEmpty()) {
                    Map<String, List<Category>> map = new HashMap<String, List<Category>>();
                    List> list = categoryDao.findAllCategories();
                    for (Category c : list)
                        map.put(c.getCategoryGroup(), c);
 
                    categoryGroups.clear();
                    categoryGroups.putAll(map);
                }
            }
        }
 
        return categoryGroups.get(categoryGroupKey);
    }
 
    // ÃʱâÈ­ ¸Þ¼­µå
    @Override
    public void invalidateCategoryGroups() {
        categoryGroups.clear();
    }
 
    // ±× ¹ÛÀÇ ¾÷¹« ·ÎÁ÷ ¸Þ¼­µåµé
    ...
}

¿øº» µ¥ÀÌÅÍ°¡ µ¥ÀÌÅͺ£À̽º¿¡¼­ ¼öÁ¤µÆÀ¸¸é ij½Ã´Â µ¥ÀÌÅ͸¦ ´Ù½Ã ÀûÀçÇØ¾ß ÇÒ °ÍÀÌ´Ù. ±×·±µ¥ ±× ½ÃÁ¡ÀÌ Ä³½Ã µ¥ÀÌÅ͸¦ »ç¿ëÇÏ´Â ½ÃÁ¡°ú ¹Ýµå½Ã ÀÏÄ¡ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ij½Ã µ¥ÀÌÅÍ°¡ ÇÊ¿äÇÑ ½ÃÁ¡Àº »ç¿ëÇÏ´Â ÂÊ¿¡¼­ °áÁ¤µÇ´Â °ÍÀÌ´Ù. ±×·¡¼­ À§¿Í °°ÀÌ Ä³½Ã¸¦ ´Ù½Ã ·ÎµùÇÏ´Â ¸Þ¼­µå°¡ ¾Æ´Ï¶ó ij½Ã µ¥ÀÌÅÍ°¡ À¯È¿ÇÏÁö ¾Ê°Ô µÇ¾ú´Ù´Â ¸Þ¼­µå¸¦ Á¤ÀÇÇÏ°Ô µÆ´Ù. ±×·¡¼­ È£ÃâÇÏ´Â ÂÊ¿¡¼­ ÃʱâÈ­ÀÇ Ã¥ÀÓÀ» Áö±â Èûµé¹Ç·Î ¾Õ¼­ »ý°¢Çß´ø loadCategoryGroups() ¸Þ¼­µåÀÇ ¿ªÇÒÀº ÁúÀÇ ¸Þ¼­µå¿¡¼­ ¼öÇàÇÏ´Â °ÍÀÌ ¸ÂÀ¸¸ç ÀÌ °úÁ¤¿¡¼­ µ¿½Ã¼ºµµ °í·ÁÇÏ¿© ±¸ÇöÇß´Ù. ¡°ÃʱâÈ­¡±¿Í ¡°µ¥ÀÌÅÍ ÀûÀ硱ÀÇ µ¿ÀÛÀº ±¸ºÐµÇ´Â °Ô ¸Â´Ù´Â ÆÇ´ÜÀÌ »ý±â¸ç À§¿Í °°ÀÌ ±¸¼ºÇÑ °ÍÀÌ´Ù.

ÀÌÁ¦ À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ »óÇ° Ä«Å×°í¸® µ¥ÀÌÅÍ°¡ ¼öÁ¤µÉ °æ¿ì À§ÀÇ invalidateCategoryGroups() ¸Þ¼­µå¸¦ È£ÃâÇÏ°í »óÇ° Ä«Å×°í¸®¸¦ °¡Á®´Ù ¾²´Â ÂÊ¿¡¼­´Â findCategoryGroup() ¸Þ¼­µå¸¦ È£ÃâÇØ »ç¿ëÇÏ¸é µÈ´Ù. À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ À־ ij½ÃÀÇ À¯½ºÄÉÀ̽º´Â ÀÌ°ÍÀ¸·Î ³¡ÀÌ´Ù. ±×·¯³ª¡¦ ¸¸¾à À¥¾ÖÇø®ÄÉÀ̼ÇÀ» °ÅÄ¡Áö ¾Ê°í µ¥ÀÌÅͺ£À̽º µ¥ÀÌÅÍ°¡ ¼öÁ¤µÇ´Â °æ¿ì´Â ¾î¶»°Ô ÇØ¾ß Çϴ°¡? µ¥ÀÌÅͺ£À̽º Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥À¸·Î SQLÀ» Á÷Á¢ ½ÇÇàÇÏ¿© µ¥ÀÌÅÍ°¡ ¼öÁ¤µÇ´Â °Í °°Àº °æ¿ì ¸»ÀÌ´Ù.

À̸¦ À§Çؼ­´Â ½Ã°£¿¡ µû¸¥ ij½Ã ÃʱâÈ­µµ ÇÊ¿äÇÏ°Ô µÈ´Ù. À̸¦ °í·ÁÇØ À§ ¸Þ¼­µå´Â ´Ù½Ã ´ÙÀ½°ú °°ÀÌ ¹Ù²î°Ô µÈ´Ù. ij½Ã À¯È¿ ½Ã°£À» 600ÃÊ(10ºÐ)·Î ¼³Á¤ÇÑ ¿¹½Ã´Ù.

@Service
public class CategoryServiceImpl implements CategoryService {
 
    @Autowired
    private CategoryDao categoryDao;
 
    private final Map<String, List<Category>> categoryGroups = new HashMap<String, Listlt;Category>>();
 
    private long categoryGroupsLoadTime;
 
    private final long categroyGroupsCacheDuration = 600 * 1000L;
 
    // ÁúÀÇ ¸Þ¼­µå
    @Override
    public List<Category> findCategoryGroup(String categoryGroupKey) {
        long now = System.currentTimeMills();
 
        // µ¥ÀÌÅÍ°¡ ÀûÀçµÇÁö ¾Ê¾ÒÀ¸¸é µ¥ÀÌÅÍ ÀúÀå¼Ò(DB)¿¡¼­ µ¥ÀÌÅÍ °¡Á®¿À±â
        if (categoryGroups.isEmpty() || now - categoryGroupsLoadTime > categroyGroupsCacheDuration) {
            synchronized (categoryGroups) {
                if (categoryGroups.isEmpty() || now - categoryGroupsLoadTime > categroyGroupsCacheDuration) {
                    Map<String, List<Category>> map = new HashMap<String, List<Category>>();
                    List> list = categoryDao.findAllCategories();
                    for (Category c : list)
                        map.put(c.getCategoryGroup(), c);
 
                    categoryGroups.clear();
                    categoryGroups.putAll(map);
                    categoryGroupsLoadTime = now;
                }
            }
        }
 
        return categoryGroups.get(categoryGroupKey);
    }
 
    // ÃʱâÈ­ ¸Þ¼­µå
    @Override
    public void invalidateCategoryGroups() {
        categoryGroups.clear();
    }
 
    // ±× ¹ÛÀÇ ¾÷¹« ·ÎÁ÷ ¸Þ¼­µåµé
    ...
}

¸¶Ä¡¸ç

À§ÀÇ »ç·Ê´Â ƯÁ¤ÇÑ µ¥ÀÌÅÍ¿¡ ´ëÇÑ ÇÑÁ¤ÀûÀÎ »ç·ÊÁö¸¸ ½±°Ô ´Ù¾çÇÑ »ç·Ê¿¡ Àû¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ°í ¹ü¿ë ij½Ã ±¸Çö¿¡ ´ëÇÑ ¹Ø±×¸²µµ ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀ̶ó »ý°¢µÈ´Ù.

¿£ÅÍÇÁ¶óÀÌÁî±Þ À¥¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ¼º´ÉÀº »ó´çÈ÷ Áß¿äÇÑ À̽´´Ù. ±× ÇÑ °¡Áö »ç·Ê·Î µ¥ÀÌÅÍ Ä³½Ã¿¡ ´ëÇØ ¿©±â¼­ ¾ð±ÞÇßÁö¸¸ Áß¿äÇÑ °ÍÀº ½ÇÁ¦·Î ¼º´ÉÀÌ °¡Àå ÀúÇϵǴ º´¸ñÀÌ ¾îµòÁö¸¦ ÆľÇÇÏ°í ±×¿¡ ¸Â°Ô ó¹æÇÏ´Â °ÍÀÏ °ÍÀÌ´Ù. ¸ÅÀϸÅÀÏÀÌ ¹®Á¦ ÇØ°áÀÇ °úÁ¤ÀÎ °³¹ßÀÚ¿¡°Ô ¼º´ÉÀº ¶Ç´Ù¸¥ º¹º´ÀÌ´Ù.