웹 아키텍쳐

웹 아키텍처13 - CDN(Content Delivery Network) (23.11.13)

dodo4723 2024. 2. 17. 09:57
728x90
반응형

제 프로젝트는 사용자가 특정 차트를 고르면, 코스피 코스닥 전 종목의 과거(10년) 차트들을 모두 탐색하여 가장 유사한 차트 10개 정도를 골라 사용자에게 보여주는 것이 목표입니다.

 

비슷한 차트 검색기

 

similar chart finder

내 종목의 차트는 상승하는 차트일까요?

3.35.36.208

 

 

CDN의 이해

 

CDN은 웹이나 네트워크 공부를 하면서 종종 들어본 것 같습니다. 개념 자체는 캐싱이라 이해하기 쉬웠습니다.(캐싱은 안 쓰이는 곳이 없네요.) 하지만 막상 프로젝트에 도입해 보려고 봤더니, 생각보다 단점들이 많이 보이는 것 같습니다. 오늘은 CDN에 대해 더 자세하게 알아보려고 합니다.


 

1. CDN이란?

CDN은 Content Delivery Network의 약자로, 사용자에게 웹 콘텐츠를 효율적으로 전달하기 위해 전 세계 여러 곳에 데이터 센터를 두고 콘텐츠를 분산 저장해 두는 네트워크를 말합니다. 이를 통해 사용자가 서비스를 이용할 때, 가장 가까운 곳에서 콘텐츠를 받아볼 수 있게 되므로, 네트워크 지연 시간이 줄어들고 웹사이트의 로딩 속도가 빨라집니다.


 

2. CDN의 작동 원리 - 캐싱

CDN은 원본 서버에서 콘텐츠를 가져와 전 세계의 여러 노드(Edge Server)에 분산시킵니다. 사용자가 콘텐츠를 요청하면, CDN은 사용자에게 가장 가까운 노드에서 콘텐츠를 제공합니다. 이를 통해 데이터가 긴 거리를 이동하는 것을 최소화하고, 결과적으로 웹사이트의 성능을 향상합니다.


 

3. CDN의 장점

3.1. 빠른 콘텐츠 로딩

CDN의 가장 큰 장점은 웹사이트의 콘텐츠 로딩 속도를 빠르게 만든다는 것입니다. 사용자에게 가까운 위치에서 콘텐츠를 제공하므로, 콘텐츠 전송 시간이 크게 단축됩니다.

3.2. 트래픽 분산

CDN은 원본 서버의 트래픽을 여러 노드로 분산시키므로, 원본 서버에 가해지는 부하를 줄여줍니다. 이는 원본 서버의 안정성을 높이는 데 도움이 됩니다.

3.3. 고가용성

CDN은 전 세계 여러 노드에 콘텐츠를 분산 저장하므로, 특정 노드에 문제가 생겨도 다른 노드에서 콘텐츠를 제공할 수 있습니다. 이는 웹사이트의 가용성을 높이는 데 큰 도움이 됩니다.


 

1. CDN의 단점

단점이 생각보다 많은 것 같습니다.

 

1.1. 캐싱된 콘텐츠의 무효화

CDN의 주요 기능 중 하나는 콘텐츠를 캐싱하여 빠르게 제공하는 것입니다. 하지만 이는 콘텐츠가 변경될 때 문제가 될 수 있습니다. 즉, 콘텐츠가 변경되면 CDN의 캐시도 함께 업데이트해야 하며, 이 과정에서 지연이 발생할 수 있습니다. 그 결과, 사용자는 최신 콘텐츠를 바로 볼 수 없을 수 있습니다.

1.2. 특정 라이브러리의 제한

CDN은 웹사이트에서 사용하는 외부 라이브러리를 캐싱하고 제공하는데, 이는 일부 라이브러리에 대해서는 제한적일 수 있습니다. 다시 말해, CDN이 제공하지 않는 라이브러리를 사용하는 경우, 해당 라이브러리를 사용자에게 제공하기 위해 추가적인 방법을 찾아야 할 수 있습니다.

1.3. 비용

CDN 서비스는 대부분 유료로 제공되며, 트래픽이 많은 웹사이트의 경우 비용이 상당히 높을 수 있습니다. 따라서 CDN을 사용하기로 결정하기 전에, 비용 대비 효과를 충분히 고려해야 합니다.

1.4. 보안 이슈

CDN을 사용하면 콘텐츠가 여러 서버에 분산되어 저장되는데, 이는 보안 문제를 야기할 수 있습니다. 예를 들어, 악의적인 공격자가 CDN의 캐시 오염을 시도하여 사용자에게 잘못된 콘텐츠를 제공하려 할 수 있습니다.

1.5. 제어의 한계

CDN 서비스 제공업체가 서버를 관리하므로, 사용자는 서버에 대한 제어 권한이 제한적일 수 있습니다. 이는 서버 설정 변경, 로그 접근 등에 제약을 줄 수 있습니다.


 

1. CDN 사용이 효과적인 경우

1.1. 정적 콘텐츠 제공

CDN의 가장 효과적인 사용 사례는 정적 콘텐츠를 제공하는 경우입니다. 이미지, CSS 파일, JavaScript 파일, 동영상 등과 같은 정적 콘텐츠는 한 번 생성되면 내용이 변경되지 않으므로, 이러한 콘텐츠를 CDN에 저장하고 전 세계의 사용자에게 빠르게 제공할 수 있습니다.

1.2. 전 세계에 사용자가 분산된 경우

사용자가 전 세계에 분산되어 있는 경우, CDN은 사용자에게 콘텐츠를 빠르게 제공하기 위한 효과적인 방법입니다. CDN은 사용자에게 가장 가까운 노드에서 콘텐츠를 제공하므로, 사용자의 위치에 상관없이 일관된 성능을 제공할 수 있습니다.


 

2. CDN 사용이 비효율적인 경우

2.1. 데이터베이스 중심의 동적 콘텐츠 제공

CDN은 콘텐츠의 최신 버전을 캐싱하고 제공하는 것이 목표이므로, 데이터베이스에서 실시간으로 데이터를 가져와야 하는 동적 콘텐츠에 대해서는 CDN의 효과가 떨어집니다. 즉, 사용자의 요청마다 데이터베이스에서 콘텐츠를 생성해야 하는 경우, CDN을 통한 성능 향상은 제한적일 수 있습니다.

2.2. 실시간 업데이트가 필요한 콘텐츠 제공

뉴스 사이트나 주식 정보 사이트와 같이 실시간으로 업데이트가 이루어져야 하는 콘텐츠에 대해서는 CDN의 사용이 비효율적일 수 있습니다. CDN은 콘텐츠를 캐싱하여 제공하기 때문에, 콘텐츠의 실시간 업데이트를 반영하는 데 시간이 소요될 수 있습니다.


 

내 프로젝트(EC2)에 CDN 적용하기

저는 AWS의 EC2 인스턴스로 프로젝트를 돌리고 있습니다. 어떻게 CDN을 적용하는지도 궁금해서 알아봤습니다.

 

 

1. AWS CloudFront 설정

AWS에서 제공하는 CDN 서비스는 CloudFront입니다. CloudFront는 전 세계에 위치한 에지 로케이션을 통해 사용자에게 빠르게 콘텐츠를 제공합니다. CloudFront를 설정하는 단계는 다음과 같습니다.

 

 

1-1. CloudFront 배포 생성 : AWS Management Console에 로그인한 후, 'Services' 메뉴에서 'CloudFront'를 선택합니다. CloudFront 대시보드에서 'Create Distribution' 버튼을 클릭합니다.

 

1-2. 배포 설정 : 'Web' 배포를 선택한 후, 'Origin Settings'에서 EC2 인스턴스를 지정합니다. 'Origin Domain Name'에 EC2 인스턴스의 퍼블릭 IP 주소 또는 도메인 이름을 입력합니다.

 

1-3. 캐시 행동 설정 : 'Default Cache Behavior Settings'에서 캐시 행동을 설정합니다. 대부분의 경우 기본 설정을 그대로 사용해도 괜찮습니다.

 

1-4. 배포 옵션 설정 : 'Distribution Settings'에서 배포 옵션을 설정합니다. 특히, 'SSL Certificate' 설정에서는 HTTPS 사용을 위해 ACM(AWS Certificate Manager)에서 발급받은 SSL 인증서를 선택해야 합니다.

 

1-5. 배포 생성 : 모든 설정을 완료한 후 'Create Distribution' 버튼을 클릭하여 배포를 생성합니다. 배포가 생성되면, CloudFront는 배포에 대한 URL을 제공합니다.


 

2. DNS 설정

CloudFront 배포가 완료되면, 사용자가 웹사이트에 접근할 때 CloudFront를 통하도록 DNS 설정을 변경해야 합니다. 이는 Route 53과 같은 DNS 서비스를 통해 이루어집니다.

 

2-1. 레코드 세트 생성 : Route 53 대시보드에서 도메인을 선택한 후, 'Create Record Set'를 클릭합니다.

 

2-2. 레코드 세트 설정 : 'Name' 필드에는 빈칸을 남겨두거나 'www'를 입력합니다. 'Type'은 'A - IPv4 address'를 선택하고, 'Alias'는 'Yes'를 선택합니다. 'Alias Target'에는 CloudFront 배포의 URL을 입력합니다.

 

2-3. 레코드 세트 생성 : 모든 설정을 완료한 후 'Create' 버튼을 클릭하여 레코드 세트를 생성합니다.

반응형