본문 바로가기
Back-End

MultipartFile vs Resource

by 코젼 2025. 4. 7.
728x90
반응형
  • MultipartFile vs Resource
    • MultipartFile은 사용자가 업로드한 파일을 다룰 때 사용
    • Resource는 읽을 수 있는 모든 외부 리소스를 추상화할 때 사용
    📦 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 란?
    • 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

댓글