SaveDTO와 UpdateDTO는 현재 동일한 필드를 가지고 있으므로 하나의 DTO로 재사용할 수도 있습니다.
다만, 저장과 수정은 의미와 책임이 서로 다른 요청이기 때문에, 추후 필수 값 검증 규칙이 달라지거나(예: 저장 시 필수, 수정 시 선택), 수정 전용 필드가 추가되는 상황을 고려하면 DTO를 분리해 두는 것이 설계상 더 유연합니다. 따라서 현재는 구조가 동일하더라도, 역할을 명확히 하기 위해
SaveDTO와UpdateDTO를 각각 정의하는 방식을 권장합니다.
BoardRequest.java
package com.metacoding.springv1.board;
import lombok.Data;
public class BoardRequest {
@Data
public static class SaveDTO {
private String title;
private String content;
}
// 추가하기
@Data
public static class UpdateDTO {
private String title;
private String content;
}
}
BoardService 에 게시글수정() 메서드를 구현합니다. 이 메서드는 URL에 포함된 게시글의 ID, 사용자의 입력값을 DTO를 통해 전달받습니다.
BoardService.java
@Transactional
public void 게시글수정(Integer id, BoardRequest.UpdateDTO requestDTO){
Board board = boardRepository.findById(id);
// 더티 체킹
board.setTitle(requestDTO.getTitle());
board.setContent(requestDTO.getContent());
} // 트랜잭션 종료시 flush()
게시글 ID로 엔티티를 조회하여 영속성 컨텍스트에 등록한 뒤, 더티 체킹을 통해 변경된 내용을 업데이트합니다.
BoardController 를 다음과 같이 구현합니다.
게시글 수정 후에는 로직 처리가 완료된 뒤, 수정된 게시글의 상세보기 페이지로 리다이렉트하는 것이 바람직합니다.
BoardController.java
@PostMapping("/boards/{id}/update")
public String updateById(@PathVariable("id") Integer id, BoardRequest.UpdateDTO requestDTO){
boardService.게시글수정(id, requestDTO);
return "redirect:/boards/" + id;
}
프로젝트 실행 후 2번 게시글을 수정합니다.

1.png