엄지월드

웹서버 및 WAS 튜닝 예시 본문

Server&DevOps

웹서버 및 WAS 튜닝 예시

킨글 2025. 5. 30. 10:36

1. 웹서버 (Nginx, Apache) 튜닝 예시

주로 클라이언트의 요청을 받아 정적 파일을 처리하거나, WAS로 요청을 전달(Reverse Proxy)하는 역할을 수행합니다.

워커 프로세스/커넥션 수 설정:
worker_processes, worker_connections (Nginx), MPM 설정 (MaxRequestWorkers, ThreadsPerChild 등) (Apache)
목적: 서버의 CPU 코어 수와 예상되는 최대 동시 접속 수를 고려하여 최적의 워커 프로세스 및 각 프로세스가 처리할 수 있는 최대 커넥션 수를 설정하여 자원을 효율적으로 사용하고 과부하를 방지합니다.
캐싱 설정:
proxy_cache, fastcgi_cache (Nginx), mod_cache, mod_expires (Apache)
목적: 자주 요청되는 정적 파일이나 WAS 응답 결과를 캐싱하여 WAS 부하를 줄이고 응답 속도를 향상시킵니다. 파일 종류별로 적절한 캐싱 만료 시간을 설정합니다.
압축 설정:
gzip, brotli 설정 (Nginx), mod_deflate (Apache)
목적: 클라이언트에게 응답을 보내기 전에 데이터를 압축하여 전송량을 줄여 네트워크 부하를 감소시키고 응답 속도를 빠르게 합니다. 압축 대상 파일 타입과 압축 레벨을 적절히 설정합니다.
Keep-alive 설정:
keepalive_timeout, keepalive_requests (Nginx), KeepAlive, MaxKeepAliveRequests, KeepAliveTimeout (Apache)
목적: 하나의 TCP 연결로 여러 요청/응답을 처리하도록 허용하여 연결 수립/해제 오버헤드를 줄여 성능을 향상시킵니다. 적절한 타임아웃과 최대 요청 수를 설정하여 자원 낭비를 방지합니다.
버퍼링 설정 (Nginx):
proxy_buffer_size, proxy_buffers
목적: WAS로부터 받는 응답을 메모리나 디스크에 버퍼링하여 Nginx가 클라이언트에게 더 효율적으로 데이터를 전송할 수 있도록 합니다.
SSL/TLS 최적화:
사용할 프로토콜 버전, 암호화 스위트(ssl_protocols, ssl_ciphers), SSL 세션 캐싱 설정 (ssl_session_cache, ssl_session_timeout)
목적: 보안 수준을 유지하면서 SSL/TLS 핸드셰이크 오버헤드를 줄여 성능을 개선합니다.
HTTP/2, HTTP/3 활성화:
listen ... http2;, listen ... quic; 등 설정
목적: 최신 프로토콜을 사용하여 다중 요청/응답 처리 효율성, 헤더 압축 등으로 성능을 향상시킵니다.


2. WAS (Tomcat) 튜닝 예시

주로 애플리케이션 로직을 실행하고 동적인 콘텐츠를 생성합니다.

커넥터(Connector) 설정:
HTTP, AJP 커넥터 스레드 풀 설정 (maxThreads, minSpareThreads, maxConnections), 타임아웃 설정 (connectionTimeout, keepAliveTimeout), 압축 설정
목적: 동시에 처리할 수 있는 최대 요청 수(maxThreads), 대기 스레드 수(minSpareThreads), 최대 연결 수(maxConnections) 등을 적절히 설정하여 요청을 효율적으로 처리하고 서버 자원 고갈을 방지합니다. 타임아웃 설정으로 비정상적인 연결이 자원을 점유하는 것을 막습니다.
JVM(Java Virtual Machine) 튜닝:
힙 메모리 설정 (-Xms, -Xmx), 가비지 컬렉터(Garbage Collector) 종류 및 옵션 선택
목적: 애플리케이션이 사용하는 메모리 크기를 적절히 설정하여 OutOfMemoryError를 방지하고, 효율적인 가비지 컬렉터 설정을 통해 일시적인 응답 지연(Stop-the-world) 시간을 최소화하여 안정적인 서비스 응답 속도를 유지합니다. (JVM 튜닝은 WAS 튜닝에서 매우 중요하고 광범위한 영역입니다.)
애플리케이션 스레드 풀 설정 (애플리케이션 레벨):
JDBC 커넥션 풀, 비동기 작업 스레드 풀 등
목적: 데이터베이스 연결, 외부 시스템 연동 등에서 사용되는 스레드 풀 설정을 최적화하여 자원 경합을 줄이고 처리량을 높입니다.
로깅 레벨 및 출력 설정:
로깅 프레임워크(Logback, Log4j 등) 설정 조정
목적: 디버그 레벨 로깅 등 불필요하게 자세한 로깅이 디스크 I/O나 CPU 자원을 과도하게 사용하는 것을 방지합니다.

Comments