AWS(Amazon Web Services)
EC2 우분투 서버 스프링부트 파일업로드 경로 지정하기 No space left on device
dev.mk
2024. 6. 16. 18:50
반응형
에러의 발단
jar로 배포한 프로젝트에서 파일업로드시 계속 java.io.IOException: No space left on device 에러가 발생
이미지업로드 경로는 프로잭트 내부가아님 (/static/**)
프로젝트 외부 경로로 지정했을 때 해당 디렉토리에 충분한 저장공간이 있음에도 동일 증상 발생함.
결론 > 원인을 해결하지 못하고 톰캣으로 배포하니 정상적으로 파일업로드가 잘된다.
톰캣으로 배포하려면 기존 JAR를 WAR형식으로 빌드해야한다. 방법은 구글에 많으니 참고.
해결방법
putty 로 EC2 에 접속 후 임의의 파일업로드 경로 생성
mkdir -p /home/ubuntu/uploads
해당 디렉토리의 전체권한 부여
sudo chmod -R 777 /home/ubuntu/uploads
sprinboot application.yml
image:
image-dir: /home/ubuntu/uploads/ #ec2의 파일업로드 경로
image-url: http:/45.12.44.24:8090 #ec2 도메인
나는 @Value 어노테이션으로 전역에서 사용하기위해 yml에 따로 정의하였다.
WebMvcConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/uploadImg/**")
.addResourceLocations("file:///home/ubuntu/uploads/");
}
}
addResourceHandler는 웹에서 접근할 URL경로이다
addResourceLocations는 실제파일이 존재하는 경로이다.
[FILE_TABLE]테이블에 [FILE_URL]컬럼에 값이
"http://45.12.44.24:8090/uploadImg/7ec3a00cc6ee42adbd248eec27280fb6.png"
이런식으로 들어가게 된다치면 front에서 img src에 바인딩만 해주면된다.
jar로 프로젝트 배포시 외부 경로를 참조못하는 이유는 좀더 파악해야겠다.
반응형