beadss / jpa-study

jpa슽터디입니다
1 stars 2 forks source link

16장 정리완료 #41

Open 2xel opened 5 years ago

2xel commented 5 years ago

16.트랜잭션과 락, 2차 캐시

1. 트랜잭션과 격리 수준

1.1 트랜잭션과 격리 수준

격리수준과 문제점

격리수준 DIRTY READ NON-REPEATABLE READ PHANTOM READ
READ UNCOMMITTED O O O
READ COMMITTED O O
REPEATABLE READ O
SERIALIZABLE

1.2 낙관적 락과 비관적 락 기초

1.3 @Version

버전 정보 비교 방법

1.4 JPA 락 사용

LockModeType 속성

락 모드 타입 설명
낙관적락 OPTIMISTIC 낙관적 락을 사용
낙관적락 OPTIMISTIC_FORCE_INCREMENT 낙관적 락 + 버전정보 강제 증가
비관적락 PESSIMISTIC_READ 비관적 락, 읽기 락 사용
비관적락 PESSIMISTIC_WRITE 비관적락, 쓰기 락 사용
비관적락 PESSIMISTIC_FORCE_INCREMENT 비관적 락 버전정보 강제 증가
기타 NONE 락을 걸지 않음
기타 READ JPA 1.0 호환 기능 OPTIMITIC과 같음
기타 WRITE JPA 1.0 호환 기능 OPTIMISTIC_FORCE_INCREMENT와 같음

1.5 JPA 낙관적 락

NONE

OPTIMISTIC

OPTIMISTIC_FORCE_INCREMENT

1.6 JPA 비관적 락

PESSIMISTIC_WRITE

PESSIMISTIC_READ

PESSIMISTIC_FORCE_INCREMENT

1.7 비관적 락과 타임아웃

2. 2차 캐시

2.1 1차 캐시와 2차 캐시

1차 캐시

2차 캐시

2.2 JPA 2차 캐시 기능

캐시 모드 설정

캐시 조회, 저장 방식 설정

2.3 하이버네이트와 EHCACHE 적용

환경설정

엔티티 캐시와 컬렉션 캐시

@Cacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Entity
public class ParentMember {
    @Id @GeneratedValue
    private Long id;
    private String name;

    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
    @OneToMany(mappedBy="parentMember", cascade=CascadeType.ALL)
    private List<ChildMember> childMembers = new ArrayList<>();
    ...
}

@Cache

캐시 영역

쿼리 캐시

쿼리 캐시 영역

// 쿼리 캐시 사용
public List<ParentMember> findParentMembers() {
    return em.createQuery("select p from ParentMember p join
        p.childMembers c", ParentMember.class)
            .setHint("org.hiberante.cacheable", true)
            .getResultList();
}

쿼리 캐시와 컬렉션 캐시의 주의점

joont92 commented 5 years ago

오졌다