JPA 와 트랜잭션

장숭혁·2024년 8월 7일
0

TIL작성

목록 보기
50/60

JPA :

  • 객체-관계 매핑(ORM)을 수행하기 위한 표준 명세
  • 자바 객체와 DB 테이블과 매핑
  • 데이터 베이스 연산을 객체 지향적으로 수행하게 해준다.

트랜잭션 :

여러 작업을 하나의 단위로 처리하여 모든 작업이 성공해야 데이터가 DB에 반영이 된다.

  • 데이터의 일관성 유지, 시스템의 신뢰성 향상

A.C.I.D : 트랜잭션의 네가지 핵심 속성

1. Atomicity(원자성) :

  • 전부 실행 or 전혀 실행 X
  • 하나의 작업이라도 실패할 경우 -> 롤백

2. Consistency (일관성) :

  • 작업 처리 결과가 항상 일관성이 있어야 함

3. Isolation (독립성) :

  • 각각의 트랜잭션은 독립 -> 서로 간섭 불가

4. Durability (영구성) :

  • 결과는 영구적으로 반영




1차 캐시

데이터 베이스로 접근을 줄이고 성능을 향상시키기 위함

  • 엔티티 매니저 수준에서 작동함 ( 각 매니저 마다 독립적으로 존재함 )

  • 엔티티 매니저가 종료되면 같이 사라짐

  • 자동 동작

  • 엔티티를 조회, 수정할때 엔티티 매니저는 1차 캐시를 먼저 들리고 해당 엔티티가 없으면 데이터 베이스에서 조회 후 캐시에 저장함

2차 캐시

  • 엔티티 매니저 팩토리 수준에서 작동함

  • 여러 엔티티 매니저 간 공유

  • 애플리 케이션 종료될 때까지 살아있음

  • 수동 동작 ( 의존성 추가 해줘야 함 )

  • 1차에 들리고 2차에도 들린다. 둘 다 없으면 데이터 베이스 조회 후 2차 캐시에 저장한다.



JPA에서의 엔티티 생명주기

  • 비영속 상태 ( Transient ) : 단순히 메모리에만 존재, 데이터 베이스와 상관없음

  • 영속상태 ( Persistent ) :

    • 엔티티가 영속성 컨텍스트에 의해 관리되는 상태

    • 엔티티 매니저가 해당 엔티티를 변경사항을 추적한다.

    • 커밋될 때 데이터 베이스에 반영된다.

  • 준영속상태 ( Detached ) : 데이터 베이스에 이미 저장된 엔티티가 영속성 컨텍스트에서 분리된 상태

    • 엔티티 매니저가 관리하지 않음

    • 데이터 베이스와 동기화 되지 않음

비영속 -> 영속 : persist 메서드
영속 -> 준영속 : detach 메소드
준영속 -> 영속 : merge 메소드
영속 -> 비영속 : remove 메소드 호출 후 커밋

준영속 상태가 활용되는 이유

  • 성능 최적화
    -> 메모리 절약
    -> 지연 로딩 해제
  • 의도치 않은 데이터 베이스 업데이트 방지
  • 엔티티의 일시적인 상태 유지 및 데이터베이스 반영하지 않도록
  • 동시성 문제 피하기
    ......
profile
코딩 기록

0개의 댓글

관련 채용 정보