AWS 성능 향상을 위한 NGINX 활용 5가지 팁

클라우드 기반 컴퓨팅 서비스의 선도적인 제공업체인 Amazon Web Services(AWS)는 웹 애플리케이션 개발을 위한 훌륭한 리소스이자 플랫폼입니다. AWS의 고객으로는 Adobe, Airbnb, NASA, Netflix, Slack, Zynga와 같은 유명 기업이 있습니다.

AWS는 Prototyping, 혼합 배포(직접 관리하는 물리적 서버와 함께) 또는 AWS 전용 배포에 사용할 수 있습니다. 하지만 다른 퍼블릭 클라우드와 마찬가지로 AWS의 성능은 매우 다양할 수 있지만, 직접 구매하고 관리하는 서버와 마찬가지로 AWS 배포를 직접 제어할 수 없습니다. 따라서 AWS 사용자는 환경을 최대한 활용하기 위해 여러 가지 최적화 방법을 터득했습니다.

2013년 중반에 도입된 이후 NGINX Plus는 AWS에서 큰 인기를 얻었으며, 전체 AWS 구현의 40% 이상이 NGINX 또는 NGINX Plus를 사용하고 있습니다. 그 이유 중 가장 큰 부분은 성능입니다. 인스턴스 간 Load Balancing 및 기타 용도로 널리 사용되고 있으며, 다른 대안보다 가격 대비 성능이 우수하여 트래픽 급증 문제를 처리합니다.

이러한 현실을 염두에 두고 이 포스트에서는 Amazon Web Services에서 최상의 성능을 얻는 데 사용할 수 있는 팁을 제공합니다. 해당되는 경우 NGINX Plus를 사용하여 이러한 팁을 구현하는 방법에 대한 구체적인 내용도 포함되어 있습니다. 이 팁을 사용하여 AWS 성능을 즉각적으로 개선하고 점진적인 개선 프로세스를 시작하여 AWS 기반 성능을 최대한 활용할 수 있습니다.

목차

1. AWS 성능 향상 팁 1 – 성능을 위한 계획
2. AWS 성능 향상 팁 2 – Load Balancing 구현
3. AWS 성능 향상 팁 3 – 정적 파일 및 동적 파일 캐시하기
4. AWS 성능 향상 팁 4 – 애플리케이션 성능 벤치마크 및 모니터링
5. AWS 성능 향상 팁 5 – 클라우드에서 DevOps 접근 방식 사용

6. 결론

1. AWS 성능 향상 팁 1 – 성능을 위한 계획

전문가들은 클라우드 기반 애플리케이션을 유지, 지원 및 실행하는데 드는 예상치 못한 비용 등 클라우드 배포 시 발생할 수 있는 몇 가지 어려움을 설명하기 위해 ‘cloud hangover‘라는 용어를 사용하고 있습니다.

애플리케이션을 빠르게 배포하거나 비용을 절감하기 위한 실험 및 ‘빠른 수정’과 같은 전술적인 클라우드 도입이 필요한 경우가 있습니다. 전술적인 노력을 통해 클라우드 기반 개발 및 배포에 대한 경험을 쌓고 데이터를 축적하세요.

노력을 기울이면서 시간을 들여 계획을 세우세요. 공급업체를 관리하고, 필요한 역량을 갖추기 위해 직원을 고용하거나 교육하고, 애플리케이션 모니터링 및 관리에 대한 향후 요구 사항을 파악해야 합니다.

또한 다음 사항을 고려하세요.

  • 데이터 이동 – 어떤 데이터를 수락하고 전송하는지, 필요한 보안 수준(너무 적으면 데이터 손실에 노출되고 너무 많으면 비용이 너무 많이 듭니다)과 백업 요구 사항을 파악하세요.
  • 고가용성 – Reverse Proxy 서버, Load Balancing, 요청 라우팅을 사용하면 구현이 더욱 유연하고 적응력이 뛰어나며 강력해집니다. 중복성을 위해 여러 가용 영역에 NGINX 및 기타 서버 인스턴스를 분산하고 Auto Scaling을 사용하여 트래픽 급증을 처리하는 것을 고려하세요.
  • 향상된 네트워킹 – AWS의 향상된 네트워킹 기능은 더 높은 성능(초당 더 많은 패킷)과 더 낮은 지연 시간을 제공합니다. 향상된 네트워킹은 특정 구성의 특정 인스턴스 유형에서만 사용할 수 있으므로 사용하기 전에 네트워킹 및 기타 요구 사항을 평가하세요. 별도의 추가 비용은 없습니다.
  • 스토리지 유형 – 기본적으로 EBS(Solid State Disk) 스토리지를 사용하는 것이 좋습니다. EBS 스토리지는 더 빠르고 용량이 크며 데이터와 OS 상태가 영구적이지만 비용이 더 많이 들 수 있습니다.

초기에 NGINX Plus를 포함하세요. NGINX Plus는 Reverse Proxy 서버(애플리케이션 처리에서 요청 관리를 분리하기 위해), Load Balancing(일반적으로 Amazon Elastic Load Balancing과 함께 사용), Heterogeneous 애플리케이션 서버 간의 요청 라우팅에 사용하기에 매우 적합합니다. NGINX Plus는 애플리케이션 서버에 대한 트래픽을 크게 줄이면서 매우 많은 수의 클라이언트 연결을 지원할 수 있습니다.

AWS

2. AWS 성능 향상 팁 2 – Load Balancing 구현

Load Balancing은 여러 애플리케이션 서버에 요청을 분산합니다. 클라우드 환경에서는 직접 제어하는 서버를 사용할 때보다 서버 성능이 더 가변적이기 때문에 Load Balancing은 다른 곳보다 클라우드에서 훨씬 더 중요합니다.

AWS Elastic Load Balancing(ELB) 기능은 애플리케이션 트래픽을 여러 Elastic Cloud Computing(EC2) 인스턴스 간에 분산합니다. ELB는 내결함성을 제공하며 트래픽의 양과 소스의 변화에 따라 원활하게 조정됩니다. ELB는 매우 유연하며 가용 영역 전반에서 작동할 수 있습니다. AWS Auto Scaling과 복잡한 아키텍처를 지원합니다.

보다 강력한 제어를 위해 하나 이상의 NGINX Plus “아래” ELB 인스턴스를 사용하세요. NGINX Plus는 구성 제어, 정밀 로깅, 애플리케이션 Health Check, 세션 지속성, SSL Termination, HTTP/2 Termination, WebSocket 지원, 캐싱, Load Balancing된 서버 그룹의 동적 재구성 기능을 제공합니다.

Load Balancing은 클라우드 환경에서 발견되는 몇 가지 잠재적인 성능 문제를 해결하는 데 도움이 됩니다.

  • 메모리 부족 – 인스턴스에서 메모리가 부족해지는 것은 너무나 쉽습니다. 여기에 나열된 다른 팁과 함께 Load Balancing을 사용하면 각 인스턴스가 사용 가능한 메모리 내에서 실행되도록 요구 사항을 조정하는 데 도움이 됩니다.
  • 일관되지 않은 성능 – 같은 유형의 인스턴스라도 성능이 크게 다를 수 있습니다. Load Balancing을 사용하면 일시적인 문제, 시간이 지나도 계속되는 성능 저하, 과부하 등 어느 한 인스턴스에서 병목 현상이 발생하는 것을 방지할 수 있습니다.
  • 대역폭 제약 – 클라우드 스토리지 볼륨은 하드웨어 디스크보다 대역폭이 적을 수 있습니다. Load Balancing 및 여기에 나열된 기타 팁을 사용하여 인스턴스 간에 대역폭 수요를 분산할 수 있습니다.

NGINX Plus는 요청 라우팅, URL 재작성(Rewrite), URL 리다이렉션, WebSocket 지원, SPDY 및 HTTP/2 지원, 고급 애플리케이션 Health Check, 연결 제한, 속도 제한(Rate Limit) 등의 기능으로 ELB를 확장합니다. Auto Scaling은 ELB를 통해서만 사용할 수 있으므로 Auto Scaling과 NGINX Plus 기능을 결합하려면 통합 NGINX Plus/ELB 구현을 사용하세요.

3. AWS 성능 향상 팁 3 – 정적 파일 및 동적 파일 캐시하기

캐싱은 매우 널리 사용되는 성능 개선 수단이며, AWS 기반 애플리케이션에 강력한 캐싱 지원을 포함해야 하는 모든 이유가 있습니다. 캐싱을 사용하면 파일을 최종 사용자에게 더 가깝게 배치하고 캐싱하려는 특정 유형의 파일을 신속하게 전달하도록 맞춤화된 인스턴스에 배치할 수 있습니다. 캐싱은 지연 시간의 영향을 완화하고 정적 파일을 이동하는 바쁜 작업으로부터 애플리케이션 서버의 부하를 덜어줍니다.

캐싱은 AWS 기반 NGINX Plus의 핵심 애플리케이션입니다. AWS의 유연성을 통해 다양한 캐싱 접근 방식을 쉽게 구현하고 비교하여 각 웹 애플리케이션에 대한 최적의 캐싱 구현을 향해 나아갈 수 있습니다. 최적의 성능을 위해 AWS 리전 내에서 파일을 캐싱할 수 있습니다. Load Balancing과 캐싱을 통해 컴퓨팅 최적화, 스토리지 최적화, 기타 EC2 인스턴스를 필요에 맞게 혼합하여 선택하면 비용을 절감할 수 있습니다.

클라우드 호스팅 성능을 극대화하는 기술의 대부분은 인스턴스 유형을 CPU 성능, 메모리, 처리 속도, 저장 용량 및 대역폭에 대한 특정 요구 사항에 맞추는 것입니다. 캐싱을 사용하면 캐싱하는 인스턴스와 캐싱을 통해 Offload되어 더 많은 처리를 수행할 수 있는 인스턴스 모두에 대해 특정 인스턴스 유형에 맞게 요구 사항을 조정할 수 있습니다. 이렇게 하면 이전 팁에서 언급한 메모리 부족, 일관되지 않은 성능 및 대역폭 제약과 같은 성능 문제를 피할 수 있습니다.

NGINX Plus는 정적 파일을 위한 매우 빠른 고성능 캐싱 서버이지만, 동적 파일도 유용하게 캐싱할 수 있습니다. 요청이 급격히 증가하면 애플리케이션 서버가 전송 병목 현상이 발생하여 트래픽 증가에 비해 성능이 불균형적으로 느려질 수 있습니다. 애플리케이션 성능 속도를 높이려면 애플리케이션 서버에서 새로 생성된 파일을 몇 초 동안 캐싱하는 Microcaching을 구현하세요. 사용자는 여전히 새로운 콘텐츠를 볼 수 있으며, 캐시된 사본이 요청의 대부분을 처리합니다. (파일이 10초 동안 캐시되고 서버가 초당 10개의 요청을 수신하는 경우, 요청의 99%가 캐시된 복사본에 의해 빠르게 채워집니다.)

4. AWS 성능 향상 팁 4 – 애플리케이션 성능 벤치마크 및 모니터링

클라우드 서비스는 기존 구현 방식과 충분히 다르기 때문에 성능에 대한 표준을 미리 설정한 다음 더 많은 것을 배우면서 수정하는 것이 중요합니다. 클라우드에서 실행되는 애플리케이션의 가격/성능을 직접 소유하고 관리하는 서버에서 실행할 때 동일한 애플리케이션에서 기대할 수 있는 성능과 항상 비교할 수 있어야 합니다.

페이지 로드 시간, 화면에 첫 Byte가 표시되는 시간, 시작된 트랜잭션, 완료된 트랜잭션 및 웹 애플리케이션 성능 모니터링에 사용되는 기타 측정값에 대한 표준을 설정합니다. 클라우드 및 직접 관리 서버 구현에 대한 애플리케이션 개발 시간 및 지속적인 지원 요구 사항을 비교할 수 있도록 준비하세요. 이렇게 하면 특정 애플리케이션뿐만 아니라 다양한 종류의 구현에 걸친 애플리케이션 포트폴리오를 관리할 수 있습니다.

Amazon Cloudwatch는 AWS에서 실행 중인 애플리케이션에 대한 통합 모니터링을 제공합니다. 리소스 사용률, 애플리케이션 성능을 모니터링하고 간단한 상태 확인을 수행할 수 있습니다. NGINX Plus는 고급 Health Check과 정교한 실시간 Activity 모니터링을 추가합니다. NGINX Plus에서 대시보드를 직접 보거나 다른 대시보드 및 타사 도구에 NGINX Plus 통계를 연결할 수 있습니다. 서버별, 그룹별, 전체 배포에 대한 연결, 요청, 가동 시간 등에 대한 통계를 확인할 수 있습니다.

NGINX Plus has a graphical dashboard with key performance numbers

5. 성능 향상 팁 5 – 클라우드에서 DevOps 접근 방식 사용

기술 및 비즈니스 목표를 달성하기 위해 애플리케이션 개발과 운영 관행을 통합하는 DevOps 접근 방식을 사용하는 것은 웹을 효과적으로 사용하기 위한 새로운 표준입니다. DevOps는 보안 아키텍처와 보안 침해에 대한 실시간 대응을 포함하기 위해 DevOpsSec이라고도 불립니다.

DevOps의 목표는 “적은 프로세스로 높은 자유와 높은 책임 문화를 만드는 것”이라고 간단히 설명할 수 있습니다. 클라우드 구현은 유연성, 확장성, 최신 도구에 대한 손쉬운 액세스로 인해 DevOps 접근 방식을 지원하기에 독보적으로 적합합니다. 구현의 변형을 빠르고 쉽게 시도하고, 필요에 따라 거의 무한한 리소스로 애플리케이션을 빠르게 확장할 수 있으며(테스트에 매우 유용함), NGINX Plus, Puppet, Chef, Zookeeper와 같은 DevOps 도구를 사용할 수 있습니다. HTTP/1 성능과 HTTP/2 성능 비교와 같은 어려운 작업도 클라우드 환경에서는 더 쉽게 수행할 수 있습니다.

DevOps 접근 방식의 구현을 지원하는 핵심 기술은 Monolithic 애플리케이션을 소규모의 상호 연결된 서비스로 리팩토링하는 것으로 시작되는 Microservices 아키텍처를 사용하는 것입니다. Microservices 아키텍처는 특히 Load Balancing, 캐싱, 지속적인 모니터링 및 DevOps 접근 방식을 사용하는 경우 AWS 구현에 적합합니다.

이전 팁에서 설명한 대로 AWS와 NGINX Plus에는 강력한 모니터링 도구가 있으며, 모든 클라우드 구현에서 코드, 도구, 구현 아키텍처를 신속하게 변경할 수 있습니다. 이러한 유연성을 사용하여 AWS 환경에서 강력한 DevOps 접근 방식을 구현할 수 있습니다.

클라우드 구현을 애플리케이션 개발 및 운영에 대한 새로운 접근 방식의 시험 무대로 사용하여 애플리케이션을 제공하는 데 사용하는 모든 환경의 변화 방향을 제시할 수 있습니다.

6. 결론

AWS 구현을 최대한 활용하는 것은 어려운 작업이지만 그 결과는 탁월할 수 있습니다. 신중한 접근 방식을 취하면 기존 구현에서는 달성하기 어려웠던 목표를 달성할 수 있습니다. 또한 장기적인 목표를 달성하기 위해 클라우드와 기존 환경을 유연하게 조합하여 사용할 수 있습니다.

NGINX Plus는 주요 AWS 구현의 중요한 부분이며 클라우드에서 애플리케이션 전송을 위한 중요한 도구로서 그 역할이 계속 커지고 있습니다. 지금 바로 AWS에서 NGINX Plus를 시작할 수 있습니다.

NGINX Plus를 직접 사용해 보거나 테스트해 보려면 지금 30일 무료 평가판을 신청하거나 사용 사례에 대해 최신 소식을 빠르게 전달받고 싶으시면 아래 뉴스레터를 구독하세요.