AWS S3를 이용한 웹 페이지 호스팅 구축하기

2018. 6. 4. 18:28개발을 파헤치다/서버 인프라

반응형

Amazon Simple Storage Service란?

서비스를 런칭하게 되면 정말 무수한 데이터가 쏟아져 들어오게 됩니다.

이미지 저장만 해도 큰 용량을 차지할 수 있습니다.

자체 서버 구축(On-Premise)은 시간도 많이 걸릴 뿐더러 유지에도 상당한 노력이 들어가게 됩니다.

특히 데이터 백업, 데이터 분석, 데이터 배포등 정말 여러가지 신경 쓸 부분이 많은데 이것을 모두 자체 구현한다는 것은 사실 너무 힘든 일입니다.

그래서 Amazon에서 준비한 서비스가 바로 Amazon Simple Storage Service이죠.



수 많은 데이터가 들어오다 보면 서버가 다운되는 일은 흔하게 일어나죠.

서버 다운을 예측하기는 어렵기 때문에 그때 그때 개발자가 대처해야 한다면 이는 매우 비효율적입니다.

서비스를 생각해서도, 개발자의 삶을 위해서도 이러한 대처 프로세스는 절대로 좋지 않습니다.



자체 서버 구축은 참 마음처럼 되지 않습니다.




그래서 Amazon S3가 나왔습니다.

대용량의 데이터를 어디서나, 원하는 만큼 저장하고 검색할 수 있죠.

S3는 99.9999999%의 내구성을 자랑하도록 설계되었으며 벌써 수십억 개의 객체와 엑사바이트 규모의 데이터를 저장하고 있습니다.


이렇게 버전 관리까지 되는 미디어 스토리지를 찾는 것은 쉬운 일이 아니죠!


또한 대용량 데이터를 안전하고 장기적으로 보관할 수 있는 Amazon Glacier도 제공합니다.

이렇게 데이터 보관하면 정말 안전하게 데이터를 지킬 수 있습니다.


S3를 이용한 정적 웹페이지 호스팅


정적 웹페이지(Static Web Page)는 애초에 프로그래밍된 그대로 사용자에게 보여지는 웹 페이지를 의미합니다.

HTML, CSS, Javascript 모두 애초에 프로그래밍된대로 사용자에게 보여지게 됩니다.

동적 페이지와의 큰 차이점은 서버와 연계하여 데이터를 가공한 뒤 보여주는 부분이 정적 웹페이지에는 없다는 것입니다.

이를 이해하기 쉽게 비유하자면, 자동차를 살 때 전시장에 디스플레이 되어 있는 완제품 차를 사는 것과 롤스로이스처럼 사용자의 요구사항에 맞춰 주문 제작으로 사는 것의 차이라고 할 수 있습니다.

완제품 차(정적 웹사이트)의 경우 이미 공정이 끝난 차량이기 때문에 차량의 색깔이라던가, 운전대의 모양, 트렁크의 사이즈 같은 것들을 바꿀 수 없습니다. 대신 고객이 요청할 때 바로 차량을 전달해 줄 수 있습니다.

롤스로이스같은 주문 제작 차량(동적 페이지)의 경우 사용자가 요청한 것이 무엇인지 파악하고 그에 맞는 부품을 다 가져다가 그때 그때 제작에 들어갑니다. 이는 어떤 사용자가 어떤 요청을 할지 모르기 때문에 그때 그때 주문 제작에 들어가야하며 그만큼 시간이 더 오래 걸리는 작업이기도 합니다.

동적 웹페이지의 경우 웹 서버에서 자체적으로 처리하기 힘들기 때문에 원하는 작업을 해 줄 서버단 어플리케이션이 따로 필요하게 됩니다.

하지만, 포트폴리오 소개 웹 페이지라던가, 제품의 사진과 함께 간단한 홍보 문구가 들어간 랜딩 페이지의 경우 동적으로 처리할 데이터가 없을 수 있습니다.

이 경우 S3를 이용하여 쉽고 효율적으로 사이트를 호스팅할 수 있습니다.

Architecture


HTML, CSS, Javascript등의 정적 파일들을 통해 웹 호스팅을 하는 경우 매우 간단한 아키텍처를 채택할 수 있습니다.




HTML, CSS, Javascript, 이미지 및 기타 파일들이 Amazon S3에 저장됩니다.

사용자는 Amazon S3를 통해 노출된 퍼블릭 웹 사이트 URL을 사용하여 사이트에 액세스합니다.

따라서 사이트를 제공하기 위해 웹 서버를 실행하거나, 환경을 구축하거나, 새로운 EC2 인스턴스를 생성할 필요가 없습니다.


정적 웹사이트 호스팅 구현


다음과 같은 순서로 S3 버킷으로 정적 웹사이트 호스팅 할 수 있습니다.

  • 정적 웹사이트용 S3 버킷 생성
  • 정적 웹사이트 호스팅 속성 활성화
  • 버킷 정책 공개로 수정
  • 사용자 지정 도메인으로 정적 웹사이트 설정
  • S3에 정적 파일들(e.g. HTML, Javascript, CSS) 업로드



버킷 정책 공개로 수정

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[YOUR_BUCKET_NAME]/*"
}
]
}

버킷의 권한 탭 → Bucket Policy(버킷 정책)을 선택합니다.

위의 버킷 정책을 편집기에 입력하빈다.

[YOUT_BUCKET_NAME]부분은 자신이 만든 버킷이름을 입력합니다.


사용자 지정 도메인으로 정적 웹사이트 설정

S3로 정적 웹사이트 호스팅을 구현하게 되면 클라이언트의 접근 URL이 제한적입니다.

S3의 Region이 포함된 URL이 적용되기 때문입니다.

사용자는 자신이 지정한 도메인으로 클라이언트들이 웹사이트에 접근할 수 있도록 하고 싶어합니다.

사용자 지정 도메인으로 정적 웹사이트를 설정한다는 의미는 다음과 같습니다.

자신이 직접 정한 도메인 (eg. www.my-web.com)으로 웹사이트를 호스팅하는 것입니다.

이를 위해서는 다음과 같은 과정이 필요합니다.

  • 도메인 등록
  • S3에 정적 웹사이트 호스팅 설정
  • Amazon Route 53으로 도메인 설정


도메인 등록

도메인 등록의 경우 외부 업체를 활용할 수 있습니다.

  • 후이즈
  • 가비아
  • 닷네임 코리아

위의 서비스들을 활용하면 도메인을 쉽게 구매하고 등록할 수 있습니다.


S3에 정적 웹사이트 호스팅 설정



example.com와 www.example.com 모두 호스팅하기 위해 위와 같이 www.example.com 버킷에 리다이렉션 설정을 해줍니다.
이렇게 되면 www.example.com로 클라이언트가 접근해도 example.com로 접근한 것 같이 동작합니다.


Route 53 도메인 설정

S3로 정적 웹사이트 호스팅을 하게 되면 S3에서 정해주는 URL(End-Point)를 사용해야 합니다.

이것을 사용자 지정 도메인으로 변경하려면 임의의 도메인으로 클라이언트가 접속을 시도했을 때

S3의 웹사이트로 안내해주는 개체가 필요합니다.

Route 53에서 이것을 해결할 수 있습니다.

호스팅 존 생성



A형 DNS 레코드 생성



  1. 웹 브라우저에서 Route 53 콘솔을 엽니다.
  2. [Dashboard]에서 [Hosted zones]를 선택합니다.
  3. 호스팅 영역 테이블에서 도메인 이름을 선택합니다.
  4. Create Record Set를 선택합니다.
  5. 화면 오른쪽에 나타나는 [Create Record Set] 양식에서 [Alias]에 대해 [Yes]를 선택합니다.
  6. [Alias Target]에 Amazon S3 웹 사이트 엔드포인트(예: s3-website-us-west-2.amazonaws.com)를 입력합니다.
  7. Save Record Set를 선택합니다.



네임서버 변경

Route 53으로 만든 호스팅 존의 네임 서버가 도메인을 구한 업체에 등록이 되어야합니다.

그래야 특정 도메인으로 요청을 보냈을 때 Route 53의 네임 서버를 통해 S3 웹 호스팅으로 연결될 수 있기 때문입니다.

아래는 도메인 제공 업체 중 하나인 가비아의 예시입니다.




이제 마지막으로 정적 웹사이트 파일들을 S3 버킷에 업로드하면 됩니다.




반응형