Spring - AWS S3 사용한 파일 업로드

Jieun·2023년 12월 18일
0

spring공부

목록 보기
3/3
  • 플젝 시작 전 예행연습용으로 검증, 수정, DB 설계, ... 등 실제 개발에서 필요한 복잡한 부분들은 많이 제외하고 업로드 부분만 수행해봄

1. AWS 설정

- 1. S3 버켓 생성 & 설정

버킷정책 수정해서 버킷 하위의 모든 리소스(gol2580bucket/*)에 퍼블릭액세스 가능하도록 함

어차피 삭제한 계정이라 가리지 않았습니다~

- 2. IAM 설정

연결해줄 사용자의 IAM 권한 추가 : S3 쓰기 권한

-3. 액세스키 생성

  • 연결할 사용자의 액세스키 생성 -> application.yml, security.properties 등 설정용 변수로 사용할 수 있도록 .csv로 저장해두기
  • 노출되면 안 되므로 properties는 gitignore에 넣는 것 잊지 말기!!

2. 코드

- S3Config

생성한 사용자의 accesskey, secretkey, region (Credential) 을 기반으로 AmazonS3 (Client)를 빌드하는 설정파일


- Entity : File

  • post, ... 복잡한 연관관계는 생략하고 오직 업로드만 체험해 보기 위해 생성한 entity
  • title : 원본 파일이름
  • filePath : UUID로 랜덤하게 생성된 파일주소 (= key)
    -> DB에서 filePath를 불러와 덧붙여 실제 주소를 호출하는 형식으로 파일을 불러온다

- Controller

  • MultipartFile ( "multipart/form-data" ) 형식의 요청을 소화하기 위해 필요한 것
  1. @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE
  2. @RequestPart(value) : 다른 JSON 데이터도 함께 받아야 한다면 value로 구별해주자

- Service

  1. originalFilename : 요청으로 받은 파일의 original name
  2. createFilename : S3에 중복이름의 파일이 저장되는 것을 막기위해 UUID를 이용해 랜덤한 이름 생성 : 랜덤String+파일확장자 형식
  3. putObject
  • S3 버켓, 생성한 파일이름, 파일의 inputStream, 메타데이터(사이즈, 타입) 넘겨 S3에 저장
  1. uploadDB : Entity(File) Repository로 DB에 저장
  • 여기서 filePath는 createdFilename

3. Swagger를 이용한 업로드 테스트

  • swagger


- S3에서 확인

  • key = filePath : UUID로 생성한 랜덤스트링+확장자

0개의 댓글