코드 그라데이션
영속성 컨텍스트 사용 시 이점 본문
* 영속성 컨텍스트는 애플리케이션과 데이터베이스 사이에 있는 중간 계층이다.
- 이렇게 중간 계층을 만들면 버퍼링, 캐싱 등을 할 수 있다.
1차 캐시
- 영속성 컨텍스트에는 1차 캐시가 존재하며 Map<KEY, VALUE> 로 저장된다.
- entityManager.find() 메소드 호출 시 영속성 컨텍스트의 1차 캐시를 조회한다.
- 엔티티가 존재할 경우 해당 엔티티를 반환하고, 엔티티가 없으면 데이터베이스에서 조회 후
1차 캐시에 저장 및 반환한다.
동일성 보장
- 하나의 트랜젝션에서 같은 키값으로 영속성 컨텍스트에 저장된 엔티티 조회 시 같은 엔티티 조회를 보장한다.
- 이는 1차 캐시에 저장된 엔티티를 조회하기 때문에 가능하다.
트랜젝션을 지원하는 쓰기 지연
- 영속성 컨텍스트에는 쓰기 지연 SQL 저장소가 존재한다.
- entityManager.persist() 를 호출하면 1차 캐시에 저장되는 것과 동시에 쓰기 지연 저장소에 SQL 문이 저장된다.
- 이렇게 SQL을 쌓아두고 트랜잭션을 커밋하는 시점에 저장된 SQL문들이 flush되면서 데이터베이스에 반영된다.
- 이런식으로 모아서 보내기 때문에 성능에서 이점이 있다.
변경 감지
- JPA는 1차 캐시에 데이터베이스에서 처음 불러온 엔티티의 스탭샷 값을 갖고 있다.
- 그리고 1차 캐시에 저장된 엔티티와 스냅샷을 비교 후 변경 내용이 있다면
UPDATE SQL문을 <쓰기 지연 SQL 저장소>에 담아둔다.
- 그리고 데이터베이스에 커밋 시점에 변경 내용을 자동으로 반영한다(즉, 따로 update문을 호출할 필요가 없다.)
정리하자면
JPA는 중간에 ORM을 두어 객체와 관계형 데이터베이스를 매핑시켜주는 역할을 하여 개발자는 SQL 작성으로 낭비하던 시간을 줄이고 비즈니스 로직에 집중하게 도와준다.
'Spring > 개념 정리' 카테고리의 다른 글
20230210 JPA 설명 (0) | 2023.02.14 |
---|---|
엔티티 설계하기 관련 (1) | 2023.02.05 |
JPA 동작 방식 (0) | 2023.02.05 |
Lombok 라이브러리에서 자주 사용하는 어노테이션 (0) | 2023.01.30 |
의존성 주입과 제어의 역전 (0) | 2023.01.21 |