Spring CRUD 복습 겸 개념 정리 회고록.
웹 페이지에서 게시글을 등록하면 서버를 통해 DB에 저장된다. DB에 저장된 데이터를 웹 페이지에 출력하는 과정은 다양한 요소 간 상호 작용으로 이루어진다.
등록은 했으니, 조회의 타임라인을 알아보자.
- 사용자가 데이터를 조회해 달라고 웹페이지에 URL 요청을 보낸다.(GetMapping)
- 서버의 컨트롤러가 요청을 받아 해당 URL에서 찾으려는 데이터 정보를 레포지토리에 전달한다.
- 헤포지토리는 정보를 가지고 DB에 데이터 조회를 요청한다.
- DB는 해당 데이터를 찾아 이를 엔티티로 반환한다
- 반환된 엔티티는 모델을 통해 뷰 템플리승로 전달된다
- 최종 뷰 페이지 완성, 사용자의 화면에 출력된다.
이런 식으로 흐름이 흘러가고, 이제 실습해보자
1. URL 요청받기
- @GetMapping() :특정 url로부터 요청을 받으면 어떤 Controller에서 처리할 지 알아야 한다.
이 때, 특정 url을 요청을 수행할 Controller과 매핑하여 지정하는 어노테이션
여기서는 @GetMapping("/articles/{id}")로 지정 - @GetMapping() 어노테이션을 통해 URL요청을 받는다. 이 요청을 받아 수행할 show()메서드를 생성하고, 매개변수로 @PathVariable 어노테이션을 붙인다.
->show(@PathVariable Long id)이런식으로 경로 변수를 사용해 매핑되는 부분을 편리하게 조회할 수 있다.
여기까지 하면 서버의 컨트롤러가 URL 요청을 받는 것까지 작업하였다.
2. 데이터 조회해 출력하기
show() 메서드에서 할 일은 크게 3가지다.
- id를 조회해 DB에서 해당 데이터 가져오기
- 리파지터리에서 DB에 저장된 데이터를 id로 조회할 때 findById()메서드를 사용한다.
특별히 조회된 데이터가 없는 경우도 처리해야 하므로 orElse()메서드로 null이 반환되도록 한다Article articleEntity = articleRepository.findById(id).orElse(null)
- 리파지터리에서 DB에 저장된 데이터를 id로 조회할 때 findById()메서드를 사용한다.
- 가져온 데이터를 모델에 등록하기
- id로 DB에서 조회한 데이터는 모델에 article이라는 이름으로 등록한다.
model.addAttribute("article", articleEntity)
- id로 DB에서 조회한 데이터는 모델에 article이라는 이름으로 등록한다.
- 조회한 데이터를 사용자에게 보여 주기 위한 뷰 페이지 만들고 반환하기
- 모델에 등록한 데이터를 뷰 페이지에서 사용할 수 있게 설정한다.
id 를 조회해 데이터 가져오기
DB에서 데이터를 가져오는 주체는 레포지토리이다.
리파지토리의 구현 객체는 @Autowired 어노테이션으로 주입받았었다
3. 데이터 목록 조회하기
단일 데이터를 조회할 때 엔티티를 반환했다면, 이제 엔티티의 묶음인 리스트를 반환해보자.
URL 요청받고 데이터 조회해 출력하기
@GetMapping("/articles") // 데이터 목록 요청 접수
public String index(){
// 1. 모든 데이터 가져오기
// 2. 모델에 데이터 등록하기
// 3. 뷰 페이지 반환하기
return "";
}
데이터 조회 과정
- 사용자가 웹 페이지에서 데이터를 조회해 달라고 URL요청을 보낸다
- 서버의 컨트롤러가 이 요청을 받아 해당 URL에서 찾으려는 데이터 정보(여기서는 id)를 리파지토리에 전달한다
- 리파지터리는 정보(id)를 가지고 DB에 데이터 조회를 요청한다.
- DB는 해당 데이터를 찾아 이를 엔티티로 반환한다.
- 반환된 엔티티는 모델을 통해 뷰 템플릿으로 전달된다.
- 최종적으로 결과 뷰 페이지가 완성돼 사용자 화면에 출력한다
@GetMapping("/articles") // 데이터 목록 요청 접수
public String index(Model model){
// 1. 모든 데이터 가져오기
List<Article> articleEntityList = articleRepository.findAll();
// 2. 모델에 데이터 등록하기
model.addAttribute("articleList", articleEntityList);
// 3. 뷰 페이지 반환하기
return "articles/index";
}
List<Article> articleEntityList = articleRepository.findAll();의 경우, ArticleRepository에서 ArticleRepository가 CrudRepository를 상속받고 있다.
여기서 CrudRepository의 메서드를 오버라이딩해주자.
findAll() 메서드의 반환값은 기본적으로 Article의 Iterable 타입으로 반환하게 되어 있다. 이를 ArrayList로 바꾸어 타입 불일치 문제를 해결할 수 있다.
- @PathVariable : URL 요청으로 들어온 전달값을 컨트롤러의 매개변수로 가져오는 어노테이션
- @findById() : JPA의 CrudRepository가 제공하는 메서드로, 특정 엔티티의 id값을 기준으로 데이터를 찾아 Optional 타입으로 변환한다.
- @findAll() : JPA의 CrudRepository가 제공하는 메서드로, 특정 엔티티를 모두 가져와 Iterable 타입으로 반환한다
복습하면서 JPA와 타입변환, 인터페이스에 대한 개념도 다시금 들춰보게 되었다.
'Backend' 카테고리의 다른 글
| [Spring] AOP, Filter, Interceptor (0) | 2026.08.03 |
|---|