1. board/save-form.mustache
- isPublic 체크박스 input 태그 value="true” 삭제하기
- 삭제하지 않을 경우 서버로 항상 "isPublic=true”가 전달된다.
2. BoardRequest
- toEntity(User user) : saveDTO를 통해 title, content, isPublic 값은 들어오지만 user 객체는 존재하지 않기 때문에 User를 따로 주입해주어야 한다.
package shop.mtcoding.blog.board;
import lombok.Data;
import shop.mtcoding.blog.user.User;
public class BoardRequest {
@Data
public static class SaveDTO {
private String title;
private String content;
private String isPublic;
// insert는 toEntity가 필요하다.
// query가 아니라 객체로 만들어서 집어넣을 것이므로 toEntity를 만들어야한다.
public Board toEntity(User user) {
return Board.builder()
.title(title)
.content(content)
// null 아니면 무조건 true가 됨
.isPublic(isPublic == null ? false : true)
.user(user) // user 객체 필요 -> 이전에는 session으로 id를 받아왔지만 session 객체 그대로 넣으면 됨
.build();
}
}
}3. controller
- 글쓰기 화면으로 들어오는 것과 글쓰기는 로그인한 유저만 가능하므로 인증 체크가 필요하다.
- board entity를 보면 user 객체가 필드로 포함되므로 service로 sessioUser 또한 전달해야한다.
@PostMapping("/board/save")
public String save(BoardRequest.SaveDTO saveDTO) {
User sessionUser = (User) session.getAttribute("sessionUser");
if (sessionUser == null) throw new RuntimeException("인증이 필요합니다.");
boardService.글쓰기(saveDTO, sessionUser);
return "redirect:/";
}
@GetMapping("/board/save-form")
public String saveForm() {
User sessionUser = (User) session.getAttribute("sessionUser");
if (sessionUser == null) throw new RuntimeException("인증이 필요합니다.");
return "board/save-form";
}4. BoardRepository
- PC에 board 객체가 담기게 되고 이때 user 객체가 없으면 fk로 들어가는 값이 없게 된다.
- 비영속 객체 상태일 때 getter로 값을 가져와서 insert하게 되는데 user 객체가 없으면 user는 null이고 getId를 통해 id를 가져올 수 없다.
public class BoardRepository {
private final EntityManager em;
public void save(Board board) {
em.persist(board);
}
}5. BoardService
- saveDTO를 entity로 만들때 user에 대한 정보가 필요하므로 controller로부터 받은 sessionUser 객체를 toEntity메서드에 전달한다.
public class BoardService {
private final BoardRepository boardRepository;
@Transactional
public void 글쓰기(BoardRequest.SaveDTO saveDTO, User sessionUser) {
Board board = saveDTO.toEntity(sessionUser);
boardRepository.save(board);
}
6. 게시글 쓰기 시 발생하는 query

Share article