하나씩 차근차근
article thumbnail

지금까지 우리는 데이터를 가져오기 위해 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 를 사용할때와 동일하게 데이터를 가져오는것을 확인할 수 있습니다.

 

profile

하나씩 차근차근

@jeehwan_lee

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!