JPA

·2023년 11월 23일
0

Project

목록 보기
4/5
post-thumbnail

로그인 구현 하면서 accesstoken 과 accesstoken 이 만료되었을 때 이를 해결해주는 refreshtoken 이 필요하다라는 것을 나중에 알아 고생했다.

먼저 헷갈리는 부분은
1. Entity 작성법
2. EntityManager 와 트랜잭션
3. Entity 와 EntityManager의 차이는?
4. 영속성 컨텍스트(Persistence context)

  1. EntityManager 와 트랜잭션
  • em 을 통해서 CRUD 를 제공한다.
  • 엔티티와 관련된 일을 처리하는 엔티티 관리자이다.
  • 엔티티 매니저는 데이터 베이스 커넥션과 밀접한 관계가 있으므로 스레드간에 공유하거나 재사용 X
  • 특정 작업을 위해 데이터베이스에 액세스하는 역할을 담당한다.
  • 엔티티 매니저 팩토리를 이용해서 생성한다
    + 엔티티 매니저 팩토리 :
    • DB를 하나만 사용하는 어츨리케이션이라면 일반적으로 하나만 만든다.
    • 스레드 세이프하기 때문에 여러 스레드가 동시 접근해도 안전
  • 여러 스레드 동시 접근 X
  • 엔티티 생명주기
    • new 생성 : 엔티티 인스턴스 초기화된 상태
    • managed 관리 : 엔티티 인스턴스가 영속성 컨택스트에 저장된 상태
    • detached 분리 : 엔티티 인스턴스가 영속성 컨택스트에서 분리된 상태
    • removed 제거 : 엔티티 인스턴스가 영속성 컨택스트에서 제거된 상태
      -JPA는 트랜잭션 안에서 작동을 한다.
  1. 영속성 컨텍스트란?
  • 영구 저장 환경
  • 엔티티 매니저가 엔티티를 저장하거나 조회하면 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.
  • 엔티티 매니저가 persist() 메서드를 사용하면 엔티티를 영속성 컨텍스트에 저장한다.
  • 하나의 엔티티 매니저가 하나의 영속성 컨텍스트를 생성 및 접근할 수 O,
    여러 엔티티 매니저가 하나의 영속성 컨텍스트를 공유할 수 O
  • 엔티티를 식별자 값(@Id annotation)으로 구분하기 때문에 영속 상태는 식별자 값이 반드시필요

JPA 는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트의 엔티티를 데이터베이스에 반영
: 이를 flush 라고 함

  • flush 동작
  1. 변경 감지 동작으로 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해 변경이 있는 엔티티를 찾는다.
  2. 변경이 있는 엔티티는 수정 쿼리를 만든어 쓰기 지연 SQL 저장소에 등록한다.
  3. 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다.
  • 영속성 컨텍스트가 엔티티를 관리할 때 생기는 장점
  1. 1차 캐시
  2. 동일성 보장
  3. 트랜잭션을 지원하는 쓰기 지연
  4. 변경 감지
  5. 지연 로딩(Lazy Loading)

@Entity
테이블과 매핑할 클래스에 필수로 사용되는 어노테이션으로 해당 어노테이션이 붙은 클래스는 JPA가 관리

profile
기회를 잡기 위해 준비하자 !

0개의 댓글