Actix Web 성능 최적화 가이드: 서버 응답 속도 향상을 위한 10가지 핵심 설정

1. 작업 스레드 수 최적화

서버 CPU 코어 수에 맞게 작업 스레드 수를 조정하면 기본적인 성능 향상을 기대할 수 있습니다. 일반적으로 CPU 코어 수의 1~2배로 설정하는 것이 효과적입니다. Server::workers() 메서드를 사용해 스레드 수를 설정함으로써 CPU 자원을 효율적으로 활용할 수 있습니다.

2. 연결 유지 시간 설정

TCP 연결의 생성 및 종료 비용을 줄이기 위해 적절한 Keep-Alive 시간을 설정해야 합니다. ServiceConfig::keep_alive() 메서드를 통해 5~10초의 유지 시간을 지정하면 고부하 환경에서 성능 향상을 얻을 수 있습니다.
use actix_web::server::Server;
use actix_web::keep_alive::KeepAlive;

Server::new(|| App::new())
    .keep_alive(KeepAlive::Timeout(5))
    .bind("127.0.0.1:8080")?
    .run();

3. 응답 압축 활성화

응답 데이터 크기를 줄여 네트워크 전송 효율을 높이려면 압축 기능을 활성화해야 합니다. gzip, brotli, zstd 등 여러 압축 알고리즘을 지원하며, brotli를 우선적으로 사용하는 것이 효과적입니다.

4. 부하 분산 설정 조정

client::ConnectorConfig를 통해 연결 풀 크기와 타임아웃 시간을 조정함으로써 부하 분산 설정을 최적화할 수 있습니다. 네트워크 환경에 따라 기본값(5초)을 조정해 안정성과 응답 속도를 균형 있게 관리해야 합니다.

5. 요청 처리 파라미터 최적화

요청 본문 크기와 버퍼 크기를 제한해 서버 자원 과부하를 방지할 수 있습니다. App::data()PayloadConfig를 설정하면 전역적으로 적용할 수 있습니다.

6. HTTP/2 지원 활성화

HTTP/2를 사용하면 동시 연결 처리 능력과 데이터 전송 효율이 크게 향상됩니다. TLS 설정을 통해 HTTP/2를 활성화하면 다중 경로 전송(Multiplexing) 기능을 활용해 모바일 및 고지연 환경에서도 성능을 극대화할 수 있습니다.

7. 비동기 처리를 통한 처리량 증대

Actix Web은 비동기 I/O 모델 기반으로 설계되어 있어, 요청 처리 과정에서 블로킹 연산을 피하고 비동기 데이터베이스 드라이버 및 I/O를 사용하는 것이 중요합니다. 이는 이벤트 루프의 차단을 방지해 처리량을 극대화할 수 있습니다.

8. 정적 파일 서비스 최적화

정적 파일 전송 성능을 높이려면 버퍼 크기를 조정해야 합니다. actix-files 라이브러리의 Files 서비스는 전송 파일 크기와 접근 패턴에 맞게 버퍼 크기를 설정할 수 있도록 지원합니다.
use actix_files::Files;

App::new()
    .service(Files::new("/static", "static")
        .buffer_size(1024 * 1024)) // 1MB 버퍼 크기

9. 타임아웃 설정 최적화

요청 처리 중 오랜 시간 소요되는 작업이 자원을 낭비하지 않도록 적절한 타임아웃을 설정해야 합니다. ServiceConfig::client_timeout()을 통해 연결 및 요청 처리 타임아웃을 조정해 응답 속도와 자원 사용률을 균형 있게 관리해야 합니다.

10. 연결 풀 재사용 활성화

외부 서비스를 자주 호출하는 경우, 연결 풀 재사용을 통해 TCP 연결 생성 비용을 절감할 수 있습니다. awc 클라이언트는 기본적으로 연결 풀을 지원하며, 풀 크기와 타임아웃을 조정해 성능을 최적화할 수 있습니다.

태그: Actix Web Rust HTTP/2 비동기 프로그래밍 응답 압축

8월 6일 04:45에 게시됨