.NET 8의 HostApplicationBuilder는 기존 WPF 개발자분들이 주로 사용하던 방식(과거 App.xaml.cs에서 수동으로 객체를 생성하거나 별도의 IoC 컨테이너를 붙이던 방식)을 완전히 뒤바꾼, 현대 .NET의 핵심 프레임워크 기능입니다.
이 개념을 기존 C# WPF 경험과 연결하여 알기 쉽게 설명해 드리겠습니다.
## 1. HostApplicationBuilder란 무엇인가요?
HostApplicationBuilder는 애플리케이션이 실행되는 데 필요한 '인프라(환경)를 한곳에서 간편하게 빌드하고 관리해 주는 도구'입니다.
과거 .NET Core 시절에는 웹용(WebHostBuilder)과 일반 콘솔/서비스용(HostBuilder)이 나누어져 있어 코드가 다소 복잡했습니다. .NET 7/8에 이르러 이 프로세스를 완전히 단일화하고 성능을 대폭 개선하여 내놓은 것이 바로 HostApplicationBuilder입니다.
이 빌더를 사용하면 프로그램 시작 시점에 다음과 같은 핵심 기능들을 단 몇 줄로 통합 설정할 수 있습니다.
- 의존성 주입 (Dependency Injection, DI): 객체의 생명주기 관리 및 결합도 낮춤
- 설정 관리 (Configuration): appsettings.json이나 환경 변수 로드
- 로그 (Logging): 콘솔, 파일, 이벤트 로그 등 일관된 로깅 시스템 구축
- 호스팅 서비스 (Hosted Services): 백그라운드에서 계속 실행될 작업(예: BLE 통신 감시 등) 정의
## 2. 왜 사용해야 할까요?
WPF나 MAUI 환경에서 이를 도입하면 다음과 같은 강력한 이점이 있습니다. BTLE 통신 제어 소프트웨어를 예를 들어 설명 한다면,
- 구조적 아키텍처 (MVVM) 구현의 극대화: ViewModel, Service(통신 모듈, DB 모듈) 등을 DI 컨테이너에 등록하여, 생성자 주입(Constructor Injection) 방식으로 깔끔하게 결합할 수 있습니다.
- 백그라운드 통신 처리 용이: 통신 제어 소프트웨어는 UI 스레드와 별개로 '장치 연결 상태를 감시하거나 데이터를 수집하는 백그라운드 스레드'가 필수적입니다. IHostedService를 구현하여 등록하면 호스트가 시작될 때 백그라운드 루프를 깔끔하게 띄워줍니다.
- 코드 재사용성: 이 방식으로 비즈니스 로직(Service 계층)을 짜두면, WPF 프로그램이든 .NET MAUI 모바일 앱이든 동일한 DI 구문을 그대로 재사용할 수 있습니다.
## 3. 코드 비교로 보는 차이점
기존 WPF 방식과 .NET 8 HostApplicationBuilder 방식을 비교해 보면 구조적 차이가 명확히 보입니다.
### 기존 WPF 방식 (의존성 수동 관리)
// App.xaml.cs
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// 수동으로 매번 인스턴스를 생성하고 조립해야 함
var bleService = new BluetoothService();
var mainViewModel = new MainViewModel(bleService);
var mainWindow = new MainWindow(mainViewModel);
mainWindow.Show();
}
### .NET 8 HostApplicationBuilder 방식
// App.xaml.cs
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
protected override async void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// 1. 빌더 생성 (.NET 8 스타일)
HostApplicationBuilder builder = Host.CreateApplicationBuilder(e.Args);
// 2. 서비스/뷰모델/윈도우 등록 (DI 컨테이너)
builder.Services.AddSingleton<IBluetoothService, BluetoothService>(); // 싱글톤으로 관리
builder.Services.AddTransient<MainViewModel>(); // 필요할 때마다 생성
builder.Services.AddTransient<MainWindow>();
// 3. 호스트 빌드
IHost host = builder.Build();
// 4. 애플리케이션 시작 및 메인 윈도우 표시
await host.StartAsync();
var mainWindow = host.Services.GetRequiredService<MainWindow>();
mainWindow.Show();
}
## 4. 핵심 구성 요소 요약
HostApplicationBuilder를 선언하면 내부에 크게 3가지 속성을 핵심적으로 다루게 됩니다.
- builder.Services (IServiceCollection)
- 애플리케이션에 사용할 클래스들을 등록하는 곳입니다.
- AddSingleton(프로그램 전체에서 딱 하나만 유지), AddTransient(요청할 때마다 새로 생성) 등을 지정합니다.
- builder.Configuration (ConfigurationManager)
- appsettings.json 설정 파일이나 환경 변수를 읽어옵니다.
- 예: string comport = builder.Configuration["SerialSettings:Port"]; 형태로 쉽게 연동됩니다.
- builder.Logging (ILoggingBuilder)
- 과거에 Log4Net이나 NLog를 복잡하게 초기화하던 것을 표준화해 줍니다.
- 콘솔, 파일 등 원하는 목적지를 코드 한 줄로 추가할 수 있습니다.
LIST
'.NET' 카테고리의 다른 글
| MFC 개발자 대상 .NET 8 기반 IPC 샘플 코드 기반 교육 (0) | 2026.06.16 |
|---|---|
| .NET 8 개발 전환을 위한 핵심 개발자 패러다임 시프트 교육 로드맵 (0) | 2026.06.16 |
| CancellationTokenSource 핵심 사용법 (0) | 2026.02.25 |
| C#에서도 inet_addr과 동일한 역할을 수행하는 함수 (0) | 2026.02.04 |
| XDF0003 Microsoft.Windows.Shell 오류 발생 해결 방법 (1) | 2026.01.23 |