0Pricing
React Academy · 강의

AWS S3와 CloudFront에서 React SPA 호스팅하기

React 앱을 빌드해 S3에 업로드하고 CloudFront 배포와 캐시 무효화를 구성합니다.

AWS S3와 CloudFront에서 React SPA 호스팅하기은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

S3 정적 호스팅 개요

AWS S3는 정적 파일(HTML, JS, CSS, 이미지)을 웹사이트로 제공할 수 있습니다. CloudFront(CDN)와 함께 사용하면 React SPA에 전 세계 배포, HTTPS, 낮은 지연 시간을 제공할 수 있습니다.

SPA 빌드

React 앱을 정적 출력 디렉터리로 빌드하세요.

# Vite:
npm run build  # outputs to dist/

# Create React App:
npm run build  # outputs to build/

# Next.js static export:
next build && next export  # outputs to out/

S3 버킷 생성 및 구성

S3 버킷을 만들고, 정적 웹사이트 호스팅을 활성화한 다음, 인덱스 문서와 오류 문서를 설정하세요.

# Create bucket (replace with your domain name):
aws s3 mb s3://my-react-app.com

# Enable static hosting:
aws s3 website s3://my-react-app.com --index-document index.html --error-document index.html
# Error doc = index.html handles client-side routing (React Router)

빌드 파일 업로드

빌드 출력을 S3에 동기화하세요. 해시된 자산에는 공격적인 캐시 헤더를 설정하고 index.html에는 캐시하지 않도록 설정하세요.

# Upload hashed assets with long cache:
aws s3 sync dist/ s3://my-react-app.com/ \
  --exclude index.html \
  --cache-control "max-age=31536000,immutable"

# Upload index.html with no cache (always fresh):
aws s3 cp dist/index.html s3://my-react-app.com/index.html \
  --cache-control "no-cache,no-store"

CloudFront 배포 생성

S3 버킷을 가리키는 CloudFront 배포를 만드세요. SPA 라우팅을 지원하려면 REST 엔드포인트가 아닌 S3 웹사이트 엔드포인트를 사용하세요.

# In AWS console or CDK:
# Origin: my-react-app.com.s3-website-us-east-1.amazonaws.com
# Default root object: index.html
# Viewer protocol: Redirect HTTP to HTTPS
# Error pages: 403 → /index.html (200) for SPA routing

SPA 라우팅 수정

CloudFront는 알 수 없는 경로에 대해 403을 반환합니다(S3는 React 라우트를 알지 못합니다). 사용자 지정 오류 응답을 구성하세요. 403을 상태 코드 200의 /index.html로 연결합니다.

사용자 지정 도메인 및 SSL

도메인에 대한 ACM 인증서를 us-east-1에서 요청하세요(CloudFront에 필요). 이를 배포에 연결하고 CloudFront 도메인을 가리키는 CNAME DNS 레코드를 추가하세요.

배포 시 캐시 무효화

새 파일을 배포한 후 CloudFront 캐시에서 index.html을 무효화하세요(S3에서는 캐시하지 않도록 설정했지만 CloudFront에서 캐시될 수 있습니다).

aws cloudfront create-invalidation \
  --distribution-id EXXXXXXXXXXXXX \
  --paths "/*"

GitHub Actions 배포

CI에서 배포 작업 흐름을 자동화하세요. 빌드 → S3에 동기화 → CloudFront 무효화 순서로 진행합니다.

- name: Deploy to S3
  run: aws s3 sync dist/ s3://my-react-app.com/ --delete
  env:
    AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }}
    AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET }}

- name: Invalidate CloudFront
  run: aws cloudfront create-invalidation --distribution-id ${{ secrets.CF_ID }} --paths "/*"

S3 버킷 정책

버킷의 공개 액세스를 차단하고 Origin Access Control(OAC) 정책을 사용하여 CloudFront만 버킷을 읽을 수 있게 하세요. 공개 버킷 호스팅보다 안전합니다.

비용 추정

S3 정적 호스팅은 매우 저렴합니다. 저장소는 약 $0.023/GB이고 요청은 약 $0.0004/1000건입니다. CloudFront 비용은 리전과 데이터 전송량에 따라 달라지지만, 무료 등급에서는 월 첫 1TB가 무료입니다.

빠른 확인

React SPA를 호스팅할 때 S3 오류 문서를 index.html로 설정해야 하는 이유는 무엇입니까?

복습

SPA를 빌드하고, 캐시를 분리하여 S3에 동기화한 다음(해시된 자산은 오래 캐시하고 index.html은 캐시하지 않음), CloudFront를 통해 제공하세요. 403 오류를 /index.html로 연결하여 SPA 라우팅을 수정하세요. GitHub Actions로 배포를 자동화하고 배포할 때마다 CloudFront를 무효화하세요.

자주 묻는 질문

“AWS S3와 CloudFront에서 React SPA 호스팅하기” 강의는 무료인가요?

네 — “AWS S3와 CloudFront에서 React SPA 호스팅하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“AWS S3와 CloudFront에서 React SPA 호스팅하기”에서 뭘 배우나요?

React 앱을 빌드해 S3에 업로드하고 CloudFront 배포와 캐시 무효화를 구성합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

React Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“AWS S3와 CloudFront에서 React SPA 호스팅하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Vercel에 배포하기: 구성 없이 배포와 미리 보기 URL
  2. AWS S3와 CloudFront에서 React SPA 호스팅하기
  3. React/Next.js 앱 도커화하기
  4. React용 GitHub Actions CI/CD
← React Academy(으)로 돌아가기