영속성이란

김재현·2023년 12월 14일
0

TIL

목록 보기
59/88

오늘은 개인 과제 진행 이후 JPA강의를 들으며 ORM의 성장과정, 영속성 등에 대해 공부했다.

강의 내용을 정리하며 복습해보고자한다.

영속성이란 말의 의미

영속성이란 단어를 많이 들었고, 또 써왔기에 익숙한 이름이었다. 하지만 이름의 의미를 확실히는 모르고 있었다.

  • 영속성 이란?
    데이터를 생성한 프로그램이 종료되어도 사라지지 않는 데이터의 특성을 말한다.

강의를 들으며 영원하다는 의미로 '영속성'이라고 했구나 싶었다.

기초적인 내용이지만 비영속, 영속, 준영속, 삭제의 그림을 한번 첨부해본다.
이전에 이미 영속성을 깊이 공부하여 포스팅 했으므로 슥 보고 지나가자.

1차 캐시, 2차 캐시

1차 캐시, 2차캐시 조회 후 없으면 DataSource 에서 조회한다.

1차 캐시

1차 캐시란 영속성 컨텍스트 내부에는 엔티티를 보관하는 저장소를 의미한다.
아직까지 사용해왔던 흔히 사용해왔던 것이 1차 캐시인 것이다.

  • 일반적으로 트랜잭션을 시작하고 종료할 때까지만 캐시가 유효
  • 한 트랜잭션 계속해서 원본 객체를 넘겨준다

2차 캐시

2차 캐시란 애플리케이션 범위의 캐시를 의미하며 '공유 캐시'라고도한다.

  • 객체 원본을 넘겨주지 않고 복사본을 만들어서 넘겨준다.
  • 복사본을 주는 이유는 여러 트랜잭션에서 동일한 원본객체를 수정하는일이 없도록 하기 위함!

2차 캐시 적용 방법

  1. Entity에 @Cacheable 적용 후 설정 추가
// Team.java

@Entity
@Cacheable
public class Team {
	@Id @GeneratedValue
	private Long id;
	...
}
# application.yml

spring.jpa.properties.hibernate.cache.use_second_level_cache: true
# 2차 캐시 활성화

spring.jpa.properties.hibernate.cache.region.factory_class: XXX
# 2차 캐시를 처리할 클래스를 지정

spring.jpa.properties.hibernate.generate_statistics: true
# 하이버네이트가 여러 통계정보를 출력하게 해주는데, 캐시 적용 여부를 확인시켜준다.
  1. sharedCache.mode 설정
# appplication.yml

spring.jpa.properties.javax.persistence.sharedCache.mode: ENABLE_SELECTIVE

cache mode 종류

  • ALL : 모든 엔티티를 캐시
  • NONE : 캐시를 사용하지 않음
  • USE : 엔티티 조회 시 캐시를 사용하도록 지정
  • BYPASS : 엔티티 조회 시 캐시를 사용하지 않도록 지정
  • ENABLE_SELECTIVE : Cacheable(true)로 설정된 엔티티만 캐시를 적용
  • DISABLE_SELECTIVE : 모든 엔티티를 캐시하는데 Cacheable(false)만 캐시하지 않음.

헷갈릴땐 외워보자

  • 컬럼에서 Many: 자식 객체

  • (보통의 경우) 많은 쪽인 자식객체가 @JoinColumn을 가지도록 되어있음.

  • mappedBy: "연관관계 주인 필드"

profile
I live in Seoul, Korea, Handsome

0개의 댓글