1. Forward란?
Forward 방식은 서버에서 클라이언트의 요청을 다른 자원에 전달하여 처리하는 방식으로 클라이언트는 서버에서의 처리 과정을 인지하지 못하며 URL도 변경되지 않는다. 또한 하나의 요청을 통해 처리되는 만큼 request 객체가 유지된다. 아래 그림과 함께 비유를 통해서 설명하도록 하겠다.
Forward방식의 처리(비유)
1. 해외직구 택배가 도착하지 않아 택배사에 문의 메일을 남긴다.
2. 문의 메일을 받은 A상담사는 해외직구 관련 담당자가 아니어서 해당 내용을 모른다.
3. 하지만 A상담사는 옆부서의 해외직구 관련 B상담사에 재문의 하여 답변을 받아 고객에게 전달했다.
4. 답변을 받은 고객은 민원 처리과정은 알 수 없지만 문의를 한 A상담사에게 답을 얻을 수 있었다.
- A상담사는 본인이 직접 답변을 줬으므로 고객의 민원객체를 가지고 있다.
Forward방식의 문제점
- url이 유지된 상태로 객체를 그대로 가지고 있다.
- 글쓰기를 진행한다고 했을때 글쓰기를 완료한 후 새로고침을 진행하면 url과 객체가 유지되고 있으므로 글쓰기가 중복으로 일어날 수 있게 된다.
- 예시로 아래의 코드로 콘텐츠를 등록하고 반복해서 새로고침을 할 경우 콘텐츠는 중복되어 등록되게 된다.
@WebServlet("/NewContents")
public class NewContentsServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 콘텐츠 등록 service 연결
// ......
// 콘텐츠 등록 완료
// 뷰페이지 변경
request.getRequestDispatcher("/WEB-INF/contentsComplite.jsp").forward(request, response);
}
}
2. Redirect란?
Redirect는 클라이언트의 요청을 다른 url로 보내는 방식이다. 클라이언트는 새로운 url로 이동하게 되므로 새로고침을 하더라도 이전 url에서 받던 응답이나 객체를 사용할 수 없게된다.
Redirect 방식의 처리(비유)
1. 블로그에 글을 작성하고 "등록" 버튼을 누른다.
2. 나의 글쓰기는 서버에서 처리가 완료되고 나에게 글쓰기 목록이 있는 url로 이동하라고 클라이언트에 지시한다.
3. 클라이언트는 새로 받은 url로 이동한다.
4. 내가 등록한 글을 확인할 수 있고 새로고침을 해도 아무런 변화가 생기지 않는다.
5. url이 바뀌면서 이전에 사용하던 내가 작성하던 글이나 제목에 대한 객체는 소멸한다.
Redirect 방식의 문제점
- 요청과 응답이 두번에 걸쳐서 일어나므로 Forward방식에 비해 느릴 수 있다.
- 이전 객체를 사용할 수 없기 때문에 상태를 유지(로그인 등) 하기 위해 세션이나 쿠키등을 이용해야한다.
@WebServlet("/NewContents")
public class NewContentsServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 콘텐츠 등록 service 연결
// ......
// 콘텐츠 등록 완료
// 새로운 url전달
response.sendRedirect("/contentsList")
}
}
3. 정리
Forward | Redirect | |
작동방식 | 서버에서 요청을 처리후 전달 | 클라이언트에게 새로운 url 이동을 지시 |
url 변경 | 변경되지 않음 | 변경됨 |
목적 | 서버 내부에서 요청 처리 | 다른 url로 이동 시킬때 |
객체 유지 | 유지됨 | 유지되지 않아 다른 방식이 필요(세션 등) |
히스토리 | 기록안됨 | 브라우저에 기록됨(뒤로가기 가능) |
응답 사이클 | 요청->응답 1회 | 요청->응답 2회 |
'Back-end > WEB' 카테고리의 다른 글
[WEB] 쿠키(Cookie)란? 자바로 쿠키 생성, 삭제, 읽기 방법은? (2) | 2024.07.05 |
---|---|
[WEB] PRG(Post-Redirect-Get) 패턴이란? (0) | 2024.07.02 |
[Web] Servlet, Jsp란? (0) | 2024.06.25 |