Categories: 미분류

AWS S3 버킷 생성 및 정적 웹사이트 호스팅 완벽 가이드

클라우드 환경에서 웹사이트를 호스팅하는 여러 방법 중 AWS S3(Simple Storage Service)를 활용한 정적 웹사이트 호스팅은 비용 효율성과 확장성 측면에서 탁월한 선택입니다. 서버를 직접 관리할 필요 없이 HTML, CSS, JavaScript 파일만으로 웹사이트를 구축할 수 있어 유지보수 부담도 크게 줄일 수 있습니다. 이 글에서는 AWS S3 버킷을 생성하고 정적 웹사이트를 호스팅하는 전체 과정을 상세히 알아보겠습니다.

목차

  1. AWS S3란?
  2. S3 정적 웹사이트 호스팅의 장점
  3. S3 버킷 생성 단계별 가이드
  4. 정적 웹사이트 호스팅 설정
  5. 웹사이트 파일 업로드 및 관리
  6. 사용자 지정 도메인 연결
  7. HTTPS 보안 설정 (CloudFront 활용)
  8. 성능 최적화 전략
  9. 비용 관리 및 모니터링
  10. 자주 발생하는 문제 해결
  11. 마치며

AWS S3란?

Amazon Simple Storage Service(S3)는 인터넷 스토리지 서비스로, 데이터를 객체 형태로 저장하고 관리할 수 있는 확장성 높은 플랫폼입니다. ‘버킷’이라는 컨테이너에 무제한에 가까운 객체(파일)를 저장할 수 있으며, 99.999999999%의 내구성을 제공합니다.

S3는 데이터 저장소, 백업 및 복구, 데이터 아카이빙, 빅데이터 분석 등 다양한 용도로 활용되지만, 그중에서도 정적 웹사이트 호스팅 기능은 특히 웹 개발자와 콘텐츠 제작자에게 인기가 높습니다.

S3 정적 웹사이트 호스팅의 장점

S3를 사용한 정적 웹사이트 호스팅은 여러 장점을 제공합니다:

  1. 서버 관리 불필요: 서버 프로비저닝, 패치, 보안 업데이트 등 서버 관리 작업이 필요 없습니다.
  2. 높은 가용성과 확장성: AWS의 글로벌 인프라를 활용해 높은 가용성을 제공하며, 트래픽에 따라 자동으로 확장됩니다.
  3. 비용 효율성: 저장된 데이터 양과 데이터 전송에 대해서만 비용을 지불하므로, 특히 소규모 웹사이트에 경제적입니다.
  4. 글로벌 콘텐츠 전송: CloudFront와 통합하여 전 세계 사용자에게 빠른 속도로 콘텐츠를 전달할 수 있습니다.
  5. 버전 관리: 파일 변경 이력을 추적하고 이전 버전으로 롤백할 수 있습니다.

S3 버킷 생성 단계별 가이드

S3 버킷을 생성하는 과정은 비교적 간단하지만, 웹사이트 호스팅을 위해서는 몇 가지 중요한 설정이 필요합니다. 아래는 상세한 단계별 가이드입니다.

1. AWS 관리 콘솔 로그인

먼저 AWS 관리 콘솔(https://console.aws.amazon.com)에 로그인합니다. 계정이 없다면 AWS 회원가입을 진행하셔야 합니다.

2. S3 서비스 접속

AWS 관리 콘솔에서 ‘서비스’ 메뉴를 클릭한 후, ‘스토리지’ 카테고리에서 ‘S3’를 선택합니다.

3. 버킷 생성 시작

S3 대시보드에서 ‘버킷 만들기’ 버튼을 클릭하여 버킷 생성 마법사를 시작합니다.

4. 버킷 이름 및 리전 설정

버킷 이름은 글로벌하게 유일해야 하며, DNS 명명 규칙을 따라야 합니다. 웹사이트 호스팅용 버킷이라면, 도메인 이름과 일치시키는 것이 좋습니다(예: www.example.com).

리전은 웹사이트 주 사용자층과 가까운 곳을 선택하는 것이 좋습니다. 한국 사용자가 주로 접속한다면 ‘아시아 태평양(서울) ap-northeast-2’를 선택하는 것이 좋습니다.

💡 팁: 버킷 이름은 나중에 변경할 수 없으므로 신중하게 선택하세요. 도메인 이름과 일치시키면 나중에 사용자 지정 도메인 설정이 더 직관적입니다.

5. 퍼블릭 액세스 설정

웹사이트 호스팅을 위해서는 ‘모든 퍼블릭 액세스 차단’ 옵션을 해제해야 합니다. 이 설정은 기본적으로 활성화되어 있으므로, ‘모든 퍼블릭 액세스 차단’ 체크박스를 해제하고, 경고 메시지를 확인한 후 진행합니다.

⚠️ 주의: 퍼블릭 액세스를 허용하면 인터넷 상의 모든 사용자가 버킷에 접근할 수 있게 됩니다. 민감한 정보를 저장하지 않도록 주의하세요.

6. 버전 관리 및 암호화 설정

선택적으로 버전 관리와 서버 측 암호화를 설정할 수 있습니다:

  • 버전 관리: 웹사이트 파일의 변경 이력을 추적하고 싶다면 활성화하는 것이 좋습니다.
  • 암호화: 기본적으로 Amazon S3 관리형 키(SSE-S3)를 사용한 암호화가 권장됩니다.

7. 고급 설정 및 태그 추가

필요에 따라 객체 잠금, 태그 등의 고급 설정을 구성할 수 있습니다. 태그는 비용 할당 및 리소스 관리에 유용합니다(예: Name: WebsiteHosting, Environment: Production).

8. 버킷 생성 완료

설정을 검토한 후 ‘버킷 만들기’ 버튼을 클릭하여 버킷 생성을 완료합니다.

정적 웹사이트 호스팅 설정

버킷을 생성한 후에는 정적 웹사이트 호스팅 기능을 활성화해야 합니다.

1. 버킷 정적 웹사이트 호스팅 활성화

  1. S3 대시보드에서 생성한 버킷을 선택합니다.
  2. ‘속성’ 탭을 클릭합니다.
  3. 페이지 아래쪽의 ‘정적 웹사이트 호스팅’ 섹션에서 ‘편집’ 버튼을 클릭합니다.
  4. ‘정적 웹사이트 호스팅 활성화’를 선택합니다.
  5. 호스팅 유형으로 ‘정적 웹사이트 호스팅’을 선택합니다.
  6. 인덱스 문서로 index.html을 입력합니다(웹사이트의 기본 페이지).
  7. 선택적으로 오류 문서로 error.html을 입력할 수 있습니다(404 등 오류 발생 시 표시될 페이지).
  8. ‘변경 사항 저장’ 버튼을 클릭합니다.

2. 버킷 정책 설정

정적 웹사이트로 사용하려면 버킷의 객체에 대한 퍼블릭 읽기 액세스를 허용하는 버킷 정책을 설정해야 합니다:

  1. S3 대시보드에서 해당 버킷을 선택합니다.
  2. ‘권한’ 탭을 클릭합니다.
  3. ‘버킷 정책’ 섹션에서 ‘편집’ 버튼을 클릭합니다.
  4. 다음과 같은 정책을 입력합니다 (YOUR-BUCKET-NAME을 실제 버킷 이름으로 변경하세요):
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::YOUR-BUCKET-NAME/*"
        }
    ]
}
  1. ‘변경 사항 저장’ 버튼을 클릭합니다.
💡 팁: 이 정책은 버킷의 모든 객체에 대한 읽기 액세스를 허용합니다. 특정 폴더나 파일에만 액세스를 제한하려면 Resource 속성을 수정하면 됩니다.

3. 웹사이트 엔드포인트 확인

설정이 완료되면 S3가 웹사이트 엔드포인트 URL을 생성합니다:

  1. S3 대시보드에서 해당 버킷을 선택합니다.
  2. ‘속성’ 탭을 클릭합니다.
  3. ‘정적 웹사이트 호스팅’ 섹션에서 엔드포인트 URL을 확인할 수 있습니다.
    • 형식: http://YOUR-BUCKET-NAME.s3-website-REGION.amazonaws.com 또는 http://YOUR-BUCKET-NAME.s3-website.REGION.amazonaws.com

이 URL이 웹사이트의 주소가 됩니다.

웹사이트 파일 업로드 및 관리

이제 웹사이트 파일을 S3 버킷에 업로드할 수 있습니다.

1. 파일 업로드 방법

  1. S3 대시보드에서 해당 버킷을 선택합니다.
  2. ‘객체’ 탭을 클릭합니다.
  3. ‘업로드’ 버튼을 클릭합니다.
  4. ‘파일 추가’ 버튼을 클릭하거나 파일을 드래그 앤 드롭하여 선택합니다.
  5. 필요에 따라 스토리지 클래스, 암호화, 메타데이터 등의 설정을 조정합니다.
  6. ‘업로드’ 버튼을 클릭하여 파일 업로드를 시작합니다.

최소한 index.html 파일은 업로드해야 하며, 오류 페이지로 error.html을 지정했다면 해당 파일도 업로드해야 합니다.

2. 폴더 구조 관리

복잡한 웹사이트의 경우 폴더를 사용하여 파일을 구조화할 수 있습니다:

  1. S3 대시보드에서 해당 버킷을 선택합니다.
  2. ‘객체’ 탭을 클릭합니다.
  3. ‘폴더 만들기’ 버튼을 클릭하여 새 폴더를 생성합니다(예: images, css, js 등).
  4. 각 폴더에 관련 파일을 업로드합니다.
💡 팁: S3는 실제로 폴더 개념이 없고 객체 키에 슬래시(/)를 포함시켜 폴더처럼 표현합니다. 예를 들어, 'images/logo.png'와 같은 키를 가진 객체는 'images' 폴더 안에 'logo.png' 파일이 있는 것처럼 표시됩니다.

3. 콘텐츠 유형 설정

웹 브라우저가 파일을 올바르게 해석할 수 있도록 콘텐츠 유형(Content-Type) 메타데이터를 설정하는 것이 중요합니다:

  1. 파일 업로드 시 ‘추가 업로드 옵션’을 클릭합니다.
  2. ‘메타데이터’ 섹션에서 필요한 메타데이터를 추가합니다.

일반적으로 S3는 파일 확장자를 기반으로 자동으로 콘텐츠 유형을 감지하지만, 문제가 발생하면 수동으로 설정할 수 있습니다:

  • HTML 파일: text/html
  • CSS 파일: text/css
  • JavaScript 파일: application/javascript
  • 이미지 파일: image/png, image/jpeg

4. 파일 업데이트 및 관리

웹사이트 파일을 업데이트해야 할 경우, 동일한 키(경로와 파일명)를 가진 새 파일을 업로드하면 기존 파일을 덮어씁니다. 버전 관리를 활성화한 경우 이전 버전은 보존됩니다.

사용자 지정 도메인 연결

S3 웹사이트 엔드포인트 대신 사용자 지정 도메인(예: www.example.com)을 사용하고 싶다면, 다음 단계를 따릅니다:

1. 도메인 이름 구매

아직 도메인 이름이 없다면, Amazon Route 53이나 다른 도메인 등록 업체를 통해 구매할 수 있습니다.

2. Route 53 호스팅 영역 설정 (Amazon Route 53 사용 시)

  1. AWS 관리 콘솔에서 Route 53 서비스로 이동합니다.
  2. ‘호스팅 영역’ 메뉴를 선택합니다.
  3. ‘호스팅 영역 생성’ 버튼을 클릭합니다.
  4. 도메인 이름(예: example.com)을 입력하고 호스팅 영역을 생성합니다.

3. DNS 레코드 설정

S3 버킷을 도메인에 연결하는 DNS 레코드를 생성해야 합니다:

  1. Route 53 호스팅 영역에서 ‘레코드 생성’ 버튼을 클릭합니다.
  2. ‘www’와 같이 필요한 서브도메인을 입력합니다.
  3. 레코드 유형으로 ‘A – IPv4 주소’를 선택합니다.
  4. ‘트래픽 라우팅 대상’에서 ‘S3 웹사이트 엔드포인트에 대한 별칭’을 선택합니다.
  5. 해당 리전과 S3 버킷을 선택합니다.
  6. ‘레코드 생성’ 버튼을 클릭합니다.
💡 팁: S3 정적 웹사이트 호스팅과 도메인 이름을 연결하려면, 버킷 이름이 도메인 이름(서브도메인 포함)과 정확히 일치해야 합니다. 예를 들어, www.example.com으로 접속하려면 버킷 이름도 'www.example.com'이어야 합니다.

4. 루트 도메인 리디렉션 (선택 사항)

www.example.com과 example.com(루트 도메인)을 모두 사용하려면, 두 번째 버킷을 생성하여 리디렉션을 설정할 수 있습니다:

  1. 루트 도메인과 일치하는 이름(예: example.com)으로 새 버킷을 생성합니다.
  2. 이 버킷의 ‘속성’ 탭에서 ‘정적 웹사이트 호스팅’을 편집합니다.
  3. ‘정적 웹사이트 호스팅’을 활성화하고, ‘객체에 대한 요청 리디렉션’을 선택합니다.
  4. 대상 버킷 또는 도메인으로 ‘www.example.com’을 입력합니다.
  5. ‘변경 사항 저장’ 버튼을 클릭합니다.
  6. Route 53에서 루트 도메인에 대한 A 레코드를 추가하여 이 리디렉션 버킷을 가리키도록 합니다.

HTTPS 보안 설정 (CloudFront 활용)

S3 정적 웹사이트 호스팅은 기본적으로 HTTP만 지원합니다. HTTPS를 사용하려면 Amazon CloudFront를 활용해야 합니다:

1. SSL/TLS 인증서 발급

  1. AWS Certificate Manager(ACM)로 이동합니다.
  2. ‘인증서 요청’ 버튼을 클릭합니다.
  3. ‘퍼블릭 인증서 요청’을 선택합니다.
  4. 도메인 이름을 입력합니다(예: example.com, *.example.com).
  5. 검증 방법을 선택하고(DNS 검증 권장) 인증서를 요청합니다.
  6. DNS 검증을 선택한 경우, 제공된 CNAME 레코드를 도메인의 DNS 설정에 추가합니다.

2. CloudFront 배포 생성

  1. AWS 관리 콘솔에서 CloudFront 서비스로 이동합니다.
  2. ‘배포 생성’ 버튼을 클릭합니다.
  3. 원본 도메인으로 S3 웹사이트 엔드포인트를 선택합니다(버킷이 아닌 웹사이트 엔드포인트여야 합니다).
  4. ‘원본 액세스’에서 ‘퍼블릭으로 설정’을 선택합니다.
  5. ‘뷰어 프로토콜 정책’에서 ‘Redirect HTTP to HTTPS’를 선택합니다.
  6. ‘대체 도메인 이름(CNAME)’에 사용자 지정 도메인을 입력합니다(예: www.example.com).
  7. ‘SSL 인증서’에서 이전에 발급받은 ACM 인증서를 선택합니다.
  8. 필요에 따라 캐시 및 압축 설정을 조정합니다.
  9. ‘배포 생성’ 버튼을 클릭합니다.

3. DNS 설정 업데이트

CloudFront 배포가 생성되면, 도메인 DNS 설정을 업데이트하여 CloudFront 배포를 가리키도록 해야 합니다:

  1. Route 53 호스팅 영역으로 이동합니다.
  2. 기존 A 레코드를 편집하거나 새로 생성합니다.
  3. ‘트래픽 라우팅 대상’에서 ‘CloudFront 배포에 대한 별칭’을 선택합니다.
  4. 해당 CloudFront 배포를 선택합니다.
  5. ‘레코드 저장’ 버튼을 클릭합니다.
💡 팁: CloudFront 배포가 완전히 배포되려면 약 15~30분이 소요될 수 있습니다. DNS 변경 사항이 전파되는 데에도 시간이 걸릴 수 있으므로, 설정 후 즉시 작동하지 않을 수 있습니다.

성능 최적화 전략

S3 정적 웹사이트의 성능을 최적화하기 위한 몇 가지 전략을 소개합니다:

1. CloudFront 캐싱 최적화

  1. 적절한 캐시 TTL(Time To Live) 설정: 자주 변경되지 않는 콘텐츠는 긴 TTL을, 자주 업데이트되는 콘텐츠는 짧은 TTL을 설정합니다.
  2. 압축 활성화: CloudFront 배포 설정에서 ‘Compress Objects Automatically’를 활성화하여 전송 크기를 줄입니다.
  3. 캐시 무효화 전략: 콘텐츠 업데이트 후 관련 경로에 대한 캐시 무효화를 수행합니다.

2. 콘텐츠 최적화

  1. 이미지 최적화: WebP 형식 사용, 적절한 크기로 리사이징, 이미지 압축 등을 통해 이미지 크기를 줄입니다.
  2. CSS/JavaScript 최소화: 공백과 주석을 제거하고 코드를 압축하여 파일 크기를 줄입니다.
  3. 파일 결합: 여러 CSS 또는 JavaScript 파일을 하나로 결합하여 HTTP 요청 수를 줄입니다.

3. 고급 기능 활용

  1. S3 Transfer Acceleration: 대규모 파일을 S3에 업로드할 때 속도를 향상시킵니다.
  2. CloudFront 함수 또는 Lambda@Edge: 사용자 요청을 처리하거나 응답을 수정하는 데 사용할 수 있습니다.
  3. S3 Object Lifecycle Management: 오래된 객체 버전을 자동으로 아카이빙하거나 삭제합니다.

비용 관리 및 모니터링

S3 및 관련 서비스의 비용을 관리하고 웹사이트 성능을 모니터링하는 방법입니다:

1. 비용 모니터링 및 최적화

  1. AWS Cost Explorer: S3 및 CloudFront 비용을 모니터링하고 추세를 분석합니다.
  2. 예산 설정: AWS Budgets를 사용하여 비용 한도를 설정하고 알림을 받습니다.
  3. 스토리지 클래스 최적화: 자주 액세스하지 않는 파일은 S3 Standard-IA나 S3 Intelligent-Tiering으로 이동합니다.

2. 성능 및 사용량 모니터링

  1. CloudFront 액세스 로그: 사용자 트래픽 패턴, 인기 콘텐츠, 오류 등을 분석합니다.
  2. S3 서버 액세스 로깅: 버킷에 대한 요청을 기록하고 분석합니다.
  3. Amazon CloudWatch: 지표와 알림을 설정하여 이상 징후를 모니터링합니다.
💡 팁: 대시보드를 만들어 주요 지표를 한눈에 볼 수 있게 하면 웹사이트 관리가 더 쉬워집니다. CloudWatch 대시보드, 타사 모니터링 도구, 또는 자체 분석 시스템을 구축할 수 있습니다.

자주 발생하는 문제 해결

S3 정적 웹사이트 호스팅을 설정하면서 자주 발생하는 문제와 해결 방법입니다:

1. 액세스 거부 오류 (403 Forbidden)

가장 흔한 원인과 해결 방법:

  • 버킷 정책이 올바르게 설정되지 않음: 모든 객체에 대한 퍼블릭 읽기 액세스를 허용하는지 확인합니다.
  • ‘모든 퍼블릭 액세스 차단’ 설정이 켜져 있음: 버킷의 ‘권한’ 탭에서 이 설정이 해제되어 있는지 확인합니다.
  • 객체 수준의 ACL(액세스 제어 목록) 설정 확인: 개별 객체의 권한 설정을 확인합니다.

2. 인덱스 문서 문제

  • 인덱스 문서 이름이 올바르게 설정되지 않음: 정적 웹사이트 호스팅 설정에서 index.html이 정확히 입력되었는지 확인합니다.
  • 인덱스 문서가 루트 레벨에 없음: index.html 파일이 버킷의 루트에 업로드되었는지 확인합니다.
  • 대소문자 구분: S3는 대소문자를 구분하므로, index.html과 Index.html은 다른 파일로 인식됩니다.

3. HTTPS 관련 문제

  • S3만으로는 HTTPS를 지원하지 않음: CloudFront를 사용하고 있는지 확인합니다.
  • 인증서 불일치: SSL 인증서가 사용 중인 도메인과 일치하는지 확인합니다(와일드카드 인증서 포함).
  • HTTPS 리디렉션 설정: CloudFront 배포에서 ‘Redirect HTTP to HTTPS’ 옵션이 선택되어 있는지 확인합니다.

4. 도메인 연결 문제

  • DNS 레코드 설정 오류: A 레코
huniverse4

Recent Posts

윈드라이브 동기화 용량 초과 시 대처법

윈드라이브(OneDrive)를 사용하다 보면 어느 순간 “동기화 중지됨”, “저장소 가득 참”이라는 메시지를 마주할 수 있습니다. 이는…

1개월 ago

윈드라이브 동기화 폴더 바꾸는 법 (드라이브 변경 포함)

윈드라이브(OneDrive)를 사용하다 보면, 기본으로 설정된 동기화 폴더 위치가 불편하거나 C드라이브 용량 부족 등으로 인해 다른…

1개월 ago

윈드라이브를 수동 동기화로 설정하는 방법

윈드라이브(OneDrive)는 기본적으로 자동으로 파일을 클라우드와 동기화하도록 설정되어 있습니다. 문서를 수정하거나 사진을 추가하면, 몇 초 내로…

1개월 ago

윈드라이브 동기화 안 될 때 체크할 설정 5가지

윈드라이브(OneDrive)는 자동으로 파일을 클라우드에 백업하고 여러 기기와 실시간으로 동기화해주는 매우 유용한 도구입니다. 하지만 간혹 “OneDrive…

1개월 ago

윈드라이브 동기화 상태 확인 및 오류 해결법

윈드라이브(OneDrive)는 실시간으로 파일을 클라우드에 저장하고 여러 기기에서 자동으로 동기화해주는 편리한 서비스지만, 때때로 동기화가 멈추거나 오류가…

1개월 ago

윈드라이브 특정 폴더만 동기화하는 방법

윈드라이브(OneDrive)는 기본적으로 전체 OneDrive 폴더를 PC와 동기화하지만, 모든 데이터를 동기화할 필요는 없습니다. 저장 공간을 절약하거나,…

1개월 ago