[spring 토이프로젝트] 게시판 crud, 검색, 페이징 구현- 3. 게시글 조회

이건회·2022년 7월 28일
0

spring게시판1

목록 보기
3/6

레퍼런스 : https://velog.io/@max9106/Spring-Boot-JPA-MySQL-%EA%B2%8C%EC%8B%9C%EA%B8%80-%EC%A1%B0%ED%9A%8C

프로젝트 전체 소스코드 : https://github.com/rawfishthelgh/boardcrud.git

  • 이제 Mysql에 저장된 데이터를 불러와 조회해보도록 하겠다.

  • list.html에서 Thymeleaf 기능을 사용할 때, boardList 라는 것으로 객체 정보를 출력했으므로 컨트롤러에 boardlist를 넘겨줘야 한다.

  • model을 통해 view에 데이터를 전달해 줄 것이다.
  • BoardDto를 통해 mysql에 저장된 데이터를 List 형식으로 boardService.getBoardList() 메소드를 통해 불러와 준다.
  • 이를 boardList라는 이름으로 model에 저장해 view에 전달해 준다.

  • BoardService에 이제 getBoardList 메소드를 구현해준다. boardRepository에서 Board 형식으로 모든 데이터를 가져와 boards 리스트에 담고, 이를 BoardDto 형식으로 변환해 담을 ArrayList인 boardDtoList를 생성한 후 for문을 통해 boards 에 있는 데이터를 하나씩 꺼내며 BoardDto로 변환해 boardDtoList에 담는다.

  • 이제 db에 저장된 데이터가 View에 조회된다.

  • 이제 게시글마다 detail 페이지를 구현할 것이다. detail.html에서는 boardDto를 통해 데이터를 불러온다.

  • @PathVariable을 통해 매핑 url의 {no}로 명시된 부분에 파라미터로 받은 게시글의 id값을 넘겨준다.
  • 역시 Service에 구현할 getPost 메소드를 통해 id값을 넘겨줘 id에 해당하는 게시글을 가져와 boardDto에 담을 것이다.
  • 게시글이 담긴 boardDto를 "boardDto"라는 이름으로 모델에 저장해 detail view에 넘겨준다.

  • 게시글의 id 값을 통해 Repository에서 해당 객체를 찾아 담을 건데, 이때 Optional 클래스를 사용하는 이유는...조금 더 공부가 필요할 듯
  • Optional의 value 값을 가져오는 get 메소드를 통해 Board 에 담아주고, 이를 builder를 통해 boardDto 형식으로 변환해 리턴한다.

  • 이제 게시글의 id를 통해 url에 접근하면 detail을 확인 가능하다.

* 참고할 점

  • 게시글 post 요청을 보낼 때, 반드시 render가 아닌 redirect 요청을 보내야 한다. 위사진처럼 render를 하고 게시글 생성 버튼을 누를 경우

  • 아래처럼 url은 /post 로 남아있게 된다. 만약 이때 새로고침을 누르고 메인페이지에 가보면 어떻게 될까?

  • 갑자기 똑같은 내용의 데이터가 두 개 생성되어 있다. 이는 새로고침 시 웹에서 이전에 보낸 url 요청을 정확히 다시 보내기 때문인데, 이 때 post 요청이 한 번 더 반복되므로 또 데이터가 생성되어 같은 내용이지만 id만 다른 데이터가 db에 추가된다. 따라서 완전히 새로운 url로 get 요청을 보내는 redirect를 반드시 사용해야 한다.
profile
하마드

0개의 댓글