정적 콘텐츠 처리하는 ResourceHandler?

8327 단어 SpringSpring


이 글의 목적?

스프링에서는 HTML과 같은 정적인 콘텐츠들 어떻게 처리할까?

ResourceHandler?

이 Handler는 이미지, 자바스크립트, CSS, HTML 같은 정적인 리소스를 처리한다. 톰캣, 네티 등과 같은 서블릿 컨테이너에는 모두 정적인 리소스를 처리할 디폴트 서블릿을 기본적으로 제공하고 있다.

스프링은 정적인 리소스를 이 디폴트 서블릿에 요청을 위임하여 처리를 하는데, 문제는 이 디폴트 서블릿이 모든 요청을 가로챌 경우에 직접 만든 Handler가 먼저 찾아지는게 아닌 정적인 리소스가 먼저 찾아지게 된다. 따라서 ResourceHandler의 경우 가장 낮은 우선 순위로 등록이 된다.

스프링 부트는 아무런 설정을 하지 않아도 'resource/static' 폴더나 'resource/public' 폴더로 ResourceHandler를 제공한다. 스프링에서 제공하는 것이 아닌 커스텀 ResourceHandler를 사용하고자 할 때는 WebConfigurer 인터페이스에서 추가해주면 된다. 그리고 ResourceHandler를 등록할 때 다양한 캐시 전략을 설정하여 효율성을 증가시킬 수 있다.

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/mobile/**")
                .addResourceLocations("classpath:/mobile/")
                .setCacheControl(CacheControl.maxAge(10, TimeUnit.MINUTES));
//                // 캐시를 사용할지 말지를 결정. 운영중이라면 true, 개발중이라면 false가 적절
//                .resourceChain(true) 
//                // 요청에 해당하는 리소스를 찾는 방법
//                .addResolver() 
//                // 응답으로 내보낼 리소스를 변경하는 방법
//                .addTransformer() 
    }
}
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class SimpleControllerTest {

    @Autowired
    MockMvc mockMvc;


    @Test
    public void helloStatic() throws Exception {
        // 기본 ResourceHandler
//        this.mockMvc.perform(get("/index.html"))
//                .andDo(print())
//                .andExpect(status().isOk())
//                .andExpect(content().string(Matchers.containsString("index")));

        // 직접 만든 ResourceHandler
        this.mockMvc.perform(get("/mobile/index.html"))
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(content().string(Matchers.containsString("mobile")))
                .andExpect(header().exists(HttpHeaders.CACHE_CONTROL));

    }
}

이 글의 레퍼런스

  • 백기선님의 스프링 웹 MVC

좋은 웹페이지 즐겨찾기