ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 32 TIL
    내일배움캠프 2022. 12. 12. 21:08

     

     

    JavaSpring 심화 강의 수강과 실습을 진행했습니다

    저번 엽떡을 먹고 역류성 식도염이 도진것인지 명치쪽이 답답하고 몸도 아퍼서

    오늘은 집중을 되게 못했던것 같네요 .. 정리하고 마치겠습니다 

     

     

    영속성 컨텍스트 : 엔티티를 영구 저장 하는 환경, 비유적으론 엔티티 매니저마다
                                 개별적으로 부여되는, 어떠한 논리적 공간

     

    JPA 엔티티의 상태

     

     

     

     

    • 1차 캐시라는 것을 가지고 있습니다
      부하가 심한 작업을 자주하는 것을 줄여야 할 필요가 있어 영속성 컨텍스트 내부에 1차캐시를 둠
      1. find(”memberB”)와 같은 로직이 있을 때 먼저 1차 캐시를 조회
      2. 있으면 해당 데이터를 반환
      3. 없으면 그 때 실제 DB로 “SELECT * FROM….” 의 쿼리를 내보냅니다.
      4. 그리고 반환하기 전에 1차캐시에 저장하고 반환
    • “쓰기 지연 SQL 저장소”가 있습니다
      1. memberA, memberB를 영속화
      2. entityManager**.commit()** 메서드를 호출
      3. 내부적으로 쓰기 지연 SQL 저장소에서 Flush가 일어나고
      4. **“INSERT A”, “INSERT B”**와 같은 쓰기 전용 쿼리들이 DB로 흘러들어감
    • DirtyChecking을 통해 데이터의 변경을 감지해서 자동으로 수정해줍니다..
      1. 사실 1차 캐시에는 DB의 엔티티의 정보만 저장하는것이 아닙니다.
      2. 해당 엔티티를 조회한 시점의 데이터의 정보를 같이 저장해둡니다.
      3. 그리고 엔티티객체와 조회 시점의 데이터가 다르다면 변경이 발생했다고 알 수 있겠죠?
      4. 해당 변경 부문을 반영 할 수 있는 UPDATE 쿼리를 작성해둡니다.
    • 데이터의 어플리케이션 단의 동일성을 보장해줍니다!

     

     

    Mapping 심화

    • @Entity : 기본 생성자는 필수이며, final 클래스, enum, interface 등에는 사용 할 수 없음
    • @Table : 엔티티와 매핑할 테이블의 이름
    • @Column : 객체 필드를 테이블 컬럼에 매핑하는데 사용 ( 생략 가능 )
    • @Enumerated : Enum 테이블에 사용 ( Ordinal, String ) - String 해당 문자열 그대로 저장해서
                                비용 크지만 Enum 변경되도 위험 없어서 일반적으로 사용함

     

     

     

    Proxy : 지연 로딩 기능 사용을 위한 가짜 객체 = 프록시 객체

    • 즉시 로딩 : 엔티티를 조회할 때 연관된 엔티티도 함께 조회 @ManyToOne(fetch = FetchType.EAGER)
    • 지연 로딩 : 연관된 엔티티를 실제 사용할 때 조회설정 방법 : @ManyToOne(getch = FetchType.LAZY)

    '내일배움캠프' 카테고리의 다른 글

    34 TIL  (0) 2022.12.14
    33 TIL  (0) 2022.12.13
    31 TIL  (0) 2022.12.09
    30 TIL  (0) 2022.12.08
    29 TIL  (0) 2022.12.07
Designed by Tistory.