JPA
Spring Boot JPA 1차 캐시 정리
Spring Boot JPA 1차 캐시 정리
2022.12.21개요 우리는 JPA를 사용하며, 어떠한 이점을 누릴 수 있는지에 대한 질문을 받는다면, 1차 캐시를 빼고 말하기 어렵습니다. "1차 캐시가 어떻게 동작하는데??"라고 질문받는다면, "영속성 콘텍스트에 보관되고, 사용하면 돼!"라고만 답하는 사람이 있을 겁니다.. (저 역시도 얼마 전까지는..) 하지만 일을 하다 보니 느끼는 것이 어떻게 사용하는 것이 아닌 왜 사용하고, 어떻게 적용 돼 사이드 이펙트가 있을 것인지에 대해서 집중하게 됐습니다. 그래서 1차 캐시가 어떻게 동작하는지에 대해서 알아보겠습니다. (1차 캐시를 날리는 @Modfiying clearAutomatically를 사용하며, 부족함을 느끼게 돼 정리하게 됐습니다.) 1차 캐시란? 우선 동작을 알아보기 전에 1차 캐시가 무엇인지 알아보겠습니다..
Spring JPA @OneToOne N+1 문제 (Fetch = Lazy)
Spring JPA @OneToOne N+1 문제 (Fetch = Lazy)
2022.11.29N+1 문제란? 어떠한 값을 얻기 위해 JPA를 이용하여 1개의 쿼리를 사용하는 것을 의도했지만, 개발자의 의도와는 다르게 N개의 쿼리가 더발생하는 문제입니다. JPA를 공부한 적이 있는 사람이라면, @xxxToOne(fetch = FetchType.EAGER)로 설정돼 있는 것들을 @xxxToOne(fetch = FetchType.LAZY)로 설정하면 된다는 것을 들어보셨을 수도 있습니다. 저 역시도 이렇게 알고 있었지만, 프로젝트를 진행하며 겪은 N+1 문제를 살펴보겠습니다. 테이블 Parent와 Child가 1:1 관계를 가졌을 때 문제가 발생하므로 해당 케이스만 살펴보겠습니다. 여기서 연관관계의 주인은 Child로 설정하겠습니다. Parent @Entity @NoArgsConstructor(acc..