JAVA & SPRING/JPA

상속관계 매핑

눈오는1월 2024. 3. 14. 03:12
728x90

본 내용은 인프런 김영한 강사님 JPA 기본 편 강의를 듣고 정리한 내용입니다.

https://www.inflearn.com/course/ORM-JPA-Basic

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 강의 - 인프런

회사땜에 매일 바쁜 와중에 학원이라도 다닐까 생각했는데 마침 JPA 강의가 생겨서 꿀 타이밍이네요. 저는 이 전에 JPA 책을 보고 공부 했었는데요 궁금했던 점, 업무에 적용하며 고민하고 해결하

www.inflearn.com

 

관계형 데이터베이스는 상속 관계가 존재하지 않고 그나마 유사한 것이 슈퍼타입 서브타입 관계 기법이 유사하다.

상속관계 매핑은 객체의 상속구조처럼 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다.

이러한 상속관계 매핑은 조인 전략, 단일 테이블 전략, 구현 클래스마다 테이블 전략 이렇게 3가지가 존재한다.

 

 조인 전략

각각의 테이블로 변환해서 사용하는 것이다.

조인 전략

위 예시처럼 겹치는 것은 Item이라는 테이블에 넣고 각각의 특징들을 따로 테이블을 만들어서 관리하는 기법이다.

 

코드로 구현하는 방법을 해보자

조인 전략 Item 엔티티
Album 엔티티
Book 엔티티
Movie 엔티티
테이블 생성 결과

@Inheritance(strategy = InheritanceType.JOINED) 어노테이션을 이용해서 조인 전략을 구현한다.

@DiscriminatorColumn() 해당 어노테이션을 이용해서 DTYPE을 설정할 수 있다. DTYPE은 ITEM테이블에 있는 값 어떤 값인지 확인할 수 있다. (단일 테이블 전략에서는 하나의 테이블이 모든 값이 존재하므로 없어도 DTYPE 생성된다)

@DiscriminnatorValue() DTYPE에 적힌 글자를 변경 할 수 있다. 기본은 엔티티 이름 그대로 가져온다.

 

조인 전략 예시를 한번 해보자

조인 전략 예시
조인 전략 예시 실행 결과

JPA에서 자동으로 Join해서 값을 가져와 주는 것을 확인할 수 있다.

조인 전략 예시 데이터베이스

위처럼 결과가 나오는 것을 알 수 있다.

 

조인 전략의 장단점

장점

  1. 테이블 정규화
  2. 외래 키 참조 무결성 제약조건 활용가능
  3. 저장공간 효율화

단점

  1. 조회시 조인 많이 사용 -> 성능 저하
  2. 조회 쿼리 복잡
  3. 데이터 저장 시에 INSERTSQL 2번 호출

 

단일 테이블 전략

하나의 테이블에서 모든 것을 관리하는 것을 말한다.

위 예시에서 Item 엔티티에 어노테이션만  고쳐주면 된다.

단일 테이블 전략
단일 테이블 전략 테이블 생성
단일 테이블 전략 실행 예시
단일 테이블 전략 예시 데이터베이스

단일 테이블 전략 장단점

 

장점

  1. 조인이 필요 없으므로 일반적으로 조회 성능이 빠름
  2. 조회 쿼리가 단순함

단점

  1. 자식 엔티티가 매핑한 칼럼은 모두 null 허용
  2. 단일 테이블에 모든 것을 저장해서 테이블이 커질 수도 있어서 상황에 따라 조회 성능이 오히려 느려질 수도 있다.

구현 클래스마다 테이블 전략

데이터베이스 설계자와 ORM 전문가 둘다 추천하지 않는 방식이다.

728x90