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