ORM 이 해결하려는 문제들을 봐보자
객체와 테이블 간의 영속화를 하려고 할땐 사실 여러가지 문제점들이 있다.
객체와 릴레이션 간에 잘 맞지 않는 부분들이 있는데 이부분들을 봐보자
밀도 문제
다양하게 객체를 만들수있고 타입들도 커스텀하게 만들 수 있다.
하지만 릴레이션에서는
크게 딱 2가지 밖에 없다.
테이블과 릴레이션들의 타입뿐이다.
Integer, varchar 같이.
UserDefinedType 을 만들어서 Address 처럼 만들 순 있지만 비추천이다.
서브타입 문제
객체 에서는 상속 구조를 만들기 쉽고
다형성을 이용해 참조 할 수도 있다.
하지만 테이블에서는 상속이라는게 없다
ORM 에서는 이 문제도 해결방법을 제공해준다.
식별성 문제
관계의 문제
객체에서 User 라는 객체의 관계를 만들었다.
방향이 존재한다. Study -> User
릴레이션에서는 방향이 없다.
오직 외래키로만 관계를 맺는다.
객체에선 타고타고 이동할 수 있지만,
릴레이션에서는 이런 개념이 없다.
여러번 sql이 발생할 수 록 성능이 안좋아진다.
가급적이면 한 트랜잭션내에서 발생하는 쿼리를 줄이는게 중요하다.
근데 많은 조인을 하는것도 문제다.
메모리에 많이 데이터를 올려놔도 비효율적 인 것
쓰지도 않는 데이터를 로딩하는게 부담이다.
그렇다고 필요할때마다 읽어오는 lazy loading 은 좋냐?
lazy loading 을 이용해 study 내용만 가져왔다가
화면에서 보여줄떄만 즉, 필요할때만 owner을 select 해서 가져온다고 생각하면?
가장 흔한 문제인 n+1 select 문제가 발생
스터디 가져올때 1 의 sql 을 썻고 , owner 를 얻을때마다 n 번에 쿼리가 생기게 된다
성능이 좋을 수가 없다.
'Spring > jpa' 카테고리의 다른 글
[spring data jpa] jpa query (0) | 2020.12.17 |
---|---|
[spring data jpa] Entity 상태 , Cascade (0) | 2020.12.16 |
[spring data jpa] - 프로젝트 셋팅, 맵핑 (0) | 2020.12.16 |
[spring data jpa] - ORM (0) | 2020.12.16 |
spring data jpa - 관계형 데이터베이스 (0) | 2020.12.16 |