728x90
redirect
redirect가 붙고 안 붙고의 차이에 대해서 알아보고자 한다.
@GetMapping("/insert")
public String insert() {
System.out.println("BoardController insert()");
return "board/insert";
}
@PostMapping("/insertPro")
public String insertPro(BoardDTO boardDTO) {
System.out.println("BoardController insertPro()");
boardService.insert(boardDTO);
return "redirect:/board/list";
}
그냥 게시판을 만들 때 리턴값을 redirect를 붙이고 안 붙이고 차이가 있다. 사실 전부터 이해가 될 듯 말 듯한 내용이다.
현재 list페이지이다. 여기서 글쓰기를 누른다면
insert페이지로 이동한다. 위의 코드대로 작성하기를 누르면?
글이 작성되고 list 페이지로 넘어간다. 그렇다면 insertPro() 메소드에서 redirect를 없앤다면?
@PostMapping("/insertPro")
public String insertPro(BoardDTO boardDTO) {
System.out.println("BoardController insertPro()");
boardService.insert(boardDTO);
// return "redirect:/board/list";
return "board/list";
}
이와 같이 코드를 변경하고 똑같은 작업을 해보자
list페이지로 넘어가지 않고 위의 화면이 나타난다. 그렇다면 글은 작성되었을까?
글은 작성된 것이 확인된다.
즉 redirect가 붙고 안 붙고의 차이를 정리하면,
- redirect가 붙은 경우
클라이언트에게 다른 URL로 이동하도록 지시함. "redirect:/board/list"라고 한다면 서버는 클라이언트에게 /board/list로 새로운 요청을 보내라는 응답을 함. 이 방식은 보통 폼 제출 후에 사용되며, 페이지 새로 고침 시 동일한 요청이 다시 발생하는 것을 방지한다. - redirect가 붙지 않은 경우
지정한 뷰의 이름을 반환하고, 해당 뷰를 렌더링하여 클라이언트에게 직접 보내줌. "board/insert"라고 하면, 해당 JSP 페이지를 서버가 렌더링하여 클라이언트에게 응답으로 전달함. 주로 데이터를 입력받는 폼을 표시할 때 사용됨.
즉, redirect는 클라이언트를 다른 URL로 이동시키고, redirect가 붙지 않는 경우는 지정된 뷰를 직접 보여주는 차이가 있다.
redirect와 RequestDispatcher
JSP에서는 forward보다는 주로 RequestDispatcher를 통해 내부적으로 요청을 포워딩하는 방식으로 처리됨
예시)
redirect방식
- 고객이 고객센터로 상담원에게 123번으로 전화를 건다.
- 상담원은 고객에게 "해당 문의 사항은 124번으로 다시 문의해주시겠어요?
- 고객은 통화를 끊고 124번으로 전화를 걸어 일을 처리한다.
forward(RequestDispatcher)
- 고객이 고객센터로 상담원에게 123번으로 전화를 건다.
- 상담원은 해당 문제를 해결하지 못 해 슈퍼바이저에게 답을 얻는다.
- 상담원은 슈퍼바이저에게 얻은 답을 가지고 문제사항을 처리해준다.
참고 : https://doublesprogramming.tistory.com/63
차이)
redirect
- 정의 : 클라이언트에게 새로운 URL로 이동하라고 지시
- 작동 방식 : 서버가 클라이언트에게 HTTP 상태 코드를 포함한 응답을 보내며, 새로운 URL로 요청을 보냄
- 클라이언트 URL : 클라이언트의 URL이 변경. 사용자가 보게 되는 URL이 실제로 리다이렉트된 주소로 바뀜
- 세션/속성 : 리다이렉션 후에는 요청 속성을 잃어버림. 필요한 데이터는 세션이나 파라미터 등을 통해 전달해야함
- 사용 예 : 폼 제출 후, 결과 페이지로 이동할 때 많이 사용
RequestDispatcher(Forward)
- 정의 : 요청을 다른 리소스로 내부적으로 전달
- 작동 방식 : 서버가 요청을 다른 서블릿이나 JSP 페이지로 포워딩하여 해당 리소스를 처리하도록 함
- 클라이언트 URL : 클라이언트의 URL이 변경되지 않음. URL은 원래 요청한 URL을 그대로 유지
- 세션/속성 : 요청 속성과 세션 속성을 모두 공유 할 수 있어 같은 요청 내에서 데이터 전달에 용이
- 사용 예 : 같은 요청 내에서 다른 뷰를 렌더링할 때 사용
→ 요약
- URL의 변화
redirect - URL이 변경
Forward - URL이 유지 - 데이터 전달
redirect - 요청 속성을 잃음
Forward - 속성을 공유 - 용도
redirect - 주로 요청 후 결과 페이지로 이동할 때
Forward - 같은 요청 내에서 뷰를 전환할 때
728x90
'organize > 스프링' 카테고리의 다른 글
웹 시큐리티 (0) | 2024.10.05 |
---|---|
프레임워크, Spring과 Spring Boot (1) | 2024.10.04 |
페이지 처리 (0) | 2024.10.02 |
스프링 프로젝트 정리 1 (0) | 2024.09.18 |
1. 개발을 위한 준비 (0) | 2024.08.27 |