ASP.NET Core는 Microsoft의 Web개발 platform이며 2002년에 처음 소개된 이후 몇 번의 대규모 개선을 거쳐 현재의 ASP.NET Core 7이 되었습니다.
ASP.NET Core는 HTTP 요청을 처리하는 platform과 application을 생성을 위한 몇가지 framework, 그리고 기능을 제공하기 위한 부수적인 utility framework로 구성되어 있습니다. 다음 이미지에서는 그 구조를 잘 나타내고 있습니다.
.NET Framework, .NET Core 그리고 .NET
본래 Windows전용 개발 platform으로 1.0부터 .NET Framework로 시작해 cross-platform으로 .NET Core가 개발되기 시작하였으며 .NET Core 3부터 공시적으로 .NET이라는 이름으로 platform의 이름을 사용하게 되었습니다. ASP.NET Core는 ASP.NET Web 개발 platform에서 역시 corss-platform으로 진화하여 사용하기 시작한 명칭입니다.
1. Application Framework
Application framework에는 사용할 수 있는 여러 종류가 있습니다. 이들은 상호 보완적이며 여러 문제를 해결하거나 특정 기능의 경우 같은 문제를 다른 방식으로 해결하기도 합니다. 이들 framework사이의 관계를 이해한다는 것은 Microsoft에 의해 지원되는 design pattern의 변화를 이해한다는 의미가 되기도 합니다.
1. MVC Framework
MVC Framework는 .NET이전에 이미 ASP.NET부터 도입된 것으로 Web Form이라고 불리는 개발 model과 관련된 것입니다. 이는 Desktop application개발 경험을 토대로 나온 것이지만 결과적으로 project는 다루기 어려웠으며 확장성도 한계가 있었습니다. 반면 MVC는 HTTP와 HTML의 특성을 뒤로 감추는 대신 이들을 포용하는 개발 model을 사용합니다.
MVC는 Model-View-Controller를 의미하는데 이는 application의 형태를 설명하는 design-pattern입니다. 특히 기능적인 영역을 독립적으로 정의하는 관심사의 분리를 강조함으로써 Web Form에서 유발되는 불분명한 시스템의 구성을 효과적으로 해결하고 있습니다.
초기 MVC Framework는 Web Forms로 설계된 ASP.NET 기반 위에 구축되어 일부 취약한 면을 드러내기도 했는데 .NET Core로 전환되면서 ASP.NET은 ASP.NET Core가 되고 MVC Framework는 open source로 확장이 가능하며 cross-platform기반으로 재구축되었습니다.
MVC Framework는 ASP.NET Core에서 중요한 부분으로 남아있지만 Single-Page Applications(SPAs)의 등장으로 일반적으로 사용되는 방식에 변화가 생겼습니다. SPA에서 browser는 단일 HTTP요청을 만들고 그에 따른 HTML문서를 수신합니다. 이때 client는 Angular 혹은 React와 같이 JavaScript framework로 작성된 고수준 front-end일 수 있습니다. SPAs로의 전환은 본래 MVC가 의도한 명확한 분리가 그다지 중요하지 않다는 것을 의미하며 MVC framework가 여전히 유용하게 남아있기는 하지만(web service를 통해 SPAs를 지원하도록 사용될 수 있기는 하지만)MVC pattern에 따른 위치를 강조하는 것도 더이상 필수적이지 않음을 의미합니다.
Pattern 사용에 대한 견해
Pattern은 단지 다른 사람이 다른 project에서 직면한 문제를 해결하는 방식에 불과합니다. 만약 어떠한 문제에 직면하게 된다면 이전에 해당 문제가 어떻게 해결되었는지를 알면 도움이 될 수 있습니다. 하지만 이것이 결과를 이해하고 있는 한 pattern을 정확히 혹은 조금이라도 따라야 한다는 것을 의미하지는 않습니다. Project를 관리할 수 있는 pattern이 존재하는데 이를 벗어나기로 했다면 귀하의 project가 관리하기 어려워 질 수 있음을 수용해야 하지만 그렇다고 해서 pattern을 무성의하게 따르는 것은 아예 pattern을 따르지 않는 것보다 더 나빠질 수 있습니다. 모든 project에 적합한 pattern은 존재하지 않습니다. Pattern을 따르되 필요에 따라 조금씩 조정할 수 있는 여유를 가지는 것이 좋습니다.
2. Razor Page
MVC Framework의 단점 중 하나는 application이 실제 content를 생성할때까지 사전에 많은 준비과정이 필요하다는 것입니다. 반면 Web Form은 구조적인 문제에도 불구하고 단순한 application이라면 비교적 짧은시간안에 만들어 내는것이 가능합니다.
Razor Page는 이러한 Web Form의 개발개념을 가져가 본래 MVC Framework를 위해 개발된 patform기능을 사용해 application을 구현하는 방식을 취합니다. 이런 형태로 Code와 content는 단일 page안에 함께 공존하며 Web Form에서의 개발속도만큼 재현할 수 있습니다.(비록 복잡한 project를 확장하는 것은 여전히 문제점으로 남지만...)
Razor Page는 MVC Framework와 함께 사용할 수 있는데 주로 MVC Framework를 application의 중요분 부분을 완성하고 Razor Page를 사용해 부수적인 기능(관리자 page나 보고서 표시와 같은...)을 구현하는 방식을 예로 들 수 있습니다.
3. Blazor
여러 JavaScript client-side framework가 존재하지만 누군가 한테는 또 다른 programming언어를 배워야 함이 부담일 수 있습니다. 새로운것에 능숙해 지려면 그 만큼의 노력과 시간을 투자해야할 것입니다. 이러한 상황에서 Blazor는 C#언어를 client-side application개발에 사용할 수 있게 함으로서 위와 같은 부담을 줄이고 있습니다. 현재 Blazor는 2가지 version이 존재하는데 첫번째 Blazor Server는 ASP.NET Core server로의 지속적인 HTTP연결에 의존하는 것으로 application의 C# code가 server에서 실행되는 것이며 두번째 Blazor WebAssembly는 Application의 C# code가 Web browser에서 실행됩니다.
4. Utility framework
위에서 언급한 framework는 ASP.NET과 밀접하게 관련되어 있기는 하지만 HTML content나 data를 생성하는데 직접적으로 사용되는 것은 아닙니다. 반면 Entity Framework Core는 Microsoft의 ORM(Object-Relational Mapping) framework로서 Database에 저장된 data를 .NET 개체로 표현하는데 사용됩니다. Entity Framework Core는 ASP.NET Core application을 포함한 거의 모든 .NET application에서 사용될 수 있습니다.
ASP.NET Core Identity는 Microsoft의 자격증명및 허가와 관련된 framework로서 ASP.NET Core application에서 사용자 증명에 대한 유효성을 검증하고 application기능으로의 접근을 제한합니다. 이 부분에 대해서는 향후 다시 한번 다뤄볼 기회가 있을 것입니다.
5. ASP.NET Core platform
ASP.NET Core platform은 HTTP요청을 수신하고 처리하며 그에 따른 응답을 생성하기 위한 저수준기능을 포함하고 있습니다. 또한 통합된 HTTP Server와 요청을 처리하기 위한 middleware component system, URL routing과 Razor view engine과 같이 application framework가 의존하는 핵심기능이 존재합니다.
개발이 들어가는 대부분의 시간은 application framework에 소요되지만 효과적으로 ASP.NET Core를 사용하려면 platform이 제공하는 강력한 기능에 대한 이해가 필요하며 해당 기능이 없으면 상위 수준의 framework가 작동하지 않을 수 있습니다.
또 다른 patform 기능으로서 SignalR과 gRPC도 존재합니다. SignalR은 application간 저지연 통신 channel을 생성하는데 사용되며 Blazor Server framework의 근간을 제공하긴 하지만 다수의 저지연 messaging이 필요한 project에서 Azure Event Grid혹은 Azure Service Bus와 같은 대체수단이 많아 자주 사용되지는 않고 있습니다. gRPC는 HTTP를 통한 RPCs(cross-platform remote procedure calls)에 대한 새로운 표준으로 본래 Google에서 효휼성과 확장성에 대한 이점을 제공합니다. gRPC는 향후 미래 web service에 대한 표준이 될 수 있지만 Web borowser에서는 허용하지 않는 발신 HTTP message에 대한 저수준 제어가 필요하기에 web application에서는 사용될 수 없습니다.(Proxy server를 통해 gRPC의 사용이 가능한 browser library가 존재하기는 하지만 gRPC를 사용하는 이점을 약화시킵니다.)
'.NET > ASP.NET' 카테고리의 다른 글
[ASP.NET Core] - 3. ASP.NET Core Application 예제 (2nd) (0) | 2024.03.20 |
---|---|
[ASP.NET Core] - 2. 시작하기 (2nd) (0) | 2024.03.15 |
NET::ERR_CERT_INVALID 문제 (0) | 2023.11.27 |
ASP.NET Core - 21. ASP.NET Core Identity 사용 (2) | 2023.04.09 |
ASP.NET Core - 20. ASP.NET Core Identity (0) | 2023.04.04 |