웹서버/C# + 유니티로 만드는 MMORPG 게임 개발 (3) - 웹서버

Entity Framework Core 데이터 모델링

monstro 2025. 5. 6. 13:42
728x90
반응형

기존의 GameResult 클래스를 대상으로 Add Migration 명령어를 입력하게 되면

자동적으로 Migration되어 해당 클래스 기반으로 데이터 테이블을 생성하게 되는 것을 확인하였습니다.

 

 

또한 따로 지정하지 않아도 프로퍼티 IdPrimary Key로 지정하게 되는 것도 확인할 수 있습니다.

위와 같은 과정을 데이터 모델링으로 부를 수 있습니다.

데이터 모델링주어진 개념으로부터 논리적인 데이터 모델을 구성하는 작업을 의미하는데

크게 다음의 3가지로 분류할 수 있습니다.

  • Convention(관례) : 기본적으로 설정된 규칙을 따라서 데이터 모델링이 이뤄집니다.
  • Data Annotation(데이터 주석) : 어트리뷰트를 이용하여 데이터 테이블의 속성에 대한 세부사항을 설정합니다.
  • Fluent API(직접 정의) : DbContext에서 OnModelCreating 메서드를 오버라이드하여 데이터 테이블을 생성합니다.

 

1) Convention 모델링 

Convention에 따라 자동으로 데이터 테이블을 생성하게 해주는 프레임워크Entity Framework라고 부르고,

그런 Entity Framework가 참조하는 클래스Entity Class라고 부릅니다.

위와 같은 Entity Class에는 몇가지 규칙이 존재합니다.

  • 1) 반드시 public 클래스로 정의되야 합니다.
  • 2) static으로 존재해서는 안됩니다.
  • 3) 생성자는 없거나, 인자가 없는 생성자만 있어야 합니다.
  • 4) id / 클래스id 라는 이름의 프로퍼티를 기본키로 간주합니다.

 

또한, Conventrion으로 생성되는 데이터 테이블이 생성되는 원리가 존재하는데, 다음과 같습니다.

  • 1) 프로퍼티의 이름이 테이블의 컬럼 이름으로 사용
  • 2) 프로퍼티의 타입을 해당하는 SQL 타입으로 변환
  • 3) C#의 nullable이 테이블의 컬럼 nullable에 영향을 줌

 

2) Data Annotation 모델링 

Data Annotation 방식에서는 어트리뷰트를 사용하여 데이터 테이블의 속성에 대한 세부사항을 설정할 수 있습니다.

또한 Data Annotation 방식을 사용하면 Web API 방식 외에

Blazor 방식에서의 Form Validation 기능에서도 사용할 수 있다는 장점이 있습니다.

 

3) Fluent API 모델링

Convention 방식이나 Annotation 방식으로 처리할 수 없는 모든 과정을 처리할 수 있습니다.

사용하기 위해서는 DbContext에서 OnModelCreating 메서드를 오버라이드합니다.

 

4) 각 모델링 별 데이터 테이블을 조작하는 방법

4 - 1) 데이터 베이스에서 특정 속성 제거하기

  • Data Annotation 방식 : NotMapped 어트리뷰트를 사용
  • Fluent API 방식 : Igonre 메서드를 사용

 

4 - 2) 데이터 베이스 컬럼에서 NULL / Size / Type 제어

  • Data Annotation 방식 :
    • Not NULL 설정 : Required 어트리뷰트를 사용
    • Set String Size : MaxLength 어트리뷰트를 사용
  • Fluent API 방식 :
    • Not NULL 설정 : IsRequired 메서드를 사용
    • Set String Size :  HasMaxLength 메서드를 사용
    • Set String Varchar : IsUnicode 메서드를 사용

 

4 - 3) 데이터 테이블의 기본키 설정

  • Convention 방식 : 프로퍼티 Id / 클래스Id가 자동으로 기본키로 지정
  • Data Annotation 방식 : Key 어트리뷰트를 사용
  • Fluent API 방식 : HasKey 메서드를 사용

 

4 - 4) 데이터 테이블의 인덱스 설정

  • Fluent API 방식만 가능 : HasIndex 메서드를 사용

 

4 - 5) 데이터 테이블의 이름 설정

  • Convention 방식 : Generic 자료형 DbSet으로 지정
  • Annotation 방식 : Table 어트리뷰트로 지정
  • Fluent API 방식 : ToTable 메서드로 지정

 

4 - 6) 데이터 테이블의 컬럼 이름 설정

  • Convention 방식 : 클래스 프로퍼티의 이름으로 설정 
  • Annotation 방식 : Column 어트리뷰트로 지정
  • Fluent API 방식 : HasColumnName 메서드로 지정

 

5) 데이터 모델링을 선택하는 방법

결국 데이터 모델링을 선택하여 클래스를 유의미한 데이터 테이블로 변환해야 합니다.

이런 경우 3가지 방법 중에서 한 가지를 택하여 수행하게 되는데,

이를 위한 선택 기준은 다음과 같이 정리할 수 있습니다.

  • 기본 상태로 충분하다, Convention을 사용합니다.
  • 그러나 Annotation으로 가능하다, 무조건 사용하는 것이 좋습니다.
    • 호환성이 높아 Blazor 방식에서도 사용이 가능하기 때문입니다.
  • 2가지 경우로도 부족하다Fluent API 방식을 사용하는 것이 좋습니다.
728x90
반응형

'웹서버 > C# + 유니티로 만드는 MMORPG 게임 개발 (3) - 웹서버' 카테고리의 다른 글

Entity Framework Core 데이터 관계 모델링  (0) 2025.05.06
Unity와 WebApi 연동  (0) 2025.05.05
Blazor와 Web API 연동  (0) 2025.05.05
WebApi #3  (0) 2025.04.30
WebApi #2  (0) 2025.04.29