PHP 성능을 최적화하면 웹 애플리케이션이 원활하게 실행되고 빠르게 응답하며 트래픽을 효율적으로 처리할 수 있습니다. 다음은 각 최적화 전략에 대한 실제 사례와 함께 PHP 성능을 효과적으로 극대화하는 방법에 대한 자세한 단계별 가이드입니다.
먼저 시스템에 설치된 현재 PHP 버전을 확인하세요.
php -v
버전이 오래된 경우 안정적인 최신 PHP 버전으로 업그레이드하면 성능 개선과 새로운 기능이 함께 제공되는 경우가 많습니다.
최신 PHP 버전을 설치하려면 Ubuntu에서 다음 명령을 실행하세요.
sudo apt update sudo apt install software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt install php8.2 # Replace with the latest version
각각의 새로운 PHP 버전은 성능 향상을 가져옵니다. 예를 들어, PHP 7.x는 PHP 5.x에 비해 실행 시간이 거의 50% 향상되었으며, PHP 8.x는 훨씬 더 크게 향상되었습니다.
Opcache는 사전 컴파일된 스크립트 바이트코드를 메모리에 저장하므로 PHP가 각 요청에 대해 스크립트를 로드하고 구문 분석할 필요성이 줄어듭니다. 활성화하려면:
sudo nano /etc/php/8.2/fpm/php.ini # Use your PHP version
opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000 opcache.revalidate_freq=0
sudo systemctl restart php8.2-fpm sudo systemctl restart nginx
Opcache는 각 요청마다 PHP 코드를 컴파일할 필요를 제거하고 CPU 사용량과 요청 시간을 크게 줄여 성능을 대폭 향상시킬 수 있습니다.
부적절한 데이터베이스 인덱싱으로 인해 쿼리 실행 속도가 느려질 수 있습니다. WHERE 절이나 정렬에 사용되는 열을 색인화했는지 확인하세요.
MySQL 쿼리 예:
CREATE INDEX idx_user_email ON users(email);
데이터베이스 쿼리를 프로파일링하여 병목 현상을 찾으세요. 예를 들어 Laravel의 Eloquent ORM은 쿼리 프로파일링을 허용합니다:
DB::enableQueryLog(); $users = DB::table('users')->get(); dd(DB::getQueryLog());
데이터베이스 쿼리를 최적화하고 중요 열을 인덱싱하면 쿼리 실행 시간을 크게 줄여 PHP 애플리케이션 속도를 높일 수 있습니다.
Gzip은 서버에서 클라이언트로 전송되는 데이터의 크기를 줄여 페이지 로드 속도를 높여줍니다. Nginx에서 활성화하려면:
sudo nano /etc/nginx/nginx.conf
gzip on; gzip_comp_level 2; gzip_types text/css application/javascript application/json image/svg xml; gzip_min_length 256;
sudo systemctl restart nginx
Gzip 압축을 활성화하면 전송해야 하는 데이터 양이 줄어들어 페이지 로드 시간이 빨라지고 대역폭 사용량이 줄어듭니다.
Cloudflare 또는 Amazon CloudFront와 같은 CDN은 CSS, JavaScript, 이미지와 같은 정적 자산의 복사본을 전 세계 분산 서버에 저장하여 사용자가 더 가까이에서 사용할 수 있도록 합니다.
예:
정적 콘텐츠를 CDN으로 오프로드하면 서버의 로드가 줄어들고 전 세계 사용자의 응답 시간이 대폭 향상됩니다.
고부하 환경에 더 잘 최적화된 PHP-FPM(FastCGI 프로세스 관리자)을 사용하고 있는지 확인하세요.
sudo apt install php8.2-fpm
PHP-FPM 풀 구성 파일에서 pm.max_children, pm.start_servers, pm.min_spare_servers 및 pm.max_spare_servers 설정을 조정하여 더 많은 요청을 효율적으로 처리하도록 PHP-FPM 설정을 조정할 수 있습니다.
풀 구성 파일 편집:
sudo nano /etc/php/8.2/fpm/pool.d/www.conf
사용 가능한 메모리 및 트래픽을 기준으로 pm.max_children을 늘립니다.
pm.max_children = 50 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 20
PHP-FPM 및 Nginx를 다시 시작합니다.
sudo systemctl restart php8.2-fpm sudo systemctl restart nginx
PHP-FPM을 사용하면 PHP 프로세스가 더 많은 동시 요청을 효율적으로 처리하여 부하가 심한 경우 서버 응답 시간을 줄일 수 있습니다.
불필요한 공백과 주석을 제거하여 CSS, JavaScript, HTML 파일을 축소하면 파일 크기가 줄어듭니다.
Laravel Mix 또는 Gulp:
와 같은 도구를 사용하세요.
npm install laravel-mix --save-dev
Laravel용 webpack.mix.js 파일 예:
const mix = require('laravel-mix'); mix.js('resources/js/app.js', 'public/js') .sass('resources/sass/app.scss', 'public/css') .minify('public/js/app.js') .minify('public/css/app.css');
Nginx 구성 파일에서 정적 자산에 대한 캐싱을 추가합니다.
location ~* \.(css|js|jpg|jpeg|png|gif|ico|woff|woff2)$ { expires 1y; access_log off; add_header Cache-Control "public"; }
브라우저 캐싱 활성화와 함께 자산을 축소하고 번들링하면 파일 크기가 줄어들고 로드 시간이 단축되어 애플리케이션 속도가 빨라집니다.
Redis를 설치하려면:
sudo apt install redis-server
Laravel에서 .env 파일을 열고 Redis를 캐시 드라이버로 구성합니다.
CACHE_DRIVER=redis
쿼리 캐싱을 사용하여 반복되는 데이터베이스 쿼리 속도를 높입니다.
$users = Cache::remember('users', 60, function() { return DB::table('users')->get(); });
데이터베이스 쿼리를 캐싱하면 데이터베이스 로드가 줄어들고 자주 액세스하는 데이터에 대한 응답 시간이 대폭 향상됩니다.
프로덕션을 위한 Composer 자동 로더 최적화:
composer install --optimize-autoloader --no-dev
Laravel에서는 config/app.php에서 사용하지 않는 서비스 제공자를 비활성화하여 메모리 사용량을 줄이고 애플리케이션 부팅 시간을 단축합니다.
자동 로드 최적화는 클래스 맵을 컴파일하여 클래스 로드를 더 빠르게 만듭니다. 사용하지 않는 서비스를 비활성화하면 애플리케이션이 더 적은 리소스를 사용하는 데 도움이 됩니다.
애플리케이션을 프로파일링하려면 Laravel Telescope를 설치하세요.
composer require laravel/telescope php artisan telescope:install php artisan migrate php artisan serve
New Relic 또는 Blackfire와 같은 타사 도구를 통합하여 애플리케이션 병목 현상, 데이터베이스 성능 등을 분석할 수 있습니다.
모니터링 및 프로파일링 도구는 PHP 애플리케이션의 느린 쿼리, 메모리 누수 및 병목 현상을 식별하여 성능 문제를 사전에 해결할 수 있도록 도와줍니다.
이 단계를 수행하면 PHP 애플리케이션의 성능을 크게 향상시킬 수 있습니다. PHP 업데이트 및 Opcode 캐싱 활성화부터 데이터베이스 쿼리 최적화 및 PHP-FPM 구성에 이르기까지 각 단계는 보다 응답성이 뛰어나고 확장 가능한 애플리케이션에 기여합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3