진행중인 프로젝트에서는 사진 저장이 필요하다.
이를 위해 amazon s3를 사용하기로 했다.
우선 프로젝트에서 사용할 AWS 계정이 없어 생성했다.
1. AWS에 프로젝트를 관리할 root 계정 만들기
2. 실질적으로 사용할 모든 권한을 가진 admin IAM 생성
이후 S3 관련 IAM을 생성하고 spring 프로젝트와 연동을 해주었다.
1. S3에 관해 모든 권한을 가진 s3 IAM 생성
2. 1에서 생성한 IAM의 access key와 secret key를 발급
3. gradle에 aws s3 의존성 추가
4. 아래 사진과 같이 S3를 연동
위 S3Config에서 등록한 AmazonS3Client 빈을 가지고 버킷의 파일을 관리한다.
amazon s3를 사용해 파일을 업로드 하는 방식에는 다음과 같이 3가지가 있다.
- stream
- MultipartFile
- AWS MultipartFile
여러 사진 저장, 프로젝트의 규모와 오버엔지니어링을 고려하여 MultipartFile 방식을 선택했다.
여러 사진을 저장해야함 -> stream 방식은 한 api에 한개의 파일만 업로드 가능하다.
프로젝트의 규모 -> Aws MultipartFile 방식은 부하가 적지만 구현이 복잡하다.
예시)
간략하게 코드를 설명하자면
우선 업로드하려고 하는 파일이 비어있으면 업로드를 하지 않고 버킷의 기본 이미지 경로를 반환한다.
(이 경우는 물품 저장 시 사진을 등록하지 않았을때 기본이미지로 들어가는 때에 해당한다)
비어있지 않다면 file의 확장자와 UUID를 사용하여 버킷에 저장할 파일 이름을 생성한다.
이후 버킷명, 파일명, file stream, metada를 이용해 file을 업로드한다.
마지막에는 db에 저장할 저장 파일 이름을 반환한다.
참고) 우아한기술블로그
'Dev' 카테고리의 다른 글
Java11의 CharSequence에서 isEmpty() 사용 시 컴파일 에러 발생 (0) | 2024.09.02 |
---|---|
JPA metamodel must not be empty 에러 해결 (0) | 2024.07.16 |
비즈니스 로직을 어디에 위치시킬 것인가? 2024.8.10 수정 (0) | 2024.06.11 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!