티스토리 뷰
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 강의를 보고 작성되었습니다.
잘못된 내용이 있거나 피드백은 댓글로 부탁드립니다. 감사합니다.
'💻 개발 > JPA, Querydsl' 카테고리의 다른 글
[JPA] JPA의 OSIV란? OSIV 적용예제, OSIV 성능최적화 방법 (0) | 2022.08.29 |
---|---|
[Querydsl] 연관관계가 없는 테이블 연결 하기 / 연관관계 없는 엔티티 외부조인 (0) | 2022.08.16 |
[JPA] 양방향 연관관계 주인 @ManyToOne / @OneToMany / MappedBy 선언위치 (0) | 2022.07.11 |
[JPA] @Entity란? / @Entity주의사항 / 리플랙션 (0) | 2022.07.10 |
[JPA] 영속성 컨텍스트 | JPA 내부에서 어떻게 동작하는가? (0) | 2022.07.09 |
- Total
- Today
- Yesterday