팁 (조언)
이 콘텐츠는 .NET Docs 또는 오프라인으로 읽을 수 있는 무료 다운로드 가능한 PDF로 제공되는 eBook인 'ASP.NET Core와 Azure로 현대 웹 애플리케이션 설계하기'에서 발췌한 내용입니다.
"… 적절한 디자인으로, 기능은 저렴하게 제공됩니다. 이 방법은 힘들지만 계속 성공합니다."
- 데니스 리치
최신 웹 애플리케이션은 이전보다 사용자 기대치가 높고 요구가 더 큽니다. 오늘날의 웹앱은 전 세계 어디에서나 24/7로 사용할 수 있으며 거의 모든 디바이스 또는 화면 크기에서 사용할 수 있습니다. 웹 애플리케이션은 안전하고 유연하며 수요 급증에 맞추어 확장 가능해야 합니다. 점점 더 복잡한 시나리오는 JavaScript를 사용하여 클라이언트를 기반으로 빌드된 풍부한 사용자 환경과 웹 API를 통해 효율적으로 통신하여 처리해야 합니다.
ASP.NET Core는 최신 웹 애플리케이션 및 클라우드 기반 호스팅 시나리오에 최적화되어 있습니다. 모듈식 디자인을 통해 애플리케이션은 실제로 사용하는 기능에만 의존하여 애플리케이션 보안 및 성능을 향상하는 동시에 호스팅 리소스 요구 사항을 줄일 수 있습니다.
참조 애플리케이션: eShopOnWeb
이 지침에는 몇 가지 원칙과 권장 사항을 보여 주는 참조 애플리케이션 eShopOnWeb이 포함되어 있습니다. 이 애플리케이션은 셔츠, 커피 머그잔 및 기타 마케팅 항목의 카탈로그를 검색할 수 있는 간단한 온라인 스토어입니다. 참조 애플리케이션은 이해하기 쉽도록 의도적으로 간단합니다.
그림 2-1. eShopOnWeb
참조 애플리케이션
- eShopOnWeb
https://github.com/dotnet/eShopOnWeb
클라우드 호스팅 및 확장 가능
ASP.NET Core는 메모리가 부족하고 처리량이 높기 때문에 클라우드(퍼블릭 클라우드, 프라이빗 클라우드, 모든 클라우드)에 최적화되어 있습니다. ASP.NET Core 애플리케이션의 사용 공간이 적다는 것은 동일한 하드웨어에서 더 많은 애플리케이션을 호스트할 수 있으며 종량제 클라우드 호스팅 서비스를 사용할 때 더 적은 리소스에 대한 비용을 지불한다는 것을 의미합니다. 처리량이 높을수록 동일한 하드웨어를 통해 애플리케이션에서 더 많은 고객에게 서비스를 제공할 수 있으므로 서버 및 호스팅 인프라에 투자할 필요가 줄어듭니다.
크로스 플랫폼
ASP.NET Core는 플랫폼 간이며 Linux, macOS 및 Windows에서 실행할 수 있습니다. 이 기능은 ASP.NET Core로 빌드된 앱의 개발 및 배포를 위한 많은 새로운 옵션을 엽니다. Linux 및 Windows 모두 Docker 컨테이너는 ASP.NET Core 애플리케이션을 호스트하여 컨테이너 및 마이크로 서비스의 이점을 활용할 수 있습니다.
모듈식 및 느슨하게 결합됨
NuGet 패키지는 .NET Core에서 일류 시민이며, ASP.NET Core 앱은 NuGet을 통해 많은 라이브러리로 구성됩니다. 이러한 기능의 세분성은 앱이 실제로 필요한 기능에만 의존하여 배포하도록 보장하여 공간 및 보안 취약성 노출 영역을 줄이는 데 도움이 됩니다.
또한 ASP.NET Core는 내부 및 애플리케이션 수준에서 종속성 주입을 완벽하게 지원합니다. 인터페이스에는 필요에 따라 교환할 수 있는 여러 구현이 있을 수 있습니다. 종속성 주입을 사용하면 앱이 특정 구현이 아닌 해당 인터페이스와 느슨하게 결합되어 확장, 유지 관리 및 테스트가 더 쉬워질 수 있습니다.
자동화된 테스트로 쉽게 테스트
ASP.NET Core 애플리케이션은 단위 테스트를 지원하며, 느슨한 결합 및 종속성 주입 지원을 통해 인프라 문제를 테스트 목적으로 가짜 구현과 쉽게 교환할 수 있습니다. ASP.NET Core는 메모리에서 앱을 호스트하는 데 사용할 수 있는 TestServer와 함께 제공됩니다. 그런 다음 기능 테스트는 이 메모리 내 서버에 요청을 수행하여 전체 애플리케이션 스택(미들웨어, 라우팅, 모델 바인딩, 필터 등 포함)을 실행하고 응답을 수신할 수 있으며, 실제 서버에서 앱을 호스트하고 네트워크 계층을 통해 요청을 수행하는 데 걸리는 시간의 일부에 불과합니다. 이러한 테스트는 최신 웹 애플리케이션에서 점점 더 중요해지고 있는 API의 경우 특히 쉽게 작성할 수 있고 유용합니다.
지원되는 기존 및 SPA 동작
기존 웹 애플리케이션에는 클라이언트 쪽 동작이 거의 포함되지 않았지만 대신 앱이 수행해야 할 수 있는 모든 탐색, 쿼리 및 업데이트에 서버에 의존했습니다. 사용자가 수행한 각 새 작업은 새 웹 요청으로 변환되며, 최종 사용자의 브라우저에서 전체 페이지가 다시 로드됩니다. 클래식 모델View-Controller(MVC) 프레임워크는 일반적으로 이 접근 방식을 따르며, 각 새 요청은 다른 컨트롤러 작업에 해당하며, 이 요청은 모델에서 작동하고 뷰를 반환합니다. 지정된 페이지의 일부 개별 작업은 AJAX(비동기 JavaScript 및 XML) 기능으로 향상될 수 있지만 앱의 전체 아키텍처는 다양한 MVC 보기 및 URL 엔드포인트를 사용했습니다. 또한 ASP.NET Core MVC는 MVC 스타일 페이지를 구성하는 간단한 방법인 Razor Pages도 지원합니다.
반면 SPA(단일 페이지 애플리케이션)에는 동적으로 생성된 서버 쪽 페이지 로드가 거의 없습니다(있는 경우). 많은 SPA는 앱을 시작하고 실행하는 데 필요한 JavaScript 라이브러리를 로드하는 정적 HTML 파일 내에서 초기화됩니다. 이러한 앱은 데이터 요구 사항에 맞게 웹 API를 많이 사용하며 훨씬 더 풍부한 사용자 환경을 제공할 수 있습니다. Blazor WebAssembly 는 .NET 코드를 사용하여 SPA를 빌드한 다음 클라이언트의 브라우저에서 실행되는 방법을 제공합니다.
많은 웹 애플리케이션에는 일반적인 웹 애플리케이션 동작(일반적으로 콘텐츠용) 및 SPA(대화형 작업용)의 조합이 포함됩니다. ASP.NET Core는 동일한 도구 집합과 기본 프레임워크 라이브러리를 사용하여 동일한 애플리케이션에서 MVC(보기 또는 페이지 기반) 및 웹 API를 모두 지원합니다.
간단한 개발 및 배포
ASP.NET Core 애플리케이션은 간단한 텍스트 편집기 및 명령줄 인터페이스 또는 Visual Studio와 같은 완전한 기능을 갖춘 개발 환경을 사용하여 작성할 수 있습니다. 모놀리식 애플리케이션은 일반적으로 단일 엔드포인트에 배포됩니다. CI(연속 통합) 및 CD(지속적인 업데이트) 파이프라인의 일부로 배포를 쉽게 자동화할 수 있습니다. 기존 CI/CD 도구 외에도 Microsoft Azure는 git 리포지토리를 통합 지원하며 지정된 git 분기 또는 태그에 업데이트가 만들어짐에 따라 자동으로 배포할 수 있습니다. Azure DevOps는 완전한 기능을 갖춘 CI/CD 빌드 및 배포 파이프라인을 제공하며, GitHub Actions는 호스트되는 프로젝트에 또 다른 옵션을 제공합니다.
기존 ASP.NET 및 웹 양식
ASP.NET Core 외에도 기존 ASP.NET 4.x는 웹 애플리케이션을 빌드하기 위한 강력하고 신뢰할 수 있는 플랫폼입니다. ASP.NET MVC 및 Web API 개발 모델과 풍부한 페이지 기반 애플리케이션 개발에 적합하고 풍부한 타사 구성 요소 에코시스템을 갖춘 Web Forms를 지원합니다. Microsoft Azure는 ASP.NET 4.x 애플리케이션을 오랫동안 지원하며 많은 개발자가 이 플랫폼에 익숙합니다.
Blazor
Blazor 는 ASP.NET Core 3.0 이상에 포함되어 있습니다. Razor, C# 및 ASP.NET Core를 사용하여 풍부한 대화형 웹 클라이언트 애플리케이션을 빌드하기 위한 새로운 메커니즘을 제공합니다. 최신 웹 애플리케이션을 개발할 때 고려해야 할 또 다른 솔루션을 제공합니다. 고려해야 할 두 가지 버전 Blazor , 즉 서버 쪽과 클라이언트 쪽이 있습니다.
서버 쪽 Blazor 은 ASP.NET Core 3.0과 함께 2019년에 릴리스되었습니다. 이름에서 알 수 있듯이 서버에서 실행되어 클라이언트 문서에 대한 변경 내용을 네트워크를 통해 브라우저로 다시 렌더링합니다. 서버 쪽은 클라이언트 쪽 Blazor JavaScript를 요구하지 않고 각 클라이언트 페이지 상호 작용에 대해 별도의 페이지 로드를 요구하지 않고도 풍부한 클라이언트 환경을 제공합니다. 로드된 페이지의 변경 내용은 서버에서 요청 및 처리한 다음 SignalR을 사용하여 클라이언트로 다시 전송됩니다.
2020년에 릴리스된 클라이언트 쪽 Blazor은 서버에서 변경 내용을 렌더링할 필요가 없습니다. 대신 클라이언트 내에서 .NET 코드를 실행하는 데 활용합니다 WebAssembly . 데이터를 요청하는 데 필요한 경우 클라이언트는 여전히 서버에 대한 API 호출을 수행할 수 있지만 모든 클라이언트 쪽 동작은 모든 주요 브라우저에서 이미 지원되고 JavaScript 라이브러리일 뿐인 클라이언트 WebAssembly에서 실행됩니다.
참조 – 최신 웹 애플리케이션
- ASP.NET Core 소개
https://learn.microsoft.com/aspnet/core/- ASP.NET Core에서 테스트
https://learn.microsoft.com/aspnet/core/testing/- Blazor -시작
https://blazor.net/docs/get-started.html
.NET