26일차 - Spring강의(Entity, 영속성 컨텍스트)

2024. 8. 20. 21:29·Java & Spring/Spring

□ Entity

  • JPA에서 관리되는 클래스 객체를 의미
  • Entity 클래스는 DB테이블과 매핑되어 JPA에 의해 관리됨
@Entity // JPA가 관리할 수 있는 Entity 클래스 지정
@Table(name = "memo") // 매핑할 테이블의 이름을 지정
public class Memo {
    @Id
    private Long id;

    // nullable: null 허용 여부
    // unique: 중복 허용 여부 (false 일때 중복 허용)
    @Column(name = "username", nullable = false, unique = true)
    private String username;

    // length: 컬럼 길이 지정
    @Column(name = "contents", nullable = false, length = 500)
    private String contents;
}
  • @Entity에 (name = " ")으로 이름을 줄 수 있으며, 기본 값은 클래스명이다.
  • Entity를 객체화 할 때 기본생성자를 사용, 클래스 내에 다른 생성자가 여부 확인 필요 

□ 영속성 컨텍스트

  • Entity를 효율적으로 쉽게 관리하기 위해 만들어진 공간
  1. 영속성 컨텍스트 : Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간
  2. EntityManager : Entity를 관리하는 관리자, EntityManagerFactory를 통해 생성
  3. EntityManagerFactory : 일반적으로 DB에 하나만 생성되어 애플리케이션이 동작하는 동안 사용됨,
                                             Entity를 만들기 위해서는 DB에 대한 정보르 전달 해야함.
                                             -> 정보 전달은 /resources/META-INF/ 위치에 persistence.xml파일을 만들어 정보 전달
  4. JPA의 트랜잭션 : 모든 SQL이 성공적으로 수행이 되면 DB에 영구적으로 변경을 반영하지만
                                SQL중 하나라도 실패한다면 모든 변경을 되돌린다.
START TRANSACTION; # 트랜잭션을 시작합니다.

INSERT INTO memo (id, username, contents) VALUES (1, 'Robbie', 'Robbie Memo');
INSERT INTO memo (id, username, contents) VALUES (2, 'Robbert', 'Robbert Memo');
SELECT * FROM memo;

COMMIT; # 트랜잭션을 커밋합니다.

SELECT * FROM memo;

※ COMMIT를 하기 전까지는 SELECT를 통해 조회는 가능하나 데이터베이스의 변경 발생하지않는다.

 

- 영속성 컨텍스트의 기능

  • 1차 캐시 : - 영속성 컨텍스트는 내부적으로 캐시 저장소를 가지고있으며 em.persist(memo)메서드가 호출되면 Entity 객체
                       캐시 저장소에 저장한다.
                    - 캐시 저장소에서 조회되지않으면 DB SELECT 조회 후 캐시 저장소에 저장
    • DB 조회 횟수를 줄임
    • 1차캐시를 사용해 DB row 1개 당 객체 1개가 사용되는 것을 보장(객체 동일성 보장)
  • 쓰기 지연 저장소
  • 변경 감지(Dirty Checking) : 트랜잭션이 commit되고 em.flush();가 호출되면 Entity의 현재 상태와 저장한 최초 상태를 비교하여
                                                 변경내용이 있다면 Update SQL을 생성하여 쓰기지연 저장소에 저장하고 모든 쓰기 지연 저장소의
                                                 SQL을 DB에 요청한다. 마지막으로 트랜잭션이 commit되면서 반영된다.
특징 1차 캐시 쓰기 지연 저장소
범위 세션 단위 (세션 종료 시 사라짐) 전역적 (애플리케이션 내 여러 세션에서 공유 가능)
사용 목적 조회 성능 향상 및 변경 사항 추적 쓰기 성능 향상 및 데이터베이스 부하 감소
데이터 접근 방식 세션 내에서 엔티티를 캐시하여 조회 데이터는 캐시에 저장되었다가 비동기적으로 데이터베이스에 저장
일관성 관리 Hibernate가 자동으로 관리 추가적인 일관성 관리 필요

 

□ Entity의 상태

  • 비영속(Transient) : 영속석 컨텍스트에 저장되지 않아 JPA의 관리를 받지 않음( new를 통해 생성된 Entity객체)
  • 영속(Managed) : persist()메서드를 통해 영속성 컨텍스트에 저장하여 관리되고있는 상태
  • 준영속(Detached) :
    1. detach(entity) : 해당 entity를 준영속상태로 변경
    2. clear() : 모든 Entity를 준영속상태로 변경(비우기)하고 영속성 컨텍스트는 계속 사용가능
    3. close() : 영속성 컨텍스트 종료, 모든 Entity들은 준영속상태로 변경하고 영속성 컨텍스트 종료
    4. merge() : 준영속 상태에서 다시 영속 상태로 변경
      • 영속성 컨텍스트에서 조회 없으면,
      • DB조회
      • 위 두개중에 있으면 Update 수행
      • 없으면 Insert 수행
  • 삭제(Removed) : remove(entity)메서드로 영속 상태의 entity를 삭제

'Java & Spring > Spring' 카테고리의 다른 글

29일차 - Spring강의(인증과 인가)  (0) 2024.08.23
28일차 - Spring강의(Bean 수동 등록, Type중복 시 Bean 주입)  (0) 2024.08.22
25일차 - Spring강의(IoC와 DI)  (0) 2024.08.19
25일차 - Spring강의(3 Layer Architecture)  (0) 2024.08.19
21일차 - Spring강의(Spring MVC)  (0) 2024.08.12
'Java & Spring/Spring' 카테고리의 다른 글
  • 29일차 - Spring강의(인증과 인가)
  • 28일차 - Spring강의(Bean 수동 등록, Type중복 시 Bean 주입)
  • 25일차 - Spring강의(IoC와 DI)
  • 25일차 - Spring강의(3 Layer Architecture)
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java this
    데이터 크기
    데이터 타입
    Java 생성자
    프로그래머스 java 기초트레이닝
    java 제어자
    java enhance switch
    java 유클리드 호제법
    java기초
    java 메서드
    java super
    java
    자료구조
    개발로드맵
    java 멤버
    java two-pointer
    프로그래머스 java 기초 트레이닝
    java arrays.copyofrnage()
    java 세수의합
    java 에라토스테네스의 체
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
26일차 - Spring강의(Entity, 영속성 컨텍스트)
상단으로

티스토리툴바