-
EF Core 테이블 상속 매핑(TPC).NET/Database 2025. 3. 10. 15:02
TPC (Table Per Concrete) 매핑 전략
TPC(Table Per Concrete) 매핑 방법은 부모 클래스의 테이블을 생성하지 않고, 자식 테이블에서 부모 타입의 속성을 공통적으로 포함하는 전략입니다.
1. Log 클래스 작성
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Database.Entity; public abstract class Log { [Key] public int Id { get; set; } public DateTime Timestamp { get; set; } = DateTime.UtcNow; [MaxLength(1000)] public string Message { get; set; } = string.Empty; } public class SystemLog : Log { [MaxLength(50)] public string LogLevel { get; set; } = "Info"; // 예: "Info", "Warning", "Critical" } public class ErrorLog : Log { [MaxLength(1000)] public string ExceptionMessage { get; set; } = string.Empty; [MaxLength(1000)] public string StackTrace { get; set; } = string.Empty; }
2. DbContext 작업
//이전 작업내용은 생략합니다. public partial class ShopDbContext : DbContext { public DbSet<SystemLog> SystemLogs { get; set; } public DbSet<ErrorLog> ErrorLogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Log>() .UseTpcMappingStrategy(); } }
3. TPC 매핑 전략 특징
- Log 테이블은 생성되지 않음.
- SystemLogs와 ErrorLogs 테이블이 각각 생성되며, Log 클래스의 공통 속성(Id, Timestamp, Message)을 포함.
- DbSet<Log>이 없으므로 Log 타입만 단순히 공통 구조를 제공.
4. TPC 전략의 활용 포인트
📌 언제 TPC를 사용해야 할까?
1. 추상 클래스의 인스턴스를 직접 저장할 필요가 없을 때
- Log 테이블을 따로 만들지 않고, 공통된 컬럼을 개별 테이블(SystemLogs, ErrorLogs)에서 유지할 때 유용합니다.
- DbSet<Log>을 사용하지 않으므로, 부모 클래스의 인스턴스를 직접 저장할 필요가 없습니다.
2. 공통 테이블 없이 동일한 컬럼 구조를 가지도록 할 때
- Log 테이블 없이도 Id, Timestamp, Message와 같은 공통 필드를 자동으로 포함하는 방식입니다.
- 테이블 간 스키마 일관성을 유지하면서도 개별 테이블로 분리할 수 있습니다.
3. 자식 클래스가 독립적인 테이블로 존재해야 할 때
- SystemLog와 ErrorLog가 개별 테이블로 저장되므로, 특정 로그 타입만 선택적으로 관리하기가 쉽습니다.
- 필요에 따라 특정 로그 테이블(SystemLogs 또는 ErrorLogs)만 조회할 수 있어 운영이 간편합니다.
4. 테이블 조인을 최소화하고 성능을 향상하고 싶을 때
- 부모 테이블이 없으므로 조인 부담이 사라지며, 직접적으로 테이블을 조회할 수 있습니다.
- 예를 들어, SystemLogs 테이블만 빠르게 검색하고 싶을 때, 추가적인 조인 없이 바로 데이터를 가져올 수 있습니다.
- 테이블이 독립적으로 존재하기 때문에, TPT(Table Per Type)보다 조회 성능이 개선될 수 있습니다.
5. 결론
TPC 전략은 독립적인 엔터티를 개별적으로 관리해야 하며, 성능 최적화가 필요한 경우 적합합니다.
로그 시스템처럼 서로 다른 성격의 데이터를 분리해서 저장해야 하는 경우에 효과적인 선택이 될 수 있습니다.'.NET > Database' 카테고리의 다른 글
50 EF Core Interview Questions (1~25) (0) 2025.03.11 EF Core 테이블 상속 매핑 (TPH) (0) 2025.03.10 EF Core 테이블 상속 매핑 (TPT) (0) 2025.02.17 EF Core - (부록) Project Setup (0) 2025.02.03 EF Core - Code First (0) 2025.01.11