Spring boot

블로그 - 게시글 쓰기

ryeonng 2024. 10. 23. 17:39

JPA를 활용하여 게시글 작성기능을 구현하는 방법을 학습한다. 이 과정에서는 데이터 저장, DTO 사용, 컨트롤러 구현등을 다루며, ORM의 영속성 관리에 대한 이해를 심화한다.

 

BoardRepository save 메서드 구현

목표 : Board 엔티티를 데이터베이스에 저장하는 save 메서드를 구현한다.

 

BoardRepository 코드 추가
 @Transactional
    public Board save(Board board) {
        em.persist(board); // 비영속 상태인 엔티티를 영속 상태로 전환시킨다.
        return board;
    }

 

BoardDTO
package com.tenco.blog_v1.board;

import com.tenco.blog_v1.user.User;
import lombok.Data;

public class BoardDTO {

    @Data
    public static class SaveDTO {
        private String title;
        private String content;

        public Board toEntity(User user) {
            return Board.builder()
                    .title(title)
                    .content(content)
                    .user(user)
                    .build();
        }

    }

}

 

BoardController 코드 수정
// 게시글 저장
    // 주소설계 http://localhost:8080/board/save-form
    @PostMapping("/board/save")
    public String save(@ModelAttribute BoardDTO.SaveDTO reqDto) {
        User sessionUser = (User) session.getAttribute("sessionUser");

        if (sessionUser == null) {
            return "redirect:/login-form";
        }

        // 파라미터가 올바르게 전달 되었는지 확인
        log.warn("save 실행: 제목={}, 내용{}", reqDto.getTitle(), reqDto.getContent());

        //boardNativeRepository.save(title, content);
        // SaveDTO 에서 toEntity 사용해서 Board 엔티티로 변환하고 인수 값으로 User 정보를 넣음
        boardRepository.save(reqDto.toEntity(sessionUser));
        return "redirect:/";
    }

@ModelAttribute와 @RequestBody에 대한 차이점을 이해하자