AWS 의 S3, CloudFront, Route53, ACM 을 이용해서 배포한 과정과 그 속에서 배운 개념에 대해 정리해보고자 한다.
배포 방법 보다는 개념
에 중점을 두어 정리했다.
AWS를 중심으로 설명했지만, 개념은 다른 클라우드 서비스에서도 유사하게 적용될 수 있기 때문에 개념을 확실히 이해하고자 하는 목표로 작성했다.
S3 는 AWS 에서 제공하는 스토리지 서비스이다.
Simple Storage Service 의 약자로 앞자리를 따서 S3 라고 이름을 지었다.
S3 는 스토리지로도 사용할 수 있을 뿐만 아니라 정적 웹 사이트 호스팅 기능을 지원해서 배포용 빌드 파일을 호스팅 할 수 있다.
React 나 Vue.js 와 같이 SPA 로 된 프로젝트의 경우 서버 없이 S3 스토리지에 올리면 간단하게 프론트 앱을 배포할 수 있다.
내 프로젝트 내에서 npm run build 명령어를 통해 빌드 작업을 수행하면 dist 라는 폴더가 생성되고, 이 파일을 S3 버킷에 올려서 정적 호스팅을 설정하면 S3 를 통해 배포된 사이트에 접속할 수 있다.
AWS CloudFront 란 AWS 에서 제공하는 CDN 서비스이다.
CDN 은 Content Delivery Networt 의 약자로 지리적 제약 없이 전 세계 사용자에게 빠르게 콘텐츠를 전송할 수 있도록 도와주는 기술을 의미한다.
CloudFront는 전 세계에 분산된 데이터 센터의 엣지 서버를 사용하여 콘텐츠를 캐싱하고, 사용자가 위치한 곳에서 지리적으로 가까운 엣지 로케이션에서 콘텐츠를 빠르게 제공받을 수 있도록 해준다.
CloudFront 는 AWS 에서 제공하는 CDN 서비스로 콘텐츠를 네트워크 상에 좀 더 효율적으로 배포할 수 있도록 도와주는 수단으로 사용된다.
SSL 인증서를 통한 HTTPS 호스팅을 지원하며, S3로 배포한 사이트는 SSL 인증서 적용이 불가능하기 때문에 효과적인 배포와 안전한 통신을 위해 CloudFront 와 S3 를 함께 사용한다.
S3와 CloudFront를 함께 사용하면 매번 S3에 접근해서 콘텐츠를 가져오지 않고 캐싱된 콘텐츠를 효율적으로 가져올 수 있다. 따라서 사용자도 더 빠르게 사이트에 접근이 가능해지고 매번 S3 에 요청하지 않아도 되기 때문에 효율적인 서비스 제공이 가능해진다. 또한 CloudFront에서 SSL 인증서를 통해 HTTPS 호스팅을 사용하면 사이트의 안정성을 높일 수 있다.
출처 : https://aws.amazon.com/ko/route53/what-is-dns/
Route53 이란 AWS 에서 제공하는 DNS 서비스이다.
DNS 는 Domain Name System 의 약자로 웹 사이트의 IP 주소와 도메인 주소를 이어주는 역할을 하는 시스템을 말한다.
사용자가 www.example.com 을 입력해서 사이트에 접속하면, DNS 는 도메인에 해당 되는 IP 주소를 찾기 시작한다.
도메인에 해당 되는 IP 주소를 찾으면 브라우저에게 전달한다.
그러면 브라우저는 IP 주소로 접속해서 원하는 사이트에 접속하게 된다.
ACM 은 Amazon Certificate Manager 의 약자로 SSL/TLS 인증서를 생성하고 관리하는 서비스로서, 이를 사용하여 다양한 AWS 서비스와의 연동에서 보안 통신을 활성화할 수 있다.
SSL/TLS 인증서란 네트워크 통신을 보호하고 웹 사이트의 자격 증명을 위해 사용되는데, 쉽게 말해서 내 도메인에 HTTPS를 적용할때 필요한 인증서라고 생각 하면 된다.
SSL 이란 ? SSL (Secure Sockets Layer)은 웹 브라우저와 웹 서버간의 보안 통신을 위해 설계되었다. 클라이언트와 서버 간에 데이터를 암호화하여 안전한 통신을 가능하게 한다. 대표적인 프로토콜로 HTTPS 가 있다.
TLS 이란 ? TLS (Transport Layer Security)는 SSL 의 후속 버전으로 더 강력한 보안 기능을 제공하며 취약점에 대응할 수 있도록 설계되었다. TLS 는 데이터의 기밀성, 무결성, 인증을 보장하여 안전한 통신을 제공한다.
간단히 말해, SSL 과 TLS 는 데이터를 암호화하고 안전하게 전송하기 위한 프로토콜로 웹사이트에서 사용자와 서버간의 통신이 안전하게 이루어질 수 있도록 도와준다.
HTTP 는 Hypertext Transfer Protocol
HTTPS 는 Hypertext Transfer Protocol Secure
둘다 웹에서 정보를 주고받는데 사용되는 프로토콜인데, 두 프로토콜 간에는 중요한 차이점이 있다. 바로 단어에서도 알 수 있듯이 보안(Secure) 의 차이가 있다.
HTTP 는 데이터가 암호화 되지 않고 평문으로 전송 된다. 따라서 데이터를 가로채기 쉽고 도청될 수 있습니다.
HTTPS 는 SSL/TLS 프로토콜을 사용해서 암호화하여 전송 된다. 따라서 데이터를 안전하게 전송하고 중간에서 정보를 가로채도 암호화 되었기 때문에 보호할 수 있다.
따라서 대부분의 웹사이트에서는 HTTPS 를 사용해서 사용자의 데이터를 보호하고 신뢰감을 주는 사이트임을 알릴 수 있다.
AWS 의 S3, CloudFront, Route53, ACM 을 활용한 배포 과정을 도식화해봤습니다.
사용자 사이트 접속
Route53의 DNS 서비스:
CloudFront의 CDN 역할:
브라우저는 해당 IP 주소로 서버에 연결하며, 이때 CloudFront가 CDN 역할을 수행합니다. 사용자의 위치와 가장 가까운 엣지 로케이션에 캐싱된 데이터가 있다면 해당 데이터를 제공하여 빠르고 안정적인 콘텐츠 전송을 도와줍니다.
엣지 로케이션에 캐싱된 데이터가 없다면, CloudFront는 S3로부터 해당 정적 자원을 가져와 엣지 로케이션에 캐싱한 후 클라이언트에 응답합니다.
S3 의 정적 파일 저장소 :
ACM을 사용한 SSL 인증서 적용: