inblog logo
|
LHS's Study Space
    스프링부트

    [스프링 부트] 18. 삭제 구현

    lhs's avatar
    lhs
    Nov 18, 2024
    [스프링 부트] 18. 삭제 구현
    Contents
    1. detail.mustache2. BoardRepository3. BoardRepositoryTest4. BoardController5. BoardService6. 구현 테스트
     

    1. detail.mustache

    {{> 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>
    • 삭제 버튼을 만들어 form 태그로 감싼다.
    • form의 action 속성에 주소값을 설정하고, method는 POST로 설정한다.
      • 스프링을 연습하기 위해 JavaScript 없이 HTML 1.0 버전으로 상정하여 연습하며, GET과 POST만 사용할 수 있으므로 주소에 delete를 추가한다.

    2. BoardRepository

    @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(); } }
    • BoardRepository에 delete 메서드를 구현하여 게시글의 id를 기준으로 DB에서 해당 게시글을 삭제한다.

    3. BoardRepositoryTest

    @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()); } }
    • BoardRepository에서 구현한 delete 메서드를 테스트한다.
    • 테스트의 3가지 단계
      • given : 테스트를 위한 입력 값을 설정하는 단계
        • DB에서 삭제할 게시글의 id를 설정한다.
      • when : 테스트할 메서드를 실행하는 단계
        • boardRepository.delete() 메서드를 호출하여 DB에서 해당 게시글을 삭제한다.
      • then : 결과를 검증하는 단계
        • 출력으로 결과를 검증하는 방식으로 대체하였다.
        • 삭제 여부는 리스트의 사이즈로 확인한다.

    4. BoardController

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

    5. BoardService

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

    6. 구현 테스트

    notion image
    • 삭제 버튼을 눌러 게시글 삭제를 요청한다.
    notion image
    • 삭제 후, 게시판으로 리다이렉트되었는지 확인하고, 해당 게시글이 삭제되었는지 확인한다.
    Share article
    Contents
    1. detail.mustache2. BoardRepository3. BoardRepositoryTest4. BoardController5. BoardService6. 구현 테스트

    LHS's Study Space

    RSS·Powered by Inblog