Python 성능 극대화, 2부: NGINX Load Balancing 및 모니터링
Python 은 고성능 스크립트 언어로 잘 알려져 있으며, NGINX는 코드의 실제 실행 속도를 보완하는 방식으로 도움을 줄 수 있습니다. 단일 서버 구현의 경우, 애플리케이션 서버의 웹 서버를 NGINX로 전환하면 성능이 크게 향상될 수 있습니다. 이론적으로 정적 파일 캐싱은 절반이 정적 파일로 구성된 웹 페이지의 성능을 약 2배로 향상시킬 수 있습니다. 동적 애플리케이션 콘텐츠를 캐싱하면 애플리케이션 성능이 훨씬 더 크게 향상될 수 있습니다.
그러나 이러한 모든 단계가 유용하지 않을 수 있으며, 어느 시점에서는 성능 향상으로 충분하지 않을 수 있습니다. 이 시점에서는 저렴한 비용으로 강력하고 유연하며 거의 무한대로 확장할 수 있는 다중 서버 구현으로 전환하는 “Scaling Out”을 고려해야 합니다.
다중 서버 설정으로 이동하는 것도 NGINX Open Source에서 NGINX Plus로 업그레이드를 고려하기에 좋은 시기입니다. 커뮤니티 지원이 있고, 널리 사용되며, Source 코드뿐만 아니라 사전 빌드된 배포판을 제공한다는 점에서 NGINX Open Source는 나름의 장점이 있습니다. 단일 서버 사이트의 웹 서버로 사용하기에 좋은 선택입니다.
NGINX Plus는 사전 구성된 배포, 전문적인 기술 지원, NGINX 엔지니어 액세스, HTTP, TCP, UDP 트래픽의 Load Balancing, 지능형 세션 지속성, 애플리케이션 Health Check, 실시간 활동 모니터링, 미디어 전송 기능을 추가합니다.
이러한 NGINX Plus 기능은 독립형 웹 서버에서도 유용하지만 다중 서버 아키텍처에서 더욱 빛을 발합니다. NGINX Plus를 사용하면 빠르고 유연하며 탄력적이고 관리하기 쉬운 애플리케이션을 만들 수 있습니다.
목차
1. 팁 6 – Reverse Proxy 서버로 NGINX 배포하기
2. 팁 7 – URL 재작성(Rewrite)
3. 팁 8 – Load Balancing 구현
4. 팁 9 – 세션 지속성 및 세션 Draining 구현
5. 팁 10 – 모니터링 및 관리 기능 사용
6. Python 성능 극대화 결론
1. 팁 6 – Reverse Proxy 서버로 NGINX 배포하기
Reverse Proxy 서버를 배포하는 것은 단일 서버 환경에서 전환할 때 큰 작업으로 보일 수 있지만, 의외로 간단하고 매우 유용할 수 있습니다. Reverse Proxy 서버를 추가하면 성능이 즉각적으로 향상되고 추가 작업을 수행할 수 있는 길이 열립니다.
- 성능 향상 – 기존 Python 애플리케이션 앞에 NGINX 서버를 배치하세요. 웹 서버 소프트웨어나 구성을 변경할 필요가 없습니다. 웹 서버와 애플리케이션 서버의 기존 조합은 웹 트래픽에 대한 직접 액세스와 Reverse Proxy 서버에 의한 Spoon‑Fed 요청으로부터 격리된 Bubble에서 실행될 뿐입니다.
- 더욱 향상된 성능 – 이전 Python 포스트에서 설명한 대로 애플리케이션 생성 파일에 대한 정적 파일 캐싱과 Microcaching을 구현합니다. 하지만 이제 애플리케이션 서버가 아닌 새로운 Reverse Proxy 서버에서 구현하세요. 애플리케이션을 실행하는 서버의 Workload가 급격히 감소하여 애플리케이션의 용량이 증가하고 모든 사용자에게 더 나은 성능을 제공할 수 있습니다.
- Scaling Out – 애플리케이션 서버를 더 추가하고, 서버 간에 Load Balancing을 구현하고, 세션 지속성을 사용하여 각 사용자 경험의 지속성을 유지하세요.
- 고가용성 추가 – Reverse Proxy 서버를 라이브 백업에 미러링하고 여분의 애플리케이션 서버를 확보하여 사이트의 고가용성을 확보하세요.
- 모니터링 및 관리 – 고급 모니터링 및 관리 기능과 능동적 Health Check 기능이 포함되어 있으며, 이를 설정하면 Reverse Proxy 서버가 대역 외 요청을 서버에 사전에 수행하여 서버의 가용성을 확인합니다.

PHP Backend를 위한 Reverse Proxy로서의 NGINX Plus
또한 NGINX는 다양한 구성에서 여러 가지 보안 이점을 제공합니다. Reverse Proxy 서버로 구현하면 Service Denial of Service 공격으로부터 보호하는 등 보안을 위해 NGINX를 최적화하고 업데이트하는 동시에 최대 성능을 위한 애플리케이션 서버를 구성할 수 있습니다.
정적 캐싱과 Microcaching은 모두 성능 향상을 위한 강력한 도구입니다. 콘텐츠 캐싱을 사용하려면 구성에 proxy_cache_path 및 proxy_cache 지시문을 포함하세요.
# Define a content cache location on disk
proxy_cache_path /tmp/cache keys_zone=mycache:10m inactive=60m;
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
# reference the cache in a location that uses proxy_pass
proxy_cache mycache;
}
}
또한 NGINX는 다양한 클라우드 배포 옵션과 소유 서버에 걸쳐 탄력성을 제공합니다. 예를 들어, 일부 NGINX 사용자는 특정 지점까지 On‑Premises 서버에서 트래픽을 실행한 다음 클라우드 인스턴스를 추가하여 트래픽 증가를 처리하고 내부 서버 Downtime에 대비합니다. 이러한 종류의 탄력성과 기능은 Reverse Proxy 서버로 NGINX를 배포하는 초기 과정을 거치면 비교적 쉽게 달성할 수 있습니다.
Reverse Proxy 서버를 사용하면 서버(하드웨어 또는 클라우드 인스턴스)에 대한 추가 비용과 설정 작업이 필요합니다. 하지만 애플리케이션 코드나 웹 서버 구성을 변경하지 않고도 사이트에 대한 이점을 얻을 수 있습니다.
2. 팁 7 – URL 재작성(Rewrite)
웹 서버 구성에는 종종 URL 재작성(Rewrite) 규칙이 포함됩니다. 사용자가 이해할 수 있는 “예쁜” URL을 만들고, 리소스가 이동했을 때 고정 URL을 유지하고, 캐시된 트래픽과 동적으로 생성된 트래픽을 관리하는 등 다양한 용도로 사용할 수 있습니다.
URL 재작성(Rewrite)을 포함한 NGINX 구성은 적은 수의 지시문을 사용하며 간단하고 명확하다고 널리 알려져 있습니다. 하지만 익숙하지 않은 경우 학습 과정이 필요합니다. 이 포스트인 NGINX 재작성(Rewrite) 규칙 만들기가 좋은 참고 자료가 될 것입니다.
다음은 재작성(Rewrite) 지시문을 사용하는 샘플 NGINX 재작성(Rewrite) 규칙입니다. 이 규칙은 /download
문자열로 시작하고 경로의 뒷부분에 /media
/ 또는 /audio
/ 디렉터리가 포함된 URL을 일치시킵니다. 이러한 요소를 /mp3
/로 바꾸고 적절한 파일 확장자 .mp3
또는 .ra
를 추가합니다. $1
및 $2
변수는 변경되지 않는 경로 요소를 캡처합니다. 예를 들어 /download/cdn-west/media/file1
은 /download/cdn-west/mp3/file1.mp3
가 됩니다. 파일 이름에 확장자(예: .flv
)가 있는 경우 표현식은 이를 제거하고 .mp3
로 바꿉니다.
server {
# ...
rewrite ^(/download/.*)/media/(\w+)\.?.*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(\w+)\.?.*$ $1/mp3/$2.ra last;
return 403;
# ...
}
Apache에 기존 재작성(Rewrite) 규칙이 있을 수 있으며, 이 규칙을 직접 또는 NGINX 구성의 시작점으로 사용하여 NGINX에서 다시 구현할 수 있습니다. Apache는 NGINX가 지원하지 않는 .htaccess
파일을 사용합니다. (.htaccess
파일도 계층 구조이며 여러 수준의 .htaccess
파일이 적용될 때마다 효과가 누적되므로 특정 컨텍스트에서 활성화된 구성 규칙을 식별하기 위해 몇 가지 조치를 수행해야 할 수 있습니다.)
다음은 간단한 예시입니다. 다음 Apache 규칙은 URL에 http
프로토콜 식별자와 www
접두사를 추가합니다.
RewriteCond %{HTTP_HOST} example.org
RewriteRule (.*) http://www.example.org$1
NGINX에서 동일한 작업을 수행하려면 첫 번째 server 블록에서 더 짧은 URL에 대한 요청을 일치시키고 더 긴 URL에 일치하는 두 번째 server 블록으로 리다이렉션합니다.
# USE THIS CONVERSION
server {
listen 80;
server_name example.org;
return 301 http://www.example.org$request_uri;
}
server {
listen 80;
server_name www.example.org;
# ...
}
3. 팁 8 – Load Balancing 구현 (Python 성능 극대화)
웹사이트의 용량과 가용성을 확장하는 궁극적인 방법은 여러 애플리케이션 서버를 실행하고 Load Balancing을 구현하는 것입니다. 이는 매우 널리 사용되는 NGINX의 기능이며, NGINX Plus에는 추가적인 정교한 Load Balancing 알고리즘과 기능이 포함되어 있습니다.

NGINX Load Balancing은 Balancing할 서버로 구성된 server 그룹을 만드는 것으로 시작됩니다. 다음 구성 코드에는 서버 가중치가 포함되어 있습니다. 더 성능이 좋은 서버가 있는 경우 더 큰 가중치를 할당하여 해당 서버로 전송되는 트래픽의 비율을 높이세요.
upstream stream_backend {
server backend1.example.com:12345 weight=5;
server backend2.example.com:12345;
server backend3.example.com:12346;
}
NGINX Plus의 Load Balancing은 Round Robin(기본값), Least Connections, Least Time(응답 시간), General Hash(예: URL), IP Hash(클라이언트 IP 주소) 등 새 요청을 라우팅하는 다양한 방법(알고리즘)을 제공합니다. Python 및 기타 애플리케이션 언어의 경우 하나의 요청에 오랜 시간이 걸릴 수 있으므로 최적의 Load Balancing 알고리즘을 사용하는 것이 매우 효과적일 수 있으며, 각각의 새 요청을 가장 트래픽이 적은 서버로 전송하는 것이 효과적인 최적화 방법입니다.
4. 팁 9 – 세션 지속성 및 세션 Draining 구현
웹은 기본적으로 상태가 없는 상호 작용을 위해 설계되었지만 상태별 정보가 필요한 경우 이를 구현하는 방법에는 여러 가지가 있습니다. 애플리케이션 서버에 상태가 있는 경우 세션이 지속되는 동안 동일한 서버가 특정 사용자의 모든 요청을 처리하도록 합니다. 이를 세션 지속성이라고 합니다.
NGINX Plus는 Sticky Cookie 사용, 세션 식별자를 생성하여 반복적인 서버 할당에 사용하는 학습 매개변수, 특정 서버를 미리 지정할 수 있는 Sticky Route를 포함한 고급 세션 지속성 기능을 Sticky 지시문을 통해 제공합니다.
다음 코드는 사용 중인 Sticky 지시문을 보여줍니다.
upstream backend {
server webserver1;
server webserver2;
sticky cookie srv_id expires=1h domain=.example.com path=/;
}
세션 Draining은 여러 Load Balancer 서버를 관리하기 위한 유용한 Toolkit의 일부입니다. Upstream 그룹의 서버에 Drain 매개변수를 설정하기 위해 NGINX Plus NGINX Plus API를 사용하면 해당 서버가 “Wind Down”됩니다. 즉, NGINX Plus는 해당 서버에 새 요청을 보내지 않고 세션이 종료될 때까지 기존 연결을 계속 유지합니다.
5. 팁 10 – 모니터링 및 관리 기능 사용
서버 구성이 더 복잡해지면 고성능을 유지하고 Downtime을 방지하기 위해 모니터링 및 관리가 중요해집니다. NGINX Plus는 서버에 문제가 발생할 수 있는 시점을 알려주는 Active Health Check를 실행하지만, 문제가 발생하기 전에 해당 정보에 따라 조치를 취하려면 시스템을 모니터링해야 합니다.
NGINX Plus를 사용하면 NGINX 서버의 상태를 모니터링할 수 있는 기본 제공 대시보드가 제공됩니다. NGINX 서버로 들어오고 나가는 데이터 흐름을 그룹으로 추적하고 각 특정 서버에 대한 세부 정보로 Drill Down 할 수 있습니다.

NGINX Plus는 Python 애플리케이션 서버에 대한 모니터링 및 관리 기능을 제공합니다.
또한 NGINX Plus는 실시간 통계를 JSON 형식으로 제공합니다. 이 데이터를 DataNew Dog, Dynatrace, New Relic과 같은 모니터링 도구로 보내거나 자체 도구로 보낼 수 있습니다.
6. Python 성능 극대화 결론
Python 은 풍부한 표현력, 뛰어난 성능, 광범위한 커뮤니티 지원으로 인해 다양한 개발자들 사이에서 강력한 지지층을 확보하고 있습니다. 바로 이러한 뛰어난 성능 덕분에 많은 동시 사용자를 끌어모으고 성능 지원이 필요한 웹사이트를 제작하는 데 Python 이 유용하게 사용될 수 있습니다.
NGINX Plus를 직접 사용해 보거나 테스트해 보려면 지금 30일 무료 평가판을 신청하거나 사용 사례에 대해 최신 소식을 빠르게 전달받고 싶으시면 아래 뉴스레터를 구독하세요.
댓글을 달려면 로그인해야 합니다.