질문 목록의 제목 링크를 누르면 질문 상세 화면이 보이게 할 것이다.
이전 질문 목록 데이터를 QuestionController에서 QuestionRepository를 직접 사용하여 조회
-> 하지만 대규모 프로젝트는 리포지토리 직접 호출 않고 서비스를 두어 데이터를 처리(서비스 = 스프링에서 데이터 처리를 위한 클래스)
Question, Answer 클래스는 엔티티 클래스이다.
엔티티클래스는 데이터베이스와 직접 맞닿아 있는 클래스이기 때문에 컨트롤러나 타임리프 같은 템플릿 엔진에 전달하여 사용하는 것이 좋지 않다.
컨트롤러나 타임리프에서 사용하는 데이터 객체는 속성을 변경하여 비즈니스적인 요구를 처리해야 하는 경우가 많은데 엔티티를 직접 사용하여 속성을 변경한다면 테이블 컬럼이 변경될 수 있다.
그러므로, Question,Answer 같은 엔티티 클래스는 컨트롤러에 사용 할 수 없게 설계하는 것이 좋다.-> 대신 사용할 DTO(Data Transger Object)클래스 필요
엔티티 객체를 DTO객체로 변환하는게 필요(서비스에서 한다)
@Service
public class QuestionService {
@Autowired
private final QuestionRepository questionRepository;
public QuestionService(QuestionRepository questionRepository) {
this.questionRepository = questionRepository;
}
public List<Question> getList(){
return this.questionRepository.findAll();
}
}
@Controller
public class QuestionController {
@Autowired
private final QuestionService questionService;
public QuestionController(QuestionService questionService) {
this.questionService = questionService;
}
@RequestMapping("/question/list")
public String list(Model model){
List<Question> questionList = this.questionService.getList();
model.addAttribute("questionList", questionList);
return "question_list";
}
}