20220317 TIL

2022. 3. 17. 18:00
  • 김영한님의 강의 <자바 ORM 표준 JPA 프로그래밍> 
    • 상속 관계 매핑에 대한 3가지 방법에 대해서 배웠다.
    • mapped_superclass 개념, 사용되는 경우에 대해서 배웠다.
  • A. 조인 전략 
@Inheritance(strategy = InheritanceType.JOINED)

JPA의 동작방식에 가장 유사한 방식. 각각의 테이블 마다 INSERT 쿼리를 전송하여, 각각의 테이블로 반환. 필드에 맞게 테이블을 조인하는 방식이다. 

장점

  •  저장공간 효율화가 가능하다.
  • PK 값을 공유하기 때문에, 외래 키 참조 무결성 제약조건이 활용가능하다.
  • 테이블 정규화가 가능하다.
  • *참조 무결성?  값이 NULL, 참조 릴레이션의 기본키 값과 동일해야 한다.

단점

  • 조회 시 조인을 많이 사용, 성능 저하를 일으킨다.
  • 조회 쿼리가 복잡하다
  • 데이터 저장시 INSERT SQL이 2번 호출된다.

 

  • B. 단일 테이블 전략
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
 create table Item (
       DTYPE varchar(31) not null,
        id bigint not null,
        name varchar(255),
        price integer not null,
        artist varchar(255),
        author varchar(255),
        isbn varchar(255),
        actor varchar(255),
        director varchar(255),
        primary key (id)
    )

하나의 논리 테이블에 상속 테이블들의 필드를 모두 담는 방식이다. 이때 각 상속테이블은 Dtype(테이블 식별을 위한 컬럼)에 의해 식별된다.

 

장점

  • 조인이 필요 없으므로 조회 성능이 빠르다
  • 조회 쿼리가 단순하다

단점

  • 자식 엔티티가 매핑한 컬럼은 모두 NULL 허용(부모 클래스의 필드 빼고는 자식 필드 값이 null 허용 > 무결성 측면에서 애매해진다)
  • 테이블이 커지면서 조회 성능이 오히려 느려질 수 있다.
  • C. 구현 클래스마다 테이블 전략
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

각각의 자식 엔티티마다 테이블을 생성, 공통 컬럼(자식 테이블에 생성되는 컬럼)들을 모두 갖는다. 자식들은 공통의 PK 값을 지니지만, 개별적으로 PK를 관리하지 않는다. 상속하는 테이블의 모든 필드들을 자식 엔티티의 테이블에 생성되기 때문에, 조회 시 하나 하나의 자식 테이블들을 모두 검색하기 때문에 중복 조회를 피해갈 수 없다. 즉, 성능 측면과 운영 측면 모두 비효율을 가져가는 방식이다. 따라서 실무에서는 추천하지 않는 방식이다.


@mappedSuperClass

@MappedSuperclass //공통 매핑정보만 받는 슈퍼 클래스
public abstract class BaseEntity {
    private String createdBy;
    private LocalDateTime createdDate;
    private String lastModifiedBy;
    private LocalDateTime lastModifiedDate;

 공통 매핑 정보를 받기 위해 BaseEntity 클래스를 생성하였다. member 클래스는 BaseEntity를 상속받아 해당 매핑 정보들 역시 상속받게 된다. 

  • 공통의 매핑 정보를 받는 슈퍼 클래스.
  • 생성일자, 수정일자 등 각 테이블에 공통적으로 생성되야 하는 매핑 정보들을 받을 때 사용된다.
  • 상속 관계 매핑과 관련이 없으며, 엔티티가 아니기 때문에, 테이블과 매핑할 수 없다. 
  • 부모 클래스를 상속받는 자식 클래스의 매핑 정보만 조회 가능하다. 상위 클래스에 대한 테이블은 조회 불가능하다.

BELATED ARTICLES

more