서버 성능 개선하는 방법
IT 서비스를 추상적으로 그려보면 Computing과 Delivery로 이루어져 있다고 볼 수 있다. 즉, 앱 혹은 웹 서비스는 연산과 전달(요청, 응답)을 반복하는 작업이라는 뜻이다. 웹 서비스 성능을 개선하기 위해서는 이 두 가지 작업을 최대한 빠르고 효율적으로 처리해줘야 한다.
서버와 클라이언트 DB를 간략하게 추상화해서 그려보면 클라이언트 요청으로부터 응답까지 걸리는 시간을 응답시간이라 할 수 있다. 응답 시간을 다시 서버를 기준으로 나눠보면 대기 시간, 처리 시간으로 분류할 수 있다. 그리고 이러한 요청을 초당 몇 개 처리하는 지에 대한 단위를 TPS라고 한다.
서버 성능을 개선하기 위해서 가장 중요한 지표 2가지는 응답 시간과 처리량이다.
응답 시간은 클라이언트가 어떤 요청을 해서 그 요청에 대한 처리 결과를 받을 때 까지의 시간을 의미한다. 응답 시간은 서버에서 요청을 처리하는 시간 + 클라이언트와 서버 간의 데이터 전달 시간(대기 시간)으로 구성되어 있다.
처리량은 흔히 TPS(Transaction Per Second; 초당 처리할 수 있는 요청 개수)라는 수치로 많이 표현하는 데, 이 수가 높을 수록 많은 요청을 처리한다고 보면 된다.
응답 시간 = 대기 시간 + 처리 시간이므로, 성능을 올리기 위해서 처리 시간 혹은 대기 시간을 줄여줘야 한다.
- 처리 시간을 줄이기 위해서는 쿼리 튜닝, 캐시, 하드웨어 업그레이드 등의 방법이 있다.
- 대기 시간을 줄이기 위해서는 응답 크기 줄이기, 트래픽 분리하기, 대역폭 늘리기 등이 있다.
여기서 CDN은 트래픽을 분리해서 대기 시간을 줄여준다.
CDN
세계는 지금 넷플릭스, 왓챠를 비롯해 유튜브, 틱톡 등 끊임없이 쏟아지는 콘텐츠 홍수 속에 살고 있다. OTT 서비스는 전례 없는 호황기를 맞았고, AI, 사물인터넷, 자율 주행 등 대용량의 데이터를 주고받는 신기술이 하루가 멀다고 등장하고 있다.
이렇게 폭발적으로 증가한 데이터를 지연 없이 처리하기 위해서는 데이터를 분산해서 전달하는 기술이 필수적이다. 이에 지리적으로 먼 거리에 떨어져 있는 사용자에게 지연 없이 콘텐츠를 분산해 전달할 수 있는 CDN 서비스가 등장하였다.
CDN 이란?
CDN(Contents Delivery Network)은 웹 페이지, 이미지, 비디오 등의 정적 콘텐츠를 유저의 물리적 위치와 가까운 프록시 서버에 캐싱하여 전송 속도를 높여준다. 이들은 지리적으로 분산된 여러 개의 서버를 가지고 있다. 전 세계 데이터센터에 파일 복사본을 임시로 저장한다. 따라서 유저는 가까운 서버를 통해 콘텐츠가 로딩될 때까지 기다릴 필요 없이 영상 감상, 소프트웨어 다운로드, SNS 포스팅 등 다양한 작업을 원활하게 진행할 수 있다. 쉽게 ATM을 생각해도 된다. 여러 곳에 ATM을 설치하면 은행에서 긴 줄을 서서 기다릴 필요없이 가까운 곳에 있는 ATM을 사용하여 유저는 빠르고 효율적으로 현금을 찾을 수 있다. 또한 CDN은 보안을 강화해 DDos 공격과 같은 보안 문제와 악의적 공격자를 차단하는 기능도 제공해준다.
CDN 활용 사례
온라인 동영상 스트리밍 서비스를 제공하는 넷플릭스(Netflix)는 전 세계의 사용자들에게 안정적인 서비스를 제공하기 위해 2011년에 자체 CDN을 구축했다. 넷플릭스의 서비스 범위가 전 세계에 걸쳐 있고, 구독자의 절반 이상이 미국 외의 지역에 분포하고 있어 콘텐츠를 안정적이고 빠르게 세계 각지로 전달하기 위해서는 CDN 기술이 필수적이기 때문이다. 이와 더불어 세계 최대 숙박 공유 서비스인 에어비앤비(Airbnb) 또한 CDN 기술을 활용해 전 세계 고객에게 언제 어디서나 숙박 시설과 각종 액티비티를 예약할 수 있는 서비스 환경을 구축했다. 국내에서는 NC소프트나 카카오게임즈 같은 온라인 게임 기업이 CDN을 활용, 북미나 유럽과 같이 지리적으로 먼 지역의 사용자에게 안정적이고 빠른 게임 플레이 환경을 제공하고 있다.
AWS CloudFront vs CloudFlare
대표적은 CDN 클라우드 서비스로는 Cloudflare와 AWS에서 제공하는 CloudFront가 있다. 이 둘은 CDN 기능을 제공하지만 근본적으로 다른 방식으로 작동한다. Cloudflare 및 AWS CloudFront는 데이터 사본을 배포하기 위해 대규모 데이터 센터 네트워크를 제공하고 있다. Cloudflare는 150대가 위치해 있는 반면 AWS CloudFront는 140대가 위치해 있다. 아무래도 사용자 입장에서는 데이터를 전송받아야 하기 떄문에 지리적 위치가 중요하다보니 서버 대수도 경쟁력의 일부로 동작한다.
Cloudflare
Cloudflare는 역방향 프록시(Reverse Proxy) 아키텍처를 사용한다. 여기서 역방향 프록시는 클라이언트가 요청한 리소스를 대신 서버에서 받아와 클라이언트에게 전달하는 중간 서버 역할을 합니다. Cloudflare의 네트워크 아키텍처는 다음과 같다:
- Nameserver 설정: 웹사이트 소유자는 도메인 등록 기관에서 도메인의 nameserver를 Cloudflare로 변경한다. 즉, 클라이언트의 요청은 Cloudflare nameserver로 향하게 된다.
- 트래픽 라우팅: 클라이언트의 모든 요청은 먼저 Cloudflare 서버를 통과한다. Cloudflare는 이러한 요청을 최적의 서버로 라우팅하여 처리한다. 이 과정에서 Cloudflare는 캐싱된 콘텐츠를 제공하거나 원본 서버로 요청을 전달한다.
이러한 구조 덕분에 Cloudflare는 보안 기능으로 DDoS 방어, 방화벽 등을 제공해주고 캐싱 및 압축 기술을 사용하여 응답 시간을 단축시켜준다.
AWS CloudFront
AWS CloudFront는 전통적인 CDN 방식으로 작동한다. CloudFront는 주로 정적 및 동적 콘텐츠를 전송하기 위해 설계되었으며, nameserver 설정 대신 다른 방식으로 동작한다:
- Nameserver 설정 필요 없음: AWS CloudFront를 사용하기 위해 도메인의 nameserver를 변경할 필요가 없다. 기본 nameserver를 그대로 사용한다.
- Special URL 사용: 콘텐츠를 배포하기 위해 Special URL을 구성해야 한다. 예를 들어, "https://d1234.cloudfront.net/mycontent"와 같은 URL을 통해 콘텐츠에 접근한다.
- 배포 설정: 관리자는 AWS Management Console을 통해 배포를 설정하고, 콘텐츠를 캐싱할 경로와 TTL(Time to Live) 등을 지정한다.
AWS CloudFront에서는 nameserver 설정에 대한 설정이 따로 필요없다. 기본 nameserver를 사용하면 된다. 대신 배포하려는 데이터 복사본을 설정해줘야 한다. 데이터 배포에 Special URL이 있으며 관리자는 이 URL을 사용하여 CloudFront CDN으로 요청을 보낼 수 있다. 이 툴은 데이터 요청의 지리적 출처에 따라 CloudFront URL 요청에 응답해야 하는 네트워크 내의 서버를 결정한다.
이러한 구조의 장점은다른 AWS 서비스와 쉽게 연동되어 사용 가능하고 개발자가 특정 경로와 규칙을 설정하여 콘텐츠 배포를 세밀하게 제어할 수 있는 유연성을 제공한다. 또한 클라이언트의 지리적 위치에 따라 가장 가까운 엣지 로케이션을 통해 콘텐츠 제공하여 성능 최적화에도 도움이 될 수 있다.
정리
Nameserver는 도메인 이름을 IP 주소로 변환하는 역할을 한다. 인터넷에서 특정 서버에 접속하려면 그 서버의 IP 주소를 알아야 하지만, 도메인 이름은 사람들에게 더 이해하기 쉽다. Nameserver는 도메인 이름을 IP 주소로 변환하여 사용자가 원하는 서버에 접속할 수 있게 한다.
Nameserver는 클라이언트 요청이 처음 도착하는 곳이며, 클라이언트가 어떤 서버로 요청을 보낼지를 결정하는 역할을 한다. Cloudflare의 경우, nameserver를 변경하여 모든 트래픽이 Cloudflare를 경유하도록 만든다. 이는 Cloudflare가 전체 트래픽을 제어하고 최적화할 수 있게 하며, 보안 및 성능 개선 기능을 제공할 수 있다. 반면, AWS CloudFront는 기존 nameserver를 그대로 사용하고, 특정 콘텐츠 배포를 위해 특별한 URL을 통해 트래픽을 유도한다. 이로 인해 CloudFront는 특정 콘텐츠 배포에 더 유연하게 접근할 수 있지만, 설정이 상대적으로 복잡할 수 있다. 이러한 아키텍처 설계로 Cloudflare는 기본 CDN 기능뿐만 아니라 Magic Transit 기능을 통한 Anit-DDoS 보호와 같은 추가 기능을 제공하지만, Amazon CloudFront는 DDoS 보호 서비스로 설계되지 않았다. 대신 AWS Shield를 사용해야 한다.
무엇을 선택할까?
표로 정리해보면 다음과 같다. Cloudflare 프리 티어는 대역폭에 제한이 없다. 어떻게 무제한으로 제공할 수 있냐는 질문에 대한 Cloudflare CEO의 답변을 보면 여러 이유를 나열해놨지만 경쟁력을 높이고 홍보하기 위함이 커보인다.
Cloudflare | AWS CloudFront | |
네트워크 아키텍처 | 리버스 프록시 | 전통적인 CDN |
기본 설정 방법 | Nameserver | Special URLs |
서버 개수 | 대략 150대 (21년 기준) | 대략 140대 (21년 기준) |
주요 기능 | CDN과 Ddos 방어 | CDN |
마켓 포지셔닝 | Standalone 플랫폼 | AWS 클라우드 서비스 중 일부 |
freetier | 무제한 대역폭 비용 무료 | 매달 1TB 데이터 전송, 천만건 요청, 2백만건 함수 호출 무료 (참고) |
AWS CloudFront
일반적으로 CloudFront는 다음과 같은 경우에 사용하면 좋다.
- 이미 다른 AWS 서비스를 사용 중이다.
- CDN으로 일부 데이터만 처리하면 된다.
- 그리고 사용자가 "ugly" CloudFront URL을 볼 수 없도록 설정할 수 있다.
Cloudflare
Cloudflare는 다음과 같은 경우에 사용하면 좋다.
- 간단한 설정이 좋다.
- CDN으로 거의 모든 콘텐츠를 관리한다.
- CDN 이상의 추가 네트워킹 및 보안 기능이 필요하다.
Resources
AWS blog, AWS Cloudfront Docs
Cloudflare Docs, https://developers.cloudflare.com/cache/
Kim Yoohyun, CDN Overview, Dec 11 2019
Chris Tozzi, "Cloudflare vs. Amazon CloudFront: Which CDN is right for you?", 15 Mar 2021, TechTarget
'Dot Computer Science > Cloud' 카테고리의 다른 글
[Cloud] S3와 Cloudflare를 사용하여 웹 성능 개선하기 (CDN, 정적 콘텐츠 웹 호스팅) (0) | 2022.04.26 |
---|---|
[AWS] Lambda로 image resizing하기 (0) | 2021.02.14 |