8.1 데이터 삭제 과정
- 클라이언트가 HTTP 메서드로 특정 게시글의 삭제 요청
- 삭제 요청을 받은 컨트롤러는 리포지토리를 통해 DB에 저장된 데이터를 찾아 삭제
- 기존 데이터가 있을 경우에만 수행
- 삭제가 완료됐다면 클라이언트를 결과 페이지로 리다이렉트
- 결과 페이지로 리다이렉트 시 RedirectAttributes 클래스 이용해 삭제 완료 메세지도 함께 띄워주기
- RedirectAttributes 객체의 addFlashAttribute() 메서드 : 리다이렉트된 페이지에서 사용할 일회성 데이터 등록
8.2 데이터 삭제하기
8.2.1 Delete 버튼 추가하기
Delete 버튼을 상세 페이지에 추가하려고 show.mustache 파일에 코드 작성하기
<a href="/articles/{{article.id}}/delete" class="btn btn-danger">Delete</a>
8.2.2 Delete 요청을 받아 데이터 삭제하기
Delete 요청을 받아 줄 컨트롤러 만들기 : HTML은 POST와 GET 메서드만 제공하기 때문에 GET 방식으로 처리
@GetMapping("/articles/{id}/delete")
public String delete(@PathVariable Long id, RedirectAttributes rttr){
log.info("삭제 요청이 들어왔습니다!"); // delete()가 잘 동작하는지 확인하는 로그 추가
// 1. 삭제할 대상 가져오기
Article target = articleRepository.findById(id).orElse(null);
log.info(target.toString());
// 2. 대상 엔티티 삭제하기
if (target != null){
articleRepository.delete(target); // DB에서 삭제 수행
rttr.addFlashAttribute("msg", "삭제됐습니다!");
}
// 3. 결과 페이지로 리다이렉트하기
return "redirect:/articles";
}
- 삭제 요청을 받아 오기 위해 @GetMapping() 작성
- 1번 글의 삭제 요청 : /articles/1/delete 페이지로 연결
- 2번 글의 삭제 요청 : /articles/2/delete 페이지로 연결
- @PathVariable : @GetMapping의 URL에서 중괄호에 둘러싸인 값을 매개변수로 가져옴
- JPA 리포지토리를 이용해 DB에 접근해 데이터를 삭제한다.
- 리포지토리를 통해 대상 엔티티를 삭제한다.
- 결과 페이지로 리다이렉트한다.
- 삭제 완료 메세지를 남긴다
- 객체명.addFlashAttribute(넘겨주려는 키 문자열, 넘겨 주려는 값 객체);
- 키 문자열 : 데이터를 꺼낼 때 사용하는 이름
- 객체 : 실제로 전달하고 싶은 데이터
- rttr.addFlashAttribute("msg", "삭제됐습니다.")
- 객체명.addFlashAttribute(넘겨주려는 키 문자열, 넘겨 주려는 값 객체);
- msg 키 값에 담긴 메세지는 리다이렉트된 페이지인 /articles 에서 사용한다. 즉 목록 페이지에 삭제 메세지를 띄운다.
- 해당 뷰 파일인 index.mustache 열어 {{#msg}}{{/msg}} 통해 키를 사용할 범위를 잡는다.
- alert로 msg에 담긴 값을 출력한다.
- 위에 출력하는 것이 좋으니 헤더 안에 삭제 메세지를 출력한다.
{{#msg}}
<div class="alert alert-primary alert-dismissible"> // 메세지 창 작성
{{msg}}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{{/msg}}
8.2.3 SQL 문으로 직접 DB 삭제하기
DELETE 테이블명 WHERE 조건;
DELETE article WHERE id=3;
'CS > 스프링부트3 자바 백엔드 개발 입문' 카테고리의 다른 글
[REST API와 테스트 코드 작성하기] 10장 | REST API와 JSON (0) | 2025.02.27 |
---|---|
[게시판 CRUD 만들기] 9장 | CRUD와 SQL 쿼리 종합 (0) | 2025.02.27 |
[게시판 CRUD 만들기] 7장 | 게시글 수정하기: Update (0) | 2025.02.22 |
[게시판 CRUD 만들기] 6장 | 게시판 내 페이지 이동하기 (0) | 2025.02.22 |
[게시판 CRUD 만들기] 5장 | 게시글 읽기: Read (0) | 2025.02.22 |