클라우드 환경에서 웹사이트를 호스팅하는 여러 방법 중 AWS S3(Simple Storage Service)를 활용한 정적 웹사이트 호스팅은 비용 효율성과 확장성 측면에서 탁월한 선택입니다. 서버를 직접 관리할 필요 없이 HTML, CSS, JavaScript 파일만으로 웹사이트를 구축할 수 있어 유지보수 부담도 크게 줄일 수 있습니다. 이 글에서는 AWS S3 버킷을 생성하고 정적 웹사이트를 호스팅하는 전체 과정을 상세히 알아보겠습니다.
Amazon Simple Storage Service(S3)는 인터넷 스토리지 서비스로, 데이터를 객체 형태로 저장하고 관리할 수 있는 확장성 높은 플랫폼입니다. ‘버킷’이라는 컨테이너에 무제한에 가까운 객체(파일)를 저장할 수 있으며, 99.999999999%의 내구성을 제공합니다.
S3는 데이터 저장소, 백업 및 복구, 데이터 아카이빙, 빅데이터 분석 등 다양한 용도로 활용되지만, 그중에서도 정적 웹사이트 호스팅 기능은 특히 웹 개발자와 콘텐츠 제작자에게 인기가 높습니다.
S3를 사용한 정적 웹사이트 호스팅은 여러 장점을 제공합니다:
S3 버킷을 생성하는 과정은 비교적 간단하지만, 웹사이트 호스팅을 위해서는 몇 가지 중요한 설정이 필요합니다. 아래는 상세한 단계별 가이드입니다.
먼저 AWS 관리 콘솔(https://console.aws.amazon.com)에 로그인합니다. 계정이 없다면 AWS 회원가입을 진행하셔야 합니다.
AWS 관리 콘솔에서 ‘서비스’ 메뉴를 클릭한 후, ‘스토리지’ 카테고리에서 ‘S3’를 선택합니다.
S3 대시보드에서 ‘버킷 만들기’ 버튼을 클릭하여 버킷 생성 마법사를 시작합니다.
버킷 이름은 글로벌하게 유일해야 하며, DNS 명명 규칙을 따라야 합니다. 웹사이트 호스팅용 버킷이라면, 도메인 이름과 일치시키는 것이 좋습니다(예: www.example.com).
리전은 웹사이트 주 사용자층과 가까운 곳을 선택하는 것이 좋습니다. 한국 사용자가 주로 접속한다면 ‘아시아 태평양(서울) ap-northeast-2’를 선택하는 것이 좋습니다.
💡 팁: 버킷 이름은 나중에 변경할 수 없으므로 신중하게 선택하세요. 도메인 이름과 일치시키면 나중에 사용자 지정 도메인 설정이 더 직관적입니다.
웹사이트 호스팅을 위해서는 ‘모든 퍼블릭 액세스 차단’ 옵션을 해제해야 합니다. 이 설정은 기본적으로 활성화되어 있으므로, ‘모든 퍼블릭 액세스 차단’ 체크박스를 해제하고, 경고 메시지를 확인한 후 진행합니다.
⚠️ 주의: 퍼블릭 액세스를 허용하면 인터넷 상의 모든 사용자가 버킷에 접근할 수 있게 됩니다. 민감한 정보를 저장하지 않도록 주의하세요.
선택적으로 버전 관리와 서버 측 암호화를 설정할 수 있습니다:
필요에 따라 객체 잠금, 태그 등의 고급 설정을 구성할 수 있습니다. 태그는 비용 할당 및 리소스 관리에 유용합니다(예: Name: WebsiteHosting, Environment: Production).
설정을 검토한 후 ‘버킷 만들기’ 버튼을 클릭하여 버킷 생성을 완료합니다.
버킷을 생성한 후에는 정적 웹사이트 호스팅 기능을 활성화해야 합니다.
index.html
을 입력합니다(웹사이트의 기본 페이지).error.html
을 입력할 수 있습니다(404 등 오류 발생 시 표시될 페이지).정적 웹사이트로 사용하려면 버킷의 객체에 대한 퍼블릭 읽기 액세스를 허용하는 버킷 정책을 설정해야 합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::YOUR-BUCKET-NAME/*"
}
]
}
💡 팁: 이 정책은 버킷의 모든 객체에 대한 읽기 액세스를 허용합니다. 특정 폴더나 파일에만 액세스를 제한하려면 Resource 속성을 수정하면 됩니다.
설정이 완료되면 S3가 웹사이트 엔드포인트 URL을 생성합니다:
http://YOUR-BUCKET-NAME.s3-website-REGION.amazonaws.com
또는 http://YOUR-BUCKET-NAME.s3-website.REGION.amazonaws.com
이 URL이 웹사이트의 주소가 됩니다.
이제 웹사이트 파일을 S3 버킷에 업로드할 수 있습니다.
최소한 index.html
파일은 업로드해야 하며, 오류 페이지로 error.html
을 지정했다면 해당 파일도 업로드해야 합니다.
복잡한 웹사이트의 경우 폴더를 사용하여 파일을 구조화할 수 있습니다:
💡 팁: S3는 실제로 폴더 개념이 없고 객체 키에 슬래시(/)를 포함시켜 폴더처럼 표현합니다. 예를 들어, 'images/logo.png'와 같은 키를 가진 객체는 'images' 폴더 안에 'logo.png' 파일이 있는 것처럼 표시됩니다.
웹 브라우저가 파일을 올바르게 해석할 수 있도록 콘텐츠 유형(Content-Type) 메타데이터를 설정하는 것이 중요합니다:
일반적으로 S3는 파일 확장자를 기반으로 자동으로 콘텐츠 유형을 감지하지만, 문제가 발생하면 수동으로 설정할 수 있습니다:
text/html
text/css
application/javascript
image/png
, image/jpeg
등웹사이트 파일을 업데이트해야 할 경우, 동일한 키(경로와 파일명)를 가진 새 파일을 업로드하면 기존 파일을 덮어씁니다. 버전 관리를 활성화한 경우 이전 버전은 보존됩니다.
S3 웹사이트 엔드포인트 대신 사용자 지정 도메인(예: www.example.com)을 사용하고 싶다면, 다음 단계를 따릅니다:
아직 도메인 이름이 없다면, Amazon Route 53이나 다른 도메인 등록 업체를 통해 구매할 수 있습니다.
S3 버킷을 도메인에 연결하는 DNS 레코드를 생성해야 합니다:
💡 팁: S3 정적 웹사이트 호스팅과 도메인 이름을 연결하려면, 버킷 이름이 도메인 이름(서브도메인 포함)과 정확히 일치해야 합니다. 예를 들어, www.example.com으로 접속하려면 버킷 이름도 'www.example.com'이어야 합니다.
www.example.com과 example.com(루트 도메인)을 모두 사용하려면, 두 번째 버킷을 생성하여 리디렉션을 설정할 수 있습니다:
S3 정적 웹사이트 호스팅은 기본적으로 HTTP만 지원합니다. HTTPS를 사용하려면 Amazon CloudFront를 활용해야 합니다:
CloudFront 배포가 생성되면, 도메인 DNS 설정을 업데이트하여 CloudFront 배포를 가리키도록 해야 합니다:
💡 팁: CloudFront 배포가 완전히 배포되려면 약 15~30분이 소요될 수 있습니다. DNS 변경 사항이 전파되는 데에도 시간이 걸릴 수 있으므로, 설정 후 즉시 작동하지 않을 수 있습니다.
S3 정적 웹사이트의 성능을 최적화하기 위한 몇 가지 전략을 소개합니다:
S3 및 관련 서비스의 비용을 관리하고 웹사이트 성능을 모니터링하는 방법입니다:
💡 팁: 대시보드를 만들어 주요 지표를 한눈에 볼 수 있게 하면 웹사이트 관리가 더 쉬워집니다. CloudWatch 대시보드, 타사 모니터링 도구, 또는 자체 분석 시스템을 구축할 수 있습니다.
S3 정적 웹사이트 호스팅을 설정하면서 자주 발생하는 문제와 해결 방법입니다:
가장 흔한 원인과 해결 방법:
윈드라이브(OneDrive)를 사용하다 보면 어느 순간 “동기화 중지됨”, “저장소 가득 참”이라는 메시지를 마주할 수 있습니다. 이는…
윈드라이브(OneDrive)를 사용하다 보면, 기본으로 설정된 동기화 폴더 위치가 불편하거나 C드라이브 용량 부족 등으로 인해 다른…
윈드라이브(OneDrive)는 기본적으로 자동으로 파일을 클라우드와 동기화하도록 설정되어 있습니다. 문서를 수정하거나 사진을 추가하면, 몇 초 내로…
윈드라이브(OneDrive)는 자동으로 파일을 클라우드에 백업하고 여러 기기와 실시간으로 동기화해주는 매우 유용한 도구입니다. 하지만 간혹 “OneDrive…
윈드라이브(OneDrive)는 실시간으로 파일을 클라우드에 저장하고 여러 기기에서 자동으로 동기화해주는 편리한 서비스지만, 때때로 동기화가 멈추거나 오류가…
윈드라이브(OneDrive)는 기본적으로 전체 OneDrive 폴더를 PC와 동기화하지만, 모든 데이터를 동기화할 필요는 없습니다. 저장 공간을 절약하거나,…