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) |