organize/스프링

redirect, redirect와 RequestDispatcher

001cloudid 2024. 10. 3. 13:40
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가 붙고 안 붙고의 차이를 정리하면,

  1. redirect가 붙은 경우
    클라이언트에게 다른 URL로 이동하도록 지시함. "redirect:/board/list"라고 한다면 서버는 클라이언트에게 /board/list로 새로운 요청을 보내라는 응답을 함. 이 방식은 보통 폼 제출 후에 사용되며, 페이지 새로 고침 시 동일한 요청이 다시 발생하는 것을 방지한다.
  2. redirect가 붙지 않은 경우
    지정한 뷰의 이름을 반환하고, 해당 뷰를 렌더링하여 클라이언트에게 직접 보내줌. "board/insert"라고 하면, 해당 JSP 페이지를 서버가 렌더링하여 클라이언트에게 응답으로 전달함. 주로 데이터를 입력받는 폼을 표시할 때 사용됨.

즉, redirect는 클라이언트를 다른 URL로 이동시키고, redirect가 붙지 않는 경우는 지정된 뷰를 직접 보여주는 차이가 있다.


redirect와 RequestDispatcher

JSP에서는 forward보다는 주로 RequestDispatcher를 통해 내부적으로 요청을 포워딩하는 방식으로 처리됨

 

예시)

redirect방식

  1. 고객이 고객센터로 상담원에게 123번으로 전화를 건다.
  2. 상담원은 고객에게 "해당 문의 사항은 124번으로 다시 문의해주시겠어요?
  3. 고객은 통화를 끊고 124번으로 전화를 걸어 일을 처리한다.

forward(RequestDispatcher)

  1. 고객이 고객센터로 상담원에게 123번으로 전화를 건다.
  2. 상담원은 해당 문제를 해결하지 못 해 슈퍼바이저에게 답을 얻는다.
  3. 상담원은 슈퍼바이저에게 얻은 답을 가지고 문제사항을 처리해준다.

참고 : 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