[AWS Official Document](https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/cors.html)
- 웹 브라우저에서 **서로 다른 출처(Origin) 간의 리소스 요청을 허용하기 위한 정책**
- 즉, 프론트엔드(다른 도메인)에서 S3 리소스에 접근할 수 있도록 **명시적으로 허용하는 설정**
### 특징
- **Cross-Origin 제어**
- 브라우저는 기본적으로 다른 도메인 요청을 차단
- CORS 설정을 통해 특정 Origin만 허용 가능
- **브라우저 레벨 정책**
- 서버가 아니라 브라우저에서 enforced됨
- Postman, curl에서는 영향 없음
- **Preflight 요청 (사전 검사)**
- 실제 요청 전에 OPTIONS 요청을 보내 허용 여부 확인
- 조건 맞으면 실제 요청 진행
- **버킷 단위 설정**
- S3에서는 버킷에 CORS 규칙(JSON) 설정
- **조건 기반 허용**
- Origin, HTTP Method, Header 기준으로 허용 여부 결정
### 주요 설정 요소
- **AllowedOrigins**
- 요청을 허용할 도메인
- 예: `https://example.com`, `*`
- **AllowedMethods**
- 허용할 HTTP 메서드
- 예: GET, PUT, POST, DELETE
- **AllowedHeaders**
- 허용할 요청 헤더
- **ExposeHeaders**
- 클라이언트에 노출할 응답 헤더
- **MaxAgeSeconds**
- preflight 결과 캐싱 시간
### 동작 흐름
1. 브라우저 → S3에 preflight 요청 (OPTIONS)
2. S3 → CORS 규칙 확인
3. 조건 일치 시 허용 응답
4. 브라우저 → 실제 요청 수행
### 사용 예시
- React/Vue 등 프론트엔드에서 **S3 이미지 직접 로드**
- 프론트엔드 → S3로 **파일 업로드 (PUT)**
- 정적 웹사이트에서 다른 도메인의 S3 리소스 접근
### 한계
- **보안 기능이 아님**
- 단순히 브라우저 요청 허용 여부만 결정
- **서버 간 통신에는 영향 없음**
- 백엔드 → S3 요청은 CORS와 무관
- **설정 잘못하면 전체 공개 위험**
- `AllowedOrigins: "*"` 사용 시 주의 필요