리다이렉트(Redirect)를 언제 사용하고 왜 사용하는 지에 대해 정리한 글.

↓ 전체 회원 List를 보여주는 메서드.
@GetMapping("/member")
public String findAll(Model model) {
List<MemberDTO> memberDTOList = memberService.findAll();
model.addAttribute("memberList", memberDTOList);
return "list";
}
Model객체를 받아와서 model.addAttribute()메서드를 통해 memberDTOList를 "memberList"라는 이름으로 추가함.list.html에서 memberDTOList를 "memberList"라는 이름으로 memberDTOList에 담겨있던 데이터를 사용할 수 있음.↓ 회원을 탈퇴시키는 메서드.
@GetMapping("/member/delete/{id}")
public String deleteById(@PathVariable("id") Long id) {
memberService.deleteById(id);
return "?";
}
return "list";로 작성해서 전체 유저를 조회할 수 있는 List 페이지를 반환하는 게 맞을까??
list.html
<body>
<h2>list.html</h2>
<table>
<tr>
<th>id</th>
<th>memberEmail</th>
<th>memberName</th>
<th>memberPassword</th>
<th>상세조회</th>
<th>삭제</th>
</tr>
<tr th:each="member : ${memberList}">
<td th:text="${member.id}"></td>
<td th:text="${member.memberEmail}"></td>
<td th:text="${member.memberName}"></td>
<td th:text="${member.memberPassword}"></td>
<td>
<a th:href="@{|/member/${member.id}|}">조회</a>
</td>
<td>
<a th:href="@{|/member/delete/${member.id}|}">삭제</a>
</td>
</tr>
</table>
</body>
list.html은 위와 같이 작성되어 있음.
memberList객체를 반복문을 통해 member로 넘겨주고 이 변수(즉 member)에 들어있는 값을 빼내면서 데이터를 출력하는 형식.즉, 서버에서 데이터를 넘겨받아서 그 데이터를 통해 동적으로 페이지를 출력해야하는데 데이터 없이 뷰페이지만 반환해서 저런 오류가 발생함.
이럴 때 활용하는 것이 리다이렉트(Redirect).
다시 메서드를 보자.
// 전체 회원 List
@GetMapping("/member")
public String findAll(Model model) {
List<MemberDTO> memberDTOList = memberService.findAll();
model.addAttribute("memberList", memberDTOList);
return "list";
}
// 강제 탈퇴
@GetMapping("/member/delete/{id}")
public String deleteById(@PathVariable("id") Long id) {
memberService.deleteById(id);
return "redirect:/member";
}
탈퇴버튼 클릭시 /member/delete/{member.id}으로 요청.↓@GetMapping("/member/delete/{id}")으로 요청을 받아서 deleteById()메서드 실행.return "redirect:로 /member 리다이렉트 요청.↓/member로 요청.↓@GetMapping("/member")으로 요청을 받고 findAll()메서드 실행.DB에서 가져온 회원List를 "memberList"으로 model에 담아서 list.html을 반환.↓list.html을 동적으로 출력.