dotnet watch를 활용한 ASP.NET Core 응용 프로그램 개발
- 본 번역문서의 원문은 Developing ASP.NET Core applications using dotnet watch docs.asp.net 입니다.
- 본 번역문서는 dotnet watch를 활용한 ASP.NET Core 응용 프로그램 개발 www.taeyo.net 에서도 함께 제공됩니다.
소개
본 자습서에서 살펴볼 dotnet watch
는 소스 파일이 변경될 때 dotnet
명령을 실행하는, 개발 과정에서 사용할 수 있는 도구입니다.
이 도구를 활용하면 코드가 변경될 때 컴파일을 하거나, 테스트를 수행하거나, 게시를 할 수 있습니다.
본문에서는 미리 만들어진 두 숫자의 곱과 합을 계산하는 Web API 응용 프로그램을 이용해서 dotnet watch
의 사용 사례들을 살펴봅니다.
이 예제 응용 프로그램에는 본문의 한 과정으로 수정하게 될 의도적인 버그가 포함되어 있습니다.
시작하기
먼저 예제 응용 프로그램을 다운로드 받습니다.
여기에는 웹 응용 프로그램인 WebApp
프로젝트와 이 웹 응용 프로그램의 단위 테스트인 WebAppTests
프로젝트가 포함되어 있습니다.
명령 프롬프트에서 예제 응용 프로그램이 다운로드 된 폴더를 열고 다음 명령들을 수행합니다:
dotnet restore
cd WebApp
dotnet run
역주
본 자습서의 내용을 직접 따라해보려면 명령 프롬프트에서 dotnet --version
명령을 입력했을 때 1.0.0-preview2-003121
버전이 출력되어야 합니다 (2016년 7월 현재).
Preview1 버전이 설치된 상태에서는 이 명령들을 실행하면 첫 번째 명령에서부터 오류가 발생합니다.
Visual Studio 2015를 사용하시는 분들은 Visual Studio 2015 Update 3와 .NET Core 1.0 for Visual Studio를 설치해야 합니다.
만약 .NET Core 1.0 for Visual Studio의 설치 도중 오류가 발생하면서 설치가 중단된다면, SKIP_VSU_CHECK=1
옵션을 추가해서 설치 프로그램을 실행하시면 됩니다.
그러면 응용 프로그램이 현재 실행 중이며 요청을 대기하고 있음을 의미하는 다음과 같은 콘솔 출력 메시지가 나타날 것입니다:
$ dotnet run
Project WebApp (.NETCoreApp,Version=v1.0) will be compiled because inputs were modified
Compiling WebApp for .NETCoreApp,Version=v1.0
Compilation succeeded.
0 Warning(s)
0 Error(s)
Time elapsed 00:00:02.6049991
Hosting environment: Production
Content root path: /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
이 상태로 웹 브라우저에서 http://localhost:5000/api/math/sum?a=4&b=5
URL로 이동해보면 결과 값으로 9
가 출력되는 것을 확인할 수 있습니다.
그러나 다시 http://localhost:5000/api/math/product?a=4&b=5
URL로 이동해보면 두 값을 곱한 결과 값으로 기대하고 있는 20
대신, 잘못된 값인 9
가 계속 나타납니다.
이 문제점을 수정해보겠습니다.
프로젝트에 dotnet watch
추가하기
-
WebApp/project.json 파일을 열고
tools
섹션에 다음 예제 코드와 같이Microsoft.DotNet.Watcher.Tools
줄을 추가합니다:
"tools": {
"Microsoft.DotNet.Watcher.Tools": "1.0.0-preview2-final"
},
-
그리고
dotnet restore
를 실행합니다.
그러면 콘솔에 다음과 같은 메시지들이 출력될 것입니다:
log : Restoring packages for /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp/project.json...
log : Restoring packages for tool 'Microsoft.DotNet.Watcher.Tools' in /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp/project.json...
log : Installing Microsoft.DotNet.Watcher.Core 1.0.0-preview2-final.
log : Installing Microsoft.DotNet.Watcher.Tools 1.0.0-preview2-final.
dotnet watch
를 이용하여 dotnet
명령 실행하기
모든 dotnet
명령은 dotnet watch
를 이용해서 실행할 수 있습니다.
다음 표는 그 적용 사례를 보여줍니다:
명령 | dotnet watch를 이용한 명령 |
---|---|
dotnet run |
dotnet watch run |
dotnet run -f net451 |
dotnet watch run -f net451 |
dotnet run -f net451 -- --arg1 |
dotnet watch run -f net451 -- --arg1 |
dotnet test |
dotnet watch test |
dotnet watch
를 이용해서 WebApp
프로젝트를 실행하려면 WebApp
폴더에서 dotnet watch run
을 실행하면 됩니다.
그러면 다음과 같이 현재 dotnet watch
가 코드 파일들을 감시하고 있음을 알려주는 콘솔 출력 메시지가 나타날 것입니다:
user$ dotnet watch run
[DotNetWatcher] info: Running dotnet with the following arguments: run
[DotNetWatcher] info: dotnet process id: 39746
Project WebApp (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Hosting environment: Production
Content root path: /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
dotnet watch
가 적용된 상태에서 코드 변경하기
이제 dotnet watch
가 의도하는 대로 동작하는지 확인해보도록 하겠습니다.
그 확인을 위해서 이전 절에서 발견한, 두 숫자를 곱한 결과를 계산하는 과정에 존재하는 버그를 수정해보겠습니다.
이번에는 WebApp/Controllers/MathController.cs 파일을 엽니다.
이 파일의 코드에는 의도적인 버그가 존재합니다.
public static int Product(int a, int b)
{
// We have an intentional bug here
// + should be *
return a + b;
}
이 코드의 a + b
구문을 a * b
로 변경해서 버그를 수정합니다.
그리고 파일을 저장합니다.
그러면 파일이 저장되는 순간, dotnet watch
가 파일 변경을 감지해서 응용 프로그램을 재시작함을 알려주는 다음과 같은 콘솔 출력 메시지가 나타날 것입니다:
[DotNetWatcher] info: File changed: /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp/Controllers/MathController.cs
[DotNetWatcher] info: Running dotnet with the following arguments: run
[DotNetWatcher] info: dotnet process id: 39940
Project WebApp (.NETCoreApp,Version=v1.0) will be compiled because inputs were modified
Compiling WebApp for .NETCoreApp,Version=v1.0
Compilation succeeded.
0 Warning(s)
0 Error(s)
Time elapsed 00:00:03.3312829
Hosting environment: Production
Content root path: /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
이제 웹 브라우저에 다시 http://localhost:5000/api/math/product?a=4&b=5
URL을 입력해서 올바른 결과가 반환되는지 확인합니다.
dotnet watch
를 이용해서 테스트 실행하기
파일 감시자(File Watcher)를 이용해서 test
및 publish
같은 다른 dotnet
명령들도 실행할 수 있습니다.
-
WebAppTests
폴더를 엽니다. 이 프로젝트의 project.json 파일에는 이미dotnet watch
가 추가되어 있습니다. -
dotnet watch test
를 실행합니다.
이전 절의 지시대로 MathController
에 존재하는 버그를 수정했다면 다음과 같은 출력 메시지가 나타날 것입니다.
반면 버그가 그대로 남아있다면 실패한 테스트를 보게 될 것입니다:
WebAppTests user$ dotnet watch test
[DotNetWatcher] info: Running dotnet with the following arguments: test
[DotNetWatcher] info: dotnet process id: 40193
Project WebApp (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Project WebAppTests (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
xUnit.net .NET CLI test runner (64-bit .NET Core osx.10.11-x64)
Discovering: WebAppTests
Discovered: WebAppTests
Starting: WebAppTests
Finished: WebAppTests
=== TEST EXECUTION SUMMARY ===
WebAppTests Total: 2, Errors: 0, Failed: 0, Skipped: 0, Time: 0.259s
SUMMARY: Total: 1 targets, Passed: 1, Failed: 0.
[DotNetWatcher] info: dotnet exit code: 0
[DotNetWatcher] info: Waiting for a file to change before restarting dotnet...
모든 테스트들이 실행되고 나면, 감시자가 dotnet test
를 다시 수행해야 하는지를 알기 위해서 파일 변경 여부를 감시하고 있음을 알려줍니다.
- WebApp/Controllers/MathController.cs 컨트롤러 파일을 열고 일부 코드를 변경해봅니다. 아직 곱하기 버그를 수정하지 않았다면 지급 수정하면 됩니다. 그리고 다시 파일을 저장합니다.
그러면 dotnet watch
가 파일 변경을 감지하고 테스트를 다시 실행합니다.
그리고 다음과 같은 콘솔 출력 메시지가 나타날 것입니다:
[DotNetWatcher] info: File changed: /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp/Controllers/MathController.cs
[DotNetWatcher] info: Running dotnet with the following arguments: test
[DotNetWatcher] info: dotnet process id: 40233
Project WebApp (.NETCoreApp,Version=v1.0) will be compiled because inputs were modified
Compiling WebApp for .NETCoreApp,Version=v1.0
Compilation succeeded.
0 Warning(s)
0 Error(s)
Time elapsed 00:00:03.2127590
Project WebAppTests (.NETCoreApp,Version=v1.0) will be compiled because dependencies changed
Compiling WebAppTests for .NETCoreApp,Version=v1.0
Compilation succeeded.
0 Warning(s)
0 Error(s)
Time elapsed 00:00:02.1204052
xUnit.net .NET CLI test runner (64-bit .NET Core osx.10.11-x64)
Discovering: WebAppTests
Discovered: WebAppTests
Starting: WebAppTests
Finished: WebAppTests
=== TEST EXECUTION SUMMARY ===
WebAppTests Total: 2, Errors: 0, Failed: 0, Skipped: 0, Time: 0.260s
SUMMARY: Total: 1 targets, Passed: 1, Failed: 0.
[DotNetWatcher] info: dotnet exit code: 0
[DotNetWatcher] info: Waiting for a file to change before restarting dotnet...
- ASP.NET Core MVC와 Visual Studio를 이용한 첫 번째 Web API 구현 2016-07-22 08:00
- Visual Studio로 Azure에 ASP.NET Core 웹 응용 프로그램 배포하기 2016-07-25 08:00
- dotnet watch를 활용한 ASP.NET Core 응용 프로그램 개발 2016-07-29 08:00
- 나노 서버에 ASP.NET Core 응용 프로그램 배포하기 2016-08-01 08:00
- Swagger를 이용한 ASP.NET Web API 도움말 페이지 만들기 2016-09-13 08:00