스프링 redirect

Life is ninanino·2023년 3월 22일
0
post-thumbnail

호눅스가 "redirect가 뭐에요? 무슨 일을 하는거에요?" 라고 물어봤다
대답하지 못했다
리다이렉트가 뭘까?
우선 forward에 대해 알아보자

forward?

포워드는 다음으로 이동한 URL로 요청 정보를 그대로 전달한다. 그렇기 때문에 사용자가 최초로 요청한 요청 정보는 다음 URL에서도 유효하다. 글 작성 중 응답페이지에서 새로고침을 누른다면 요청 정보가 살아있기 때문에 요청이 여러번 전달되어 중복이 발생할 수 있다. 시스템에 변화가 생기지 않는 단순한 조회 요청(글 목록보기, 검색)의 경우 forward를 사용하는 것이 좋다.

복잡하다. 결국 무슨소리냐? 조회할때 포워드를 사용해라.

redirect?

리다이렉트의 경우 최초 요청을 받은 URL1에서 클라이언트에게 리다이렉트할 URL2를 반환하고, 클라이언트에서는 새로운 요청을생성하여 URL2에 다시 요청을 보낸다. 그래서 처음 보냈던 최초의 request, response 객체는 유효하지 않고 새롭게 생성된다. 글쓰기 기능을 수행할 때 redirect를 사용하여 응답 페이지를 부르면 사용자가 실수로 새로고침을 누르더라고 처음의 요청 정보는 존재하지 않으므로 게시물이 여러 번 등록되지 않는다. 그렇기 때문에 시스템에 변화가 생기는 회원가입, 글쓰기의 경우에는 리다이렉트를 쓰는 것이 좋다.

그러니까, 요청과 응답을 공유하지 않기 때문에 생성, 업데이트, 삭제를 처리해도 된다.
리다이렉트 시 값을 전달하려면 GET 방식으로 보내야한다. 요청 객체가 새로 생성되기 때문에 값을 보내려면 URL과 같이 보내야 하기 때문이다.

스프링에서는 어떻게 동작할까?

spring MVC는 요청이 발생되면 요청 주소를 분석하여 그와 매핑되어 있는 메서드를 호출하고 메서드가 반환하는 정보를 토대로 응답 결과를 생성하여 클라이언트에게 전달한다

리다이렉트는 서버가 클라이언트에게 요청할 주소를 응답결과를 전달한다
클라이언트는 응답결과로 받은 요청 주소를 직접 요청하고 브라우저가 요청하는 것이므로 주소창의 주소는 변경된다.
리다이렉트는 새로운 요청이 발생하는것이므로 HttpServletRequest 객체는 소멸 후 새롭게 생성되며 HttpSession 객체는 그대로 유지된다.

포워드는 코드의 흐름을 서버상에서만 이동하는 것을 의미한다
브라우저는 다른 곳으로 흐름이 이동되었다는 것을 알 수 없기 때문에 주소창의 주소는 변경되지 않는다
HttpServletRequest, HttpSession 모두 유지된다

profile
백엔드 프로그래밍을 공부하고 있습니다. AWS, 클라우드 환경에 대해 관심이 많습니다.

1개의 댓글

comment-user-thumbnail
2023년 3월 31일

니노 나도 궁금했는데 잘 보고 가용 😎

답글 달기