WPF 강좌, Entity Framework와 WPF를 사용한 CRUD 애플리케이션 만들기

Windows Presentation Foundation(WPF)는 마이크로소프트에서 제공하는 UI 프레임워크로, 데스크탑 애플리케이션을 개발하는 데 사용됩니다. WPF는 사용자 인터페이스(UI)를 구성하는 데 있어 강력한 도구를 제공하며, 다양한 데이터 바인딩 및 관계형 데이터 저장소와의 통합을 쉽게 할 수 있게 해줍니다. 이 강좌에서는 Entity Framework를 사용하여 WPF 애플리케이션에서 CRUD(생성, 읽기, 수정, 삭제) 작업을 구현하는 방법을 자세히 설명합니다.

1. WPF 및 Entity Framework 소개

WPF는 XAML(Extensible Application Markup Language)을 사용하여 UI를 디자인할 수 있는 기능을 제공합니다. 데이터 바인딩, 스타일 지정, 애니메이션 등의 기능을 통해 복잡한 사용자 인터페이스를 쉽게 구성할 수 있습니다. 한편, Entity Framework는 ORM(Object-Relational Mapping) 프레임워크로, 관계형 데이터베이스의 데이터를 객체로 매핑하여 데이터 조작을 쉽게 만들어줍니다. WPF와 Entity Framework를 조합하면, 데이터 중심 애플리케이션을 쉽게 개발할 수 있습니다.

2. 개발 환경 설정

본 강좌에서는 Visual Studio 2022를 사용하여 WPF 애플리케이션을 개발할 것입니다. 또한, Entity Framework Core를 사용하여 데이터베이스와 상호작용합니다. 아래는 개발 환경을 설정하는 단계입니다.

  • Visual Studio 2022를 다운로드하고 설치합니다.
  • 새 프로젝트를 생성하고, WPF App(.NET Core) 템플릿을 선택합니다.
  • 개발에 필요한 NuGet 패키지를 설치합니다. 여기서는 Entity Framework Core와 그에 맞는 데이터베이스 공급자 (예: Microsoft.EntityFrameworkCore.SqlServer)를 설치합니다.
  • 프로젝트의 앱 설정 파일 (appsettings.json)에 데이터베이스 연결 문자열을 설정합니다.

3. 데이터 모델 정의

CRUD 애플리케이션에서 가장 중요한 부분은 데이터 모델입니다. Entity Framework를 사용하면 C# 클래스를 데이터 모델로 사용할 수 있습니다. 아래는 예제로 사용할 “Product” 모델을 정의하는 방법입니다.


public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

위의 Product 클래스는 제품의 ID, 이름, 가격을 나타냅니다. 이제 이 모델을 데이터베이스와 동기화하기 위해 DbContext 클래스를 생성합니다.


using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
    public DbSet Products { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("YourConnectionStringHere");
    }
}

4. 마이그레이션과 데이터베이스 생성

데이터 모델을 정의한 후, 데이터베이스를 생성하고 이를 업데이트하는 것이 필요합니다. 이는 Entity Framework의 마이그레이션 기능을 통해 이루어집니다. 터미널 또는 패키지 관리 콘솔에서 다음 명령어를 실행하여 초기 마이그레이션을 생성합니다.

Add-Migration InitialCreate
Update-Database

위의 명령어를 순서대로 실행하면 데이터베이스가 생성되고, 정의한 Product 모델에 대한 테이블이 생성됩니다.

5. WPF UI 구성

이제 실제 WPF 사용자 인터페이스를 구성해 보겠습니다. XAML 파일에서 데이터 작업을 위한 버튼과 데이터 표시를 위한 데이터 그리드(DataGrid)를 추가합니다.



    
        
            
                
                
                
            
        
        
        
        
    


6. ViewModel 및 데이터 바인딩

MVVM(Model-View-ViewModel) 패턴은 WPF 애플리케이션에서 널리 사용됩니다. ViewModel을 사용하여 모델과 뷰 간의 데이터를 바인딩할 수 있습니다. 아래는 ViewModel을 정의하는 방법입니다.


using System.Collections.ObjectModel;

public class ProductViewModel
{
    public ObservableCollection Products { get; set; }

    public ProductViewModel()
    {
        using (var context = new AppDbContext())
        {
            Products = new ObservableCollection(context.Products.ToList());
        }
    }

    public void AddProduct(Product product)
    {
        using (var context = new AppDbContext())
        {
            context.Products.Add(product);
            context.SaveChanges();
        }
    }

    public void EditProduct(Product product)
    {
        using (var context = new AppDbContext())
        {
            context.Products.Update(product);
            context.SaveChanges();
        }
    }

    public void DeleteProduct(int productId)
    {
        using (var context = new AppDbContext())
        {
            var product = context.Products.Find(productId);
            if (product != null)
            {
                context.Products.Remove(product);
                context.SaveChanges();
            }
        }
    }
}

7. CRUD 작업 구현

이제 UI와 ViewModel을 연결하고 CRUD 작업을 구현할 준비가 되었습니다. 버튼 클릭 이벤트에 CRUD 메서드를 호출하면 됩니다. 다음은 버튼 클릭 이벤트를 구현하는 방법입니다.


private ProductViewModel viewModel;

public MainWindow()
{
    InitializeComponent();
    viewModel = new ProductViewModel();
    DataContext = viewModel;
}

private void AddButton_Click(object sender, RoutedEventArgs e)
{
    var newProduct = new Product
    {
        Name = "New Product",
        Price = 9.99m
    };
    viewModel.AddProduct(newProduct);
}

private void EditButton_Click(object sender, RoutedEventArgs e)
{
    // Edit logic
}

private void DeleteButton_Click(object sender, RoutedEventArgs e)
{
    // Delete logic
}

8. 최적화 및 마무리

CRUD 애플리케이션을 완성한 후, 코드의 최적화 및 안정성을 높이기 위해 에러 핸들링 및 유효성 검사 등의 추가 작업을 고려할 수 있습니다. 매번 데이터베이스 접근 시마다 새로운 DbContext 인스턴스를 생성하는 것은 성능에 영향을 미칠 수 있으므로, IoC(제어의 역전) 등을 통한 의존성 주입을 고려해볼 필요가 있습니다.

WPF와 Entity Framework를 사용하여 CRUD 애플리케이션을 만드는 과정을 살펴보았습니다. 이 강좌에서 설명한 내용은 단순한 예시에 불과하며, 실제 애플리케이션에서는 더 고급 기능과 아키텍처를 고려해야 할 것입니다.

9. 결론

WPF 및 Entity Framework를 사용하는 기술은 강력하며, 다양한 데이터를 처리하는 애플리케이션을 만들 수 있는 매우 유용한 조합입니다. 본 강좌를 통해 CRUD 애플리케이션의 기본 구조를 이해하고, 실제로 WPF와 Entity Framework를 활용하는 방법을 배우는 데 도움이 되었길 바랍니다.

앞으로 더 나아가어 복잡한 비즈니스 로직을 처리하거나, 다양한 사용자 인터페이스를 구축하여, 사용자 경험을 향상시키는 데에도 많은 응용이 가능할 것입니다.