본 문서는 총 2부로 구성되어 있으며 이 글은 1부입니다.
요약
가용성이 높고 확장성이 뛰어난 웹 호스팅은 복잡하고 비용이 많이 드는 제안일 수 있습니다. 기존의 확장 가능한 웹 아키텍처는 높은 수준의 안정성을 보장하기 위해 복잡한 솔루션을 구현해야 할 뿐만 아니라 높은 수준의 고객 서비스를 제공하기 위해 트래픽을 정확하게 예측해야 했습니다. 고밀도 트래픽 기간과 트래픽 패턴의 급격한 변화는 값비싼 하드웨어의 활용률을 낮춥니다.
따라서 유휴 하드웨어를 유지하기 위한 높은 운영 비용이 발생하며, 사용량이 적은 하드웨어에 대한 자본 사용은 비효율적입니다.
AWS(Amazon Web Services)는 가장 까다로운 웹 애플리케이션을 위해 안정적이고 확장 가능하며 안전하며 성능이 뛰어난 인프라를 제공합니다. 이 인프라는 IT 비용을 고객 트래픽 패턴과 실시간으로 일치시킵니다.
이 백서는 클라우드를 찾는 IT 관리자 및 시스템 설계자가 온디맨드 컴퓨팅 요구 사항을 충족할 수 있는 확장성을 확보할 수 있도록 도와줍니다.
전통적인 웹 호스팅 개요
확장 가능한 웹 호스팅은 잘 알려진 문제의 공간입니다. 그림 1은 일반적인 3 계층 웹 애플리케이션 모델을 구현하는 기존 웹 호스팅 아키텍처를 보여줍니다. 이 모델에서 아키텍처는 프리젠테이션, 애플리케이션 및 지속성 계층으로 구분됩니다. 이러한 계층에 호스트를 추가하여 확장 성을 제공합니다. 또한이 아키텍처에는 성능, 장애 조치 및 가용성 기능이 내장되어 있습니다. 기존 웹 호스팅 아키텍처는 몇 가지 수정만으로 AWS 클라우드로 쉽게 포팅됩니다.
다음 섹션에서는 AWS Cloud에서 이러한 아키텍처를 구축해야하는 이유와 방법을 살펴 봅니다.
AWS를 사용하여 클라우드에서 웹 애플리케이션 호스팅
가장 먼저 물어야 할 질문은 클래식 웹 애플리케이션 호스팅 솔루션을 AWS 클라우드로 이전하는 것의 가치에 관한 것입니다. 클라우드가 자신에게 적합하다고 판단되면 적절한 아키텍처가 필요합니다. 이 섹션은 AWS 클라우드 솔루션을 평가하는 데 도움이 됩니다. 클라우드에 웹 애플리케이션 배포를 온 프레미스 배포와 비교하고 애플리케이션 호스팅을위한 AWS 클라우드 아키텍처를 제시하며이 솔루션의 주요 구성 요소에 대해 설명합니다.
AWS가 일반적인 웹 애플리케이션 호스팅 문제를 해결하는 방법
웹 응용 프로그램을 실행할 책임이 있는 경우 AWS가 원활하고 비용 효율적인 솔루션을 제공할 수 있는 다양한 인프라 및 아키텍처 문제에 직면하게 됩니다. 다음은 기존 호스팅 모델보다 AWS를 사용하는 경우의 이점 중 일부에 불과합니다.
피크를 취급하는 데 필요한 초과 크기의 플릿에 대한 비용 효율적인 대안
기존 호스팅 모델에서는 최대 용량을 처리하기 위해 서버를 프로비저닝해야 합니다. 사용되지 않는 사이클은 피크 시간 이외의 시간에 낭비됩니다. AWS에서 호스팅하는 웹 애플리케이션은 추가 서버의 온디맨드 프로비저닝을 활용할 수 있으므로 용량과 비용을 실제 트래픽 패턴에 따라 지속적으로 조정할 수 있습니다.
예를 들어 다음 그래프는 사용량이 오전 9시부터 오후 3시까지이고 나머지 시간 동안 사용량이 적은 웹 응용 프로그램을 보여 줍니다. 필요한 경우에만 리소스를 프로비저닝하는 실제 트래픽 추세에 기반한 자동 확장 접근 방식은 용량 낭비를 줄이고 비용을 50% 이상 절감할 수 있습니다.
예기치 않은 트래픽 피크 처리를 위한 확장 가능한 솔루션
기존 호스팅 모델과 관련된 느린 프로비저닝으로 인해 예기치 않은 트래픽 급증에 제때 대응할 수 없게 되는 더욱 끔찍한 결과가 발생합니다. 인기 매체에서 사이트가 언급된 후 예기치 않은 트래픽 급증으로 인해 웹 애플리케이션이 다운되는 사례가 많습니다. 웹 애플리케이션이 일반 트래픽 급증과 일치하도록 확장하는 데 도움이 되는 동일한 온디맨드 기능도 예기치 않은 부하를 처리할 수 있습니다. 새 호스트는 몇 분 만에 시작하고 준비할 수 있으며 트래픽이 정상으로 돌아오면 바로 오프라인 상태로 전환될 수 있습니다.
테스트,로드, 베타 및 사전 프로덕션 환경을 위한 온 디맨드 솔루션
프로덕션 웹 애플리케이션을 위한 기존 호스팅 환경을 구축하는 데 드는 하드웨어 비용은 프로덕션 제품군에서 그치지 않습니다. 개발 수명 주기의 각 단계에서 웹 애플리케이션의 품질을 보장하기 위해 사전 프로덕션, 베타 및 테스트 비행대를 만들어야 하는 경우가 많습니다. 이 테스트 하드웨어를 최대한 활용하기 위해 다양한 최적화를 수행할 수 있지만, 이러한 병렬 비행대는 항상 최적으로 사용되지 않습니다. 많은 값비싼 하드웨어가 장기간 사용되지 않고 있습니다.
AWS Cloud에서는 테스트 비행대를 필요에 따라 프로비저닝할 수 있습니다. 또한 로드 테스트 중에 AWS Cloud에서 사용자 트래픽을 시뮬레이션할 수 있습니다. 이러한 병렬 함대를 새로운 프로덕션 릴리즈의 준비 환경으로 사용할 수도 있습니다. 따라서 서비스 중단이 거의 없거나 전혀 없는 현재 프로덕션 버전에서 새로운 애플리케이션 버전으로 신속하게 전환할 수 있습니다.
웹 호스팅을 위한 AWS 클라우드 아키텍처
다음 그림은 기존의 웹 애플리케이션 아키텍처와 AWS 클라우드 컴퓨팅 인프라를 어떻게 활용할 수 있는지를 보여 줍니다.
1. ELB (Elastic Load Balancing) / ALB (Application Load Balancer)를 사용한로드 밸런싱 — 이중화 및 서비스 디커플링을 위해 여러 가용성 영역 및 Amazon EC2 자동 확장 그룹에 로드를 분산할 수 있습니다.
2. 보안 그룹이있는 방화벽 — 보안을 인스턴스로 이동하여 웹 서버와 애플리케이션 서버 모두에 대해 상태 저장 호스트 수준의 방화벽을 제공합니다.
3. 3. Amazon ElastiCache를 사용한 캐싱 — Redis 또는 Memcached를 사용하여 애플리케이션 및 데이터베이스의 로드를 제거하고 빈번한 요청에 대한 대기 시간을 단축합니다.
4. Amazon RDS를 통한 관리형 데이터베이스 — 6개의 가능한 DB 엔진을 사용하여 고가용성 다중 AZ 데이터베이스 아키텍처를 생성합니다.
5. Amazon Route 53을 사용한 DNS 서비스 — 도메인 관리를 단순화하는 DNS 서비스를 제공합니다.
6. Amazon CloudFront를 사용한 에지 캐싱 — Edge는 대용량 콘텐츠를 캐싱하여 고객에 대한 지연 시간을 줄입니다.
7. AWS WAF를 사용한 Amazon CloudFront의 엣지 보안 — 고객 정의 규칙을 통해 XSS 및 SQL 주입과 같은 악성 트래픽을 필터링합니다.
8. AWS Shield를 사용한 DDoS 보호 — 가장 일반적인 네트워크 및 전송 계층 DDoS 공격으로부터 인프라를 자동으로 보호합니다.
9. Amazon S3를 사용한 정적 스토리지 및 백업 — 백업 및 이미지 및 비디오와 같은 정적 자산을 위한 간단한 HTTP 기반 개체 저장소를 사용할 수 있습니다.
AWS 웹 호스팅 아키텍처의 주요 구성 요소
다음 섹션에서는 AWS Cloud에 구현된 웹 호스팅 아키텍처의 주요 구성 요소를 개략적으로 설명하고, 기존 웹 호스팅 아키텍처와 어떻게 다른지 설명합니다.
네트워크 관리
AWS와 같은 클라우드 환경에서는 네트워크를 다른 고객의 네트워크와 분리할 수 있는 기능을 통해 보다 안전하고 확장 가능한 아키텍처를 구축할 수 있습니다. 보안 그룹은 호스트 수준의 보안을 제공하지만(호스트 보안 섹션 참조), Amazon Virtual Private Cloud(Amazon VPC)는 사용자가 정의하는 논리적으로 분리된 가상 네트워크에서 리소스를 시작할 수 있도록 지원합니다.
Amazon VPC는 AWS에서 네트워킹 설정의 세부 정보를 완벽하게 제어할 수 있는 무료 서비스입니다. 이 컨트롤의 예로는 웹 서버용 공용 서브넷과 데이터베이스에 대한 인터넷 액세스 권한이 없는 개인 서브넷을 만드는 것이 있습니다. 또한 Amazon VPC를 사용하면 하드웨어 VPN을 사용하여 하이브리드 아키텍처를 생성하고 AWS 클라우드를 자체 데이터 센터의 확장으로 사용할 수 있습니다.
Amazon VPC에는 네트워크에 대한 기존 IPv4 지원 외에도 IPv6 지원도 포함되어 있습니다.
컨텐츠 전달
Edge 캐싱은 AWS 클라우드 컴퓨팅 인프라에서도 여전히 관련이 있습니다. 웹 애플리케이션 인프라의 기존 솔루션은 AWS Cloud에서 정상적으로 작동합니다. 그러나 한 가지 추가 옵션은 Amazon CloudFront를 사용하여 웹 사이트를 에지 캐싱하는 것입니다.
CloudFront를 사용하여 글로벌 에지 위치 네트워크를 사용하여 동적, 정적 및 스트리밍 콘텐츠를 포함한 웹 사이트를 제공할 수 있습니다. CloudFront는 컨텐츠에 대한 요청을 가장 가까운 에지 위치로 자동으로 라우팅하므로, 콘텐츠는 가능한 최고의 성능으로 제공됩니다. CloudFront는 Amazon Simple Storage Service(Amazon S3) 및 Amazon Elastic Compute Cloud(Amazon EC2)와 같은 다른 AWS 서비스와 작동하도록 최적화 되었습니다. CloudFront는 또한 파일의 원래 버전을 저장하는 AWS 원본 서버가 아닌 모든 원본 서버와 원활하게 작동합니다.
다른 AWS 서비스와 마찬가지로 CloudFront를 사용하기 위한 계약이나 월별 약속도 없습니다. through 서비스를 통해 실제로 제공하는 만큼의 컨텐츠에 대해서만 지불합니다.
퍼블릭 DNS 관리
웹 애플리케이션을 AWS Cloud로 이동하려면 AWS가 제공하는 여러 가용성 영역을 활용하려면 몇 가지 DNS 변경 사항이 필요합니다. DNS 라우팅을 관리할 수 있도록 AWS는 가용성과 확장성이 뛰어난 DNS 웹 서비스인 Amazon Route 53을 제공합니다. Amazon Route 53은 도메인에 대한 쿼리를 가장 가까운 DNS 서버로 자동으로 라우팅합니다. 따라서 쿼리는 최상의 성능으로 응답됩니다 Amazon Route 53은 영역 이름 레코드 (example.com)뿐만 아니라 도메인 이름 (예 : www.example.com)에 대한 요청을 Classic Load Balancer로 해결합니다.
호스트 보안
기존의 웹 호스팅 모델과 달리 인바운드 네트워크 트래픽 필터링은 에지에 국한되어서는 안 되며 호스트 수준에서도 적용되어야 합니다. Amazon EC2는 보안 그룹이라는 기능을 제공합니다. 보안 그룹은 EC2 인스턴스에 연결할 수 있는 프로토콜, 포트 및 소스 IP 범위를 지정할 수 있는 인바운드 네트워크 방화벽과 유사합니다. 각 EC2 인스턴스에 하나 이상의 보안 그룹을 할당할 수 있습니다. 각 Security Group은 적절한 트래픽을 각 인스턴스로 라우팅합니다. 특정 서브넷 또는 IP 주소만 EC2 인스턴스에 액세스할 수 있도록 보안 그룹을 구성할 수 있습니다. 또는 다른 보안 그룹을 참조하여 특정 그룹에 있는 EC2 인스턴스에 대한 액세스를 제한할 수 있습니다.
그림 4의 예제 AWS 웹 호스팅 아키텍처에서 웹 서버 클러스터의 보안 그룹은 포트 80 및 443(HTTP 및 HTTPS)의 TCP와 직접 호스트 관리를 위한 애플리케이션 서버 보안 그룹의 인스턴스(SSH)를 통해서만 호스트에 대한 액세스를 허용할 수 있습니다. 반면 애플리케이션 서버 보안 그룹은 웹 요청을 처리하기 위해 웹 서버 보안 그룹에서, 직접 호스트 관리를 위해 조직의 서브넷에서 포트 22(SSH)를 통해 액세스할 수 있습니다. 이 모델에서는 지원 엔지니어가 회사 네트워크에서 애플리케이션 서버에 직접 로그인한 다음 애플리케이션 서버 상자에서 다른 클러스터에 액세스할 수 있습니다. 보안에 대한 자세한 내용은 AWS 보안 센터를 참조합니다. 이 센터에는 AWS의 보안 기능을 설명하는 보안 게시판, 인증 정보 및 보안 백서가 포함되어 있습니다.
클러스터 간 로드 균형 조정
하드웨어 로드 밸런서는 기존 웹 애플리케이션 아키텍처에서 사용되는 일반적인 네트워크 어플라이언스입니다. AWS는 ELB(Elastic Load Balancing) 서비스를 통해 이 기능을 제공합니다. ELB는 호스트의 상태 점검, 여러 가용성 영역에 걸쳐 EC2 인스턴스에 대한 트래픽 배포, 로드 밸런싱 회전 시 Amazon EC2 호스트의 동적 추가 및 제거를 지원하는 구성 가능한 로드 밸런싱 솔루션입니다. 또한 ELB는 지속적인 CNAME을 사용하여 예측 가능한 진입 지점을 제공하는 동시에 트래픽 수요에 맞게 로드 밸런싱 용량을 동적으로 확장 및 축소할 수 있습니다. 또한 ELB는 보다 고급 라우팅 요구사항을 해결하기 위해 끈적한 세션을 지원합니다. 애플리케이션에 고급 로드 밸런싱 기능이 필요한 경우 EC2 인스턴스에서 소프트웨어 로드 밸런싱 패키지(예: Zeus, HAProxy 또는 NGINX Plus)를 실행할 수 있습니다. 그런 다음 로드 밸런싱 EC2 인스턴스에 Elastic IP 주소를 할당하여 DNS 변경을 최소화할 수 있습니다.
다른 호스트 및 서비스 찾기
기존 웹 호스팅 아키텍처에서는 대부분의 호스트가 정적 IP 주소를 사용합니다. 클라우드에서는 대부분의 호스트가 동적 IP 주소를 갖게 됩니다. 모든 EC2 인스턴스는 공용 DNS 항목과 개인 DNS 항목을 모두 포함할 수 있으며 인터넷을 통해 주소를 지정할 수 있지만 인스턴스를 시작할 때 DNS 항목과 IP 주소가 동적으로 할당됩니다. 수동으로 할당할 수 없습니다. 정적 IP 주소(AWS 용어의 Elastic IP 주소)는 실행 중인 인스턴스에 할당될 수 있습니다. 마스터 데이터베이스, 중앙 파일 서버 및 EC2 호스팅 된 로드 밸런서와 같이 일관된 엔드포인트가 필요한 인스턴스 및 서비스에 Elastic IP 주소를 사용해야 합니다.
웹 서버와 같이 쉽게 확장할 수 있는 서버 역할은 동적 엔드포인트에서 IP 주소를 중앙 저장소에 등록하여 검색할 수 있도록 해야 합니다. 대부분의 웹 애플리케이션 아키텍처는 항상 켜져 있는 데이터베이스 서버를 가지고 있기 때문에 데이터베이스 서버는 검색 정보의 공통 저장소입니다. 일관된 주소 지정이 필요한 경우 인스턴스를 시작할 때 부트스트래핑 스크립트에 의해 주소 풀에서 Elastic IP 주소를 할당할 수 있습니다.
이 모델을 사용하여 새로 추가된 호스트는 부트스트래핑 단계의 일부로 데이터베이스에서 통신에 필요한 엔드포인트 목록을 요청할 수 있습니다. 데이터베이스의 위치는 시작할 때 각 인스턴스에 전달되는 사용자 데이터로 제공할 수 있습니다. 또는 Amazon SimpleDB를 사용하여 구성 정보를 저장하고 유지할 수 있습니다. SimpleDB는 널리 알려진 엔드포인트에서 사용할 수 있는 고가용성 서비스입니다.
웹 애플리케이션 내에서 캐싱
메모리 내 애플리케이션 캐시는 자주 사용되는 정보를 캐싱하여 서비스 로드를 줄이고 데이터베이스 계층의 성능과 확장성을 향상시킬 수 있습니다. Amazon ElastiCache는 클라우드에서 메모리 캐시를 쉽게 배포, 운영 및 확장할 수 있는 웹 서비스입니다. 생성한 메모리 내 캐시를 구성하여 로드와 함께 자동으로 확장하고 장애가 발생한 노드를 자동으로 교체할 수 있습니다. ElastiCache는 Memcached 및 Redis와 프로토콜을 준수하므로 현재 사내 솔루션에서 마이그레이션이 간소화됩니다.
빌드업웍스에서 AWS 무료 컨설팅을 진행합니다.
AWS에 대하여 궁금하신 내용이 있으시거나, 도입을 검토 중이시라면 편하게 신청해주세요.
[ 고지 사항 (Disclaimer) ]
본 컨텐츠는 고객의 편의를 위하여 AWS 서비스 설명을 위해 제작, 제공된 것입니다. 만약 AWS 사이트와 컨텐츠 상에서 차이나 불일치가 있을 경우 AWS 사이트 (AWS.amazon.com)가 우선합니다. 또한 AWS 사이트 상에서 한글 번역문과 영어 원문에 차이나 불일치가 있을 경우(번역의 지체로 인한 경우 등 포함), 영어 원문이 우선합니다.
본 문서는 Web Application Hosting in the AWS Cloud(2019년, 영문) 내용에 기반하여 작성 되었습니다.
이 문서는 정보 제공의 목적으로만 제공됩니다. 본 문서의 발행일 당시 AWS의 현재 제품 오퍼링 및 실행방법 등을 설명하며, 예고 없이 변경될 수 있습니다. 고객은 본 문서에 포함된 정보나 AWS 제품 또는 서비스의 사용을 독립적으로 평가할 책임이 있으며, 각 정보 및 제품은 명시적이든 묵시적이든 어떠한 종류의 보증 없이 “있는 그대로” 제공됩니다. 본 문서는 AWS, 그 자회사, 공급업체 또는 라이선스 제공자로부터 어떠한 보증, 표현, 계약 약속, 조건 또는 보장을 구성하지 않습니다. 고객에 대한 AWS의 책임 및 의무는 AWS 계약에 의해 관리되며 본 문서는 AWS와 고객 사이의 어떠한 계약에도 속하지 않으며 계약을 변경하지도 않습니다.
© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.