ASP.NET Core 6에서의 핫 리로드 기능 활용

.NET 6에서는 애플리케이션을 재시작하지 않고도 실행 중인 프로세스에 코드 변경 사항을 즉시 반영할 수 있는 핫 리로드(Hot Reload) 기능을 제공한다. 이 기능을 사용하면 세션 상태나 현재 실행 흐름을 유지한 채 개발 중인 앱에 수정 사항을 적용할 수 있어 생산성이 크게 향상된다.

지원 범위 및 제약 조건

ASP.NET Core 6 프로젝트는 기본적으로 핫 리로드를 지원하지만, 일부 특정 상황에서는 제한이 존재한다.

  • 애플리케이션 시작 로직: 미들웨어 등록, 서비스 구성, 라우팅 설정 등의 초기화 코드는 일반적으로 핫 리로드가 불가능하다. 단, 인라인 델리게이트 형태로 정의된 미들웨어나 라우트 처리기 내부의 변경은 예외적으로 반영될 수 있다.
  • Blazor 앱: 컴포넌트의 메서드 본문이나 표현식에 대한 변경은 실시간으로 반영되며, Blazor 프레임워크가 자동으로 리렌더링을 트리거한다.
  • MVC 및 Razor Pages: 뷰 또는 페이지 모델의 변경 시 브라우저가 자동 새로 고침된다.
  • Razor 컴포넌트 매개변수 삭제: @param 특성 또는 [Parameter] 속성을 제거하는 작업은 핫 리로드로 처리되지 않으며, 앱 재시작이 필요하다.

Blazor WebAssembly의 핫 리로드 제한사항

  • 메서드 본문 내 변수, 식, 문장 추가/수정/삭제는 지원됨.
  • 람다 식 및 지역 함수의 본문 변경도 가능.
  • 새 람다 또는 지역 함수 선언은 불가능.
  • 연산자 또는 키워드 기반 식 추가 불가.
  • 메서드 파라미터 이름 변경은 반영되지 않음.
  • 클래스 멤버, 속성, 메서드 시그니처 변경 등 본문 외부의 변경은 지원 안 됨.
  • Visual Studio 2022 (v17.0) 출시 버전에서는 디버거 연결 없이 실행할 때만 핫 리로드가 활성화됨.

CLI를 통한 핫 리로드 사용

명령줄 도구를 사용해 핫 리로드를 활성화하려면 다음 명령어를 실행한다:

dotnet watch

이 명령은 프로젝트 파일의 변경을 감지하고 가능한 경우 자동으로 변경 사항을 적용한다. 빌드가 불가능하거나 지원되지 않는 수정이 발생했을 경우(예: 클래스 구조 변경), 다음과 같은 선택지를 제공한다:

  • Yes: 앱을 재시작하여 변경 사항을 적용.
  • No: 변경 사항을 무시하고 현재 상태 유지.
  • Always: 이후 모든 강제 수정 시 자동 재시작.
  • Never: 재시작 없이 진행하며, 향후 경고도 표시하지 않음.

핫 리로드 기능을 아예 비활성화하려면 다음처럼 옵션을 추가한다:

dotnet watch --no-hot-reload

실습 예제: Blazor Server 앱에서의 핫 리로드

다음은 CLI 기반으로 Blazor Server 프로젝트를 생성하고 핫 리로드를 테스트하는 과정이다.

  1. Blazor Server 프로젝트 생성:
dotnet new blazorserver -n HotReloadDemo
cd HotReloadDemo
  1. 핫 리로드 모드로 실행:
dotnet watch

출력 예시:

watch : Hot reload enabled. For supported edits, visit https://aka.ms/dotnet/hot-reload.
watch : Building...
      Blazor -> /Users/username/HotReloadDemo/bin/Debug/net6.0/HotReloadDemo.dll
watch : Started
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://localhost:7165
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5141
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
  1. Pages/Index.razor 파일을 열고 UI 요소를 수정한다. 예를 들어 다음과 같이 텍스트를 변경:
<h1>안녕하세요, 핫 리로드 테스트!</h1>

저장 직후 브라우저 화면이 자동으로 갱신되며 변경된 제목이 표시된다. 이는 핫 리로드가 성공적으로 작동하고 있음을 의미한다.

태그: ASP.NET Core 6 Blazor Hot Reload dotnet watch WebAssembly

6월 17일 23:10에 게시됨