게시글 쓰기

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

1. BoardRepository save 메서드 구현하기

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

 

BoardRepository 코드 추가
// em.persist(board) -> 비영속 상태인 엔티티를 영속상태로 전환
@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
@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 정보 정보를 넣었다.
    // 결국 Board 엔티티로 반환이 된다.
    boardRepository.save(reqDto.toEntity(sessionUser));
    return "redirect:/";
}

@ModelAttribute 와 @RequestBody의 차이점을 이해하자

 

  • @ModelAttribute : 주로 폼 데이터나 URL 쿼리 파라미터를 객체로 바인딩할 때 사용다.
  • @RequestBody : 주로 JSON, XML, 또는 기타 요청 본문(body) 데이터를 객체로 바인딩할 때 사용한다.

목차로 돌아가기

 

'Spring Boot > Blog 프로젝트 만들기(JPA)' 카테고리의 다른 글

게시글 수정  (0) 2024.10.10
게시글 삭제  (0) 2024.10.10
로그인 & 로그아웃 구현하기  (0) 2024.10.08
게시글 목록보기 (Post List View)  (1) 2024.10.08
게시글 상세보기 (Post Details View)  (0) 2024.10.07