[스프링 MVC 1편] 7. 스프링 MVC - 웹페이지 만들기

조은지·2023년 8월 6일

강의 노트 위주로 작성

상품 도메인 개발

  • 가격이 정해지지 않은 경우, 0보다는 null값이 더 적절하다. => Integer를 사용한다.

  • @Data 는 핵심 도메인 모델에 사용하기에는 위험하다

    • toString()등 핵심 메소드들까지 모두 제공을 하기 때문
    • @Getter, @Setter 등으로 분리하는 것이 좋다.
  • 실무에서는 ConcurrentHashMap 을 사용해야 한다.



상품 목록 - 타임리프

  • @RequiredArgsConstructor

    final 이 붙은 멤버변수만을 사용해서 생성자를 자동으로 만들어준다.

  • @PostConstruct

    해당 빈의 의존관계가 모두 주입되고 나면 초기화 용도로 호출



상품 등록 폼

  • 단순 폼을 호출하는 것은 GET 메소드, 저장을 하는게 POST
  • 같은 url이더라도 다른 method로 동작하게 하는 것이 중요하다.



PRG Post/Redirect/GET

상품 수정의 경우 상품 상세로 redirect 처리를 했음

상품 등록의 경우 새로고침을 하게되면 같은 상품이 계속 중복되어 등록되는 문제가 발생

img

상품 등록의 경우, 단순히 뷰 템플릿을 보여주고 끝난다.

새로고침을 하면 마지막에 한 행위가 계속 요청이 된다.


해결 방안 - 리다이렉트

리다이렉트는 url이 바뀌면서 새로운 요청을 하게 된다.

새로고침을 하더라도 POST 요청이 아닌 상품상세 페이지 요청을 하게 된다.

=> PRG 패턴


RedirectAttributes

redirect 주소에서 item.getId()는 괜찮지만 item.getName()을 사용하는 경우가 있다면 인코딩이 안될 위험이 있다.

RedirectAttributes를 사용하여 해결

  • status=true를 추가하여, 뷰 템플릿에 값이 있으면 메시지 출력
  • redirectAttribute의 사용으로 필요한 pathvariable로 치환이 가능하고 사용이 안되는 것은 쿼리파라미터로 들어간다.

0개의 댓글