어제 팀원들이랑 대화하다가 새벽 3시쯤 잠들어서 파워냅 30분했는데 코딩하는 꿈을 꿨습니다...😱  하루종일 코딩만 생각하니 이런 꿈도 꿉니다. 오늘은 주특기 2주차 시작일로 Spring 숙련주차입니다. 강의가 새로 지급되었고 개인과제와 팀과제가 새로 나왔습니다. 다들 월드컵 보러 갈 때 치킨으로 만족하고 강의 듣습니다.🍗🍗🍗

 

zep

JPA 심화

  • JPA는 자동으로 Id값을 찾아주지만 (@GeneratedValue 사용) Query는 Select를 사용해 최대값을 넣어서 찾아서 마지막 id값+1해서 넣어줘야 한다
  • JPA를 사용하면 query보다 간단함 
  • Spring Data JPA 사용

 

영속성 컨텍스트 Persistence context

  • 엔티티를 영구 저장 하는 환경
  • 어플리케이션이 데이터베이스에서 꺼내온 데이터 객체를 보관하는 역할
  • 영속성 컨텍스트는 엔티티 매니저를 통해 엔티티를 조회하거나 저장할때 엔티티를 보관하고 관리함

 

1. find(”memberB”)와 같은 로직이 있을 때 먼저 1차 캐시를 조회

2. 있으면 해당 데이터를 반환

3. 없으면 그 때 실제 DB로 “SELECT * FROM….” 의 쿼리를 보냄

4. 반환하기 전에 1차캐시에 저장하고 반환

 

 

=> MemberA, MemberB를 생성할 때 마다 DB를 다녀오는건 비효율적

 

해결책 =>“쓰기 지연 SQL 저장소” Transactional write-behind

 

1. memberA, memberB를 영속화

2. entityManager.commit() 메서드를 호출

3. 내부적으로 쓰기 지연 SQL 저장소에서 Flush가 발생 -> 임의로 시점 지정 가능

4. “INSERT A”, “INSERT B”와 같은 쓰기 전용 쿼리들이 DB로 전달

 

 

@Enumerated

  • 속성으로는 Ordinal, String이 있음
  • String인경우 해당 문자열 그대로 저장해서 비용은 많이 들지만, 나중에 Enum이 변경되어도 위험할일이 없기 때문에 일반적으로는 String을 사용합니다.
  • Enum은 데이터 순서대로 값을 매기기 때문에 변경되거나 삭제시 오류가 발생할 수 있음
    • 값이 변경되어도 위험할 일이 없기 때문에 대부분 String을 사용

 

 

 

+ Recent posts