• 프로필사진
    BE_규원
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
BE_규원
  • 프로필사진
    BE_규원
    • 분류 전체보기 (17)
      • front-end (1)
      • back-end (8)
      • infra (6)
      • woowa-course-7 (0)
      • record (1)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
      • Tistory Skin
      등록된 공지가 없습니다.
    # Home
    # 공지사항
    #
    # 태그
    # 검색결과
    # 방명록
    • 영속성-컨텍스트? entity-manager?
      2025년 01월 08일
      • BE_규원
      • 작성자
      • 2025.01.08.오전00:40

      이 둘을 왜 공부해야 할까?

      JPA 의 핵심 개념이기 때문이다.

      이해하지 못하고 사용하면 JPA 의 이점을 100% 활용할 수 없게 된다.

       

      영속성 컨텍스트에 대한 이해가 부족하다면,

      동일한 데이터를 반복적으로 조회하는 SQL 을 실행하는 등

      SQL 을 직접 사용해 개발하는 것보다 안 좋은 상황이 벌어질 수 있게 된다.

       

      JPA 는 자바 표준 ORM 기술이다.

       

      ORM?

      Object Relational Mapping 의 약자로, 객체를 DB Table 과 매핑해주는 기술이라고 한다.

      간단하게 기존 odbc, jdbc 를 한 번 더 wrapping 한 기술로, db 연결을 더 쉽게 해주는 기술이라고 생각하면 된다.

       

      JPA 의 요소

      Entity

      DB 에 mapping 될 객체

       

      Entity Manager

      Entity 를 관리하는 객체

       

      Entity Manager Factory

      Entity Manager 를 생성하는 객체

       

      Persistence Context (영속성 컨텍스트)

      Entity 를 관리하는 공간

       

      Persistence Unit

      DB 연결을 위한 설정 (application.yml)

       

       

      영속성 컨텍스트

      Entity 클래스의 instance 를 효율적으로 관리하는 공간

       

      1차 캐시

      Entity 와 식별자(id) 가 Map 형태로 저장되어 있는 캐시이다.

      1차 캐시에 Entity 가 있다면, DB 접근 없이 연산을 수행할 수 있다.

       

      쓰기 지연 (Write-behind)

      Entity 클래스의 instance 에 대한 쿼리를 DB 에 바로 전송하지 않고 1차 캐시에만 반영한다.

       

      쿼리는 쓰기 지연 저장소에 쌓아두게 되는데,

      들어온 쿼리들을 전부 쌓아두는 게 아니라 중간 과정을 생략한 결과 쿼리만을 저장한다.

       

      그리고 flush 할 때 쓰기 지연 저장소에 있는 쿼리를 DB 에 전송한다.

       

      이를 통해 쿼리의 수가 줄어, DB 접근 횟수가 줄어들게 되고 DB 부하를 줄일 수 있게 된다.

       

      변경 감지 (Dirty-checking)

      Entity 클래스의 instance 가 영속성 컨텍스트에 처음 들어오면

      JPA 는 그 상태를 깊은 복사 형태로 스냅샷을 만들어 저장해둔다.

       

      flush 를 하기 전에, 스냅샷과 현재 상태를 비교해서 다르다면

      UPDATE 쿼리를 쓰기 지연 저장소에 추가해 넣고 전송한다.


      영속성 컨텍스트를 통해 DB 접근을 줄여 효율적인 ORM 을 할 수 있다.

       

      영속성 컨텍스트의 세 가지 특징을 배웠는데,

      이들을 이해하고 사용해야만 DB 접근을 최소화 할 수 있게 된다.

      위와 같은 이유에서 우리는 이 개념을 학습해야 한다.


      Entity States

      Entity 는 영속성 컨텍스트를 기준으로 네 가지 상태를 가진다.

       

      Transient State (비영속)

      객체가 생성되었지만, 영속성 컨텍스트에서 관리되지 않는 상태

      DB 나 JPA 와 아무런 상관이 없는 자바 객체

       

      Persistent State (영속)

      Entity 가 영속성 컨텍스트에 저장되어 관리되고 있는 상태

      1차 캐시, 쓰기 지연, 변경 감지의 대상

       

      Detached State (준영속)

      이전에는 영속 상태였으나 영속성 컨텍스트에서 분리된 상태

      영속성 컨텍스트가 닫히면 그 안에 있던 영속 객체는 준영속 상태가 된다.

       

      Removed State (삭제)

      영속성 컨텍스트에서 관리되고 있으나 삭제하기로 표시된 상태

      다음 flush 작업 때 DELETE 쿼리를 쓰기 지연 저장소에 추가해 넣고 전송한다.

       


       

      Entity Manager

      영속성 컨텍스트에 대한 작업을 수행함(= Entity 의 상태를 바꿈)으로써,

      자바 프로그램과 데이터베이스 사이를 연결한다.

       

      Entity Manager 는

      메서드를 통해 영속성 컨텍스트와 소통하면서

      Entity 의 상태를 바꾼다.

       


       

      @Transactional 이 붙은 메서드가 종료되면

      쓰기 지연 저장소에 쌓인 쿼리문을 DB 로 보내고,

      영속성 컨텍스트가 닫히고,

      영속 객체가 준영속 객체가 된다.

       

      그렇게 되면 당연하겠지만,

      JPA 가 더 이상 변경을 추적하지 않게 되며

      추가적인 SQL 을 실행하지도 않게 된다.

      'back-end' 카테고리의 다른 글

      collection-복사  (0) 2025.01.11
      tomcat-netty  (1) 2025.01.04
      effective-java-4  (0) 2025.01.01
      effective-java-3  (0) 2025.01.01
      effective-java-2  (0) 2025.01.01
      다음글
      다음 글이 없습니다.
      이전글
      이전 글이 없습니다.
      댓글
    조회된 결과가 없습니다.
    스킨 업데이트 안내
    현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
    ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
    목차
    표시할 목차가 없습니다.
    • 이 둘을 왜 공부해야 할까?
    • ORM?
    • JPA 의 요소
    • Entity
    • Entity Manager
    • Entity Manager Factory
    • Persistence Context (영속성 컨텍스트)
    • Persistence Unit
    • 영속성 컨텍스트
    • 1차 캐시
    • 쓰기 지연 (Write-behind)
    • 변경 감지 (Dirty-checking)
    • Entity States
    • Transient State (비영속)
    • Persistent State (영속)
    • Detached State (준영속)
    • Removed State (삭제)
    • Entity Manager
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.