나의 프로젝트 Motivation 에서 회원은 프로필이미지를 설정할 수 있다.
비단 프로필 이미지뿐만 아니라 앞으로 다양한 파일들이 업로드 될 것 이다.
이를 처리하기 위해 나는 genFile 이라는 entity 와 시스템을 만들어서 사용하겠다.
먼저 사용자가 회원가입 과정에서 프로필이미지로 사용 할 원본 이미지파일을 골랐다면 서버는 이 파일을 로컬 파일 시스템의 지정된 위치에 원본 상태로 저장한다.
동시에 원본 파일의 메타데이터와 저장하게 될 위치 등을 GenFile Entity 객체로 만들어 저장해준다.
id 가 10인 데이터를 보면 날짜와 디렉토리, 확장자 등(잘려서 안보이지만) 의 데이터를 저장하고있다.
저장은 잘 되었고 그럼 어떻게 저 이미지파일을 불러와서 이미지 소스로 사용할까...
당연히 알고있겠지만( 몰랐다... )
로컬 파일 위치에 직접 접근하려고하면 권한, 보안, 네트워크 등등 다양한 태클들이 튀어나온다.
@Configuration
public class CustomWebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/gen/**")
.addResourceLocations("file:///" + AppConfig.getGenFileDirPath() + "/");
}
}
그래서
위의 코드를 통해 WebMvcConfigurer 인터페이스를 구현함으로써 웹 애플리케이션에서 사용자가 요청한 정적 파일들을 서버의 특정 폴더에서 찾아 제공하도록 스프링 부트의 리소스 핸들러를 설정했다.
즉, 앞으로 나의 프로젝트에서 /gen 으로 시작하는 요청을 통해 정적 파일들을 제공할 수 있게 되었고, 이 요청을 쉽게 만들기 위해 GenFile 객체를 통해 정적파일의 위치를 /gen 으로 시작하는 요청으로 만들 수 있게 했다.
앞으로 게시물 본문의 사진이나, 첨부파일, 동영상 강의 업로드 등의 기능을 만들면서 요긴하게 사용해보겠다 히히