지금까지 우리는 데이터를 가져오기 위해 controller 에서 각 엔티티의 repository 를 통해
데이터베이스에 접근해서 데이터를 가져왔습니다.
시작
모듈화
만약 여러가지 작업을 통해 데이터를 가져와야 한다면 각 controller 에서 repository 를 여러번 사용하는것보다
service 라는 클래스를 만들어서 여러 repository 를 통한 작업들을 넣어두고
controller 에서는 service 만 가져오는것이 더 효율적입니다.
보안
controller 에서 repository 를 통해 바로 데이터베이스에 접근하는것은 보안상 안전하지 않습니다.
때문에 controller 와 repository 사이에 service 를 두고 데이터베이스 안전하게 접근하도록 합니다.
이번에는 앞에서 작성한 repository 를 통해 service 를 작성해보겠습니다.
Service 작성
먼저 service 라는 패키지를 만들고 그 안에 QuestionService 를 생성합니다.
package com.crud.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.crud.model.Question;
import com.crud.repository.QuestionRepository;
@Service
public class QuestionService {
@Autowired
private QuestionRepository questionRepository;
public List<Question> getList() {
return questionRepository.findAll();
}
}
Service 는 @Service 라는 애너테이션을 붙여서 사용할 수 있습니다.
QuestionService 에는 getList() 라는 메서드를 통해 Question Repository 의 findAll 메서드를 사용합니다.
다음으로 QuestionController 부분을 수정합니다.
package com.crud.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.crud.model.Question;
import com.crud.repository.QuestionRepository;
import com.crud.service.QuestionService;
@Controller
public class QuestionController {
@Autowired
private QuestionService questionService;
@GetMapping("/question/list")
public String list(Model model) {
List<Question> questionList = questionService.getList();
model.addAttribute("questionList", questionList);
return "question_list";
}
}
앞에서 QuestionController 는 QuestionRepository 의 findAll 메서드를 통해 데이터를 가져왔으나,
지금부터는 QuestionService 를 중간에 두고 QuestionSerivce 를 통해 Repository 에 접근해서 데이터를 가져오겠습니다.
브라우저에 접속해보면 Repository 를 사용할때와 동일하게 데이터를 가져오는것을 확인할 수 있습니다.
'Spring > Springboot 실습' 카테고리의 다른 글
게시판 만들기 - 답변 등록 기능 추가 (0) | 2023.01.09 |
---|---|
게시판 만들기 - 질문 상세페이지 작성 (0) | 2023.01.08 |
게시판 만들기 - 브라우저를 통한 데이터 출력 (0) | 2023.01.08 |
게시판 만들기 - Repository 작성 (0) | 2023.01.06 |
게시판 만들기 - JPA 를 통한 테이블 생성 (0) | 2023.01.05 |