ViewResolver 클래스의 개념과 특징

CJI0524·2025년 3월 11일

Spring Boot

목록 보기
18/21

1. ViewResolver 클래스란?

1.1. ViewResolver 클래스의 개념

ViewResolver는 스프링 MVC에서 컨트롤러가 반환한 단순한 뷰 이름 (예: "home")을 실제 뷰 객체로 변환해 주는 핵심 인터페이스이다. 즉, 컨트롤러가 어떤 뷰 이름을 리턴하면, DispatcherServlet은 등록된 ViewResolver들을 통해 해당 이름에 맞는 템플릿 (HTML, JSP, FreeMarker 등)을 찾아서 렌더링하는데 사용된다.

ViewResolver는 뷰 이름을 실제 뷰 객체 (View 인터페이스를 구현한 객체)로 변환하는 역할을 하며 다음 인터페이스 메서드 하나만 정의되어 있다.

✍️ 작성

View resolveViewName(String viewName, Locale locale) throws Exception;

이 메서드는 뷰 이름과 Locale 정보를 받아서 해당하는 뷰 객체를 반환한다. 스프링 MVC의 DispatcherServlet이 컨트롤러로부터 뷰 이름을 전달받으면, 등록된 모든 ViewResolver들의 resolveViewName 메서드를 순서대로 호출해서 적절한 뷰 객체를 자동으로 찾아 반환해주기 때문에, 개발자가 따로 이 메서드를 직접 호출할 필요 없이 스프링이 저절로 처리해준다.

ViewResolver는 또한 여러 뷰 기술 (Thymeleaf, JSP, FreeMarker 등)을 지원하여, 애플리케이션에서 다양한 방식으로 화면을 렌더링할 수 있도록 돕는다.

1.2. ViewResolver 클래스의 우선순위 설정

스프링 MVC에서는 ViewResolver 인터페이스를 구현한 빈들이 여러 개 등록될 수 있는데, 이들에 대해 order (우선순위)를 설정할 수 있다. 과정을 설명하면 다음과 같다.

※ 우선순위 설정 후 ViewResolver 적용 과정

  • 스프링 컨테이너는 모든 ViewResolver 빈들을 order 값 (숫자가 낮을수록 높은 우선순위)에 따라 정렬.
  • DispatcherServlet이 뷰 이름("home" 등)을 전달하면, 등록된 뷰 리졸버들을 순서 (order 값)대로 호출.
  • 각 호출된 ViewResolver는 뷰 이름을 처리할 수 있는지 시도하고, 만약 처리 가능한 경우(non-null 반환) 그 뷰를 사용해서 렌더링.
  • 만약 어떤 ViewResolver가 해당 뷰 이름을 처리할 수 없다면 (null을 반환), 다음 순서의 뷰 리졸버가 시도됨.

1.3. 커스텀 ViewResolver 만들기

뷰리졸버는 다양한 방법으로 커스터마이징이 가능하다.

✍️ 예제 코드 작성

public class MyCustomViewResolver implements ViewResolver, Ordered {

    private int order;

    @Override
    public View resolveViewName(String viewName, Locale locale) throws Exception {
        if(viewName.startsWith("my-prefix")) {
            return new MyCustomView(); // 뷰 이름이 my-prefix로 시작한다면 MyCustomView 객체를 반환
        }
        return null;
    }

    @Override
    public int getOrder() {
        return this.order;
    }

    public void setOrder(int order) {
        this.order = order;
    }
}

해당 코드에서 구현된 Ordered 인터페이스는 여러 뷰 리졸버가 있을 때, 우선순위를 설정하여 어떤 뷰 리졸버가 먼저 호출될지를 결정하는 데 사용된다.

2. 해당 게시글 작성에 참고한 글 목록

멋쟁이사자처럼 강의자료

profile
개발돌이

0개의 댓글