인프런 커뮤니티 질문&답변

김경현님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

상속관계 매핑

TABLE_PER_CLASS 전략 단점관련 질문있습니다

24.06.17 22:55 작성

·

111

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

안녕하세요 강의 정말 잘 듣고있습니다 !!

강의 30:00 부근에서 TABLE_PER_CLASS 전략이

왜 안좋냐면 조회시 부모 클래스로 조회를 할 수도 있는데 그런경우에 UNION 쿼리가 나가는 단점이 있다고 하셨습니다.

그래서 전략을 JOINED로 바꾸고 실행해봤는데
이런식으로 LEFT JOIN을 여러번 하게 되고

SINGLE TABLE 전략은 예상한대로

 

이런 결과가 나오더라구요.
이 결과들만 보면 SINGLE TABLE이 말씀하신것처럼 심플하게 조회가 되고,


JOINED와 TABLE PER CLASS 는 사실 성능상 비슷해보이는데
TABLE PER CLASS 전략만 단점을 소개해주셔서 질문드렸습니다.

질문은 한마디로, JOINED도 성능이 그렇게 좋진 않은것 아닌가??
입니다!!
읽어주셔서 감사합니다.

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

2024. 06. 18. 17:10

안녕하세요. 김경현님

일반적으로 성능 면에서는 조인을 하는 것 보다는 하지 않는 것이 더 나은 성능을 보입니다 🙂

성능면에서는 단일 테이블이 대부분의 경우 빠르다고 이해하시면 됩니다.

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 06. 17. 23:01

안녕하세요, 인프런 AI 인턴입니다.

김경현님의 질문에 대해 심층적으로 다루지는 않았으나, 유사한 주제의 질문들 중에서 상속 전략, 특히 TABLE_PER_CLASS, JOINED, SINGLE_TABLE 전략의 성능 및 사용 상의 이유를 설명하는 답변을 찾을 수 있었습니다. 이러한 상속 전략들은 JPA(Java Persistence API)에서 엔티티들이 상속 구조를 가질 때, 어떻게 데이터베이스 테이블에 매핑할 것인지를 결정하는 전략입니다.

  1. 상속 모델 구현방법 3가지 장단점에 대한 질문입니다!에서는 상속 전략 중 하나를 사용할 때의 이점에 대해 김영한 강사님이 답변을 제공하셨습니다. 특히 JOINED 전략에서는 NOT NULL 제약조건을 사용할 수 있는지에 대한 질문에 대한 답변으로, JOINED 전략이 NOT NULL 조건을 수용할 수 있다는 사실을 확인할 수 있습니다. 이는 JOINED 전략이 여러 테이블에 걸쳐 데이터를 분산시키는 방식을 취하기 때문에 가능한 것입니다.

  2. 상속 매핑에 대한 질문에서는 JOINEDSINGLE_TABLE 전략을 포함해 어느 상황에서 어떤 전략을 사용할지에 대한 고민을 나눴습니다. 여기서 김영한 강사님은 상속 관계를 꼭 필요할 때만 사용하라고 조언하십니다. 특히 복잡성을 관리하는 측면에서 각 전략의 선택이 중요함을 강조합니다.

질문하신 내용에 대한 직접적 해답은 아니지만, JOINED 전략이 TABLE_PER_CLASS 전략에 비해 성능상으로 우수하거나 조건에 따라 선호될 수 있다는 뉘앙스를 포함하고 있는 답변입니다. 특히, JOINED 전략이 SINGLE_TABLE 전략에 비해 더 명확한 데이터 분리를 제공할 수 있으나, 조인 연산이 필요하기 때문에 성능상의 고려가 필요하다는 점에서 질문과 부분적으로 연결됩니다.

이러한 상속 전략들의 선택은 특정 상황에서의 성능, 데이터의 명확성 및 관리의 용이성, 그리고 애플리케이션의 요구 사항에 따라 결정되어야 합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.