OSIV

    OSIV 필터와 지연로딩 에러

    OSIV 필터와 지연로딩 에러

    🔍 관련 포스팅 OSIV와 필터 🔍 OSIV란? (Open Session In View) 스프링의 트랜잭션 범위는 Service, Repository 레이어에서만 유지된다. 보통 JPA의 영속성 컨텍스트는 트랜잭션의 생명주기를 따라가는데, OSIV를 이용하면 영속성 컨텍스 brightmango.tistory.com 🔍 @AuthenticationPrincipal과 지연 로딩 @AuthenticationPrincipal 어노테이션을 이용하면 간편하게 session에 저장한 객체를 쉽게 받을 수 있다. 그런데 파라미터로 받은 객체를 가지고 지연 로딩을 하면 프록시 객체를 가지고 있기 때문에 에러가 발생한다. 현재 SecurityContextHolder에 session을 저장하는 코드는 인터셉터에 다음과 같이..

    [JPA] 영속성 컨텍스트의 생명주기(feat.OSIV)

    [JPA] 영속성 컨텍스트의 생명주기(feat.OSIV)

    [문제 상황] 사용자 회원가입이 잘 되는지 확인하기 위해 다음과 같은 테스트 코드를 작성했다. "영속성 컨텍스트에 user 정보가 저장되어서 같은 영속성 컨텍스트에 있는 user와 newUser는 같은 객체가 된다"라고 생각했는데 테스트 케이스가 실패하였다. 확인해보니 user가 null로 나온다. ??? 그렇다면 왜 이 테스트 케이스는 실패하는가? 이를 위해 userService.save()의 코드를 살펴보았다. [분석] 먼저 내가 알고 있는 지식이 잘못된 것인지 확인하였다. [JPA의 객체 비교] 객체를 비교하는 방식에는 총 2가지가 있다. 1. 동일성 비교 (== 비교) 2. 동등성 비교 (equals()) JPA에서는 같은 트랜잭션일 때는 같은 객체임이 보장된다. 따라서 다음은 동일성 비교에서 t..