분류 전체보기60 변경감지 이번 글에서는 JPA의 변경감지 또는 더티체킹이라 불리는 개념에 대해 간략히 정리한다. JPA 변경감지 JPQL에는 업데이트 문법이 존재하지 않는다. 그렇다면 JPA에서는 업데이트를 어떻게 구현해야할까? JPA에서는 영속화된 Entity의 필드 값을 변경만 하기만 하면 자동으로 데이터베이스에 업데이트 되도록 반영이된다. 이것이 Dirty Checking이다. 더티체킹의 동작원리 영속성 컨텍스트가 엔티티가 영속화 되었을때 최초의 상태를 저장(스냅샷). 영속성 컨텍스트가 flush되는시점에 엔티티와 스냅샷 엔티티를 비교해 달라진 엔티티를 찾음. 이후 변경된 필드들을 이용하여 쓰기지연 SQL 저장소에 Update 쿼리를 생성하여 쌓음. 모든 작업이 끝나고 트랜잭션을 커밋을 하면 이때 쓰기지연SQL 저장소에 있.. 2023. 10. 6. 인터셉터 설정 인터셉터란? DispatcherServlet과 컨트롤러 사이에서 요청을 가로채는 역할을 수행 인터셉터를 사용하면 비즈니스 로직을 직접 수정하지 않고도 로직 전후에 특정기능을 수행할 수 있음. 구현을 위해 HandlerInterceptor 인터페이스를 사용 전체적인 요청과 응답의 흐름에서 디스패쳐서블릿에서 핸들링 매핑 과정 후 해당 비즈니스 로직을 처리할 컨트롤러 진입 전, 후에 실행됨. HandlerInterceptor 구조 preHandle 컨트롤러로 요청이 가기 전에 수행할 코드를 작성하는 메소드 리턴타입이 불리언이며 리턴이 true면 컨트롤러로 요청을 전달하고 false면 전달하지 않음. Object handler: 요청을 전달할 컨트롤러 객체가 담겨 있음. postHandle 컨트롤러의 로직 수행.. 2023. 10. 5. 전역예외처리 SpringBoot를 사용하여 공부하면서 생각해보니 예외처리에 대한 로직을 따로 찾아보거나 한적이 없어서 한번 찾아보려고 한다. 유튜브에 예외처리 강의가 있어 참고하였다. 스프링 부트의 예외처리 방식은 크게 2가지가 존재한다. @ControllerAdvice(@RestControllerAdvice)를 통한 모든 Controller에서 발생할 수 있는 예외처리 @ExceptionHandler를 통한 특정 Controller의 예외처리 근데 각컨트롤러 마다 예외처리 메소드를 따로두면.. 딱히 효율적일 것 같진 않다는 생각이 든다. 다음은 예시다. 1번케이스에 대한 예시이다. @RestControllerAdvice @Slf4j public class ExceptionController { @ExceptionH.. 2023. 10. 5. Join vs Fetch Join 차이점 일반 조인 Fetch Join과 달리 연관 Entity에 Join을 걸어도 실제 쿼리에서 SELECT 하는 Entity는 JPQL에서 조회하는 주체가 되는 Entity만 조회하여 영속화 조회의 주체가 되는 Entity만 SELECT 해서 영속화하기 때문에 데이터는 필요하지 않지만 연관 Entity가 검색조건에는 필요한 경우에 주로 사용됨 Fetch 조인 조회의 주체가 되는 Entity 이외에 Fetch Join이 걸린 연관 Entity도 함께 SELECT 하여 모두 영속화 Fetch Join이 걸린 Entity 모두 영속화하기 때문에 FetchType이 Lazy인 Entity를 참조하더라도 이미 영속성 컨텍스트에 들어있기 때문에 따로 쿼리가 실행되지 않은 채로 N+1문제가 해결됨 이제 조인 예시를.. 2023. 10. 4. 이전 1 2 3 4 5 6 7 ··· 15 다음