Lined Notebook

🍃 스프링 입문 스터디 2일 차 정리

by juraffe juraffe
이 글은 김영한 님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 학습하며 작성된 글입니다.

스프링 입문 스터디 2일 차 정리

 

정적 컨텐츠

정적 컨텐츠는 개발자가 서버에 만들어 둔 파일을 그대로 사용자에게 전달한다. 서버는 단순히 요청된 파일을 사용자에게 보내는 일 외에는 수행하지 않아 파일의 용량이 큰 경우가 아니라면 서버에 부담이 가장 적지만 정적인 컨텐츠만 제공하기 때문에 제한된 정보밖에 제공할 수 없다.

스프링 부트의 기본 정적 컨텐츠 경로는 ServletContext의 루트 또는 클래스 경로에서 /static(/public OR /resources OR /META-INF/resources)이라고 불리는 디렉토리로 지정되게 된다. 해당 위치에 있는 정적 컨텐츠들은 /**로 매칭되는데 이 말은 http://localhost:8080/hello.html의 경우 위 경로에서 /static/hello.html 파일을 찾아 서버에서 돌려주게 된다.

 

ResourceHttpRequestHandler

정적 컨텐츠는 ResourceHttpRequestHandler에서 처리되는데 ResourceHttpRequestHandler는 정적 컨텐츠 특성상 변경이 일어나지 않은 컨텐츠의 경우 재전송할 필요가 없기 때문에 last-modified의 응답 코드를 통해 정적 컨텐츠가 변경이 되었는지 유/무에 따라서 불필요한 트래픽을 억제하여 서버의 성능적인 측면을 향상시킨다.

 

리소스 맵핑

스프링 부트에서 리소스는 기본적으로 /**이다. 만약 이 경로가 아니라 커스마이징된 경로를 원한다면 스프링 부트에선 spring.mvc.static-path-pattern을 제공한다. 다음은 모든 리소스의 경로운 /resources/**로 변경한다.

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

또는 spring.web.resources.static-location 프로퍼티를 이용할 수 있지만 이 경우 기본 디렉토리 위치들의 값도 바뀌게 된다. 만약 스프링 부트가 제공하는 기본 리소스 맵핑을 유지하면서 새로운 경로를 추가하기 위해서는 WebMvcConfigurer의 addResourceHandler를 이용할 수 있다.

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/m/**")
                .addResourceLocations("classpath:/m/")
                .setCachePeriod(20);
    }
}​

여기서 addResourceLocations의 인자로 넣어주는 문자열 경로는 /로 끝나야 한다.


블로그의 정보

🦒 Juraffe's note

juraffe juraffe

활동하기