1 분 소요

서론

JPA(Entity Manager)를 사용하다보면 Entity 클래스 간의 상속 관계를 맺어야 하는 경우가 있습니다. 이때, JPA는 여러 가지 상속 전략을 제공하는데, 각각의 전략에는 장단점이 있습니다. 이번 포스트에서는 JPA에서 지원하는 Entity 상속 전략들을 비교 분석해보겠습니다.

상속 전략 종류

JPA에서는 다음과 같은 세 가지의 Entity 상속 전략을 지원합니다:

  • 단일 테이블 전략(Single Table Strategy)
  • 구현 클래스마다 테이블 전략(Table per Concrete Class Strategy)
  • 클래스마다 테이블 전략(Table per Class Strategy)

각 전략의 장단점 분석

각 전략의 장단점을 살펴보겠습니다.

단일 테이블 전략(Single Table Strategy)

  • 장점:
    • 한 테이블에 모든 서브 클래스의 필드를 포함하므로 JOIN이 필요 없어 성능이 우수합니다.
    • 구현이 간단하고 유지보수가 쉽습니다.
  • 단점:
    • NULL 값을 허용해야 하므로 테이블이 커질 수 있습니다.
    • 서브 클래스마다 다른 컬럼이 많을 때 테이블이 복잡해질 수 있습니다.

구현 클래스마다 테이블 전략(Table per Concrete Class Strategy)

  • 장점:
    • 각 클래스마다 별도의 테이블을 가지므로 정규화에 부합합니다.
    • 테이블이 간결하고 명확합니다.
  • 단점:
    • JOIN이 필요하므로 성능이 저하될 수 있습니다.
    • 상속 구조를 유지하기 어려울 수 있습니다.

클래스마다 테이블 전략(Table per Class Strategy)

  • 장점:
    • 각 클래스마다 별도의 테이블을 가지며 JOIN이 필요 없어 성능이 우수합니다.
    • 테이블이 명확하고 구조가 간단합니다.
  • 단점:
    • 테이블이 많아지므로 스키마가 복잡해질 수 있습니다.
    • 상속 구조 변경 시 테이블을 변경해야 하므로 유지보수가 어려울 수 있습니다.

마크다운 테이블로 정리

다음은 각 상속 전략의 장단점을 표로 정리한 것입니다.

전략 장점 단점
단일 테이블 전략 성능 우수, 구현 간단 NULL 값 허용, 테이블 복잡
구현 클래스마다 테이블 전략 정규화, 명확한 테이블 JOIN 필요, 유지보수 어려움
클래스마다 테이블 전략 성능 우수, 명확한 구조 테이블 복잡, 유지보수 어려움

실무에서의 활용 팁

  • 상속 구조가 간단하고 성능이 중요한 경우에는 단일 테이블 전략을 고려해보세요.
  • 구현 클래스마다 테이블이 각각 필요하고 정규화가 필요한 경우에는 Table per Concrete Class Strategy를 선택해보세요.
  • 상속 구조가 복잡하고 성능이 우선시되는 경우에는 클래스마다 테이블 전략을 고려해보세요.

마무리

이번 포스트에서는 JPA의 Entity 상속 전략에 대해 알아보았습니다. 각 전략마다 장단점이 있으니 프로젝트의 요구사항에 맞게 적절한 전략을 선택하여 사용해야 합니다. 각 전략을 잘 이해하고 활용하여 효과적인 데이터 모델링을 진행해보세요.