JPA paging을 할 때는 COUNT()에 fetch될 항목까지 들어가면 위의 QueryException이 발생합니다. 잘못된 예 @Query(value = """ SELECT p FROM Post p INNER JOIN FETCH p.writerUser """ ) fun findWithWriterUser(pageable: Pageable): Page 올바로 동작하는 예 @Query( value = """ SELECT p FROM Post p INNER JOIN FETCH p.writerUser wu """, countQuery = """ SELECT COUNT(p) FROM Post p INNER JOIN p.writerUser wu """ ) fun findWithWriterUser(pageabl..
전체 글 검색 결과
junit test 돌릴 때 hibernate query가 어떻게 동작하는지 보고 싶을 때 query가 안나오는 경우 1. query를 노출시키지 않은 경우 application.yml or .properties 파일에 아래처럼 설정을 추가해서 해결합니다. logging: level: org.hibernate.type: trace 2. 그래도 노출이 되지 않는다면 테스트케이스에서 트랜잭션이 롤백되면서 노출되지 않는 경우가 있는데요. 해당 테스트메서드나 클래스 상단에 아래처럼 어노테이션을 추가해주시면 트랜잭션이 커밋되면서 노출되게 됩니다. @Rollback(false) 하지만 트랜잭션 롤백이 되지 않아 다른 테스트에 영향을 줄 수 있게 되니 쿼리 확인할 때만 쓰시고 테스트 코드에 남기지는 마시기 바랍니다.
Spring Security를 이용하면 기본으로 추가되는 응답 헤더들이 있습니다. 프로젝트에 Spring Security의 적용을 고려하시는 분들은 default 옵션을 알아두시면 도움이 될 것 같습니다. * X-Content-Type-Options : MIME type sniffing 방지를 위한 헤더, * X-XSS-Protection : 크로스사이트 스크립팅 관련 헤더 * Cache-Control : 캐시 컨트롤 헤더 * HTTP Strict Transport Security : 웹브라우저가 이 헤더를 받게 되면 특정 '도메인'에 무조건 https로 접속하게 됩니다. http로 접근해도 https로 강제 redirect 됩니다. * X-Frame-Options : , 태그 등을 이용하는 코드에 대해..
Spring DispatcherServlet DispatcherServlet은 Spring MVC 프레임워크에서 Front Controller 역할을 담당한다. MVC(Model-View-Controller) 패턴 MVC 패턴은 비즈니스 로직과 프레젠테이션 로직이 분리되어 코드의 가독성이 향상되고 유지보수가 용이하다. MVC로 시스템을 개발하다보면 안전성, 유지보수성을 향상시키기 위해서 공통으로 수행되는 로직을 어느 한 곳에 몰아둘 필요가 생긴다. 중복 코드를 피하기 위함이다. Front Controller 패턴 웹 사이트의 모든 요청을 처리하는 컨트롤러(A controller that handles all requests for a Web site) 인증, 보안, 국제화, 뷰 제공 등의 공통 작업을 수..
AspectJ를 이용한 AOP는 프록시 기반에서 작동합니다.Pointcut을 컨트롤러에 걸었는데 해당 컨트롤러가 기타 컨트롤러(MultiActionController 등..)를 상속한 경우에는 CGLIB 프록시가 아닌 JDK 프록시가 적용됩니다. URL 맵핑을 진행하는 AbstractHandlerMethodMapping 인스턴스에서 JDK 프록시가 적용된 컨트롤러는 URL 맵핑을 하지 못합니다. 결국 해당 컨트롤러에 포함된 메서드로의 HTTP Request에 대해 톰캣이 404를 노출하게 됩니다. 이런 경우에는 CGLIB 프록시를 강제로 적용해야 합니다. 1. context 파일에 어노테이션 추가이 방식은 AOP가 적용되는 모든 클래스에 CGLIB 프록시를 적용하는 설정입니다.심플한 방법이나 , , 의 ..