ÀÚ¿ø º¯°æ»çÇ× ÃßÀû

ÀÚ¿ø Ç÷¯±×Àο¡´Â °ü·Ã ´ç»çÀÚ¿¡°Ô ÀÚ¿ø º¯°æ»çÇ×À» ¾Ë¸®±â À§ÇÑ À̺¥Æ® ¸ÞÄ¿´ÏÁòÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. Ç÷¯±×ÀÎÀÌ ½ÇÇàµÇ°í ÀÖ´Â µ¿¾È ÀÚ¿ø Æ®¸®ÀÇ º¯°æ»çÇ×À» ÃßÀûÇØ¾ß ÇÏ´Â °æ¿ì, IResourceChangeListener¸¦ ÀÛ¾÷°ø°£¿¡ µî·ÏÇÒ ¼ö ÀÖ½À´Ï´Ù. º¯°æ»çÇ×À» ¼³¸íÇÏ´Â IResourceChangeEvent ¿ÀºêÁ§Æ®¸¦ ÅëÇØ ¸®½º³Ê¿¡ º¯°æ»çÇ×ÀÌ ÅëÁöµË´Ï´Ù.

ÀÚ¿ø º¯°æ ó¸®

ÀÚ¿ø º¯°æ»çÇ×À» ÃßÀûÇÏ·Á¸é ÀÚ¿ø º¯°æ ¸®½º³Ê¸¦ ÀÛ¾÷°ø°£¿¡ µî·ÏÇØ¾ß ÇÕ´Ï´Ù.

   IResourceChangeListener listener = new MyResourceChangeReporter();
   ResourcesPlugin.getWorkspace().addResourceChangeListener(
      listener, IResourceChangeEvent.POST_CHANGE);

ÀÛ¾÷°ø°£ ÀÚ¿øÀÌ ¼öÁ¤µÈ ÈÄ¿¡ ¸®½º³Ê¿¡ ÅëÁöµË´Ï´Ù. ÀÚ¿øÀ» ¼öÁ¤ÇÏ´Â ÀÚ¿ø API ¸Þ¼Òµå´Â ÀÌ À̺¥Æ®¸¦ ¹®¼­È­µÈ ÀÛµ¿ÀÇ ÀϺηΠƮ¸®°ÅÇÕ´Ï´Ù. ÀÚ¿ø API ¸Þ¼Òµå¿¡ ´ëÇÑ ¸Þ¼Òµå ÁÖ¼®Àº ¸Þ¼Òµå°¡ ÀÚ¿ø º¯°æ À̺¥Æ®¸¦ Æ®¸®°ÅÇÏ´ÂÁö ¿©ºÎ¸¦ ¸í½ÃÀûÀ¸·Î ¼³¸íÇÕ´Ï´Ù. ¿¹¸¦ µé¾î IFile.setContents() ÁÖ¼®¿¡ ´ÙÀ½ÀÌ Æ÷ÇԵ˴ϴÙ.

ÀÌ ¸Þ¼Òµå´Â ÀÚ¿øÀ» º¯°æÇÕ´Ï´Ù. ÀÌ º¯°æ»çÇ×Àº ÀÌ ÆÄÀÏÀÇ ÄÁÅÙÃ÷°¡ º¯°æµÇ¾ú´Ù´Â Ç¥½Ã¸¦ Æ÷ÇÔÇÏ¿©
ÈÄ¼Ó ÀÚ¿ø º¯°æ À̺¥Æ®¿¡¼­ º¸°íµË´Ï´Ù.

ÀÚ¿øÀ» ÀÛ¼º, »èÁ¦, º¯°æÇÏ´Â ¸Þ¼Òµå°¡ ÀϹÝÀûÀ¸·Î ÀÌ À̺¥Æ®¸¦ Æ®¸®°ÅÇÕ´Ï´Ù. ÀÚ¿øÀ» ÀÐÁö¸¸ ±â·ÏÇÏÁö´Â ¾Ê´Â ¸Þ¼Òµå´Â ÀϹÝÀûÀ¸·Î ÀÌ À̺¥Æ®¸¦ Æ®¸®°ÅÇÏÁö ¾Ê½À´Ï´Ù.

Àϰýó¸® º¯°æ»çÇ× ¹× ÀÚ¿ø µ¨Å¸

µ¿½Ã¿¡ ´Ù¼öÀÇ ÀÚ¿øÀ» ¼öÁ¤ÇØ¾ß ÇÒ °æ¿ì, ÇϳªÀÇ ÀÚ¿ø º¯°æ À̺¥Æ®¸¸ Àüü º¯°æ»çÇ× ¼¼Æ®¿¡ Àü¼ÛµÉ ¼ö ÀÖµµ·Ï ÀÚ¿ø º¯°æ API È£ÃâÀ» Àϰýó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. IWorkspace.run(runnable, monitor)Àº Á¶ÀÛÀ» Àϰýó¸®ÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. ÀÚ¿ø º¯°æ À̺¥Æ®´Â ÁöÁ¤µÈ runnableÀÌ ¿Ï·áµÇ¸é µî·ÏµÈ ¸®½º³Ê¿¡¸¸ Àü¼ÛµË´Ï´Ù. runnable¿¡¼­ ÀÛ¼ºµÈ Ãß°¡(ÁßøµÈ) ½ÇÇà ÇÁ·Î±×·¥Àº »óÀ§ Àϰýó¸® Á¶ÀÛÀÇ ÀϺηΠ°£ÁֵǸç, ÇØ´ç runnable¿¡¼­ ÀÛ¼ºµÈ ÀÚ¿ø º¯°æ»çÇ×Àº »óÀ§ÀÇ ÀÚ¿ø º¯°æ ¾Ë¸²¿¡ Ç¥½ÃµË´Ï´Ù.

¿©·¯ ¼¼ºÐÈ­µÈ º¯°æ»çÇ×À» ºê·Îµåij½ºÆ®ÇÏ´Â ¿À¹öÇìµå¸¦ Á¦ÇÑÇϱâ À§Çؼ­´Â °¡´ÉÇÑ º¯°æ»çÇ×À» Àϰýó¸®ÇØ¾ß ÇÕ´Ï´Ù.  Àϰý󸮸¦ »ç¿ëÇÏ´Â µ¥ ½ÇÆÐÇÏ¸é ½Ã½ºÅÛÀº ÀÚ¿ø º¯°æ ¾Ë¸²°ú ÀÚµ¿ ºôµå·Î Æ÷È­ »óŰ¡ µË´Ï´Ù.

ÀÚ¿ø º¯°æ À̺¥Æ®´Â ÀÛ¾÷°ø°£¿¡¼­ ¹ß»ýÇÑ º¯°æ ¼¼ºÎ»çÇ×(¶Ç´Â º¯°æ»çÇ× ¼¼Æ®)À» ¼³¸íÇÕ´Ï´Ù. À̺¥Æ®¿¡´Â º¯°æ»çÇ×ÀÇ ÃÖÁ¾ °á°ú¸¦ ¼³¸íÇÏ´Â ÀÚ¿ø µ¨Å¸°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, º¯°æ»çÇ×À» Àϰýó¸®ÇÏ´Â µ¿¾È ÀÚ¿øÀ» Ãß°¡Çß´Ù°¡ ³ªÁß¿¡ »èÁ¦Çϸé ÀÚ¿øÀÌ µ¨Å¸¿¡ Ç¥½ÃµÇÁö ¾Ê½À´Ï´Ù.

ÀÚ¿ø µ¨Å¸´Â ÀÛ¾÷°ø°£ ·çÆ®¿¡ Á¤ÂøµÈ Æ®¸®·Î ±¸¼ºµË´Ï´Ù. ÀÚ¿ø µ¨Å¸ Æ®¸®´Â ´ÙÀ½ À¯ÇüÀÇ º¯°æ»çÇ×À» ¼³¸íÇÕ´Ï´Ù.

ÀÚ¿ø µ¨Å¸ Æ®¸®¸¦ ¼øÈ¸Çϱâ À§ÇØ IResourceDeltaVisitor ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϰųª IResource.getAffectedChildrenÀ» »ç¿ëÇÏ¿© ¸í½ÃÀûÀ¸·Î Æ®¸®¸¦ ¼øÈ¸ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¿ø µ¨Å¸ ¹æ¹®ÀÚ´Â Æ®¸®¿¡ °¢ º¯°æ»çÇ×À» ¿­°ÅÇÒ ¶§ ÀÚ¿ø µ¨Å¸¿¡ ÀÇÇØ È£ÃâµÇ´Â visit ¸Þ¼Òµå¸¦ ±¸ÇöÇÕ´Ï´Ù.

Âü°í: ÀÚ¿ø ¼¼¼Ç Ư¼º ¶Ç´Â ÀÚ¿ø Áö¼ÓÀû Ư¼º º¯°æ»çÇ×Àº ÀÚ¿ø µ¨Å¸¿¡¼­ ½Äº°µÇÁö ¾Ê½À´Ï´Ù.

ÀÚ¿ø º¯°æ À̺¥Æ®

ÀÚ¿ø º¯°æ À̺¥Æ®´Â ÀÛ¾÷°ø°£¿¡ º¯°æ»çÇ×(¶Ç´Â Àϰýó¸®µÈ º¯°æ»çÇ× ¼¼Æ®)ÀÌ ÀÛ¼ºµÉ ¶§¸¶´Ù Àü¼ÛµË´Ï´Ù. ¶ÇÇÑ ÀÚ¿ø º¯°æ À̺¥Æ®´Â ƯÁ¤ ÀÛ¾÷°ø°£ Á¶ÀÛÀ» À§ÇØ Àü¼ÛµË´Ï´Ù. ´ÙÀ½ Å×À̺íÀº ÀÚ¿ø º¯°æ À̺¥Æ® À¯Çü°ú ÀÚ¿ø º¯°æ À̺¥Æ®°¡ º¸°íµÇ´Â ½Ã±â¸¦ ¿ä¾àÇÑ °ÍÀÔ´Ï´Ù.

À̺¥Æ® À¯Çü

¼³¸í

PRE_CLOSE

¸®½º³Ê¿¡°Ô ÇÁ·ÎÁ§Æ®°¡ 󸮿ϷáµÉ °ÍÀÓÀ» ¾Ë¸³´Ï´Ù. ÀÌ À̺¥Æ®¸¦ »ç¿ëÇÏ¿© ÇÁ·ÎÁ§Æ®°¡ 󸮿ϷáµÇ±â Àü¿¡ ÇÁ·ÎÁ§Æ®ÀÇ ³»ºÎ ¸Þ¸ð¸® Ç¥½Ã(¿¹: ¼¼¼Ç Ư¼º)¿¡¼­ ÇÊ¿äÇÑ Á¤º¸¸¦ ÃßÃâÇÏ¿© ÀúÀåÇÕ´Ï´Ù (ÇÁ·ÎÁ§Æ®°¡ 󸮿ϷáµÇ¸é, ³»ºÎ ¸Þ¸ð¸® Ç¥½Ã°¡ 󸮵Ê). ÀÌ À̺¥Æ® µ¿¾È ÀÛ¾÷°ø°£ÀÌ Àá±é´Ï´Ù. ÀÚ¿øÀ» °»½ÅÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ À̺¥Æ®¿¡´Â 󸮿Ϸá ÁßÀÎ ÇÁ·ÎÁ§Æ®°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.

PRE_DELETE

¸®½º³Ê¿¡°Ô ÇÁ·ÎÁ§Æ®°¡ »èÁ¦µÉ °ÍÀÓÀ» ¾Ë¸³´Ï´Ù. ÀÌ À̺¥Æ®¸¦ »ç¿ëÇÏ¿© Á¤¸® Á¶ÀÛ(¿¹: Ç÷¯±×ÀÎÀÇ µð·ºÅ丮¿¡¼­ ÇÁ·ÎÁ§Æ®¿Í °ü·ÃµÈ ÀúÀåµÈ »óÅ Á¦°Å)À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.  ÀÌ À̺¥Æ® µ¿¾È ÀÛ¾÷°ø°£ÀÌ Àá±é´Ï´Ù. ÀÚ¿øÀ» °»½ÅÇÒ ¼ö ¾ø½À´Ï´Ù.ÀÌ À̺¥Æ®¿¡´Â »èÁ¦ ÁßÀÎ ÇÁ·ÎÁ§Æ®°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.

PRE_AUTOBUILD

ÀÚµ¿ ºôµå°¡ ¹ß»ýÇϱâ Àü¿¡ ¸®½º³Ê¿¡°Ô ¾Ë¸³´Ï´Ù.  ÀÌ À̺¥Æ®´Â ÀÚµ¿ ºôµå°¡ ½ÇÁ¦ Ȱ¼ºÈ­µÇ¾ú´ÂÁö¿¡ °ü°è ¾øÀÌ Ç÷§Æû¿¡¼­ ÀÚµ¿ ºôµåÀÇ ¹ß»ý ¿ä±¸¸¦ °¨ÁöÇÏ¸é ºê·Îµåij½ºÆ®µË´Ï´Ù.  ÀÛ¾÷°ø°£Àº ÀÌ À̺¥Æ® µ¿¾È Àá±âÁö ¾Ê½À´Ï´Ù. ÀÚ¿øÀ» °»½ÅÇÒ ¼ö ÀÖ½À´Ï´Ù.ÀÌ À̺¥Æ®¿¡´Â ¸¶Áö¸· POST_CHANGE À̺¥Æ®°¡ º¸°íµÈ ÀÌÈÄ·Î ¹ß»ýÇÑ º¯°æ»çÇ×À» ¼³¸íÇÏ´Â ÀÚ¿ø µ¨Å¸°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.

POST_AUTOBUILD

ÀÚµ¿ ºôµå°¡ ¹ß»ýÇÑ ÈÄ¿¡ ¸®½º³Ê¿¡°Ô ¾Ë¸³´Ï´Ù. ÀÌ À̺¥Æ®´Â ÀÚµ¿ ºôµåÀÇ ½ÇÁ¦ »ç¿ë °¡´É ¿©ºÎ¿¡ °ü°è ¾øÀÌ Ç÷§Æû¿¡¼­ ÀÚµ¿ ºôµå°¡ ¼öÇàµÇ°í ³ª¸é ºê·Îµåij½ºÆ®µË´Ï´Ù.  ÀÛ¾÷°ø°£Àº ÀÌ À̺¥Æ® µ¿¾È Àá±âÁö ¾Ê½À´Ï´Ù. ÀÚ¿øÀ» °»½ÅÇÒ ¼ö ÀÖ½À´Ï´Ù.ÀÌ À̺¥Æ®¿¡´Â ¸¶Áö¸· POST_CHANGE À̺¥Æ®°¡ º¸°íµÈ ÀÌÈÄ·Î ¹ß»ýÇÑ º¯°æ»çÇ×À» ¼³¸íÇÏ´Â ÀÚ¿ø µ¨Å¸°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.

POST_CHANGE

¸¶Áö¸· POST_CHANGE À̺¥Æ®°¡ º¸°íµÈ ÀÌÈÄ·Î ÀÛ¾÷°ø°£¿¡ ¹ß»ýÇÑ º¯°æ»çÇ× ¼¼Æ®¸¦ ¼³¸íÇÕ´Ï´Ù. ÀÚ¿ø º¯°æ API°¡ °³º°ÀûÀ¸·Î »ç¿ëµÇ°Å³ª Àϰýó¸®µÈ ÀÛ¾÷°ø°£ º¯°æ»çÇ× ¼¼Æ®¿¡¼­ »ç¿ëµÈ ÈÄ¿¡ Æ®¸®°ÅµË´Ï´Ù. PRE_AUTOBUILD ¶Ç´Â POST_AUTOBUILD °ø°í°¡ ¿Ï·áµÈ ÀÌÈÄ¿¡µµ Æ®¸®°ÅµË´Ï´Ù. ÀÌ À̺¥Æ®¿¡´Â ¸¶Áö¸· POST_CHANGE À̺¥Æ® ÀÌÈÄÀÇ ÃÖÁ¾ º¯°æ»çÇ×À» ¼³¸íÇÏ´Â ÀÚ¿ø µ¨Å¸°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.  ÀÌ À̺¥Æ® µ¿¾È ÀÛ¾÷°ø°£ÀÌ Àá±é´Ï´Ù. ÀÚ¿øÀ» °»½ÅÇÒ ¼ö ¾ø½À´Ï´Ù.

ÀÚ¿ø º¯°æ ¸®½º³Ê ±¸Çö

´ÙÀ½ ¿¹´Â ÄÜ¼Ö ±â¹ÝÀÇ ÀÚ¿ø º¯°æ ¸®½º³Ê¸¦ ±¸ÇöÇÕ´Ï´Ù. ÀÚ¿ø º¯°æ ¸®½º³Ê´Â ƯÁ¤ À̺¥Æ® À¯Çü¿¡ µî·ÏµÇ¸ç, ÀÌ À̺¥Æ®¿¡ ´ëÇÑ Á¤º¸°¡ Äֿܼ¡ ÀμâµË´Ï´Ù.

IResourceChangeListener listener = new MyResourceChangeReporter();
ResourcesPlugin.getWorkspace().addResourceChangeListener(listener,
      IResourceChangeEvent.PRE_CLOSE
      | IResourceChangeEvent.PRE_DELETE
      | IResourceChangeEvent.PRE_AUTO_BUILD
      | IResourceChangeEvent.POST_AUTO_BUILD
      | IResourceChangeEvent.POST_CHANGE);

¸®½º³Ê´Â °¢ À̺¥Æ® À¯ÇüÀ» È®ÀÎÇÏ¿© º¯°æµÈ ÀÚ¿ø ¹× ¹ß»ýÇÑ º¯°æ À¯Çü¿¡ ´ëÇÑ Á¤º¸¸¦ º¸°íÇÕ´Ï´Ù.  ÀÌ ¿¹°¡ ¸ðµç ÀÚ¿ø À̺¥Æ® À¯ÇüÀ» ó¸®ÇÏ´Â ÀÏ¹Ý ¸®½º³Ê¸¦ Ç¥½ÃÇϵµ·Ï ¼³°èµÇ¾úÁö¸¸ ÀϹÝÀûÀÎ ¸®½º³Ê´Â ÇϳªÀÇ À̺¥Æ® À¯Çü¿¡¸¸ µî·ÏµË´Ï´Ù.

POST_CHANGE ¿¡ ´ëÇÑ ±¸ÇöÀº ÀÚ¿ø µ¨Å¸ÀÇ º¯°æ»çÇ×À» ¹æ¹®ÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ´Â ¶Ç´Ù¸¥ ÀÚ¿øÀ» »ç¿ëÇÕ´Ï´Ù.

   import org.eclipse.resources.*;
   import org.eclipse.runtime.*;

   public class MyResourceChangeReporter implements IResourceChangeListener {
      public void resourceChanged(IResourceChangeEvent event) {
         IResource res = event.getResource();
         switch (event.getType()) {
            case IResourceChangeEvent.PRE_CLOSE:
               System.out.print("Project ");
               System.out.print(res.getFullPath());
               System.out.println(" is about to close.");
      break;
            case IResourceChangeEvent.PRE_DELETE:
               System.out.print("Project ");
               System.out.print(res.getFullPath());
               System.out.println(" is about to be deleted.");
      break;
            case IResourceChangeEvent.POST_CHANGE:
               System.out.println("Resources have changed.");
               event.getDelta().accept(new DeltaPrinter());
      break;
            case IResourceChangeEvent.PRE_AUTO_BUILD:
               System.out.println("Auto build about to run.");
               event.getDelta().accept(new DeltaPrinter());
      break;
            case IResourceChangeEvent.POST_AUTO_BUILD:
               System.out.println("Auto build complete.");
               event.getDelta().accept(new DeltaPrinter());
      break;
         }
      }
   }

DeltaPrinter Ŭ·¡½º´Â ÀÚ¿ø µ¨Å¸¸¦ ½ÉÀÇÇϱâ À§ÇØ IResourceDeltaVisitor ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÕ´Ï´Ù. visit() ¸Þ¼Òµå°¡ ÀÚ¿ø µ¨Å¸ÀÇ °¢ ÀÚ¿ø º¯°æ»çÇ׿¡ ´ëÇØ È£ÃâµË´Ï´Ù. ¹æ¹®ÀÚ´Â ¸®ÅϰªÀ» »ç¿ëÇÏ¿© ÇÏÀ§ ÀÚ¿øÀÇ µ¨Å¸¸¦ ¹æ¹®ÇØ¾ß ÇÏ´ÂÁö ¿©ºÎ¸¦ Ç¥½ÃÇÕ´Ï´Ù.

   class DeltaPrinter implements IResourceDeltaVisitor {
      public boolean visit(IResourceDelta delta) {
         IResource res = delta.getResource();
         switch (delta.getKind()) {
            case IResourceDelta.ADDED:
      System.out.print("Resource ");
               System.out.print(res.getFullPath());
               System.out.println(" was added.");
      break;
            case IResourceDelta.REMOVED"
      System.out.print("Resource ");
               System.out.print(res.getFullPath());
               System.out.println(" was removed.");
      break;
case IResourceDelta.CHANGED:
      System.out.print("Resource ");
               System.out.print(res.getFullPath());
      System.out.println(" has changed.");
      break;
         }
         return true; // visit the children
      }
   }

Á¦°øµÈ ÀÚ¿ø µ¨Å¸¿¡¼­ ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ ½º´ÏÆêÀº ÀÚ¿ø º¯°æ»çÇ×À» ÀÚ¼¼È÷ ¼³¸íÇϱâ À§ÇØ IResourceDelta.CHANGED »ç·Ê¸¦ ±¸ÇöÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Ç¥½ÃÇÕ´Ï´Ù.

   ...
case IResourceDelta.CHANGED:
      System.out.print("Resource ");
      System.out.print(delta.getFullPath());
      System.out.println(" has changed.");
      int flags = delta.getFlags();
      if ((flags & IResourceDelta.CONTENT) != 0) {
            System.out.println("--> Content Change");
      }
      if ((flags & IResourceDelta.REPLACED) != 0) {
            System.out.println("--> Content Replaced");
      }
      if ((flags & IResourceDelta.MARKERS) != 0) {
            System.out.println("--> Marker Change");
            IMarkerDelta[] markers = delta.getMarkerDeltas();
            // if interested in markers, check these deltas
      }
      break;
   ...

ÀÚ¿ø µ¨Å¸, ¹æ¹®ÀÚ, ¸¶Ä¿ µ¨Å¸¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº IResourceDelta, IResourceDeltaVisitor ¹× IMarkerDelta¿¡ ´ëÇÑ API ½ºÆåÀ» ÂüÁ¶ÇϽʽÿÀ.

Âü°í: ÀÚ¿ø º¯°æ ¸®½º³Ê´Â Ç÷¯±×ÀÎÀÌ È°¼ºÈ­µÈ µ¿¾È ÀÚ¿ø¿¡ ¹ß»ýÇÏ´Â º¯°æ»çÇ×À» ÃßÀûÇÏ´Â µ¥ À¯¿ëÇÕ´Ï´Ù. Ç÷¯±×ÀÎÀÌ ½ÃÀÛ ÄÚµå µ¿¾È ÀÚ¿ø º¯°æ ¸®½º³Ê¸¦ µî·ÏÇϸé, Ç÷¯±×ÀÎÀÌ È°¼ºÈ­µÇ±â Àü¿¡ ´Ù¼öÀÇ ÀÚ¿ø º¯°æ À̺¥Æ®°¡ Æ®¸®°ÅµÇ¾úÀ» ¼ö ÀÖ½À´Ï´Ù. Ç÷¯±×Àο¡ ÀÇÇØ ¼ö½ÅµÈ ù ¹øÂ° ÀÚ¿ø º¯°æ À̺¥Æ®¿¡ Æ÷ÇÔµÈ ÀÚ¿ø µ¨Å¸¿¡´Â Ç÷¯±×ÀÎÀÌ ¸¶Áö¸·À¸·Î Ȱ¼ºÈ­µÈ ÀÌÈÄÀÇ ¸ðµç º¯°æ»çÇ×ÀÌ Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. Ç÷¯±×ÀΠȰ¼ºÈ­ °£¿¡ ÀÛ¼ºµÈ º¯°æ»çÇ×À» ÃßÀûÇØ¾ß ÇÏ´Â °æ¿ì, ÀÛ¾÷°ø°£ ÀúÀåÀ» À§ÇØ Á¦°øµÈ Áö¿øÀ» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ÀÌ¿¡ ´ëÇÑ ¼³¸íÀº ÀÛ¾÷°ø°£ ÀúÀå Âü¿©¸¦ ÂüÁ¶ÇϽʽÿÀ.

Copyright IBM Corporation and others 2000, 2003.