이제 S3를 세팅하고 업로드하고 이를 http 요청을 받아서도 가능하게 까지 했다.
뭔가 디테일을 챙겨야할 것 같은 순간이다.
폴더정리
거의 마구잡이로 업로드 하다보니 메인 상위 폴더에 모든파일을 때려 부은 꼴이다.
폴더정리가 필요해 보인다.
폴더에 맞게 넣는 방법은 간단하다.
현재 코드
//파일 이름 가져오기.
String originalFilename = multipartFile.getOriginalFilename();
//S3서버에 업로드
amazonS3.putObject(bucket, originalFilename, inputStreamFile, metadata);
지금은 파일이름(originalFilename)을 그대로 가져와서 이것을 키 값으로 넣어주고 있다.
키값은 버킷안에 저장될 때 각 객체를 구분해줄 수 있는 고유의 값이다.
수정 코드
: 폴더에 저장할 수 있게 변경했다. 단순히 문자열과 '/'를 추가해주면 인식해서 폴더로 정리해준다.
//파일 이름 가져오기.
String originalFilename = multipartFile.getOriginalFilename();
//폴더 분류
String folderName = "festival/";
//putObject 메소드 실행
amazonS3.putObject(bucket, folderName+originalFilename, inputStreamFile, metadata);
키가 중복되면?
키는 버킷내부의 객체의 고유식별자를 말합니다.
고유식별자는 버킷 + 키 + 버전ID의 조합 으로 이루어지는데 해당 객체에 액세스를 할 때 https://버킷명.s3.리전명.amazonaws.com/키 형식으로 조회하는데 만일 키 이름이 중복되면 기존에 있던 객체가 덮어씌워지게 됩니다.
같은 이름의 파일로 계속 업로드 테스트를 진행했었는데, 중복되어 업로드되지 않았는데 이 이유에서였다.
권한설정
S3서버에는 모두가 접근할 수 있기에 권한을 설정하여 조회만 가능할 것인지, 수정 삭제가 가능할 것인 지 등 세분화해서 권한을 설정해줘야할 수 있다. 몇가지 방법으로 버킷 전체 혹은 객체별로 그 권한을 설정할 수 있다.
권한 관련해서는 두가지 단어를 많이 접했다.
버킷 정책 (Bucket Policy), ACL.
추가적으로 사용자 단위로 권한을 관리하는 IAM도 접했었는데, 각 차이는 아래와 같다.
우선 쉽게 이해하기로는,
버킷 정책은 버킷 단위로 접근 제어를 확정하고 이후에 변경이 적을 때,
ACL은 객체 단위로 접근 제어할 때,
IAM 제어는 사용자 단위로 접근 제어할 때 사용하는 것이 일반적이다.
현재 버킷 정책
지금 보니 모두에게 오픈된 버킷같다.
Principal에서 대상을 나타내는데 *로 했고,
Action도 s3 관련해서 모두 허용되어있다.
리소스도 버킷 전체에 전부 허용되어있다.
우선 키를 알고있는 상태에서 업로드와 다운로드는 모두가 할 수 있어야 하므로, 최소한의 액션만 허용하는 것으로 수정했다.
더 공부할 것
IAM과 연동해서 특정 계정, 사용자만 관리자 권한을 부여하는 방법
ACL이 객체별 권한 설정이 가능하다고 들었는데, 어떻게 하는 지? 그리고 어떨 때 활용하면 좋은 지?
S3가 사용은 쉬운데, 깊이 들어가면 디테일한 점들이 어렵고 복잡하다고 들었다.
이제야 조금이나마 그 깊이를 알듯 하다. (아직 모름)
참고링크
https://kim-jong-hyun.tistory.com/83
'TIL : Today I learned (or Week)' 카테고리의 다른 글
TIL 230823 : 테스트 코드 0 - 마음 다 잡고 준비하기. (0) | 2023.08.27 |
---|---|
TIL 230822 : 코딩테스트 입문단계에서 습득한 내장 메소드들 정리 (0) | 2023.08.25 |
WIL 230820 : 최종 프로젝트를 시작하며 (0) | 2023.08.24 |
TIL 230818 : AWS S3 (Simple Storage Service) 2 - multipart, requestDto와 첨부파일 동시에 받기 (0) | 2023.08.24 |
TIL 230817 : AWS S3 (Simple Storage Service) 1 - 세팅, 객체업로드 (0) | 2023.08.22 |