트랜잭션
- ACID(원자성, 일관성, 격리성, 지속성)를 보장한다.
- 격리 기준
- READ UNCOMMITED
- READ COMMITED(default)
- REPEATABLE READ
- SERIALIZABLE
낙관적 락
- JPA가 제공하는 버전 관리 기능 사용
비관적 락
- 데이터베이스가 제공하는 락 기능 사용
-
select for update
- 두 번의 갱신 분실 문제: 동시에 수정할 경우…
- 방법
- 마지막 커밋만 인정하기
- 최초 커밋만 인정하기
- 충돌하는 갱신 내용 병합하기
@Version
- Long, Integer, Short, Timestramp
- 최초 커밋만 인정하기
- 엔티티의 값을 변경하면 증가
추천 전략: READ COMMITED 격리 + 낙관적 버전 관리
2차 캐시
- 1차 캐시: 영속성 컨텍스트 내부 저장소
- 2차 캐시: 애플리케이션 범위의 캐시 지원(or 공유 캐시)
- 엔티티에
javax.persistence.Cacheable
- 조회 모드(CacheRetrieveMode.USE, CacheRetrieveMode.BYPASS), 보관모드(CacheStoreMode.USE, CacheStoreMode.BYPASS, CacheStoreMode.REFRESH)
하이버네이트와 ehcache
- 3가지 지원
- 엔티티 캐시
- 컬랙션 캐시(하이버네이트 고유 기능)
- 쿼리 캐시(하이버네이트 고유 기능)
- 디펜던시로
hibernate-ehcache
추가
쿼리 캐시와 컬랙션 캐시 주의점
- 식별자값만 캐시 => 결과 대상의 엔티티를 꼭 캐시를 적용해야 한다.