-
Unable to proxy interface-implementing method [public final void org.springframework.web.filter.OncePerRequestFilter.doFilter(jakarta.servlet.ServletRequest,jakarta.servlet.ServletResponse,jakarta.servlet.FilterChain) throws jakarta.servlet.ServletExcep..Spring/JPA 2024. 3. 12. 12:47728x90반응형
오류 발생 시점
Spring Security와 JWT를 통해 인증 인가를 진행하려고 했고 Jwt Filter에서 @Transactional를 사용했기 때문에 발생하였다.
원인
정확한 원인은 아닌 것 같지만 @Transactional 어노테이션을 사용하면 스프링은 해당 메서드를 실행할 때 트랜잭션을 시작하려고 하지만, 이미 실행 중인 트랜잭션이 없기 때문에 오류가 발생할 수 있습니다.
느낀점
내가 @Transactional을 적용한 곳은 단순히 데이터를 조회하는 용도이므로 트랜젝션이 필요없다.
트랜젝션 관리는 데이터를 변경하는 작업에만 필요하다는건 알고 있었지만 깜빡하고 썻던거 같다.
@Transcational은 일반적으로 서비스 계층에서 DB 트랜젝션을 처리하는데 사용된다.
그리고 필터에서 DB에 직접 접근하는것은 권장하지 않는다는 글이 있어서 생각 해볼 것들이 있따.
- 성능 : 필터는 모든 요청에 대해 실행되므로 DB에 대한 접근이 많아 질 수 있다.
- 트랜젝션 관리 : 필터에서는 트랜잭션의 시작과 종료를 명확하게 관리하기 어렵기 때문에 원하지 않는 동작이 발생할 우려가 있다.
- 확장성 : 필터는 서블릿 컨테이너에서 실행되므로 다양한 부분에서 재사용하기 어려우므로 유지 관리하는데 어려움이 생긴다.
728x90반응형'Spring > JPA' 카테고리의 다른 글
[JPA] CascadeType과 orphanRemoval 설정 이해하고 사용하기 (0) 2024.11.27 [JPA] Json 다형성을 활용한 DTO 설계와 확장 (0) 2024.11.26 org.hibernate.loader.MultipleBagFetchException 원인 및 해결 (0) 2024.02.15 [JPA] LazyInitializationException 발생! (0) 2024.02.14 JPA 연관 관계 매핑 - start (1) 2024.01.14