ASP.NET ¸®ºÎÆ®
ASP.NET 5 ¼Ö·ç¼Ç ±¸¼º
ASP.NET 5¿¡¼ ÇÁ·ÎÁ§Æ® ±¸¼ºÀ» À§ÇØ »õ·Ó°Ô µîÀåÇÏ´Â °³³ä°ú web.config¸¦ ´ëüÇÏ´Â »õ·Î¿î ¼³Á¤(configuration) ¸ðµ¨¿¡ ´ëÇØ ¼Ò°³ÇÑ´Ù. ¶ÇÇÑ, Ŭ¶óÀÌ¾ðÆ® ¶óÀ̺귯¸®¸¦ °ü¸®ÇÏ´Â ¹æ½Ä¿¡ ¸¹Àº º¯È°¡ Àִµ¥ Node.js Ä¿¹Â´ÏƼÀÇ ÆÐŰÁöµéÀ» Àû±ØÀûÀ¸·Î ¼ö¿ëÇÑ °ÍÀÌ Èï¹Ì·Ó´Ù.
ù ¹øÂ° ¡®ASP.NET 5¡¯ ±Û¿¡ À̾î ASP.NETÀÇ Áß¿äÇÑ º¯È¸¦ ¿ °¡Áö·Î ³ª´² ¼Ò°³ÇÑ´Ù. Áö³ ´Þ¿£ ´å³Ý ÄÚ¾î, º´·Ä ¼öÇà°ú Å©·Î½ºÇ÷§Æû, ¹Ìµé¿þ¾î Ãø¸éÀ» ´Ù·ð´Ù. À̹ø È£¿¡¼´Â ¼Ö·ç¼Ç ±¸Á¶, web.configÀÇ º¯È¿Í project.json, task runner¸¦ ¼Ò°³ÇÑ´Ù.
1. ¼Ö·ç¼Ç ±¸Á¶
Visual Studio 2015 RC ¿¡¼´Â ASP.NET 5 À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» »ý¼ºÇÒ ¶§, <±×¸² 1>°ú °°ÀÌ ¼¼ °¡Áö Á¾·ùÀÇ ÅÛÇø´À» Á¦°øÇÑ´Ù.

<±×¸² 1> ASP.NET 5 À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µé±â À§ÇÑ ÅÛÇø´

<±×¸² 2> ASP.NET 5 Preview ÅÛÇø´¿¡ µû¸¥ ¼Ö·ç¼Ç ±¸Á¶
Empty¿Í Web API ÅÛÇø´¿¡ ÀÇÇØ »ý¼ºµÈ ÇÁ·ÎÁ§Æ®´Â Controllers Æú´õ¸¦ Á¦¿ÜÇÏ¸é µ¿ÀÏÇÏ´Ù. ¹Ý¸é Web Site ÇÁ·ÎÁ§Æ®´Â ±âÁ¸ÀÇ ASP.NET MVC ÇÁ·ÎÁ§Æ®¿Í À¯»çÇÑ Æú´õ ±¸Á¶¿Í, Ŭ¶óÀÌ¾ðÆ® ¶óÀ̺귯¸® ±¸¼º¿¡ »ç¿ëÇÏ´Â ¿©·¯ °¡Áö json ÆÄÀϵéÀ» Æ÷ÇÔÇϰí ÀÖ´Ù. json ÇüÅÂÀÇ ¼³Á¤ ÆÄÀϵéÀº ÀÌ ±ÛÀÇ ÈĹݺο¡¼ ¾Ë¾Æº¼ °ÍÀÌ´Ù.
¼Ö·ç¼ÇÀÇ Àü¹ÝÀûÀÎ ±¸Á¶¸¦ º¸¸é ù ¹øÂ°·Î global.json ÆÄÀϰú src Æú´õ°¡ ´«¿¡ ¶è´Ù. ¼Ò½º¸¦ ÀǹÌÇÏ´Â src Æú´õ¿¡ ¿©·¯ ÇÁ·ÎÁ§Æ®°¡ ¸ðÀ̰í, ±× ¿ÜºÎ¿¡ global.json ÆÄÀÏÀ» µÎ¾î ÇÁ·ÎÁ§Æ®°£ °øÅëÀûÀÎ ³»¿ëÀ» ¼³Á¤Çϰí ÀÖ´Ù. global.json ÆÄÀÏÀÇ ³»¿ëÀ» º¸¸é ÇÁ·ÎÁ§Æ®°¡ À§Ä¡ÇÑ Æú´õ¿Í ÇÁ·ÎÁ§Æ®¿¡¼ »ç¿ëÇÒ CLRÀÇ ¹öÀüÀ» ÁöÁ¤Çϰí ÀÖ´Ù.
<¸®½ºÆ® 1> ÇÁ·ÎÁ§Æ® ¼Ó¼º
{
"projects": [ "src", "test" ],
"sdk": {
"version": "1.0.0-beta4"
}
}
projects ¼Ó¼ºÀº ±× °ªÀ¸·Î ¹è¿ ÇüÅÂÀÇ Æú´õ ¸ñ·ÏÀ» °®´Âµ¥, test¶ó´Â Æú´õ´Â ÅÛÇø´¿¡ ÀÇÇØ »ý¼ºµÇ´Â Æú´õ°¡ ¾Æ´Ï´Ù. °³¹ßÀÚ°¡ test Æú´õ¸¦ »ý¼ºÇÏ¿© Å×½ºÆ® ÇÁ·ÎÁ§Æ®¸¸À» °ü¸®Çϵµ·Ï ±ÇÀåÇÏ´Â ¼³Á¤À¸·Î º¸ÀδÙ. Âü°í·Î Visual Studio 2015 RC¿¡¼ ASP.ET 5 Preview ÅÛÇø´Àº Unit Tests ÇÁ·ÎÁ§Æ®¸¦ Ãß°¡ÇÏ´Â ¿É¼ÇÀÌ ºñȰ¼ºÈµÇ¾î ÀÖ¾î Å×½ºÆ® ÇÁ·ÎÁ§Æ®¸¦ µ¿½Ã¿¡ »ý¼ºÇÒ ¼ö ¾ø´Ù.
µÎ ¹øÂ° ´«¿¡ ¶ç´Â º¯È´Â, IIS ¼³Ä¡ ÈÄ¿¡³ª º¼ ¼ö ÀÖ¾ú´ø wwwroot Æú´õ°¡ ÇÁ·ÎÁ§Æ®ÀÇ ÀϺηΠµîÀåÇÑ °ÍÀÌ´Ù. ÇÁ·ÎÁ§Æ® ·çÆ®°¡ °ð À¥ »çÀÌÆ®ÀÇ ·çÆ®¿´´ø ±âÁ¸ÀÇ ÆÄÀÏ ±â¹Ý Á¢±Ù¹ýÀº web.config, global.asax ÆÄÀÏó·³ ¹Î°¨ÇÑ ÇÁ·ÎÁ§Æ® ÆÄÀÏÀ» °¨Ãß±â À§ÇØ ÇÁ·¹ÀÓ¿öÅ© ¼öÁØ¿¡¼ ´ëÃ¥ÀÌ ÇÊ¿äÇÏ´Ù´Â ¹®Á¦°¡ ÀÖ¾ú´Ù. ƯÁ¤ ÆÄÀÏ¿¡ ´ëÇÑ Á¢±ÙÀ» ¸·±â À§ÇØ blacklist¸¦ °ü¸®ÇØ¾ß Çß´Ù.
wwwroot Æú´õ´Â ±× À̸§¿¡¼ ¾Ë ¼ö ÀÖµíÀÌ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ·çÆ®´Ù. ±×·¸´Ù°í ÀÌ Æú´õ ¾ÈÀÇ ÆÄÀϵéÀÌ ÀÚµ¿À¸·Î ¼ºñ½ºµÇ´Â °ÍÀº ¾Æ´Ñµ¥ whitelist Á¢±Ù¹ýÀ» »ç¿ëÇϱ⠶§¹®ÀÌ´Ù. Áö³ È£ ¿¬Àç¿¡¼ ´Ù·ç¾ú´ø ¹Ìµé¿þ¾î¿Í °ü·ÃÀÌ ÀÖ´Ù. °³¹ßÀÚ°¡ ¹Ìµé¿þ¾î¸¦ ÅëÇØ Á÷Á¢ HTTP ¿äûÀ» ó¸®ÇÏ´Â ÆÄÀÌÇÁ¶óÀÎÀ» ±¸¼ºÇϱ⠶§¹®¿¡ °£´ÜÇÑ html ÆäÀÌÁö¶óµµ ¿äû¿¡ ÀÀ´äÇÏ°Ô ÇÏ·Á¸é ¾ÖÇø®ÄÉÀÌ¼Ç ±¸µ¿½Ã app.UseStaticFiles() ¸Þ¼µå¸¦ »ç¿ëÇØ¼ Á¤Àû ÆÄÀÏÀÌ ¼ºñ½ºµÇµµ·Ï ±¸¼ºÇØ¾ß ÇÑ´Ù°í Çß´Ù. ÀÌ·± whitelist Á¢±Ù¹ýÀº º¸¾È Ãø¸é¿¡¼ blacklist Á¢±Ù¹ýº¸´Ù ¿ì¼öÇÏ´Ù.
¼¼ ¹øÂ°·Î global.asax ÆÄÀÏÀÌ »ç¶óÁö°í StartUp Ŭ·¡½º°¡ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ½ÇÇà ÁöÁ¡À» Á¦°øÇÑ´Ù. »ý¼ºÀÚ¸¦ ÅëÇØ Á¾¼Ó¼º ÁÖÀÔÀÌ °¡´ÉÇϰí Configure ¸Þ¼µå¿¡¼ ¹Ìµé¿þ¾î¸¦ Á¶ÇÕÇÏ´Â °ÍÀ¸·Î HTTP ¿äûÀ» ó¸®ÇÒ ÆÄÀÌÇÁ¶óÀÎÀ» ±¸¼ºÇÑ´Ù.
³× ¹øÂ°·Î ÇÁ·ÎÁ§Æ® ÆÄÀÏÀÇ È®ÀåÀÚ°¡ .csproj ¿¡¼ .xproj ·Î ¹Ù²î¸ç ÇÁ·ÎÁ§Æ® ÆÄÀÏÀÌ °£¼ÒȵǾú°í, ÇÁ·ÎÁ§Æ® ±¸¼º¿¡ ´ëÇÑ ´ëºÎºÐÀÇ ³»¿ëÀÌ »õ·Ó°Ô µîÀåÇÑ project.json ÆÄÀÏ·Î À̵¿Çß´Ù.
¸¶Áö¸·À¸·Î ÇÁ·ÎÁ§Æ® Æú´õ¸¦ À©µµ¿ì Ž»ö±â¿¡¼ ¿¾îº¸¸é ¼Ö·ç¼Ç Ž»ö±â¿¡¼ º¸´Â °Í°ú °°Àº ±¸Á¶¸¦ È®ÀÎÇÒ ¼ö Àִµ¥, ÀÌÁ¦ ÆÄÀÏÀ» ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡Çϰųª Á¦¿Ü½ÃŰ´Â ÀÏÀº À©µµ¿ì Ž»ö±â¿¡¼µµ Á÷Á¢ ÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. ÆÄÀÏ °¨½ÃÀÚ¸¦ ÅëÇØ ÆÄÀÏ ½Ã½ºÅÛ¿¡¼ÀÇ º¯°æ ³»¿ëÀÌ ÇÁ·ÎÁ§Æ®¿¡ ±×´ë·Î ¹Ý¿µµÇ±â ¶§¹®ÀÌ´Ù. ¸¸¾à ÆÄÀÏ ½Ã½ºÅÛ¿¡´Â Á¸ÀçÇÏÁö¸¸ ÇÁ·ÎÁ§Æ®¿¡ Æ÷ÇÔ½ÃŰ°í ½ÍÁö ¾Ê´Ù¸é project.json ÆÄÀÏÀÇ exclude ¼³Á¤À» ÅëÇØ ƯÁ¤ ÆÄÀϰú Æú´õ¸¦ Á¦¿ÜÇÒ ¼ö ÀÖ´Ù.
ÀÌÁ¦ ASP.NET ¿¡¼µµ JSON Æ÷¸ËÀÇ Àα⸦ ½Ç°¨ÇÒ ¼ö ÀÖ´Ù. ÇÁ·ÎÁ§Æ® ¼³Á¤À» À§ÇØ µµÀÔµÈ project.json ÆÄÀÏ¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.
2. project.json
ASP.NET 5 ÇÁ·ÎÁ§Æ®´Â DNX(.NET Execution Environment) ÇÁ·ÎÁ§Æ®¶ó°íµµ ¸»ÇÒ ¼ö ÀÖ´Ù. DNX´Â ¾ÖÇø®ÄÉÀ̼ÇÀÇ ½ÇÇàÀ» À§ÇØ CLRÀ» È£½ºÆ®Çϰí Á¾¼Ó¼ºÀ» °ü¸®ÇÏ¸ç ¾ÖÇø®ÄÉÀ̼ÇÀÇ ½ÇÇàÁöÁ¡(Startup Ŭ·¡½º)À» ã¾Æ¼ ½ÇÇàÇÑ´Ù. JSON Æ÷¸ËÀÇ project.json À̶ó´Â °¡º±°í ´Ü¼øÇÑ ÆÄÀÏÀÌ ½ÇÇàȯ°æ¿¡ ÇÊ¿äÇÑ ¸ðµç Á¤º¸¸¦ Á¦°øÇÔÀ¸·Î½á DNX ÇÁ·ÎÁ§Æ®¸¦ ½±°Ô Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
ASP.NET 5 ¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇÒ ¶§, ºñÁÖ¾ó ½ºÆ©µð¿À¸¦ »ç¿ëÇÏÁö ¾Ê°í À©µµ¿ì Ä¿¸Çµå â¿¡¼ DNX ¸í·É¾î¸¦ »ç¿ëÇÒ ¼öµµ Àִµ¥, ÀÌ ¶§ project.json ÆÄÀÏÀÌ Æ÷ÇÔµÈ Æú´õ °æ·Î¸¦ ¹Ýµå½Ã ÁöÁ¤ÇØ¾ß ÇÑ´Ù. project.json ÆÄÀÏÀÌ ÇÁ·ÎÁ§Æ®¸¦ Á¤ÀÇÇÑ´Ù´Â Àǹ̸¦ ´Ù½Ã Çѹø È®ÀÎÇÒ ¼ö ÀÖ´Â ´ë¸ñÀÌ´Ù.
¾Õ¼, ±âÁ¸ÀÇ ÇÁ·ÎÁ§Æ® ÆÄÀÏ(.csproj)ÀÌ »õ ÇÁ·ÎÁ§Æ® ÆÄÀÏ(.xproj)°ú project.json ÆÄÀÏ·Î ´ëÄ¡µÇ¾ú´Ù°í Çß´Ù. ´Ü¼øÇÏ°Ô ÇÁ·ÎÁ§Æ® ÆÄÀÏÀÇ Å©±â¸¸ ºñ±³ÇØ º¸¸é 15KB¿¡¼ 1KB·Î ÁÙ¾úÀ¸´Ï ±× Â÷À̸¸ÅÀÇ ³»¿ëÀÌ project.json ÆÄÀÏ·Î ¿Å°Ü °¬´Ù°í »ý°¢ÇÒ ¼ö ÀÖ°Ú´Ù.

<±×¸² 3> ASP.NET 5 ÇÁ·ÎÁ§Æ®(»ó´Ü)¿Í ASP.NET 4.5 ÇÁ·ÎÁ§Æ®(ÇÏ´Ü)ÀÇ ¼Ó¼º ºñ±³
<±×¸² 3>Àº ASP.NET 5 ÇÁ·ÎÁ§Æ®¿Í ÀÌÀü ÇÁ·ÎÁ§Æ®ÀÇ ¼Ó¼ºÀ» ºñ±³Çϰí ÀÖ´Ù. ÀüüÀûÀÎ Ä«Å×°í¸®ÀÇ ¼öµµ 1/4·Î ÁÙ¾úÁö¸¸ ºôµå¶ó´Â ¼Ó¼º, ÇÑ °¡Áö¸¸ º¸´õ¶óµµ Å« º¯È¸¦ ´À³¥ ¼ö ÀÖ´Ù.
ÀÌ¿Í °°ÀÌ ÇÁ·ÎÁ§Æ® ¼Ó¼º â¿¡¼ »ç¶óÁø ¸ðµç ¼Ó¼ºÀ» Æ÷ÇÔÇÏ¿© project.json ÆÄÀÏ¿¡´Â ¼ö ¸¹Àº ¼³Á¤ÀÌ ÀÖÁö¸¸ ±× Áß ´ëÇ¥ÀûÀÎ ¸î °¡Áö¸¸ »ìÆìº¸±â·Î ÇÑ´Ù.
1) DEPENDENCIES
NuGet ÆÐŰÁö¸¦ °ü¸®ÇÏ´Â ¼½¼ÇÀÌ´Ù. ÆÐŰÁö ¸í°ú ¹öÀü¿¡ ´ëÇÑ ÀÎÅÚ¸®¼¾½º¸¦ Áö¿øÇÏ¸ç Æ¯Á¤ ¹öÀüÀ» ¼±ÅÃÇÒ ¼ö ÀÖ¾î Æí¸®ÇÏ´Ù. ±âÁ¸Ã³·³ ¡°Manage NuGet Packages¡¦¡± ¸Þ´º¸¦ ¼±ÅÃÇØ GUI ÅøÀ» »ç¿ëÇÒ ¼öµµ ÀÖÁö¸¸ ÅøÀ» »ç¿ëÇÏ¿© º¯°æÇÑ ³»¿ëµµ °á±¹ ¿©±â¿¡ ¾÷µ¥ÀÌÆ® µÈ´Ù. ¸ðµç º¯°æÀº ½Ç½Ã°£À¸·Î ¹Ý¿µµÇ´Âµ¥ º¯°æ ³»¿ë ÀúÀå½Ã ¼Ö·ç¼Ç Ž»ö±âÀÇ References Æú´õ¸¦ º¸°í ÀÖÀ¸¸é ÀϽÃÀûÀ¸·Î restoring ÇÏ´Â ¼ø°£À» Æ÷ÂøÇÒ ¼ö ÀÖ´Ù.
2) FRAMEWORKS
¾ÖÇø®ÄÉÀ̼ÇÀÌ ½ÇÇàµÇ´Â ´ë»ó ÇÁ·¹ÀÓ¿öÅ©¸¦ ¸í½ÃÇÏ´Â ¼½¼ÇÀÌ´Ù. ¾Æ·¡ Äڵ忡¼´Â Full CLRÀÎ .NET Framework 4.5.1°ú ASP.NET 5¿¡¼ µîÀåÇÑ CoreCLRÀ» ÇÔ²² »ç¿ëÇϵµ·Ï ¼³Á¤Çϰí ÀÖ´Ù.
<¸®½ºÆ® 2> ´ÙÁß ÇÁ·¹ÀÓ¿öÅ© ¼³Á¤
"frameworks": {
"dnx451": { },
"dnxcore50": { }
}
ºñÁÖ¾ó ½ºÆ©µð¿ÀÀÇ ÄÚµå ÆíÁýâÀº <±×¸² 4>¿Í °°ÀÌ ´ë»ó ÇÁ·¹ÀÓ¿öÅ©¸¦ ¸ðµÎ °í·ÁÇÏ¿© Ä£ÀýÇÏ°Ô ÀÎÅÚ¸®¼¾½º¸¦ Áö¿øÇÑ´Ù.

<±×¸² 4> ºñÁÖ¾ó ½ºÆ©µð¿ÀÀÇ ´ÙÁß ÇÁ·¹ÀÓ¿öÅ© ÀÎÅÚ¸®¼¾½º Áö¿ø
ÇÑÂÊ ÇÁ·¹ÀÓ¿öÅ©¿¡¼¸¸ Á¦°øµÇ´Â ¸Þ¼µå¸¦ ¾î¿ ¼ö ¾øÀÌ »ç¿ëÇØ¾ß ÇÏ´Â »óȲ¿¡¼´Â <¸®½ºÆ® 3>°ú °°Àº ±¸¹®À» »ç¿ëÇØ Á¶°ÇºÎ ÄÄÆÄÀÏ ÇÒ ¼ö ÀÖ´Ù.
<¸®½ºÆ® 3> Á¶°ÇºÎ ÄÄÆÄÀÏ ±¸¹®
#if DNX451
Debug.Print("This method is not avaliable in .NET Core.");
#endif
3) COMMANDS
¸í·É¾î â¿¡¼ dnx¸¦ »ç¿ëÇÏ¿© ¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇÒ ¶§ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸í·É¾î¸¦ ÁöÁ¤ÇÏ´Â ¼½¼ÇÀ̸ç dnx¸¦ »ç¿ëÇÏ´Â ¹®¹ýÀº ¾Æ·¡¿Í °°´Ù.
dnx < project.json Æú´õ °æ·Î> < command>
project.json ÆÄÀÏ¿¡¼ ¸í·É¾î¸¦ <¸®½ºÆ® 4>¿Í °°ÀÌ ±¸¼ºÇÑ ÈÄ, ¸í·É¾î âÀ» ¶ç¿ö ÇÁ·ÎÁ§Æ®°¡ À§Ä¡ÇÑ Æú´õ·Î À̵¿Çß´Ù°í °¡Á¤ÇÏÀÚ.
<¸®½ºÆ® 4> project.json ÆÄÀÏÀÇ ¸í·É¾î ¼³Á¤
"commands": {
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000",
"kestrel" : "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
}
À©µµ¿ì ȯ°æÀ̶ó¸é ¡°dnx . web¡±À» ½ÇÇàÇØ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¼¿ÇÁ È£½ºÆÃÇÒ ¼ö ÀÖ°í, ¸Æ ¶Ç´Â ¸®´ª½º ȯ°æÀ̶ó¸é ¡°dnx . kestrel¡±À» ½ÇÇàÇÏ¿© kestrelÀ̶ó´Â HTTP ¼¹ö¸¦ »ç¿ëÇÑ ¼¿ÇÁ È£½ºÆÃÀÌ °¡´ÉÇÏ´Ù.
¾ÖÇø®ÄÉÀ̼ÇÀÇ ´ë»ó ÇÁ·¹ÀÓ¿öÅ© ¼³Á¤Àº ÀÌÀü ÇÁ·ÎÁ§Æ®¶ó¸é web.config ÆÄÀÏ¿¡ ¼±¾ðµÇ¾î ÀÖ¾ú´Ù. »õ·Î¿î ÇÁ·ÎÁ§Æ® ¼³Á¤ ÆÄÀÏÀÇ µîÀåÀ¸·Î web.config ÆÄÀÏ¿¡ »ý±ä º¯È¸¦ ¾Ë¾Æº¸ÀÚ.
3. »ç¶óÁø web.config
ASP.NET ÇÁ·¹ÀÓ¿öÅ©ÀÇ º¯È¿¡ µû¶ó web.configÀÇ ¼³Á¤ ³»¿ëµµ Á¶±Ý¾¿ º¯ÇØ ¿ÔÁö¸¸ °³¹ßÀڵ鿡°Ô web.config ÆÄÀÏÀÇ Ã¹ ¹øÂ° ¿ëµµ´Â appSettings ¼½¼Ç¿¡¼ ¾ÖÇø®ÄÉÀ̼ǿ¡ ÇÊ¿äÇÑ Á¤º¸¸¦ °ü¸®ÇÏ´Â °ÍÀ̾ú´Ù. ¶ÇÇÑ, web.config ÆÄÀÏÀº ÇÁ·ÎÁ§Æ® ¼öÁØ¿¡¼ÀÇ ´ë»ó ÇÁ·¹ÀÓ¿öÅ© ¹öÀü, Á¾¼Ó ¾î¼Àºí¸® ¸ñ·Ï µîÀ» °ü¸®Çϰí ÀÖ¾î ¿©·¯ ³»¿ëÀ» ¸ðµÎ Æ÷ÇÔÇÏ´Â ´ÜÀÏ ¼³Á¤ ÆÄÀÏ·Î »ç¿ëµÇ¾î ¿Ô´Ù.
ASP.NET 5¿Í ÇÔ²² web.config ÆÄÀÏ¿¡ ÀÖ´ø ÇÁ·ÎÁ§Æ® °ü·Ã ¼³Á¤Àº project.json ÆÄÀÏ·Î À̵¿ÇÏ¿´°í, °³¹ßÀÚ¸¦ À§Çؼ´Â Key-ValueÀÇ ½ÖÀ» °ü¸®ÇÏ´Â ±ò²ûÇÑ ¼³Á¤(configuration) ¸ðµ¨ÀÌ »õ·Ó°Ô µµÀԵǾú´Ù. ÀÌ·¸°Ô web.config ÆÄÀÏÀº ±× ¿ªÇÒÀ» ³ª´²ÁÖ°í ÀÌÁ¦ ¿ª»çÀÇ µÚ¾È±æ·Î »ç¶óÁ³´Ù.
»õ ¼³Á¤ ¸ðµ¨Àº ¿ÜºÎ ¼Ò½º·Î¼ XML, JSON, INI, ¼¼ °¡ÁöÀÇ ÆÄÀÏ ¾ç½ÄÀ» ±âº»ÀûÀ¸·Î Áö¿øÇϰí Àθ޸ð¸®(in-memory) ¹æ½Ä°ú »ç¿ëÀÚ Á¤ÀÇ ¼³Á¤ Á¦°øÀÚ(configuration provider)µµ ÀÛ¼ºÇÒ ¼ö ÀÖ´Â À¯¿¬ÇÑ ¸ðµ¨ÀÌ´Ù. º¸´Ù Áß¿äÇÑ º¯È·Î, ¿î¿µÈ¯°æ ÀÚü¿¡ Á¤ÀÇµÈ È¯°æ º¯¼ö(environment variables)¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾î ÇÁ·ÎÁ§Æ® ¿ÜºÎ¿¡¼µµ ¼³Á¤ÀÌ °¡´ÉÇØ Á³´Ù. ¿ÜºÎ ¼Ò½º¿¡ ÀÇÁ¸ÇÏÁö ¾Ê´Â Àθ޸𸮠¹æ½ÄÀÇ ¼³Á¤Àº <¸®½ºÆ® 5>¿Í °°´Ù.
<¸®½ºÆ® 5> Àθ޸𸮠¹æ½ÄÀÇ ¼³Á¤
var config = new Configuration();
config.Add(new MemoryConfigurationSource());
config.Set("somekey", "somevalue");
string setting = config.Get("somekey); // returns "somevalue"
string setting2 = config["somekey"]; // also returns "somevalue"
ÆÄÀÏÀ» »ç¿ëÇÏ´Â ¹æ½ÄÀº À¥»çÀÌÆ®(Web Site) ÅÛÇø´¿¡ ÀÇÇØ »ý¼ºµÇ´Â config.json ÆÄÀÏÀÌ ÁÁÀº ¿¹´Ù.
<¸®½ºÆ® 6> config.json ÆÄÀÏ. JSON Æ÷¸ËÀÇ ´ÙÃþ ±¸Á¶°¡ ÀÐ±â ÆíÇÏ´Ù.
// config.json ÆÄÀÏ
{
"AppSettings": {
"SiteTitle": "ConfigDemo"
},
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=(localdb)\mssqllocaldb;Database=aspnet5-ConfigDemo;"
}
}
}
ÀÌ·¸°Ô ¼³Á¤ÇÑ °ªµéÀº ¾ÖÇø®ÄÉÀ̼ÇÀÌ ½ÃÀ۵Ǵ ½ÃÁ¡¿¡ ·ÎµåµÇ´Âµ¥ ¿©·¯ ¼Ò½º·Î ±¸¼ºÇÒ ¼ö Àֱ⠶§¹®¿¡ Ãß°¡ÇÏ´Â ¼ø¼¿¡ µû¶ó ¿ì¼±¼øÀ§°¡ Á¤ÇØÁö°í, ³ªÁß¿¡ Ãß°¡µÇ´Â ¼Ò½º°¡ ³ôÀº ¿ì¼±¼øÀ§¸¦ °®´Â´Ù.
<¸®½ºÆ® 7> ¿ÜºÎ ÆÄÀÏ(config.json)°ú ȯ°æ º¯¼ö·Î ±¸¼ºÇÑ ¿¹
var configFluent = new Configuration()
.AddJsonFile("config.json")
.AddEnvironmentVariables();
Configuration Ŭ·¡½º´Â ¿©·¯ ¼Ò½º¿¡ ´ëÇÑ Ä÷º¼ÇÀÌ´Ù. <¸®½ºÆ® 7>ÀÇ ¿¹´Â, config.json¿¡ Á¤ÀÇµÈ Å° °ªÀÌ È¯°æ º¯¼ö¿¡µµ Á¤ÀǵǾî ÀÖÀ» °æ¿ì, ȯ°æ º¯¼öÀÇ Å° °ªÀÌ ÃÖÁ¾ÀûÀ¸·Î »ç¿ëµÈ´Ù. <¸®½ºÆ® 8>¿¡¼´Â ȯ°æ º¯¼ö¸¦ Ȱ¿ëÇÏ¿© web.configÀÇ transform°ú À¯»çÇÑ ±â´ÉÀ» ±¸ÇöÇϰí ÀÖ´Ù.
<¸®½ºÆ® 8> ȯ°æ º¯¼ö¸¦ Ȱ¿ëÇØ web.configÀÇ transform°ú À¯»çÇÑ ±â´É ±¸Çö
var configuration = new Configuration()
.AddJsonFile("config.json")
.AddJsonFile($"config.{env.EnvironmentName}.json", optional: true);
<¸®½ºÆ® 8>ÀÇ ¸¶Áö¸· ÁÙÀ» º¸¸é C# 6ÀÇ »õ·Î¿î ¹®ÀÚ¿ Æ÷¸ÅÆÃ ±â´ÉÀ» »ç¿ëÇØ ÆÄÀϸíÀ» Ç¥ÇöÇϰí Àִµ¥ env.EnvironmentName °ªÀÌ production À̶ó¸é config.production.json ÆÄÀÏÀ» ·Îµå ÇÒ °ÍÀÌ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀ» ¹èÆ÷ÇÒ ¼¹öÀÇ È¯°æ º¯¼ö¸¦ °í·ÁÇÑ ¼³Á¤ ÆÄÀÏÀ» ¸¸µé ¼ö ÀÖ¾î ¼¹ö Æ¯ÈµÈ ¼³Á¤ÀÌ °¡´ÉÇÑ °ÍÀÌ´Ù.
4. Task Runner
ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ ºñ¾àÀûÀÎ ¹ßÀüÀ¸·Î Çö´ëÀÇ À¥ °³¹ßÀº Ŭ¶óÀÌ¾ðÆ® ´Ü¿¡¼ ´Ù¾çÇÑ ÀÏÀ» È¿°úÀûÀ¸·Î ¼öÇàÇϰí ÀÖ´Ù. ¸ð´ø À¥À» ÀÛ¼ºÇÑ´Ù°í ÇÒ ¶§ ¾î¶² ÀϵéÀÌ ÇÊ¿äÇѰ¡.
-LESS ¶Ç´Â SASS ÆÄÀÏÀ» CSS·Î ÄÄÆÄÀÏÇϱâ
-CoffeeScript ¶Ç´Â TypeScript¸¦ ÀÚ¹Ù½ºÅ©¸³Æ® ÆÄÀÏ·Î ÄÄÆÄÀÏ Çϱâ
-ÀÚ¹Ù½ºÅ©¸³Æ® ÆÄÀϵéÀ» ¹°í(bundle) Ãà¼Ò(minify)Çϱâ
-ÀÚ¹Ù½ºÅ©¸³Æ®°¡ ÄÚµù ±ÔÄ¢À» µû¸£´ÂÁö JSHint Åø·Î °Ë»çÇϱâ
¾Æ¸¶ ¹Ú½º ¼Ó ÀÛ¾÷µéÀÌ À¥ °³¹ßÀÇ ÀϺΰ¡ µÇ¾î ¾ÖÇø®ÄÉÀ̼Ǹ¶´Ù ¹Ýº¹ÀûÀ¸·Î ¼öÇàµÉ °ÍÀÌ´Ù. ÀÌ·± ÀÏ·ÃÀÇ ÀÛ¾÷µéÀ» ÀÚµ¿È Çϱâ À§ÇØ Å½ºÅ© ·±³Ê(ÀÌÇÏ task runner)¶ó´Â ÇϳªÀÇ ¾ÛÀ» »ç¿ëÇϴµ¥ ºñÁÖ¾ó ½ºÆ©µð¿À 2015(Visual Studio 2015)´Â task runner·Î¼ °¡Àå Àαâ ÀÖ´Â ÀÚ¹Ù½ºÅ©¸³Æ® ±â¹ÝÀÇ Gulp¿Í Grunt¸¦ Áö¿øÇÑ´Ù.
Gulp°¡ ºñ±³Àû ÃÖ±Ù¿¡ °³¹ßµÇ¾ú°í Çö´ëÀûÀÎ ¹®¹ý°ú µð½ºÅ© I/O°¡ ¾Æ´Ñ ½ºÆ®¸²À» »ç¿ëÇÑ ºü¸¥ ¼º´É ¶§¹®ÀÎÁö ASP.NET 5 Web Site ÅÛÇø´¿¡ ÀÇÇØ ±âº»ÀûÀ¸·Î »ç¿ëµÈ´Ù. Gulp´Â ³ëµå ÆÐŰÁö·Î¼ NPM(Node.js Package Manger) ¼³Á¤ ÆÄÀÏÀÎ package.json ¿¡ ÀÇÇØ ¼³Ä¡µÈ´Ù. ±×¸®°í, ÀÚµ¿È ÀÛ¾÷(task)Àº gulpfile.js ÆÄÀÏ¿¡ ÀÛ¼ºÇÑ´Ù. <¸®½ºÆ® 9>´Â Assets Æú´õ ÇÏÀ§ÀÇ ¸ðµç ÀÚ¹Ù½ºÅ©¸³Æ® ÆÄÀÏÀ» wwwroot/js Æú´õ·Î º¹»çÇÏ´Â ¿¹Á¦´Ù.
<¸®½ºÆ® 9> Assets Æú´õ ÇÏÀ§ÀÇ ¸ðµç ÀÚ¹Ù½ºÅ©¸³Æ® ÆÄÀÏÀ» wwwroot/js Æú´õ·Î º¹»ç
var gulp = require('gulp');
var paths = {
src: "./Assets/**/*.js",
dest: "./wwwroot/js/"
}
gulp.task('default', function () { // default ´Â ÀÛ¾÷¸í
return gulp.src(paths.src) // Returns a stream
.pipe(gulp.dest(paths.dest)) // Pipes the stream somewhere
});
ÀÌ·¸°Ô default¶ó°í Á¤ÀÇÇÑ ÀÛ¾÷À» Task Runner Ž»ö±â¸¦ ÅëÇØ ½ÇÇàÇÒ ¼öµµ ÀÖÁö¸¸ <±×¸² 5>¿¡¼Ã³·³ ÀϹÝÀûÀ¸·Î ºôµå À̺¥Æ®¿¡ ¹ÙÀεùÇÏ¿© ÀÚµ¿À¸·Î ¼öÇàÇÏ°Ô ÇÑ´Ù.

<±×¸² 5> default ÀÛ¾÷À» ÇÁ·ÎÁ§Æ® ºôµå ÈÄ¿¡ ¼öÇàÇϵµ·Ï ¼³Á¤
Task runnerÀÇ Áö¿øÀÌ ²À ÇÊ¿äÇÑ Bower¶ó´Â ¶Ç ´Ù¸¥ ³ëµå ÆÐŰÁö°¡ ÀÖ´Ù. Bower´Â Git À§¿¡¼ µ¿ÀÛÇϸç jquery, bootstrap, angular¸¦ Æ÷ÇÔÇÑ 35,000 ÀÌ»óÀÇ ÆÐŰÁö¸¦ °ü¸®ÇÏ´Â À¥ ÆÐŰÁö ¸Å´ÏÀú·Î ¾Ë·ÁÁ® Àִµ¥, »ýŰèÀÇ ±Ô¸ð¿Í task runner¿ÍÀÇ ÁÁÀº ±ÃÇÕ ¶§¹®¿¡ Ŭ¶óÀÌ¾ðÆ® ´Ü¿¡¼ NuGet ÆÐŰÁöº¸´Ù Bower°¡ ÃßõµÈ´Ù. Bower.json ÆÄÀÏ¿¡ µî·ÏµÈ Ŭ¶óÀÌ¾ðÆ® ¶óÀ̺귯¸®µéÀº bower_components Æú´õ¿¡ ´Ù¿î·Îµå µÇ°í task runner¸¦ ÀÌ¿ëÇØ wwwroot Æú´õ·Î º¹»çÇÏ´Â °ÍÀÌ ASP.NET 5 ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÀüÇüÀûÀÎ °ü¸® ¹æ½ÄÀÌ´Ù.
´ÙÀ½ ¿¬Àç¿¡¼´Â MVC¿Í Web APIÀÇ ÅëÇÕÀ» Æ÷ÇÔÇÑ °³¹ßÀÇ º¯È¿¡ ´ëÇØ ¾Ë¾Æº¸µµ·Ï ÇÑ´Ù.
Ãâó : ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î 8¿ùÈ£
Á¦°ø : µ¥ÀÌÅÍ Àü¹®°¡ Áö½ÄÆ÷ÅÐ DBguide.net