왜 회원가입 처리 후, 페이지를 redirect 할까?

Solar·2020년 2월 17일
1

WEB

목록 보기
1/1

회원가입을 처리하기 위한 UserController.java 파일의 소스코드이다.

@Controller
public class UserController {
    List<User> Users = new ArrayList<>();

    @GetMapping("/user/form")
    public String moveForm() {
        return "form";
    }

    @PostMapping("/user/create")
    public String addUser(Model model, User user) {
        System.out.println("userId : " + user.getUserId() + " password : " + user.getPassword());
        model.addAttribute("name", user.getName());
        Users.add(user);
        return "redirect:/users"; //redirect
    }

    @GetMapping("/users")
    public String viewUsers() {
        return "list";
    }
}

why redirect ?

회원가입을 처리한 후, 왜 바로 회원목록 페이지(list)를 보여주지 않고, 클라이언트로부터 redirect 하도록 하는 것일까?

REST API (URL) Naming Convention 에 따르면 GET과 POST의 역할이 구분되어 있다.

GET의 역할은 리소스[^1]를 요청만 한다.

POST는 리소스를 생성하는 요청이다. (이렇게 하도록 시멘틱에서 약속?을 함) 역할 구분을 위해서...

따라서 POST는 리소스를 생성하는 역할만 하고 끝나야하는 것이다. (끝나고 다른 리소스를 제공해주지 않아야 함.)

물론 기능상 return에 list.html 을 써서 바로 회원목록을 보여줄 수 있지만, (기능상 동작은 하겠지만) 그렇게 하지 말라는 것이다.

따라서 사용자 추가를 완료한 후 사용자 목록 페이지("redirect:/users")로 이동한다.로 한 이유는,

클라이언트한테 리다이렉트할 주소를 알려주고, 클라이언트는 서버가 알려준 주소로 GET요청( GET /url)을 다시 보내게 되는 것이다. GET은 자원을 요청하는 역할 이니깐, 이런 식으로 동작하록 하는 게 맞는 것이다.

[^1]: REST에서 기본 데이터 표현

참고

REST Resource Naming Guide

redirection 하는 이유

profile
nunnu

1개의 댓글

comment-user-thumbnail
2020년 3월 3일

글 잘 봤습니다. 😁

마크다운에서 anchor 태그를 사용할 수 있습니다. (velog에서 직접 글 작성하고 테스트 해봤어요.)
https://stackoverflow.com/questions/6695439/how-to-link-to-a-named-anchor-in-multimarkdown

쨘!

<a name="GET" href="#^1">GET</a>

<p id="^1">REST에서 기본 데이터 표현 <a href="#GET">돌아가기</a></p>

물론 마크다운 문법인 [name](link) 를 활용해도 됩니다.

와 같은 식으로요.

답글 달기