[스프링부트] 글 삭제하기

익명 블로그 V1 - 13
이나겸's avatar
Nov 25, 2024
[스프링부트] 글 삭제하기

[익명 게시글을 쓰는 블로그 만들기 13]


detail.mustache 파일

  • 삭제 버튼을 만들어 form 태그로 감쌈
  • formaction 속성에 주소값을 설정하고, methodPOST로 설정
    • Spring을 연습하기 위해 JavaScript 없이 HTML 1.0 버전으로 연습
    • GET과 POST만 사용할 수 있으므로 주소에 delete를 추가
{{> layout/header}} <section> <form action="/board/{{model.id}}/delete" method="post"> <button type="submit">삭제</button> </form> <div> 번호: {{model.id}}<br> 제목: {{model.title}}<br> 내용: {{model.content}}<br> 작성일: {{model.createdAt}}<br> </div> </section> </body> </html>
 

BoardRepository 클래스

  • BoardRepositorydelete 메서드를 구현하여 게시글의 id를 기준으로 DB에서 해당 게시글을 삭제
@RequiredArgsConstructor @Repository public class BoardRepository { private final EntityManager entityManager; public void delete(int id) { Query q = entityManager.createNativeQuery("delete from board_tb where id = ?"); q.setParameter(1, id); q.executeUpdate(); } }
 

BoardRepositoryTest 클래스 - 테스트 클래스

  • BoardRepository에서 구현한 delete 메서드를 테스트
  • given
    • 테스트를 위한 입력 값을 설정
    • DB에서 삭제할 게시글의 id를 설정
  • when
    • 테스트할 메서드를 실행
    • boardRepository.delete() 메서드를 호출하여 DB에서 해당 게시글을 삭제
  • then
    • 결과를 검증 ⇒ 출력으로 결과를 검증하는 방식 채택
    • 삭제 여부는 리스트의 사이즈로 확인
@Import(BoardRepository.class) @DataJpaTest public class BoardRepositoryTest { @Autowired BoardRepository boardRepository; @Test public void delete_test() { // given int id = 1; // when boardRepository.delete(id); // then(eye) List<Board> boardList = boardRepository.findAll(); System.out.println("size: " + boardList.size()); } }
 

BoardController 클래스

  • @PostMapping을 통해 /board/{id}/delete 경로로 들어오는 POST 요청을 delete 메서드에서 처리
  • @PathVariable("id") 어노테이션을 사용하여 삭제할 게시글의 id를 받아옴
  • boardService에서 게시글삭제 메서드를 호출하여 해당 게시글을 삭제
  • "redirect:/"를 반환하여 “/” 경로로 리다이렉트
@RequiredArgsConstructor @Controller public class BoardController { private final BoardService boardService; @PostMapping("/board/{id}/delete") public String delete(@PathVariable("id") int id) { boardService.게시글삭제(id); return "redirect:/"; } }
 

BoardService 클래스

  • 게시글삭제 메서드를 구현하여, idboardRepositorydelete 메서드를 사용해 DB에서 해당 게시글을 삭제
  • @Transactional 어노테이션을 사용해 DB 트랜잭션을 관리
@RequiredArgsConstructor @Service public class BoardService { private final BoardRepository boardRepository; @Transactional public void 게시글삭제(int id) { boardRepository.delete(id); } }
 

웹 실행해서 글 삭제 테스트

  • 삭제 버튼을 눌러 게시글 삭제 요청
notion image
  • 삭제 후, 게시판으로 리다이렉트되었는지 확인
  • 해당 게시글이 삭제되었는지 확인
    • notion image
 
Share article

Nakyeom's Study