티스토리 뷰

728x90

JPA 테이블 논리형과 물리형을 공부하던 중 싱글 테이블 전략과 조인 테이블 전략에 대한 내용을 실무에서 접한 적이 있어 정리하게 되었다.

팀원들과 커피챗을 하던 중 다른 부서에서 개발 중인 페이지에 대한 DB를 전달받은 적이 있는데 "팀장님이 뭐 이리 테이블 수를 많이 생성했지?" 라며 의문을 재기했던 적이 있다. 그 당시 나는 뭐... 필요하니까 만든 거 아닐까..? 라며 대수롭지 않게 넘겼는데 김영한 강사님의 스프링 상속관계 매핑 영상을 보며 싱글 테이블 전략과 조인 테이블 전략이 그 당시 내가 궁금했던 내용에 대한 내용이라고 생각이 들어 정리해보았다.

우리 부서는 싱글테이블 전략을 활용하여 테이블 수를 줄이고 백업 테이블 or log 테이블을 이용하고
타 부서는 싱글테이블이 아닌 조인 테이블을 활용하여 더 많은 테이블이 생성되었다... 고 추측해본다.

 

 

1. 상속관계 매핑


논리 모델을 실제 물리모델로 구현하는 방법

 

상속관계 매핑에서 다루는 3가지 전략이다.

[조인 전략]

각각 테이블로 변환

[단일 테이블 전략]

통합 테이블로 변환

[서브타입 테이블로 변환]

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

 

 

2. 상속관계 매핑으로 사용되는 주요 어노테이션


[@Inheritance(strategy = InheritanceType.JOINED)]

조인 전략

[@Inheritance(strategy = InheritanceType.SINGLE_TABLE)]

단일 테이블 전략

[@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)]

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

 

 

2-1. 조인 전략


[조인 전략 장단점]

장점

테이블 정규화 

외래 키 참조 무결성 제약조건 활용 가능

저장공간 효율화

 

단점

조회 시 조인을 많이 사용 

성능 저하

조회 쿼리 복잡

데이터 저장 시  INSERT SQL 2번 호출

 

2-2. 단일 테이블 전략


[단일 테이블 전력의 장단점]

장점

조인이 필요 없으므로 일반적으로 조회 성능이 빠름

조회 쿼리가 단순함

 

단점

자식 엔티티가 매핑한 칼럼은 모두가 null 허용

단일 테이블에 모든 걸 저장 -> 테이블이 커질 수 있음 

상황에 따라 조회 성능이 오히려 감소할 수 있음

 

 

2-3. 구현 클래스마다 테이블 전략


해당 전략은 데이터베이스 설계자와 ORM 전문가 둘 다 추천하지 않은 전략이다.

[구현 클래스마다 테이블의  장단점]

장점 

서브 타입을 명확하게 구분해서 처리할 때 효과적

not null 제약조건 사용 가능

단점

여러 자식 테이블을 함께 조회할 때 성능이 느림 (UNIQUE SQL 필요)

자식 테이블을 통합해서 쿼리 하기 어려움

 

 

위 글은 김영한 강사님의 JPA 강의를 보고 작성되었습니다.

 

 

잘못된 내용이 있거나 피드백은 댓글로 부탁드립니다.  감사합니다.

728x90
댓글
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday