아카이브

[스프링 데이터 JPA] ORM 패러다임 불일치 본문

Spring/스프링 데이터 JPA

[스프링 데이터 JPA] ORM 패러다임 불일치

주멘이 2021. 1. 10. 20:41
객체 릴레이션

밀도(Granularity) 문제

다양한 크기의 객체를 만들 수 있음
커스텀한 타입 만들기 쉬움
테이블
기본 데이터 타입 (UDT는 비추)

서브타입(Subtype) 문제

상속 구조 만들기 쉬움
다형성
테이블 상속이라는게 없음
상속 기능을 구현했다 하더라도 표준 기술이 아님
다형적인 관계를 표현할 방법이 없음

식별성(Identity) 문제

레퍼런스 동일성 (==)
인스턴스 동일성 (equals() 메소드)
주키 (primary key)

관계(Association) 문제

객체 레퍼런스로 관계 표현
근본적으로 '방향'이 존재한다
다대다 관계를 가질 수 있음
외래키(foreign key)로 관계 표현
'방향'이라는 의미가 없음
그냥 join으로 아무거나 묶을 수 있음
태생적으로 다대다 관계를 못만들고, 조인 테이블 또는 링크 테이블을 사용해서 두개의 1대다 관계로 풀어야 함

데이터 내비게이션(Navitation)의 문제

레퍼런스를 이용해서 다른 객체로 이동 가능
콜렉션을 순회할 수도 있음
하지만 그런 방식은 릴레이션에서 데이터를 조회하는데 있어서 매우 비효율적이다
데이터베이스에 요청을 적게 할 수록 성능이 좋다
따라서 join을 쓴다
하지만, 너무 많이 한 번에 가져오려고 해도 문제다
그렇다고 lazy loading을 하자니 그것도 문제다 (n+1 select)