1. 기본개념
버킷 : 최상위 폴더, 리젼안에서 유니크한 이름으로 해야함
객체 : 저장되는 파일들
2. 기본 사용법
aws 콘솔에서 버킷 생성
객체 업로드
버킷 및 객체 관리
- 버킷에 권한 설정 등
- 객체에 퍼블릭 설정, 메타데이터 설정
- 메타데이터는 HTTP 표준에 정의된 메타데이터와 S3 전용 메타데이터로 나뉘는데,
메타데이터 | 내용 |
Cache-Control | 브라우저 캐시 정책 |
Content-Disposition | attachment; filename="파일명" 을 주면 자동으로 브라우저 다운로드로 됨 |
Content-Type | |
Content-Language |
3. 응용사례
기본적으로 퍼블릭 권한은 없다
pre signed url 을 이용하는데 다운로드용, 업로드용 만들수 있다
다운로드 용은 s3에 저장되어있는 객체에 대한 퍼블릭 url을 잠시 만들어 준다. 영구적이지 않아서 권한 관리가 된다
업로드용은 s3 에 put 요청으로 파일 업로드를 할 수 있는 임시 url을 준다. 업로드 전까지 실제 s3에 파일이 생기진 않는다
pre signed upload url 생성이후 실제 업로드하기 전에 중간 상태가 존재함. 이 상태를 정의해서 이 상태에서는 다운로드 받지 못하게 처리해야 한다. 실제 업로드가 되면 s3 이벤트 서비스를 이용해서 서버에 파일 상태를 업로드 완료 상태로 바꿔 줘야한다.
(s3이벤트 발생 - sns 에 put - 서버에 파일상태 변경 요청)
4. 트러블 슈팅
s3 presigned url 또는 public url 를 html5 canvas 에 이용하는 경우 cors 에러가 남
: 버킷별로 cors 설정을 할 수 있음
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
CORS 관련 글
https://developer.mozilla.org/ko/docs/Web/HTTP/CORS
https://enterkey.tistory.com/409
'트러블슈팅' 카테고리의 다른 글
[JPA] OneToMany 에서 child 를 지웠는데 update 쿼리가 날아간다고? (0) | 2020.11.05 |
---|---|
[Kotlin] Contracts (0) | 2020.08.04 |
[Gradle] 라이브러리 버전 충돌(버전이 여러개인 경우) (0) | 2020.07.14 |
[Python] pandas.read_csv 에서 ssl 오류 (0) | 2020.04.04 |
[Spring] Spring boot 에서 mongoDB 붙이기 (0) | 2020.01.08 |