상황
이 포스팅은 Spring 에서 정적 자원들은 어떻게 접근할 수 있을까? 라는 궁금증에서 시작되었다.
실행환경 및 버전
- JDK : open JDK 11
- Spring Boot : 2.7.9
✔️기본 정적 리소스 위치
📌 Spring Boot는 별다른 설정 없이도 root를 기준으로 아래의 경로에서 정적 콘텐츠를 제공한다.
classpath:/static
classpath:/public
classpath:/resources/
classpath:/META-INF/resources
✔️새로운 정적 리소스 위치 추가하는 방법
기본 등록되어 있는 리소스는 유지한채 새롭게 리소스를 추가하려면 어떻게 해야할까?
📌WebMvcConfigurer를 구현하는 클래스에서 addResourceHandlers를 override하여 정적 리소스 핸들러를 커스터마이징할 수 있다.
이 방법을 사용하면 스프링 부트가 제공하는 정적 리소스 핸들러는 그대로 사용하면서 커스텀 핸들러가 추가된다.
@Configuration // 이 클래스는 Spring의 설정 클래스로 사용
public class WebConfig implements WebMvcConfigurer {
// properties 설정 파일에서 읽어온 업로드 위치를 저장할 변수
@Value("${upload.path}")
private String uploadPath; // ex. C://usr/Application/example
// 정적 리소스 핸들러를 추가하는 메서드
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String filePrefix = OSValidator.isWindows() ? "file:///" : "file:";
registry.addResourceHandler("/attach/**") // "/attach/**" 경로로 들어오는 모든 요청을 처리하기 위한 리소스 핸들러 등록
.addResourceLocations(filePrefix + uploadPath + "/"); // 파일 시스템에서 실제 이미지 리소스를 찾을 경로 설정
}
}
👉"/attach/" 경로로 요청이 들어오면 서버의 파일 시스템에서 uploadPath 변수에 지정된 디렉토리에서 정적리소스(파일)을 찾아서 반환하도록 설정하는 코드이다.
- registry.addResourceHandler("/attach/**")
- "/attach/"로 시작하는 모든 요청에 대해 이 핸들러가 작동하도록 설정
- 클라이언트가 "/attach/파일명"과 같은 URL로 이미지를 요청하면 이 핸들러가 그 요청 처리
- addResourceLocations(filePrefix + uploadPath + "/")
- 실제 파일 시스템에서 해당 정적 리소스를 찾을 경로를 설정하는 부분
- 여기서 uploadPath는 @Value("${upload.path}")로 주입받은 업로드 위치를 나타내는 변수 (예시. C://usr/Application/example)
- uploadPath 하위에 실제 디렉토리 경로로 연결하여 해당 디렉토리에서 리소스를 찾을 수 있도록 설정
view단
아래 사용 예시는 /attach/ 으로 호출하는 자원을 찾는다.
따라서 C://usr/Application/example/popup/이미지이름.jpg 으로 찾아서 view에 뿌려준다.
<img src="/attach/popup/이미지이름.jpg" />
'Back > Spring Boot' 카테고리의 다른 글
[Spring Boot] .jar 배포 후 resources 파일 경로 찾기 (2) | 2022.06.10 |
---|---|
[SpringBoot] @Valid 어노테이션으로 validation 유효성 검사하기 (0) | 2022.02.08 |
[Spring Boot, IntelliJ] 인텔리제이 서버 재시작 없이 정적 리소스 리로드하기 (4) | 2022.02.04 |
[Spring Boot] 프로젝트 생성 및 DB 연동 (0) | 2021.12.10 |
[Spring Boot] 재시작 없이 정적 리소스 리로드하기 (0) | 2021.10.18 |
댓글