본문 바로가기
SpringBoot/웹 애플리케이션 개발

정적 리소스 처리

by DEVLIB 2025. 4. 14.
728x90

스프링 부트의 정적 리소스 기본 구조

스프링 부트는 resources/static 디렉토리 하위의 파일들을 자동으로 정적 리소스로 인식합니다.
특별한 설정 없이 아래 위치에 파일을 넣기만 하면 URL로 바로 접근할 수 있어요.

src/
└── main/
    └── resources/
        ├── static/        ← 정적 리소스 위치
        │   ├── css/
        │   ├── js/
        │   ├── images/
        │   └── favicon.ico
        └── templates/     ← HTML 템플릿 (Thymeleaf 등)

예시 - URL 매핑

파일 경로 접근 URL
static/css/style.css /css/style.css
static/js/app.js /js/app.js
static/images/logo.png /images/logo.png
static/favicon.ico /favicon.ico

정적 파일 추가 예제

1. src/main/resources/static/css/style.css

body {
  background-color: #f0f0f0;
  font-family: sans-serif;
}

2. Thymeleaf HTML 템플릿에서 사용하기

<link rel="stylesheet" th:href="@{/css/style.css}">

@{} 문법은 컨텍스트 경로를 자동으로 적용해줍니다.


캐시 설정 (선택)

정적 리소스는 기본적으로 캐시될 수 있어, 변경해도 브라우저가 이전 파일을 불러올 수 있습니다. 이를 방지하려면

application.properties에 다음과 같이 설정합니다:

spring.web.resources.cache.period=0
 

혹은 버전 쿼리 파라미터 활용:

<script th:src="@{/js/app.js(v=${version})}"></script>

정적 리소스 우선순위

스프링 부트는 다음 경로에서 정적 리소스를 자동으로 찾습니다 (우선순위 순):

  1. classpath:/static/
  2. classpath:/public/
  3. classpath:/resources/
  4. classpath:/META-INF/resources/

일반적으로 static/ 디렉토리를 가장 많이 사용합니다.


커스터마이징 

WebMvcConfigurer를 상속받아 정적 리소스 핸들링 경로를 커스터마이징할 수 있어요:

 
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/assets/**")
                .addResourceLocations("classpath:/custom-static/");
    }
}

위 설정 시 classpath:/custom-static/logo.png → /assets/logo.png로 접근 가능


마무리 요약

항목 설명
정적 리소스 위치 src/main/resources/static/
URL 매핑 방식 디렉토리 구조 그대로 매핑됨 (/css/style.css)
대표 리소스 CSS, JS, 이미지, favicon 등
템플릿에서 사용 @{/경로} 방식으로 연결
커스터마이징 WebMvcConfigurer로 경로 조정 가능

 

LIST