데이터 삭제 과정

  1. /articles/{id}/delete: 클라이언트가 서버로 삭제 요청

  2. delete(id): 서버는 DB에서 해당 데이터를 찾아 삭제

  3. redirect:/articles: 클라이언트를 리다이렉트된 페이지로 보냄

데이터 삭제하기

1. Delete 버튼 추가하기

<a href="/articles/{{article.id}}/edit" class="btn btn-primary">Edit</a>
<a href="/articles/{{article.id}}/delete" class="btn btn-danger">Delete</a>
<a href="/articles">Go to Article List</a>

{{>layouts/footer}}

2. Delete 요청을 받아 데이터 삭제하기

public class ArticleController {
    (중략)
    public String update(ArticleForm form) {
    (중략)
    @GetMapping("/articles/{id}/delete") // URL 요청 접수
    public String delete() { // 메소드 생성 및 null값 반환
				log.info("삭제 요청이 들어왔습니다!!"); // 잘 동작하는지 확인하는 로그
        // 1. 삭제할 대상 가져오기
        // 2. 대상 엔티티 삭제하기
        // 3. 결과 페이지로 리다이렉트하기
        return null;
    }
}
public String delete(@PathVariable Long id) { // id를 매개변수로 가져오기
        log.info("삭제 요청이 들어왔습니다!!");

        // 1. 삭제할 대상 가져오기
        Article target = articleRepository.findById(id).orElse(null); // 데이터 찾기
        log.info(target.toString()); // target에 데이터 있는지 없는지 확인

        // 2. 대상 엔티티 삭제하기
        if (target != null) { // 삭제할 대상이 있는지 확인
            articleRepository.delete(target); // delete 메소드로 대상 삭제

        // 3. 결과 페이지로 리다이렉트하기
        return "redirect:/articles";

3. 삭제 완료 메시지 남기기

public String delete(@PathVariable Long id, RedirectAttributes rttr) { // RedirectAttributes 객체 사용, 객체 이름은 rttr
        log.info("삭제 요청이 들어왔습니다!!");

        // 1. 삭제할 대상 가져오기
        Article target = articleRepository.findById(id).orElse(null);
        log.info(target.toString());

        // 2. 대상 엔티티 삭제하기
        if (target != null) {
            articleRepository.delete(target);
            rttr.addFlashAttribute("msg", "삭제됐습니다!"); // 한 번 쓰고 사라지는 휘발성 데이터를 등록
        }

        // 3. 결과 페이지로 리다이렉트하기
        return "redirect:/articles";
    }
}
(생략)
{{#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}} // msg 사용 범위 설정

4. SQL문으로 직접 DB 삭제하기

DELETE article WHERE id = 3;
SELECT * FROM article;

마무리