9. Spring 게시판 무작정 따라하기(끝)

게시판 글 수정기능 및 v1 마무리
HootJem's avatar
Aug 20, 2024
9. Spring 게시판 무작정 따라하기(끝)
이번 포스팅은 Spring MVC를 사용하여 기본 게시판 CRUD 기능 중 "게시글 수정" 기능을 구현하는 과정입니다.

1. 게시판 수정

1.1 수정 화면으로 이동하기

게시글을 수정하기 위해서는 먼저 수정할 게시글의 내용을 화면에 표시해야 한다. 이를 위해 findById 메서드를 사용하여 특정 ID를 가진 게시글을 조회한 후, 그 결과를 뷰로 전달해야 된다.
@GetMapping("/board/{id}/update-form") public String updateForm(@PathVariable("id") int id, HttpServletRequest request) { Board board = boardRepository.findById(id); request.setAttribute("model", board); return "board/update-form"; }
 

1.2 수정화면 뷰 코드

{{>layout/header}} <div class="container p-5"> <div class="card"> <div class="card-header"><b>글수정하기 화면입니다</b></div> <div class="card-body"> <form action="/board/{{model.id}}/update" method="post"> <div class="mb-3"> <input type="text" class="form-control" placeholder="Enter title" name="title" value="{{model.title}}"> </div> <div class="mb-3"> <textarea class="form-control" rows="5" name="content">{{model.content}}</textarea> </div> <button class="btn btn-primary form-control">글수정하기완료</button> </form> </div> </div> </div> {{>layout/footer}}
 
notion image
원래 주소 설계 규칙에는 주소에 동사 걸지않는다 method 가 put 이면 주소는
/board/{{model.id}} 가 될 것이다.
 

1.3 Repository 업데이트 로직 / 테스트

@Transactional public void updateById(String title, String content, int id) { Query query = em.createNativeQuery("update board_tb set title =?, content =? where id =?"); query.setParameter(1, title); query.setParameter(2, content); query.setParameter(3, id); query.executeUpdate(); }
import org.assertj.core.api.Assertions;
notion image
findById 로 조회한 게시글 제목을 유추하여 성공적으로 변경 되었는지 테스트 가능함.
 

1.4 게시글 수정 요청 처리

post 요청을 처리하는 컨트롤러 메서드 작성
@PostMapping("/board/{id}/update") public String update(@PathVariable("id") int id, String title, String content) { boardRepository.updateById(title, content, id); return "redirect:/board/" + id; }
notion image
에러가 발생할 수도 안할수도있다.
@PostMapping("/board/{id}/update") public String update(@PathVariable("id") int id, @RequestParam("title") String title, @RequestParam("content") String content) { boardRepository.updateById(title, content, id); return "redirect:/board/" + id; }
@RequestParam("title") String title 에러가 발생한다면 추가 해 주어야함.
 

1.5 최종 결과

notion image
잘 작동하는 모습👍
잘 작동하는 모습👍
이렇게 기본 게시판 CRUD 기능을 모두 구현했습니다. 각 메서드를 작성할 때마다 단위 테스트를 하여 잠재적으로 발생할 수 있는 에러를 조기에 발견하고, 그 원인을 쉽게 추적할 수 있습니다. 단위테스트를 통해 프론트엔드와 상관없이 백엔드 코드의 정확성을 빠르게 확인할 수 있습니다.
JavaScript를 사용하지 않고, Spring에 충실하기 위해 이번 프로젝트에서는 PUT이나 DELETE 매핑을 사용하지 않았으나, 이번 프로젝트를 통해 Spring 의 작동 원리와 테스트 방법을 알아보는데 도움이 되셨길 바랍니다👍
 
 

Share article

[HootJem] 개발 기록 블로그