- AJAX¸¦ »ç¿ëÇØ¾ß ÇÒ±î¿ä?
- AJAX´Â Java¿Í ȣȯ °¡´ÉÇմϱî?
- Áö±Ý »ç¿ëÇϰí ÀÖ´Â ¼¹öÃø ÇÁ·¹ÀÓ¿÷ÀÌ AJAX¸¦ Á¦°øÇØ ÁÖÁö ¾ÊÀ»±î¿ä?
- ¾îµð¼ºÎÅÍ ½ÃÀÛÇØ¾ß ÇÒ±î¿ä?
- AJAX ±â´ÉÀ» Á÷Á¢ »ý¼ºÇϱâ À§ÇØ ¾Ë¾Æ¾ßÇÒ °ÍÀº ¹«¾ùÀԴϱî?
- ²À java script¸¦ ¹è¿ö¾ß Çϳª¿ä?
- ¾î¶² ÀÚ¹Ù ½ºÅ©¸³Æ® libraries¿Í ÇÁ·¹ÀÓ¿÷µéÀÌ »ç¿ë °¡´ÉÇմϱî?
- Return typeÀ¸·Î XMLÀ̳ª text, ÀÚ¹Ù ½ºÅ©¸³Æ®, HTMLÀ» »ç¿ëÇØ¾ß Çϳª¿ä?
- AJAX¸¦ »ç¿ëÇÒ ¶§ °í·ÁÇØ¾ßÇÒ Á¡Àº ¹«¾ùÀԴϱî?
- ÀÚ¹Ù ½ºÅ©¸³Æ®¸¦ ¾î¶»°Ô µð¹ö±ëÇϳª¿ä?
- AJAX È£ÃâÀ» À§ÇØ HTTP GET ¶Ç´Â POST¸¦ »ç¿ëÇØ¾ß Çմϱî?
- ¾î¶»°Ô ±¹Á¦ÀûÀÎ AJAX ÀÎÅÍ·¢¼ÇÀ» °³¹ßÇÏÁÒ?
- µ¿½Ã¿¡ ¹ß»ýÇÏ´Â AJAX request¸¦ ¾î¶»°Ô ó¸®ÇØ¾ß ÇÒ±î¿ä?
- AJAX client¿Í interactÇϱâ À§ÇØ server¿¡¼ ÇÏ´Â ÀÏÀº ¹«¾ùÀԴϱî?
- AJAX clientÀÇ »óŸ¦ ¾îµð¿¡ ÀúÀåÇÏÁö¿ä?
- formÀ̳ª formÀÇ ÇÑ ºÎºÐÀ» ÆäÀÌÁö¸¦ »õ·Î°íħÇÏÁö ¾Ê°í »ðÀÔÇÏ´Â ¹æ¹ýÀº¿ä?
- ÄÁÆ®·ÑÇÏ´Â °ÍÀº ¼¹öÀԴϱî clientÀԴϱî?
- AJAX¿Í °ü·ÃµÈ º¸¾È À̽´´Â ¹«¾ùÀԴϱî?
- Synchronous¿Í synchronous request¸¦ °¢°¢ ¾î¶² ¶§ »ç¿ëÇÏÁÒ?
- ¾ÖÇø´°ú Ç÷¯±×ÀεéÀº ¾î¶»½À´Ï±î?
- 'µÚ·Î'¿Í '¾ÕÀ¸·Î' ¹öưÀ» ¾î¶»°Ô ó¸®ÇÏÁö¿ä?
- AJAX¸¦ »ç¿ëÇØ¼ ¾î¶»°Ô À̹ÌÁö¸¦ º¸³¾ ¼ö ÀÖ½À´Ï±î?
- AJAX Æú¸µÀ» Çϱâ À§ÇÑ ¾²·¹µå¸¦ ¾î¶»°Ô »ý¼ºÇϳª¿ä?
±× ¿ì¼ö¼ºÀ¸·Î ¼¼°£ÀÇ ÈÁ¦°¡ µÇ°í ÀÖ´Â AJAXÀÌÁö¸¸, ¾î¶² ȯ°æ¿¡¼´Â »ç¿ëÀÌ ¾î·Á¿ï ¼ö ÀÖ½À´Ï´Ù. AJAX´Â ÃֽйöÀüÀÇ ºê¶ó¿ìÀú¿¡¼¸¸ ÀÛµ¿ÇÏ´Â µî ºê¶ó¿ìÀú ȣȯ¿¡ Ãë¾àÁ¡À» º¸À̸ç, AJAXÀÇ »ç¿ëÀ» À§ÇÑ »õ·Î¿î SKILL-SET ½ÀµæÀ» ÇÊ¿ä·Î ÇÕ´Ï´Ù. AJAXÀÇ ¼¼°è¿¡ º»°ÝÀûÀ¸·Î ¶Ù¾îµé±â Àü¿¡ Alex BosworthÀÇ ºí·Î±×¿¡¼ ¸î°¡Áö AJAX ½Ç¼ö¿¡ ´ëÇØ È®ÀÎÇØº¸¼¼¿ä.
AJAX
Mistakes, by Alex Bosworth
ºñ·Ï »ç¿ë ȯ°æ»ó¿¡ ¸î °¡Áö Á¦¾àÀÌ Á¸ÀçÇϱâ´Â ÇÏÁö¸¸, AJAX¸¦ »ç¿ëÇÒ °æ¿ì ½Ã½ºÅÛ ÀÀ´ä ½Ã°£ÀÌ È¹±âÀûÀ¸·Î ªÀº È¿°úÀûÀÎ ½Ö¹æÇâ À¥ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÌ °¡´ÉÇÕ´Ï´Ù.
AJAX ±â¹Ý ¾ÖÇø®ÄÉÀ̼ÇÀÌ Á¤¸»·Î ´õ ºü¸¥°¡¿¡ ´ëÇØ¼´Â ³í¶õÀÇ ¿©Áö°¡ ÀÖÁö¸¸, µ¥ÀÌŸ°¡ µÚ¿¡¼ 󸮵ǰí ÀÖ´Â µ¿¾È ȸ鿡¼´Â ¹Ù·Î Çǵå¹éÀÌ ÀÌ·ç¾îÁö¹Ç·Î »ç¿ëÀÚ´Â ½Ã½ºÅÛÀÌ Áï°¢ÀûÀ¸·Î ¹ÝÀÀÇÑ´Ù°í ´À³¢°Ô µË´Ï´Ù. ¸¸¾à ºê¶ó¿ìÀú ȣȯ ¹®Á¦¸¦ ó¸®ÇÒ ¼ö ÀÖÀ¸¸ç, ½Å±â¼ú¿¡ ¹àÀº ¾ó¸®¾î´äÅÍÀ̰ųª Á»´õ ½Ç·ÂÀ» ³ôÀÌ°í ½ÍÀº °³¹ßÀÚ¶ó¸é AJAX »ç¿ëÀ» °·ÂÈ÷ ÃßõÇÕ´Ï´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀ» AJAXÈÇÒ ¶§´Â ÀÛÀº ºÎºÐÀ̳ª ÄÄÆ÷³ÍÆ®(component)ºÎÅÍ ½ÃÀÛÇÏ¿© Â÷±ÙÂ÷±Ù ÁøÇàÇÏ´Â °ÍÀÌ Çö¸íÇÒ °ÍÀÔ´Ï´Ù. »õ·Î¿î Å×Å©³î·ÎÁö´Â ¾ðÁ¦³ª ¸Å·ÂÀûÀÌÁö¸¸, AJAX¸¦ »ç¿ëÇÏ´Â ¸ñÀûÀº ¾ÖÇø®ÄÉÀÌ¼Ç »ç¿ëÀÚ¸¦ Æí¸®ÇÏ°Ô ÇÏ´Â °ÍÀÌÁö ¾îÁö·´°Ô ÇÏ´Â °ÍÀÌ ¾Æ´ÔÀ» ±â¾ïÇսôÙ.
¹°·ÐÀÔ´Ï´Ù. Java´Â AJAX¿Í ¸Å¿ì Àß ¸Â½À´Ï´Ù. AJAX Ŭ¶óÀÌ¾ðÆ® ÆäÀÌÁö Á¦ÀÛ, AJAX ¸®Äù½ºÆ®ÀÇ Ã³¸®, AJAX Ŭ¶óÀÌ¾ðÆ®¸¦ À§ÇÑ server side state ¼³Á¤, AJAX Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°á µî¿¡ Java Enterprise Edition ¼¹ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. JavaServer Faces ÄÄÆ÷³ÍÆ® ¸ðµ¨Àº AJAX component¸¦ Á¤ÀÇÇÏ°í »ç¿ëÇϴµ¥ ¸Å¿ì ÀûÇÕÇÕ´Ï´Ù.
´ç½ÅÀº AJAX¸¦ ÀÌ¹Ì »ç¿ëÇϰí ÀÖÀ»Áöµµ ¸ð¸¨´Ï´Ù. ÇöÀçµµ ¸¹Àº ÀÚ¹Ù ±â¹Ý ÇÁ·¹ÀÓ¿÷µéÀÌ ÀÏÁ¤ ¼öÁØÀÇ AJAX ÀÎÅÍ·¢¼ÇÀ» Á¦°øÇϰí ÀÖÀ¸¸ç, AJAX ±â´ÉÀÌ ´õ¿í °ÈµÈ »õ·Î¿î ÇÁ·¹ÀÓ¿÷°ú ÄÄÆ÷³ÍÆ® ¶óÀ̺귯¸®°¡ °è¼ÓÇØ¼ °³¹ßµÇ°í ÀÖ½À´Ï´Ù. AJAX¸¦ Á¦°øÇÏ´Â ÀÚ¹Ù ÇÁ·¹ÀÓ¿÷Àº ³Ê¹«³ª ¸¹°í ´Ù¾çÇϱ⠶§¹®¿¡ ¿©±â¼ ´Ù ³ª¿ÇÒ ¼ö´Â ¾øÁö¸¸, www.ajaxpatterns.org/Java_Ajax_Frameworks¿¡ ÀÖ´Â ÀÌ ¸®½ºÆ®°¡ ÁÁÀº Âü°í°¡ µÉ °ÍÀÔ´Ï´Ù.
¾ÆÁ÷ ¾î¶² ÇÁ·¹ÀÓ¿÷À» ¾µÁö °áÁ¤ÇÏÁö ¾ÊÀ¸¼Ì´Ù¸é, JavaServer Faces³ª JavaServer Faces ±â¹ÝÀÇ ÇÁ·¹ÀÓ¿÷À» ÃßÃµÇØ µå¸³´Ï´Ù. JavaServer Faces components´Â ÀÚ¹Ù ½ºÅ©¸³Æ®³ª AJAX ÀÎÅÍ·¢¼Çs, DHML processingÀ» »ý¼ºÇϴµ¥ »ç¿ëµÇ´Â ¸¹Àº °ÍµéÀ» Ãß»óÈÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼, ½ã ÀÚ¹Ù ½ºÆ©µð¿À Å©¸®¿¡ÀÌÅÍ °°Àº JSF ȣȯ IDEÀÇ Ç÷¯±× ÀÎÀ¸·Î, ¶Ç JSF ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÒ ¶§ °£´ÜÇÑ AJAX¸¦ »ç¿ëÇÒ ¼ö ÀְԵ˴ϴÙ.
ÇöÀç »ç¿ëÇϰí ÀÖ´Â ÇÁ·¹ÀÓ¿÷ÀÇ ±â´ÉÀÌ ÃæºÐÄ¡ ¾Ê´Ù°í ´À³¢°Å³ª, Á÷Á¢ AJAX ÄÄÆ÷³ÍÆ®³ª ±â´ÉÀ» °³¹ßÇϱ⠿øÇÑ´Ù¸é, Asynchronous ÀÚ¹Ù ½ºÅ©¸³Æ® Technology and XML (AJAX) With Java 2 Platform, Enterprise Edition¶ó´Â ±ÛÀ» Àд °ÍÀ¸·Î ½ÃÀÛÇϽñ⠹ٶø´Ï´Ù.
¾ÆÁÖ ±âÃÊÀÇ ¿¹Á¦(¼Ò½ºÄÚµå Æ÷ÇÔ)¸¦ º¸±â ¿øÇÑ´Ù¸é Using AJAX with Java Technology¿¡¼ ±â¼úÀû ÆÁÀ» ¾òÀ¸½Ç ¼ö ÀÖ½À´Ï´Ù. ´õ ¸¹Àº AJAX ÀÚ·á ¸ñ·ÏÀºBlueprints AJAX Home ÆäÀÌÁö¿¡¼ È®ÀÎÇϽñ⠹ٶø´Ï´Ù.
´ÙÀ½ ´Ü°è¿¡¼´Â AJAX libraries and frameworks À» ÂüÁ¶ÇϽñ⠹ٶø´Ï´Ù. Ŭ¶óÀ̾ðÆ®Ãø AJAX ½ºÅ©¸³Æ®¸¦ Á÷Á¢ ÀÛ¼ºÇϰíÀÚ ÇÒ ¶§ óÀ½ºÎÅÍ °í¹ÎÇØ¾ßÇÏ´Â ¼ö°í¸¦ ´ú¾îÁÝ´Ï´Ù.
Dave Crane, Eric Pascarello, Darren JamesÀÇ Ã¥ AJAX in Action ¶ÇÇÑ ÁÁÀº ÀÚ·á°¡ µÉ °ÍÀÔ´Ï´Ù. ÀÌ Ã¥¿¡´Â ÀÚ¹Ù °³¹ßÀÚµéÀÌ ÀÚ¹Ù ½ºÅ©¸³Æ®¸¦ ÀÍÈú ¼ö ÀÖ´Â ºÎ·ÏÀÌ ¼ö·ÏµÇ¾î ÀÖ½À´Ï´Ù.
±âÁ¸ÀÇ AJAX ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÏÁö ¾Ê°íÀÚ ÇÑ´Ù¸é ´ÙÀ½ÀÇ ¸î°¡Áö¸¦ À¯ÀÇÇØ¾ßÇÕ´Ï´Ù.
¸ÕÀú AJAXÀÇ ±âÃʰ¡ µÇ´Â Dynamic HTMLÀ» ¹è¿ö¾ß ÇÕ´Ï´Ù. DHTMLÀº »ç¿ëÀÚ¿Í À¥ÆäÀÌÁö °£¿¡ ºê¶ó¿ìÀú ±â¹Ý ½Ç½Ã°£ ÀÎÅÍ·¢¼ÇÀ» °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù. DHTMLÀº ÀÚ¹Ù ½ºÅ©¸³Æ®, DOM(Document Object Model),CSS(Cascading Style Sheets)ÀÇ Á¶ÇÕÀ¸·Î ÀÌ·ç¾îÁ® ÀÖ½À´Ï´Ù.
- ÀÚ¹Ù ½ºÅ©¸³Æ® -ÀÚ¹Ù ½ºÅ©¸³Æ®´Â ¸ðµç ÁÖ¿ä ºê¶ó¿ìÀú°¡ Áö¿øÇϰí ÀÖ´Â ´À½¼ÇÑ Çü Á¤ÀÇ °´Ã¼ ±â¹Ý(loosely typed Object based)ÀÇ ½ºÅ©¸³Æ® ¾ð¾î·Î½á AJAXÀÇ Æ®·£Àè¼ÇÀÇ Çʼö ¿ä¼ÒÀÔ´Ï´Ù. ÆäÀÌÁö ¾ÈÀÇ ÀÚ¹Ù ½ºÅ©¸³Æ®´Â ±× ÆäÀÌÁö¿¡¼ ÆäÀÌÁö ·Îµå, Ŭ¸¯, Ű ÀÔ·Â(in a form element) µîÀÇ Æ¯Á¤ À̺¥Æ®°¡ ¹ß»ýÇϸé È£ÃâµË´Ï´Ù.
- DOM
- Á¤ÇüÈµÈ ¹®¼¿¡ ¾×¼¼½ºÇÏ¿© Á¶ÀÛÇϱâ À§ÇÑ APIÀÔ´Ï´Ù. ´ëºÎºÐÀÇ °æ¿ì DOMÀº XMLÀ̳ª HTML ¹®¼ÀÇ ±¸Á¶¸¦ ³ªÅ¸³À´Ï´Ù.
- CSS
- Ç¥Çö(presentation)ÀÌ ³»¿ë(content)°ú °ü°è¾øÀÌ ºÐ¸®µÇµµ·Ï Çϸç, JavaSctript·Î º¯°æÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
HTTPÀÇ ±âº»ÀûÀÎ ¿äû/¹ÝÀÀ Ư¼ºÀ» ÀÌÇØÇÏ´Â °Íµµ Áß¿äÇÕ´Ï´Ù. ¿¹¸¦ µé¾î XMLhttpRequest¿Í HTTP ¹ÝÀÀ Äڵ带 ±¸¼ºÇÒ ¶§ GET°ú Olst ¸Þ¼ÒµåÀÇ Â÷À̸¦ °£°úÇÑ´Ù¸é callbackÀ» ó¸®ÇÒ ¶§ ¹Ì¼¼ÇÑ ¹ö±×µéÀÌ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.
¾î¶² ¸é¿¡¼ ÀÚ¹Ù ½ºÅ©¸³Æ®´Â Ŭ¶óÀ̾ðÆ®Ãø Á¢ÂøÁ¦¶ó°íµµ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¹Ù ½ºÅ©¸³Æ®´Â Xmlhttprequest ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇϰųª ºñµ¿±â È£ÃâÀ» À¯¹ßÇϴµ¥ »ç¿ëµÇ¸ç, µ¹¾Æ¿Â ³»¿ëÀ» ÆÄ½ÌÇÏ°í ºÐ¼®ÇÏ´Â µ¥ »ç¿ëÇÕ´Ï´Ù. ÀÚ¹Ù ½ºÅ©¸³Æ®´Â ¶ÇÇÑ µ¹¾Æ¿Â ¸Þ½ÃÁö¸¦ ÇÁ·Î¼¼½ÌÇÏ´Â µ¥ »ç¿ëµÇ¸ç, DOM API¸¦ »ç¿ëÇÏ´Â HTML¿¡ CSS¸¦ ¼öÁ¤Çϱâ À§ÇØ »õ·Î¿î ¸Þ½ÃÁö¸¦ »ðÀÔÇÏ´Â µ¥¿¡µµ »ç¿ëµË´Ï´Ù.
³×, À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ »õ·Î¿î AJAX ±â´ÉÀ» °³¹ßÇϰíÀÚ ÇÑ´Ù¸é ±âº»ÀûÀ¸·Î´Â ±×·¸½À´Ï´Ù.
±×·¯³ª JSF ÄÄÆ÷³ÍÆ®¿Í ÄÄÆ÷³ÍÆ® ¶óÀ̺귯¸®°¡ ÀÚ¹Ù ½ºÅ©¸³Æ®, DOM, CSSÀÇ µðÅ×ÀÏÀ» Ãß»óÈÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ ÄÄÆ÷³ÍÆ®µéÀÌ AJAX ÀÎÅÍ·¢¼ÇÀ» °¡´ÉÇÏ°Ô ¸¸µå´Âµ¥ ÇÊ¿äÇÑ Àΰø¹°(artifacts)À» ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ, ÀÚ¹Ù ½ºÆ©µð¿À Å©¸®¿¡ÀÌÅÍ °°Àº ºñÁÖ¾ó ÅøµéÀº ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇϴµ¥ JSF ÄÄÆ÷³ÍÆ®°¡ enableµÈ AJAX¸¦ ÀÌ¿ëÇϱ⵵ Çϸç, ÀÌ¿¡ µû¶ó Åø °³¹ßÀÚ´Â AJAXÀÇ ¼¼¼¼ÇÑ ÄÚµåµéÀº Á÷Á¢ ´Ù·çÁö ¾Ê¾Æµµ µË´Ï´Ù. ±×·¯³ª »ç¿ëÀÚ °íÀ¯ÀÇ JSF ÄÄÆ÷³ÍÆ®¸¦ °³¹ßÇϰųª ÇϳªÀÇ Åø¿¡ ¿©·¯ ÄÄÆ÷³ÍÆ®¸¦ ¹À¸·Á°í ÇÑ´Ù¸é ÀÚ¹Ù ½ºÅ©¸³Æ®¿¡ ´ëÇÑ ±âº»ÀûÀÎ ÀÌÇØ°¡ ²À ÇÊ¿äÇÕ´Ï´Ù. ºê¶ó¿ìÀú°£ Â÷À̸¦ Ãß»óÈÇÑ ÀÚ¹Ù ½ºÅ©¸³Æ®¸¦ ÀÌ¿ëÇϴ Ŭ¶óÀÌ¾ðÆ® ÀÚ¹Ù ½ºÅ©¸³Æ® ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¹Ù ½ºÅ©¸³Æ® object¸¦ ¹è¿ì°íÀÚÇÏ´Â ÀÚ¹Ù °³¹ßÀÚ¿¡°Ô´Â Object Hierarchy and Inheritance in ÀÚ¹Ù ½ºÅ©¸³Æ®°¡ Å« µµ¿òÀÌ µÉ °ÍÀÔ´Ï´Ù.
ÀÌ¹Ì ¸¹Àº ¶óÀ̺귯¸®¿Í ÇÁ·¹ÀÓ¿÷µéÀÌ ºê¶ó¿ìÀú Â÷ÀÌ¿Í °°Àº ¼º°¡½Å °ÍµéÀ» Ãß»óÈÇÏ´Â °ÍÀ» ½±°ÔÇϰí ÀÖÀ¸¸ç, Áö±Ýµµ ¸¹ÀÌ »ý°Ü³ª°í ÀÖ½À´Ï´Ù. ±× Áß dojo toolkit, prototype, DWR ÀÌ ¼¼°¡Áö ÁÁÀº ¶óÀ̺귯¸®¸¦ ¼Ò°³ÇÕ´Ï´Ù.
- Dojo Toolkit
Àº ¸®Ä¡ÇÑ À¥ ¾ÖÇø®ÄÉÀ̼Ç(rich web application)ÀÇ °³¹ßÀ» Áö¿øÇϱâ À§ÇÑ APIµé°ú À§Á¬(widget)µéÀ» Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. Dojo´Â intelligent packaging system, UI È¿°ú, Drag and drop API, widget API, event abstraction, client storage API, AJAX ÀÎÅÍ·¢¼Ç APIµîÀ» Æ÷ÇÔÇÕ´Ï´Ù. Dojo´Â ºê¶ó¿ìÀúÀÇ 'µÚ·Î(back)' ¹öư °¨Áö ±â´É, url ¹ÙÀÇ urlÀ» ºÏ¸¶Å©ÇÏ´Â ±â´É, client ÂÊ¿¡¼ AJAX³ª ÀÚ¹Ù½ºÅ©¸³Æ®°¡ ¿ÏÀüÈ÷ Áö¿øµÇÁö ¾ÊÀ» ¶§ ºÎµå·¯¿î ó¸® ±â´É°ú °°Àº ³×ºñ°ÔÀÌ¼Ç °ü·Ã ¼Æ÷Æ®¿Í °°Àº º¸ÆíÀûÀÎ »ç¿ë¿¡ °üÇÑ ¹®Á¦µéÀ» ÇØ°áÇØ ÁÝ´Ï´Ù. Dojo´Â ÀÚ¹Ù½ºÅ©¸³Æ® ¶óÀ̺귯¸®ÀÇ ¸Æ°¡À̹öÄ® °°Àº Á¸Àç¶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇϳªÀÇ ¶óÀ̺귯¸®·Î½á´Â °¡Àå ³ÐÀº ¹üÀ§ÀÇ ¿É¼ÇÀ» Á¦°øÇϸç, ½Å/±¸¹öÀüÀ» ¸··ÐÇÏ°í ¿©·¯ ºê¶ó¿ìÀúµéÀ» ÈǸ¢È÷ Áö¿øÇÕ´Ï´Ù.
- Prototype
Àº ÀÚ¹Ù½ºÅ©¸³Æ® AJAX ¿ÀºêÁ§Æ®¸¦ Æ÷ÇÔÇÑ AJAX ÀÎÅÍ·¢¼Ç¿¡ ÃÊÁ¡À» ¸ÂÃß°í ÀÖ½À´Ï´Ù. ÀÌ´Â ¿äûÀ» Çϰųª, ¹®¼ÀÇ ÀϺθ¦ ¾÷µ¥ÀÌÆ®Çϰųª, ¹®¼¿¡ ³»¿ëÀ» »ðÀÔÇϰųª, ¹®¼ÀÇ ÀϺθ¦ ÁÖ±âÀûÀ¸·Î ¾÷µ¥ÀÌÆ® ÇÏ´Â °Í°ú °°Àº ±âº»ÀûÀΠŽºÅ©¸¦ ¼öÇàÇÒ ¸î°¡Áö ¿ÀºêÁ§Æ®¸¦ Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. ÇÁ·ÎÅäÆÄÀÔ ÀÚ¹Ù½ºÅ©¸³Æ® ¶óÀ̺귯¸®´Â AJAX ¿äûÀ» ³ªÅ¸³¾ ÀÏ·ÃÀÇ ÀÚ¹Ù½ºÅ©¸³Æ® ¿ÀºêÁ§Æ®µéÀ» Æ÷ÇÔÇϰí ÀÖÀ¸¸ç, ÆäÀÌÁö ³» ÄÄÆ÷³ÍÆ®¿¡ Á¢±ÙÇϰųª DOMÀ» Á¶ÀÛÇÏ´Â À¯Æ¿¸®Æ¼ ±â´Éµµ Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. Script.aculo.us¿Í Rico´Â ÇÁ·ÎÅäŸÀÔÀÇ ÃÖ»óÀ§¿¡ ±¸ÃàµÇ¾úÀ¸¸ç UI È¿°ú¸¦ Á¦°ø, µå·¡±× ¾Ø µå¶øÀ» Áö¿øÇϰí, ÀϹÝÀûÀÎ ÀÚ¹Ù½ºÅ©¸³Æ® Á᫐ À§Á¬À» Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. prototypeÀº AJAX ÀÎÅÍ·¢¼ÇÀ» ºñ·Ô ±âº»ÀûÀÎ ¸î °³ÀÇ Å½ºÅ©¸¸ Áö¿øÇÏ´Â °ÍÀ» ã´Â »ç¶÷µé¿¡°Ô ÀûÇÕÇÕ´Ï´Ù. ¸¸¾à UI È¿°úµµ ¿øÇÑ´Ù¸é Rico³ª Script.aculo.us¸¦ ¼±ÅÃÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù.
- Yahoo UI Library ´Â À¯Æ¿¸®Æ¼ ¶óÀ̺귯¸®À̸ç, ¸®Ä¡ Ŭ¶óÀÌ¾ðÆ®¸¦ Áö¿øÇϴµ¥ API¸¦ »ç¿ëÇÏ´Â À§Á¬µéÀÇ ÁýÇÕÀ¸·Î, Å©·Î½º ºê¶ó¿ìÀú AJAX ÀÎÅÍ·¢¼Ç, ¾Ö´Ï¸ÞÀ̼Ç, DOM ½ºÅ©¸³Æ® Áö¿ø, µå·¡±× ¾Ø µå¶ø, Å©·Î½º ºê¶ó¿ìÀú À̺¥Æ® Áö¿ø µîÀ» Æ÷ÇÔÇÕ´Ï´Ù. Yahoo UI ¶óÀ̺귯¸®´Â ¼¼½ÉÇÏ°Ô ÀÛ¼ºµÇ¾î ÀÖÀ¸¸ç ¸¹Àº ¿¹Á¦¸¦ Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù.
- DWR (Dynamic
Web Remoting)
´Â Ŭ¶óÀ̾ðÆ®ÃøÀÌÀÚ ¼¹öÃø ÇÁ·¹ÀÓ¿÷À¸·Î, °³¹ßÀÚ°¡ Ŭ¾ÆÀ̾ðÆ®Ãø ÀÚ¹Ù½ºÅ©¸³Æ®ºÎÅÍ ÀÚ¹Ù ¿£ÅÍÇÁ¶óÀÌÁî ¿¡µð¼Ç À¥ ÄÁÅ×ÀÌ³Ê ³» Æò¹üÇÑ ±âÁ¸ ÀÚ¹Ù ¿ÀºêÁ§Æ®±îÁö RPC¸¦ È£ÃâÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â µ¥¿¡ ÃÊÁ¡À» ¸ÂÃß°í ÀÖ½À´Ï´Ù. ¼¹öÃø¿¡¼ DWRÀº ÀÚ¹Ù ¿ÀºêÁ§Æ®¿Í ÀÎÅÍ·¢¼ÇÇÏ´Â µ¥ ¼ºí·¿À» »ç¿ëÇÏ¿© ÀÚ¹Ù ¿ÀºêÁ§Æ®³ª XML ¹®¼ÀÇ ¿ÀºêÁ§Æ® Ç¥ÇöÀ» ¸®ÅÏÇÕ´Ï´Ù. DWRÀº ½±°Ô µ¹¾Æ°¥ °ÍÀÌ°í ´Ù¸¥ ÀÚ¹Ù ±â¼úµé°ú Àß Á¶ÈµË´Ï´Ù. ÅëÇÕÀÌ ÀߵǴ Ŭ¶óÀ̾ðÆ®/¼¹ö °â¿ë ÇÁ·¹ÀÓ¿÷À» ã´Â´Ù¸é DWRÀ» »ç¿ëÇÏ½Ã¸é µË´Ï´Ù.
- Zimbra ´Â ¸®Ä¡ ÀÚ¹Ù½ºÅ©¸³Æ® ±â¹ÝÀÇ Å¬¶óÀÌ¾ðÆ®¿¡°Ô e-mailÀ» ³ëÃâ(expose)ÇÏ´Â ±â´É µî ¸Þ½Ã¡À» °¡´ÉÇÏ°Ô ÇÏ´Â °Í¿¡ ÁßÁ¡À» µÎ´Â Ŭ¶óÀ̾ðÆ®/¼¹ö ÇÁ·¹ÀÓ¿÷ÀÔ´Ï´Ù. Æ÷ÇԵǾî ÀÖ´Â ÅøÅ¶¿¡´Â, ºê¶ó¿ìÀú Â÷À̸¦ ÃßÃâÇÏ´Â UI toolkit API(´Ù¾çÇÑ ºôÆ®ÀÎ À§Á¬ Æ÷ÇÔ), UI À̺¥Æ® Ä¿¹Â´ÏÄÉÀ̼ǰú Ŭ¶óÀ̾ðÆ®-¼¹ö À̺¥Æ® Ä¿¹Â´ÏÄÉÀ̼ÇÀ» °¡´ÉÇÏ°Ô ÇÏ´Â À̺¥Æ® API, Ŭ¶óÀÌ¾ðÆ® »ó¿¡¼ ÀÚ¹Ù½ºÅ©¸³Æ® °³¹ßÀ» ½±°Ô ÇÏ´Â À¯Æ¿¸®Æ¼ Ŭ·¡½º, Å©·Î½º ºê¶ó¿ìÀÚ DOM ¹®Á¦ 󸮸¦ ½±°Ô ÇÏ´Â DOM API Ãß»ó, ÀÚ¹Ù½ºÅ©¸³Æ® Ŭ¶óÀÌ¾ðÆ®°¡ AJAX¿Í SOAP¸¦ ÀÌ¿ëÇÏ¿© Ä¿¹Â´ÏÄÉÀ̼ÇÇÏ´Â °ÍÀ» µ½´Â network API°¡ ÀÖ½À´Ï´Ù.
ÀÚ¹Ù ½ºÅ©¸³Æ®¸¦ À§ÇÑ »õ·Î¿î ¶óÀ̺귯¸®µéÀÌ ½ñ¾ÆÁ® ³ª¿À°í ÀÖÀ¸¸ç, À§ÀÇ ¸ñ·ÏÀº ¸¹ÀÌ ¾Ë·ÁÁø l¶óÀ̺귯¸®µé¿¡ ´ëÇØ¼¸¸ ¼Ò°³ÇÑ °ÍÀÔ´Ï´Ù. ¶óÀ̺귯¸®¸¦ ¼±ÅÃÇÒ ¶§´Â °³¹ßÀÚ º»ÀÎÀÇ Çʿ並 °¡Àå Àß ÃæÁ·½ÃÄÑ ÁÖ´Â °ÍÀ» ¼±ÅÃÇϽñ⠹ٶø´Ï´Ù. ÇϳªÀÇ ¶óÀ̺귯¸®¸¦ ¼±ÅÃÇÏ´Â °ÍÀÌ ÁÁÁö¸¸, ¿©·¯ Á¾·ùÀÇ ÇÁ·¹ÀÓ¿÷À» »ç¿ëÇÏ¿©µµ ¹®Á¦ ¾ø½À´Ï´Ù. Á» ´õ Ŭ¶óÀ̾ðÆ®Ãø ÇÁ·¹ÀÓ¿÷ÀÇ ¸®½ºÆ®´Â Survey of AJAX/ÀÚ¹Ù ½ºÅ©¸³Æ® Libraries¸¦ Âü°íÇϽñ⠹ٶø´Ï´Ù.
°æ¿ì¿¡ µû¶ó ´Ù¸¨´Ï´Ù. AJAXÀÇ X°¡ XML¸¦ ¶æÇϱâ´Â ÇÏÁö¸¸, ¸î¸î AJAX ÇÁ·ÎÆ÷³ÍÆ®ÀÇ °æ¿ì ÇØ´ç AJAX ÀÚü´Â ÀÚ¹Ù ½ºÅ©¸³Æ®³ª html, ´Ü¼ø text µîÀÇ ÀÌ(ì¶)Á¾ payloadÀÇ »ç¿ëÀ» ÀüÇô Á¦ÇÑÇϰí ÀÖÁö ¾ÊÀ½À» ±Ý¹æ ¾Ë¾ÆÃ§ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.
-
XML - À¥ ¼ºñ½º¿Í AJAX´Â ¼·Î¸¦ À§ÇØ ¸¸µé¾îÁø °Íó·³ Àß ¸Â½À´Ï´Ù. RESTful Web Services·ÎºÎÅÍ XML ÄÁÅÙÃ÷¸¦ ´Ù¿î·Îµå¹Þ°í ÆÄ½ÌÇϴµ¥ Ŭ¶óÀ̾ðÆ®Ãø API¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. (±×·¯³ª ¸î¸î SOAP ±â¹Ý À¥¼ºñ½º ¾ÆÅ°ÅØÃ³ÀÇ °æ¿ì payload°¡ »ó´çÈ÷ Å©°í º¹ÀâÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ¿¡ µû¶ó AJAX Å×Å©´ÐÀ» Àû¿ëÇϱ⿡ ºÎÀû´çÇÒ ¼ö ÀÖ½À´Ï´Ù.)
- ´Ü¼ø Text - ¼¹ö¿¡¼ »ý¼ºµÈ ÅØ½ºÆ®°¡ ¹®¼¿¡ ÁÖÀԵǰųª Ŭ¶óÀ̾ðÆ®Ãø ·ÎÁ÷¿¡ ÀÇÇØ evaluateµË´Ï´Ù.
-
ÀÚ¹Ù ½ºÅ©¸³Æ® - ¼¹öÃø ÄÄÆ÷³ÍÆ®°¡ ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼ ¼±¾ðÀ» Æ÷ÇÔÇÑ ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ fragment¸¦ Àü´ÞÇÑ´Ù´Â ¿¹¿Ü¸¦ Á¦¿ÜÇϰí´Â ´Ü¼ø textÀÇ ¿¬Àå¼±À¸·Î º¼ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ
eval() ±â´ÉÀ» ÀÌ¿ëÇÏ¿© Ŭ¶óÀÌ¾ðÆ® »ó¿¡¼ °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. µ¥ÀÌÅÍ ±³È¯ ¸í¼¼¿¡ ±â¹ÝÇÑ ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼ÀÎ JSONÀÌ ÀÌ ¹æ¹ýÀ» ÀÌ¿ëÇÕ´Ï´Ù.
- HTML - ¼¹ö¿¡¼ »ý¼ºµÈ HTML fragment¸¦ ¹®¼¿¡ ¹Ù·Î ÁÖÀÔÇÏ´Â °ÍÀº ÀϹÝÀûÀ¸·Î ¸Å¿ì È¿°úÀûÀÎ AJAX Å×Å©´ÐÀÔ´Ï´Ù. ÇÏÁö¸¸, ¼¹öÃø ÄÄÆ÷³ÍÆ®¸¦ Ŭ¶óÀ̾ðÆ®ÀÇ È¸é µð½ºÇ÷¹ÀÌ¿Í °°µµ·Ï À¯ÁöÇÏ´Â °ÍÀº º¹ÀâÇÒ ¼ö ÀÖ½À´Ï´Ù.
MashupÀº ÀÌ(ì¶)Á¾ÀÇ À¥¼ºñ½º³ª ±âŸ ´Ù¸¥ ¿Â¶óÀÎ API¿¡¼ °¡Á®¿Â ³»¿ëÀ» Á¶ÇÕÇÔÀ¸·Î½á ¿ÏÀüÈ÷ »õ·Î¿î À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µå´Â °ÍÀ» ÀÏÄ´ À¯¸íÇÑ ¿ë¾îÀÔ´Ï´Ù. Mashup¿¡ ´ëÇÑ ÁÁÀº ¿¹´Â craiglist.orgÀÇ ÁÖÅà ±¤°í¿Í maps.google.comÀÇ Áöµµ¸¦ ±×·¡ÇÈÀûÀ¸·Î Á¶ÇÕÇÏ´Â housingmaps.com¿¡¼ ã¾Æº¼ ¼ö ÀÖ½À´Ï´Ù.
AJAX ÀÎÅÍ·¢¼Ç°ú DHTMLÀ» ÅëÇØ °Ë»öµÈ µ¥ÀÌÅ͸¦ ´ÙÀ̳»¹ÍÇÏ°Ô »ç¿ëÇÏ¿© ÆäÀÌÁö¸¦ ¾÷µ¥ÀÌÆ®ÇÏ¸é ÆäÀÌÁöÀÇ ¸ð½À°ú »óŰ¡ °ú°¨È÷ ¹Ù²ð ¼öµµ ÀÖ½À´Ï´Ù. »ç¿ëÀÚ´Â ¿øÇÏ´Â ¶§¿¡ ºê¶ó¿ìÀúÀÇ 'µÚ·Î' ȤÀº '¾ÕÀ¸·Î'¹öưÀ» »ç¿ëÇϰųª, ÆäÀÌÁö¸¦ ºÏ¸¶Å©Çϰųª, url bar¿¡¼ urlÀ» Ä«ÇÇÇÏ°í ±×°ÍÀ» e-mailÀ̳ª ¿Â¶óÀÎ ¸Þ½ÅÀú¸¦ ÅëÇØ Ä£±¸¿Í °øÀ¯Çϰųª ÆäÀÌÁö¸¦ ÀμâÇÒ ¼ö ÀÖ½À´Ï´Ù. AJAX ±â¹Ý ¾ÖÇø®ÄÉÀÌ¼Ç ¼³°è ½Ã ³×ºñ°ÔÀ̼Ç, ºÏ¸¶Å·, Àμâ, ºê¶ó¿ìÀú Áö¿øÀÇ °æ¿ì¿¡ ¿¹»óµÇ´Â ºñÇìÀ̺ñ¾î¿¡ ´ëÇØ ´ÙÀ½°ú °°ÀÌ °í·ÁÇØ¾ß ÇÕ´Ï´Ù.
- ³×ºñ°ÔÀÌ¼Ç - ¾ÖÇø®ÄÉÀÌ¼Ç µðÀÚÀο¡¼ ºê¶ó¿ìÀúÀÇ [µÚ·Î, ¾ÕÀ¸·Î, »õ·Î°íħ, Áñ°Üã±â¿¡ Ãß°¡] ¹öưÀ» Ŭ¸¯ÇÒ °æ¿ìÀÇ ºñÇìÀ̺ñ¾î. ¼öÀÛ¾÷À¸·Î(manually)Áö³ history manipulationÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù¸é, APIÀÇ history manipulation°ú ³×ºñ°ÔÀÌ¼Ç ÄÁÆ®·ÑÀ» Á¦°øÇÏ´Â Dojo¿Í °°Àº ÀÚ¹Ù½ºÅ©¸³Æ® ÇÁ·¹ÀÓ¿÷À» »ç¿ëÇÏ´Â °ÍÀÌ ´õ ½¬¿ï °ÍÀÔ´Ï´Ù.
- Áñ°Üã±â Ãß°¡¿Í URL °øÀ¯Çϱâ - ¸¹Àº »ç¿ëÀÚµéÀº URLÀ» Áñ°Üã±â¿¡ Ãß°¡Çϰųª, ÁÖ¼Òâ¿¡¼ Àß¶ó³»¾î ºÙ¿©³Ö±â ÇÏ°í ½Í¾îÇÕ´Ï´Ù. Dojo´Â Áñ°Üã±â Ãß°¡¿Í URL Á¶ÀÛÀ» À§ÇÑ Å¬¶óÀÌ¾ðÆ® ÃøÀ» Á¦°øÇÕ´Ï´Ù.
- Àμâ - ´ÙÀ̳»¹ÍÇÏ°Ô Ç¥ÇöµÇ´Â ÆäÀÌÁö´Â °¡²û ÀμâÇÒ ¶§ ¹®Á¦°¡ µÇ±âµµ ÇÕ´Ï´Ù.
°³¹ßÀڷμ AJAX¸¦ »ç¿ëÇÒ ¶§ °í·ÁÇØ¾ß ÇÒ ¶Ç´Ù¸¥ Á¡;
- ºê¶ó¿ìÀú Áö¿ø - ¸ðµç AJAX/DHTMLÀÇ ±â´ÉÀÌ ¸ðµç ºê¶ó¿ìÀú¿¡¼ Áö¿øµÇ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. Áö¿ø ºê¶ó¿ìÀú°ú °¡´ÉÇÑ ´ë¾È ¸ñ·ÏÀº quirksmode.org¿¡¼ º¼ ¼ö ÀÖ½À´Ï´Ù.
- ÀÚ¹Ù½ºÅ©¸³Æ® ²ô±â - ¸¸¾à »ç¿ëÀÚ°¡ ÀÚ¹Ù½ºÅ©¸³Æ® ±â´ÉÀ» Ȱ¼ºÈÇÏÁö ¾Ê´Â´Ù¸é ¾î¶² ÀÏÀÌ ¹ú¾îÁúÁöµµ ¹Ì¸® °í·ÁÇØ¾ß ÇÕ´Ï´Ù. ´õ±¸³ª, °£È¤ ¾î¶² »ç¿ëÀÚÀÇ À¥ ºê¶ó¿ìÀú¿¡¼´Â ¸î °¡Áö ÀÌÀ¯·Î ÀÚ¹Ù½ºÅ©¸³Æ®¿Í cssÁö¿øÀÌ ºÒ°¡´ÉÇÒ ¼ö¹Û¿¡ ¾ø½À´Ï´Ù.
- ´ë±â ½Ã°£ - ¼³°è½Ã ´ë±â ½Ã°£À» °í·ÁÇØ¾ß ÇÕ´Ï´Ù. ÀÛµ¿ ÁßÀÎ ¾ÖÇø®ÄÉÀ̼ÇÀº ´ç¿¬È÷ deployedµÇ¾úÀ» ¶§ÀÇ ¾ÖÇø®ÄÉÀ̼Ǻ¸´Ù ÈξÀ ¹ÝÀÀÀÌ ºü¸¨´Ï´Ù. ¶ÇÇÑ, ¿©·¯ °³ÀÇ ¸®Äù½ºÆ®¸¦ »ý¼ºÇßÀ» ¶§ ¸ðµç return order°¡ º¸ÀåµÇ´Ï ¾ÊÀ½À» ±â¾ïÇØ¾ß ÇÕ´Ï´Ù. ´ë±â ½Ã°£¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³íÀÇ´Â AJAX Latency problems: myth or reality?¸¦ Âü°íÇϽñ⠹ٶø´Ï´Ù.
- Á¢±Ù¼º - Àå¾Ö°¡ ÀÖ´Â »ç¶÷µéµµ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â »çÀÌÆ®¸¦ ¸¸µå´Â °ÍÀº °í±ÍÇÑ Á¤½ÅÀÇ Â÷¿øÀÌ ¾Æ´Ï¶ó, ¸¹Àº ½ÃÀå¿¡¼ ¹ýÀ¸·Î ±ÔÁ¤µÇ¾î ÀÖ½À´Ï´Ù. ¸î¸î ÈǸ¢ÇÑ Å×Å©³î·ÎÁöµé ´öºÐ¿¡ ½Ã°¢ Àå¾Ö, û°¢ Àå¾Ö, ½Åü Àå¾Ö, ¾ð¾î Àå¾Ö, ÀÎÁö Àå¾Ö, ½Å°æ Àå¾Ö µî Àå¾Ö¸¦ °¡Áø »ç¶÷µéµµ À¥À» ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù. Á¶±Ý ¾Õ¼± ½Ã°¢À¸·Î ¸î¸î º£½ºÆ® ÇÁ·ºÆ¼½º¸¦ »ìÆìº»´Ù¸é enabling ±â¼ú°ú ȣȯÀÌ °¡´ÉÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.
Degradability¶õ ´Ù¾çÇÑ À¥ ºê¶ó¿ìÀúÀÇ ´Ù¾çÇÑ »ç¾ç¿¡ ÀûÀÀÇϱâ À§ÇØ À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ¾²ÀÌ´Â Å×Å©´ÐÀ» ¸»ÇÕ´Ï´Ù. ¸¹Àº AJAX ¶óÀ̺귯¸®´Â ÀÚµ¿ degradability¸¦ ³»ÀåÇϰí ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ÀÚüÀûÀ¸·Î AJAX ±â´ÉÀ» ÄÚµùÇϰí ÀÖ´Ù¸é, W3C(World Wide Web Consortium)¿Í °°Àº Ç¥ÁØ ±â±¸¿¡¼ ÃßõÇÏ´Â ÁÁÀº ¿¹Á¦³ª Web Standards Ä¿¹Â´ÏƼ °°Àº °÷¿¡¼ ÀÌ·ç¾îÁö´Â ¿òÁ÷ÀÓ¿¡ °ü½ÉÀ» °¡Á®º¸½Ã±â ¹Ù¶ø´Ï´Ù. À̸¦ ÅëÇØ AJAX¸¦ Áö¿øÇÏÁö ¾Ê´Â ºê¶ó¿ìÀú¿¡¼µµ µ¹¾Æ°¡´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ÀÌ·± ±¸Çü ºê¶ó¿ìÀú¿¡¼´Â ´«±æÀ» È® Àâ¾Æ²ô´Â ¿ä¼Ò´Â Ç¥ÇöµÇÁö ¾ÊÀ» ¼ö ÀÖÁö¸¸, ¿©ÀüÈ÷ ¹«³ÇÏ°Ô ÀÛµ¿ÇÒ °ÍÀÔ´Ï´Ù.
´ÜÁö ¸ÚÁ® º¸ÀÌ°Ô Çϱâ À§Çؼ AJAX¸¦ »ç¿ëÇØ¼´Â ¾È µË´Ï´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ´Â ÀÌÀ¯´Â »ç¶÷µéÀÌ »ç¿ëÇÏ°Ô Çϱâ À§ÇؼÀÔ´Ï´Ù. »ç¿ëÀÚµéÀº ±×µéÀÇ À¥ºê¶ó¿ìÀú¿Í ȣȯÀÌ µÇÁö ¾Ê´Â´Ù¸é ±× ¾ÖÇø®ÄÉÀ̼ÇÀ» »ç¿ëÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.
Ŭ¶óÀ̾ðÆ®Ãø µð¹ö±ë°ú ¼¹öÃø µð¹ö±ëÀ» µ¿½Ã¿¡ Áö¿øÇÏ´Â ÅøÀº ¸¹Áö ¾Ê½À´Ï´Ù. ±×·¯³ª AJAX ¾ÖÇø®ÄÉÀ̼ÇÀÌ È®»êµÇ¸é »óȲÀÌ ¸¹ÀÌ ¹Ù²ð °ÍÀ̶ó°í »ý°¢ÇÕ´Ï´Ù. ÇÊÀÚÀÇ °æ¿ì ÇöÀç Ŭ¶óÀ̾ðÆ®Ãø µð¹ö±ë°ú ¼¹öÃø µð¹ö±ëÀ» µû·Î Çϰí ÀÖ½À´Ï´Ù. ¾Æ·¡´Â º¸ÆíÈµÈ ºê¶ó¿ìÀúµé¿¡¼ »ç¿ëµÇ´Â Ŭ¶óÀ̾ðÆ®Ãø µð¹ö°Åµé¿¡ ´ëÇÑ ¼³¸íÀÔ´Ï´Ù.
- Firefox/Mozilla/Netscape - venkmanÀ̶ó´Â ¸Å¿ì À¯¿ëÇÑ µð¹ö°Å¸¦ Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. ÇÊÀÚ °³ÀÎÀûÀ¸·Î´Â ÁÖ·Î firefox »ó¿¡¼ ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ°í ³ª¼ ´Ù¸¥ ºê¶ó¿ìÀú¸¦ ½ÃµµÇÏ´Â °ÍÀ» ÁÁ¾ÆÇÕ´Ï´Ù.
- Safari - Ȱ¼ºÈµÇ¾î¾ß ÇÏ´Â µð¹ö°Å¸¦ Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº Safari FAQ¸¦ Âü°íÇϽñ⠹ٶø´Ï´Ù.
- Internet explorer - ÀÚ¹Ù ½ºÅ©¸³Æ®¸¦ µð¹ö±ëÇÏ´Â µ¥¿¡ ´ëÇÑ MSDN Documentation°¡ ÀÖ½À´Ï´Ù. IE¸¦ À§ÇÑ developer toolbar ¿ª½Ã µµ¿òÀÌ µÉ °ÍÀÔ´Ï´Ù.
¹°·Ð ¸¹Àº °³¹ßÀÚµéÀÌ »ç¿ëÇÏ´Â alert() functionÀ» System.out.println()¿Í °°ÀÌ ÇÔ¼ö È£ÃâÇϴ°͵µ °¡´ÉÇÕ´Ï´Ù. Dojo¿Í °°Àº ¸î¸î ÇÁ·¹ÀÓ¿÷µéÀº µð¹ö±× statement¸¦ ÃßÀûÇÒ ¼ö ÀÖ´Â APIµéÀ» Á¦°øÇÕ´Ï´Ù.
AJAX request´Â µ¥ÀÌÅ͸¦ °Ë»öÇÒ ¶§(retrieve) µ¥ÀÌÅͰ¡ ÁÖ¾îÁø ¿äû URL·Î ¹Ù²îÁö ¾ÊÀ» °÷¿¡¼ HTTP GET request¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. HTTP POST´Â »óŰ¡ ¼¹ö¿¡ ¾÷µ¥ÀÌÆ®µÇ¾úÀ» ¶§ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. À̰ÍÀº HTTP idempotency recommendations ¿Í Àß Á¶ÈµÇ¸ç, Àϰü¼ºÀÖ´Â À¥ ¾ÖÇø®ÄÉÀÌ¼Ç ¾ÆÅ°ÅØÃĸ¦ À§ÇØ °·ÂÇÏ°Ô ±ÇÀåµË´Ï´Ù.
±¹Á¦ÈµÈ AJAX ÀÎÅÍ·¢¼ÇÀº ¾î¶»°Ô Á¦°øÇϳª¿ä?
XMLÀ» »ç¿ëÇϰí ÀÖ´Ù´Â »ç½ÇÀÌ ·ÎÄà ÄÁÅÙÃ÷¸¦ AJAX ¸®Äù½ºÆ®¸¦ »ç¿ëÇÏ¿© ÀûÀýÇÏ°Ô º¸³»°í ¹ÞÀ» ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÏÁö´Â ¾Ê½À´Ï´Ù. ±¹Á¦ÈµÈ AJAX ÄÄÆ÷³ÍÆ®¸¦ Á¦°øÇϱâ À§Çؼ´Â ´ÙÀ½ÀÇ ÀÛ¾÷ÀÌ ÇÊ¿äÇÕ´Ï´Ù.
AJAX response¸¦ ¹ÝȯÇÏ´Â ¼¹öÃø ÄÄÆ÷³ÍÆ®´Â responseÀÇ ÀÎÄÚµùÀ» ÆäÀÌÁö¿¡¼ »ç¿ëµÈ ÀÎÄÚµù°ú °°°Ô ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù.
response.setContentType("text/xml;charset=;UTF-8");
response.getWriter().write("<response>invalid</response>");
Java Enterprise Edition technologies·Î AJAX¸¦ »ç¿ëÇÏ´Â °Í¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸´Â AJAX and Internationalization¸¦ Âü°íÇϽðí, ¿©·¯ °¡Áö ¾ð¾î·Î µÈ ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ´Â °Í¿¡ ´ëÇÑ Á¤º¸´Â Developing Multilingual Web Applications Using JavaServer Pages Technology¸¦ Âü°íÇϽñ⠹ٶø´Ï´Ù.
ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ »ç¿ëÇϸé Çѹø¿¡ ÇÑ °³ ÀÌ»óÀÇ AJAX request¸¦ ÇÁ·Î¼¼½ÌÇÏ°Ô µÉ ¼ö ÀÖ½À´Ï´Ù. ÄÚµåÀÇ ÀûÀýÇÑ Â÷ÈÄ ÇÁ·Î¼¼½ÌÀ» º¸ÀåÇϱâ À§ÇÏ¿© ÀÚ¹Ù ½ºÅ©¸³Æ® Closures¸¦ ÀÌ¿ëÇÒ °ÍÀ» ±ÇÇØµå¸³´Ï´Ù. ´ÙÀ½ÀÇ ¿¹Á¦´Â AJAXÀÎÅÍ·¢¼Ç¶ó´Â ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼¿¡ ÀÇÇØ Ãß»óÈµÈ XMLHttpRequest °´Ã¼¸¦ º¸¿©ÁÝ´Ï´Ù. Àμö·Î¼ URL°ú ÇÁ·Î¼¼½º°¡ ¿Ï·áµÇ¾úÀ» ¶§ ½ÇÇàµÇ´Â functionÀ» Àü´ÞÇϰí ÀÖ½À´Ï´Ù.
function AJAXÀÎÅÍ·¢¼Ç(url, callback) {
var req = init();
req.onreadystatechange = processRequest;
function init() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
function processRequest () {
if (req.readyState == 4) {
if (req.status == 200) {
if (callback) callback(req.responseXML);
}
}
}
this.doGet = function() {
req.open("GET", url, true);
req.send(null);
}
this.doPost = function(body) {
req.open("POST", url, true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send(body);
}
}
function makeRequest() {
var ai = new AJAXInteraction("processme", function() { alert("Doing Post Process");});
ai.doGet();
}
À§ ¿¹Á¦ÀÇ makeRequest() ÇÔ¼ö´Â "processme"¶ó´Â URLÀ» °®´Â AJAXÀÎÅÍ·¢¼Ç°ú, "doing Post Process"¶ó´Â ¸Þ½ÃÁö°¡ ´ã±ä °æ°í ¸Þ½ÃÁö »óÀÚ¸¦ º¸¿©ÁÙ ÀζóÀÎ ÇÔ¼ö¸¦ »ý¼ºÇÕ´Ï´Ù. AJAX ÀÎÅÍ·¢¼ÇÀº ai.doGet()°¡ È£ÃâµÉ ¶§ ½ÃÀÛµÇ°í ¼¹öÃø ÄÄÆ÷³ÍÆ®°¡ "processme" URL À§¿¡ À§Ä¡ÇÒ ¶§ ¹®¼¸¦ ¹ÝȯÇÕ´Ï´Ù. ÀÌ ¹®¼´Â AJAXÀÎÅÍ·¢¼ÇÀÌ »ý¼ºµÉ ¶§ ÁöÁ¤µÈ callback ÇÔ¼ö·Î ³Ñ°ÜÁø °ÍÀÔ´Ï´Ù.
ÀÌ closureÀÇ »ç¿ëÀº ƯÁ¤ÇÑ AJAX ÀÎÅÍ·¢¼Ç°ú °ü·ÃµÈ ÀûÀýÇÑ callback ÇÔ¼ö°¡ È£ÃâµÇµµ·Ï º¸ÀåÇÕ´Ï´Ù. ¾î¶² ÁÖ¾îÁø ½Ã°£¿¡ request¸¦ »ý¼ºÇϴµ¥ »ç¿ëµÇ´Â socketÀÇ ¼ö´Â Á¦ÇѵǾî ÀÖÀ¸¹Ç·Î, ±× ¾È¿¡ º¹¼öÀÇ closure °´Ã¼¸¦ »ý¼ºÇÏ´Â °ÍÀÌ XmlHttpRequest¸¦ »ý¼ºÇÒ ¶§´Â ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ÀÎÅÍ³Ý ÀͽºÇ÷η¯´Â ¿ÀÁ÷ µÎ °³ÀÇ AJAX µ¿½Ã ¿äû¿¡¸¸ ¹ÝÀÀÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ ºê¶ó¿ìÀú´Â 3~5°³±îÁö °¡´ÉÇÕ´Ï´Ù. AJAX ÀÎÅÍ·¢¼Ç °´Ã¼µéÀÇ °øÀ¯ Ç®À» Ȱ¿ëÇϽñ⠹ٶø´Ï´Ù.
Client·ÎºÎÅÍ º¹¼öÀÇ AJAX È£ÃâÀ» »ý¼ºÇÒ ¶§ ÇѰ¡Áö ±â¾ïÇØ¾ßÇÒ °ÍÀº, È£Ãâ¿¡ ´ëÇØ ¸ðµÎ ¹ÝÀÀÇÑ´Ù°í º¸ÀåÇÒ ¼ö ¾ø´Ù´Â °ÍÀÔ´Ï´Ù. Closure °´Ã¼ÀÇ callback ³»¿¡ closureÀ» °¡ÁüÀ¸·Î½á depedencyµéÀÌ ¿Ã¹Ù¸£°Ô ÇÁ·Î¼¼½ºµÇ¾úÀ½À» º¸ÁõÇϴµ¥ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
Ajaxian Fire and Forget Pattern¸¦ Àо½Ã¸é µµ¿òÀÌ µÉ °ÍÀÔ´Ï´Ù.
'content-type' Çì´õ¸¦ 'text/xml'·Î ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù .
¼ºí·¿¿¡¼ ¸®ÅÏ Å¸ÀÔÀÌ XMLÀ̸é HttpServletResponse.setContentType()¸¦ "text/xml"·Î ¼³Á¤ÇÔÀ¸·Î½á ½ÇÇàµÉ ¼ö ÀÖ½À´Ï´Ù. "Content-Type" Çì´õ°¡ ¼³Á¤µÇ¾î ÀÖÀ» °æ¿ì, XMLHttpRequest ½ÇÇàÀÌ ¿¡·¯°¡ ³ª´Â °æ¿ì°¡ ¸¹½À´Ï´Ù. ´ÙÀ½Àº "Content-Type"À» ¼³Á¤ÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.
response.setContentType("text/xml");
response.getWriter().write("<response>invalid</response>");
¶ÇÇÑ, autocomplete¿Í ij½¬ ¿©ºÎµµ ¼³Á¤ÇÏ´Â ÆíÀÌ ÁÁÀ» ¼ö ÀÖ½À´Ï´Ù.
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write("<response>invalid</response>");
°³¹ßÀÚ¸¦ À§ÇÑ Âü°í»çÇ×: ÀÎÅÍ³Ý ÀͽºÇ÷η¯¿¡¼´Â ÀÌ Çì´õ°¡ ¼³Á¤µÇ¾îÀÖÁö ¾ÊÀº °æ¿ì HTTP GET¿¡¼ µ¹¾Æ¿À´Â ¸ðµç AJAX ¹ÝÀÀ¿¡ ´ëÇØ ij½¬µÈ °á°ú¹°À» ÀÚµ¿À¸·Î »ç¿ëÇϹǷΠÀÏÀÌ º¹ÀâÇØÁú ¼ö ÀÖ½À´Ï´Ù. °³¹ßÇÏ´Â Áß¿¡´Â ÀÌ Çì´õ¸¦ ¼³Á¤ÇØ µÎ´Â °ÍÀÌ ÁÁÀ» °ÍÀÔ´Ï´Ù.
´Ù¸¥ ºê¶ó¿ìÀú ±â¹ÝÀÇ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» »ç¿ëÇÏ´Â °æ¿ì¿¡ ´ÙÀ½°ú °°Àº ¸î °¡Áö ¿É¼ÇµéÀÌ ÀÖ½À´Ï´Ù.
- Ŭ¶óÀ̾ðÆ®ÀÇ ÄíŰ¿¡ - Å©±â Á¦ÇÑÀÌ ÀÖÀ¸¸ç(µµ¸ÞÀδç 4KBÂ¥¸® ÄíŰ ÃÖ´ë 20°³, ÃÑ 80KB) ¾ÏÈ£ÈÇÏÁö ¾Ê´Â ÇÑ ³»¿ëÀÇ º¸¾ÈÀ» Àå´ãÇÒ ¼ö ¾ø½À´Ï´Ù. ¾ÏÈ£ÈÇÏ´Â °ÍÀº ¾î·Á¿î ÀÛ¾÷ÀÌÁö¸¸ ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ ÀÌ¿ëÇϸé ÇÒ ¼ö´Â ÀÖ½À´Ï´Ù.
- Ŭ¶óÀ̾ðÆ®ÀÇ ÆäÀÌÁö¿¡ - ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ¸é º¸¾ÈÀº È®½ÇÇÏÁö¸¸ ÀÛ¾÷ÇϱⰡ ¾î·Æ°í ¸»½éÀ» ÀÏÀ¸Å³ ¼ö°¡ ÀÖ½À´Ï´Ù. Storing State on the Client¸¦ Âü°íÇϽñ⠹ٶø´Ï´Ù.
- On the client file system - This can be done if the client grants access to the browser to write to the local file system.
Ŭ¶óÀ̾ðÆ®ÀÇ ÆÄÀÏ ½Ã½ºÅÛ¿¡ -ºê¶ó¿ìÀú°¡ ·ÎÄà ÆÄÀÏ ½Ã½ºÅÛ¿¡ Á¢±ÙÇÏ´Â °ÍÀ» Ŭ¶óÀÌ¾ðÆ®°¡ Çã¿ëÇÒ °æ¿ì °¡´ÉÇÑ ¹æ¹ýÀÔ´Ï´Ù. °³Àο¡ µû¶ó ÇʼöÀûÀÎ ¹æ¹ýÀÌ µÉ ¼öµµ ÀÖÀ¸³ª ÁÖÀǰ¡ ¿ä±¸µË´Ï´Ù.
- ¼¹ö¿¡ - Ŭ¶óÀÌ¾ðÆ®°¡ ¼¹ö»óÀÇ »óŸ¦ ¹Ý¿µÇÏ´Â ÀüÅëÀûÀÎ ¸ðµ¨¿¡ °¡±î¿î ¹æ¹ýÀÔ´Ï´Ù. ¾çÂÊÀÇ µ¥ÀÌÅͰ¡ µ¿ÀÏÇϵµ·Ï À¯ÁöÇÏ´Â °ÍÀº ¾à°£ °ñÄ¡¾ÆÇà ¼ö ÀÖÁö¸¸ À̰Ϳ¡ ´ëÇÑ ÇØ°áÃ¥Àº ÀÖ½À´Ï´Ù. (Refreshing Data) ´õ ¸¹Àº ÇÁ·Î¼¼½ÌµÇ´Â Á¤º¸³ª ÄÁÆ®·ÑÀÌ Å¬¶óÀÌ¾ðÆ®·Î À̵¿ÇÒ¼ö·Ï, »óŰ¡ ÀúÀåµÇ¾î ÀÖ´Â °÷Àº °è¼ÓÇØ¼ °»½ÅµÇ¾î¾ß ÇÒ °ÍÀÔ´Ï´Ù.
FormÀ» »ý¼ºÇÒ¶§´Â "form" ¿ä¼Ò "onSubmit" ¼Ó¼ºÀÌ false¸¦ ¹ÝȯÇÏ´Â ÀÚ¹Ù ½ºÅ©¸³Æ® ÇÔ¼ö·Î ¼³Á¤µÇ¾î ÀÖ´Â °ÍÀ» È®ÀÎÇØ¾ß ÇÕ´Ï´Ù.
<form onSubmit="doAJAXSubmit();return false;" >
<input type="text" id="tf1" />
<input type="submit" id="submit1" value="Update"/>
</>
form ¹öưÀÌ ÀÖ´Â ÇÔ¼ö¸¦ °áÇÕ½ÃÅ´À¸·Î½á ºñ½ÁÇÏ°Ô µ¥ÀÌÅ͸¦ Á¦ÃâÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
<form onSubmit="doAJAXSubmit();return false;" >
<input type="text" id="tf1" />
<input type="button" id="button1" onClick="doAJAXSubmit()" value="Update"/>
</>
form "onsubmit" ¼Ó¼ºÀÌ ¿©ÀüÈ÷ ¼³Á¤µÇ¾î ÀÖ´Â °Í¿¡ ÁÖ¸ñÇϽñ⠹ٶø´Ï´Ù. ¸¸¾à »ç¿ëÀÚ°¡ ÅØ½ºÆ® Çʵ忡¼ ¿£Å͸¦ Ä¡¸é formÀÌ ÀÛ¼º¿Ï·áµÇ¾î ¹ö¸®¹Ç·Î, ÀÌ ¹®Á¦¸¦ ÇØ°áÇØ¾ß ÇÕ´Ï´Ù.
ÆäÀÌÁö¸¦ ¾÷µ¥ÀÌÆ®ÇÒ ¶§´Â, ÆäÀÌÁö ¾ÈÀÇ µ¥ÀÌÅ͸¦ ¾÷µ¥ÀÌÆ®Çϱâ Àü¿¡ form µ¥ÀÌÅÍÀÇ AJAX ¾÷µ¥ÀÌÆ®°¡ ¼º°øÀûÀ¸·Î ³¡³µ´ÂÁö ¸ÕÀú È®ÀÎÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é µ¥ÀÌÅͰ¡ ¹«»çÈ÷ ¾÷µ¥ÀÌÆ®µÇÁö ¾ÊÀ» ¼ö ÀÖ°í »ç¿ëÀÚ°¡ ¾ËÁö ¸øÇÒ ¼öµµ ÀÖ½À´Ï´Ù. °³ÀÎÀûÀ¸·Î´Â ºÎºÐÀûÀ¸·Î ¾÷µ¥ÀÌÆ®¸¦ ÇÒ ¶§ Àá½Ã °øÁö¸¦ ¶ç¿ö ³õ¾Ò´Ù°¡, AJAX ÀÎÅÍ·¢¼ÇÀÌ ¼º°øÀûÀ¸·Î ³¡³ª¸é ±×¶§ ÆäÀÌÁö¸¦ ¾÷µ¥ÀÌÆ®ÇÕ´Ï´Ù.
±×¶§±×¶§ ´Ù¸¨´Ï´Ù. AJAX¿¡¼´Â ´ëü·Î 'Áß°£Âë'À̶ó°í ´äÇÒ ¼ö ÀÖ½À´Ï´Ù. ¼¹öÃø ÄÄÆ÷³ÍÆ®, ȤÀº Ŭ¶óÀ̾ðÆ®Ãø°ú ¼¹öÃø ÄÁÆ®·Ñ·¯µéÀÌ Á¶ÇÕµÈ °æ¿ì¿¡´Â ÄÁÆ®·ÑÀÇ À§Ä¡°¡ ´õ¿í´õ ÇÑÂÊ¿¡ Ä¡ÁßµÉ ¼ö ÀÖ½À´Ï´Ù.
- ¼¹öÃø ÄÁÆ®·Ñ·¯ ÁýÁß - ÀÌ ¶§ÀÇ ÇÙ½ÉÀº Ŭ¶óÀ̾ðÆ®Ãø ÆäÀÌÁöÀÇ µ¥ÀÌÅͰ¡ ¼¹öÀÇ µ¥ÀÌÅÍ¿Í °°µµ·Ï À¯ÁöÇÏ´Â °ÍÀÔ´Ï´Ù. ¸î¸î ¾ÖÇø®ÄÉÀ̼ÇÀº ¸ðµç »óÅ Á¤º¸¸¦ ¼¹ö¿¡ ÀúÀåÇÏ°í ¸ðµç ¾÷µ¥ÀÌÆ®¸¦ °£´ÜÇÑ ÀÚ¹Ù½ºÅ©¸³Æ® ÄÁÆ®·Ñ·¯¸¦ ÅëÇØ Ŭ¶óÀÌ¾ðÆ® DOM¿¡ º¸³À´Ï´Ù.
- Ŭ¶óÀ̾ðÆ®Ãø/ ¼¹öÃø ÄÁÆ®·Ñ·¯ - ÀÌ·± ¾ÆÅ°ÅØÃÄ´Â ÄÁÆ®·ÑÀ̳ª À̺¥Æ® ÇÁ·Î¼¼½Ì, ÆäÀÌÁö Á¶ÀÛ, Ŭ¶óÀÌ¾ðÆ® »óÀÇ ¸ðµ¨ µ¥ÀÌÅÍ ·£´õ¸µ°ú °ü·ÃµÈ ¸ðµç Ç¥ÇöÀ» ÀÚ¹Ù½ºÅ©¸³Æ®°¡ Çϵµ·Ï ÇÕ´Ï´Ù. ºñÁî´Ï½º ·ÎÁ÷À̳ª ¾÷µ¥ÀÌÆ®µÈ ¸ðµ¨ µ¥ÀÌÅ͸¦ Ŭ¶óÀÌ¾ðÆ®·Î º¸³»´Â °ÍÀº ¼¹öÃø¿¡¼ ´ã´çÇÕ´Ï´Ù. ÀÌ °æ¿ì ¼¹ö´Â ÃÖÃʷΠŬ¶óÀÌ¾ðÆ®¿¡ º¸³»Áø ÆäÀÌÁö À̿ܿ¡ presentation¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áú¼ö ¾ø½À´Ï´Ù.
AJAX ¾ÖÇø®ÄÉÀÌ¼Ç Àüü°¡ ÇÑ ÆäÀÌÁö ¾È¿¡ ÀÛ¼ºµÈ ÄÉÀ̽º°¡ ÀÖ½À´Ï´Ù. ¸¸¾à ÀÌ·± ¾ÆÅ°ÅØÃĸ¦ ÅÃÇÑ´Ù¸é, ³×ºñ°ÔÀ̼ǰú Áñ°Üã±â Ãß°¡ÀÇ Ã³¸® ¹®Á¦¸¦ °í·ÁÇØ¾ß ÇÕ´Ï´Ù.
¿Ï¼º ¸ñÀû¿¡ µû¶ó µÎ °¡Áö ¹æ¹ýÀ» ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. °³ÀÎÀûÀ¸·Î´Â Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö¿¡ Á¦¾î±ÇÀ» ³ª´©¾î ÁÖ´Â ¹æ¹ýÀ» ¼±È£ÇÕ´Ï´Ù.
ÀÚ¹Ù ½ºÅ©¸³Æ®´Â »ç¿ëÀÚ°¡ ÆäÀÌÁöÀÇ ¼Ò½º º¸±â¸¦ ¼±ÅÃÇÏ´Â °æ¿ì ¹Ô¹ÔÇÏ°Ô º¸ÀÔ´Ï´Ù. ÀÚ¹Ù ½ºÅ©¸³Æ®´Â »ç¿ëÀÚÀÇ Çã°¡°¡ ¾øÀÌ´Â ·ÎÄà ÆÄÀϽýºÅÛ¿¡ Á¢±ÙÇÒ ¼ö ¾ø½À´Ï´Ù. AJAX ÀÎÅÍ·¢¼ÇÀº ÇØ´ç ÆäÀÌÁö°¡ ·ÎµùµÇ´Â ¼¹öÃø ÄÄÆ÷³ÍÆ®¿¡¸¸ °ü·ÃÀÌ ÀÖ½À´Ï´Ù. ¿ÜºÎ ¼ºñ½º¿¡¼´Â AJAX ÀÎÅÍ·¢¼Ç¿¡ ÇÁ·Ï½Ã ÆÐÅÏÀÌ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
¸¸¾à ¾ÇÀǸ¦ °¡Áø »ç¿ëÀÚ°¡ ´ç½ÅÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀ» Àüº¹½ÃŰ·Á´Â Àǵµ·Î Á¢±ÙÇÒ ¶§ ¼¹öÃø ÄÄÆ÷³ÍÆ®°¡ À§Çè¿¡ óÇÏ°Ô µÉ ¼ö ÀÖÀ¸¹Ç·Î ¾ÖÇø®ÄÉÀÌ¼Ç ¸ðµ¨À» ³ëÃâ½ÃŰÁö ¾Êµµ·Ï Á¶½ÉÇϽʽÿÀ. ¸ðµç ´Ù¸¥ À¥¾ÖÇø®ÄÉÀ̼ǿ¡´Â, ºñ¹Ð Á¤º¸°¡ ±³È¯µÉ ¶§ ¿¬°áÀÇ º¸¾ÈÀ» È®½ÇÈ÷ Çϱâ À§ÇØ HTTPSÀÇ »ç¿ëÀ» °í·ÁÇØ º¼ ¼ö ÀÖ½À´Ï´Ù.
ÁÁÀº Áú¹®ÀÔ´Ï´Ù. ¾Æ¹« ÀÌÀ¯¾øÀÌ AJAX¸¦ È£ÃâÇÏÁö ¾Ê½À´Ï´Ù! µ¿±â(synchronous) ¿äûÀº ÆäÀÌÁö À̺¥Æ® ÇÁ·Î¼¼½ÌÀ» Â÷´ÜÇÒ °ÍÀ̸ç, ºñµ¿±â (asynchronous) ¿äûÀÌ ¼±È£µÇ´Â °æ¿ì´Â º°·Î º» ÀûÀÌ ¾ø½À´Ï´Ù.
¾ÖÇø®ÄÉÀ̼ǿ¡¼ Ç÷¯±×ÀÎÀ̳ª ¾ÖÇø´¿¡ ±â¹ÝÇÑ ºÎºÐµéÀ» ¹Ù·Î ¹ö¸®Áö ¸¶½Ê½Ã¿À. AJAX¿Í DHTMLÀÌ µå·¡±× ¾Ø µå¶ø°ú °°Àº »óÀ§ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽ºµéÀ» Áö¿øÇÏ´Â ¹Ý¸é, ¿©ÀüÈ÷ ÇѰ谡 ÀÖÀ¸¸ç, ƯÈ÷ ºê¶ó¿ìÀú Áö¿ø¿¡ ÀÖ¾î¼ ±×·¸½À´Ï´Ù. Ç÷α×Àΰú ¾ÖÇø´Àº ¼ö³â°£ AJAX¿Í ºñ½ÁÇÑ ¿äûÀ» »ý¼ºÇϴµ¥ ÀÌ¿ëµÇ¾î ¿Ô½À´Ï´Ù. ¾ÖÇø´Àº °³¹ßÇÏ´Â µ¥ ÇÊ¿äÇÑ °ÅÀÇ ¸ðµç °ÍÀ» Á¦°øÇÏ´Â UI ÄÄÆ÷³ÍÆ®¿Í API¸¦ ´Ù¼ö Á¦°øÇÕ´Ï´Ù.
¸¹Àº »ç¶÷µéÀÌ Ç÷¯±×ÀÎÀ» ÃʱâÈÇÒ ¶§ ±â´Ù·Á¾ß Çϸç ÇÊ¿äÇÑ ¹öÀüÀÇ JVM Ç÷¯±×ÀÎÀÌ ±ò·Á ÀÖÀ»Áö ¾øÀ»Áö ¸ð¸¥´Ù´Â ÀÌÀ¯·Î ¾ÖÇø´À̳ª Ç÷α×ÀÎÀ» °æ½ÃÇÕ´Ï´Ù. Ç÷¯±×ÀÎÀ̳ª ¾ÖÇø´ÀÌ ÆäÀÌÁö DOMÀ» Á¶ÀÛÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÒÁö ¸ð¸¨´Ï´Ù. ±×·¯³ª ±ÕÀÏÇÑ È¯°æ¿¡ Àְųª ƯÁ¤ JVMÀ̳ª Ç÷¯±×ÀÎÀÌ »ç¿ë °¡´ÉÇÑ È¯°æ (¿¹¸¦ µé¾î ±â¾÷ ȯ°æ)¿¡¼ Ç÷α×ÀÎÀ̳ª ¾ÖÇø´Àº À¯¿ëÇÏ°Ô »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
ÇѰ¡Áö °í·ÁÇØ¾ß ÇÒ °ÍÀº, AJAX¿Í ¾ÖÇø´°ú Ç÷¯±×ÀÎÀÌ È¥ÀçµÇ¾î ÀÖ´Â °æ¿ìÀÔ´Ï´Ù. Flickr ´Â »ç¿ëÀÚ °æÇèÀ» À§ÇØ ±×¸²¿¡ ¶óº§À» ºÙÀ̰í À¯Àú ÀÎÅÍ·¢¼Ç, »çÁø ¼öÁ¤ µî¿¡ AJAX ÀÎÅÍ·¢¼Ç°ú DHTMLÀ» Á¶ÇÕÇÏ¿© »ç¿ëÇÕ´Ï´Ù. ¼¹öÃø ÄÄÆ÷³ÍÆ®¸¦ Àß ¼³°èÇÑ´Ù¸é µÎ Å¬¶óÀÌ¾ðÆ® ¸ðµÎ¿Í Ä¿¹Â´ÏÄÉÀ̼ÇÀÌ °¡´ÉÇÕ´Ï´Ù.
¾ÖÇø®ÄÉÀ̼ÇÀÇ ÇöÀç »óŸ¦ ÃßÀûÇÒ ¼ö ÀÖ´Â °íÀ¯ÀÇ ¼Ö·ç¼ÇÀ» ¸¸µé ¼öµµ ÀÖÁö¸¸, Àü¹®°¡µé¿¡°Ô ÀÌ ¹®Á¦¸¦ ³Ñ±â´Â °ÍÀÌ ÁÁÀ» °ÍÀ̶ó°í »ý°¢ÇÕ´Ï´Ù.Dojo´Â ¹ØÀÇ ÀÚ¹Ù ½ºÅ©¸³Æ® ¿¹Á¦¿¡¼ º¸ÀÌ´Â °Íó·³ ºê¶ó¿ìÀú ¾È¿¡¼ÀÇ ³×ºñ°ÔÀ̼ÇÀ» Á߸³ÀûÀ¸·Î ¾îµå·¹½ºÇÕ´Ï´Ù.
function updateOnServer(oldId, oldValue, itemId, itemValue) {
var bindArgs = {
url: "faces/ajax-dlabel-update",
method: "post",
content: {"component-id": itemId, "component-value": itemValue},
mimetype: "text/xml",
load: function(type, data) {
processUpdateResponse(data);
},
backButton: function() {
alert("old itemid was " + oldId);
},
forwardButton: function(){
alert("forward we must go!");
}
};
dojo.io.bind(bindArgs);
}
ÀÌ ¿¹´Â ¼¹ö »óÀÇ °ªÀ» ÇÔ¼ö¿Í ÇÔ²² dojo.io.bind()¸¦ »ç¿ëÇÏ¿© ¾÷µ¥ÀÌÆ®ÇÕ´Ï´Ù. dojo.io.bind()´Â ºê¶ó¿ìÀúÀÇ 'µÚ·Î' ¹öư À̺¥Æ®¸¦ ´ã´çÇÏ´Â °íÀ¯ÇÑ ¼Ó¼ºÀ¸·Î »ç¿ëµË´Ï´Ù. °³¹ßÀÚ¶ó¸é oldValue¿¡ °ªÀ» ÀçÀúÀåÇϰųª ¹º°¡ ´Ù¸¥ Àû´çÇÑ ¾×¼ÇÀ» ÃëÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ÇÏ´ÜÀÇ ¸µÅ©´Â ¾î¶»°Ô Dojo°¡, °³¹ßÀÚ°¡ ºê¶ó¿ìÀúÀÇ ¹öư À̺¥Æ®¸¦ °¨ÁöÇÏÁö ¸øÇÏ°Ô ÇÏ´ÂÁö¿¡ ´ëÇÑ ¼³¸íÀÔ´Ï´Ù.
AJAX: How to Handle Bookmarks and Back Buttons ÀÌ ¹®Á¦¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀÌ ´ã°Ü ÀÖÀ¸¸ç, 'µÚ·Î'¿Í '¾ÕÀ¸·Î' ¹®Á¦¿¡ ´ëÇØ¼¸¸ ³íÀÇÇÏ´Â ÀÚ¹Ù ½ºÅ©¸³Æ® library Really simple History framework(RSH)¸¦ Á¦°øÇÕ´Ï´Ù.
Google maps¿Í °°Àº ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î AJAX¸¦ »ç¿ëÇϸé À̹ÌÁö°¡ º¸³»Áö´Â °Íó·³ º¸ÀÏ ¼ö ÀÖÀ¸³ª, »ç½ÇÀº À̹ÌÁöÀÇ URLµéÀÌ AJAX ¿äû¿¡ ´ëÇÑ ¹ÝÀÀÀÌ º¸³»Áö°í DHTMLÀ» »ç¿ëÇÏ¿© ±× URLµéÀÌ º¸³»Áö°í ÀÖ´Â °ÍÀÔ´Ï´Ù.
ÇÏ´ÜÀº XML ¹®¼°¡ AJAX ÀÎÅÍ·¢¼ÇÀ¸·ÎºÎÅÍ ¸®Åϵǰí Ä«Å×°í¸® ¹Ù°¡ »ðÀÔµÈ ¿¹ÀÔ´Ï´Ù.
<categories>
<category>
<cat-id>1</cat-id>
<name>Books</name>
<description>Fun to read</description>
<image-url>books_icon.gif</image-url>
</category>
<category>
<cat-id>2</cat-id>
<name>Electronics</name>
<description>Must have gadgets</description>
<image-url>electronics.gif</image-url>
</category>
</categories>
image-url ¿ä¼Ò°¡ Ä«Å×°í¸®¸¦ ´ëÇ¥ÇÏ´Â À̹ÌÁö URLÀÇ À§Ä¡¸¦ ´ã°í ÀÖÀ½¿¡ ÁÖ¸ñÇϽñ⠹ٶø´Ï´Ù. AJAX ÀÎÅÍ·¢¼ÇÀÇ callback ¸Þ¼Òµå´Â response XML ¹®¼¸¦ ÆÄ½ÌÇÒ °ÍÀ̸ç, response XML ¹®¼ ¾È¿¡ Æ÷ÇÔµÈ °¢°¢ÀÇ Ä«Å×°í¸® addCategory ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. ÀÌ addCategory ÇÔ¼ö´Â ÆäÀÌÁöÀÇ body¾È¿¡ ÀÖ´Â table row elementÀÎ "category table"À» ¿Ã·Á´Ùº¸¸ç À̹ÌÁö¸¦ Æ÷ÇÔÇÏ´Â ¿ä¼Ò¿¡ ÇÑ row¸¦ Ãß°¡ÇÕ´Ï´Ù.
<scrip type="text/ÀÚ¹Ù ½ºÅ©¸³Æ®" >
...
function addCategory(id, name, imageSrc) {
var categoryTable = document.getElementById("categoryTable");
var row = document.createElement("tr");
var catCell = document.createElement("td");
var img = document.createElement("img");
img.src = ("images\\" + imageSrc);
var link = document.createElement("a");
link.className ="category";
link.appendChild(document.createTextNode(name));
link.setAttribute("onclick", "catalog?command=category&catid=" + id);
catCell.appendChild(img);
catCell.appendChild(link);
row.appendChild(catCell);
categoryTable.appendChild(row);
}
</script>
...
<table>
<tr>
<td width="300" bgoclor="lightGray">
<table id="categoryTable" border="0" cellpadding="0"></table>
</td>
<td id="body" width="100%">Body Here</td>
</tr>
</table>
À̹ÌÁöÀÇ Ãâó´Â À̹ÌÁö ¼Ò½º·Î ¼³Á¤µÇ¾î ÀÖÀ½À» À¯ÀÇÇϼ¼¿ä. ÀÌ À̹ÌÁö´Â À̹ÌÁö ¿ä¼Ò°¡ categoryTable¿¡ Ãß°¡µÇ¾úÀ» ¶§ images/books_icon.gif" À̳ª "images/electronic_icon.gif"À̶ó´Â URLÀÇ HTTP ¿äû¿¡ ÀÇÇØ ·ÎµùµË´Ï´Ù.
ÀÚ¹Ù ½ºÅ©¸³Æ®´Â ¾²·¹µå°¡ ¾ø½À´Ï´Ù. ÀÚ¹Ù ½ºÅ©¸³Æ®ÀÇ ÇÔ¼öµéÀº ÆäÀÌÁö°¡ ·ÎµùµÇ°Å³ª, ¸¶¿ì½º Ŭ¸¯ÀÌ Àְųª, ¾î¶² form ¿ä¼Ò¿¡ Ç¥½Ã¸¦ ÇÒ ¶§ µîÀÇ À̺¥Æ®°¡ ¹ß»ýÇÒ ¶§ È£ÃâµË´Ï´Ù. ÇÔ¼öÀÇ À̸§°ú ½Ã°£(¹Ð¸®¼¼ÄÁ ´ÜÀ§)¸¦ Àμö·Î »ç¿ëÇÏ´Â setTimeout ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ŸÀ̸Ӹ¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ±×·± ´ÙÀ½, °°Àº ÇÔ¼ö¸¦ ÇÏ´ÜÀÇ ÀÚ¹Ù ½ºÅ©¸³Æ® ¿¹Á¦Ã³·³ È£ÃâÇÔÀ¸·Î½á ·çÇÁ¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
function checkForMessage() {
// start AJAX ÀÎÅÍ·¢¼Ç with processCallback as the callback function
}
// callback for the request
function processCallback() {
// do post processing
setTimeout("checkForMessage()", 10000);
}
checkForMessage´Â ¹«±âÇÑÀ¸·Î ·çÇÁ¸¦ µ¹¸°´Ù´Â Á¡À» ÁÖÀÇÇϽñ⠹ٶø´Ï´Ù. ÆäÀÌÁöÀÇ Æ¯¼º¿¡ µû¶ó °£°ÝÀÇ ÀÎÅ©·¹¸ÕÆ®¸¦ ¹Ù²Ü ¼öµµ ÀÖ½À´Ï´Ù. ¶ÇÇÑ Æ¯Á¤ AJAX ¹ÝÀÀ ÇÁ·Î¼¼½Ì Á¶°Ç¿¡ µû¶ó ·çÇÁ°¡ Á¤ÁöµÇ´Â ·ÎÁ÷À» Ãß°¡ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
|