콘텐츠로 이동

ASP.NET Web Form의 현대화

개요

웹 애플리케이션을 만들면서 Visual Basic 6.0 스타일의 WYSIWYG 편집 경험과 비주얼 디자이너의 이점을 활용하고자 하는 1990년대 후반, 2000년대 초반의 개발자들의 수요를 충실히 이행하는 기술 스택입니다. 다음의 특징이 있어 많은 인기를 얻었습니다.

ASP.NET Web Form의 특징

ASP.NET Web Form 기술 스택을 사용하려는 이유와 각 특징은 다음과 같습니다.

컴포넌트 중심의 개발 방법론과 WYSIWYG 편집 경험

라벨, 버튼, 라디오 버튼, 체크박스, 리스트 박스 같은 기본적인 폼 양식과 함께, 상황과 목적에 맞게 동적으로 재구성이 가능한 강력한 데이터 그리드, 동적 바인딩 컨트롤을 제공합니다.

  • 컨트롤들을 상품화해서 판매하는 컴포넌트 업체 (인프라지스틱스, 텔레릭 등) 등이 강력한 에코 시스템을 형성하고 있는 지역이기도 합니다.

뷰스테이트를 통한 복잡한 UI 상태 관리 자동화

특별한 비즈니스 로직을 따로 만들지 않아도, 화면 상에 보이는 모든 폼 양식들의 값을 전송 간에 항상 동일하게 유지하고 보여주는 뷰 스테이트 기능으로 사용자는 요청/응답에 어떤 매개 변수가 들어오고 나가는지를 일일이 관리하지 않아도 비즈니스 로직에서 원하는 데이터를 얻을 수 있음을 보장받을 수 있었습니다.

그러나 기술적으로 다음의 문제점이 있습니다.

  • 비즈니스 요구 사항이 늘어날 수록 뷰 스테이트 데이터의 크기도 비례해서 늘어납니다.
  • 뷰 스테이트 데이터 디코딩이 브라우저와 서버 모두가 필요하므로 UI 응답 속도가 느려질 수 있고, 네트워크 트래픽이 크게 증가할 수 있습니다.
  • 뷰 스테이트 자체는 BASE64로 인코딩된 데이터 스트림을 Multipart Form-Data로 주로 주고 받으며, 기본 구현체에서는 뷰스테이트 자체를 GZIP이나 Brotli 등으로 압축/복원하는 기술이 포함되어있지 않습니다.
  • 뷰 스테이트 데이터를 로드 밸런서 환경에서 일관성있게 처리할 수 있도록 만들려면 웹 애플리케이션 서버들 간에 상태를 공유하도록 설계하는 것이 까다로울 수 있습니다.
  • 뷰 스테이트 데이터 자체는 암호화되어있지 않다보니, 전송 간에는 HTTPS로 암호화하여 보호할 수 있지만, MITM이나 엔드포인트 취약점 등으로 인해 데이터를 중간에서 하이재킹당할 위험이 항상 있습니다.

뷰 스테이트의 장점을 살리면서도 비동기 통신을 지원할 목적으로 ASP.NET AJAX (Atlas) 프레임워크도 출시한 바 있습니다.

  • UpdatePanel이라는 컨트롤 안에 기존에 사용하던 Web Form 컨트롤을 추가하면, 뷰 스테이트 처리와 서버와의 송수신 과정 전체를 <form /> 태그 대신 XMLHttpRequest를 사용하도록 대체하게 됩니다.

리눅스, 컨테이너 기반으로 모더나이제이션을 해야 할 경우 접근법

전면적인 재개발은 피할 수 없습니다. 그러나 다음 두 가지 전략 중 하나를 고려해볼 수 있습니다.

전략 1: 서버 렌더링 기반의 Blazor로 재개발

(권장) 비슷한 패러다임을 최대한 유지할 수 있는 기술 스택으로 Blazor 서버 렌더링 방식으로 새로 개발하는 방법을 추천할 수 있습니다.

관련 도서: https://learn.microsoft.com/en-us/dotnet/architecture/blazor-for-web-forms-developers/

  • ASP.NET MVC보다 러닝 커브가 완만합니다. MVC 기반으로 아키텍처를 급진적으로 바꾸는 부담을 지지 않거나 적게 가져가도 됩니다.
  • 컴포넌트 기반 개발 방법론을 그대로 이용할 수 있고, 프론트엔드와 백엔드가 분리되지 않는 단일 아키텍처를 그대로 고수할 수 있습니다.
  • 서버 렌더링 기반의 Blazor는 내부 통신을 HTTP 2.0 이상에서 사용하는 웹 소켓을 사용하게 됩니다. 1
  • 기존에 인프라지스틱스, 텔레릭 등의 유명 컴포넌트 메이커들의 제품을 이용했다면 비슷한 수준의 기술 지원과 사용법을 그대로 유지하며 배울 수 있습니다.
  • Blazor의 포트폴리오가 매우 다양하며, Blazor를 대상으로 하는 코드를 유연하게 확장할 수 있습니다.
  • Blazor WASM: 과거 Adobe Flash, Oracle JavaFX, Microsoft SIlverlight 같은 플러그인 기반 웹 확장 기술과 비슷한 기능을 제공하면서도, 웹 브라우저의 기본 기능인 WASM 런타임만을 사용하도록 컴파일하는 Blazor WASM을 지원합니다.
  • Blazor Hybrid: 모바일 앱 위에 올라가는 하이브리드 앱 개발 목적으로도 확장할 수 있어 미래 지향적인 기술입니다.
  • 서버 측 비즈니스 로직은 서버 렌더링 기반의 Blazor를 이용하면 코드 베이스 하나로 통합할 수 있으며, Blazor WASM이나 Hybrid 모델을 사용하는 경우, ASP.NET Web API로 분리 개발 후, Open API와 Swagger, 그리고 Open API Proxy Generator를 이용하여 C# 바인딩을 만드는 방법으로 리팩터링이 가능합니다.

각주


  1. OS를 만일 Windows Server로 그대로 유지하기 원하며, 동시에 IIS를 계속 사용하기 원한다면, HTTP.SYS 커널 드라이버가 HTTP 2.0 또는 3.0을 지원하도록 업데이트된 최신 버전의 Windows Server 릴리스 (Windows Server 2022 이상 권장)로 교체 또는 업그레이드를 해야 합니다. 이는 IIS ANCM 모듈을 사용하거나, UseHttpSys() 익스텐션 메서드를 사용하게 되더라도 변하지 않는 부분입니다.