[java] Hibernate에서 단일 테이블 전략(Single Table Strategy)과 클래스 테이블 전략(Class Table Strategy)의 차이점은?

Hibernate는 자바 언어 기반의 ORM(Object Relational Mapping) 도구로서, 객체 지향 프로그래밍 언어인 자바와 관계형 데이터베이스 간의 연결과 데이터 변환을 자동화해줍니다. 이를 통해 개발자는 SQL 쿼리를 직접 작성하지 않고도 객체를 통해 데이터베이스 작업을 수행할 수 있습니다.

단일 테이블 전략(Single Table Strategy)과 클래스 테이블 전략(Class Table Strategy)은 Hibernate에서 상속과 관련된 두 가지 주요 전략입니다.

  1. 단일 테이블 전략(Single Table Strategy) 단일 테이블 전략은 상속 계층 구조의 각 클래스를 하나의 테이블로 매핑하는 전략입니다. 이 전략을 사용하면 상속 계층의 모든 속성을 단일 테이블에 저장하게 되므로, 테이블의 컬럼 수가 증가할 수 있습니다. 부모 클래스와 자식 클래스의 속성이 매우 다를 경우에는 비효율적일 수 있습니다. 또한, 자식 클래스에서만 사용하는 속성이 많을 경우에도 이 전략은 부적합합니다.

  2. 클래스 테이블 전략(Class Table Strategy) 클래스 테이블 전략은 각 클래스와 테이블을 일대일로 매핑하는 전략입니다. 부모 클래스와 각각의 자식 클래스를 별도의 테이블로 생성하고, 각 테이블의 관계를 키를 이용하여 연결합니다. 이 전략을 사용하면 상속 계층 구조의 각 클래스가 독립적인 테이블을 가지므로, 유연하게 속성을 추가하거나 제거할 수 있습니다. 하지만 이에 따라 복잡한 JOIN 연산이 필요할 수 있으며, 데이터 일관성을 위해 적절한 트랜잭션 처리가 필요합니다.

단일 테이블 전략과 클래스 테이블 전략을 선택할 때는 상속 계층의 구조와 속성들의 특성을 고려해야 합니다. 비슷한 속성들을 가지고 있고 테이블의 컬럼 수가 크게 증가하지 않는 경우에는 단일 테이블 전략을 사용하는 것이 간편하고 효율적일 수 있습니다. 그러나 속성이 많이 다르거나 자식 클래스에서만 사용되는 속성들이 많은 경우에는 클래스 테이블 전략을 사용하여 유연성과 일관성을 확보하는 것이 좋습니다.