들어가기 전에
이번 프로젝트에서 AWS S3를 이용해 이미지를 업로드하고, 그 URL을 DB에 저장하여 이미지를 사용해보았다. 이때 URL을 그대로 사용하면 내 버킷의 이름이 노출되므로, Cloud Front를 이용해 보안을 높여보았다.
CloudFront란 AWS에서 제공하는 CDN(Content Delivery Network) 서비스이다.
그럼 먼저 CDN이 무엇인지 알아보자.
CDN 이란?
CDN은 지리, 물리적으로 떨어져 있는 사용자에게 캐싱을 통해 좀 더 빠른 속도로 사용자에게 컨텐츠를 제공하는 시스템이다. 사용자가 원격지에 있는 서버(Origin Server)로 부터 Content를 다운 받을 때 가까이 있는 서버에서 받는 것보다 시간이 오래 걸리기에, 사용자와 가까운 곳에 위치한 Cache Server에 해당 Content를 캐싱하고 그 Content 요청 시에 Cache Server가 응답을 한다.
CDN의 장점
- 웹사이트 로딩 속도 개선
- 인터넷 회선 비용 절감
- 컨텐츠 제공의 안정성
- 웹사이트 보안 개선
CDN의 작동원리
- 최초 요청은 서버로부터 컨텐츠를 가져와 클라이언트에게 전송하며, 동시에 CDN 캐싱 장비에 저장한다.
- 그 이후 모든 요청은 CDN 업체에서 지정하는 컨텐츠 만료 시점까지 CDN 캐싱 장비에 저장된 컨텐츠를 전송한다.
- 자주 사용하는 페이지에 한해 CDN 장비에서 캐싱이 되며, 해당 컨텐츠 호출이 없으면 주기적으로 삭제된다.
- 서버가 파일을 찾는 데 실패하면 CDN 플랫폼의 다른 서버에서 콘텐츠를 찾아 응답을 전송한다.
- 컨텐츠를 사용할 수 없거나 오래된 경우, CDN은 서버에 대한 요청을 프록시로 작동하여 향후 요청에 응답할 수 있도록 새로운 컨텐츠를 저장한다.
- 프록시 : 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 시스템
Clound Front란?
다시 돌아와, Cloud Front가 무엇인지 다시 자세히 알아보자.
CloudFront란 AWS에서 제공하는 CDN(Content Delivery Network) 서비스이며, 캐싱을 통해 사용자에게 더 빠른 전송 속도로 제공하는 것을 목적으로 한다.
CloudFront는 전세계에 Edge Server(Location)을 두고 클라이언트에게 가장 가까운 Edge Server을 찾아 Latency를 최소화 시켜 빠른 데이터를 제공한다.
- Origin Server : 원본 데이터 가지고 있는 서버. AWS에서는 S3, EC2 instance 를 나타낸다.
- Edge Server = Edge Location : AWS에서 실직적으로 제공하는 전 세계에 퍼져있는 서버. 요청 받은 데이터에 대해 같은 요청에 더 빠르게 응답하기 위해 Cache 기능을 제공한다.
Cloud Front 작동방식
- 클라이언트로부터 Edge Server 로의 요청이 발생한다.
- Edge Server는 요청이 발생한 데이터에 대해 캐싱 여부를 확인한다.
- 캐싱 데이터가 존재하면 사용자의 요청에 맞는 데이터를 응답한다.
- 캐싱 되어있지 않은 경우 Origin Server로 요청이 포워딩 된다.
- 요청받은 데이터에 대해 Origin Server에서 획득 후 Edge Server에 캐시 데이터 생성하고 클라이언트로 응답이 발생한다.
Clound Front에서 CDN으로 제공하는 콘텐츠
- Download Distribution : HTTP 프로토콜을 이용해 다운로드 할 수 있는 일반적인 이미지 혹은 정적파일
- Steaming Distribution : 스트링밍을 위해 사용할 수 있는 HTTP Progressive Download 방식이라 RTSP(Real TIme Streaming Protocol)을 지원하는 동영상 컨텐츠
S3와 Cloud Front 연동하기
Cloud Front 홈페이지를 들어가면 다음과 같은 화면이 보인다.
여기서 CloudFront 배포 생성을 누른다.
Origin domain과 이름에 내가 생성했던 S3 버킷을 선택한다.
원본 액세스 제어 설정을 선택한다.
설명은 적지 않아도 된다. 마지막으로 create를 누른다.
보안 보호를 비활성화 하고 해당 버킷에서 권한 - 객체 소유권으로 들어가 ACL을 활성화 해준다.
그 후 CloudFront - 배포 - 해당 배포에서 S3 버킷 정책에 CloudFront에 대한 액세스를 허용하는 정책을 복사한다.
그리고 이를 버킷 권한에서 버킷 정책에 붙여넣기한다.
퍼블릭 엑세스 차단에서는 새 ACL을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단만 비활성화 해준다.
'Infra' 카테고리의 다른 글
<11번가 Spring Cloud 기반 MSA로의 전환> 요약 정리 (1) | 2024.09.01 |
---|---|
[Architecture] 유잔씨의 MSA 이모저모 알아보기 (0) | 2024.08.25 |
간단하게 알아보는 openVidu v3 (4) | 2024.07.28 |
몽수의 Redis 알아보기 (0) | 2024.07.20 |
정만씨의 포워드 프록시와 리버스 프록시 (1) | 2024.07.14 |