[홈페이지 제작] 게시판 만들기 4 - 게시글 쓰기

Feb 07, 2024
[홈페이지 제작] 게시판 만들기 4 -  게시글 쓰기
 
 
 
 
지난 블로그에서는 게시글의 권한 부여를 해보았다.
 
이번 블로그에서는 게시글 쓰기를 만들어보자.

1. 게시글 쓰기

notion image
 
게시판 글쓰기는 유저에게 게시글 제목과 내용 두가지 내용을 받는다.
 
클라이언트의 입력을 받기 위해 DTO를 만든다.
 
public class BoardRequest { @Data public static class saveDTO{ private String title ; private String content ; } }
 
saveDTO 클래스를 만든다. DTO를 통해 제목과 내용을 담는다.
 
@PostMapping("/board/save") public String saveWrite(BoardRequest.saveDTO requestDTO){ User sessionUser = (User) session.getAttribute("sessionUser"); boardRepository.save(requestDTO,sessionUser.getId()); return "redirect:/"; }
 
전달받은 DTO는 컨트롤러로 전달된다.
컨트롤러에선 로그인 정보를 확인 후 레파지스토리에 데이터를 전달한다.
 
로그인 정보 확인을 위해 session을 사용한다. 세션 정보는 로그인 시점에 생기기 때문에 UserController 에서 만든 sessionUser 키을 사용한다.
 
session.setAttribute("sessionUser",user); // 세션은 해쉬맵으로 키:값의 형태로 되어있음.
 
sessionUser 을 통해 받은 데이터를 getAttribute 를 통해 세션 데이터를 꺼내고, DTO 와 세션의 getId() 를 함께 BoardRepository에 전달한다.
 
@Transactional public void save(BoardRequest.saveDTO requestDTO,int userId) { Query query = em.createNativeQuery("insert into board_tb(title,content,user_id,created_at) values(?,?,?,now());"); query.setParameter(1, requestDTO.getTitle()); query.setParameter(2, requestDTO.getContent()); query.setParameter(3, userId); query.executeUpdate(); }
 
BoardRepository 에 save 메서드를 생성한다. saveDTO 의 데이터와 userId 를 전달받는다. userId 는 세선을 통해 전달받는다.
 
💡
DB에 데이터를 추가할 때, 다른 작업 요청과 동시에 진행되면 안되기 때문에 @Transactional 을 사용해 고립성을 만들어야 한다.
 
 

2. 결과

 
notion image
 
유저네임 cos 로 로그인 한다.
 
 
notion image
 
테스트 글을 작성해본다.
 
 
notion image
 
작성한 테스트 글이 정상적으로 조회된다.
 
notion image
 
 
상세 보기 페이지도 정상적으로 표시된다.
 
 
notion image
 
로그 아웃시 작성글은 그대로 남아있으나, 수정 삭제 버튼도 정상적으로 사라진다.
Share article

{CODE-RYU};