길벗 코딩자율학습단 8일차

donghan378·2025년 1월 19일

8일차

~8.2 데이터 삭제하기(종이책 p.229~248)

8장 게시글 삭제하기: Delete

8.1 데이터 삭제 과정

  1. 클라이언트가 HTTP 메서드로 특정 게시글의 삭제를 요청한다.
  2. 삭제 요청을 받은 컨트롤러는 리파지터리를 통해 DB에 저장된 데이터를 찾아 삭제한다. 이 작업은 기존 데이터가 있는 경우에만 수행된다.
  3. 삭제가 완료됐다면 클라이언트를 결과 페이지로 리다이렉트한다.

8.2 데이터 삭제하기

Delete 버튼 추가하기

  1. 상세 페이지에 Delete 버튼을 추가하기 위해 show.mustache 파일을 열고 Edit 버튼을 복사해 Delete 버튼을 만든다.
    • <a href=…>Edit</a> 부분을 복사해 다음 줄에 붙여 넣는다.
    • 텍스트를 Delete로 수정하고 요청 URL을 “/articles/{{article.id}}/delete”로 수정한다.
    • Edit 버튼과 구분하기 위해 class의 속성 값을 “btn btn-danger”로 수정해 빨간 색으로 수정한다.

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

원래는 DELETE 요청으로 삭제해야 하지만 HTML에서는 POST와 GET만 제공하므로 GET 방식으로 삭제 요청을 받아 처리한다.

  1. delete() 메서드 기본 틀 만들기
    1. ArticleController에 delete()메서드 추가
    2. 기본 틀을 입력하고 return 값으로 null 반환
    3. @GetMapping(”/articles/{id}/delete”)로 작성한다.
  2. 삭제할 대상 가져오기
    1. articleRepository.findById(id) 메서드로 DB에 해당 id를 가진 데이터가 있는지 찾는다.
    2. 매개변수로 @PathVariable Long id를 써준다.
  3. 대상 엔티티 삭제하기
    1. if 조건문으로 target이 null이 아닌지 확인하고 참이면 내부 코드를 수행
    2. articleRepository.delete(target); 을 통하여 DB에서 target 삭제
  4. 결과 페이지로 리다이렉트하기
    1. 게시글을 삭제하면 목록 페이지로 돌아가도록 return “redirect:/articles”;를 입력한다.

여기까지 하면 삭제가 잘 되는 모습을 확인할 수 있지만 뭔가 아쉬우므로 삭제 완료 메시지를 남기도록 한다.

삭제 완료 메시지 남기지

RedirectAttributes 객체의 addFlashAttribute() 메서드를 사용하면 리다이렉트된 페이지에서 사용할 일회성 데이터를 등록할 수 있다. 형식은 다음과 같다.

객체명.addFlashAttribute(넘겨_주려는_키_문자열, 넘겨_주려는_값_객체);

if() 문 안에서 삭제를 수행 한 코드 다음 줄로 msg라는 키 문자열에 “삭제됐습니다!”라는 값을 메시지로 넣는다.
RedirectAttributes를 활용하려면 delete() 메서드의 매개변수로 받아 와야 한다. 객체 이름은 rttr로 정한다.

  1. msg 키 값에 담긴 메시지는 리다이렉트된 페이지 즉 /article에서 보여 줘야하므로, 해당 뷰 파일인 index.mustache를 열고 수정한다.
  2. 헤더 안에서 삭제 메시지를 출력하도록 resources/templates/layouts 디렉터리에서 header.mustache 파일을 연다.
  3. 코드 맨 아래에 {{#msg}}{{/msg}}를 써서 msg 키를 사용할 범위를 잡아 준다.
  4. 메시지 창으로 msg에 담긴 값을 출력하고, 닫기 버튼도 추가한다.
    • 부트스트랩(getbootstrap.com) 사이트에 접속한 후 Docs 메뉴에서 alert를 검색해 마음에 드는 메시지 창의 코드를 복사해서 붙여넣는다.
    • 닫기 버튼은 close button 으로 검색해 코드를 복사해서 붙여넣는다.

삭제 메시지 창이 잘 뜨는 것을 확인할 수 있다.

SQL 문으로 직접 DB 삭제하기

H2 콘솔 탭으로 가서 DELETE SQL문을 통해서 직접 삭제할 수 있다.

형식은 다음과 같고, FROM은 생략할 수 있다.

DELETE [FROM] 테이블명 WHERE 조건;

0개의 댓글