Spring19 [Spring-Boot] 세션 URL 리라이팅 해결 방법 /;jsessionid= SSR 방식으로 프로젝트를 진행하고 있어서 토큰 방식을 사용하지 않고 세션 방식으로 로그인을 구현 해두었는데, 로그인이 완료되면 게시글이 조회되지않고 http://localhost:8080/;jsessionid=F59911518B921DF62D09F0DF8F83F872 이런 url로 리라이팅이 되는 현상을 발견했다. 이유를 알아보았는데, 로그인을 처음 시도하면 URL을 위와 같이 jsessionid를 포함하여 보내게 된다. - 웹 브라우저가 쿠키를 지원하지 않을 때, 쿠키 대신 URL을 통해서 세션을 유지하는 것 - 사용하려면 URL에 이 값을 계속 포함하여 전달 해야 한다. 🔎 URL 전달 방식 끄기 옵션 application.properties server.servlet.session.tracking.. 2024. 4. 15. Spring Data JPA를 활용한 Update 처리(변경감지, 더티체킹) 최근 Spring Data JPA를 사용하며 SSR 방식으로 개발중이다. 게시글 정보를 수정하는 Update 로직을 처리 하려고 한다 JPA에서 Update 처리 로직을 보기 전에 변경감지(더티체킹)이 뭔지 알아보자 더티체킹이란? Transaction안에서 엔티티의 변경이 일어나면 변경내용을 자동으로 데이터베이스에 반영하는 JPA 특징이다. 게시글을 관리하는 BoardService의 updateBoard 메서드이다. 우리가 생각하는 JPA를 활용한 쿼리 처리는 JPARepository를 상속받고 있는 boardReporitory 인터페이스에서 JPA에서 제공해주는 기본 메서드인 findAll(), deleteById() 등 이런 메서드를 사용하여 update도 똑같이 처리를 할거라고 생각하겠지만, 소스를.. 2024. 4. 13. [Spring-Boot] no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) 에러 해결 방법 문제 컨트롤러에서 /search GET 요청이 들어오면 SearchBoadRequest 라는 DTO를 requestBody로 받아와 boardService에 searchBoard() 메서드에 request를 보내주고 요청을 처리하게 되어있다. 여기서 문제는 DTO 사용에서 문제가 생긴 것이다. com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `board.dto.SearchBoardRequest` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property.. 2024. 2. 7. PRG 패턴 : Post → Redirect → Get PRG 패턴이란? 웹 개발 패턴 중 자주 사용되는 패턴으로 HTTP POST 요청에 대한 응답이 GET 요청을 위한 URI로 리다이렉트되는 것이다. 현재 문제점 상품 등록 버튼을 누르면 POST로 /add를 호출한다. 그 후 결과물이 POST로 남아있다. 마지막으로 요청한 것은 POST/add이다. 그 결과 새로고침을 하면 마지막 요청이 반복되므로 id만 증가하고 중복된 상품이 계속 등록된다. 웹 브라우저의 새로고침은 마지막에 서버에 전송한 데이터를 다시 전송하기 때문이다. 등록완료 페이지에서 새로고침을 누르게되면 이런식으로 중복된 데이터가 계속 쌓이게 된다. 이것을 해결할 수 있는 방법이 PRG 패턴을 적용시키는 것이다. PRG 패턴 적용 후 흐름 상품 등록 버튼을 누르면 POST /add가 호출된다... 2024. 1. 26. [Spring-Boot] @Controller vs @RestContoller 차이점 Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있다. 이번에는 이 2가지 어노테이션의 차이점에 대해 정리해보겠다. 주요 차이점은 @ResponseBody가 생성되는 방식. 즉, @Controller + @ResponseBody 조합 = @RestContoller 이다. @Controller 전통적인 Spring MVC의 컨트롤러 어노테이션인 @Controller는 주로 View(화면)를 반환하기 위해 사용됨. 아래와 같은 요청으로 view를 반환하게 됨. Client는 URL 형식으로 요청을 보냄. DispatcherServlet이 요청을 위임할 Handler Mapping을 찾음. Handler Mapping을 통해 해당 요청을 받는 Con.. 2024. 1. 23. [Spring-Boot] 스프링부트에서 jstl 사용시 빨간줄 에러 해결방법 Spring Boot에서 jstl를 사용하려고 했는데 이렇게 인식이 안되는 에러가 발생했다. 분명 build.gradle에 디펜던시도 잘 추가해뒀는데 왜 이런지 알아보았다. 💡 해결 방법 스프링 3.0 버전 이상부터는 implementation 'jakarta.servlet:jakarta.servlet-api' //스프링부트 3.0 이상 implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api' //스프링부트 3.0 이상 implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl' //스프링부트 3.0 이상 디펜던시를 이렇게 설정하면 해결이 된다. 디펜던시 설정을 하고 나니 정상적으로 해결이.. 2024. 1. 18. 이전 1 2 3 4 다음