기본 개념
스프링 MVC에서는 CSS, JS, 이미지, 폰트 같은
정적 리소스를 제공하지 위해 정적 리소스 핸들러를 사용합니다
ex)
| URL 요청 | 실제 파일 위치 |
| /css/style.css | src/main/resources/static/css/style.css |
| /images/logo.png | src/main/resources/static/images/logo.png |
스프링 기본 경로
스프링 부트 기준, 특별한 설정 없이도 다음 디렉토리에서 정적 리소스를 자동으로 찾습니다
src/main/resources/static/
src/main/resources/public/
src/main/resources/resources/
src/main/resources/META-INF/resources/
예를 들어, src/main/resources/static/js/app.js 파일이 있으면
http://localhost:8080/js/app.js로 접근이 가능해진다
📛 스프링 부트는 자동 설정이 되어 있어서 대부분의 경우 추가 설정이 필요 없습니다
왜 static 폴더는 자동으로 되는지
Spring Boot가 시작할 때 static 폴더는 정적파일 폴더다 라고 미리 등록을 해두기 때문에
우리가 설정을 안해도 자동으로 동작한다
자동이 깨지는 경우가 @EnableWebMvc 사용할 때이다
직접 정적 리소스 경로 매핑하기
Spring MVC에서는 WebMvcConfigurer를 구현하여 정적 리소스 경로를 커스터마이징 할 수 있습니다
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
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) {
// /resources/** 요청을 resources 폴더와 매핑
registry.addResourceHandler("/resources/**")
.addResourceLocations("classpath:/my-resources/");
// 외부 폴더도 가능
registry.addResourceHandler("/files/**")
.addResourceLocations("file:/Users/yoojin/files/");
}
}
이 코드를 보면
addResourceHandler ➡ URL 패턴 (클라이언트가 요청하는 경로)
addResourceLocations ➡ 실제 파일 위치 (classpath: = resources 폴더, file: = 외부 경로)
예를 들어, 위 설정에서 /resources/logo.png 요청 ➡ src/main/resources/my-resources/logo.png 반환
캐시 설정
정적 리소스는 캐시가 중요한 경우가 많다
Spring에서는 setCachePeriod 또는 ResourceChain로 캐시 설정 가능하다
registry.addResourceHandler("/resources/**")
.addResourceLocations("classpath:/my-resources/")
.setCachePeriod(3600); // 초 단위, 1시간 캐시
흔히 하는 실수
1. URL과 실게 경로 혼동
URL /css/style.css ➡ 실제 위치
src/main/resources/static/css/style.css
/static/css/style.css로 요청하면 404 나올 수 있음
2. WebMvcConfigurer 사용 시 @EnableWebMvc 주의
@EnableWebMvc 붙이면 스프링 부트 자동 설정이 무시되므로 정적 리소스 핸들러도 직접 다 설정해야 함
3. 외부 파일 접근
file:/경로/ 형태로 지정 가능
file:///c:/... 처럼 슬래시 형태 주의
내가 이해한 걸 바탕을 쉽게 정리해보면
정적 리소스 핸들러는 URL이 오면 어느 폴더에서 파일 꺼낼지 알려주는 안내원
예를 들어
URL이 /image/** 이고
실제로는 resources/myimage/에 있다면
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/image/**")
.addResourceLocations("classpath:/myimage/");
}
}
이렇게 작성할 수 있다
resources
└ myimage
└ cat.png
실제 폴더가 이런식으로 있고
접속은 http://localhost:8080/image/cat.png 이렇게 하면
cat.png를 보여준다
'🍏 개발일기' 카테고리의 다른 글
| private SqlSession sqlSession; 에 대해 분석해보았습니다 (0) | 2026.02.12 |
|---|---|
| 코드 분석 : 글 1번 클릭했을 때 전체 흐름 (0) | 2026.02.10 |
| 커넥션 풀(Connection Pool) (0) | 2026.02.08 |
| Git Bash 설치하고 간단하게 이름, 이메일 설정해보기 (0) | 2026.02.08 |
| GitHub와 Git Flow 실습: Windows에서 Feature 브랜치 작업하기 (0) | 2026.02.06 |