Route53 호스팅존 만들기
지난 포스팅에서는 새로 구매한 도메인을 Route53에서 호스팅하는 부분을 다루었다. 오늘은 CloudFront를 연동하는 부분을 진행해보도록 하자.
SSL 인증서 만들기
CloudFront를 연결하기 전에, HTTPS를 지원하기 위한 인증서를 만들어야 한다. 보통은 다른 업체에 돈을 주고 인증서를 마련해야 하지만, AWS의 경우 ACM(AWS Certificate Manager)를 사용하여 무료로 인증서를 만들 수 있고, 갱신도 자동으로 해준다.
우선 ACM으로 이동한 후 리전을 바꿔줘야 한다. 왜냐하면 CloudFront는 Global Service이긴 하지만, 인증서를 가져올때는 us-east-1 리전에서 가져오기 때문에 us-east-1리전에서 만들어야 하기 때문이다. 따라서 우측 상단의 리전 선택 메뉴에서 us-east-1을 선택 하자
인증서 요청 버튼을 누르면 공인 인증서와 사설 인증서 중에 선택할 수 있는데, 우리는 외부 유저가 접속에 필요한 인증서를 만드려고 하기 때문에 공인 인증서를 선택한다.
- *.회사명.ai : “www.회사명.ai” 혹은 “image.회사명.ai” 처럼 앞에 무엇이 붙는 경우를 위한 것이다.
- 회사명.ai : APEX도메인, 도메인명 자체를 위한 것이다.
두 개의 레코드를 넣고 인증서 생성을 요청한다.
실제 인증서를 만드려면 생성하려는 인증서에 해당하는 도메인을 실제로 보유하고 있는지를 검증해야 하는데, 검증 방법은 이메일 혹은 CNAME Record를 생성하여 검증할 수 있다. 다만 Route53에서 호스팅할경우 버튼 클릭 한번으로 레코드를 생성해주기 때문에 편리하게 생성할 수 있다.
검증은 약 5분정도 걸렸다.
발급완료 라는 초록 글씨가 뜨면 생성이 완료되었다는 뜻이다. 이제 CloudFront와 연동해보자.
CloudFront 와 ALB 연동하기
CloudFront는 AWS에서 제공하는 CDN(Contents Delivery Network) 서비스이다. CDN의 역할은 자주 사용하는 컨텐츠를 캐싱하여 유저에게 제공하여 Latency를 낮추고 안정적인 서비스를 제공하는 것이 주 역할이다. CloudFront의 경우 다양한 Origin(실제 컨텐츠가 존재하는 곳)에서 가져온 데이터를 전세계 여러 곳(Edge Location이라 한다)에 캐싱하고 있다가 요청이 접수되면 요청과 가장 가까운 곳에서 캐싱된 데이터를 유저에게 전달한다. 이 과정에서 유저가 데이터를 받는 속도역시 빨라지며 서버의 부담 역시 줄어드는 효과를 기대할 수 있다.
우선 CloudFront Distribution을 만들어보자. CloudFront는 두 가지 방식을 선택 할 수 있는데, Web과 RTMP 방식이다. RTMP방식은 어도비 RTMP 프로토콜로 동영상을 스트리밍 할 때만 사용하고 나머지는 전부 웹 방식을 사용하면 된다.(참고로 AWS에서는 2020년 12월 31일 부로 RTMP에 대한 지원을 종료할 예정이다.)
Web Distribution을 생성하 여러 정보를 입력할 수 있는데, 주요 설정값을 차근차근 하나식 살펴보자(언급하지 않으면 무시해도 무방하다)
Origin Domain Name: 위에서 언급한 실제 원본 컨텐츠를 가져올 도메인 주소이다. 우리는 ALB뒤에 있는 웹사이트를 가져올 예정이기 때문에, ALB의 주소를 입력해준다.
Origin Path: 웹사이트를 가져올 경로이다. 이번에는 따로 설정하지 않아되 된다.
Viewer Protocol Policy: 유저가 CloudFront로 접속시 사용할 프로토콜이다. 우리는 HTTPS를 제공할 예정이기 때문에 redirect HTTP to HTTPS, 즉 HTTP를 HTTP로 리다이렉션 해주는 편리한 모드로 설정한다.
Cache and origin request settings : 캐싱을 어떻게 관리할 것인지에 대한 내용인데, 웹사이트에서 준 헤더값에 따라 다르게 캐싱 관리를 하는 모드와 직접 TTL을 설정하는 Legacy 모드가 있다. 나는 웹사이트를 건들 생각이 없기 때문에 Legacy 모드를 사용한다.
TTL들: Mininum, Maximum, Default가 있는데, 각각 최소, 최대, 기본 TTL이다.
스무살의TTL은 Time To Live, 즉 얼마나 오래 캐싱이 살아있냐는 뜻이고 초단위다. 기본값으로 되어있는 86400은 86400초, 즉 하루동안 살아있다는 뜻이며 이 동안에는 원본 웹사이트를 수정해도 유저들은 이전에 캐싱된 내용을 받게 된다. 우선 테스트를 위해 60초로 설정해두고, 추후 안정되면 더 큰 값으로 바꾸자.
쭈욱 내려서..
Alternative Domain Names : 매우 중요한 부분이다. CloudFront는 생성시 같이 따라오는 Default Domain이외에도 다양한 도메인을 연결할 수 있는데, 연결할 도메인 목록을 넣어주어야 한다. 우리는 “회사명.ai” 도메인에서 접속할 예정이기 떄문에 “회사명.ai”를 여기에 넣어준다.
SSL Certificate : HTTP(SSL/TLS)에 사용할 인증서이다. 위에서 만든 인증서를 사용하기 위헤 custom ssl certificate를 선택하면, 리스트에서 맨 처음에 만든 인증서를 선택할 수 있다.
나머지 옵션은 그대로 둔다. 나중에 기회가 되면 CloudFront 전용 포스트를 통해 모든 옵션을 설명하도록 하겠다.
그리고 Create Distribution 버튼을 누른다.
생성은 좀 시간이 걸리는 편인데, 모든 전 세계에 흩어져있는 모든 Edge Location으로 정보가 전달되어야 되기 때문이다. 최대 45분 정도 걸린다고 한다.
다음 포스트에서는 Route53에서 호스팅된 도메인을 CloudFront로 연결해보도록 하겠다.
![](/img/common/spark.jpg)