개발 무지렁이

[Spring Boot] 서비스(Service)와 에러처리 본문

Backend/스프링부트

[Spring Boot] 서비스(Service)와 에러처리

Gaejirang-e 2022. 11. 27. 09:51

서비스


스프링에서 데이터 처리를 위한 클래스
❓서비스가 왜 필요할까?
: 서비스 없이, 컨트롤러에서 데이터 처리를 구현하면, 
  해당 기능이 필요한 모든 컨트롤러가 동일한 기능을 중복으로 구현해야한다 

: 엔티티 클래스는 데이터베이스와 직접 맞닿아 있는 클래스이기 때문에
  엔티티 클래스를 직접 사용하면, 테이블 컬럼이 변경될 수 있으니
  DTO (Data Transfer Object) 클래스를 쓴다.
  엔티티 객체를 DTO 객체로 변환하는 일은 서비스에서 처리한다.

[QuestionService.java]

public class QuestionService {
    private final QuestionRepository questionRepository;

    public Question getQuestion(Integer id) {
        Optional<Question> oq = this.questionRepository.findById(id);
        if(oq.isPresent()) {
            return oq.get();
        }
        throw new DataNotFoundException("question not found");
    }
}

[DataNotFoundException.java]

public class DataNotFoundException extends RuntimeException {
    public DataNotFoundException(String message) {
        super(message);
    }
}    

[QuestionController.java]

public class QuestionController {
    private final QuestionService questionService;

    @RequestMapping("/question/detail/{id}")
    public String detail(Model model, @PathVariable("id") Integer id) {
        Question question = this.questionService.getQuestion(id);
        model.addAttribute("question", question);
        return "question_detail";
    }
}
🕹️ Controller -> Service -> Repository
Comments