스프링 부트, 입문!

준비중..

스프링 부트, 입문!

기본 게시판 만들기!

11 목록 가져오기

목록 가져오기

미션


게시글을 작성하고,
클라우드스터딩-스프링부트-데이터-목록-글쓰기

그 목록을 조회하시오.
클라우드스터딩-스프링부트-데이터-목록-글쓰기

개념


⭐️ 진행 흐름

각 객체의 유기적 동작. 이를 통해 데이터 목록이 조회된다. 컨트롤러는 전체적인 요청을 받아 전체적 명령을, 리파지터리는 DB에서 데이터를 가져오고, 모델은 뷰 페이지로 데이터를 전달한다. 전달된 데이터와 결합한 뷰 페이지. 이는 클라이언트에서 결과 화면으로 나타난다. 패스트푸드점에 카운터/조리/청소 점원이 따로 있는 것처럼
클라우드스터딩-스프링-부트-데이터-조회-흐름-리파지터리-모델

⭐️ 모델

MVC 패턴 중 하나인 모델. 이는 뷰 페이지에서 사용할 데이터를 관리한다. DB와 소통하는 리파지터리와 다름 주의!

  1. // 데이터 articleList를 저장! 뷰에서는 "articles"란 이름으로 사용 가능!
  2. model.addAttributes("articles", articleList);

⭐️ 머스테치 문법, 데이터 사용

머스테치를 사용하여, 모델 데이터를 사용할 수 있다.

  1. <!-- 모델 데이터 aaa를 사용 -->
  2. {{#articles}}
  3. ...
  4. {{/articles}}

튜토리얼


⭐️ 컨트롤러

1) 코드 추가 및 변경: “controller/ArticleController”

  1. @Slf4j
  2. @RequiredArgsConstructor // final 필드 값을 알아서 가져옴! (@autowired 대체!)
  3. @Controller
  4. public class ArticleController {
  5. // 리파지터리 객체 자동 삽입 됨! 위에서 @RequiredArgsConstructor 했음!
  6. private final ArticleRepository articleRepository;
  7. @GetMapping("/articles")
  8. public String index(Model model) { // 뷰 페이지로 데이터 전달을 위한 Model 객체 자동 삽입 됨!
  9. // 모든 Article을 가져옴
  10. // Iterable 인터페이스는 ArrayList의 부모 인터페이스
  11. Iterable<Article> articleList = articleRepository.findAll();
  12. // 뷰 페이지로 articles 전달!
  13. model.addAttribute("articles", articleList);
  14. // 뷰 페이지 설정
  15. return "articles/index";
  16. }
  17. ...
  18. }

⭐️ 뷰 페이지

2) 테이블 추가: “articles/index.mustache”

  1. {{>layouts/header}}
  2. <!-- jumbotron -->
  3. <div class="jumbotron">
  4. <h1>Article 목록</h1>
  5. <hr>
  6. <p>articles/index.mustache</p>
  7. <a href="/articles/new" class="btn btn-primary">글쓰기</a>
  8. </div>
  9. <!-- articles table -->
  10. <table class="table table-hover">
  11. <thead>
  12. <tr>
  13. <th>#</th>
  14. <th>제목</th>
  15. </tr>
  16. </thead>
  17. <tbody>
  18. <!-- 모델에서 보내준 articles를 사용! 데이터가 여러개라면 반복 출력 됨! https://taegon.kim/archives/4910 -->
  19. {{#articles}}
  20. <tr>
  21. <td>{{id}}</td> <!-- id 출력 -->
  22. <td>{{title}}</td> <!-- title 출력 -->
  23. </tr>
  24. {{/articles}}
  25. </tbody>
  26. </table>
  27. {{>layouts/footer}}

⭐️ 결과 확인

3) 글쓰기
클라우드스터딩-스프링부트-데이터-목록-글쓰기

4) 목록 조회
클라우드스터딩-스프링부트-데이터-목록-조회-확인

5) DB 조회
클라우드스터딩-스프링부트-데이터-목록-데이터베이스-조회

훈련하기


  • 매번 여러 Article을 작성하기가 쉽지 않다. 이를 해결하기 위한 기능을 url “localhost:8080/init”에 구현하시오.
    클라우드스터딩-스프링부트-더미-데이터-생성

  • 작성한 프로젝트 코드를 저장(commit) 하고, 깃허브에 업로드(push) 하시오.

면접 준비


  • 게시글 목록 조회 과정 중, 각 객체의 역할은?
  • Iterable 인터페이스와 ArrayList 클래스의 관계?