WPF 에서 DB 사용하기

안녕하세요.
spring 개발하다가 서버 프로그램 때문에 WPF 로 개발하고 있습니다.
C# 개발은 처음이라 거의 spring 개발하듯이 하고 있는데요.

이번에 DB 를 연동해야하는데 Spring의 경우 db 커넥션에 대해 ORM JDBC 등 이 있다면 WPF 에선 어떤 방식이 있는지 궁금합니다.

찾아보니까 대부분 DB 드라이브 별 Connection() 생성해서
SqlConnection conn = new SqlConnection(connStr);
conn.open() 등의 연결하는 방식이던데.
실무에서도 보통 이렇게 connection 생성해서 하는 방식을 많이 사용하시나요?

1 Like

아마, 많이 사용하고 있을 겁니다.

ORM 에 대해 거부감을 가지고 있거나, 익숙치 않은 영향이 있는 것 같습니다.

닷넷에는 문자열 쿼리를 사용하는 half-ORM(예, Dapper)도 있고, 전혀 사용하지 않는 full-ORM (Entity Framework Core)도 있습니다.

쿼리가 익숙하다면, 전자를, 타입 안전한 쿼리가 필요하다면, 후자를 사용합니다.

특히 Entity Framework Core는 DB로부터 맵핑 객체(엔티티(Entity) 라고 부름)를 생성하는 것(DB first approach)과, 엔티티 클래스로부터 DB를 디자인하는 것(Code-first approach)을 모두 지원합니다.

기축 DB를 바탕으로 코드 작업을 하건, DB를 신축하건 명령어 몇 개로 처리할 수 있어, 매우 효율적입니다.

그리고, 서버를 위해 Asp Net Core 라는 프레임워크도 있습니다.

5 Likes

우선 Dapper 로 시작해보겠습니다. 답변감사합니다

1 Like

Dapper 를 사용하더라도, EF core 의 디자인 도구를 사용하는 것이 업무 효율적이니, 참고하세요.

기축 DB 테이블로부터 맵핑 객체(Entity 클래스) 생성하기

Reverse Engineering - EF Core | Microsoft Learn

권한이 있는 연결 문자열만 얻을 수 있으면 휴먼 에러 없이, DB의 테이블로부터 맵핑 객체를 모두 생성할 수 있습니다.

다만, 데이터 베이스 View와 저장 프로시저가 반환하는 모델은 안 되는 한계가 있어, 수작업으로 처리해야 합니다.

Entity 클래스로 DB 생성/관리하기

Getting Started - EF Core | Microsoft Learn

엔티티 클래스의 변경이 있을 때 마다, 이를 휴먼 에러 없이 DB에 반영할 수 있습니다.

// 변경 전
public class Class
{
   public string Name {get; set;}
}
// 변경 후
public class Class
{
   public string Name { get; set; }
   public int Capacity { get; set; }
}

위 변경을 DB의 “Classes” 테이블에 반영하려면, 아래 두 가지 명령어로 끝납니다.

dotnet ef migrations add Added-Class.Capacity

migration은 git의 commit 과 유사한 개념입니다.
“Added-Class.Capacity” 는 마이그레이션 이름으로, (깃 커밋 Id + 커밋 메시지)의 개념입니다.

dotnet ef database update {마이그레이션 이름}

git push 와 유사한 개념으로, 마이그레이션을 DB에 반영합니다.

마이그레이션 이름을 지정해야 하지만, 지정하지 않으면 가장 마지막 마이그레이션(Added-Class.Capacity)이 자동으로 선택됩니다.

DB 업데이트

사실 EF Core 의 디자인 도구는 마이그레이션을 DB 에 반영하는 여러 가지 수단을 제공합니다.
그 중에 하나가 위에 소개한 database update 명령어 입니다.

이 명령은 개발 중 엔티티 클래스가 추가될 때마다, db 도 함께 업데이트 하는데 편리하기에, 기본적으로 많이 사용합니다.

아래 링크에 보시면, 두 가지 수단이 더 있음을 알 수 있습니다.

Applying Migrations - EF Core | Microsoft Learn

  1. 마이그레이션 => Sql 스크립트.
    DBA 검토 용.

  2. 마이그레이션 => 실행파일(Bundle).
    개발자가 아닌, 쿼리를 모르는 제 3자(고객)가 운영 DB를 생성할 때 사용.

참고

EF Core 로 생성된 DB에 쿼리를 날리기 위해 반드시 EF Core를 써야하는 것은 아닙니다.

DB를 생성하기 위해 EF 코어의 DB 디자인 도구를 사용했을 뿐, 생성된 DB는 그냥 DB인 것이죠.
그래서, 쿼리를 보낼 때는 원하는 수단 아무거나, 예를 들면, Dapper 를 사용하면 됩니다.

다만, EF Core 와 관련한 학습이 조금 필요한데, 업무 효율성 측면에서, 충분히 가치 있는 투자라고 생각합니다.

5 Likes