면접에서 리다이렉트(Redirect)와 포워드(Forward)의 차이점을 물어보는 질문이 나왔는데 포워드가 정확히 기억이 안 나서 대답을 못 했다.

 

먼저 리다이렉트는 웹 브라우저에게 해당 url로 다시 요청을 하라고 응답을 보낸다. 그래서 새로운 요청이 보내지기 때문에 url도 바뀌게 된다. 리다이렉트는 주로 POST 요청에서 사용을 하는데 HTTP 메서드중 POST는 예외적으로 멱등성이(똑같은 요청에 대해 같은 결과가 나오는 것) 성립하지 않기 때문에 새로고침 같은 반복 요청이 올 경우 리소스 생성이 여러번 일어나면서 문제가 생길 수 있다. 그래서 일반적으로 PRG(Post -> Redirect -> Get) 패턴으로 리다이렉트를 해준다.

 

리다이렉트를 할 때 redirectAttributes에 addAttribute() addFlashAttribute()를 사용하는 이유는 addAttribute의 경우에는 GET 요청 시 쿼리파라미터로 생성된 게시글의 id값을 넘겨주기 위함이고, addFlashAttribute()는 쿼리 파라미터로 넘겨지지 않고 일회성 용도로 사용이 된다. (저장이 완료되었다는 알림창을 띄우는 등)

 

redirect:/ 를 사용하면 UrlBasedViewResolver가 viewName이 "redirect"로 시작하는 것을 인식하고 동작을 한다.

 

 

타임리프의 th:if 문법으로 result의 값이 true일 경우 리다이렉트로 넘어온 것을 확인해서 저장이 완료되었다고 출력하게 하였다.

 

그리고 redirect 과정이 어떻게 되는지 보려고 디버깅을 해보았는데 블로그분처럼 따라가는게 어려워서 나중에 다시 해봐야겠다. 

(invokeForRequest 반환으로 returnValue에 "redirect:/board/read"가 넘어오는 것까지 확인)

 

중요한 것은 리다이렉트와 포워드의 차이점인데 리다이렉트는 302 상태코드로 응답을 하고 Location으로 새로운 GET 요청을 한다.

아래와 같이 응답 리다이렉트를 받고 다시 요청이 오게 된다.

반면 포워드는 온전히 서버측에서 발생하는데 웹 브라우저로 이동하여 새로운 요청이 생기는 것이 아니라 서블릿 컨테이너에서 동일한 요청을 해당 Url로 다시 보내는 것이기 때문에 url은 브라우저에서 바뀌지 않고 처음 요청한 url로 보이게 된다. (Request 객체가 살아있는 것)

사실 리다이렉트만 필요시 사용을 해보고 포워드를 활용해서 다른 url로 넘겨서 사용해본 적이 없어서 어떤 상황에 쓰이는지 잘 모르겠다.

 

 

 

IntelliJ 디버깅 해보기

안녕하세요? 이번 시간엔 intellij의 debugging 을 간단하게 진행해보려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. (공부한 내용을 정리하는 Github와

jojoldu.tistory.com

 

Spring) 스프링의 "redirect:" 리다이렉트 처리

Intro Spring Framework 를 사용한다면 컨트롤러에서 리턴타입은 String으로 하고 view 이름 대신 "redirect:" 로 시작하는 문자열을 반환 하면 해당 주소로 리다이렉트를 시켜 줍니다. "redirect:" 를 했는데 리

shanepark.tistory.com

 

A Guide To Spring Redirects | Baeldung

A guide to redirect and forward in Spring MVC, with a focus on the code and implementation of each strategy.

www.baeldung.com

 

 

[Web] Forward와 Redirect 차이

웹은 현재 작업중인 페이지에서 다른 페이지로 이동하기 위해 2가지 페이지 전환 기능을 제공합니다. 오늘은 2가지의 페이지 전환 방법의 차이와 사용법에 대해 알아보도록 하겠습니다. 1. Forward

mangkyu.tistory.com

 

+ Recent posts