개발 낙서장

[TIL] 내일배움캠프 49일차 - JPA 용어 본문

Java/Sparta

[TIL] 내일배움캠프 49일차 - JPA 용어

권승준 2024. 3. 6. 20:32

 

 

오늘의 학습 키워드📚

JPA 용어

  • 엔티티 매니저(Entity Manager) : 엔티티 매니저는 영속성 컨텍스트를 관리한다. 엔티티 매니저를 통해 영속성 컨텍스트에 접근할 수 있다.
  • 영속성 컨텍스트(Persistence Context) : 영속성 컨텍스트는 엔티티를 보관하고 관리한다. 엔티티에 대한 CRUD 작업이 가능하며 1차 캐싱, 쓰기 지연, 더티 체킹 등의 이점이 있다.
  • 엔티티 매니저 팩토리(Entity Manager Factory) : 엔티티 매니저 팩토리는 엔티티 매니저를 만들어 제공하는 역할을 한다. 보통 애플리케이션에서 단 하나만 전역으로 존재하도록 한다.
  • 엔티티(Entity) : 데이터의 집합을 의미한다. DB에서 어떤 테이블의 Row 하나를 Entity 하나에 꺼내와 작업한다.

영속성 컨텍스트의 특징

1. 1차 캐시

영속성 컨텍스트는 내부적으로 Map을 이용해 엔티티를 보관한다. 엔티티의 고유 키가 Key이고 엔티티가 Value이다.
이미 조회한 엔티티를 추가적으로 조회할 경우 캐싱된 데이터를 꺼내오면 되기 때문에 성능 상 이점이 있다.

2. 동일성 보장

1차 캐시와 이어지는 이점인데 캐싱된 데이터를 꺼내 쓰기 때문에 엔티티를 여러번 꺼내도 같은 엔티티라는 것이 보장된다.

User user1 = em.find(User.class, 1);
User user2 = em.find(User.class, 1);

// user1 == user2

3. 쓰기 지연

말 그대로 쓰기를 바로바로 하는 것이 아니라 지연시킬 수 있다. 엔티티를 저장할 때 영속성 컨텍스트에 보관만 해두고 실제 쿼리는 날리지 않고 있다가 트랜잭션이 정상적으로 수행되어 커밋하는 순간 쿼리를 날리기 때문에 불필요한 쿼리가 발생하지 않는다.

4. 더티 체킹

데이터에 변경이 생기면 조회 쿼리 -> 수정 -> 수정 쿼리 순서로 작업을 진행한다.
이 과정에서 쿼리가 정상적으로 되지 않는다거나 쿼리 실수가 발생할 수 있고 비즈니스 로직이 쿼리에 의존하게 된다. 이를 위해 엔티티를 처음 영속성 컨텍스트에 보관할 때 최초 상태의 스냅샷을 갖고 있다가 flush가 발생하는 순간 스냅샷과 비교해 변경된 값이 있다면 쿼리를 저장해두고 트랜잭션을 커밋하는 순간 쿼리를 날린다.
@Transactional 어노테이션이 달린 수정하는 메소드에서 Repository.save 라던가 update 함수를 쓰지 않아도 되는 이유이다.


오늘의 회고💬

오늘은 집중이 많이 안됐다.

 

내일의 계획📜

내일은 오늘 못한 만큼 더 열심히 해야지

Comments