1. C#과 .NET의 App Model
App Model은 일반적인 Application을 제작하는 대부분의 경우에 사용됩니다. 이와 관련하여 마이크로소프트는 App Model에 대한 광범위한 문서를 제공하고 있는데 이는 아래 주소에서 확인할 수 있습니다.
.NET Application Architecture Guides (microsoft.com)
(1) ASP.NET Core를 사용한 Website 제작
일반적으로 Website는 파일 시스템에서 정적으로 제공되는 다수의 페이지나 ASP.NET Core와 같은 server-side기술을 통해 동적으로 생성되는 페이지를 생성함으로써 만들어집니다. 웹 브라우저는 각각의 페이지를 식별하는 Unique Resource Locators (URLs)를 통해 GET 요청을 생성하거나 POST, PUT, DELETE 등의 요청을 통해 서버에 저장된 데이터를 조회하거나 변경할 수 있습니다.
많은 Website에서 대부분의 브라우저는 표현계층을 다루게 되며 대부분의 처리는 서버상에서 이루어지게 됩니다. 이때 Javascript는 client-side에서 이미지의 회전과 같은 특정 기능을 구현하는 데 사용될 수 있습니다.
ASP.NET Core는 Website를 제작하기 위한 아래와 같은 여러 기술을 제공하고 있습니다.
- ASP.NET Core Razor Pages와 Razor Class Library : 간단한 Website제작을 위한 동적 HTML을 생성합니다. 이와 관련해서는 아래 글을 참고하시기 바랍니다.
[.NET/ASP.NET Core] - [ASP.NET Core] Razor Page로 웹 프로젝트 만들기
- ASP.NET Core MVC : Model-View-Controller (MVC)라는 디자인패턴을 통해 복잡한 Website를 구축하는 데 사용되며 아래 글에서 좀 더 상세한 내용을 확인하실 수 있습니다.
[. NET/ASP.NET Core] - [ASP.NET Core] MVC패턴 웹 프로젝트 만들기
- Blazor : Angular, React, Vue등과 같은 Javascript에 기반한 UI Framework대신 C#과 .NET을 통해 사용자 인터페이스 컴포넌트를 구현합니다. Blazor WebAssembly는 C#과 같은 코드를 JavaScript기반 framework처럼 웹브라우저에서 동작시키며 Blazor Server는 서버에서 동작하여 웹페이지를 동적으로 업데이트합니다. 좀 더 자세한 내용은 아래 글을 참고하시기 바랍니다.
[.NET/ASP.NET Core] - [ASP.NET Core] Blazor 웹 프로젝트 시작하기
Blazor는 Website를 제작하는 경우뿐 아니라 hybrid mobile이나 desktop App을 개발하는 데에도 사용될 수 있습니다.
● Content Management System(CMS)를 사용한 Website 구축
대부분의 Website는 다양한 Content를 다루게 되며 개발자가 변경이 필요한 Content를 다루는데 매번 개입해야 한다면 Website의 확장성은 떨어질 수밖에 없을 것입니다. 이런 상황에서 CMS는 개발자가 일관성 있고 좋은 디자인을 제공하기 위한 Content구조와 템플릿을 정의할 수 있도록 함과 동시에 실제 Content를 소유하고 관리해야 하는 비 전문가가 새로운 Content를 생성하거나 기존의 Content를 차단 혹은 변경하는 등 손쉽게 Content를 관리할 수 있도록 합니다. 이는 최소한의 노력으로 Website를 방문하는 방문자에게 큰 경험을 제공해 줄 수 있을 것입니다.
PHP의 Workpress나 Python의 Django와 같은 모든 Web platform을 위한 다양한 CMS가 존재하는데 .NET환경에서는 Optimizely Content Cloud를 포함하여 Piranha CMS, Orchard Core 등의 CMS도 존재합니다.
CMS 사용이 주는 가장 큰 핵심적인 이득은 Content관리를 위한 친숙한 사용자 인터페이스를 제공한다는 것입니다. Content는 ASP.NET Core MVC Controller와 View를 사용하거나 헤드리스 CMS로 알려진 웹 서비스 엔드포인트를 통해 방문자에게 렌더링 되고 반환되어 자바스크립트 프레임워크 또는 블레이저로 구축된 모바일 또는 데스크톱 애플리케이션 클라이언트에 Content를 제공합니다.
CMS와 관련된 추가적인 사항은 아래 링크를 통해 확인하시기 바랍니다.
cs10dotnet6/book-links.md at main · markjprice/cs10dotnet6 · GitHub
● SPA framework를 사용한 Website 구축
Single-Page Applications (SPAs)라고 알려진 Web Application은 Blazor WebAssembly, Angular, React, Vue나 Javascript와 같은 Front-End기술을 통해 Back-End로의 필요한 모든 요청을 생성하는 하나의 단일 웹페이지를 만들어 Web Service전체를 구성하게 됩니다. 이로 인해 하나의 페이지 안에서 필요한 데이터를 얻거나 새로운 데이터를 추가, 변경할 수 있게 됩니다.
일반적인 웹구현과 마찬가지로 대부분의 SPAs는 Client-side에서 사용되는 JavaScript framework나 Blazor WebAssembly는 높은 수준의 사용자 상호작용을 구현하면서 실제 데이터와 관련된 중요한 처리는 Server-side에서 처리되는 구조로 이루어지고 있습니다. 실제 Web환경에서 Web Browser는 Client의 자원에 접근하기에는 다소 제한된 환경을 제공하기 때문입니다.
Javascript자체는 매우 느슨한 Type이며 복잡한 프로젝트를 위해 설계된 것이 아니다 보니 요즘에는 거의 마이크로소프트의 Typescript를 사용하는 사례가 늘고 있습니다. Typescript는 기존 Javascript에 강력한 Type을 더하여 오늘날 사용되는 언어적 기능에 맞춰 복잡한 프로젝트의 구현에도 적용될 수 있을 정도의 강력함을 갖추고 있습니다.
요약하자면 C#과 .NET은 Website개발에 있어서 Server와 Client side모두에 사용될 수 있습니다.
(2) Web과 다른 서비스의 구축
아래 글을 통해 ASP.NET Core Web API를 사용하여 어떻게 Web Service를 구축하고 만들어진 Web Service를 어떻게 Blazor WebAssembly component와 cross-platform기반의 mobile 그리고 desktop app에서 호출할 수 있을지를 대략적으로 살펴볼 수 있습니다.
[.NET/ASP.NET Core] - [ASP.NET Core] ASP.NET Core Web API
Service를 정의할 수 있는 정확한 규정은 존재하지 않지만 대략 아래 3가지 정도로 Service를 나눠볼 수 있습니다.
- Service : 하나의 단일 서비스에서 Client App에 필요한 모든 기능을 제공합니다.
- Microservice : 다수의 서비스는 비교적 더 작은 기능들에 세분화되어 서비스됩니다.
- Nanoservice : 서비스로 제공되는 단일 기능을 의미하며 365일 연중무휴로 서비스되는 Serive나 Microservice와는 달리 비용과 자원을 절약하기 위해 실제 호출되기 전까지 종종 비활성화될 수 있습니다.
또한 기반 통신을 위한 HTTP와 API의 설계원칙이 적용되는 Web Service와 더불어 아래 기술들과 설계철학에 대해서도 알아둘 필요가 있습니다.
- gRPC : 높은 효휼성과 고성능의 서비스를 구축하는 데 사용되며 거의 대부분의 platform에서 지원합니다.
- SignalR : Component사이의 실시간 통신을 위해 사용됩니다.
- OData : Entity Framework Core 및 기타 데이터 모델을 웹 API로 래핑 하는 데 사용됩니다.
- GraphQL : 여러 데이터소스로 부터 검색된 데이터를 Client가 제어할 수 있도록 합니다.
- Azure Functions : Cloud에서 Serverless Nanoservice를 서비스합니다.
(3) Mobile과 Desktop App개발
현재는 Apple의 iOS와 Google의 Android라는 2개의 Mobile에 관한 주요 Flatform이 있으며 이들은 개발에 필요한 각각의 네이티브 언어와 Flatform API를 다음과 같이 보유하고 있고 Desktop 또한 Apple의 macOS와 Microsoft의 Windows로 주요 Flatform을 나눌 수 있으며 저마다 개발에 필요한 언어와 API를 사용하고 있습니다.
- iOS : Objective C 또는 Swift 그리고 UIkit을 사용
- Android : Java 또는 Kotlin 그리고 Android API 사용
- macOS : Objective C나 Swift 그리고 AppKit 또는 Catalyst 사용
- Windows : : C, C++ 및 다수의 많은 프로그래밍 언어와 함께 Win32 API 또는 Windows App SDK를 사용
Windows Forms, Windows Presentation Foundation (WPF), Universal Windows Platform (UWP)등은 Windows전용이므로 cross-platform 개발환경에는 포함되지 않습니다.
Cross-platform 모바일과 데스크탑앱은 .NET Multi-platform App User Interfaces (MAUI)를 통해 UI를 구성할 수 있으며 다수의 Mobile Platform과 Desktop Platform에서 구동이 가능합니다. .NET MAUI는 business logic과 더불어 user interface component를 공유함으로써 비교적 쉽게 App을 개발할 수 있도록 하며 Console apps이나 Websites, Web Services에서 사용한 것과 동일한 .NET API를 대상으로 할 수 있습니다. 이렇게 만들어진 App은 Mobile에서 Mono runtime기반하에 실행되거나 Desktop에서 CoreCLR runtime기반하에 실행될 수 있는데 특히 Mono runtime은 일반적인 .NET CoreCLR runtime에 비해 좀 더 Mobile device를 위해 최적화된 것입니다. Blazor WebAssembly 또한 Mobile app처럼 Mono runtime을 사용하고 있는데 다만 접근 가능한 자원에 제약이 있습니다.
App은 자체적으로 존재할 수 있지만 대부분은 일반적으로 Server나 Desktop, Phone에 이르기까지 거의 모든 computing devices를 포괄하는 경험을 제공하기 위해 서비스를 호출합니다.
향후 .NET MAUI는 현재의 Model-View-Update (MVU)에 더하여 Apple의 Swift UI와 유사한 방식인 MVVM과 XAML pattern을 지원할 예정입니다.
(4) .NET MAUI의 대체
Microsoft가 .NET MAUI를 만들기 이전에는 third partiy open-source로 Uno와 Avalonia로 명명된 프로젝트가 존재하며 XAML을 통해 .NET 개발자들이 cross-platform App의 구축이 가능하도록 합니다.
● Uno Platform
Uno는 그들의 Website를 통해 'Windows, WebAssembly, iOS, macOS, Android, Linux 등을 위한 단일 코드 베이스의 최초이자 유일한 UI Platform'이라고 언급하였습니다. 이 말처럼 native mobile, web, desktop를 포괄하는 UI Layer와 Business logic을 99% 재사용할 수 있었습니다.
Uno Platform은 Xamarin native platform을 사용하지만 Xamarin.Forms은 아니며 WebAssembly를 위해서는 Mono-WASM runtime을 사용하고 Linux를 위해서는 UI를 표현하기 위해 Skia를 사용합니다.
● Avalonia
.NET Foundation WebSite에서는 Avalonia를 'XAML기반의 UI-Framework로 스타일링 시스템을 위한 유연성을 제공하고 Windows는 물론 Xorg를 사용한 Linux, macOS와 같은 넓은 범위의 운영체제들을 지원한다.'라고 언급하고 있습니다. 어찌 보면 WPF와 유사해 보일 수 있는데 WPF, Silverlight, UWP개발자들은 수년간 기록된 지식과 기술을 통해 좀 더 친숙하게 Avalonia에 접근할 수 있습니다.
실제로 JetBrains사에서는 그들의 WPF 기반 도구와 몇몇 cross-platform 제품에 Avalonia를 사용하기도 했는데 Visual Studio의 Avalonia확장과 JetBrains Rider와의 통합은 개발자들이 더 쉽고 더 생산적으로 App을 만들 수 있도록 하고 있습니다.
'.NET' 카테고리의 다른 글
[.NET] C#과 NET의 프로젝트 유형 - 3. Project 구조설계및 프로젝트 템플릿 (0) | 2022.07.20 |
---|---|
[.NET] C#과 NET의 프로젝트 유형 - 2. ASP.NET Core와 Windows 전용 Desktop App (0) | 2022.07.20 |
[.NET] 닷넷 Type 사용하기 - 8. image 다루기 (0) | 2022.06.26 |
[.NET] 닷넷 Type 사용하기 - 7. reflection 과 attributes (0) | 2022.06.26 |
[.NET] 닷넷 Type 사용하기 - 6. 네트워크 리소스 활용 (0) | 2022.06.26 |