
해당 글 도식화: https://excalidraw.com/#json=7r5xoPnDUHEqAsUHOD7VV,ND5ZO0PehD5rRCaN62HHVQ
Amazon Simple Storage Service(S3)는 AWS에서 제공하는 객체 스토리지 서비스이다. ‘기업용 고급 웹하드’라고 이해하면 쉽다.
버킷 생성하고
버킷 정책 설정
CORS 구성
정적 웹사이트 호스팅 설정
만 하고나서 정적 웹사이트 호스팅 섹션에서 내 버킷 웹사이트 엔드포인트를 확인할 수 있다.

현재 버킷에 아무런 파일도 없다.
버킷에 빌드 결과물 올려보기
로컬에서 npx create-next-app@14.2.29 (14버전으로 생성)
/**
* @type {import('next').NextConfig}
*/
const nextConfig = {
output: 'export'
}
module.exports = nextConfig
next.config.js 파일 수정 및 npm run build 를 하면
out 폴더 안에 빌드 결과물이 모인다.

버킷에 out 폴더 안 빌드 결과물을 업로드한다.
아까 위에 404 나왔던 엔드포인트에 다시 접속하면 Nextjs 기본 화면이 뜨는걸 볼수 있다.
actions -> secrets -> id와 value를 잘 넣어준다.

그렇지않으면 이렇게 에러가 난다.
과제의 신속한 진도를 위해 권한 이렇게 주는것도 ....

iam 유저가 권한이 없는데 진행하게되면 깃헙액션에서 아래와같이 에러를 확인할 수 있다.

완료!!

http://chapter4-1.s3-website-ap-southeast-2.amazonaws.com/
https://dug54vnnaytz4.cloudfront.net/
두 url의 차이는 무엇일까
S3는 글로벌 엣지 서버가 없고, CloudFront는 전 세계 CDN이 있음
CloudFront는 TTL, 캐시 무효화 등 세밀한 캐싱 제어 가능
S3 정적 호스팅은 HTTPS 불가. CloudFront는 HTTPS 지원
실제 프로덕트는 google.com 같은 도메인을 구입하여 배포를 할때 아래와 같은 구조로 인프라가 형성된다.

| 항목 | S3 웹사이트 엔드포인트 | CloudFront |
|---|---|---|
| 접속 도메인 | s3-website-ap-southeast-2.amazonaws.com | dug54vnnaytz4.cloudfront.net |
| 서버 응답 헤더 | server: AmazonS3 | server: AmazonS3 (원본), + CloudFront 관련 헤더 다수 |
| 압축 방식 | 없음 (content-encoding 없음) | content-encoding: br (Brotli) |
| 캐시 관련 헤더 | 없음 (혹은 매우 단순) | x-cache: Hit from cloudfront, age:, via:, etag: 등 다양 |
| POP 위치 | 없음 | x-amz-cf-pop: ICN80-P3 ← CloudFront 엣지 로케이션 |
| 보안 연결 | HTTP (:80) ← 암호화 안 됨 | HTTPS (:443) ← 암호화, 성능 최적화 |
| 응답 속도 및 지역 최적화 | 호주 리전까지 직접 연결 | 한국에 가까운 POP(엣지) 노드에서 제공 |
보안 프로토콜 TLS(Transport Layer Security)와 관련된 아키텍처적 한계
S3 엔드포인트는 http 만(port 80)만 수신 가능 [1990년 IANA는 "HTTP → TCP/80"으로 공식 등록했습니다.]
TLS 핸드쉐이크 처리는 서버측에서 인증서,공개키,비밀키를 다루며 수행해야하는데 S3 엔드포인트에 해당 로직이 없음.
TLS 핸드쉐이크란?
브라우저가 서버에게 hi!
서버는 브라우저에게 암호화방식, 인증서 등을 보내줌
클라이언트는 인증서 검증
인증기관목록(CA)은 OS나 브라우저 업체(Chrome, Firefox 등)가 사전에 탑재
브라우저는 CA의 공개키로 복호화 -> 복제 및 조작 확인
신뢰됨으로 간주.
그래서 S3 앞단에 cloudfront와 같은 TLS 지원 계층이 필요하다.
사용자 브라우저 → CloudFront (HTTPS + TLS) → S3 (HTTP)
S3는 단순 HTTP 프로토콜만 지원하기 때문에 자동 압축(content-encoding) 같은 로직을 수행할 능력이 없어서 그렇다.
S3는 캐시 서버가 아닌 매 요청마다 객체를 그대로 전달하는 저장소이다.
캐시 계층이 없어서 캐시처리가 되었는지 판단할수 없음.
via, x-amz-cf-pop는 어떤 중간 CDN을 거쳤는지 알려주는 헤더이다.
S3는 직접 요청을 수신해서 경로 정보가 없다.
cloudfront가 왜 응답속도도 빠르고, 파일용량도 차이가 나는지 알수 있었음.