1월 10일 개발일지

2024. 1. 10. 21:04스파르타/개발일지

 

 

 

 

오늘은 게시판 CRUD 기능에 이미지(파일) 업로드 기능을 추가할 것이다.

 

 

Multipart ?

웹 클라이언트가 요청을 보낼 때, HTTP 프로토콜의 바디 부분에 데이터를 여러 부분으로 나눠서 보내는 것이다.

웹 클라이언트가 서버에게 파일을 업로드할 때, http 프로토콜의 바디 부분에 파일 정보를 담아 전송을 하는데,

여러개의 파일을 한번에 전송하게 되면 body 부분에 파일이 여러개로 연결되어 전송된다.

이렇게 여러 부분으로 나누어서 전송되는 것을 Multipart data라고 한다.

보통 스프링에서 파일을 전송할 때 사용한다.

 

 

 

MultipartFile ?

사용자가 업로드한 File을 핸들러에서 손쉽게 다룰 수 있게 도와주는 매개변수 중 하나이다.

매개변수를 사용하기 위해서는 MultipartResolver Bean이 등록되어 있어야 한다.

이는 springBoot에서는 자동 등록을 지원하지만,

spingMVC에서 기본으로 등록해주지 않으므로 꼭 확인해야 한다.

MultipartFile 인터페이스는 스프링에서 업로드한 파일을 표현할 때 사용되는 인터페이스이다.

MultipartFile 인터페이스를 이용해서 업로드한 파일의 이름, 실제 데이터, 파일 크기 등을 구할 수 있다.

 

 

 

 

게시글에 이미지 업로드 기능 추가하기

1. 이미지를 저장할 모델을 만든다
2. 업로드할 때 처리할 서비스 및 컨트롤러를 추가한다

 

 

 

Post 모델에 이미지 경로를 추가해줌
    var imagePath: String? = null,

CreatePostRequest 에 이미지를 받아올 수 있는 필드를 추가함
    val image: MultipartFile? //이미지를 받아올 필드

PostServiceImpl 에 파일 스토리지 서비스를 추가하고 해당 서비스를 주입받아 이미지를 저장하는 부분을 만듦

Service 패키지 안에 FileStorageService , FileStorageServiceImpl 클래스를 생성
파일을 저장하고 로드하는 구체적인 동작을 정의해야 함
주로 파일 저장소에 파일을 업로드하고, 파일의 경로를 반환하며 파일 이름을 기반으로 파일을 로드하는 등의 로직을 구현

 

여기서 swagger에서 테스트를 해보면
Please correct the following validation errors and try again.
Value must be a string
라는 오류가 발생함

 

 

 

 

오류 해결 참고 문서

 

[Spring Boot] @RequestPart를 이용한 MultipartFile, DTO 처리 및 테스트

문제 - @RequestParam + @RequestBody 쇼핑몰 토이 프로젝트 중 해당 품목의 이미지를 첨부하고 품목 정보를 입력해 아이템을 등록하는 기능을 구현하려고* MultipartFile은 @RequestParam으로 Dto는 @RequestBody를

velog.io

 

 

여기서도 나와있듯이 @RequestPart 를 이용하게 되면 Swagger로는 테스트가 불가능하다.

그래서 Postman 을 사용하게 되었다.

 

 

오류 해결은 다음 포스팅에서 다뤄보겠습니다...

 

 

 

 



참고
https://github.com/llhbum/MyBoard_Java-Spring
https://antstudy.tistory.com/308

 

 

 

 

 

 

 

 

 

 

 

'스파르타 > 개발일지' 카테고리의 다른 글

1월 12일 개발일지  (0) 2024.01.12
1월 11일 개발일지  (3) 2024.01.11
1월 9일 개발일지  (3) 2024.01.09
1월 8일 개발일지  (4) 2024.01.08
개발일지 12월 19일  (0) 2023.12.19