📌 포워딩(Forward) 코드 vs 리다이렉트(Redirect) 코드 비교
✅ 1. 포워딩(Forward) 코드
✔ 서버 내부에서 이동하며, 클라이언트의 URL은 변경되지 않음.
✔ request.setAttribute()
로 저장한 데이터가 유지됨.
✔ 같은 요청 내에서 처리됨 (한 번의 요청).
🔹 포워딩 코드 (forward()
)
String gotopage = "member/meUpdateForm.jsp"; // 이동할 JSP 파일
RequestDispatcher dispatcher = request.getRequestDispatcher(gotopage);
dispatcher.forward(request, response);
📌 특징
✅ request.setAttribute()
로 저장한 데이터가 유지됨.
✅ 클라이언트(브라우저)의 URL이 변경되지 않음.
✅ 서버 내부에서 요청이 이동하기 때문에 빠름.
✅ 예제: 로그인 후 마이페이지로 이동 (forward("mypage.jsp")
).
✅ 2. 리다이렉트(Redirect) 코드
✔ 클라이언트(브라우저)가 새로운 요청을 보내며, URL이 변경됨.
✔ request.setAttribute()
로 저장한 데이터는 유지되지 않음.
✔ 두 개의 요청이 발생 (기존 요청 → 새로운 요청).
🔹 리다이렉트 코드 (sendRedirect()
)
response.sendRedirect("member/meUpdateForm.jsp");
📌 특징
✅ URL이 변경됨 (클라이언트가 새 요청을 보냄).
✅ request.setAttribute()
로 저장한 데이터는 유지되지 않음.
✅ 서버가 클라이언트에게 새로운 URL로 이동하라고 응답을 보내기 때문에 다소 느릴 수 있음.
✅ 예제: 로그아웃 후 로그인 페이지로 이동 (sendRedirect("login.jsp")
).
✅ 3. 포워딩 vs 리다이렉트 비교 정리
구분 | 포워딩 (forward() ) |
리다이렉트 (sendRedirect() ) |
---|---|---|
요청 방식 | 같은 요청(Request) 내에서 이동 | 새로운 요청 발생 |
URL 변경 여부 | 변하지 않음 | 변함 |
요청 데이터 유지 (request.setAttribute ) |
유지됨 | 유지되지 않음 |
속도 | 빠름 (서버 내부 이동) | 느림 (클라이언트가 새 요청 보냄) |
사용 예시 | 로그인 후 마이페이지 이동, 데이터 전달 필요할 때 | 로그아웃 후 로그인 페이지로 이동 |
✅ 4. 어떤 경우에 사용해야 할까?
사용 사례 | 추천 방법 | 이유 |
---|---|---|
로그인 후 마이페이지로 이동 | 포워딩 (forward() ) |
로그인한 사용자 정보(request.setAttribute() )를 유지해야 하므로. |
로그아웃 후 로그인 페이지로 이동 | 리다이렉트 (sendRedirect() ) |
세션을 초기화하고 새 요청을 만들어야 하므로. |
폼 입력 오류 시 다시 입력 페이지로 이동 | 포워딩 (forward() ) |
사용자 입력 데이터와 오류 메시지를 유지해야 하므로. |
회원가입 후 환영 페이지로 이동 | 리다이렉트 (sendRedirect() ) |
새 요청으로 이동하여 중복 제출을 방지해야 하므로. |
✅ 결론
✔ 포워딩 (forward()
)은 같은 요청 내에서 서버 내부에서 이동하는 방식.
✔ 리다이렉트 (sendRedirect()
)는 클라이언트가 새로운 요청을 보내는 방식.
✔ 데이터를 유지하면서 페이지를 이동해야 하면 forward()
, 새 요청을 보내야 하면 sendRedirect()
사용!
📌 포워딩(Forward)과 리다이렉트(Redirect)는 Spring과 Spring Boot에서도 사용되는가?
✅ 네, JSP뿐만 아니라 Spring과 Spring Boot에서도 포워딩과 리다이렉트 개념이 사용됩니다!
✔ Spring과 Spring Boot에서는 forward:
와 redirect:
를 사용하여 JSP 또는 컨트롤러 간 이동을 수행합니다.
✔ 기본 개념은 동일하지만, Spring에서는 RequestDispatcher.forward()
와 response.sendRedirect()
를 직접 사용하기보다 return
값을 통해 이동을 처리합니다.
✅ 1. Spring/Spring Boot에서 포워딩 (Forward)
✔ 서버 내부에서 요청을 전달하며, 클라이언트의 URL은 변경되지 않음.
✔ request.setAttribute()
로 저장한 데이터를 유지할 수 있음.
✔ 뷰(JSP, Thymeleaf 등)로 데이터를 전달할 때 주로 사용됨.
🔹 Spring에서 포워딩 예제
@Controller
@RequestMapping("/member")
public class MemberController {
@GetMapping("/update")
public String showUpdateForm(Model model) {
// 데이터 저장 (request.setAttribute()와 유사)
model.addAttribute("message", "회원 정보를 수정하세요.");
// "member/meUpdateForm.jsp"로 포워딩
return "forward:/member/meUpdateForm";
}
}
✔ GET /member/update
요청이 들어오면 meUpdateForm.jsp
로 포워딩됨.
✔ URL은 그대로 유지되며, model.addAttribute()
로 저장한 데이터가 JSP에서 사용 가능.
🔹 JSP에서 EL로 데이터 출력 (meUpdateForm.jsp
)
<p>${message}</p> <!-- "회원 정보를 수정하세요." 출력 -->
✅ 2. Spring/Spring Boot에서 리다이렉트 (Redirect)
✔ 클라이언트가 새로운 요청을 보내도록 함.
✔ 이동 후 브라우저의 URL이 변경됨.
✔ 이전 요청에서 저장한 데이터(model.addAttribute()
)는 유지되지 않음.
🔹 Spring에서 리다이렉트 예제
@Controller
@RequestMapping("/member")
public class MemberController {
@PostMapping("/update")
public String updateMember(@RequestParam String name) {
// 회원 정보 수정 로직 수행
System.out.println("회원 정보 업데이트: " + name);
// 수정 후 "/member/list" 페이지로 리다이렉트
return "redirect:/member/list";
}
}
✔ POST /member/update
요청이 들어오면 회원 정보를 수정한 후,
✔ 클라이언트가 /member/list
로 새로운 요청을 보내도록 리다이렉트함.
✔ 결과적으로 URL이 /member/list
로 변경됨.
✅ 3. Spring에서 forward:
vs redirect:
비교
구분 | forward:/URL (포워딩) |
redirect:/URL (리다이렉트) |
---|---|---|
요청 방식 | 같은 요청 내에서 이동 | 새로운 요청 발생 |
URL 변경 여부 | 변하지 않음 | 변함 |
데이터 유지 (model.addAttribute ) |
유지됨 | 유지되지 않음 |
속도 | 빠름 (서버 내부 이동) | 느림 (클라이언트가 새 요청 보냄) |
사용 예시 | 입력 폼 재표시, 데이터 유지 필요할 때 | 로그인 후 메인 페이지 이동, 새로고침 방지 |
✅ 4. Spring Boot에서도 포워딩과 리다이렉트 사용 가능?
✔ Spring Boot에서도 Spring과 동일한 방식(forward:
및 redirect:
)을 사용합니다.
✔ Thymeleaf 같은 템플릿 엔진과 함께 사용할 때에도 동일한 원칙이 적용됩니다.
🔹 Spring Boot에서 포워딩 예제 (Thymeleaf 사용)
@Controller
@RequestMapping("/member")
public class MemberController {
@GetMapping("/update")
public String showUpdateForm(Model model) {
model.addAttribute("message", "회원 정보를 수정하세요.");
return "forward:/member/meUpdateForm"; // Thymeleaf 템플릿으로 이동
}
}
✔ 포워딩되므로 model.addAttribute()
데이터가 유지됨.
🔹 Spring Boot에서 리다이렉트 예제
@Controller
@RequestMapping("/member")
public class MemberController {
@PostMapping("/update")
public String updateMember(@RequestParam String name) {
System.out.println("회원 정보 업데이트: " + name);
return "redirect:/member/list"; // 리다이렉트 수행
}
}
✔ 리다이렉트되므로 model.addAttribute()
데이터가 유지되지 않음.
✅ 5. 결론
✅ 포워딩과 리다이렉트는 JSP뿐만 아니라 Spring과 Spring Boot에서도 사용된다.
✅ Spring에서는 forward:/URL
을 사용하여 포워딩하고, redirect:/URL
을 사용하여 리다이렉트한다.
✅ 포워딩(forward:
)은 요청 데이터를 유지하면서 이동하며, URL이 변경되지 않는다.
✅ 리다이렉트(redirect:
)는 새로운 요청을 발생시키며, URL이 변경된다.
📌 포워딩(Forwarding)의 핵심은 "데이터 유지 여부"인가? ✅
✅ 맞아!
포워딩(Forwarding)과 리다이렉트(Redirect)의 가장 큰 차이점 중 하나가 데이터 유지 여부야.
포워딩은 현재 요청과 데이터를 유지하면서 다른 리소스(JSP 또는 다른 서블릿)로 이동하는 방식이고,
리다이렉트는 새로운 요청을 생성하여 이동하기 때문에 기존 데이터가 유지되지 않아!
🔹 포워딩의 핵심은 "데이터 유지"가 맞아! ✅
✔ request.setAttribute()로 저장한 데이터를 유지하면서 JSP나 다른 서블릿으로 이동 가능.
✔ 서버 내부에서만 이동하므로 클라이언트의 URL이 바뀌지 않음.
✔ 반면, 리다이렉트는 새로운 요청을 보내므로 데이터를 유지할 수 없음.
'웹 개발 > 웹 개발 기초' 카테고리의 다른 글
MVC 개념 및 모델1 vs 모델2 (0) | 2025.02.07 |
---|---|
HTTP전달방식(GET방식과 POST방식) (0) | 2025.02.07 |
URL과 URI의 차이 (1) | 2025.02.05 |
BOM (Browser Object Model) (0) | 2025.02.05 |
jsp 구성요소 (0) | 2025.02.03 |