본문 바로가기
기술

서버 비용 절약의 핵심, S3를 활용한 서버리스 웹 호스팅

by 스타스토리. 2025. 6. 24.
반응형
핵심 요약: 본 문서는 AWS의 핵심 스토리지 서비스인 Amazon S3의 개념과 특징을 설명한다. 실습을 통해 S3 버킷을 생성하고, 정적 콘텐츠(HTML, 이미지)를 업로드하며, 버킷 정책을 사용하여 안전하게 퍼블릭 액세스를 허용한 후, S3의 정적 웹 사이트 호스팅 기능을 활성화하는 전 과정을 상세히 안내한다.

웹 서버를 운영하지 않고 웹사이트를 호스팅할 수 있다면 어떨까? Amazon S3(Simple Storage Service)는 이러한 '서버리스(Serverless)' 아키텍처를 가능하게 하는 AWS의 대표적인 객체 스토리지 서비스이다. S3는 사실상 무한한 확장성과 99.999999999%(11-nines)라는 경이적인 데이터 내구성을 제공하여, 단순 파일 저장소를 넘어 데이터 레이크, 백업 및 복원, 그리고 정적 웹 사이트 호스팅에 이르기까지 광범위한 용도로 활용된다. 본 가이드에서는 S3를 사용하여 안정적이고 비용 효율적인 정적 웹 사이트를 구축하는 방법을 알아본다.

1. S3 버킷 생성 및 콘텐츠 업로드

S3에서 모든 데이터, 즉 '객체(Object)'는 '버킷(Bucket)'이라는 최상위 컨테이너에 저장된다. 웹 사이트 호스팅의 첫 단계는 콘텐츠를 담을 버킷을 생성하는 것이다.

1.1. S3 버킷 생성

  • AWS Management Console에서 S3 서비스로 이동 후, '버킷 만들기'를 클릭한다.
  • '버킷 이름'을 입력한다. 이 이름은 전 세계 모든 AWS 사용자를 통틀어 유일해야 하므로, 일반적으로 도메인 이름이나 고유한 접두사/접미사를 사용한다. (예: web-hosting-techcamp-2025)
  • 'AWS 리전'은 사용자와 가장 가까운 Asia Pacific (Seoul) ap-northeast-2를 선택하여 지연 시간을 최소화한다.
  • 나머지 설정은 기본값으로 두고 '버킷 만들기'를 클릭한다.

1.2. 웹 콘텐츠 준비 및 업로드

웹사이트에 표시할 HTML 파일과 이미지를 준비하여 버킷에 업로드한다. 아래 예제 코드를 index.html로 저장한다.

<html>
  <head>
    <meta charset="utf-8">
    <title>S3 Web Hosting Page</title>
  </head>
  <body>
    <center>
      <br>
      <h2>Click image to be redirected to the EC2 instance</h2>
      <!-- 아래 src의 DNS 주소를 이전 실습에서 생성한 ALB의 DNS 이름으로 변경 -->
      <a href="http://LOAD_BALANCER_DNS">
        <img src="aws.png">
      </a>
    </center>
  </body>
</html>
  • 표시할 이미지 파일(예: aws.png)을 준비한다.
  • 생성한 S3 버킷 페이지에서 '업로드' 버튼을 클릭하여 준비한 index.htmlaws.png 파일을 모두 추가하고 업로드를 완료한다.

2단계: 퍼블릭 액세스 설정 및 호스팅 활성화

기본적으로 S3 버킷의 모든 콘텐츠는 비공개이다. 웹 사이트로 사용하기 위해서는 외부 인터넷 사용자가 콘텐츠를 읽을 수 있도록 퍼블릭 액세스 권한을 부여해야 한다.

2.1. 퍼블릭 액세스 차단 해제

  • 버킷의 '권한' 탭으로 이동하여 '퍼블릭 액세스 차단(버킷 설정)' 섹션의 '편집' 버튼을 클릭한다.
  • '모든 퍼블릭 액세스 차단'의 체크박스를 해제하고 변경 사항을 저장한다. 경고 메시지가 나타나면 확인 문구를 입력하여 퍼블릭 허용 의사를 명확히 한다.

2.2. 버킷 정책(Bucket Policy)으로 읽기 권한 부여

개별 객체에 권한을 부여하는 대신, 버킷 전체에 적용되는 정책을 설정하는 것이 훨씬 효율적이고 안전하다.

  • '권한' 탭의 '버킷 정책' 섹션에서 '편집'을 클릭한다.
  • 아래의 JSON 정책을 편집기에 붙여넣는다. YOUR_BUCKET_NAME 부분을 실제 버킷 이름으로 반드시 변경해야 한다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
        }
    ]
}
📌 버킷 정책(Bucket Policy) 사용의 이점
이 정책은 "이 버킷(YOUR_BUCKET_NAME) 안의 모든 객체(/*)에 대해, 모든 사용자(Principal: *)가 객체를 가져가는(s3:GetObject) 행위를 허용(Allow)한다"는 의미이다. 이렇게 정책을 사용하면, 향후 버킷에 추가되는 모든 객체에 동일한 읽기 권한이 자동으로 적용되어 관리가 매우 용이하다.

2.3. 정적 웹 사이트 호스팅 활성화

  • 버킷의 '속성' 탭으로 스크롤을 내려 '정적 웹 사이트 호스팅' 섹션의 '편집'을 클릭한다.
  • 호스팅을 '활성화'하고, '인덱스 문서'에 index.html을 입력한다. 오류 발생 시 보여줄 페이지가 있다면 '오류 문서'에도 동일하게 입력할 수 있다.
  • 변경 사항을 저장한다.

3단계: 결과 확인

모든 설정이 완료되었다. '속성' 탭의 '정적 웹 사이트 호스팅' 섹션 하단에 생성된 버킷 웹 사이트 엔드포인트 URL을 복사하여 웹 브라우저 주소창에 붙여넣는다.

S3로 호스팅된 정적 웹 사이트 예시

S3 웹 사이트 엔드포인트로 접속한 화면 예시

작성한 index.html 페이지가 정상적으로 보이고, 이미지를 클릭했을 때 이전에 설정한 로드 밸런서의 주소로 리다이렉트된다면 성공적으로 실습을 완료한 것이다.

결론

이번 실습을 통해 우리는 별도의 EC2 웹 서버 없이 Amazon S3만으로 정적 웹 사이트를 성공적으로 배포하였다. 이 방식은 트래픽에 따라 자동으로 확장되고 사용한 만큼만 비용을 지불하며, AWS가 관리하는 인프라 덕분에 높은 내구성과 가용성을 기본으로 보장받는다.

단순한 블로그, 포트폴리오, 제품 소개 페이지 등 동적인 서버사이드 처리가 필요 없는 대부분의 웹사이트는 S3 정적 호스팅을 통해 매우 효율적으로 운영할 수 있다. 이는 복잡한 서버 관리에서 벗어나 콘텐츠 자체에 집중할 수 있게 해주는 강력한 서버리스 아키텍처 패턴이다.

반응형