Windows가 .NET Core를 오픈소스로 낼 때만해도 젊은 힙스터인척 하는 할배를 보는 것 같았다.
그런데 이번에 내는 .NET 5.0 은 진짜 젊음의 샘물 먹고 환생한 MS를 볼 수 있었다.
.NET 5.0, 도대체 뭐가 달라질까?
.NET 4.0이전 버전에서는 크로스 플랫폼을 지원하지 않았던 반면 .NET 5.0 Release 후에는 .NET 5.0 플랫폼 하나로만 관리가 될 것입니다.
1.1 Target
Windows, Linux, macOS, iOS, Android, tvOS, watchOS, WebAssembly 등
즉, .NET 5는 .NET Core의 다음 단계로 볼 수 있습니다.
빌드하는 앱과 상관없이 같은 코드와 프로젝트 파일들이 생성될 것이며 사용자는 각 앱마다 같은 런타입, API, 언어로 접근이 가능합니다. Microsoft사는 .NET Core가 크로스 플랫폼을 지원하던 장점을 .NET 5.0에 접목하였습니다.
2 .NET 5.0 Orientation
.NET 5.0 의 지향점은 다음과 같습니다.
2.1 Open source and community-oriented on GitHub.
.NET Core가 깃허브에서 사용이 가능했던 것처럼 .NET 5.0도 투명한 개발 프로세스를 보여주고, 개발자들이 적극적으로 참여할 수 있도록 할 것입니다.
2.2 Cross-platform implementation.
.NET Core에서처럼 크로스 플랫폼을 지원합니다. 기존에 .NET Framework에서는 지원하지 않았던 크로스 플랫폼을 .NET 5.0서부터는 지원합니다.
2.3 Support for leveraging platform-specific capabilities, such as Windows Forms and WPF on Windows and the native bindings to each native platform from Xamarin.
Windows의 Windows Forms 및 WPF와 같은 플랫폼별 기능도 지원하는 동시에 Xamarin 같은 각 기본 플랫폼에 대한 네이티브 바인딩을 지원합니다. 2.2에서 말한 것처럼 크로스플랫폼을 지원한다는 말의 연장선입니다.
2.4 Visual Studio, Visual Studio for Mac, and Visual Studio Code integration.
Windows용 Visual Studio와 macOS용 Visual Studio, Visual Studio Code를 통합합니다.
3 NEW FEATURES
· JIT 기반 관리 런타임을 구축하였습니다. 이는 장기 실행 클라우드 및 클라이언트 시나리오에 적합합니다. 다만 iOS 및 클라이언트측 Blazor에서는 AOT 네이티브 컴파일이 필요하기 때문에 예외입니다.
Mono AOT 컴파일은
1. 100% AOT 컴파일이 필요한 솔루션
2. 대부분의 코드가 AOT로 컴파일이 되지만 제네릭과 같이 JIT 또는 인터프리터를 사용할 수 있고, AOT에 친숙하지 않은 코드 패턴에 사용되는 솔루션입니다.
이 두가지를 모두 지원합니다. Mono AOT 컴파일의 장점을 살려 .NET 5.0 에서는 1번과 2번의 AOT 컴파일 방식을 모두 지원할 것입니다. AOT 컴파일은 빠른 시작과 낮은 크기를 요구하는 애플리케이션을 위한 옵션으로 만들어질 예정입니다.
JIT 컴파일
실행 시점에서 인터프리트 방식으로 기계어 코드를 생성하면서 그 코드를 캐싱하는 컴파일 방법을 말합니다. 같은 함수가 여러 번 호출될 때 매번 기계어 코드를 생성하는 것을 방지하여 프로그램의 성능을 높입니다.
AOT 네이티브 컴파일
소스 코드를 컴파일 후 실행합니다. 컴파일을 진행한 환경의 OS와 CPU에 맞게 빌드되는 방법을 말합니다.
· 최신 버전의 C#을 사용할 수 있습니다. C# 9 또한 새로 릴리즈됩니다.
· .NET Core에 대한 ClickOnce도 지원합니다..
· .NET Core 디자이너 폼을 지원합니다.
·
4 Release Schedule
2020년 11월에 .NET 5를 출시할 예정이고 매년 11월에 .NET의 메이저 버전을 출시할 예정입니다.
2020년 11월에 출시될 .NET 5는 GA버전이고 2021년 11월에 출시될 .NET은 GA버전입니다. GA 버전을 먼저 출시하고 그 뒤 안정 버전을 내는 전략입니다.
기능상 다음버전은 .NET 7.0으로 짝수버전은 이전에 릴리즈된 버전의 안정 버전, 홀수 버전은 새로운 버전으로 내는 전략을 취했습니다.
.NET Framework는 v4.8이 마지막 버전이 될 것입니다. 보안패치만 제공이 됩니다.
GA 버전
필요한 모든 기능 개발이 완료되었고 사용을 할 수 있는 버전입니다.
LTS 버전
안정적인 릴리즈입니다. 모든 검증과 테스트를 통과한 릴리즈 후보로, 장기간 유지가 되며 장기간 지원을 합니다.
5 Blazor
별도의 ActiveX 컨트롤 없이 브라우저의 처리 능력에 기대어 실행됩니다. UI를 만들기 위하여 복잡한 IDE나 디자인 도구를 사용하지 않고 HTML 태그와 C# 코드만을 이용합니다. ASP.NET MVC의 Razor View 문법을 기반으로 하기 때문에 View에서 직접 조건문이나 반복문을 즉석에서 사용하거나 클래스와 변수 정의를 바로 할 수 있습니다. Web Assembly를 사용하기 때문에 데스크톱 뿐 아니라 모바일도 지원합니다.
Web Assembly
웹 어셈블리는 자바스크립트와 같이 브라우저가 실행시킬 수 있는 또다른 웹 표준입니다. 자바 스크립트는 브라우저에 내장된 일종의 인터프리터로 돌아가기 때문에 성능이 좋지 않은 반면, 웹 어셈블리는 네이티브 프로그램처럼 동작하기 때문에 자바스크립트보다 성능이 더 좋습니다. 따라서 3D게임이나 가상/증강현실, 영상처리 등 네이티브 성능을 필요로 하는 때에 사용이 됩니다.
5.1 테스트 방법
1. .NET 5 Preview 8.0 다운로드
https://dotnet.microsoft.com/download/dotnet/5.0
문서를 작성하는 2020년 9월 15일 기준으로 .NET 5는 Visual Studio 2019 v16.7 을 사용하여야 합니다. Visual Studio Code에서도 사용이 가능합니다만 C# 확장 프로그램을 최신으로 업데이트해야 합니다.
2. 커맨드 창에서 다음과 같이 .NET Core CLI를 사용하여 프로젝트를 생성합니다.
dotnet new blazorwasm --hosted -o SecondBlazor
3. Visual Studio Code를 이용하여 해당 폴더를 엽니다.
4. Client 폴더로 이동해 다음 명령어를 입력합니다.
dotnet run
5. 브라우저에서 localhost:5000 으로 이동하여 Blazor로 만들어진 화면을 확인합니다.
5.2 Blazor를 이용한 간단한 ToDoList
Todo.razor
@page "/todo"
<h3>Todo (@todos.Count(todo => !todo.IsDone))</h3>
<ul class="todoList">
@foreach (var todo in todos)
{
<li>
<input type="checkbox" @bind="todo.IsDone" />
<label class="@getFontColor(@todo.IsDone)">@todo.Title</label>
</li>
}
</ul>
<input placeholder="Something Todo" @bind="newTodo"/>
<button @onclick="AddTodo">Add Todo</button>
@code
{
private IList<TodoItem> todos = new List<TodoItem>();
private string newTodo;
private void AddTodo()
{
if(!string.IsNullOrWhiteSpace(newTodo))
{
todos.Add(new TodoItem{Title = newTodo});
newTodo = string.Empty;
}
}
private String getFontColor(bool isDone)
{
if(!isDone)
{
return String.Empty;
}
else
{
return "font-gray";
}
}
}
Todo.razor.css
.font-gray
{
color:gray;
}
.todoList
{
font-size: 18pt;
}
5.2.1 장점
1. 다운로드 받는 플러그인이나 라이브러리 등이 없어서 부담이 없습니다.
2. Web Assembly를 이용하므로 모바일 브라우저에서도 이용이 가능하다.
3. 실시간 랜더링이 가능합니다. hot loading이 되려면 watcher를 사용해야해서 매번 dotnet run으로 빌드하여서 이 ‘실시간 랜더링’에 대해서는 더 찾아봐야 할 것 같습니다.
5.2.2 단점
1. 블레이저 자체의 에코시스템이 존재하지 않으며 특히 Tool 에코시스템이 현저히 부족합니다. .NET 5의 등장으로 개선될 것으로 보입니다. 그러나 C#에 대한 지식과 .NET Core에 대한 지식이 있으면 사용이 용이하고 NuGet 패키지를 사용할 수 있는 등 .NET 에코시스템을 활용할 수 있으므로 Tool에 대한 지식만 공유되면 차차 나아질 것으로 보입니다.
블레이저에 대한 유용한 리소스 모음 (https://github.com/AdrienTorris/awesome-blazor)
2. Vue.js의 경우 클래스를 변경해서 스타일을 적용하고 싶을 경우 :class=”{삼항연산자}” 로 바로 클래스 바인딩이 가능했지만, Blazor에서는 getFontColor 라는 메소드를 바인딩하여 메소드 내부에서 클래스에 해당하는 String을 던져주도록 할 수밖에 없었습니다.
3. HTML5 표준에서 제공하는 HTML 태그 중에 <s>태그를 사용하고 싶었으나 Blazor에서 인식하지 못하였습니다. <s>태그는 글자의 취소선 예시 을 표시해주는 HTML5 태그이지만 Blazor에서 사용할 수 없었습니다.
5.2.3 Vue.js의 장점
1. 유연성 – jQuery같은 기존 자바스크립트 라이브러리 사용이 가능합니다. 플러그인으로 오픈소스 활용이 가능하며 곧 출시되는 Vue.js 3.0에서는 클래스 기반 코딩이 가능합니다.
베타 버전 : https://joshua1988.github.io/vue-camp/vue3.html#note-taking
2. 쉬운 접근성 – 템플릿 기반의 코딩으로 디자이너와 협업이 용이
3. 풍부한 에코시스템 – Vue.js에 대한 관심도가 급증하면서 커뮤니티 형성이 잘 되어있고 API 정리가 잘 되어있습니다.
a. Github 172 Star, 26.5 Fork (블레이저의 경우 9.2 Star, 697 Fork)
b. Vue.js 에 대한 경험도 (https://2019.stateofjs.com/front-end-frameworks/vuejs/
6 Source and Quote
웹 어셈블리에 대한 설명
https://developer.mozilla.org/ko/docs/WebAssembly/Concepts
.NET 5.0 에 대한 마이크로소프트 블로그 글
https://devblogs.microsoft.com/dotnet/introducing-net-5/
https://devblogs.microsoft.com/dotnet/announcing-net-5-0-preview-8/
.NET 5.0에 대한 한국어 소개
https://www.youtube.com/watch?v=7JTuNeg6ls0&t=263s
닷넷 커뮤니티
회사에서 개인 과제로 조사했던 것을 옮겨보았다.
처음에 vue.js가 익숙해서 vue.js를 더 옹호(?)했는데, Web Assembly의 강력함을 보고 Blazor에 흥미가 간다.
점점 javascript보다 typescript가 강세를 얻고 있고, Web Assembly 의 성능이 javascript보다 우세한 것을 보면 앞으로 대세는 Web Assembly를 이용한 웹개발이 될 것 같다.
또 방대한 양의 Nuget을 활용할 수 있단 점에선 Tool에 대한 Echo system이 부족한 것을 보완할 수 있을 것 같다는 생각을 했다.
다음 개발은 Blazor로 해봐야지. dotnetdev 커뮤니티에서 보면 Blazor로 개발된 홈페이지도 있으니 참고해보는 것을 추천~
'2020년기록' 카테고리의 다른 글
[WPF] UI쓰레드 점유 문제로 인한 에러 발생과 해결 (0) | 2020.10.28 |
---|---|
digicert EV 인증서 서명방법 (1) | 2020.09.28 |