Service는 뭘까?



service는 무엇인가?


Service는 무엇인가?

ControllerService
Request를 어떻게 처리할까?Request에 대해 어떤 처리를 할까?

큰 틀은 아래와 같다.

  1. client가 request를 보낸다.
  2. request url에 알맞는 controller가 요청을 받는다.
  3. controller는 요청을 처리하기 위해 service를 호출한다.
  4. service는 알맞은 정보를 가공해 controller에게 데이터를 넘긴다.
  5. 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가지를 지키면 된다.

  1. Service Interface 생성
  2. 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