본문 바로가기

Spring/jpa

[spring data jpa] - ORM 패러다임 불일치

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