본문 바로가기
Languages

spring boot에서 외부 static path 사용하기

by lucidiz 2023. 4. 4.
반응형

Spring Boot

Spring Boot에서 외부 static 경로를 사용하는 이유는 여러 가지가 있습니다.

1. 정적 파일 분리: Spring Boot의 기본 설정에 따르면, 정적 파일은 resources/static 디렉토리에 위치해야 합니다. 하지만, 프로젝트 규모가 커질수록 정적 파일의 용량이 커지면서 resources/static 디렉토리가 지저분해질 수 있습니다. 이때, 외부 static 경로를 사용하면, 정적 파일을 따로 분리해서 관리할 수 있습니다.

2. 정적 파일 공유: 여러 개의 Spring Boot 프로젝트가 있다면, 공통으로 사용하는 정적 파일이 있을 수 있습니다. 이때, 정적 파일을 외부 경로에 위치시키면, 여러 프로젝트에서 같은 경로를 사용해 정적 파일을 공유할 수 있습니다.

3. 보안 이슈: Spring Boot 애플리케이션은 내장된 웹 서버를 사용하기 때문에, 애플리케이션의 루트 디렉토리에 위치한 파일들은 외부에서 직접 접근할 수 있습니다. 이때, 애플리케이션 외부에 위치한 디렉토리에 파일을 저장해두면, 보안 이슈를 해결할 수 있습니다.

4. 파일 업로드: Spring Boot 애플리케이션에서 파일 업로드를 구현하려면, 일반적으로 업로드한 파일을 서버의 특정 경로에 저장해야 합니다. 이때, 외부 static 경로를 사용하면, 업로드한 파일을 외부 경로에 저장해 관리할 수 있습니다.

 

그러면 Spring Boot에서 외부 static 경로를 사용하려면 어떻게 해야 할까요?

Spring Boot application.properties 파일에서 설정해주면 됩니다.

 

Spring Boot의 application.properties 파일은 애플리케이션의 설정을 관리하는 파일입니다. 이 파일을 통해 여러 가지 설정 값을 지정하고, Spring Boot의 동작 방식을 조정할 수 있습니다. application.properties 파일은 애플리케이션의 클래스 패스 루트 또는 config 서브 디렉토리에 위치 합니다.

Spring Boot의 application.properties 파일에서 spring.resources.static-locations 속성을 다음과 같이 설정합니다. 

 

예를 들어, D:\static 경로의 파일을 사용하고자 한다면, 다음과 같이 설정합니다.

spring.resources.static-locations=file:D:/static/

위 설정을 통해 http://localhost:8080으로 요청이 들어오면, Spring Boot는 D:\static 경로에서 파일을 찾아서 반환합니다.

또한, 여러 개의 경로를 사용하고자 할 때는 ,로 경로를 구분해 설정하면 됩니다. 예를 들어, D:\static1과 D:\static2의 경로를 사용하고자 한다면, 다음과 같이 설정합니다.

spring.resources.static-locations=file:D:/static1/,file:D:/static2/

위와 같이 설정하면, Spring Boot는 D:\static1과 D:\static2 경로에서 파일을 찾아서 반환합니다

 

만약에, 경로가 프로젝트 하위로 /static/의 경로가 있다면  classpath:/static/을 다음과 같이 설정합니다.

 

spring.resources.static-locations=classpath:/static/

 

만약에  위의 내용 처럼, spring.resources.static-locations 속성 사용하였는데 file: 설정에 대해서 적용이 잘 안 된다면 Spring Boot의 버전 문제입니다. 이 경우,  spring boot의 버전을 2.6.2으로 변경하고 다음과 같이 합니다.

 

application.properties 파일에서 spring.resources.static-locations 속성을 spring.web.resources.static-locations로 변경합니다.

 

spring.web.resources.static-locations=file:D:/static1/,file:D:/static2/, classpath:/static/

 

반응형