Contents
1. 게시글 삭제게시글 삭제를 구현할 때, 우선적으로 삭제할 게시글이 존재하는지, 현재 수정을 시도하고 있는 게시글이 맞는지를 확인해야 한다. 이를 위해 우리는 이전에 구현한 
findById 메서드를 활용할 수 있다.
컨트롤러 → 레포지토리 로 update 요청을 하는데 이때 controller 에 트랜잭션을 걸게되면 DB에 데이터를 요청하고 받아오는 시간 이상으로 오랜 시간 트랜잭션상태를 유지하게 된다.따라서, 보통 C → S → R 서비스 클래스를 만들어 그곳에서 트랜잭션을 관리한다.
1. 게시글 삭제
1.1 레포지토리 코드 작성
deleteById 메서드를 사용하여 게시글을 삭제하는 코드    public void deleteById(int id) {
        Query query = em.createNativeQuery("delete from board_tb where board_id=?");
        query.setParameter(1, id);
        query.executeUpdate();
    }1.2 단위테스트 (deleteById)
- 게시글 삭제 후 확인
    @Test
    public void deleteById_test() {
        // given
        int id = 1;
        // when
        boardRepository.deleteById(id);
        // eye
        boardRepository.findById(id);
    }
→ 제대로 삭제되어 해당 pk 로는 조회가 안되는 것 확인
- 삭제할 게시글 존재 여부 확인
   @Test
    public void deleteById_test() {
        // given
        int id = 1;
        // when
        Board board = boardRepository.findById(id);
        // eye
        System.out.println(board.getId());
        System.out.println(board.getTitle());
        System.out.println(board.getContent());
        // then (코드)
        Assertions.assertThat(board.getTitle()).isEqualTo("제목2");
    }
→ 예상한 title 은 
제목2 였으나 실제 리턴값은 제목1 이라 에러가 난다. 
    id =2 로 바꾸거나 isEqualTo("제목1") 로 수정하면 에러 발생하지 않음.  @Test
    public void deleteById_test() {
        // given
        int id = 6;
        // when
        boardRepository.deleteById(id);
        // eye
        try {
            boardRepository.findById(id);
        } catch (Exception e) {
            Assertions.assertThat(e.getMessage()).isEqualTo("게시글 id를 찾을 수 없습니다");
        }
        // then (코드)
    }
이전시간에 활용한 
findById 에서 설정한 에러 메세지를 이용하여 설정한 예외가 발생하는지 확인1.3 게시글 삭제 API 구현
    @PostMapping("/board/{id}/delete")
    public String deltete(@PathVariable("id") int id) {
        boardRepository.deleteById(id);
        return "redirect:/board";
    }→ 게시글 삭제 후 목록 페이지로 리다이렉트
1.4 트랜잭션이 적용된 레포지토리 메서드
    @Transactional
    public void deleteById(int id) {
        Query query = em.createNativeQuery("delete from board_tb where id=?");
        query.setParameter(1, id);
        query.executeUpdate();
    }→ 트랜잭션 추가하지 않으면 에러가 발생한다. (원래라면 서비스 클래스를 만들어 처리해야 되지만 v2 에서 다루겠음)
스프링부트 게시판 시리즈 v1 - 1. https://inblog.ai/hj/1-spring-게시판-무작정-따라하기-26526 - 2. https://inblog.ai/hj/2-spring-게시판-무작정-따라하기-26560 - 3. https://inblog.ai/hj/3-spring-게시판-무작정-따라하기-26757 - 4. https://inblog.ai/hj/4-spring-게시판-무작정-따라하기-26758 - 5. https://inblog.ai/hj/5-spring-게시판-무작정-따라하기-26934 - 6. https://inblog.ai/hj/6-spring-게시판-무작정-따라하기-26937 - 7. https://inblog.ai/hj/7-spring-게시판-무작정-따라하기-26940 - 8. https://inblog.ai/hj/8-spring-게시판-무작정-따라하기-27065 - 9. https://inblog.ai/hj/9-spring-게시판-무작정-따라하기끝-27066
Share article