.NET/Database
EF Core 테이블 상속 매핑(TPC)
atawlee
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 전략은 독립적인 엔터티를 개별적으로 관리해야 하며, 성능 최적화가 필요한 경우 적합합니다.
로그 시스템처럼 서로 다른 성격의 데이터를 분리해서 저장해야 하는 경우에 효과적인 선택이 될 수 있습니다.