Framework/Spring

[Spring] JPA-ORM

검은 까마귀 2022. 3. 10. 19:54

객체를 데이터로
데이터를 객체로 가져와야 한다.

 

객체 -> SQL -> DB로 변환

 

SQL을 객체로 연결할때 대부분 개발자 한다.

 

객체와 관계형 데이터 베이스는 큰 차이점을 갖고 있음

1. 상속
DB의 관계는 상속과는 다른 개념이다.
DB에 저장할 객체는 상속관계를 활용하지 않는다.

 

자바에서 조회는 get/find, 추가는 add

SQL 조회는 SELCT, 추가는 INSERT

 

객체 그래프 탐색

.을 찍어서 객체를 이동하는것을 이야기함

 

SQL을 사용할시 객체 그래프 탐색이 자유롭지 않음

복잡도에 따라서 SQL을 작성하기 어려워진다.

 

SQL에 따라 그래프 탐색 범위가 제한적임

->엔티티에 대한 신뢰 문제가 발생하게 됨

쿼리를 까 뒤집어봐야 함

 

JPA-ORM
객체는 객체대로 설계

관계형 데이터베이스는 관계형 데이터베이스대로 설계

JPA-ORM이 맵핑

SQL을 직접 날리지 않고 JPA를 거쳐 DB에 접근

 

JPA가 SQL을 생성

SQL을 날려서 DB로 접근

RESULT set을 가져옴

 

JPA의 생산성

persist
find
set
remove

쿼리를 작성하지 않아도 됨 -> 유지 보수성

패러다임의 불일치 해결

 

동일한 트랙잭션에서 조회한 엔디티는 같음을 보장

 

JPA의 성능 최적화

1. 1차 캐시와 동일성 보장


같은 식별자를 조회할시 

첫번째는 SQL을 조회

두번째는 캐시에서 조회


조회 성능 향상 -> 여러명의 유저가 같은 캐시를 보는것은 아니다. 거의 미비하다

DB ISOLATION 레벨이 높을수록 성능이 쓰레기다

 

2. 트랜잭션을 지원하는 쓰기 지연
버퍼 WRITE를 지원
트랙잭션을 커밋 할때까지 INSERT SQL을 모음

한번에 모아서 커밋함 -> 네트워크를 여러번 접속하지 않아도 된다.

JDBC BATCH SQL 기능으로 한번에 전송

 

3. 지연 로딩
객체가 실제 사용될때 로딩

즉시 로딩 : JOIN SQL로 한번에 연관된 객체가지 미리 조회


첨언../.

실무에선 DB가 문제다
데이터를 얼마나 빨리 조회하고 얼마나 안전하게 저장하냐의 문제

데이터는 없어지진 않는다.

 

RDB는 변하지 않는다.

RDB를 잘 다루는백 앤드 개발자는 사라지지 않는다.

 

 

반응형

'Framework > Spring' 카테고리의 다른 글

[Spring] Open API 활용하기  (0) 2023.12.15
[Spring] Rest Doc 활용하기  (0) 2023.12.13
[Spring] Spring MVC 패턴의 LifeCycle  (0) 2023.10.26
[Spring] JPA의 Persistence  (0) 2022.04.11
[Spring] Gradle 1편  (0) 2022.04.04