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. 구현 테스트

- 삭제 버튼을 눌러 게시글 삭제를 요청한다.

- 삭제 후, 게시판으로 리다이렉트되었는지 확인하고, 해당 게시글이 삭제되었는지 확인한다.
Share article