±èµ¿¿í kdw8751@gmail.com£üÇöÀç ÈÆ½º´å³Ý Ä¿¹Â´ÏƼ ½Ã»ðÀ¸·Î Ȱµ¿Çϰí ÀÖ´Ù. ÈÞÁîÇ÷ο쿡 ÀçÁ÷ Áß¿¡ ÀÖÀ¸¸é ½Ç¹ö¶óÀÌÆ® °ü·Ã ¾÷¹«¸¦ ¸Ã°í ÀÖ°í, ÇöÀç ½Ç¹ö¶óÀÌÆ®¿¡ ÁýÁßÇϰí ÀÖ´Ù.
Æ÷Åä¶óÀÌÆ®¸¦ °£´ÜÇÏ°Ô ¼³¸íÇϸé À̹ÌÁö ºä¾î¶ó°í ÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀÚµéÀÌ ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ°í, »çÁøÀ» º¸¸é¼ Áñ°Å¿òÀ» ´À³¥ ¼ö ÀÖ°Ô ÇÏ´Â À̹ÌÁö ºä¾î¶ó°í »ý°¢ÇÏ¸é ½¬¿ï °ÍÀÌ´Ù. ÇÊÀÚ´Â ÀÌ·¯ÇÑ Àǵµ·Î À̹ø Ä÷³À» ±âȹÇßÀ½À» ¾Ë¾ÆÁÖ±æ ¹Ù¶ó¸ç ½Ç¹ö¶óÀÌÆ®¸¦ °øºÎÇϰí ÀÖ´Â ¸¹Àº °³¹ßÀڵ鿡°Ô µµ¿òÀÌ µÉ ÀÚ·á°¡ µÇ¾úÀ¸¸é ÇÑ´Ù.
Æ÷Åä¶óÀÌÆ®¸¦ ¾î¶»°Ô ¸¸µé¾î º¼±î Á¤¸» °í¹ÎÀÌ ¸¹¾Ò´Ù. ÇÊÀÚ´Â °³¹ßÀÚ¶ó ȹ±âÀûÀ̰í, âÁ¶ÀûÀÎ »ý°¢ÀÌ ÆÅÆÅ ¶°¿À¸£Áö ¾Ê´Â´Ù. ±×·¡¼ ¿©·¯ »çÀÌÆ®µéÀ» µ¹¾Æ´Ù´Ï¸é¼, ÁÁÀº ±â´ÉµéÀÌ ÀÖ´Â »çÀÌÆ®µéÀ» üũÇϰí, »ç¿ëÇØ º¸¸ç °æÇèÀ» ½×¾Æº¸´ø Áß ½ºÅ丮ť(www.storyq.net)¶ó´Â »çÀÌÆ®¸¦ ¹æ¹®Çؼ »ç¿ëÇØ º¸¾Ò°í, ÀÌ¿Í ºñ½ÁÇÑ °ÍÀ» ½Ç¹ö¶óÀÌÆ®·Î ¸¸µé¾î ºÁ¾ß°Ú´Ù´Â »ý°¢ÀÌ µé¾î ¸¸µé°Ô µÈ °á°ú¹°ÀÌ Æ÷Åä¶óÀÌÆ®ÀÌ´Ù.
µðÀÚÀÎ Çù¾÷
Æ÷Åä¶óÀÌÆ®ÀÇ µðÀÚÀÎÀº ÇöÀç ÈÆ½º´å³Ý ÀͽºÇÁ·¹¼Ç ½Ã»ðÀ¸·Î Ȱµ¿ ÁßÀÎ ±è¼±±¸ ½Ã»ðÀÇ µµ¿òÀ» ¹Þ¾Ò´Ù. ´Ùµé ¾Æ½Ç °ÍÀÌ´Ù. °³¹ßÀ» ÇÒ ¶§ µðÀÚÀ̳ʿÍÀÇ Çù¾÷ÀÌ Áß¿äÇÏ´Ù´Â °ÍÀ» ¸»ÀÌ´Ù. ÇÏÁö¸¸ ±è¼±±¸ ½Ã»ð°ú ÇÊÀÚ´Â °°Àº ȸ»çÀÇ µ¿·áµµ ¾Æ´Ï°í, ¼·Î ¹Ù»Û ½ºÄÉÁÙÀ» Á¶Á¤Çذ¡¸ç Á¦ÀÛ¿¡ ³ª¼ Ä¿¹Â´ÏÄÉÀ̼ÇÁ¶Â÷µµ ½±Áö ¾Ê¾Ò´Ù. ¶§¹®¿¡ ÇÊÀÚ´Â <ȸé 1>°ú °°Àº ¹æ¹ýÀ¸·Î Çù¾÷À» ÇØ º¸±â·Î °áÁ¤À» ³»·È´Ù.
.jpg)
“¼± °³¹ß ÈÄ µðÀÚÀΔÀ̶õ Æ÷Åä¶óÀÌÆ®¿¡¼ »ç¿ëµÉ ±â´Éµé¿¡ ´ëÇØ¼ ¸ÕÀú °³¹ßÀ» ÇØµÎ°í, ³ªÁß¿¡ µðÀÚÀÎÀ» ÀÔÈ÷´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ÇÏ¸é °³¹ßÀÚ´Â µðÀÚÀÎÀ» °í·ÁÇÑ °³¹ßÀ» ÇØ¾ß ÇÒ °ÍÀ̰í, µðÀÚÀ̳ʴ »ç¿ëÀÚ¸¦ À§ÇÑ µðÀÚÀÎÀ» ÇØ¾ß ÇÒ °ÍÀÌ´Ù. Æ÷Åä¶óÀÌÆ®´Â ¿ì¸®°¡ ¸¹ÀÌ µè´ø MVVM + Command ÆÐÅÏÀ» ÀÌ¿ëÇØ ¸¸µé¾ú´Ù. ÀÌ´Â µðÀÚÀ̳ʿÍÀÇ Çù¾÷¿¡¼µµ Á¤¸» ÆíÇß´Ù. °£´ÜÇÏ°Ô MVVMÆÐÅÏ¿¡ ´ëÇØ ¾Ö±âÇÏÀÚ¸é, ¸ðµ¨(Model)°ú ºä(View)¸¦ µ¶¸³ÀûÀÌ°Ô ³öµÎ°í, ±× »çÀÌ¿¡ ºä¸ðµ¨(ViewModel)¸¦ µÎ¾î ºä¿Í ¹ÙÀεùÀ¸·Î ¿«¾î µÎ°í, Ä¿¸Çµå¸¦ ÀÌ¿ëÇØ¼ ÇØ´ç À̺¥Æ®¸¦ ºä¸ðµ¨¿¡¼ ÁÖ°í¹Þ°Ô µÇ´Â Çü½ÄÀÌ´Ù. Ä¿¸Çµå´Â ÁÖ·Î ¾ÖÇø®ÄÉÀÌ¼Ç Àü¿ª¿¡¼ µ¿ÀÏÇÏ°Ô ¹ÞÀ» ¼ö ÀÖ´Â »ç¿ëÀÚ Á¦¾î ¸í·É¿¡ ´ëÇÑ À̺¥Æ®¸¦ È¿°úÀûÀ̰í, Ç¥ÁØÀûÀ¸·Î ¹Þ±â À§ÇÑ ±¸Çö ¹æ¹ýÀÌ´Ù.
Ä¿¸Çµå´Â MVVMó·³ ºä ¿Í ¸ðµ¨ÀÌ ºÐ¸®µÈ ȯ°æ¿¡¼ ¸Å¿ì È¿°úÀûÀ¸·Î Äڵ带 © ¼ö ÀÖ°Ô µµ¿ÍÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. ¿©±â¼ ±â¾ïÇÒ °ÍÀº ¾îÇø®ÄÉÀÌ¼Ç Àü¿ª¿¡¼ µ¿ÀÏÇÏ°Ô ¹ÞÀ» ¼ö ÀÖ´Ù´Â °ÍÀ» Àß ±â¾ïÇØ µÎ±æ ¹Ù¶õ´Ù.
.jpg)
<ȸé 2>¿¡¼ ¿ÞÂÊÀº µðÀÚÀÎÀ» ÀÔÈ÷±â ÀüÀÇ ¸ð½ÀÀ̸ç, ¿À¸¥ÂÊÀº µðÀÚÀÎÀ» ÀÔÈù ¸ð½À´Ï´Ù. MVVMÆÐÅÏÀ¸·Î ¸¸µç °á°ú ºä¸¦ º¯°æÇÏ´Â °Íµµ Á¤¸» ½¬¿ü´Ù. ±×³É ¹ÙÀεù¸¸ Á¦´ë·Î °É¾îµÎ°í Ä¿¸Çµå¸¦ Á¦´ë·Î °É¾î Áֱ⸸ ÇÏ¸é µÇ´Â °ÍÀÌ´Ù. ±×·¸°Ô ÇÏ´Ï 30ºÐµµ ¾È µÇ¼ µðÀÚÀÎÀ» ÀÔÈú ¼ö ÀÖ¾ú´Ù. ÀÌ·¯¹Ç·Î µðÀÚÀÌ³Ê¿Í Çù¾÷ÀÌ ÆíÇß´Ù ÇÒ ¼ö ÀÖ°Ú´Ù.
ÀÌÁ¦ º»°ÝÀûÀ¸·Î Æ÷Åä¶óÀÌÆ®ÀÇ ÀÛµ¿ ¹× ±¸Çö Äڵ忡 ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.
Photo Light ÆÄÀϾ÷·Îµå ±¸Çö
Æ÷Åä¶óÀÌÆ® ÆÄÀϾ÷·Îµå¸¦ ±¸ÇöÇÏ´Â µ¥´Â ÆÄÀϾ÷·Îµå ¾ÖÇø®ÄÉÀÌ¼Ç ¶ÇÇÑ ½Ç¹ö¶óÀÌÆ®·Î ±¸ÇöÇØ ºÃ´Ù. WCF¼ºñ½º¸¦ ÀÌ¿ëÇÏ´Ï, ´ÙÁ߯ÄÀÏ ¾÷·Îµå¿Í ÆÄÀϾ÷·Îµå ÇÁ·Î±×·¹½º¹Ù(Progress Bar)¸¦ Ç¥½ÃÇϴµ¥ ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖ¾ú´Ù. ÀÏ´Ü Æ÷Åä¶óÀÌÆ®¿¡¼ ÆÄÀϾ÷·Îµå°¡ ¾î¶² ½ÄÀ¸·Î ÀÛµ¿µÇ´ÂÁö´Â <ȸé 3>À» ÅëÇØ ¼ø¼´ë·Î °£·«ÇÏ°Ô ¼³¸íÇÒ ¼ö ÀÖ´Ù.
.jpg)
<ȸé 3>¿¡¼ ³ëÆ®ºÏPC·Î Ç¥½ÃµÇ¾îÀÖ´Â ÂÊÀÌ Å¬¶óÀÌ¾ðÆ® PC¶ó°í °¡Á¤À» ÇÏÀÚ. Ŭ¶óÀÌ¾ðÆ®´Â Æ÷Åä¶óÀÌÆ®¿¡ ÆÄÀÏÀ» ¿Ã¸®±â À§ÇØ ÀÚ½ÅÀÌ º¸À¯Çϰí ÀÖ´Â »çÁøÀ» ¼±ÅÃÇÒ °ÍÀÌ´Ù. ¼±ÅÃµÈ ÆÄÀÏÀº »ç¿ëÀÚ°¡ ¾÷·Îµå ¾×¼ÇÀ» ÁÖ°Ô µÉ ¶§, °¢ ÆÄÀϺ°·Î WCF¼ºñ½º¸¦ È£ÃâÇϰí, ¼±ÅÃµÈ ÆÄÀÏÀ» ³Ñ°ÜÁÖ°Ô µÈ´Ù. WCF¼ºñ½º¿¡¼´Â ÀÌ ÆÄÀÏÀ» ¹Þ¾Æ¼, ÆÄÀϼ¹öÀÇ ÇØ´ç ·çÆ®¿¡ ÀúÀåÇϰԵǴµ¥, À̶§ ´Ü¼øÈ÷ ÀúÀ常 ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ½æ³×ÀÏ(Thumbnail) À̹ÌÁö¿Í µöÁÜ(DeepZoom)ÆÄÀϵ鵵 ¸¸µé¾î °°Àº ·çÆ® ¾È¿¡ ÀúÀåÇÑ´Ù. ÀÌÁ¦ ´ë·«ÀûÀ¸·Î Æ÷Åä¶óÀÌÆ®¿¡¼´Â ¾î¶»°Ô ÆÄÀϾ÷·Îµå°¡ µÇ´ÂÁö »ìÆìº¸¾ÒÀ¸´Ï ÀÌÁ¦ ½ÇÁ¦ ±¸Çö Äڵ带 º¸¸é¼ ¾Ö±âÇϵµ·Ï ÇϰڴÙ
.jpg)
<ȸé 4>´Â Æ÷Åä¶óÀÌÆ®ÀÇ ÆÄÀϾ÷·Îµå ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¸ð½ÀÀ̸ç, ÇÁ·ÎÁ§Æ® ±¸¼º³»¿ëÀº <ȸé 5>¿Í °°ÀÌ ¸¸µé¾îºÃ´Ù.
.jpg)
<ȸé 5>¿¡¼ ¼ºñ½º ·¹ÆÛ·±½º·Î FileUploadService°¡ ÂüÁ¶µÈ °ÍÀ» º¼ ¼ö Àִµ¥, ÀÌ´Â ¼ºñ½º¸¦ ÀÌ¿ëÇØ ÆÄÀÏÀ» ¼¹ö¿¡ ¾÷·Îµå ½Ãų ¼ö ÀÖ´Â °ÍÀÌ´Ù. ¼ºñ½º ±¸Çö¿¡ ´ëÇØ¼´Â ´ÙÀ½¿¡ ´Ù½Ã À̾߱âÇϱâ·Î Çϰí Áö±ÝÀº ¼ºñ½º¸¦ ÅëÇÑ ÆÄÀϾ÷·Îµå¸¦ ÀÌ·ï³½´Ù°í¸¸ ¾Ë°í ÀÖÀÚ.
°¢ Æú´õ¿¡ µé¾î Àִ Ŭ·¡½ºµé¿¡ ´ëÇØ¼ °£´ÜÇÏ°Ô ¾Ö±âÇÏÀÚ¸é, Ä¿¸Çµå Æú´õ¿¡´Â À§¿¡¼ ¼³¸íÇÑ Ä¿¸Çµå ÆÐÅÏ ³»¿ë´ë·Î ÆÄÀϾ÷·Îµå¿¡ »ç¿ëµÉ Ä¿¸Çµå¸¦ ÁöÁ¤ÇصРŬ·¡½º¿¡ ¸¸µé¾î µ×°í, ¸ðµ¨ Æú´õ¿¡´Â ÆÄÀÏ¿¡ ´ëÇÑ µ¥ÀÌÅÍŬ·¡½º¿Í ÆÄÀÏ ¾÷·Îµå ÇÁ·Î¹ÙÀÌ´õ(Provider) Á¤ÀÇÇØ µÎ¾ú´Ù. ±×¸®°í ºäÆú´õ¿¡´Â MVVMÆÐÅÏ ³»¿ë°ú °°ÀÌ ºä¿Í ºä¸ðµ¨À» ¸¸µé¾î ³Ö¾îµÐ´Ù.
| <¸®½ºÆ® 1> FileUploadCommands.cs public class FileUploadCommands : Commands { public static FileUploadCommands Current { get private set } public static Command FileChoice { get private set } public static Command FileUpload { get private set } static FileUploadCommands() { Current = new FileUploadCommands(); } public FileUploadCommands() { FileChoice = CreateCommand("FileChoice"); FileUpload = CreateCommand("FileUpload"); } } |
ÀÌÁ¦ ÆÄÀϾ÷·Îµå¿¡ °ü·ÃµÈ ÁÖ¿ä Äڵ带 »ìÆìº¸ÀÚ. <¸®½ºÆ® 1>Àº Ä¿¸Çµå °ü·Ã ÄÚµåÀÇ ³»¿ëÀÌ´Ù. <¸®½ºÆ® 1>À» ÅëÇØ º¸¸é Ä¿¸Çµå¸¦ »ó¼Ó¹Þ°í ÀÖ´Â °ÍÀ» ¾Ë ¼ö Àִµ¥, ÀÌ´Â HugeFlow.Com mandPattern.dll¸¦ ÂüÁ¶Çؾ߸¸ »ó¼Ó¹ÞÀ» ¼ö ÀÖÀ¸¸ç, »ó¼ÓÀ» ¹ÞÀ¸¸é Ä¿¸Çµå »ý¼ºÀÌ °¡´ÉÇÏ°Ô µÈ´Ù. ÇÊÀÚ´Â FileChoice¿Í FileUpload µÎ°³¸¦ Á¤ÀûÀ¸·Î »ý¼ºÇØ µÎ¾ú´Ù. FileChoice´Â ÆÄÀÏ ¼±ÅÃÀ» Ŭ¸¯ÇßÀ» ¶§ÀÇ Ä¿¸ÇµåÀ̰í, FileUpload´Â ÆÄÀÏ ¾÷·Îµå Ŭ¸¯ÇßÀ» ¶§ÀÇ Ä¿¸ÇµåÀÌ´Ù. µÚÀ̾î Á¦½ÃµÇ´Â <¸®½ºÆ® 2>´Â ¾Õ¼ ¼±º¸ÀÎ Ä¿¸ÇµåµéÀ» ºä¿¡¼ ¾î¶»°Ô ¿«¾îÁÖ°í ÀÖ´ÂÁö º¼ ¼ö ÀÖ´Ù.
|
<¸®½ºÆ® 2> ImagePanelView.xaml …. Áß°£ »ý·« … <Button HorizontalAlignment="Right" VerticalAlignment= "Stretch" </UserControl> |
À§ XAMLÄڵ带 º¸¸é ¸ÕÀú UserControl ¿¤¸®¸ÕÆ®(Element)¿¡ CommandPattern ¾î¼Àºí¸®¸¦ ¼³Á¤ÇØÁØ´Ù. ±×·¡¾ß XAMLÄڵ忡¼ Ä¿¸Çµå¸¦ ¿«À» ¼ö Àֱ⠶§¹®ÀÌ´Ù. ÇÊÀÚ´Â Ãß°¡¹öư°ú »èÁ¦¹öư ÄÁÆ®·ÑÀ» ¸¸µé¾î ¾Õ¼ ÁöÁ¤ÇÑ FileChoice¶ó´Â Ä¿¸Çµå¸¦ ¿«¾î ÁÖ¾ú´Ù. Command:CommandService.Command¿¡ ¹Ì¸® ¸¸µé¾î µÎ¾ú´ø Ä¿¸Çµå À̸§À» ÁöÁ¤ÇØÁÖ¸é µÇ´Â °ÍÀÌ´Ù. ±×¸®°í Çʿ信 µû¶ó ¸Å°³º¯¼ö(Parameter)µµ °°ÀÌ ÁöÁ¤ÇÒ ¼ö Àִµ¥, ÀÌ´Â Command:CommandService.CommandParameter¿¡ ¹®ÀÚ·Î ÁöÁ¤ÇØ ÁÙ ¼ö ÀÖ´Ù. ÇÊÀÚ´Â ¸Å°³º¯¼ö·Î Insert, Delete¶ó°í ÁöÁ¤ÇØ ÁÖ¾ú´Ù. ÀÌÁ¦ ÀÌ Ä¿¸Çµå¸¦ ¾îµð¼ ¾î¶»°Ô ¹Þ´ÂÁö <¸®½ºÆ® 3>À» ÅëÇØ ¾Ë¾Æº¸ÀÚ.
|
<¸®½ºÆ® 3> ImagePanelViewModel.cs public ImagePanelViewModel() |
<¸®½ºÆ® 3>¿¡¼ Á¦½ÃµÈ ImagePanelViewModelÀ̶ó´Â Ŭ·¡½º´Â ImagePanelView.xamlÀÇ ºä¸ðµ¨ÀÌ´Ù. ImagePane lView ModelÀÇ »ý¼ºÀÚ¿¡¼ Ä¿¸Çµå À̺¥Æ®¸¦ »ý¼ºÇØ ÁÖ¾ú´Ù. À§¿¡¼µµ ¸»Çßµí Ä¿¸Çµå´Â Àü¿ª¿¡¼ »ç¿ëµÉ ¼ö ÀÖÀ¸¹Ç·Î ºä¸ðµ¨¿¡ À̺¥Æ®¸¦ ¿«À» ¼ö ÀÖ´Ù. ÀÌÁ¦ Ä¿¸Çµå¸¦ ¾î¶»°Ô »ç¿ëÇØ¾ß ÇÒ Áö °¨ÀÌ ¿ÔÀ» °ÍÀÌ´Ù. ±×·¯³ª Ä¿¸Çµå¸¦ ³Ê¹« ³²¹ßÇϰųª ¹«Á¶°Ç Ä¿¸Çµå¸¦ ¸¸µé¾î¼´Â ¾ÈµÈ´Ù. ¿¹¸¦ µé¸é ºä¿¡¼ Visibility¸¦ Colla psed ¶Ç´Â Visible Çϴµ¥ Ä¿¸Çµå±îÁö ¸¸µéÁö ¸»ÀÚ´Â ¾Ö±â´Ù. ÀÌ·±°Ç ºä¿¡¼ ÇüŸ¸ º¯°æµÇ´Â °ÍÀ̱⿡ ºäÂÊ¿¡¼ ó¸®Çϴ°ÍÀÌ ÁÁ´Ù. ²À ÀÌÁ¡À» ÁÖÀÇÇØ¼ Ä¿¸Çµå¸¦ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.
|
<¸®½ºÆ® 4> UploadAgent.cs public void UploadFile() |
<¸®½ºÆ® 4>´Â ÆÄÀϾ÷·Îµå ÄÚµå´Ù. ¿©±â¿¡¼ º¸¿©ÁÖ´Â Upload File ¸Þ¼Òµå´Â WCF¼ºñ½º¿¡ ÆÄÀÏÀ» ¾÷·ÎµåÇÏ´Â ¸Þ¼Òµå´Ù. Äڵ带 º¸¸é ÆÄÀϽºÆ®¸²À» Àо°í À̸¦ Âɰ³¼ ¼ºñ½º¿¡ È£ÃâÇϰí ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ¼ºñ½º È£Ãâ ÈÄ Completed°¡ ÀϾÀ» ¶§ ¿¡·¯°¡ ¹ß»ýµÇÁö ¾ÊÀ¸¸é ´Ù½Ã UploadFile ¸Þ¼Òµå¸¦ È£ÃâÇØ ¾ÆÁ÷ ´Ù ¿Ã¸®Áö ¾ÊÀº ÆÄÀϽºÆ®¸²ÀÌ ÀÖ´ÂÁö üũÇÑ ÈÄ ´Ù½Ã ¼ºñ½º¸¦ È£ÃâÇÑ´Ù. ÀÌó·³ ¹Ýº¹ÀûÀ¸·Î ÆÄÀϾ÷·Îµå ÁøÇà¹Ù¿¡ °ªÀ» °è¼ÓÇØ¼ º¯°æÇÏ°Ô µÈ´Ù. FileUploadData Ŭ·¡½º´Â ¼ºñ½º¿¡¼ »ý¼ºÇÑ Å¬·¡½º·Î ¾÷·Îµå¸¦ ¿äûÇÒ ¶§ ¸Å°³º¯¼ö(Para meter)·Î »ç¿ëµÈ´Ù. Áï, ÀÌ Å¬·¡½º¿¡ ¾÷·ÎµåÆÄÀÏ Á¤º¸¸¦ ÁöÁ¤ÇÑ ÈÄ, SaveFile Async¸¦ È£ÃâÇϰí ÀÌ ¸Å°³º¯¼ö·Î FileUploadData¸¦ ÁöÁ¤ÇÏ¸é µÈ´Ù.
ÆÄÀϾ÷·Îµå WCF¼ºñ½º
À¥ ÇÁ·ÎÁ§Æ®¿¡¼ WCFÆÄÀÏÀ» Çϳª »ý¼ºÇÏÀÚ. ÇÊÀÚÀÇ °æ¿ì¿¡´Â <ȸé 6>°ú °°ÀÌ FileUploadService ¿Í PhotoViewService µÎ°³¸¦ ¸¸µé¾î µÎ¾ú´Ù.
.jpg)
PhotoViewService´Â ³ªÁß¿¡ PhotoLight¿¡¼ »ç¿ëµÉ ¼ºñ½º´Ù. ÀÌ·¸°Ô ¼ºñ½º¸¦ Á¦ÀÛÇß´Ù¸é Web.config ÆÄÀÏ¿¡¼ endpointÀÇ ¹ÙÀεùÀ» basicHttpBinding·Î ÁöÁ¤ÇØ¾ß ÇÑ´Ù. ±× ÀÌÀ¯´Â ½Ç¹ö¶óÀÌÆ®¿¡¼´Â basicHttpBinding¸¸À» Áö¿øÇÑ´Ù´Â Á¡ ¶§¹®À̸ç, ÀÌ´Â ²À ±â¾ïÇØµÎ¾î¾ß ÇÒ Áß¿ä ¿ä¼ÒÁß Çϳª´Ù. ÀÌÁ¦ WCF¼ºñ½º Äڵ带 <¸®½ºÆ® 5>¿Í <¸®½ºÆ® 6>À» ÅëÇØ »ìÆìº¸ÀÚ.
SaveFile ¸Þ¼Òµå´Â ½Ç¹ö¶óÀÌÆ®¿¡¼ »ç¿ëµÉ ¼ö ÀÖµµ·Ï OperationContract¶ó´Â ¾îÆ®¸®ºäÆ®¸¦ Àû¾îÁà¾ß ÇÑ´Ù. ÇØ´ç ¸Þ¼Òµå´Â FileUploadProvider Ŭ·¡½ºÀÇ SaveFile ¸Þ¼Òµå¸¦ È£ÃâÇϰí ÀÖ´Ù. ½ÇÁ¦ ÆÄÀϾ÷·Îµå°¡ 󸮵Ǵ ¸Þ¼Òµå´Â FileUpload Provider Ŭ·¡½ºÀÇ SaveFile ¸Þ¼Òµå´Ù. <¸®½ºÆ® 5>¿Í <¸®½ºÆ® 6>À» »ìÆìº¸¸é ÇØ´ç ÆÄÀÏÁ¤º¸°¡ ¿Ã¶ó¿À¸é ÁöÁ¤ÇÑ ·çÆ®Æú´õ¿¡ ÆÄÀÏÀ» ÀúÀåÇÑ´Ù. ±×¸®°í ÆÄÀÏÀÌ ¿Ïº®ÇÏ°Ô ¾÷·Îµå µÇ¾ú´ÂÁö IsLast ¼Ó¼ºÀ» Ã¼Å©ÇØ¼ ÆÄÀÏÀÌ ¸ðµÎ ¾÷·ÎµåµÇ¸é ½æ³×ÀÏ À̹ÌÁö¿Í µöÁÜ ÆÄÀÏÀ» »ý¼ºÇÏ´Â °ÍÀ» º¼ ¼ö ¾Ò´Ù.
|
<¸®½ºÆ® 5> FileUploadService.cs [OperationContract] |
|
<¸®½ºÆ® 6> FileUploadProvider.cs public void SaveFile(FileUploadData file) if (file.IsFirst) FileStream stream = File.Open(Path.Combine(uploadDir, fname), FileMode.Append); if (file.IsLast) |
Deep Zoom Composer API Ȱ¿ë
¾÷·ÎµåµÈ À̹ÌÁöÆÄÀÏÀ» µöÁÜ(DeepZoom)ÆÄÀÏ·Î º¯È¯Çϱâ À§Çؼ´Â DeepZoom Composer API¸¦ ÀÌ¿ëÇØ¾ß Çϴµ¥, À̸¦ »ç¿ëÇϱâ À§Çؼ´Â ¸ÕÀú ¼¹ö¿¡ DeepZoom Composer¸¦ ¼³Ä¡Çϰí, DeepZoomTools.dll¸¦ ÇÁ·ÎÁ§Æ®¿¡ ÂüÁ¶Ãß°¡¸¦ ÇØ¾ßÇÑ´Ù. ÂüÁ¶¸¦ ÇÏ°Ô µÇ¸é ImageCreator¶ó´Â ÇÔ¼ö°¡ Àִµ¥, ÀÌ ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼ °£´ÜÇÏ°Ô µöÁÜÆÄÀÏÀ» »ý¼º ÇÒ ¼ö ÀÖ´Ù. \
|
<¸®½ºÆ® 7> DeepZoomHelper.cs public void CreateDeepZoomImage() |
<¸®½ºÆ® 7>À» ÀÔ·ÂÇÏ¸é µöÁÜÆÄÀÏÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù. ÇÊÀÚ´Â µöÁÜÆÄÀÏ¿¡¼ ImageCreatorÇÔ¼ö¸¦ »ý¼ºÇϰí, ImageQuality ¼Ó¼º°ú TileSize ¼Ó¼º, TileOverlap ¼Ó¼º¸¸ ÁöÁ¤ÇØÁÖ¾ú´Ù. ÀÌ ¼Ó¼ºµéÀº ¾Æ·¡¿Í °°´Ù.
- ImageQuality ¼Ó¼ºÀ» 0¿¡¼ 1 »çÀÌÀÇ °ªÀ¸·Î ¼¼ÆÃÇϸç, º¸Åë 0.95 Á¤µµ·Î ÁöÁ¤ÇÑ´Ù.
- TileSize ¼Ó¼ºÀº µöÁÜÆÄÀÏÀÇ À̹ÌÁö ŸÀÏÀÇ Å©±â¸¦ ÁöÁ¤ÇÑ´Ù.
- TileOverlap ¼Ó¼ºÀº À̹ÌÁöµéÀÇ OverlapÁ¤µµ´Â ÁöÁ¤ÇÑ´Ù.
CreateÇÔ¼ö¸¦ ÅëÇÑ µöÁÜÆÄÀÏ »ý¼º½Ã º¯¼ö°¡ ¹ß»ýÇϴµ¥, ù ¹øÂ° ¸Å°³º¯¼ö´Â ÆÄÀϸí(½ÇÁ¦ÆÄÀÏÀÇ °æ·Î)À̸ç, µÎ ¹øÂ° ¸Å°³º¯¼ö´Â ÀúÀåµÇ¾îÁú µð·ºÅ丮 °æ·Î¸¦ ÁöÁ¤ÇÏ¸é µÈ´Ù.
ÀÌ·¸°Ô ÇØ¼ ´ë·«ÀûÀ¸·Î ÆÄÀϾ÷·Îµå ¾ÖÇø®ÄÉÀÌ¼Ç µ¿ÀÛ, Äڵ屸ÇöºÎºÐ°ú WCF¼ºñ½º¿¡¼ 󸮵Ǵ ºÎºÐ¿¡ ´ëÇØ ¾Ë¾Æ ºÃ´Ù. ÀÌÁ¦ Æ÷Åä¶óÀÌÆ® ¾ÖÇø®ÄÉÀ̼ǿ¡ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.
Æ÷Åä¶óÀÌÆ® µ¿ÀÛ°ú ±¸Çö
¸®½ºÆ®¸¦ »ìÆìº¸±â¿¡ ¾Õ¼ <ȸé 7>À» ÂüÁ¶ÇØ Æ÷Åä¶óÀÌÆ®¿¡¼ ¾î¶»°Ô µ¥ÀÌÅ͸¦ ÁÖ°í¹Þ´ÂÁö, °£´ÜÇÏ°Ô Â¤°í ³Ñ¾î°¡ÀÚ.
.jpg)
<ȸé 7>À» º¸¸é <ȸé 3>°ú °°ÀÌ ³ëÆ®ºÏ PC°¡ ÀÖ´Ù. ÀÌ ¶ÇÇÑ Å¬¶óÀÌ¾ðÆ® PC¶ó°í ÀνÄÇÏÀÚ. ±×·¯³ª <ȸé 3>°ú´Â ´Þ¸® <ȸé 7>ÀÇ Å¬¶óÀÌ¾ðÆ® PC ¿·¿¡´Â Ű(key)°¡ ÀÖ´Â °ÍÀ» º¼ ¼ö Àִµ¥ ÀÌ´Â µ¥ÀÌÅÍÀÇ Å°¶ó°í »ý°¢ÇÏ¸é µÈ´Ù. Æ÷Åä¶óÀÌÆ®¿¡¼µµ WCF¼ºñ½º¸¦ ÀÌ¿ëÇÑ´Ù. ÇØ´ç ۸¦ WCF¼ºñ½º¿¡ ³Ñ±â¸é, WCF¼ºñ½º´Â DBServer¿¡ µ¥ÀÌÅ͸¦ ¿äûÇÑ ÈÄ ÇØ´ç µ¥ÀÌÅ͸¦ ½Ç¹ö¶óÀÌÆ® ¾ÖÇø®ÄÉÀ̼ǿ¡ º¸³»ÁÖ´Â Çü½ÄÀÌ´Ù.
.jpg)
<ȸé 8>Àº Æ÷Åä¶óÀÌÆ®ÀÇ ÇÁ·ÎÁ§Æ® ±¸¼º ¸ð½ÀÀ¸·Î, ÆÄÀϾ÷·Îµå ÇÁ·ÎÁ§Æ®¿Í ºñ½ÁÇÑ ±¸¼ºÀ» °®Ãß°í ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. <¸®½ºÆ® 8>Àº Æ÷Åä¶óÀÌÆ®¿¡ ÀÌ¿ëµÇ´Â ÁÖ¿ä ÄÚµåµéÀ» Á¦½ÃÇÑ´Ù. ¸ÕÀú <¸®½ºÆ® 8>¿¡¼´Â ScriptManager Ŭ·¡½ººÎÅÍ º¸µµ·Ï ÇÏÀÚ. ScriptManager´Â ¿ÜºÎ¿¡¼ ½ºÅ©¸³Æ®(Script)ÇÔ¼ö¸¦ ÅëÇØ µ¥ÀÌÅÍ Å°¸¦ ³Ñ°Ü ¹Þ°ÔµÇ¸é, ScriptManager¿¡¼´Â µ¥ÀÌÅÍ Å°°¡ º¯°æµÇ¾úÀ½À» ¾Ë·ÁÁÖ´Â ¿ªÇÒÀ» ´ã´çÇϰí ÀÖ´Ù.
|
<¸®½ºÆ® 8> ScriptManager.cs public class ScriptManager |
ÀÌ Ä÷³À» Àд µ¶ÀÚ¶ó¸é ´Ùµé ¾Ë°í ÀÖ°ÚÁö¸¸ ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ ÅëÇÑ ½Ç¹ö¶óÀÌÆ® ÇÔ¼ö È£ÃâÀ» À§Çؼ´Â HtmlPage.Register ScriptableObject ÇÔ¼ö¿¡ ½ºÅ©¸³Æ® °¡´ÉÇÑ ¾×¼¼½º ±â´ÉÀ» À§ÇØ °ü¸®µÇ´Â °³Ã¼¸¦ µî·ÏÇϸç, ½ºÅ©¸³Æ®¿¡¼ ƯÁ¤ ÇÔ¼ö¿¡ Á¢±ÙÇϱâ À§Çؼ´Â ScriptableMember¶ó´Â ¾îÆ®¸®ºäÆ®¸¦ ºÙ¿©¾ßÇÑ´Ù. Æ÷Åä¶óÀÌÆ®¿¡¼´Â PTKey¶ó´Â ¸Þ¼Òµå¸¦ ½ºÅ©¸³Æ®¿¡¼ Á¢±ÙÇÒ¼ö ÀÖµµ·Ï ÁöÁ¤ÇØ ÁÖ¾ú´Âµ¥ À̴ Ű °ªÀÌ ¹Ù²ð ¶§¸¶´Ù PhotoKey Changed¶ó´Â À̺¥Æ®¸¦ È£ÃâÇØ ÁÖ°Ô µÇ´Â °Í ÀÌ´Ù. ÀÌ À̺¥Æ®¸¦ ¹Þ´Â ÂÊ¿¡¼´Â ÇØ´ç Ű °ªÀ¸·Î WCF¼ºñ½º¸¦ È£ÃâÀ» ÇØ¼ µ¥ÀÌÅ͸¦ ¹Þ¾Æ¿À°Ô µÈ´Ù.
WCF¼ºñ½º Ȱ¿ë Tip
º¸Åë WCF¼ºñ½º¿¡¼ µ¥ÀÌÅÍŬ·¡½º¸¦ »ý¼ºÇϸé DataCon tract ¾îÆ®¸®ºäÆ®¿Í DataMember ¾îÆ®¸®ºäÆ®¸¦ ºÙ¿© »ç¿ëÇßÀ» °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ¹æ½ÄÀ» ÅëÇØ¾ß Á÷·ÄÈ(Serialization)°¡´ÉÇØÁ®, ½Ç¹ö¶óÀÌÆ® ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ¹ÞÀ» ¼ö ÀÖ°í, ¼ºñ½º ¿¡·¯µµ ÇÇÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ±×·¯³ª ´å³Ý ÇÁ·¹ÀÓ¿öÅ© 3.5 SP1¸¦ ¼¹ö¿¡ ¼³Ä¡Çϸé, DataContractµîÀÇ Á÷·ÄÈ °ü·Ã ¼±¾ð ¾øÀ̵µ ¸ðµç C# Object¸¦ Remoting TypeÀ¸·Î Á¦°øÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ´å³Ý ÇÁ·¹ÀÓ¿öÅ© 3.5SP1¿¡ WCFdhk °ü·ÃµÈ ±â´ÉÀÌ Ãß°¡µÆ±â ¶§¹®ÀÌ´Ù.
.jpg)
¾Ö´Ï¸ÅÀÌ¼Ç ÁÖ±â
Æ÷Åä¶óÀÌÆ®¿¡¼´Â ½½¶óÀ̵庸±â¶ó´Â ±â´ÉÀÌ ÀÖ´Ù. ½½¶óÀ̵庸±â ±â´ÉÀº ¿©·¯ÀåÀÇ »çÁøÀ» ÀÚµ¿À¸·Î ÇÑ Àå ÇÑ Àå ³Ñ°ÜÁÖ¸é¼ º¸¿©ÁÖ´Â ±â´ÉÀÌ´Ù. <¸®½ºÆ® 9>´Â ÀÌ ±â´ÉÀ» »ùÇ÷Π±¸ÇöÇÒ ¼ö ÀÖ´Â Äڵ带 Á¤¸®ÇÑ °ÍÀÌ´Ù.
|
<¸®½ºÆ® 9> ShowControl.xaml <UserControl x:Class="PhotoLight.ShowControl" |
<¸®½ºÆ® 9>¿¡ ¸í½ÃµÈ ShowControlÀ̶ó´Â À¯ÀúÄÁÆ®·ÑÀ» º¸¸é µÎ °³ÀÇ ½ºÅ丮º¸µå°¡ Á¸ÀçÇÔÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌ µÎ °³ÀÇ ½ºÅ丮º¸µå´Â °£´ÜÇÑ ¾Ö´Ï¸ÞÀ̼ÇÀ» Á¤ÀÇÇϰí Àִµ¥ ÀÌ´Â À̹ÌÁö ÄÁÆ®·ÑÀÇ Opacity¸¦ 0À¸·Î Çß´Ù, 1·Î ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ±×·¡¼ µ¥ÀÌÅͰ¡ º¯°æµÉ ¶§ ¸¶´Ù À̹ÌÁöÀÇ Opacity°ªÀ» Á¶ÀýÇØÁà ±âÁ¸ÀÇ À̹ÌÁö´Â »ç¶óÁö°í, »õ·Î¿î À̹ÌÁö´Â ºÎµå·´°Ô ³ªÅ¸³ª°Ô ¾Ö´Ï¸ÞÀ̼ÇÀ¸·Î ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù(<ȸé 10> ÂüÁ¶).
.jpg)
¾Ö´Ï¸ÞÀ̼ÇÀÌ ÀÛµ¿µÇ´Â ¸ð½À°ú ½ÇÁ¦ÀûÀÎ µ¿À۴ܰ谡 ±Ã±ÝÇÑ µ¶ÀÚµéÀº www.happydong214.com¸¦ ¹æ¹®ÇÏ¸é º¼ ¼ö ÀÖ´Ù.
Áö±Ý±îÁö Æ÷Åä¶óÀÌÆ®ÀÇ ´ë·«ÀûÀÎ ¼Ò½ºÄÚµå¿Í ÀÛµ¿³»¿ë¿¡ ´ëÇØ ¾Ë¾Æº¸¾Ò´Ù. ÇÊÀÚ ¶ÇÇÑ ½Ç¹ö¶óÀÌÆ®¿Í °ü·ÃµÈ ȸ»ç¿¡¼ ÀÏÀ» Çϰí ÀÖÁö¸¸, °æÇèÀÌ ºÎÁ·ÇÑ °ÍÀº »ç½ÇÀÌ´Ù. ÇÏÁö¸¸, Áö±Ý±îÁö ³ª¿Ô´ø °³¹ßÀ̽´ ¹× ½Ç¹ö¶óÀÌÆ®¿¡¼ Á¦°øÇÏ´Â ±âº»ÀûÀÎ ÄÁÆ®·ÑµéÀ» Àß ÀÌ¿ëÇØ¼ ÀÌ·¸°Ô ¸ÚÁø ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇÒ ¼ö ÀÖ¾ú´Ù. ½Ç¹ö¶óÀÌÆ®°¡ ¾î·Æ°í »ý°¢ÇϽô ºÐµéÀÌ ÀÖ´Ù¸é, ±×·± »ý°¢Àº ±×³É Àá½Ã Àذí, Çѹø ¹ÌÄ£µíÀÌ ¸¸µé¾îº¸°í, ¶Ç ¸¸µé¾îº¸ÀÚ. ±×·¯´Ù º¸¸é Àڽŵµ ¸ð¸£°Ô ¹ßÀüµÇ¾î°¡´Â ¸ð½ÀÀ» º¼ ¼ö ÀÖ°Ô µÉ °ÍÀÌ´Ù.
Âü°í ÀÚ·á
1. www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx
2. http://hoons.kr/Board.aspx?Name=sivlerlighttip&Mode=2&BoardIdx= 19560&Key=Title&Value=MV
3. http://hoons.kr/Board.aspx?Name=sivlerlighttip&Mode=2&BoardIdx= 19561&Key=Title&Value=MV
4. http://hoons.kr/Lecture/LectureView.aspx?BoardIdx=18394&kind=43