"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP 효율성 향상: 성능 최적화를 위한 입증된 기술

PHP 효율성 향상: 성능 최적화를 위한 입증된 기술

2024-11-08에 게시됨
검색:720

Boosting PHP Efficiency: Proven Techniques for Performance Optimization

PHP 성능을 최적화하면 웹 애플리케이션이 원활하게 실행되고 빠르게 응답하며 트래픽을 효율적으로 처리할 수 있습니다. 다음은 각 최적화 전략에 대한 실제 사례와 함께 PHP 성능을 효과적으로 극대화하는 방법에 대한 자세한 단계별 가이드입니다.


1부: 안정적인 최신 PHP 버전으로 업데이트

1단계: 현재 PHP 버전 확인

먼저 시스템에 설치된 현재 PHP 버전을 확인하세요.

php -v

버전이 오래된 경우 안정적인 최신 PHP 버전으로 업그레이드하면 성능 개선과 새로운 기능이 함께 제공되는 경우가 많습니다.

2단계: 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는 훨씬 더 크게 향상되었습니다.


2부: Opcode 캐싱 사용(PHP Opcache)

1단계: PHP에서 Opcache 활성화

Opcache는 사전 컴파일된 스크립트 바이트코드를 메모리에 저장하므로 PHP가 각 요청에 대해 스크립트를 로드하고 구문 분석할 필요성이 줄어듭니다. 활성화하려면:

  1. php.ini 파일을 엽니다.
   sudo nano /etc/php/8.2/fpm/php.ini # Use your PHP version
  1. Opcache 설정을 찾아 활성화하세요.
   opcache.enable=1
   opcache.memory_consumption=128
   opcache.max_accelerated_files=10000
   opcache.revalidate_freq=0
  1. PHP-FPM 및 Nginx를 다시 시작합니다.
   sudo systemctl restart php8.2-fpm
   sudo systemctl restart nginx

왜?

Opcache는 각 요청마다 PHP 코드를 컴파일할 필요를 제거하고 CPU 사용량과 요청 시간을 크게 줄여 성능을 대폭 향상시킬 수 있습니다.


3부: 데이터베이스 쿼리 최적화

1단계: 데이터베이스 테이블 인덱싱

부적절한 데이터베이스 인덱싱으로 인해 쿼리 실행 속도가 느려질 수 있습니다. WHERE 절이나 정렬에 사용되는 열을 색인화했는지 확인하세요.

MySQL 쿼리 예:

CREATE INDEX idx_user_email ON users(email);

2단계: 쿼리 프로파일링 사용

데이터베이스 쿼리를 프로파일링하여 병목 현상을 찾으세요. 예를 들어 Laravel의 Eloquent ORM은 쿼리 프로파일링을 허용합니다:

DB::enableQueryLog();
$users = DB::table('users')->get();
dd(DB::getQueryLog());

왜?

데이터베이스 쿼리를 최적화하고 중요 열을 인덱싱하면 쿼리 실행 시간을 크게 줄여 PHP 애플리케이션 속도를 높일 수 있습니다.


4부: Gzip 압축 활성화

1단계: Nginx에서 Gzip 활성화

Gzip은 서버에서 클라이언트로 전송되는 데이터의 크기를 줄여 페이지 로드 속도를 높여줍니다. Nginx에서 활성화하려면:

  1. Nginx 구성 파일을 엽니다.
   sudo nano /etc/nginx/nginx.conf
  1. 다음 Gzip 설정을 추가하세요.
   gzip on;
   gzip_comp_level 2;
   gzip_types text/css application/javascript application/json image/svg xml;
   gzip_min_length 256;
  1. Nginx를 저장하고 다시 시작하세요.
   sudo systemctl restart nginx

왜?

Gzip 압축을 활성화하면 전송해야 하는 데이터 양이 줄어들어 페이지 로드 시간이 빨라지고 대역폭 사용량이 줄어듭니다.


5부: CDN(콘텐츠 전송 네트워크) 사용

1단계: 정적 자산에 대한 CDN 구성

Cloudflare 또는 Amazon CloudFront와 같은 CDN은 CSS, JavaScript, 이미지와 같은 정적 자산의 복사본을 전 세계 분산 서버에 저장하여 사용자가 더 가까이에서 사용할 수 있도록 합니다.

예:

왜?

정적 콘텐츠를 CDN으로 오프로드하면 서버의 로드가 줄어들고 전 세계 사용자의 응답 시간이 대폭 향상됩니다.


6부: PHP-FPM 및 튜닝 사용

1단계: PHP-FPM 설치 및 구성

고부하 환경에 더 잘 최적화된 PHP-FPM(FastCGI 프로세스 관리자)을 사용하고 있는지 확인하세요.

sudo apt install php8.2-fpm

2단계: PHP-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 프로세스가 더 많은 동시 요청을 효율적으로 처리하여 부하가 심한 경우 서버 응답 시간을 줄일 수 있습니다.


7부: 자산 축소 및 묶기

1단계: CSS, JavaScript, HTML 축소

불필요한 공백과 주석을 제거하여 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');

2단계: 브라우저 캐싱 활성화

Nginx 구성 파일에서 정적 자산에 대한 캐싱을 추가합니다.

location ~* \.(css|js|jpg|jpeg|png|gif|ico|woff|woff2)$ {
    expires 1y;
    access_log off;
    add_header Cache-Control "public";
}

왜?

브라우저 캐싱 활성화와 함께 자산을 축소하고 번들링하면 파일 크기가 줄어들고 로드 시간이 단축되어 애플리케이션 속도가 빨라집니다.


8부: 캐싱에 Redis 또는 Memcached 사용

1단계: Redis 설치

Redis를 설치하려면:

sudo apt install redis-server

2단계: Redis를 사용하도록 Laravel 구성

Laravel에서 .env 파일을 열고 Redis를 캐시 드라이버로 구성합니다.

CACHE_DRIVER=redis

3단계: 데이터베이스 쿼리 캐싱

쿼리 캐싱을 사용하여 반복되는 데이터베이스 쿼리 속도를 높입니다.

$users = Cache::remember('users', 60, function() {
    return DB::table('users')->get();
});

왜?

데이터베이스 쿼리를 캐싱하면 데이터베이스 로드가 줄어들고 자주 액세스하는 데이터에 대한 응답 시간이 대폭 향상됩니다.


9부: 오토로더 최적화

1단계: Composer의 오토로더 최적화 사용

프로덕션을 위한 Composer 자동 로더 최적화:

composer install --optimize-autoloader --no-dev

2단계: 사용하지 않는 서비스 제공업체 삭제

Laravel에서는 config/app.php에서 사용하지 않는 서비스 제공자를 비활성화하여 메모리 사용량을 줄이고 애플리케이션 부팅 시간을 단축합니다.

왜?

자동 로드 최적화는 클래스 맵을 컴파일하여 클래스 로드를 더 빠르게 만듭니다. 사용하지 않는 서비스를 비활성화하면 애플리케이션이 더 적은 리소스를 사용하는 데 도움이 됩니다.


10부: 모니터링 및 프로파일링

1단계: Laravel Telescope(또는 기타 프로파일링 도구) 사용

애플리케이션을 프로파일링하려면 Laravel Telescope를 설치하세요.

composer require laravel/telescope
php artisan telescope:install
php artisan migrate
php artisan serve

2단계: 고급 프로파일링을 위해 New Relic 또는 Blackfire 사용

New Relic 또는 Blackfire와 같은 타사 도구를 통합하여 애플리케이션 병목 현상, 데이터베이스 성능 등을 분석할 수 있습니다.

왜?

모니터링 및 프로파일링 도구는 PHP 애플리케이션의 느린 쿼리, 메모리 누수 및 병목 현상을 식별하여 성능 문제를 사전에 해결할 수 있도록 도와줍니다.


결론:

이 단계를 수행하면 PHP 애플리케이션의 성능을 크게 향상시킬 수 있습니다. PHP 업데이트 및 Opcode 캐싱 활성화부터 데이터베이스 쿼리 최적화 및 PHP-FPM 구성에 이르기까지 각 단계는 보다 응답성이 뛰어나고 확장 가능한 애플리케이션에 기여합니다.

릴리스 선언문 이 기사는 https://dev.to/mdarifulhaque/boosting-php-efficiency-proven-techniques-for-performance-optimization-4plh?1에서 복제됩니다. 위반 사항이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다. 그것
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3