데이터 삭제 과정
- 클라이언트가 HTTP메서드로 특정 게시물 삭제 요청
- 삭제 요청을 받은 컨트롤러는 리파지터리를 통해 DB에 저장된 데이터 삭제
(기존에 데이터가 있는 경우에만 수행) - 삭제가 완료 됬다면 클라이언트를 결과 페이지로 리다이렉트
데이터 삭제하기
- Delete 버튼 추가
- Delete 버튼을 상세페이지(show.mustache)에 추가
- Edit 버튼의 코드를 복사후 버튼의 텍스트를 Delete로 수정
- 서버가 삭제와 수정 요청을 구분해서 동작할수 있도록 삭체 요청 URL을 "/articles/{{article.id}}/delete"로 수정
- Edit 버튼과 구별하기위해 버튼 색상을 빨간색으로 수정
- Delete 요청을 받아 데이터 삭제
- delete() 메서드 기본 틀 만들기
- ArticleController에 delete()메서드 추가
- delete() 메서드의 기본 틀을 입력하고 return 값으로 null 을 반환
- 삭제 요청을 받기위해 매핑 어노테이션 작성 @GetMapping("/articles/{id}/delete") 으로 작성
- 삭제할 대상 가져오기
- DB에 접근해 데이터를 처리 하기위해 JPA 리파지터리를 이용
- articleRepository.findById(id) 메서드로 DB에 해당 id를 가진 데이터를 찾고 있으면 Article타입의 target 변수에 저장 없으면 null을 반환
- findById(id)를 호출할 때 사용한 id 변수는 delete() 메서드에 선언되지 않음. 이 id는 @GetMapping("/articles/{id}/delete")의 URL 주소에서 가져오므로 delete() 메서드의 매개변수로 @PathVariable Long id로 작성
- DB에 접근해 데이터를 처리 하기위해 JPA 리파지터리를 이용
- 대상 엔티티 삭제하기
- target에 무엇인가 저장이 되었다면 삭제를 수행하도록 함
- if문을 사용해서 target이 null인지 아닌지 확인
- 삭제는 articleRepository를 작성하고 점을 찍어서 delete()메서드를 선택 그리고 전달값으로 target을 넣음
- target에 무엇인가 저장이 되었다면 삭제를 수행하도록 함
- 결과 페이지로 리다이렉트하기
- return문에 게시물을 삭제하면 목록 페이지로 이동하기위해 null을 지우고 "redirect:/articles"을 작성
- 삭제 완료 메시지 남기기
- RedirectAttributes 객체로 리다이렉트 페이지에서 사용할 데이터를 남길 수 있다고 했습니다. RedirectAttributes를 활용하려면 delete() 메서드의 매개변수로 받아 와야 합니다. 객체 이름은 rttr 로 작성
- RedirectAttributes 객체의 addFlashAttribute() 메서드를 활용하면 리다이렉트 시점에 한 번만 사용할 데이터를 등록 가능 . 한 번 쓰고 사라지는 휘발성 데이터를 등록
- if()문에 target의 null이 아니면 삭제가 진행되므로 if문 안쪽에 msg라는 키 문자열의 "삭제되었습니다" 라는 값을 메시지로 넣음
- msg 키 값에 담긴 메시지는 목록페이지에서 보여줘야되기 때문에 index.mustache을 수정
- 헤더 안에 삭제 메시지를 출력하는게 좋기 떄문에 header.mustache 파일을 열기
- 코드 맨 아래에 {{#msg}}{{/msg}}를 써서 msg 키를 사용할 범위를 잡아 줌
- 메시지 창(alert)으로 msg에 담긴 값을 출력과 닫기 버튼 추가
- delete() 메서드 기본 틀 만들기
'BE > 스프링 부트 3' 카테고리의 다른 글
10장 REST API 와 JSON (0) | 2023.12.10 |
---|---|
9장 CRUD와 SQL 쿼리 종합 (0) | 2023.12.06 |
7장 게시판 수정하기 :Update (0) | 2023.11.29 |
6장 게시판 내 페이지 이동하기 (0) | 2023.11.24 |
5장 게시글 읽기: Read (0) | 2023.11.23 |