lecture Home > ASP.NET > Tip

ASP.NET ÆÁ

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2006³â 02¿ù 23ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2006³â 03¿ù 09ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

   ÀÛ¼ºÀÚ : ³¯°³´Þ±â(ÀÌ ±¤¼ö)
   ÆíÁýÀÚ : Taeyo(±è Å¿µ)

   °­Á Á¦¸ñ : Ajax ³«¼­ ¾îÇø®ÄÉÀÌ¼Ç ¸¸µé±â

°­ÁÂ Àü ÇÊÀÚÀÇ Àâ´ã>

ÀÌ °­Á´ À̱¤¼ö´ÔÀÌ ¹ø¿ªÇØÁֽŠCode ProjectÀÇ ¾ÆÆ¼Å¬ÀÔ´Ï´Ù. ±×·¯¹Ç·Î, ¾ÆÆ¼Å¬ ÀÚüÀÇ ÀúÀÛ±ÇÀº ´ÙÀ½ ¸µÅ©¿¡ ÀÖÀ½À» ±â¾ïÇϽñ⠹ٶø´Ï´Ù. http://www.codeproject.com/aspnet/ajax_scribble.asp
°­Á¿¡¼­ À̾߱âÇÏ´Â ¼Ò½ºµµ À§ÀÇ ¸µÅ©¿¡¼­ ´Ù¿î·Îµå°¡ °¡´ÉÇÕ´Ï´Ù.


¾à°£ÀÇ »çÁ·À» ºÙÀÌÀÚ¸é, Atlas´Â ¾ÆÁ÷ º£Å¸¹öÀüÀÇ ±â¼úÀ̸ç, 2006³â Áß¹Ý ¸±¸®ÁîµÉ °ÍÀ¸·Î º¸ÀÔ´Ï´Ù. ÀÌ °­Á´ Atlas January 2006 ¹öÀüÀ» ÀÌ¿ëÇÑ °ÍÀ¸·Î º¸À̱⿡, ¿©·¯ºÐÀÌ ´õ ÃֽйöÀüÀÇ Atlas¸¦ ¼³Ä¡Çϰí À̸¦ ±¸µ¿ÇÒ °æ¿ì ¿Ã¹Ù¸£°Ô µ¿ÀÛÇÏÁö ¾ÊÀ» °¡´É¼ºÀÌ ÀÖÀ½À» ¹Ì¸® ÁÖÀǵ帳´Ï´Ù.
¹ø¿ª ½ÃÁ¡¿¡¼­ ASP.NET 'Atlas' Web Site Template ÀÇ ÃֽйöÀüÀº January 2006 Release ÀÔ´Ï´Ù

µé¾î°¡±â

ASP.NET Atlas´Â AJAX Çü½Ä ¾ÖÇø®ÄÉÀ̼ǵéÀ» ASP.NET¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï °³¹ßÇÑ Å¬¶óÀ̾ðÆ®Ãø°ú ¼­¹öÃø ¶óÀ̺귯¸®ÀÔ´Ï´Ù. ÀÌ Æ©Å丮¾ó(¾Æ¸¶µµ ½Ã¸®Áî·Î ¹ßÀüÇÒ ¼ö ÀÖ´Â)Àº AtlasÀÇ À¯¿ë¼º¿¡ ´ëÇÑ ÀϹÝÀûÀÎ °üÁ¡À» Á¦°øÇÕ´Ï´Ù. Atlas´Â ¸Å¿ì ±¤´ëÇÑ ¶óÀ̺귯¸®À̱⠶§¹®¿¡ ù ¹øÂ° Æ©Å丮¾óÀº Atlas¿¡¼­ °¡Àå Áß¿äÇÑ µÎ °¡Áö¿¡ ÁýÁßÇϵµ·Ï ÇϰڽÀ´Ï´Ù.

1. Ŭ¶óÀÌ¾ðÆ® Ãø ½ºÅ©¸³Æ®·ÎºÎÅÍ ¼­¹öÃø À¥¼­ºñ½º È£Ãâ °¡´É
2. ºê¶ó¿ìÀú°£ ȣȯµÇ´Â ÀÚ¹Ù½ºÅ©¸³Æ® ÄÚµå °³¹ßÀ» ¼Õ½±°Ô

¹è°æ

MFC Scribble ¾ÖÇø®ÄÉÀ̼ÇÀº Á¦°¡ MFC¸¦ ¹è¿ï ¶§ »ç¿ëÇß´ø ù ¹øÂ° ÇÁ·Î±×·¥ °¡¿îµ¥ ÇϳªÀÔ´Ï´Ù. ±×·¯¹Ç·Î, Àú´Â ÀÌ Æ©Å丮¾ó¿¡¼­ Scribble¸¦ ±â¹Ý¿¡ µÎ±â·Î °á½ÉÇß½À´Ï´Ù. Scribble ¾ÖÇø®ÄÉÀ̼ÇÀº »ç¿ëÀÚ°¡ ¸¶¿ì½º¸¦ ÀÌ¿ëÇØ¼­ ÀÚÀ¯·Ó°Ô ½ºÄÉÄ¡ÇÒ ¼ö ÀÖµµ·Ï ÇØÁÝ´Ï´Ù. Àú´Â ÀÌ¿Í À¯»çÇÑ ÇÁ·Î±×·¥À» ÀÎÅͳݿ¡¼­ ±¸ÇöÇÑ °ÍÀº óÀ½ º¸¾Ò´Âµ¥, JavaScript Draw¶ó´Â À¥»çÀÌÆ®¿´°í AJAX ±â¼úÀ» ÀÌ¿ëÇß½À´Ï´Ù. JavaScript draw À¥»çÀÌÆ®´Â ¿ÀÁ÷ ¸ðÁú¶ó ÆÄÀÌ¾îÆø½º¿¡¼­¸¸ µ¿ÀÛÇÕ´Ï´Ù. ÀÌ ¾ÆÆ¼Å¬¿¡¼­´Â ±× ¾ÖÇø®ÄÉÀ̼ÇÀÌ ºê¶ó¿ìÀú°£¿¡ ȣȯµÇ´Â ¹öÀüÀ» ¾î¶»°Ô ºôµåÇÏ´ÂÁö ¼³¸íÇÕ´Ï´Ù. ¿ì¸®´Â ÀÌ ½Ã¸®Áî¿¡¼­ ¸Å ¾ÆÆ¼Å¬ ¸¶´Ù ÀÌ ¾ÖÇø®ÄÉÀ̼ÇÀ» ºôµåÇϸ鼭 Atlas¿¡ ´ëÇØ Á¡Â÷ ¼³¸íÇÏ´Â ¹æ½ÄÀ¸·Î ³ª¾Æ°¡µµ·Ï ÇϰڽÀ´Ï´Ù.

Atlas ¼³Ä¡

ÀÌ ¾ÆÆ¼Å¬À» ÀÛ¼ºÇÏ´Â ½ÃÁ¡¿¡¼­, December CTP of Atlas´Â ÀÌ link¸¦ Ŭ¸¯ÇÏ¸é ´Ù¿î·Îµå ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ¸¸¾à ÀÌ ¸µÅ©°¡ µ¿ÀÛÇÏÁö ¾Ê´Â´Ù¸é Atlas À¥»çÀÌÆ®¿¡¼­ Á¤È®ÇÑ ¸µÅ©¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. Atlas ¶óÀ̺귯¸®´Â Visual Studio 2005 template (VSI)¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¿î·Îµå »çÀÌÆ®¿¡ °¡½Ã¸é ÅÛÇø´À» ¾î¶»°Ô ¼³Ä¡ÇÒ ¼ö ÀÖ´Â Áöµµ Âü°íÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.

Atlas ÇÁ·ÎÁ§Æ® »ý¼º

Atlas ÅÛÇø´ÀÌ ¼³Ä¡µÇ¸é ¸Þ´º ¿É¼Ç¿¡¼­ ÆÄÀÏ -> »õ·Î¸¸µé±â -> À¥ »çÀÌÆ® ¸¦ Â÷·Ê´ë·Î Ŭ¸¯ÇØ »õ·Î¿î ºó Atlas ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. Â÷·Ê´ë·Î ÇÏ¸é ¾Æ·¡ º¸ÀÌ´Â ¹Ù¿Í °°ÀÌ »õ À¥ »çÀÌÆ® ´ÙÀ̾ó·Î±× ¹Ú½º°¡ ³ªÅ¸³³´Ï´Ù.

¾Æ·¡ À§Ä¡¿¡¼­ ÆÄÀÏ ½Ã½ºÅÛ À̳ª HTTP¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù. HTTP¸¦ ¼±ÅÃÇϸé IIS server¿¡¼­ À¥ »çÀÌÆ®¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ÆÄÀÏ ½Ã½ºÅÛÀ» ¼±ÅÃÇÏ¸é ·ÎÄà ÆÄÀÏ ½Ã½ºÅÛ(ASP.NET °³¹ß À¥ ¼­¹ö¸¦ ÀÌ¿ëÇØ¼­ µð¹ö±ëÇϰí Å×½ºÆ® ÇÒ ¼ö ÀÖ´Â)¿¡¼­ À¥ »çÀÌÆ®¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. µÑ Áß ¾î´À ÂÊÀ» ¼±ÅÃÇÏ´ø ¹«°üÇÏÁö¸¸, Àú´Â ÀÌ ¾ÖÇø®ÄÉÀ̼ÇÀÌ IISÀÇ ÀÎÅÍ³Ý ÀͽºÇ÷η¯¿¡¼­ ´õ ÁÁÀ» µí ÇÏ´Ù°í ¸»¾¸µå¸®°í ½Í½À´Ï´Ù.

Atlas ºó ÇÁ·ÎÁ§Æ®

»õ·Î »ý¼ºµÈ Atlas À¥ »çÀÌÆ®´Â µð·ºÅ丮 ±¸Á¶¸¦ µû¸£°Ô µË´Ï´Ù.

- App_Data
    : µ¥ÀÌÅÍ ÆÄÀÏÀ» À§Ä¡½Ãų ¼ö ÀÖ´Â ºó µð·ºÅ丮
- Bin
    : Microsoft.Web.Atlas ¾î¼Àºí¸®¸¦ À§ÇÑ dll ÆÄÀÏÀÌ À§Ä¡ÇÏ´Â µð·ºÅ丮·Î Atlas ¶óÀ̺귯¸®ÀÇ
      ¼­¹ö ¿µ¿ªÀ» °¡Áý´Ï´Ù.
- ScriptLibrary
    : ¾ÖÇø®ÄÉÀ̼ǿ¡ »ç¿ëÇÏ´Â ¾î¶°ÇÑ ÀÚ¹Ù½ºÅ©¸³Æ® ÆÄÀϵéÀÌ À§Ä¡ÇÏ´Â µð·ºÅ丮
    - Atlas
        : Atlas Ŭ¶óÀÌ¾ðÆ® ½ºÅ©¸³Æ®µéÀº µÎ °¡Áö ´Ù¸¥ ÇÏÀ§ µð·ºÅ丮¿¡ Á¸ÀçÇÕ´Ï´Ù.
            Debug
            : µð¹ö±× ¹öÀü Atlas Ŭ¶óÀ̾ðÆ®Ãø ÀÚ¹Ù½ºÅ©¸³Æ® ÆÄÀϵéÀº µð¹ö±× µð·ºÅ丮¿¡ À§Ä¡ÇÕ´Ï´Ù.
            Release
            : ¸±¸®Áî ¹öÀü Atlas Ŭ¶óÀ̾ðÆ®Ãø ÀÚ¹Ù½ºÅ©¸³Æ® ÆÄÀϵéÀº ¸±¸®Áî µð·ºÅ丮¿¡ À§Ä¡ÇÑ´Ù.
              ÀÌ µð·ºÅ丮¿¡ À§Ä¡ÇÑ ½ºÅ©¸³Æ®µéÀº µð¹ö±× Äڵ尡 Á¦°ÅµÈ »óÅ·Π°æ·®È­µÇ¾î ¾²ÀÔ´Ï´Ù.

Atlas Ŭ¶óÀÌ¾ðÆ® ½ºÅ©¸³Æ®

Atlas December release´Â ´ÙÀ½°ú °°Àº Ŭ¶óÀÌ¾ðÆ® ½ºÅ©¸³Æ®¸¦ °¡Áý´Ï´Ù.

- Atlas.js
  : ÀÌ ÇÙ½É Atlas ½ºÅ©¸³Æ® ÆÄÀÏÀº ±âº»ÀûÀÎ À¯¿ëÇÑ ±â´É°ú Ŭ¶óÀ̾ðÆ®Ãø ÄÁÆ®·Ñ,
    ÄÄÆ÷³ÍÆ®µéÀ» °¡Áö°í ÀÖ½À´Ï´Ù.
- AtlasCompat.js
  : ÀÌ ÆÄÀÏÀº ¸ðÁú¶ó ÆÄÀÌ¾îÆø½º¿Í ¾ÖÇà ¾ÆÀÌ¸Æ »çÆÄ¸® À¥ ºê¶ó¿ìÀú¸¦ À§ÇØ Á¦°øµÇ´Â Atlas ȣȯ ·¹À̾
    Æ÷ÇÔÇϰí ÀÖ´Ù. ÀÌ ½ºÅ©¸³Æ®´Â Atlas Äڵ尡 ºê¶ó¿ìÀú°£ ȣȯµÉ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù.
- AtlasCompat2.js
  : »çÆÄ¸® À¥ ºê¶ó¿ìÀú ȣȯÀ» À§ÇÑ Ãß°¡ÀûÀÎ ±â´ÉµéÀÌ ÀÖ½À´Ï´Ù.
- AtlasRuntime.js
  : ÇÙ½É Atlas ½ºÅ©¸³Æ® ÆÄÀÏÀ» ÃÖ¼ÒÈ­ÇÑ ÆÄÀÏÀÔ´Ï´Ù. ÀÌ ½ºÅ©¸³Æ® ÆÄÀÏÀº Ŭ¶óÀ̾ðÆ®Ãø ÄÄÆ÷³ÍÆ®¿Í
    ÄÁÆ®·ÑµéÀ» °¡ÁöÁö ¾Ê½À´Ï´Ù. ÀÌ ½ºÅ©¸³Æ® ÆÄÀÏÀº À¥ ÆäÀÌÁö¿¡¼­ »ç¿ëµÇÁö ¾Ê´Â ¾Õ¼­ ¸»ÇÑ ÄÄÆ÷³ÍÆ®¿Í
    ÄÁÆ®·ÑµéÀ» »ç¿ëÇϰíÀÚ ÇÒ ¶§ ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù.
- AtlasUIDragDrop.js
  : ÀÌ ÆÄÀÏ¿¡´Â À¥ ÆäÀÌÁö¿¡¼­ µå·¡±× & µå¶ø ±â´ÉµéÀ» Á¦°øÇϱâ À§ÇÑ À¯¿ëÇÑ ±â´ÉµéÀÌ ´ã°ÜÁ® ÀÖ½À´Ï´Ù.
- AtlasUIGlitz.js
  : ÀÌ ÆÄÀÏ¿¡´Â À¥ ÆäÀÌÁö¿¡¼­ ¾Ö´Ï¸ÞÀ̼ǰú ´Ù¸¥ Ưº°ÇÑ È¿°ú¸¦ Á¦°øÇϱâ À§ÇÑ À¯¿ëÇÑ ±â´ÉµéÀÌ
    ´ã°ÜÁ® ÀÖ½À´Ï´Ù.
- AtlasUIMap.js
  : ÀÌ ½ºÅ©¸³Æ® ÆÄÀÏÀº Virtual Earth¸¦ »ç¿ëÇϱâ À§ÇÑ Atlas ¸ÊÇÎ ÇÁ·¹ÀÓ¿öÅ©ÀÔ´Ï´Ù.

´Ù¸¥ ÆÄÀϵé

Atlas´Â À¥ »çÀÌÆ®ÀÇ ·çÆ® µð·ºÅ丮¿¡ ´ÙÀ½°ú °°Àº ÆÄÀϵéÀ» Ãß°¡ÀûÀ¸·Î Á¦°øÇÕ´Ï´Ù.

- Default.aspx ¿Í Default.aspx.cs
  : ÀÌ À¥ ÆäÀÌÁö´Â Atlas Ŭ¶óÀ̾ðÆ®Ãø ½ºÅ©¸³Æ®¸¦ ÂüÁ¶ÇÏ´Â ·»Å͸µ ½ºÅ©¸³Æ® ºí·ÏÀ» °¨´çÇϰí ÀÖ´Â
    Atlas ½ºÅ©¸³Æ® ¸Å´ÏÀú ÄÁÆ®·ÑÀ» Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. Ãß°¡ÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ® test/xml-script ºí·ÏÀÌ
    ÆäÀÌÁö¿¡ ÀÖ½À´Ï´Ù. ÀÌ ½ºÅ©¸³Æ® ºí·ÏÀº ¼±¾ðµÈ XML ±¸¹®À» »ç¿ëÇϰíÀÚ ÇÒ ¶§ ¾²ÀÔ´Ï´Ù.
- eula.rtf
- readme.txt
- Web.Config

web.config´Â Atlas ¾ÖÇø®ÄÉÀ̼ÇÀÌ µ¿ÀÛÇϴµ¥ ²À ÇÊ¿äÇÑ ÆÄÀÏÀÔ´Ï´Ù. ÀÌ ÆÄÀÏ¿¡´Â Atlas ¿Í ´Ù¸¥ Ãß°¡ÀûÀÎ Atlas HTTP ¸ðµâ, HTTP Çڵ鷯¸¦ ƯÁ¤Çϱ⠼³Á¤Çϱâ À§ÇÑ ¸î °¡Áö ³»¿ëµéÀÌ ÀÖ½À´Ï´Ù.

Scribble ¾ÖÇø®ÄÉÀ̼Ç

Scribble ¾ÖÇø®ÄÉÀ̼ÇÀº »ç¿ëÀÚ°¡ ¿ÞÂÊ ¸¶¿ì½º ¹öưÀ» Ŭ¸¯ÇÏ°í ¿òÁ÷À̸鼭 ÀÚÀ¯·Ó°Ô ½ºÄÉÄ¡ÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù. ½ºÄÉÄ¡´Â »ç¿ëÀÚ°¡ ¸¶¿ì½º ¹öưÀ» ³õ¾ÒÀ» ¶§³ª µå·ÎÀ® ¹üÀ§¸¦ ¹þ¾î³µÀ» ¶§ ³¡³ª°Ô µË´Ï´Ù. ÀÌ·± ±×¸®±â´Â VMLÀ» ÀÌ¿ëÇÑ ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ ÅëÇØ¼­ ±¸ÇöÇÏÁö¸¸, ÀÌ·± ¿¹Á¦°¡ VML »ç¿ë¿¡ ´ëÇÑ ³»¿ëÀ¸·Î °¡Áö´Â ¾ÊÀ» °ÍÀÔ´Ï´Ù. Scribble ±âº» À¥ ÆäÀÌÁö´Â À̹ÌÁö¸¦ °®½À´Ï´Ù(ÀϹÝÀûÀÎ HTML À̹ÌÁö - IMG ű×). À̹ÌÁö¿¡¼­ ÀϾ »ç¿ëÀÚÀÇ ¸¶¿ì½º À̺¥Æ®´Â ÀÚ¹Ù½ºÅ©¸³Æ® À̺¥Æ® Çڵ鷯¿¡ ÀÇÇØ¼­ ĸÃĵ˴ϴÙ. ÀÚ¹Ù½ºÅ©¸³Æ® ±â´ÉÀº ½ºÄÉÄ¡µÈ Á¡µéÀ» À¥ ¼­ºñ½º·Î º¸³À´Ï´Ù. À¥ ¼­ºñ½º´Â ¾÷µ¥ÀÌÆ®µÇ°í À̹ÌÁö °´Ã¼´Â Ŭ¶óÀÌ¾ðÆ®°¡ º¸³½ ¸ðµç Á¡µéÀ» ÅëÇØ¼­ ¼±µéÀ» ±×·Á³»°í ¼¼¼Ç ¾È¿¡ ÀúÀåµË´Ï´Ù. °á±¹¿£, Ŭ¶óÀÌ¾ðÆ® ¿äû¿¡ ÀÇÇØ ¼­¹ö·ÎºÎÅÍ À̹ÌÁö°¡ ¾÷µ¥ÀÌÆ® µË´Ï´Ù. ÀÌ À̹ÌÁö ¼Ò½º´Â HTTP Çڵ鷯¿¡ ÀÇÇØ ¼¼¼Ç¿¡ ÀúÀåµÈ À̹ÌÁö¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô Ãâ·ÂµË´Ï´Ù. ¿©±â¿¡ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¸ÞÀÎ ÄÄÆ÷³ÍÆ®µéÀÌ ÀÖ½À´Ï´Ù.

- Default.aspx
  : ´ÙÀ̳ª¹ÍÇÑ À̹ÌÁö¿Í Atlas ½ºÅ©¸³Æ® ¸Å´ÏÀú ÄÜÆ®·ÑÀÌ ÀÖ´Â ÆäÀÌÁö
- ScribbleImage.ashx
  : ¼¼¼Ç¿¡ ÀúÀåµÈ À̹ÌÁö °´Ã¼¸¦ Ãâ·ÂÇÏ´Â HTTP Çڵ鷯
- ScribbleService.asmx
  : ¸ðµç ½ºÅ©·¹Äª ¿äûÀ» º¸³»ÁÖ´Â À¥ ¼­ºñ½º. À̹ÌÁö¸¦ ¼öÁ¤ÇÕ´Ï´Ù.
- Scribble.js
  : ÆÄÀÏ ¾È¿¡ Æ÷ÇÔµÈ µðÀÚÀΰú Äڵ带 ±ò²ûÇÏ°Ô ºÐ¸®½ÃÄÑ ¾ÖÇø®ÄÉÀ̼ǿ¡ Àç¹èÄ¡ÇÏ´Â ÀÚ¹Ù½ºÅ©¸³Æ® ÄÚµå
- Global.asax

Session_Start ¿Í Session_End À̺¥Æ®´Â Global.asax¿¡¼­ ´Ù·ïÁý´Ï´Ù. Session_Start´Â »ç¿ë °¡´ÉÇÑ ¼¼¼ÇÀ» »ý¼ºÇϰí, Session_End´Â ¼¼¼Ç¿¡ ÀúÀåµÈ À̹ÌÁö¸¦ ÇØÁ¦½Ãŵ´Ï´Ù.

Global.asax

¿ì¸®´Â Global.asax. ¿¡¼­ ÄÚµù °úÁ¤À» ½ÃÀÛÇÕ´Ï´Ù.

1. À¥ »çÀÌÆ® ¸Þ´º¿¡¼­ »õ Ç׸ñ Ãß°¡ ¶Ç´Â Ctrl + Shift + A¸¦ ´©¸¨´Ï´Ù.

2. »õ Ç׸ñ Ãß°¡ ´ÙÀ̾ó·Î±× ¹Ú½º¿¡¼­ Àü¿ª ÀÀ¿ë ÇÁ·Î±×·¥ Ŭ·¡½º¸¦ ¼±ÅÃÇϰí Ŭ¸¯ÇÏ¸é µË´Ï´Ù. ´ç½ÅÀº Global.asax ÆÄÀÏÀÌ »ý¼ºµÈ °ÍÀ» º¼ °ÍÀÔ´Ï´Ù.

3. ¿ì¸®´Â System.Drawing ³×ÀÓ½ºÆäÀ̽º¸¦ ÀÓÆ÷Æ®ÇÏ´Â °ÍÀ¸·Î ½ÃÀÛÇÒ °Ì´Ï´Ù. ´ÙÀ½ ÁÙ¿¡ ³ª¿À´Â Äڵ带 ù ÁÙ¿¡ »ðÀÔÇØÁÖ¼¼¿ä.

<%@ Import Namespace="System.Drawing" %>

4. À̾ Session_Start ±â´É Äڵ带 »ðÀÔÇØ ÁÖ¼¼¿ä.

    void Session_Start(object sender, EventArgs e)
    {
        Bitmap bmp = new Bitmap(200, 200);
        using (Graphics g = Graphics.FromImage(bmp))
        {
            g.FillRectangle(new SolidBrush(Color.White),
                new Rectangle(0, 0, bmp.Width, bmp.Height));
            g.Flush();
        }

        Session["Image"] = bmp;
    }

ÀÌ ÄÚµå´Â Èò 200Çȼ¿µé·Î ¹è°æÀÌ ¿ÏÀüÈ÷ ÇϾé°Ô Ä¥ÇØÁ® ÀÖ°í ImageÀ̶ó´Â À̸§ÀÇ ¼¼¼ÇÀÌ ÇÒ´çµÈ °£´ÜÇÑ ºñÆ®¸Ê 200 Çȼ¿À» »ý¼ºÇÕ´Ï´Ù.

5. Session_End ±â´ÉÀº ¼¼¼Ç¾È¿¡ ÀúÀåµÈ À̹ÌÁö¸¦ ÇØÁ¦ÇÕ´Ï´Ù.

Bitmap bmp = (Bitmap)Session["Image"];
bmp.Dispose();

6. À¥ »çÀÌÆ® ¸Þ´º¿¡¼­ ÂüÁ¶ Ãß°¡¸¦ ¼±ÅÃÇÕ´Ï´Ù.

7. ÂüÁ¶ Ãß°¡ ´ÙÀ̾ó·Î±× ¹Ú½º¿¡¼­ System.DrawingÀ» ¼±ÅÃÇϰí, È®ÀÎ ¹öưÀ» ´©¸¨´Ï´Ù.

8. ¸¶Áö¸·À¸·Î, ºôµå ¸Þ´º¿¡¼­ À¥ »çÀÌÆ® ºôµå ¶Ç´ÂCtrl + Shift + B ¸¦ ´©¸£¸é ºôµå ¿¡·¯°¡ ¾ø´Ù´Â °ÍÀ» È®½ÅÇÕ´Ï´Ù.

ScribbleImage.ashx

À¥ Çڵ鷯´Â ¼¼¼Ç º¯¼ö¾È¿¡ ÀúÀåµÈ À̹ÌÁö¸¦ ´Ù½Ã Ŭ¶óÀÌ¾ðÆ®¿¡ Ãâ·ÂÇϱâ À§ÇÑ ¸ñÀûÀÔ´Ï´Ù.

1. À¥ »çÀÌÆ® ¸Þ´º¿¡¼­ »õ Ç׸ñ Ãß°¡ ¶Ç´Â Ctrl + Shift + A¸¦ ´©¸¨´Ï´Ù.

2. »õ Ç׸ñ Ãß°¡ ´ÙÀ̾ó·Î±× ¹Ú½º¿¡¼­ Á¦³×¸¯ 󸮱⸦ ¼±ÅÃÇϰí, À̸§À» ScribbleImage.ashx ¶ó°í ÀÔ·ÂÇÑ ÈÄ È®ÀÎ ¹öưÀ» ´©¸¨´Ï´Ù.

3. À¥ Çڵ鷯´Â ÇÊ¿äÇÑ ÀÎÅÍÆäÀ̽º IRequiresSessionState¸¦ ±¸ÇöÇÒ ¶§ ¼¼¼Ç º¯¼ö¸¦ »ç¿ëÇϱâ À§Çؼ­ ÇÊ¿äÇÕ´Ï´Ù. ÀÌ°Ç ´ÜÁö Ç¥½ÃÀÚ ÀÎÅÍÆäÀ̽º(marker interface)ÀÌ¸ç ¿À¹ö¶óÀ̵åÇϱâ À§ÇÑ ¸Þ¼Òµå¸¦ °¡ÁöÁö ¾Ê½À´Ï´Ù. º¸ÀÌ´Â ¹Ù´ë·Î Ŭ·¡½º ¼±¾ðÀ» ¼öÁ¤ÇÕ´Ï´Ù.

public class ScribbleImage : IHttpHandler,
    System.Web.SessionState.IRequiresSessionState

4. ´ÙÀ½¿¡ ProcessRequest ¸Þ¼Òµå Äڵ带 Ãß°¡ÇÕ´Ï´Ù.

public void ProcessRequest (HttpContext context)
{
    context.Response.ContentType = "image/png";
    context.Response.Cache.SetNoStore();
    context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    context.Response.Cache.SetExpires(DateTime.Now);
    context.Response.Cache.SetValidUntilExpires(false);

    System.Drawing.Bitmap bmp =
        (System.Drawing.Bitmap)context.Session["Image"];

    lock(bmp)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            bmp.Save(ms, ImageFormat.Png);
            ms.Flush();
            context.Response.BinaryWrite(ms.GetBuffer());
        }
    }
}

o ù° ÁÙ ContentType Çì´õ´Â image/png ¿¡ ¹ÝÀÀÇϵµ·Ï ¼³Á¤ÇÕ´Ï´Ù. ÀÌ´Â ºê¶ó¿ìÀú°¡ HTML ´ë½Å¿¡ png À̹ÌÁö¿¡ ¹ÝÀÀÇϵµ·Ï ±¸º°ÇÕ´Ï´Ù.

o ´ÙÀ½ ³× ÁÙÀº ¹ÝÀÀÇÒ ¶§ ij½ÃÇÏÁö ¾Êµµ·Ï ºê¶ó¿ìÀú¿¡ Áö½ÃÇÕ´Ï´Ù. ÀÌ ÄÚµåµéÀº »óÈ£ ºê¶ó¿ìÀú°£ ȣȯµÇµµ·Ï Çϱ⠶§¹®¿¡ ²À ÇÊ¿äÇÕ´Ï´Ù. ¿ì¸®´Â ³ªÁß¿¡ Æ©Å丮¾ó¿¡ ¸ÂÃß¾î ¹Ù²Ü °ÍÀÔ´Ï´Ù.

o ¸¶Áö¸·À¸·Î, ¼¼¼Ç º¯¼ö·ÎºÎÅÍ ¿Â ºñÆ®¸ÊÀº ¸Þ¸ð¸® ½ºÆ®¸²¿¡ ÀúÀåÀÌ µÇ°í, ÀúÀåµÈ ¸Þ¸ð¸® ½ºÆ®¸²ÀÇ ³»¿ëÀº ÀÀ´ä(response)½Ã ¾¹´Ï´Ù. BinaryWrite ±â´ÉÀÌ »ç¿ëµÇ°í, À̹ÌÁö´Â ¹ÙÀ̳ʸ® µ¥ÀÌÅÍÀÔ´Ï´Ù.

ScribbleService.asmx

¼¼¼Ç À̹ÌÁö¸¦ ÃʱâÈ­Çϰí ÀÀ´ä ½Ã À̹ÌÁö ³»¿ëÀ» Ãâ·ÂÇØ¾ß ÇÕ´Ï´Ù. ÀÌÁ¦ À̹ÌÁö ½º½º·Î ³»¿ëÀ» Ãß°¡Çϵµ·Ï Çϱâ À§ÇØ ¸î °¡Áö ¸Þ¼Òµå¸¦ Ãß°¡ÇØ¾ß ÇÕ´Ï´Ù. ¿ì¸®´Â Ŭ¶óÀÌ¾ðÆ®°¡ À̹ÌÁö¿¡ ¼±À» Ãß°¡Çϱâ À§Çؼ­ ScribbleService.asmx À¥ ¼­ºñ½º¸¦ È£ÃâÇϸ®¶ó ±â´ëÇÕ´Ï´Ù.

1. À¥ »çÀÌÆ® ¸Þ´º¸¦ ´©¸£°í »õ Ç׸ñ Ãß°¡ ȤÀºCtrl + Shift + A¸¦ ´©¸¨´Ï´Ù.

2. »õ Ç׸ñ Ãß°¡ ´ÙÀ̾ó·Î±× ¹Ú½º¿¡¼­ À¥ ¼­ºñ½º¸¦ ¼±ÅÃÇϰí, ScribbleService.asmx À̶ó´Â À̸§À» ÀÔ·ÂÇÑ ÈÄ È®ÀÎ ¹öưÀ» ´©¸¨´Ï´Ù. ´Ù¸¥ ÆÄÀÏ¿¡ ÄÚµå ÀÔ·ÂÀº üũÇÏÁö ¸¶½Ê½Ã¿À.

3. ´ÙÀ½ ÁÙ¿¡ ³ª¿À´Â ¹Ù¿Í °°ÀÌ System.Drawing ³×ÀÓ½ºÆäÀ̽º¸¦ ÀÓÆ÷Æ®ÇÕ´Ï´Ù.

using System.Drawing;

4. ´ÙÀ½¿£, Á¡À» À§ÇÑ °£´ÜÇÑ Å¬·¡½º¸¦ Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù. ¿ì¸®´Â XML serializableÀÌ ¾Æ´Ï±â ¶§¹®¿¡ System.Drawing.Point Ŭ·¡½º¸¦ »ç¿ëÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ÀÌ ÈÄÀÇ Æ©Å丮¾ó¿¡¼­´Â Ä¿½ºÅÒ Å¬·¡½º¸¦ ´ë½ÅÇÏ¿© System.Drawing.Point ¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æ º¼ °ÍÀÔ´Ï´Ù. ScribbleService Ŭ·¡½º ¼±¾ð Àü¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ÇÕ´Ï´Ù.

public class Point
{
    public int X;
    public int Y;
};

5. ¸¶Áö¸·À¸·Î, ¿ì¸®´Â ÁÖ¾îÁø Á¡µéÀÇ ÁýÇÕÀÎ ½ºÄÉÄ¡¸¦ ±×¸®±â À§Çؼ­ ¸Þ¼Òµå¸¦ Ãß°¡ÇØ¾ß ÇÕ´Ï´Ù. ¿ì¸®´Â À¥ ¼­ºñ½º¿¡ Draw ¶ó´Â À¥ ¸Þ¼Òµå¸¦ Ãß°¡ÇÒ °ÍÀÔ´Ï´Ù.

[WebMethod(EnableSession = true)]
public void Draw(Point[] points)
{
    Image scribbleImage = (Image)Session["Image"];
    lock(scribbleImage)
    {
        using (Graphics g = Graphics.FromImage(scribbleImage))
        using(Pen p = new Pen(Color.Black, 2))
        {
            if (points.Length > 1)
            {
                int startX = points[0].X;
                int startY = points[0].Y;

                for (long i = 1; i < points.Length; i++)
                {
                    g.DrawLine(p, startX, startY,
                        points[i].X, points[i].Y);
                    startX = points[i].X;
                    startY = points[i].Y;
                }
            }
        }
    }
}

o WebMethod(EnableSession = true) ¼Ó¼ºÀº ¼¼¼Ç º¯¼ö°¡ À¥ ¼­ºñ½º¿¡¼­ Á¢±Ù °¡´ÉÇϵµ·Ï ÇÕ´Ï´Ù.
o À̹ÌÁö´Â Àá°å±â ¶§¹®¿¡ Çö½ÃÁ¡ Á¢±Ù ½Ã ¾ÈÀüÇÕ´Ï´Ù.
o points ¹è¿­ ¾È¿¡ Á¦°øµÈ Á¡µéÀ» Á¶ÀÎÇÏ´Â °Íó·³ µå·ÎÀ®Àº ²Ï °£´ÜÇÕ´Ï´Ù.

Scribble.js

¿ì¸®´Â ¼­¹ö Ãø À̹ÌÁö Çڵ鷯¿Í À̹ÌÁö¸¦ ¾÷±×·¹ÀÌµå ½ÃŰ´Â ¼­¹ö Ãø À¥ ¼­ºñ½º¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌÁ¦ ¿ì¸®´Â ¸¶¿ì½º À̺¥Æ®·Î ÀÎÇÑ Á¡µéÀ» ¼­¹öÀÇ À¥ ¼­ºñ½º¿¡ º¸³»ÁÖ´Â scribble ¾ÖÇø®ÄÉÀ̼ÇÀÇ Å¬¶óÀ̾ðÆ®Ãø ½ºÅ©¸³Æ®°¡ ÇÊ¿äÇÕ´Ï´Ù.

1. ¼Ö·ç¼Ç Ž»ö±â¿¡¼­ ScriptLibrary Æú´õ¸¦ ¼±ÅÃÇÕ´Ï´Ù.

2. À¥ »çÀÌÆ® ¸Þ´º¸¦ ´©¸£°í »õ Ç׸ñ Ãß°¡ ȤÀºCtrl + Shift + A¸¦ ´©¸¨´Ï´Ù.

3. »õ Ç׸ñ Ãß°¡ ´ÙÀ̾ó ·Î±× ¹Ú½º¿¡¼­ JScript ÆÄÀÏ,À» ¼±ÅÃÇϰí Scribble.js ¶ó°í À̸§À» ÁöÁ¤ÇÑ ÈÄ È®ÀÎ ¹öưÀ» ´©¸¨´Ï´Ù. Scribble.js ÆÄÀÏÀº ScriptLibrary Æú´õ ¾È¿¡ À§Ä¡ÇÒ °ÍÀÔ´Ï´Ù.

4. ´ÙÀ½¿£ ¿ì¸®´Â ¸î °¡Áö ±Û·Î¹ú º¯¼ö¸¦ ¼±¾ðÇØ¾ß ÇÕ´Ï´Ù. ScribbleÀÇ Ã¹ ¹øÂ° ¹öÀü¿¡¼­´Â ±Û·Î¹ú º¯¼ö¸¦ »ç¿ëÇÏÁö¸¸ Â÷±â ¹öÀü¿¡¼­´Â ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼¸¦ »ç¿ëÇÒ °ÍÀÔ´Ï´Ù.

//The HTML image element that is to be drawn
var image;
//The source of the image
var originalSrc;
//The number of iteration
var iter = 0;
//The array of points
var points = null;

º¯¼ö ¼±¾ð À§ÀÇ ÁÖ¼®Àº °¢ º¯¼öÀÇ ¸ñÀûÀ» ¹¦»çÇÕ´Ï´Ù. iter º¯¼ö´Â ±×¸®±â ¿äû ÀÌÈÄ¿¡ ¼­¹ö¿¡ º¸³»Áö´Â À̹ÌÁö ¼Ò½º¸¦ ¼öÁ¤Çϴµ¥ ¾²ÀÔ´Ï´Ù. image.src = image.src·Î ¼³Á¤ÇÏ´Â °æ¿ì¿¡ ÀÎÅÍ³Ý ÀͽºÇ÷η¯´Â À̹ÌÁö¸¦ ´Ù½Ã ºÒ·¯µéÀÌÁö¸¸, ÀÌ µ¿ÀÏÇÑ Äڵ尡 ÆÄÀÌ¾îÆø½º¿¡¼­´Â µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ ¹®Á¦¸¦ ¾È°í µ¿ÀÛÇϱâ À§Çؼ­ ¸Å ½Ã°£ Áõ°¡µÈ iter º¯¼ö¸¦ Áö¼Ó½Ã۱â À§ÇØ Draw ¿äûÀ» À¥ ¼­ºñ½º¿¡ º¸³À´Ï´Ù. ºê¶ó¿ìÀú´Â ij½ÃµÈ À̹ÌÁö¸¦ ÀÌ¿ëÇϱ⠺¸´Ù´Â »õ µ¥ÀÌÅ͸¦ ¹Þµµ·Ï ¼­¹ö¿¡ ¿äûÇÒ Çʿ䰡 ÀÖ´Ù°í »ý°¢Çϱ⠶§¹®¿¡ originalSrc º¯¼ö¿¡ iteration number¸¦ Ãß°¡ÇÕ´Ï´Ù.

5. mousedown À̺¥Æ®¿¡ ¹ÝÀÀÇÏ¿© ½ºÆ®·ÎÅ©¸¦ ½ÃÀÛÇϱâ À§Çؼ­ function startStroke ¸¦ Á¤ÀÇÇÕ´Ï´Ù.

function startStroke()
{
    points = new Array();
    window.event.returnValue = false;
}

»õ·Î¿î ½ºÆ®·ÎÅ©°¡ ½ÃÀ۵Ǹé ù ¹øÂ° ÁÙ¿¡ Áö½ÃµÈ »õ·Î¿î Á¡µéÀÇ ÁýÇÕÀ» »ý¼ºÇÕ´Ï´Ù. µÎ ¹øÂ° ÁÙÀº À̺¥Æ®ÀÇ ±âº» ÇàÀ§¸¦ Ãë¼Ò½Ãŵ´Ï´Ù. ÀÌ°Ç À̹ÌÁö¿¡ ´ëÇÑ mousedown À̺¥Æ®ÀÇ ±âº» ÇàÀ§Ã³·³ ²À ÇÊ¿äÇÕ´Ï´Ù. µå·¡±× µ¿ÀÛÀ» ½ÃÀÛÇϸé ÀÛ¾÷ÀÌ ½ÃÀ۵ʿ¡ µû¶ó Â÷ÈÄ ÀϾ À̺¥Æ®¸¦ À̲ø¾î°¡±â À§ÇØ À̹ÌÁö´Â µå·¡±× µ¿ÀÛÀ» ½ÃÀÛÇÕ´Ï´Ù.

6. mouseup À̺¥Æ®³ª mouseout À̺¥Æ®°¡ ÀϾ¸é ½ºÆ®·ÎÅ©´Â ³¡ÀÌ ³³´Ï´Ù. ¿ì¸®´Â ½ÇÁ¦·Î À¥ ¼­ºñ½º¸¦ È£ÃâÇϵµ·Ï ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÌ°Ç function endStroke¿¡¼­ ÀÌ·ç¾îÁý´Ï´Ù.

function endStroke()
{
    if (!points || points.length < 2)
        return true;

    //Send the points to the webservice
    ScribbleService.Draw(points, onWebMethodComplete,
        onWebMethodTimeout, onWebMethodError);
    points = null;
    window.event.returnValue = false;
}

ÀÌ ±â´É¿¡¼­ Èï¹Ì¸¦ ²ô´Â À¯ÀÏÇÑ ÄÚµå ¶óÀÎÀº ScribbleService.Draw(points, onWebMethodComplete, onWebMethodTimeout, onWebMethodError); ÀÔ´Ï´Ù. ¿©±â¿¡¼­´Â ºñµ¿±âÀûÀ¸·Î ScribbleService.asmx ¿¡ ÀÖ´Â À¥ ¼­ºñ½º ¸Þ¼Òµå Draw ¸¦ È£ÃâÇÕ´Ï´Ù. ÀÌ ±â´ÉÀº Atlas ÇÁ·¹ÀÓ¿öÅ©¿¡ À§ÇØ ¿ì¸®°¡ Áï°¢ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù.

7. onWebMethodError ´Â À¥ ¼­ºñ½º ¸Þ¼Òµå¿¡¼­ ¿¡·¯ ¹ß»ý½Ã Atlas ÇÁ·¹ÀÓ¿öÅ©¿¡ ÀÇÇØ È£ÃâµË´Ï´Ù. onWebMethodTimeout ´Â À¥ ¸Þ¼Òµå È£ÃâÀÌ Atlas ÇÁ·½ÀÓ¿öÅ©¿¡ Á¤ÀÇµÈ Å¸ÀӾƿô ¼³Á¤À» ÃʰúÇÒ ¶§ È£ÃâµË´Ï´Ù. ÀÌ ¹öÀü¿¡¼­ ¿ì¸®´Â »ç¿ëÀÚ¿¡°Ô ¿¡·¯ ÅØ½ºÆ®°¡ ´ã±ä ¸Þ½ÃÁö ¹Ú½º¸¦ º¸¿©ÁÙ °Ì´Ï´Ù.

function onWebMethodError(fault)
{
    alert("Error occured:\n" + fault.get_message());
}

function onWebMethodTimeout()
{
    alert("Timeout occured");
}

8. function onWebMethodComplete ´Â À¥ ¸Þ¼Òµå È£ÃâÀÌ ¼º°øµÇ¾úÀ» ¶§ È£ÃâµË´Ï´Ù. À̶§ À̹ÌÁö´Â ¸®·ÎµåµÇ¾î¾ß ÇÕ´Ï´Ù.

function onWebMethodComplete(result, response, context)
{
    //We need to refresh the image
    var shimImage = new Image(200, 200);
    shimImage.src = originalSrc + "?" + iter++;
    shimImage.onload = function()
    {
        image.src = shimImage.src;
    }
}

¿ì¸®´Â Image °´Ã¼object shimImage ¸¦ »ý¼ºÇϰí, ¿ì¸®°¡ µå·ÎÀ®ÇÒ ¶§ ÀÌ ¼Ò½º¿¡¼­ À̹ÌÁöÀÇ ¿À¸®Áö³Î ¼Ò½º·Î ¼³Á¤ÇÕ´Ï´Ù. À̹ÌÁö °´Ã¼°¡ ·Îµå µÉ ¶§ ÆäÀÌÁöÀÇ ½ÇÁ¦ HTML À̹ÌÁö ¿ä¼ÒÀÇ ¼Ò½º ÁýÇÕ¿¡¼­ Àӽà À̹ÌÁö °³Ã¼ÀÇ ¼Ò½º·Î ¼³Á¤ÇÕ´Ï´Ù. ÀÌ´Â À̹ÌÁö¸¦ ´ëüÇÒ ¶§ flicker¸¦ ÇÇÇÕ´Ï´Ù.

9. ¿ì¸®´Â mousemove À̺¥Æ®°¡ ÀϾ µ¿¾È points ¹è¿­À» ä¿ö¾ß ÇÕ´Ï´Ù. ÀÌ°Ç function addPoints¿¡¼­ ´ã´çÇÕ´Ï´Ù.

function addPoints()
{
    if (points)
    {
        var point = { X : window.event.offsetX,
            Y : window.event.offsetY};
            points.push(point);

        if (points.length == 3)
        {
            endStroke();
            points = new Array();
            points.push(point);
        }

        window.event.returnValue = false;
    }
}

o »õ·Î¿î point °´Ã¼´Â À̺¥Æ® °´Ã¼ÀÇ offsetX °ú offsetY ¼Ó¼ºÀ» »ý¼ºÇϰí, ±×°ÍÀ» points ¹è¿­¿¡ Ãß°¡ÇÕ´Ï´Ù. offsetX ¿Í offsetY ¼Ó¼ºÀº À̺¥Æ®¸¦ ÀÏÀ¸Å² HTML ¿ä¼Ò¿¡ °üÇØ ¿¬°üµÈ ¸¶¿ì½º À§Ä¡¸¦ ÁÝ´Ï´Ù.
o ¸¸¾à ¹è¿­ÀÇ ±æÀ̰¡ 3¿¡ À̸¥´Ù¸é, ¿ì¸®´Â Áï°¢ÀûÀ¸·Î ±×¸®±â µ¿ÀÛÀ» ÇÒ °ÍÀ» ¼­¹ö¿¡ ¿äûÇϰí, points ¹è¿­À» Àç¼³Á¤Çϵµ·Ï ÇÕ´Ï´Ù. ÀÌ µ¿ÀÛÀº »ç¿ëÀÚ°¡ ¸¶¿ì½º ¹öưÀ» ³õ±â Àü¿¡ µå·ÎÀ®À» º¼ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù.

10. ¸¶Áö¸·À¸·Î, À̺¥Æ®µéÀ» hookÇØ¾ß ÇÕ´Ï´Ù. ÀÌ°Ç function pageLoad¿¡¼­ ´ã´çÇÕ´Ï´Ù.

function pageLoad()
{
    var surface = document.getElementById("drawingSurface");
    image = surface.getElementsByTagName("IMG")[0];
    originalSrc = image.src;

    surface.attachEvent("onmousedown", startStroke);
    surface.attachEvent("onmouseup", endStroke);
    surface.attachEvent("onmouseout", endStroke);
    surface.attachEvent("onmousemove", addPoints);
}

o function pageLoad´Â Atlas framework°¡ ·ÎµùÀ» ¸¶ÃÆÀ» ¶§ È£ÃâµÇ´Â Ưº°ÇÑ ±â´ÉÀÔ´Ï´Ù. ¿ì¸®´Â ÀÌ°É regular window ³ª body load events¸¦ ´ë½ÅÇÏ¿© »ç¿ëÇÕ´Ï´Ù. ±×·¡¼­ ¿ì¸®´Â Atlas°¡ ·ÎµùÀ» ¸¶ÃÆ´Ù´Â °ÍÀ» È®½ÅÇÒ ¼ö ÀÖ½À´Ï´Ù.
o ½ÇÁ¦ À̹ÌÁö ¿ä¼Ò´Â div ÅÂ±× ¿Í drawingSurfaceÀÇ id¾È¿¡ À§Ä¡ÇÑ °÷¿¡¼­ ½ºÄÉÄ¡µÈ °ÍÀ» °®½À´Ï´Ù. ¿ä¼ÒÀÇ Å©±â´Â À̹ÌÁöÀÇ Å©±â¿Í µ¿ÀÏÇÕ´Ï´Ù. ±×·¡¼­ ¿ì¸®´Â ¾ÈÀüÇÏ°Ô drawingSurface div¿¡ À̺¥Æ®¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.

Default.aspx

¾ÖÇø®ÄÉÀ̼ÇÀÇ °¢ ÄÄÆ÷³ÍÆ®´Â Default.aspx ÆäÀÌÁö¿¡¼­ ¾î¼Àºí(assembled)µÇ¾î¾ß ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ´ÙÀ½Àº ÀÌ ÆäÀÌÁöÀÇ ÄÚµåÀÔ´Ï´Ù.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
    Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Atlas Scribble Sample</title>
    </head>
    <body>
        <form id="form1" runat="server">

            <Atlas:ScriptManager ID="AtlasScriptManager" runat="server"
                 EnableScriptComponents="False" >
                <Services>
                    <Atlas:ServiceReference Path="ScribbleService.asmx" />
                </Services>
                <Scripts>
                    <Atlas:ScriptReference Path="ScriptLibrary/Scribble.js" />
                </Scripts>
            </Atlas:ScriptManager>

            <div id="drawingSurface"
                style="border:solid 1px black;height:200px;width:200px">
                <img alt="Scribble" src="ScribbleImage.ashx"
                    style="height:200px;width:200px" galleryimg="false" />
            </div>
        </form>
    </body>
</html>

ÀÌ ÆäÀÌÁö¿¡¼­ °¡Àå Áß¿äÇÏ°Ô º¸¾Æ¾ß ÇÒ °ÍÀº atlas:ScriptManager ¼­¹ö ÄÜÆ®·ÑÀÔ´Ï´Ù. ScriptManager ¼­¹ö ÄÜÆ®·ÑÀº Atlas¸¦ À§ÇÑ Å¬¶óÀ̾ðÆ®Ãø ½ºÅ©¸³Æ® ºí·Ï°ú À¥ ¼­ºñ½º ÇÁ·Ï½Ã ½ºÅ©¸³Æ®¸¦ »ý¼ºÇØ¾ß ÇÒ Ã¥ÀÓÀ» °¡Áö°í ÀÖ½À´Ï´Ù. Default.aspx ÆäÀÌÁö¿¡ ÀÖ´Â ScriptManager ÄÁÆ®·ÑÀ» ÀÌ¿ëÇØ¼­ ½ÇÇèÇØº¼ ¼ö ÀÖ½À´Ï´Ù.

1. EnableScriptComponents ¼Ó¼ºÀº false·Î ¼³Á¤ÇÕ´Ï´Ù. ÀÌ·Î ÀÎÇØ AtlasRuntime.js Atlas.js´ë½Å AtlasRuntime.js ¸¦ ÂüÁ¶ÇÏ¿© Ŭ¶óÀÌ¾ðÆ® Ãø ½ºÅ©¸³Æ® ºí·ÏÀ» »ý¼ºÇÕ´Ï´Ù. ¿ì¸®´Â À̹ø scribble ¹öÀü¿¡¼­ ´Ù¸¥ ¾î¶°ÇÑ Atlas ÄÄÆ÷³ÍÆ®¿Í ÄÁÆ®·ÑÀ» »ç¿ëÇÏÁö ¾Ê´Â °Íó·³ Atlas ÇÁ·¹ÀÓ¿öÅ©ÀÇ ¶óÀÌÆ® ¹öÀü¸¦ ¼±È£ÇÕ´Ï´Ù.

2. ScribbleService.asmx À¥ ¼­ºñ½º¿¡ ¼­ºñ½º ·¹ÆÛ·±½º¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ°Ç À¥ ¼­ºñ½º ÇÁ·Ï½Ã¸¦ À§ÇÑ Å¬¶óÀ̾ðÆ®Ãø ½ºÅ©¸³Æ®¿¡ URL ·¹ÆÛ·±½º¸¦ »ý¼ºÇÒ °Ì´Ï´Ù.

3. Scribble.js ¿Í °°Àº ¶Ç ´Ù¸¥ ½ºÅ©¸³Æ® ·¹ÆÛ·±½º¸¦ Ãß°¡ÇÕ´Ï´Ù.

ÀÌ°Ç ¸ðµç Á¶°¢µéÀ» Çϳª·Î ¹­¾îÁֹǷÎ, ÀÌÁ¦ ´ç½ÅÀº ÄÄÆÄÀÏ ÇÒ ¼ö ÀÖ°í, ÇÁ·ÎÁ§Æ®¸¦ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. Àú´Â Atlas ½ºÅ©¸³Æ® ¸Å´ÏÀú¿¡ ÀÇÇØ »ý¼ºµÈ ½ÇÁ¦ Ŭ¶óÀÌ¾ðÆ® HTMLÀ» º¼ °ÍÀ» ±Ç°íÇÕ´Ï´Ù.

Atlas ¸¶¹ý

¿©±â¿¡¼­´Â ÇÁ·¹ÀÓ¿öÅ©°¡ ¿ì¸®¸¦ À§ÇØ ¾î¶² ÀÏÀ» ÇÏ´ÂÁö ¾Ë·ÁÁÝ´Ï´Ù.

1. ¿©±â¿¡¼­ ¿ì¸®´Â »óÈ£ ºê¶ó¿ìÀú°¡ µ¿ÀÛÇϱâ À§Çؼ­ ¾î¶² Ưº°ÇÑ È¿°ú¸¦ »ç¿ëÇÏÁö ¾Ê°í À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÏ¿´½À´Ï´Ù. À¥ ¼­ºñ½º È£Ãâ°ú Ŭ¶óÀ̾ðÆ®Ãø À̺¥Æ® Çڵ鸵Àº ÀÎÅÍ³Ý ÀͽºÇ÷η¯¿Í ÆÄÀÌ¾îÆø½º ¸ðµÎ¿¡¼­ Áï°¢ÀûÀ¸·Î µ¿ÀÛÇÕ´Ï´Ù. Atlas ÇÁ·¹ÀÓ¿öÅ©´Â ÀÎÅÍ³Ý ÀͽºÇ÷η¯ °´Ã¼¿Í °°ÀÌ º¸ÀÌ°Ô Çϱâ À§ÇØ ÆÄÀÌ¾îÆø½º °´Ã¼¿¡ ¿ä±¸µÈ ÀÚ¹Ù½ºÅ©¸³Æ® ÇÁ·ÎÅäŸÀÔÀ» Ãß°¡Çß½À´Ï´Ù. ÀÎÅÍ³Ý ÀͽºÇ÷η¯¿¡ Ư¼ºÈ­µÈ ±â´ÉµéÀÎ attachEvent ¿Í event.offsetX , event.offsetY ´Â ÆÄÀÌ¾îÆø½º¿¡¼­ µ¿À۵ǵµ·Ï Çß½À´Ï´Ù. ´ç½ÅÀº À̰ÍÀÌ ¾î¶»°Ô ÀÌ·ç¾îÁö´ÂÁö AtlasCompat.js ÆÄÀÏ¿¡¼­ º¼ ¼ö ÀÖ½À´Ï´Ù.

2. Scribble À¥ ¼­ºñ½º ¸Þ¼Òµå¸¦ À§ÇÑ ÀÚ¹Ù½ºÅ©¸³Æ® ÇÁ·Ï½Ã¸¦ ÀÚµ¿ÀûÀ¸·Î »ý¼ºÇÕ´Ï´Ù. ScribbleService.asmx ÆÄÀÏÀ» À§ÇÑ ÀÚ¹Ù½ºÅ©¸³Æ® ÇÁ·Ï½Ã ÆÄÀÏÀº URL ScribbleService.asmx/js¸¦ °¡Áý´Ï´Ù. ÀÌ°Ç web.config.¿¡ Ãß°¡µÈ the Atlas HTTP ¸Þ¼Òµå¿¡ ÀÇÇØ »ý¼ºµË´Ï´Ù.

¿ì¸®´Â ¾îµð¿¡ Àִ°¡

¿ì¸®´Â À¥ ¼­ºñ½º¸¦ È£ÃâÇÏ´Â ¹æ¹ý°ú Atlas¸¦ ÀÌ¿ëÇÏ¿© ½±°Ô ºê¶ó¿ìÀú°£¿¡ ¾ÖÇø®ÄÉÀ̼ÇÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸¾Ò½À´Ï´Ù. ´ÙÀ½ Æ©Å丮¾ó¿¡¼­ ¿ì¸®´Â Atlas Ŭ¶óÀÌ¾ðÆ® Å¬¶óÀ̾ðÆ®Ãø ÄÁÆ®·Ñ°ú ¼±¾ðÀûÀÎ ÇÁ·Î±×·¡¹Ö(»ç¿ëÀÚ Çǵå¹é¿¡ ÀÇÁ¸ÇÏ´Â!)À» ¾Ë¾Æº¼ °ÍÀÔ´Ï´Ù. ¸¸¾à ´ç½ÅÀÌ ÀÌ Æ©Å丮¾ó¿¡ ¸¸Á·Çß´Ù¸é ÄÚ¸àÆ®¸¦ ³²°ÜÁÖ¼¼¿ä. ¸¸¾à ¸¸Á·½º·´Áö ¸øÇß´Ù¸é ¾î¶»°Ô °³¼±Çϸé ÁÁÀ»Áö ÄÚ¸àÆ®¸¦ ³²°ÜÁÖ¼¼¿ä.

´Ù¿î·Îµå¿Í ¼Ò½º ½ÇÇà

Atlas¸¦ Àç¹èÆ÷ ÇÒ ¼ö ÀÖµµ·Ï µÇ¾î ÀÖÁö ¾Ê±â ¶§¹®¿¡, Àú´Â Atlas ÆÄÀÏÀ» ¼Ò½º ´Ù¿î·Îµå¿¡ Æ÷ÇÔÇÏÁö ¾Ê¾Ò½À´Ï´Ù. ¼Ò½º¸¦ µ¿ÀÛ½Ã۱â À§Çؼ­´Â ¿©±â¿¡ ÀûÈù ¼ø¼­¿¡ µû¶ó ´Ù¿î·Îµå ¹Þ¾Æ¾ß ÇÕ´Ï´Ù.

1. ´ç½ÅÀº Atlas À¥ »çÀÌÆ®¿¡¼­ Atlas¸¦ ´Ù¿î·Îµå ¹Þ¾Æ¾ß ÇÕ´Ï´Ù.

2. Atlas blank project template¸¦ ´Ù¿î·Îµå ¹ÞÀº ÈÄ¿¡ »õ·Î¿î À¥ »çÀÌÆ®¸¦ ´ÙÀ½ ¼ø¼­¿¡ µû¶ó »ý¼ºÇÕ´Ï´Ù. ÆÄÀÏ ¸Þ´º¿¡¼­ »õ·Î ¸¸µé±â¸¦ À¥ »çÀÌÆ®¸¦ ¼±ÅÃÇÕ´Ï´Ù.

3. »õ·Ó°Ô »ý¼ºµÈ ÇÁ·ÎÁ§Æ® µð·ºÅ丮¿¡ ¼Ò½ºÆÄÀÏÀÇ ¾ÐÃàÀ» Ç®¾î ÀÌÀü¿¡ Á¸ÀçÇß´ø ÆÄÀϵéÀ» µ¤¾î ¾¹´Ï´Ù.

4. À¥ »çÀÌÆ® ¸Þ´º¿¡¼­ ±âÁ¸ Ç׸ñ Ãß°¡¸¦ ¼±ÅÃÇϰí, À¥ »çÀÌÆ®ÀÇ ÃÖ»óÀ§ µð·ºÅ丮¿¡ ScribbleService.asmx ¿Í ScribbleImage.ashx¸¦, ScriptLibrary Æú´õ¿¡¼­´Â Scribble.js¸¦ Ãß°¡ÇÕ´Ï´Ù.

5. ºôµåÇϰí À¥ »çÀÌÆ®¸¦ ½ÇÇà½Ãŵ´Ï´Ù.



°­Á ¸ñ·ÏÀ¸·Î..