Study

[스프링 인 액션] #2 WebConfig로 뷰 컨트롤러 설정하기

voider 2021. 3. 13. 17:23

HomeController처럼 모델 데이터나 사용자 입력을 처리하지 않고 뷰만 전달하는 컨트롤러를 뷰 컨트롤러라고 한다. 이런 경우 별도로 컨트롤러를 만들지 않더라도 WebConfig설정만으로 처리할 수 있다.

@Controller
public class HomeController {
    @GetMapping("/")
    public String home() {
        return "home";
    }
}

이 클래스를 아래와 같이 바꿀 수 있다.

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("home");
    }
}

WebConfig는 뷰 컨트롤러의 역할을 수행하는 구성 클래스다. 여기서 중요한 것은 WebMvcConfigurer 인터페이스를 구현한다는 것이다. 이 인터페이스는 인터페이스임에도 불구하고 정의된 모든 메서드의 기본적인 구현을 제공한다. 따라서 필요한 메서드만 선택해서 오버라이딩할 수 있다.

하나 이상의 뷰 컨트롤러를 등록하기 위해 사용할 수 있는 메서드는 addViewControllers()이다. 이 메서드는 ViewControllerRegistry를 인자로 받는다. 뷰 컨트롤러의 경로인 "/"를 인자로 전달하여 addViewController()를 호출하고,setViewName()의 인자로 뷰 이름을 전달하면 그 경로의 요청을 받아서 setViewName()의 인자로 전달한 ViewName을 가진 뷰를 찾아서 반환한다.

지금은 WebConfig라는 구성클래스를 만들어서 설정했지만, WebConfigurer인터페이스만 구현한다면 어느 클래스에서 해도 상관은 없다.