.NET MAUI — 개념, 아키텍처 및 크로스 플랫폼 개발

저자: IT Sectr 게시일: 2026-05-01 읽는 시간: 8 분

.NET MAUI는 C# 및 XAML로 네이티브 애플리케이션을 만들기 위한 크로스 플랫폼 Microsoft 프레임워크로, 2022년 .NET 6와 함께 출시되었습니다. Microsoft .NET MAUI Documentation, 2024에 따르면 MAUI는 iOS, Android, Windows, macOS 및 Tizen을 지원하며, 이를 공통 코드베이스를 가진 단일 프로젝트로 통합합니다. 이 프레임워크는 Xamarin.Forms의 직접적인 후속 제품입니다.

핵심 포인트

  • .NET MAUI — Xamarin.Forms의 후속 제품, 별도 SDK 없이 .NET 6+에 내장
  • 통합된 Single Project가 3개의 개별 플랫폼 프로젝트를 대체
  • XAML 및 C#은 선언적 UI 구축 및 비즈니스 로직에 사용
  • Handlers가 플랫폼 추상화를 위해 Xamarin.Forms의 기존 렌더러를 대체
  • 5개 플랫폼 지원: iOS, Android, Windows, macOS, Tizen

.NET MAUI란

.NET MAUI(Multi-platform App UI)는 Xamarin.Forms의 진화된 버전으로, .NET 6+를 위해 처음부터 다시 구축되었습니다. 각 플랫폼에 별도의 프로젝트가 필요했던 Xamarin.Forms와 달리, MAUI는 공유 .csproj 파일과 플랫폼 폴더(Platforms/iOS, Platforms/Android, Platforms/Windows, Platforms/MacCatalyst)를 사용하는 단일 구조를 사용합니다. 첫 번째 안정적인 MAUI 릴리스는 2022년 5월이었습니다.

.NET MAUI와 이전 제품의 주요 차이점은 .NET 8 BCL(기본 클래스 라이브러리)과의 완전한 통합입니다. 개발자는 추가 SDK 없이 System.Text.Json, System.Net.Http, System.Linq, System.IO 및 기타 API에 직접 액세스할 수 있습니다. Xamarin.Forms는 공유 로직에 .NET Standard 2.0을 사용했으며, 이는 새로운 .NET 플랫폼 기능에 대한 액세스를 제한했습니다.

Microsoft Build 2024에 따르면, .NET MAUI는 App Store 및 Google Play에서 40,000개 이상의 애플리케이션에서 사용됩니다. 주목할 만한 프로젝트로는 UPS Mobile, The Weather Channel 및 Siemens Teamcenter가 있습니다. Microsoft는 2024년 11월로 예정된 .NET 9의 일부로 MAUI를 적극적으로 개발하고 있습니다.

.NET MAUI의 역사와 기원

.NET MAUI의 발표는 .NET 통합 전략의 일환으로 Microsoft Build 2020에서 이루어졌습니다. Microsoft는 .NET Core, Mono 및 .NET Framework를 단일 .NET 5+ 플랫폼으로 통합했습니다. Xamarin.Forms는 MAUI의 기반이 되었지만, 코드베이스는 완전히 다시 작성되었습니다: 오래된 API가 제거되고, 렌더러가 Handlers로 대체되었으며, DependencyService가 DI 컨테이너로 대체되었습니다.

.NET MAUI 8(2023년 11월)은 Native AOT 지원, 향상된 CollectionView 성능, Blazor Hybrid(MAUI 애플리케이션에 Blazor 구성 요소 포함) 및 새 글꼴 매핑을 추가했습니다. .NET MAUI 9(2024)에는 C# 12 지원, 향상된 WinUI 3 및 macOS Sonoma 통합, 그리고 모든 플랫폼을 위한 새로운 Drag & Drop API가 포함되어 있습니다.

.NET MAUI와 Xamarin.Forms의 차이점

첫 번째 차이점은 단일 애플리케이션입니다. Xamarin.Forms에서 iOS와 Android는 하나의 솔루션에 두 개의 별도 프로젝트가 필요했습니다. .NET MAUI에서는 플랫폼 폴더가 있는 하나의 프로젝트입니다. 이는 코드 탐색, 종속성 관리 및 CI/CD 파이프라인을 단순화합니다. .csproj 파일은 TargetFrameworks: net8.0-android, net8.0-ios, net8.0-maccatalyst와 함께 SDK 스타일 형식을 사용합니다.

두 번째 차이점은 렌더러 대신 Handlers를 사용하는 렌더링 아키텍처입니다. Xamarin.Forms에서 각 요소(Button, Label)에는 네이티브 컨트롤을 생성하는 자체 Renderer 클래스가 있었습니다. 사용자 지정에는 Custom Renderer가 필요했습니다. MAUI에서 Handler는 추상 요소를 네이티브 컨트롤에 매핑하고 컨트롤을 다시 만들지 않고 속성을 업데이트하는 Property Mappers를 지원하는 경량 개체입니다.

세 번째 차이점은 통합 DI 컨테이너 Microsoft.Extensions.DependencyInjection입니다. Xamarin.Forms는 플랫폼 구현 등록에 DependencyService를 사용했습니다. MAUI는 DI를 프레임워크 코어에 내장합니다: 서비스는 MauiAppBuilder에 등록되고, 컨트롤러는 생성자를 통해 종속성을 받습니다. 이는 테스트를 단순화하고 현대적인 .NET 관행을 따릅니다.

.NET MAUI 아키텍처

.NET MAUI 아키텍처는 다계층 모델을 기반으로 합니다. 최하위 계층은 .NET BCL 및 Mono Runtime(Android) / CoreCLR(Windows) / NativeAOT(iOS)입니다. 중간 계층은 프레임워크 코어(Handlers, Layout, Graphics, Controls)가 있는 Microsoft.Maui.dll입니다. 최상위 계층은 XAML 페이지, ViewModel 및 서비스가 있는 개발자의 애플리케이션입니다.

Single Project 및 Multi-Targeting

Single Project는 .NET MAUI의 주요 아키텍처 기능입니다. 모든 파일은 공유 코드(Shared), 플랫폼 코드(Platforms) 및 리소스(Resources)의 세 가지 범주로 나뉩니다. .csproj의 Multi-targeting은 애플리케이션이 어떤 플랫폼용으로 빌드되는지 지정합니다. 각 플랫폼은 자체 Platforms 폴더와 공유 코드만 컴파일합니다.

플랫폼 코드는 조건부 폴더에 배치됩니다. Platforms/Android에는 MainActivity.cs, MainApplication.cs 및 AndroidManifest.xml이 포함됩니다. Platforms/iOS — AppDelegate.cs, Info.plist 및 Entitlements.plist. Platforms/Windows — Package.appxmanifest 및 App.xaml. 조건부 컴파일을 위해 코드는 #if ANDROID, #if IOS, #if WINDOWS, #if MACCATALYST 지시문을 사용합니다.

.NET MAUI의 XAML 및 MVVM

XAML은 Xamarin.Forms 및 WPF에서 상속된 선언적 마크업 언어입니다. .NET MAUI에서 XAML은 페이지(ContentPage), 레이아웃(VerticalStackLayout, Grid, FlexLayout), 요소(Label, Entry, Button, Image) 및 컨트롤(CollectionView, CarouselView)을 설명하는 데 사용됩니다. XAML은 빌드 시 BAML 형식으로 컴파일됩니다.

MVVM 패턴은 CommunityToolkit.Mvvm(Microsoft의 오픈 소스 라이브러리)을 통해 구현됩니다. [ObservableProperty] 특성은 INotifyPropertyChanged 속성을 생성하고, [RelayCommand]는 메서드에서 명령을 만듭니다. CommunityToolkit.Mvvm 8.2 Source Generator는 partial class ViewModel을 변환하여 Reflection 없이 ObservableObject를 생성합니다. 이는 수동 구현에 비해 Binding을 30%까지 가속화합니다.

.NET MAUI 애플리케이션 예제

csharp
using Microsoft.Maui;
using Microsoft.Maui.Controls;

namespace MauiApp;

public class MainPage : ContentPage
{
    public MainPage()
    {
        Title = "MAUI App";
        
        Content = new VerticalStackLayout
        {
            Spacing = 12,
            Padding = new Thickness(16),
            Children =
            {
                new Label
                {
                    Text = "Hello, .NET MAUI!",
                    FontSize = 24,
                    FontAttributes = FontAttributes.Bold
                },
                new Button
                {
                    Text = "클릭하세요",
                    BackgroundColor = Colors.Blue,
                    TextColor = Colors.White,
                    Command = new Command(async () =>
                        await DisplayAlert("안녕하세요", "세계", "OK"))
                }
            }
        };
    }
}

플랫폼 및 지원

.NET MAUI는 5개 플랫폼을 지원합니다: iOS 15.0+, Android 5.0(API 21)+, Windows 10 1809+, macOS 12.0+(MacCatalyst) 및 Tizen 6.5+. 각 플랫폼은 자체 컨트롤 및 API 세트를 사용합니다. iOS는 Mac Catalyst를 통해 UIKit을 사용하고, Android는 Xamarin.Android를 통해 AndroidX, Windows는 WinUI 3, macOS는 Mac Catalyst를 통해 AppKit을 사용합니다.

iOS 및 Android에서 MAUI는 Xamarin.Forms와 동일한 렌더링 메커니즘(네이티브 UI 컨트롤)을 사용합니다. 그러나 Handlers는 더 유연한 사용자 지정을 제공합니다. iOS에서 플랫폼별 Button 구성을 위해 PlatformConfiguration.iOS와 함께 OnPlatform<Button>이 사용됩니다. Windows의 경우 MAUI는 WinUI 3(Fluent Design System을 지원하는 Microsoft의 최신 UI 프레임워크)를 사용합니다.

macOS 지원은 Mac Catalyst(Mac에서 UIKit 애플리케이션을 실행하는 Apple의 기술)를 통해 추가되었습니다. 이를 통해 애플리케이션의 macOS 버전에 MAUI iOS 코드의 100%를 재사용할 수 있습니다. 특정 Mac 기능(Menu Bar, Touch Bar)의 경우 MAUI는 Mac Catalyst 및 NSView 래퍼를 통해 플랫폼 API를 제공합니다.

Tizen은 Samsung의 Smart TV, 스마트폰 및 스마트 워치용 플랫폼입니다. .NET MAUI의 Tizen 지원은 Samsung Tizen .NET을 통해 구현됩니다. MAUI 애플리케이션은 Samsung TizenFX 바인딩을 통해 Tizen용으로 컴파일됩니다. 그러나 Tizen은 Microsoft의 우선 플랫폼이 아닙니다 — 업데이트는 1–2개월 지연되어 출시됩니다.

플랫폼최소 버전UI 프레임워크상태
iOSiOS 15.0UIKit(Mac Catalyst)안정
AndroidAPI 21(5.0)AndroidX / Material 3안정
WindowsWin 10 1809WinUI 3 / Fluent Design안정
macOSmacOS 12.0AppKit(Mac Catalyst)안정
TizenTizen 6.5TizenFX / Samsung추가

.NET MAUI의 장점

통합 코드베이스 — .NET MAUI는 코드 중복을 줄입니다. C# 및 XAML의 단일 프로젝트가 5개 플랫폼용으로 컴파일되어 단순한 UI를 가진 애플리케이션에 최대 95%의 공유 코드를 제공합니다. 비즈니스 로직, 서비스, 데이터 모델 및 HTTP 클라이언트는 공유 코드에 있습니다. 플랫폼별 기능(카메라, 위치 정보, 생체 인식)만 DI를 통해 별도의 구현이 필요합니다.

성능은 .NET MAUI가 Xamarin.Forms보다 높습니다. Handlers는 렌더링 오버헤드를 줄입니다: Microsoft 테스트에 따르면 Xamarin.Forms 5.0과 비교하여 화면 렌더링 시간이 20–30% 감소합니다. iOS의 Native AOT는 C# 코드를 ARM64 명령어로 직접 컴파일하여 JIT 컴파일을 제거하고 시작 시간을 40% 단축합니다.

Blazor Hybrid는 .NET MAUI의 고유한 기능입니다. BlazorWebView는 MAUI 애플리케이션에 Blazor 구성 요소를 직접 포함합니다. 웹 인터페이스 개발자는 모바일 애플리케이션에서 Blazor 구성 요소(Razor 페이지, JS interop, CSS 스타일)를 재사용할 수 있습니다. Blazor Hybrid는 Blazor 구성 요소 코드를 변경하지 않고 모든 5개 MAUI 플랫폼에서 작동합니다.

.NET 생태계 — 수천 개의 NuGet 패키지에 액세스: 데이터베이스 작업을 위한 Entity Framework Core, 로깅을 위한 Serilog, HTTP 요청 재시도를 위한 Polly, 유효성 검사를 위한 FluentValidation. CommunityToolkit.Maui는 Popup, Toast, Snackbar, 접근성을 위한 SemanticScreenReader 등 즉시 사용 가능한 UI 요소를 제공합니다. .NET MAUI는 Azure, SignalR 및 Microsoft Graph SDK와 통합됩니다.

개발 도구 — Visual Studio 2022 및 JetBrains의 Rider. XAML Hot Reload는 애플리케이션을 다시 시작하지 않고 1–2초 만에 UI를 업데이트합니다. C# Hot Reload(.NET 6+부터)는 프로세스를 다시 시작하지 않고 메서드 변경을 다시 컴파일합니다. Visual Studio Debugger, Profiler 및 IntelliCode는 성능 진단 및 코드 품질을 위한 도구 키트를 보완합니다.

자주 묻는 질문

.NET MAUI란 무엇인가요?

.NET MAUI는 iOS, Android, Windows, macOS 및 Tizen용 C# 및 XAML로 네이티브 애플리케이션을 만들기 위한 Microsoft의 크로스 플랫폼 프레임워크입니다. Xamarin.Forms의 후속 제품으로, .NET 6+에 내장되어 있으며 각 플랫폼에 대한 별도 프로젝트 대신 단일 프로젝트(Single Project)를 사용합니다.

.NET MAUI와 Xamarin.Forms는 어떻게 다른가요?

.NET MAUI는 단일 프로젝트, 렌더러 대신 Handlers, 내장 DI 컨테이너, iOS용 Native AOT 및 Blazor Hybrid를 사용합니다. Xamarin.Forms는 각 플랫폼에 별도의 프로젝트가 필요하고, UI 사용자 지정에 Custom Renderer, DI에 DependencyService를 사용하며 Blazor를 지원하지 않습니다. .NET MAUI는 .NET의 일부이고, Xamarin.Forms는 별도 SDK입니다.

.NET MAUI가 macOS를 지원하나요?

네, .NET MAUI는 Mac Catalyst(최소 버전 macOS 12.0)를 통해 macOS를 지원합니다. MAUI의 iOS 애플리케이션은 코드 변경 없이 자동으로 Mac용으로 컴파일됩니다. 기본 Mac 기능(Menu Bar, Dock, Touch ID)의 경우 Platforms/MacCatalyst 폴더에서 Mac Catalyst 및 NSView 래퍼를 통한 플랫폼 호출이 사용됩니다.

.NET MAUI에서 Flutter 패키지를 사용할 수 있나요?

아니요, .NET MAUI는 Dart/Flutter 패키지와 호환되지 않습니다. MAUI는 .NET 생태계와 NuGet 패키지를 사용합니다. 플랫폼별 기능(카메라, Bluetooth, 생체 인식)의 경우 Android Bindings(Kotlin/Java) 및 iOS Bindings(Objective-C/Swift)를 통한 네이티브 라이브러리가 사용됩니다. CommunityToolkit.Maui는 일반적인 시나리오에 대한 즉시 사용 가능한 래퍼를 제공합니다.

.NET MAUI가 네이티브 애플리케이션보다 느린가요?

성능 차이는 미미합니다. iOS에서 Handlers 및 Native AOT를 사용하는 .NET MAUI는 네이티브 SwiftUI 애플리케이션 성능의 95–98%를 달성합니다. Android에서는 UI 렌더링 테스트(Microsoft Benchmarks, 2024)에서 Kotlin 애플리케이션과의 차이가 3–7%입니다. 대부분의 비즈니스 애플리케이션의 경우 사용자가 차이를 인식하지 못합니다.

요약

  • .NET MAUI — C# 및 XAML 기반 크로스 플랫폼 Microsoft 프레임워크, Xamarin.Forms의 후속 제품
  • Single Project와 멀티 타겟팅으로 3개의 개별 프로젝트를 하나의 구성으로 대체
  • Handlers는 Xamarin.Forms 렌더러보다 빠른 렌더링 제공
  • Blazor Hybrid를 통해 웹 구성 요소를 모바일 애플리케이션에 직접 포함 가능
  • 5개 플랫폼 — iOS 15+, Android 5.0+, Windows 10, macOS 12+, Tizen 6.5+
  • iOS의 Native AOT는 시작 시간을 40% 단축하고 바이너리 크기 감소
  • 크로스 플랫폼 기능과 네이티브 API 액세스가 필요한 .NET 프로젝트에는 .NET MAUI를 선택하세요

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기