-
@Embedded vs @OneToOne프로젝트/미디어 스트리밍 서버 프로젝트 2022. 10. 3. 00:01728x90
개요
현재 Video, Url, Metadata로 테이블을 관리하고 있습니다.
3가지 테이블을 하나의 단일 테이블로 관리해도 되지만 각각의 의미들을 나누기 위해 3개의 테이블로 분리하여 1:1 연관관계로 매핑했습니다.
이때 @Embedded를 사용해서 값 타입처럼 사용하는 것과 @OneToOne을 사용하는 것에 대해 어떤 차이가 있을지 궁금해져 찾아보려고 합니다.
@Embedded와 @OneToOne의 차이
@Embedded
- 실제 table은 쪼개지지 않지만 개발자가 볼 때는 쪼개 볼 수 있습니다.
- parent가 update나 delete될 때 생명주기를 같이 합니다.
@OneToOne
- 실제로 테이블을 분리되어 있습니다.
- cascadeType 옵션을 통해 생명주기를 같이 할 수 있지만 부모 객체의 라이프 사이클과 별개로 관리할 수 있습니다.
어떤 것을 선택해야 좋을까요?
DB관점에서는 테이블에 열이 많은수록 join이 적게 일어나기 때문에 좋습니다.
하지만 객체지향언어의 관점에서는 하나의 클래스가 많은 일을 하게 되면 code smell이라고 표현합니다.
DB의 관점과 객체지향언어의 관점의 이점을 모두 포함하는 @Embedded가 더 좋아 보입니다.
출처
https://stackoverflow.com/questions/35174981/when-to-use-embedded-and-embeddable
'프로젝트 > 미디어 스트리밍 서버 프로젝트' 카테고리의 다른 글
@TestConfiguration 설정하기 (0) 2022.10.05 @Transactional 롤백과 @TransactionalEventListener (0) 2022.10.04 동시성 문제를 해결하자 (3) 2022.09.30 배포 스크립트 작성하기 (0) 2022.09.29 kotlinDSL + RestDocs 적용하기 (0) 2022.09.28