Service는 뭘까?
service는 무엇인가?
Service는 무엇인가?
Controller | Service |
---|---|
Request를 어떻게 처리할까? | Request에 대해 어떤 처리를 할까? |
큰 틀은 아래와 같다.
- client가 request를 보낸다.
- request url에 알맞는 controller가 요청을 받는다.
- controller는 요청을 처리하기 위해 service를 호출한다.
- service는 알맞은 정보를 가공해 controller에게 데이터를 넘긴다.
- controller는 service의 결과물을 client에게 전달한다.
여기서 4번에 service가 client의 요청에 대한 결과를 제공하기 위한 처리를 하는데 이것을 ‘비즈니스 로직을 수행한다’ 라고 한다.
왜 이런 작업을 service로 빼는 것인가? 객체 100개를 생성해서 리스트에 담고 이를 사용자에게 전달하는 방법을 두 가지 보도록 하겠다.
Controller에서 수행
@RequestMapping(value="/getUsers")
public String getUsers(Model model) {
ArrayList arrayListOfUser = new ArrayList<>();
for(int indexOfUser = 0; indexOfUser < 100; indexOfUser++) {
User user = new User();
user.setUserId(indexOfUser);
user.setUserName("UserName"+indexOfUser);
arrayListOfUser.add(user);
}
model.addAttribute("users",arrayListOfUser);
return "user";
}
Controller에서 service 호출해서 처리
@RequestMapping(value="/getUsers")
public String getUsers(Model model) {
model.addAttribute("users", userService.getUsers());
return "user";
}
딱 봐도 service를 호출해서 처리하는 것이 간단하고, 편해 보인다.
Service 사용법
Service를 구현할 때는 2가지를 지키면 된다.
- Service Interface 생성
- Service Interface 구현한 class 생성
1. Service Interface 생성
public interface UserService {
public ArrayList getUsers();
}
2. Service Interface 구현
@Service public class UserServiceImpl implements UserSerivce{
@Override public ArrayList getUsers() {
// TODO Auto-generated method stub ArrayList arrayListOfUser = new ArrayList<>();
for(int indexOfUser = 0; indexOfUser < 100; indexOfUser++) {
User user = new User();
user.setUserId(indexOfUser);
user.setUserName("UserName"+indexOfUser);
arrayListOfUser.add(user);
}
return arrayListOfUser;
}
}
위 코드에서처럼 @Servce
어노테이션을 붙여줘야 spring에서 이 클래스가 service 역할을 하는 애로 인식해서 빈으로 처리되게 할 수 있다.
3. 만든 service를 controller에서 호출
@Controller
public class UserController {
@Autowired
private UserSerivce userService;
@RequestMapping(value="/getUsers")
public String getUsers(Model model) {
model.addAttribute("users",userService.getUsers());
return "user";
}
}
Controller에서는 @Service
라는 어노테이션으로 선언한 클래스를 사용하기 위해서는 @Autowired
라는 어노테이션을 사용해서 서비스를 스프링에 등록시킨다.
근데, @Service
로 등록한 클래스는 UserServiceImpl
클래스인데, 이는 UserService
라는 인터페이스의 구현체이기 때문에 스프링은 @Autowired
UserService라는 인터페이스를 상속한 클래스를 자동으로 등록시켜준다!
출처
https://onlyformylittlefox.tistory.com/13