728x90
반응형
- MultipartFile vs Resource
- MultipartFile은 사용자가 업로드한 파일을 다룰 때 사용
- Resource는 읽을 수 있는 모든 외부 리소스를 추상화할 때 사용
📚 정의 업로드된 파일을 표현하는 객체 파일, 클래스패스 리소스, URL 등 다양한 리소스를 추상화한 객체 📥 주로 사용되는 경우 클라이언트가 업로드한 파일을 받을 때 (컨트롤러, Feign 요청) 파일을 읽거나, 외부 리소스를 참조할 때 (다운로드, 정적 리소스 등) 💡 주요 인터페이스 org.springframework.web.multipart.MultipartFile org.springframework.core.io.Resource 🔁 읽기 가능 여부 ✅ 가능 (getInputStream()) ✅ 가능 (getInputStream()) 📤 쓰기 가능 여부 ✅ 가능 (transferTo()) ❌ (읽기 전용에 가깝고 직접 쓰기 기능은 없음) 🧪 예시 POST 요청으로 파일 업로드 (@RequestPart, @RequestParam) 클래스패스의 data.json, URL 파일 등 접근 ☁️ Feign 사용 시 multipart 전송 시 사용 (@RequestPart) 내부적으로 전송할 파일을 wrapping 할 때 사용 가능
📘 MultipartFile 이란?- Spring에서 multipart/form-data 요청을 통해 업로드된 파일을 표현하는 객체
- 주로 컨트롤러에서 @RequestPart, @RequestParam 으로 받거나, Feign에서 multipart 전송할 때 사용
특징:@PostMapping("/upload") fun upload(@RequestParam file: MultipartFile) { val content = file.bytes }
- 클라이언트에서 업로드한 파일만 표현할 수 있음
- 서버 측에서 파일 저장, 읽기 등 처리 가능 (transferTo, getBytes() 등)
- Resource는 파일뿐만 아니라 클래스패스 리소스, URL, S3, 파일시스템 경로 등 다양한 리소스를 추상화한 인터페이스
val resource: Resource = ClassPathResource("templates/sample.xlsx") val stream = resource.inputStream
- 주요 구현체:
- ClassPathResource, FileSystemResource, UrlResource, InputStreamResource, ByteArrayResource 등
- 특징:
- 어디에서 왔든 읽기 전용으로 다룰 수 있음
- 파일, 바이너리, 네트워크 리소스 모두 추상화할 수 있음
✨ 언제 어떤 걸 써야 할까?상황 사용클라이언트가 업로드한 파일을 받을 때 ✅ MultipartFile 파일을 읽기만 할 때 (예: 엑셀 템플릿, URL, 클래스패스 파일) ✅ Resource 메모리에서 만든 파일을 Feign으로 multipart 전송할 때 ✅ MultipartFile (ByteArrayMultipartFile 같은) 외부 리소스를 서비스 내부에서 불러올 때 (ex. 다운로드) ✅ Resource
🧡 함께 쓰는 예시- MultipartFile.getResource() 라는 기본 구현도 존재함 → 즉, MultipartFile을 Resource처럼 다룰 수도 있음.
val resource: Resource = multipartFile.resource
728x90
반응형
'Back-End' 카테고리의 다른 글
SOLID 원칙 (0) | 2025.04.11 |
---|---|
HTTPS (0) | 2025.04.08 |
WAS, 웹 서버 차이점 (0) | 2025.04.07 |
자료구조 스택 (0) | 2025.04.07 |
HTTP 메서드 멱등성 (0) | 2025.04.01 |
댓글