• 티스토리 홈
  • 프로필사진
    Song hyun
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Song hyun
  • 프로필사진
    Song hyun
    • 분류 전체보기 (780)
      • 백준 (0)
      • 일본어 (0)
        • 모모타로TMC (0)
      • 영어 (2)
        • Diary (0)
        • Toast Masters (2)
      • 메모 (13)
      • 설치 메뉴얼 (30)
      • Java (178)
      • MySQL (60)
      • JSP (67)
      • Springboot (46)
      • HTML,CSS, JS (71)
        • HTML (8)
        • CSS (12)
        • JavaScript (37)
        • HTML&CSS 스터디 (13)
      • C++ (7)
      • Linux (7)
      • JPA (34)
      • Kotlin (2)
      • Flutter (42)
      • Error Note (39)
      • 디자인 패턴 (12)
      • 디지털논리회로 (4)
      • 데이터베이스 시스템 (8)
      • 알고리즘 (7)
      • 운영체제 (3)
      • 이산수학 (3)
      • 인공지능 (1)
      • 자료 구조 (14)
        • 기본 개념 (14)
        • 자료구조 스터디 (0)
      • 💡My project (76)
        • 팩맨 : Java Swing 게임 제작 프로젝트 (6)
        • 네이트톡 : Java 소켓 통신 프로젝트 (4)
        • 포켓옥션 : HikariCP&JDBC CRUD 프.. (3)
        • 이지 부산 : BDIA-Devton 2024 프로.. (20)
        • 그린 유니버시티 : JSP를 사용한 학사관리 프로.. (1)
        • 애드 포커 : 웹 소켓과 Spring을 사용한 카.. (1)
        • 셸위 : 게임 친구 매칭 사이트 (21)
        • 다모아 : 개발자 중개 플랫폼 (20)
      • 📗스터디 (13)
        • CNN : 웹개발 스터디 (10)
        • Node&React로 유튜브 사이트 만들기 (3)
      • 📙독서 및 강연 기록 (36)
        • 강연 (14)
        • 독서 (22)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [JPA] 10. 영속성 컨텍스트
        2024년 09월 30일
        • Song hyun
        • 작성자
        • 2024.09.30.:16
        728x90
        반응형

        [JPA] 10. 영속성 컨텍스트

         

         

        1. 영속성 컨텍스트란?

        -영속성 컨텍스트(Persistence Context)는 엔티티 객체들을 관리하고, DB와의 상태를 동기화하는 일종의 저장소이다.

        => 쉽게 말해, 애플리케이션이 실행되는 동안 DB에서 가져온 엔티티 객체들을 임시로 보관래두는 메모리 공간이다!

        => 이 공간에 있는 객체들은 영속 상태로 관리되고, 이 상태에 있는 동안 엔티티 객체의 변화는 자동으로 DB에 반영된다.

         

         

        2. 엔티티 매니저와 영속성 컨텍스트의 관계

        1. 엔티티 매니저: 엔티티 매니저는 JPA에서 제공하는 주요 인터페이스로, 영속성 컨텍스트를 통해 엔티티의 생명 주기를 관리한다. 엔티티 매니저는 엔티티 CRUD를 수행하며, 이는 영속성 컨텍스트 내에서 이뤄진다.
        2. 영속성 컨텍스트: 엔티티 매니저가 관리하는 엔티티 객체들을 저장하고 관리하는 공가니앋. 이 컨텍스트는 DB와 동기화되며, 엔티티 객체의 상태를 추적한다.
        3. 엔티티: 영속성 컨텍스트에 의해 관리되는 자바 객체이다. 엔티티가 영속성 컨텍스트에 포함될 때, 이를 영속 상태라고 한다.

         

        3. 엔티티의 4가지 상태

        1. 비영속 상태: 엔티티가 영속성 컨텍스트와 전혀 연관되지 않은, 단순히 자바 객체로만 존재하며 DB와 연결되지 않은 상태!
        2. 영속 상태: 엔티티가 영속성 컨텍스트에 의해 관리되는 상태이다. 이 때는 엔티티가 DB의 레코드와 매핑되어 있으며, 엔티티의 상태 변화가 자동으로 DB에 반영된다.
        3. 준영속 상태: 엔티티가 한 번 영속 상태였지만, 더이상 영속성 컨텍스트에 의해 관리되지 않는 상태이다. 엔티티 매니저는 준영속 상태의 엔티티를 더이상 추적하지 않고, 변경 상태도 반영되지 않는다. (entityManager.clear(), detach(), close())
        4. 삭제 상태: 엔티티가 영속성 컨텍스트에 의해 관리되지만, 삭제가 예약된 상태이다. 트랜잭션이 커밋되면 해당 엔티티는 DB에서 삭제 된다.

         

        4. 영속성 컨텍스트의 기본적인 특징

        (1) 1차 캐시(First-Level Cache)

        • 영속성 컨텍스트는 내부에 1차 캐시를 지니고 있다.
        • 이때 캐시의 키는 엔티티의 @Id 어노테이션이 달린 기본 키 역할을 하는 식별자이며, 값은 엔티티이다.

        *1차 캐시의 동작 순서

        1. 엔티티를 조회하면 1차 캐시에서 데이터를 조회하고, 값이 있다면 반환한다.
        2. 만약 값이 없다면 DB에서 조회해 1차 캐시에 저장한 다음 반환한다.
        3. 이를 통해 데이터를 조회할 때 DB를 거치지 않아도 되기 때문에, 빠르게 조회할 수 있다!

         

        (2) 쓰기 지연(Write Delay)

        • 쓰기 지연은 영속성 컨텍스트가 데이터베이스에 직접적으로 즉시 쿼리를 보내지 않고, 트랜잭션이 커밋될 때 까지 쿼리들을 모아 처리하는 기법이다.
        • 이를 통해 성능을 최적화하고, 트랜잭션 내에서 데이터의 일관성을 유지하는 데 중요한 역할을 한다.

         

        (3) 변경 감지(Dirty Checking)

        • 트랜잭션을 커밋하면 1차 캐시에 저장되어 있는 엔티티의 값과 현재 엔티티의 값을 비교해, 변경된 값이 있다면 변경 사항을 감지한다. 변경된 값은 DB에 자동 반영한다.
        • 이를 통해 쓰기 지연과 마찬가지로, 적당한 묶음으로 쿼리를 요청할 수 있고, 시스템의 부담을 줄인다.

        *트랜잭션 커밋 시..

        1. JPA는 변경 감지를 통해 1차 캐시의 엔티티와 DB의 엔티티를 비교한다.
        2. 변경 사항이 있다면 해당 엔티티에 UPDATE 쿼리를 생성하고, 트랜잭션 커밋 시에 DB에 반영한다.
        3. => 쓰기 지연과 결합해 효율적으로 쿼리를 처리할 수 있다!

         

        (4) 지연 로딩 (Lazy Loading)

        • 지연 로딩은 쿼리로 요청한 데이터를 애플리케이션에서 바로 로딩하는 것이 아니라, 필요할 때 쿼리를 날려 데이터를 조회하는 것을 의미한다.
        1. 객체 초기화 시점: JPA에서 엔티티를 조회할 때, 연관된 다른 엔티티/컬렉션에 대해 실제 데이터를 즉시 로드하지 않고, 해당 객체에 대한 프록시 객체(가짜 객체)를 대신 반환한다.
        2. 필요할 때 데이터 조회: 연관된 객체나 컬렉션의 데이터가 실제로 접근되는 시점에서 DB에서 쿼리가 실행되며, 필요한 데이터를 가져온다.
        3. 성능 최적화: 지연 로딩을 통해 초기화 시점에서 불필요한 DB 접근을 방지하고, 메모리 사용량을 줄일 수 있다.

         

        (5) 즉시 로딩(Eager Loading)

        • 지연 로딩의 반대 개념은 즉시 로딩이라는 개념이 있다.
        • 엔티티를 조회할 때, 연관된 모든 데이터도 함께 즉시 로드되는 방식이다. 
        • => 즉, 엔티티가 처음 조회되는 시점에 그와 관련된 모든 연관 엔티티들도 한꺼번에 DB에서 조회된다.
        728x90
        반응형

        'JPA' 카테고리의 다른 글

        [JPA] 11. 단방향, 양방향 매핑에 대한 이해  (0) 2024.09.30
        [JPA] *Springboot Starter Project - 프로젝트 설정하기  (1) 2024.09.30
        [JPA] 9. 엔티티 매니저와 영속성 컨텍스트  (0) 2024.09.30
        [JPA] 8. JPA와 하이버네이트란?  (0) 2024.09.30
        [JPA] 7. 스프링 부트 DB 접근 기술 ORM  (0) 2024.09.30
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바