Service는 컨트롤러에서 리퀘스트를 받아 처리하기 위해 호출한다. 서비스 단에서는 받은 리퀘스트대로 DAO를 이용해 데이터를 적절히 가공하여 컨트롤러에게 다시 넘겨준다.
Service의 간단한 작성 예제를 살펴보자.
@RequiredArgsConstructor
@Service
public class QuestionService {
private final ARepository aRepository;
public List<Question> getList() {
return this.questionRepository.findAll();
}
...
}
@Service 어노테이션 역시 @Controller 어노테이션과 같이 @Component 어노테이션의 연장으로 Bean에 별도로 등록하지 않아도 알아서 스캔하여 등록된다.
서비스는 비즈니스 로직들의 모듈화를 위해 필요하다. 서비스 대신 컨트롤러 단에 모든 비즈니스 로직을 작성할 경우, 중복되는 로직들을 전부 다시 작성해야 하는 문제가 발생할 수도 있으며 컨트롤러로부터 Repository에 직접 접근하여 데이터를 건드릴 수 있게 된다면 보안상 취약점이 발생하므로 바람직하지 않다. 또한 서비스는 DB에 Entity로 직접 접근하지 않고 DTO로 변환하여 접근하도록 함으로써 안전한 데이터 관리를 가능하게 한다.
이 글은 점프 투 스프링부트를 스터디한 기록입니다.