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

loosie 358님의 프로필 이미지
loosie 358

작성한 질문수

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

안녕하세요 Entity 상속관련해서 질문드립니다!

해결된 질문

작성

·

247

1

  안녕하세요 강사님 강의 정말 잘보고 있는 수강생입니다! 제가 이번에 사이드 프로젝트를 진행하는데,  정말 오랫동안 고민해보고 조사해봐도 답이 안나와서 질문드립니다. 답변해주시면 정말 감사하겠습니다!

이 프로젝트에서는 유저 중 일부만 아티스트 상태를 갖습니다. 그래서

일단 상태 중 일부를 잘라보면, 위와 같이 database를 설계했습니다.

Artist가 User의 상태 전부를 갖고 있으므로 Artist가 User를 상속받게 Entity 설계를 했습니다.

 그런데 이와 같이 설계를 하면 Artist는 독립적인 Id가 없습니다. 그래서 artist_id에 직접적으로 접근할 수가 없어서 두가지 문제가 발생합니다.

첫번째로 아티스트를 생성하려면 직접적으로 접근해서 생성하지 못하고, 유저 정보가 생성될 때만 생성할 수 있습니다. 그래서 artist를 생성할 때  현재 다음과 같이 생성되게 로직을 짰습니다.

만약 7번 유저가 이미 등록돼있고, 7번 유저에 대해서 artist 등록을 한다고 가정해보겠습니다. 그러면 아래와 같은 로직을 따라갑니다.

7번 유저를 가져옴 -> builder를 통해서 artist를 생성. 그러면 8번 유저가 생성되고 8번 유저가 artist와 연결됨 -> 7번 유저는 삭제

그런데 위와 같이 로직을 따르는게 최적화에 있어서 좋지 못하다는 생각이 듭니다. 또한 7번 유저 인덱스가 비어서 빈 인덱스가 생겼기 때문에 데이터를 볼때도 좋지 않을 것 같다는 생각이 듭니다.

두번째로 artist_id가 없기 때문에 artist와 다른 테이블을 mapping 시킬 때  까다로운 부분이 있습니다. 그래서 artist_id를 따로 만들어야 하나 생각이 들다가도 로직상으로 맞지 않는 것 같기도 합니다...

조언 주시면 정말로 감사하겠습니다...!!

답변 2

2

loosie 358님의 프로필 이미지
loosie 358
질문자

휴일인데도 답변 정말 빨리 해주시네요... (감동) 상속으로만 생각을 하고 있었어서 위임쪽으로는 생각을 못해보고 있었습니다. 해결할 실마리를 얻은 것 같습니다.  감사합니다 정말 많은 도움이 됐어요!

2

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

안녕하세요. loosie 358님 좋은 질문입니다.

먼저 정말 오랫동안 고민해보고 조사해봐도 답이 안나와서 -> 이 부분이 중요합니다.

보통 이런 경우는 이미 잘못된 설계를 가지고 고민하고 있을 가능성이 높습니다.

질문하신 내용을 기반으로 비즈니스 요구사항을 정리해보면 다음과 같습니다.

1. 유저를 먼저 등록하고 아티스트는 나중에 따로 등록될 수 있다.

2. 아티스트와 직접 연결하는 다른 엔티티(테이블)들이 있다.

비즈니스 요구사항이 유저를 먼저 등록하고, 해당 유저를 아티스트로 바꾸는게 나중에 일어난다면 유저와 아티스트를 명확하게 분리해야 합니다. 상속보다 위임을 사용하면 간단하게 문제가 해결됩니다.

두번째도 artist_id가 필요하고, 다른 테이블을 mapping 시키는 것도 user가 기준이 아니라 아티스트가 기준입니다.

따라서 이 경우는 둘을 명확하게 분리하면 문제가 쉽게 해결됩니다.

그리고 실무에서 엔티티 연관관계에 상속을 사용하는 일은 매우 드물게 발생합니다.

도움이 되셨길 바래요^^

loosie 358님의 프로필 이미지
loosie 358

작성한 질문수

질문하기