스프링 부트 개발 입문 5장

Tamszero·2025년 7월 15일

ECC

목록 보기
13/17
post-thumbnail

5장 - 게시글 읽기: Read


5.1 - 데이터 조회 과정

  1. 사용자가 웹 페이지에 데이터 조회 요청
  2. 컨트롤러가 요청을 받고 찾으려는 데이터 정보를 리파지터리에 전달
  3. 리파지터리가 DB에 데이터 조회 요청
  4. DB가 해당 데이터를 찾아 엔티티로 반환
  5. 엔티티는 모델을 통해 뷰 템플릿으로 전달
  6. 뷰 페이지 완성

5.2 - 단일 데이터 조회하기

5.2.1 - URL 요청받기

id 1번을 조회할 때 /articles/1
id 2번을 조회할 때 /articles/2 을 접속하는 식으로 URL 요청을 받아보자

  1. ArticleController 기존 코드 맨 아래에 @GetMapping()어노테이션 작성

  2. 이 때 URL은 "/articles/{id}"로 넣어 모델 변수로 받아온다

  3. 요청을 수행할 show()메서드 작성, 매개변수는 id로 받는데, 이때 @PathVariable 어노테이션을 작성하여 URL 요청으로 들어온 전달값을 컨트롤러의 매개변수로 가져오게 한다.

  4. 로깅 기능을 이용해 확인 -> log.info("id = " +id);

5.2.2 - 데이터 조회해 출력하기

  1. id를 조회해 DB에서 데이터 가져오기

    findById메서드를 사용하여 엔티티의 id값을 기준으로 데이터를 찾는다
    만약 해당 id값이 없으면 orElse(null) -> null값을 반환

    Article articleEntity = articleRepository.findById(id).orElse(null);
  2. 가져온 데이터 모델에 등록하기

    모델을 사용하기 위해 show()메서드의 매개변수에 model 객체를 추가해 받아온다.

    이제 article 이라는 이름으로 articleEntity 객체 등록

    model.addAttribute("article", articleEntity); 
    // article이라는 이름으로 articleEntity 객체를 등록한다
  3. 데이터를 보여줄 뷰 페이지 만들고 반환하기

    articles/show 파일이 있다고 가정하고 뷰 페이지 반환하기

    return "articles/show";
    • show.mustache 파일 생성
      부트스트랩으로 table 넣어주기
      필요없는 부분들은 삭제하고, 행 이름 Id, title, content로 수정해주기
      이때 모델에 article이라는 이름으로 엔티티를 등록했었는데, 이 모델에 등록한 걸 써먹기 위해서 아래 코드와 같이 써준다.

      이제 데이터를 new페이지에서 등록하고, id를 통해 페이지에 접속해보면? 코솔은 잘 나오는데
      뷰 페이지는 에러가 뜸

    • 기본 생성자 추가하기
      Article 엔티티에 기본생성자가 없어서 뷰 페이지에서 에러가 난 것.
      직접 코드로 작성해 주어도 되지만,
      entity>Article 파일을 열어
      @NoArgsConstructor 어노테이션으로 기본생성자를 추가해준다
      이제 뷰 페이지 잘 나옴

5.3 - 데이터 목록 조회하기

단일 데이터가 아닌 데이터 목록을 조회해보자.
목록은 단일 데이터처럼 엔티티를 반환하지 않고 엔티티 묶음인 리스트를 반환한다.

5.3.1 - URL 요청받기

목록 조회는 localhost:8080/articles 요청이 들어오면 처리하는 것으로 하자.

  1. ArticleController에 마지막에 index()메서드를 생성
  2. @GetMapping("/articles") -> URL요청 받기

5.3.2 - 데이터 조회해 출력하기

3단계로 나누어 index 메서드 코드를 작성하자

1. 모든 데이터 가져오기
리파지터리의 모든 데이터를 가져올 때는 findAll()이라는 메서드를 사용한다.

    List<Article> articleEntityList = articleRepository.findAll();
    // 아티클리포지토리.findAll로 데이터 가져오고, 이 수행 결과는 articleEntityList라는 이름으로 받는다. 이때 받아오는 타입은 List.

그런데 이 때 List부분에 오류가 난다. -> findAll의 반환 타입은 Iterable인데 작성한 반환 타입은 List라서 생기는 오류!!

이걸 해결하는 방법 3가지

    1. 캐스팅하기 -> Iterable을 List로 다운 캐스팅 하자
    1. 캐스팅하기 -> List<\article>을 Iterable<\article>로 업캐스팅하기
    1. ArrayList 사용하기 -> findAll 반환 타입이 ArrayList이도록 리파지토리 코드를 수정한다.

2. 모델에 데이터 등록하기
index() 메서드의 매개변수로 model 객체를 받고, 모델에 등록한다.

model.addAttribute("articleList", articleEntityList);

3. 뷰 페이지 설정하기

return "articles/index";
profile
공부로그

0개의 댓글