🌐 한 페이지 가이드로 보기 → https://storage.googleapis.com/dante-labs-pub/guides/aws-s3-cloudfront/index.html
한 줄 요약
AWS S3에 올린 이미지·동영상 파일을 CloudFront(글로벌 CDN) 를 통해 퍼블릭 URL로 제공하는 가장 표준적인 절차. 1년 무료 티어 범위 내에서는 0원으로 운영 가능.
| 항목 | 값 |
|---|---|
| 대상 | AWS를 처음 쓰는 개인·소규모 팀 |
| 소요 시간 | 약 20분 |
| 비용 | 1년 무료 티어 내 0원 (S3 5GB · CloudFront 1TB 전송) |
| 난이도 | ★☆☆☆☆ — UI 클릭으로 완결 |
1. AWS 회원가입 — 1년 무료 계정 만들기
신용카드 등록은 필수지만 1년 무료 티어 범위에서는 청구되지 않는다. 인증 단계까지 평균 10분.
절차 한눈에
- 공식 사이트 진입 — aws.amazon.com → '무료 계정 생성' 버튼
- 계정 정보 입력 — 이메일 · 계정 이름 · 비밀번호 → 이메일 인증
- 연락처 · 결제 정보 — 이름 · 주소 · 전화번호 + 신용카드
- 휴대폰 인증 — SMS 또는 음성통화로 인증번호 확인
- 지원 플랜 선택 — 기본 지원(무료) 선택 후 가입 완료
aws.amazon.com 첫 화면 — 우측 상단 '무료 계정 생성' 버튼 클릭
이메일 주소와 계정 이름 입력 후, 받은 메일에서 6자리 코드 입력
⚠️ 주의 — 신용카드는 등록만 해도 소액이 일시 결제됐다가 자동 환불됩니다. 결제 알림이 와도 당황하지 마세요.
2. S3 버킷 만들기 — 파일이 살 집
S3는 파일을 담는 객체 스토리지. 버킷 이름은 전 세계에서 유일해야 하고, CloudFront와 함께 쓸 거라면 퍼블릭 액세스를 차단해도 된다.
핵심 4가지
- 버킷 이름 — 영문 소문자 · 숫자 · 하이픈만 사용, 전 세계 고유
- 리전 — 한국에서 가까운
Asia Pacific (Seoul) ap-northeast-2 - 객체 소유권 — 기본값(ACL 비활성화) 유지
- 퍼블릭 액세스 — 모두 차단 (CloudFront가 별도 권한으로 우회 접근)
AWS Management Console 상단 검색창에 'S3' 입력 → 서비스 클릭
S3 대시보드 우측 상단 '버킷 만들기' 클릭
리전 선택 + 객체 소유권 + 퍼블릭 액세스 차단
버킷 이름이 중복이면 '이미 존재합니다' 에러 — 더 고유한 이름으로 변경
💡 실수 사례 —
dantelabs라는 이름은 누군가가 이미 선점해 사용 중이었습니다.dante-labs-test처럼 자기만의 prefix를 붙이면 충돌이 줄어듭니다.
3. 파일 업로드 — 드래그 앤 드롭 한 번
버킷이 만들어지면 그 안에 이미지·동영상을 올린다. 드래그 앤 드롭이 가장 편하고, 폴더째로 올리면 S3 안에 동일한 폴더 구조가 그대로 만들어진다.
방금 만든 버킷 클릭 → 객체 탭에서 '업로드' 버튼
파인더/탐색기에서 파일을 끌어다 놓거나 '파일 추가' 버튼으로 선택
업로드 진행 상태 — 모든 파일이 '성공'으로 표시되는지 확인
객체 목록에 파일이 보이면 업로드 완료
📌 관찰 — 단일 파일은 5GB, 멀티파트 업로드를 쓰면 최대 5TB까지 한 객체로 올릴 수 있습니다. 큰 동영상도 한 덩어리로 보관 가능.
4. CloudFront 배포 만들기 — 글로벌 캐시 앞단
S3의 파일을 그대로 외부에 노출하지 않고 CloudFront라는 캐시 레이어로 감싼다. 전 세계 엣지 노드에서 캐시되어 응답이 빨라지고, S3 자체는 비공개로 둘 수 있어 보안도 같이 챙겨진다.
4.1 CloudFront 콘솔 진입
콘솔 상단 검색창에 'CloudFront' 입력 → 서비스 선택
'Create distribution' 버튼 클릭 → 마법사 시작
4.2 배포 이름·설명
구분 가능한 이름과 설명 입력 후 [Next]
4.3 원본(Origin) 설정 — 핵심 옵션
- Origin type — Amazon S3 선택
- Origin domain —
[Browse S3]버튼으로 앞서 만든 버킷 선택 (자동으로 도메인 채워짐) - Origin path — 특정 폴더만 배포할 거면
/images형식으로 입력. 전체면 비워둠 - Allow private S3 Bucket access to CloudFront — 체크 (OAC 자동 생성)
- Use recommended origin settings — 선택
S3 버킷 + Allow private access + Recommended origin settings 체크
4.4 보안 보호(WAF) — 비활성화
이미지·동영상 배포 목적이면 [Do not enable security protections] 선택 → [Next]
💰 왜 비활성화? — WAF는 시간당 별도 과금이 붙습니다. 단순 정적 자산 배포에는 과합니다. 결제 시스템·로그인 같은 민감한 트래픽이라면 켜는 게 맞습니다.
4.5 검토 후 배포 생성
최종 확인 화면 → [Create distribution] 클릭
할당된 도메인(예: d1234abcd.cloudfront.net) 메모
4.6 배포 활성화 대기
배포 목록에 새 항목이 추가됨 — 상태가 '배포 중'
1~10분 후 'Enabled'로 바뀌면 사용 가능
☕ 대기 시간 — 보통 3분 안쪽이면 끝나지만, 처음 만드는 계정은 10~20분이 걸리기도 합니다. 커피 한 잔.
5. CloudFront URL로 접근 — 실제 동작 확인
배포가 활성화되면 https://[도메인]/[파일경로] 형식으로 어디서나 파일을 가져올 수 있다.
URL 구조
https://[CloudFront-도메인]/[파일경로]
예시:
https://d1234abcd.cloudfront.net/images/sample.jpg
https://d1234abcd.cloudfront.net/videos/demo.mp4
브라우저에서 CloudFront URL로 이미지가 즉시 로드됨
동작 잘 됐는지 체크리스트
- 이미지가 브라우저에서 즉시 보인다
- 동영상은 스트리밍으로 재생된다 (다운로드 후 재생이 아님)
- 개발자 도구(F12) → Network 탭 → 응답 헤더에
X-Cache: Hit from cloudfront또는Miss from cloudfront가 보인다 - 두 번째 요청 시 응답 시간이 절반 이하로 줄어든다 (캐시 히트)
6. 자주 만나는 오류 — 원인과 해결
❌ 403 Forbidden
증상 — URL을 입력했더니 빨간 에러 페이지 + 'AccessDenied'
원인
- S3 버킷 정책에 CloudFront의 OAC ARN이 누락됨
- 'Allow private S3 Bucket access to CloudFront' 체크를 안 함
해결 — CloudFront 배포 → Origins → 해당 origin → [Edit] → 'Copy policy' 버튼으로 정책을 복사해 S3 버킷 권한에 붙여넣기
❌ 404 Not Found
증상 — 페이지는 떴는데 'NoSuchKey'
원인 — 단순한 경로 오타. CloudFront는 S3의 객체 키를 그대로 매핑하므로, S3에 img/sample.jpg로 올렸으면 URL도 .../img/sample.jpg여야 함
해결 — S3 콘솔에서 객체 클릭 → '객체 URL'에 적힌 경로를 그대로 CloudFront 도메인 뒤에 붙이기
❌ 배포가 계속 'In Progress'
증상 — 30분이 지나도 상태가 'Enabled'가 안 됨
원인
- WAF 연결 시도가 계속 실패하는 경우
- SSL 인증서(커스텀 도메인 사용 시)가 us-east-1 리전에 없는 경우
해결 — Distribution 설정 → General → [Edit]에서 보안 보호를 끄고, 커스텀 도메인 안 쓸 거면 'Default CloudFront Certificate'로 되돌리기
7. 마무리 — 운영 체크리스트와 비용 최적화
완료 체크리스트
- AWS 계정 생성 + MFA 활성화
- S3 버킷 생성 + 퍼블릭 액세스 차단
- 파일 업로드 + 객체 URL 확인
- CloudFront 배포 생성 + OAC 연결
- 브라우저에서 CloudFront URL로 파일 접근 검증
- Billing Dashboard에서 무료 티어 사용량 확인
핵심 운영 포인트 3가지
| 영역 | 핵심 |
|---|---|
| 🛡️ 보안 | S3는 비공개로, CloudFront만 외부 노출. OAC가 둘 사이의 유일한 통로 |
| ⚡ 성능 | 전 세계 엣지 캐시. 두 번째 요청부터는 S3까지 가지 않고 가장 가까운 노드에서 응답 |
| 💰 비용 | S3 5GB · CloudFront 1TB 전송이 1년 무료. Billing Dashboard에서 임계값 알람 설정 |
정적 자산 배포는 이 3가지로 사실상 끝. 나머지는 도메인 연결 · WAF · 인증 같은 선택지.
다음 단계 — 더 발전시키려면
- 커스텀 도메인 — Route 53 + ACM으로
cdn.my-site.com같은 자체 도메인 연결 - Cache Invalidation — 파일 교체 시 CloudFront 캐시를 무효화 (월 1,000건 무료)
- Signed URL — 특정 시간만 유효한 임시 URL 발급 (유료 영상 등)
- CloudFront Functions — 엣지에서 헤더 변경 · A/B 테스트 같은 가벼운 로직 실행
참고 자료
🌐 한 페이지 가이드로 보기 → https://storage.googleapis.com/dante-labs-pub/guides/aws-s3-cloudfront/index.html
