이번에 S3 연결 작업을 담당하면서 뒤늦게 S3와 CloudFront에 대해 공부하게 되었다.
우선, S3 버킷 등록 및 CloudFront와의 연결은 CloudFront를 통해 S3 액세스하기를 참고하면 수월하게 할 수 있을 것이다.
그래서 이 글에는 S3와 Cloudfront가 그래서 무엇인지!에 대해 작성해보려 한다.
S3란?
간단하게 말하자면 스토리지를 제공해주는 서비스이다. 예를 들어 USB를 사용한다고 할 때, 우리는 USB를 이용해 여러가지 데이터를 용량 제한 하에서 저장하고 이용할 수 있다. 사진, 동영상 등등 다양한 데이터를 USB에 저장하고 보관할 수 있다.
S3는 마찬가지로, 웹 서비스 인터페이스를 통해 제공되는 스토리지 서비스이다. 웹 상에서 어디서나 원하는 양의 데이터를 저장하고 검색할 수 있다.
우리는 S3를 이용하기 위해서 다음과 같은 작업을 거칠 수 있다.
1. 버킷 만들기
앞선 예시와 동일한 USB 예시를 들어보자면, USB를 구매하는 것과 동일하다고 생각하면 될 것 같다. 우리는 스토리지 서비스를 이용하기 위해서는 버킷이라는 것을 만들어야한다. 버킷은 바구니로 데이터를 담는 컨테이너 역할을 수행한다.
2. 데이터 저장하기
1번에서 만든 버킷에 원하는 데이터를 무한정으로 저장할 수 있다. 물론 용량 제한에 도달하면 요금이 발생할 수도 있다.
3. 데이터 다운로드
저장한 데이터를 물론 다운로드 할 수 있다. 직접 다운로드 하거나, 혹은 다른 사람이 다운로드 하도록 허용할 수도 있다.
4. 권한
USB에 중요한 내용이 담겨있어 누구나 업로드 또는 다운로드 할 수 없게 하기 위해서는 USB를 잠궈놓거나, 인가된 사용자에게만 USB를 전달하는 작업이 필요하다. S3도 마찬가지로 업로드 또는 다운로드 하려는 사용자에게 액세스 권한을 부여할 수 있다.
5. 표준 인터페이스
개발 도구에서 사용할 수 있도록 REST 및 SOAP 기반 인터페이스를 제공한다. 이후 이를 이용해서 Spring boot에서 S3에 데이터를 업로드 하는 과정을 진행해 볼 것이다.
자세한 정보는 참고자료 1번 AWS document의 Amazon S3이란 무엇인가요?를 참고하면 좋다.
CloudFront란?
CloudFront란 .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 하는 웹 서비스이다. 이렇게 말하면 사실 잘 와닿지 않은데, 맞는 예시일 진 모르겠지만 내가 이해한 바로 예시를 하나 들어보자면 다음과 같다.
우리는 S3 bucket을 이용해서 이미지 파일을 AWS에 업로드할 것이다. 하지만, 클라이언트에서 이미지 파일을 이용할 때, S3 버킷에 직접 접근해서 이미지 파일을 가져오는 것이 아니라 특정 url을 통해서 가져오도록 설정하고 싶다. 그럴 때 cloudfront라는 엔드포인트를 활용하여 s3의 이미지를 접근하고 이미지 콘텐츠를 전송할 수 있다.
예를 들어, github 프로필 이미지도 직접 프로필 이미지에 접근하는 것이 아니라, https://avatars.githubusercontent.com/u/48412963?v=4 라는 githubusercontent라는 곳에 저장된 이미지 url을 통해 접근한다. 이처럼, cloudfront를 이용하면 s3 버킷에 저장된 콘텐츠에 접근할 수 있다.
설명을 덧붙이자면, CloudFront는 CDN 서비스이다. 캐싱을 통해 사용자에게 좀 더 빠른 전송 속도를 가지고 콘텐츠를 제공하는 것을 목적으로 한다. S3 Bucket이 있는 Origin Server로 부터, Edge Server로 콘텐츠를 빠르게 응답한다.
CDN이란?
Content Delivery Network의 약자인 CDN은 전 세계 사용자에게 빠르고 안전하게 콘텐츠를 전송할 수 있는 콘텐츠 전송 기술을 의미한다. CDN은 서버와 사용자 사이의 물리적인 거리를 줄여 콘텐츠 로딩에 소요되는 시간을 최소화합니다. CDN은 각 지역에 캐시 서버(PoP, Points of presence)를 분산 배치해, 근접한 사용자의 요청에 원본 서버가 아닌 캐시 서버가 콘텐츠를 전달한다.
어렵구만..
데이터 전송 과정은 다음과 같다.
1. 클라이언트로부터 Edge Server로의 요청이 발생한다.
2. Edge Server는 요청이 발생한 데이터에 대하여 캐싱 여부를 확인한다.
3. 사용자의 근거리에 캐싱된 데이터가 존재한다면 그를 응답하고, 아니라면 origin server로 요청을 포워딩한다.
4. 요청받은 데이터를 origin server에서 획득한 뒤 Edge Server에서 캐싱 데이터를 생성하고, 클라이언트로 해당 데이터를 응답한다.
참고 자료
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/Welcome.html
https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/Introduction.html