프로젝트를 하면서 사용자로부터 받은 이미지를 내 컴퓨터에 로컬에 저장을 했습니다.
리뷰를 작성하면서 이미지를 업로드하면 로컬 폴더에 저장이 되었습니다.
이제 배포를 하면서 외부 파일을 사용해야 했고, FileZilla를 통해서 aws에 열었던 IP를 사용해 연결을 했습니다.
그리고 project 파일에 configure.properties를 넣었습니다. 이 파일은 application.properties에 있던 중요 정보를 옮겨 넣었습니다.
그리고 projectImage 폴더를 넣었고 그 안에 리뷰 사진들과 상품 사진들 등 사진들이 저장되는 것을 확인했습니다.
이제 이거를 코드를 사용해서 CRUD를 구현했습니다.

먼저 interface를 만들어 틀을 제공합니다.

그리고 서비스 로직을 구현 합니다.
@Value 어노테이션은 properties에 있는 이미지 파일 저장 경로를 자동으로 불러와 upLoadDir에 넣어 줍니다.
upload 메서드는 MultipartFile 객체로 여러 개의 파일을 받아 옵니다.
MultipartFile은 스프링에서 HTTP 요청으로 업로드된 파일을 표현하는 인터페이스입니다.
클라이언트가 전송한 파일의 이름, 크기, 콘텐츠 타입 등을 쉽게 다룰 수 있게 해 줍니다.
받아 온 데이터를 if 문을 통해서 확인하고 이름을 만들어 줍니다. UUID를 사용해서 랜덤 문자열을 만들고 기존 파일의 이미지 명과 uuid를 합쳐서 고유한 이미지 파일 이름을 만듭니다.
이미지 경로를 Paths.get 메서드를 사용해서 가져오고 그 자리에 파일을 넣습니다.

delete 메서드는 파일 이름을 가져옵니다.
파일 이름이 /images/abc.jpg 이런 식이라면 뒤에 실제 파일 이름만을 남겨 놓습니다.
그리고 Path 객체를 사용해서 실제 파일 경로를 찾고 삭제를 해줍니다.

리뷰 서비스 클래스에서
파일을 받아 올 때 List 객체를 MultipartFile 타입으로 받아 옵니다.

그리고 이미지 파일 여부를 따진 후에 imageUrl과 review를 entity 타입으로 바꿔 이미지를 저장합니다.
리뷰를 수정할 때도 같은 로직을 사용해서 이미지를 수정 삭제 삽입을 합니다.

이미지를 삭제할 때는 DB에서 이미지 이름을 그대로 가져옵니다. 그리고 url로 외부 파일에 있는 이미지를 삭제합니다.

컨트롤러에서 이미지 파일을 가져올 때는 위 사진처럼 @RequestPart 어노테이션을 사용했습니다.
HTTP 요청의 multipart/form-data 중에서 이름이 "files"인 파트를 이 파라미터에 매핑한다는 뜻입니다.
required = false는 이 값이 아무 값도 안 들어와도 에러를 내지 않는다는 뜻입니다.
null이나 빈 리스트로 값이 들어오는 것을 허용합니다.
'개발 > Java' 카테고리의 다른 글
| 멀티캠퍼스 [현대 이지웰] 제네릭과 컬렉션 (1) | 2025.08.26 |
|---|---|
| 멀티캠퍼스 [현대 이지웰] MVC 패턴 (0) | 2025.08.19 |
| 멀티캠퍼스 [현대 이지웰] Java 상속?, 다형성? 이게 다 뭘까? (2) | 2025.08.11 |
| 멀티캠퍼스 [현대 이지웰] Java 기본 개념 클래스에 대해서 알아보자! (3) | 2025.08.03 |