본문 바로가기
Java & 스프링/스프링부트 톺아보기

[스프링 부트] 정적 리소스 - static resource

by hjhello423 2019. 10. 24.

 

기본적으로 Spring Boot는 classpath의 /static 또는 ServletContext의 root를 기준으로 아래의 경로에서 정적 컨텐츠를 제공한다.

기본적으로 Spring MVC의 ResourceHttpRequestHandler를 사용하는데 이를 커스터 마이징 하기 위해선 WebMvcConfigurer를 추가하고 addResourceHandlers 메서드를 재정의하여야 한다.

 

  • /static
  • /public
  • /resources
  • /META-INF/resources

 

기본적으로 리소스는 / **에 매핑되지만 spring.mvc.static-path-pattern 속성을 사용하여 조정할 수 있으며, spring.resources.static-locations 속성을 지정하여 정적 리소스의 default위치를 변경할 수도 있다.

 

  • spring.mvc.static-path-pattern: 맵핑 설정 변경 가능
  • spring.mvc.static-locations: 리소스 찾을 위치 변경 가능

 

예를 들어 모든 자원을 /resources/**로 재배치 하고 싶다면 아래의 설정을 추가하면 된다.

spring.mvc.static-path-pattern=/resources/**

 


정적 리소스를 추가 해보자.

간단한 string을 보여주는 hello.html 파일을 생성해 보도록 하겠다.

파일을 생성할 때 따로 설정을 커스터마이징 하지 않았다면 위의 경로중 한 곳에 생성해줘야 자동으로 리소스를 찾아준다. classpath 경로에 static 디렉토리를 생성하고 그 안에 html 파일을 추가해 주자.

<!--<hello.html>-->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
Hello every !
</body>
</html>

 

자 그럼 이제 부트를 실행시키고 아래의 경로로 접속해 보자.

http://127.0.0.1:8080/hello.html

 

hello.html의 내용이 확인되면 정상적으로 동작하고 있는 것이다.

 


이번엔 ResourceHttpRequestHandler를 커스터마이징 해보자.

WebMvcConfigurer를 추가하고 addResourceHandlers 메서드를 재정의하여야 한다.

 

아래 소스는 @Configuration를 통해 설정 파일임을 선언하고,

WebMvcConfigurer 인터페이스의 addResourceHandlers()를 구현한다.

 

이때 스프링의 기본 resourceHandler는 유지 한 채로 새로운 resourceHandler를 추가하게 되는 것이다.

모바일로 접속했을 때의 상황을 가정해 "/m/~~~" 경로로 접근했을 때 특정 리소스를 응답하도록 해보자.

// <WebConfig.java>

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) { // 기본 resourceHandler 유지하면서 추가
        registry.addResourceHandler("/m/**")
                .addResourceLocations("classpath:/m/") // '/'으로 끝나도록
                .setCachePeriod(20);

    }
}

 

 

<!--<hello.html>-->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
Hello every !<br>
----------- m -----------
</body>
</html>

 

아래의 경로로 접근하여 새로 추가한 hello.html의 내용을 응답하는지 확인해 보자.

http://127.0.0.1:8080/m/hello.html

 


참조

반응형

댓글