WebMvcConfigurer: 가상 경로와 물리 경로의 매핑(ResourceHandler)
상위 맥락
02. 정적 자원 서빙 설계 < 04. 파일 업로드와 자원 관리 < 02. Spring MVC2 핵심 기술과 설계 < MVC < Spring < Web
핵심 정리
WebMvcConfigurer의 addResourceHandlers는 브라우저가 접근하는 가상 URL 경로와 서버의 실제 물리 파일 경로를 연결하는 정적 자원 매핑 기능입니다.
자료에서는 업로드된 파일을 /upload/** 같은 웹 경로로 제공하기 위해 ResourceHandler를 설정한다고 설명합니다.
왜 필요한가
transferTo()로 파일을 서버 디스크에 저장해도, 브라우저는 서버의 로컬 파일 시스템 경로에 직접 접근할 수 없습니다. 따라서 HTTP URL과 실제 디스크 경로 사이에 매핑이 필요합니다.
설정 구조
자료의 흐름은 다음과 같습니다.
addResourceHandler("/upload/**"): 브라우저가 요청할 가상 URL 패턴을 정의합니다.addResourceLocations("file:" + filePath + "/"): 해당 요청을 실제 파일 시스템 경로로 연결합니다.
여기서 file: 접두어는 클래스패스가 아니라 외부 파일 시스템 경로를 가리킨다는 의미입니다.
설계 의미
이 방식은 클라이언트에게 실제 서버 디스크 구조를 숨기고, /upload/파일명 같은 추상화된 URL만 노출합니다.
또한 물리 저장소 위치가 바뀌어도 URL 체계는 유지할 수 있어, 저장 위치와 웹 접근 경로의 결합도를 낮춥니다.
주의할 점
정적 자원 경로와 @Controller의 동적 매핑 경로가 겹치지 않도록 URL 네임스페이스를 분리해야 합니다. 또한 공개 파일과 권한 검사가 필요한 파일은 같은 방식으로 열어두면 안 됩니다.
한 문장 요약
WebMvcConfigurer의 ResourceHandler는 업로드 파일이 저장된 실제 디스크 경로를 브라우저가 접근 가능한 가상 웹 경로로 안전하게 연결하는 정적 자원 서빙 설정입니다.