네이버 클라우드 캠프/Spring

[Spring Boot] 게시판 구현하기(6)

graph-dev 2023. 6. 26. 10:49
728x90

 

ModelAndView

화면단으로 이동하기 위해서 ModelAndView라는 메서드를 사용할 수 있습니다. 이 방법을 사용하면, 이전에 사용한 ResponseEntity 메서드보다 간단해집니다.

 

@GetMapping("/board-list")
    public ModelAndView getBoardList() {
        ModelAndView mv = new ModelAndView();
        List<Board> boardList = boardService.getBoardList();
        List<BoardDTO> boardDTOList = new ArrayList<BoardDTO>();
        for(Board b : boardList) {
            BoardDTO returnBoardDTO = 
                  BoardDTO.builder().boardNo(b.getBoardNo())
                                    .boardTitle(b.getBoardTitle())
                                    .boardContent(b.getBoardContent())
                                    .boardWriter(b.getBoardWriter())
                                    .boardRegdate(b.getBoardRegdate().toString())
                                    .boardCnt(b.getBoardCnt())
                                    .build();

            boardDTOList.add(returnBoardDTO);
        }
        mv.addObject("boardList", boardDTOList);
        mv.setViewName("board/getBoardList.html");
        return mv;
    }

 

 

READ

이번에는 getBoard 메서드를 만들어보고, ModelAndView 방식으로 처리해보겠습니다. 방금전에 본 메서드는 한번에 데이터베이스에 있는 모든 것을 조회하는 것이라면 하나씩 세부적인 내용을 조회하는 메서드도 필요합니다.

이전과 다른 점을 살펴보면, 먼저 @PathVariable 어노테이션을 통해 boardNo를 직접 매핑 url에 입력할 수 있습니다. 또한 BoardDTO에서 builder 메서드를 통해 우리가 컬럼으로 지정한 것을 한번에 담아 bulid 처리할 수 있습니다.

@GetMapping("/board/{boardNo}")
public ModelAndView getBoard(@PathVariable int boardNo) {
    ModelAndView mv = new ModelAndView();

    Board board = boardService.getBoard(boardNo);

    BoardDTO returnBoardDTO = BoardDTO.builder()
            .boardNo(board.getBoardNo())
            .boardTitle(board.getBoardTitle())
            .boardContent(board.getBoardContent())
            .boardWriter(board.getBoardWriter())
            .boardRegdate(board.getBoardRegdate().toString())
            .boardCnt(board.getBoardCnt())
            .build();

    List<BoardFile> boardFileList = boardService.getBoardFileList(boardNo);

    List<BoardFileDTO> boardFileDTOList =
            new ArrayList<BoardFileDTO>();

    for(BoardFile boardFile : boardFileList) {
        BoardFileDTO boardFileDTO = boardFile.EntityToDTO();
        boardFileDTOList.add(boardFileDTO);
    }


    mv.addObject("board", returnBoardDTO);
    mv.addObject("boardFileList", boardFileDTOList);
    mv.setViewName("board/getBoard.html");

    return mv;
}

그 외에도 EntityToDTO라는 메서드를 사용해서 좀 더 편리하게 파일관리도 가능하다는 점이 있겠습니다. 참고로, EntityToDTO 메서드는 별도로 제작해서 사용하며, 다음과 같이 작성합니다. BoardFile이라는 entity를 제작하고, 멤버변수를 선언한 다음에 이 메서드에서 bulider 체이닝으로 완성하면 됩니다.

public BoardFileDTO EntityToDTO() {
    BoardFileDTO boardFileDTO = BoardFileDTO.builder()
            .boardNo(this.board.getBoardNo())
            .boardFileNo(this.boardFileNo)
            .boardFileName(this.boardFileName)
            .boardFilePath(this.boardFilePath)
            .boardFileOrigin(this.boardFileOrigin)
            .boardFileCate(this.boardFileCate)
            .build();
    return boardFileDTO;
}

 

CREATE

입력 화면을 보여서 출력해야할 경우가 있습니다. 그럴 때는 생각보다 간단하게 insertBoard 파일을 만들고 그것을 매핑해주면 됩니다.

    @GetMapping("/insert-board-view")
    public ModelAndView insertBoardView() {
        ModelAndView mv = new ModelAndView();

        mv.setViewName("board/insertBoard.html");

        return mv;
    }

 

이렇게 ModelAndView로도 간단하게 조회하고 입력할 수 있음을 알 수 있습니다.