소프트웨어 권장 사항
Commerce의 프로덕션 인스턴스에는 다음 소프트웨어가 필요합니다.
- PHP
- Nginx 및 PHP-FPM
- MySQL
- Elasticsearch 또는 OpenSearch
다중 서버 배포 또는 비즈니스 확장을 계획하고 있는 판매자의 경우 다음을 권장합니다.
- Varnish 캐시
- 세션에 대한 Redis(2.0.6 이상)
- 별도의 Redis 인스턴스를 기본 캐시(페이지 캐시에 이 인스턴스를 사용하지 않음)로 사용합니다.
각 소프트웨어 유형의 지원되는 버전에 대한 정보는 시스템 요구 사항을 참조하십시오.
운영 체제
Commerce의 운영 체제 구성 및 최적화는 로드가 많은 다른 웹 응용 프로그램과 유사합니다. 서버가 처리하는 동시 연결 수가 증가하면 사용 가능한 소켓 수가 완전히 할당될 수 있습니다. Linux 커널은 TCP 연결을 "재사용"하는 메커니즘을 지원합니다. 이 메커니즘을 사용하려면 /etc/sysctl.conf
에서 다음 값을 설정하십시오.
net.ipv4.tcp_tw_reuse = 1
커널 매개 변수 net.core.somaxconn
은(는) 연결을 기다리는 열려 있는 최대 소켓 수를 제어합니다. 이 값은 1024로 안전하게 늘릴 수 있지만 이 값을 처리하는 서버의 기능과 상관 관계가 있어야 합니다. 이 커널 매개 변수를 사용하려면 /etc/sysctl.conf
에서 다음 값을 설정하십시오.
net.core.somaxconn = 1024
PHP
Magento은 PHP 7.3 및 7.4를 완전히 지원합니다. 요청 처리 시 최대 속도와 효율성을 얻기 위해 PHP를 구성할 때 고려해야 할 몇 가지 요소가 있습니다.
확장 프로그램
활성 PHP 확장 목록을 Commerce 기능에 필요한 확장으로 제한하는 것이 좋습니다.
Magento Open Source 및 Adobe Commerce:
- ext-bcmath
- ext-ctype
- ext-curl
- ext-dom
- ext-fileinfo
- ext-gd
- ext-hash
- ext-iconv
- ext-intl
- ext-json
- ext-libxml
- ext-mbstring
- ext-openssl
- 내선 번호
- ext-pdo_mysql
- ext-simplexml
- ext-soap
- 외부 소켓
- 이스트나트륨
- 내선 토큰화기
- ext-xmlwriter
- ext-xsl
- ext-zip
- lib-libxml
- lib-openssl
또한 Adobe Commerce에는 다음이 필요합니다.
- ext-bcmath
- ext-ctype
- ext-curl
- ext-dom
- ext-fileinfo
- ext-gd
- ext-hash
- ext-iconv
- ext-intl
- ext-json
- ext-libxml
- ext-mbstring
- ext-openssl
- 내선 번호
- ext-pdo_mysql
- ext-simplexml
- ext-soap
- 외부 소켓
- 이스트나트륨
- -spl
- 내선 토큰화기
- ext-xmlwriter
- ext-xsl
- ext-zip
- lib-libxml
- lib-openssl
확장을 추가하면 라이브러리 로드 시간이 증가합니다.
PHP 설정
데이터 또는 코드를 디스크에 덤프하지 않고 모든 Commerce 인스턴스가 성공적으로 실행되도록 하려면 다음과 같이 메모리 제한을 설정합니다.
memory_limit=1G
디버깅을 위해 이 값을 2G로 늘립니다.
Realpath_cache 구성
Commerce 성능을 향상시키려면 php.ini
파일에서 다음 권장 realpath_cache
설정을 추가하거나 업데이트하십시오. 이 구성을 사용하면 PHP 프로세스가 페이지를 로드할 때마다 경로를 조회하는 대신 파일에 경로를 캐시할 수 있습니다. PHP 설명서에서 성능 조정을 참조하십시오.
realpath_cache_size=10M
realpath_cache_ttl=7200
바이트 코드
PHP 7에서 Commerce의 최대 속도를 얻으려면 OpCache 모듈을 활성화하고 적절하게 구성해야 합니다. 모듈에는 다음 설정이 권장됩니다.
opcache.memory_consumption=512
opcache.max_accelerated_files=60000
opcache.consistency_checks=0
opcache.validate_timestamps=0
opcache.enable_cli=1
opcache에 대한 메모리 할당을 미세 조정할 때 Magento의 코드 베이스와 모든 확장의 크기를 고려하십시오. Magento의 성능 팀은 설치된 확장의 평균 수에 대해 opcache에 충분한 공간을 제공하므로 테스트에 이전 예의 값을 사용합니다.
메모리 부족 시스템이 있고 확장 또는 사용자 지정이 많이 설치되어 있지 않은 경우 다음 설정을 사용하여 유사한 결과를 얻으십시오.
opcache.memory_consumption=64
opcache.max_accelerated_files=60000
APCU
최대 성능을 최적화하려면 PHP APCu 확장을 사용하도록 설정하고 지원하도록 composer
을 구성하는 것이 좋습니다. 이 확장은 열린 파일의 파일 위치를 캐시하므로 페이지, Ajax 호출 및 끝점을 포함한 Commerce 서버 호출의 성능이 향상됩니다.
다음을 포함하도록 apcu.ini
파일을 편집합니다.
extension=apcu.so
[apcu]
apc.enabled = 1
웹 서버
Magento은 Nginx 및 Apache 웹 서버를 완전히 지원합니다. Commerce은(는) <magento_home>/nginx.conf.sample
(Nginx) 및 <magento_home>.htaccess.sample
(Apache) 파일에 샘플 권장 구성 파일을 제공합니다. Nginx 샘플에는 성능 향상을 위한 설정이 포함되어 있으며 재구성이 거의 필요하지 않도록 설계되었습니다. 샘플 파일에 정의된 몇 가지 주요 구성 모범 사례는 다음과 같습니다.
- 브라우저에서 정적 콘텐츠를 캐싱하기 위한 설정
- PHP용 메모리 및 실행 시간 설정
- 컨텐츠 압축 설정
또한 아래 나열된 대로 입력 요청 처리를 위한 스레드 수를 구성해야 합니다.
MySQL
각 저장소 및 환경이 다르기 때문에 이 문서에서는 심층적인 MySQL 조정 지침을 제공하지 않지만 일반적인 권장 사항을 제공할 수 있습니다.
MySQL 5.7.9에 대한 많은 개선 사항이 있습니다. MySQL은(는) 양호한 기본 설정으로 배포되었습니다. 가장 중요한 설정은 다음과 같습니다.
innodb_buffer_pool_instances
innodb_buffer_pool_size
innodb_buffer_pool_instances
과(와) innodb_buffer_pool_size
의 조합을 지정하십시오.max_connections
max_connections
매개 변수의 값은 응용 프로그램 서버에 구성된 총 PHP 스레드 수와 상관 관계가 있어야 합니다. 일반적으로 소규모 환경에서는 300개, 중간 환경에서는 1,000개를 사용하는 것이 좋습니다.innodb_thread_concurrency
innodb_thread_concurrency = 2 * (NumCPUs + NumDisks)
Varnish
Magento은 Varnish을(를) 저장소의 전체 페이지 캐시 서버로 사용하는 것이 좋습니다. PageCache 모듈은 코드 베이스에 계속 있지만, 개발 목적으로만 사용해야 합니다. Varnish과(와) 함께 또는 대신 사용하면 안 됩니다.
웹 계층 앞에 있는 별도의 서버에 Varnish을(를) 설치합니다. 모든 수신 요청을 수락하고 캐시된 페이지 복사본을 제공해야 합니다. Varnish이(가) 보안 페이지에서 효율적으로 작동하도록 하려면 SSL 종료 프록시를 Varnish 앞에 배치할 수 있습니다. Nginx를 이 용도로 사용할 수 있습니다.
Commerce은(는) 성능에 대한 모든 권장 설정이 포함된 Varnish (버전 4 및 5)에 대한 샘플 구성 파일을 배포합니다. 성능 측면에서 가장 중요한 요소는 다음과 같습니다.
- 백엔드 상태 확인 은(는) Commerce 서버를 폴링하여 적시에 응답하는지 확인합니다.
- 유예 모드 를 사용하면 Commerce이(가) 정상이 아니거나 새 콘텐츠를 아직 가져오지 않은 경우 Varnish에게 개체를 TTL(Time to Live) 기간 이상으로 캐시에 보관하고 이 오래된 콘텐츠를 제공하도록 지시할 수 있습니다.
- Saint 모드 에서 구성할 수 있는 시간 동안 비정상 Commerce 서버를 블랙리스트에 추가합니다. 따라서 Varnish을(를) 부하 분산 장치로 사용할 때는 비정상 백엔드가 트래픽을 처리할 수 없습니다.
이러한 기능 구현에 대한 자세한 내용은 고급 Varnish 구성을 참조하세요.
에셋 성능 최적화
일반적으로 최적의 성능을 위해 CDN에 자산(이미지, JS, CSS 등)을 저장하는 것이 좋습니다.
사이트에 대량의 로케일을 배포할 필요가 없고 서버가 대다수의 고객과 동일한 지역에 있는 경우 CDN을 사용하는 대신 자산을 Varnish에 저장하면 저렴한 비용으로 상당한 성능 향상을 얻을 수 있습니다.
자산을 Varnish에 저장하려면 Varnish 5에 대해 Commerce에서 생성한 default.vcl
파일에 다음 VCL 항목을 추가하십시오.
vcl_recv
하위 루틴의 PURGE 요청에 대한 if
문의 끝에 다음을 추가하십시오.
# static files are cacheable. remove SSL flag and cookie
if (req.url ~ "^/(pub/)?(media|static)/.*\.(ico|html|css|js|jpg|jpeg|png|gif|tiff|bmp|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)$") {
unset req.http.Https;
unset req.http./* {{ ssl_offloaded_header }} */;
unset req.http.Cookie;
}
vcl_backend_response
서브루틴에서 GET
또는 HEAD
요청에 대한 쿠키를 설정 해제하는 if
문을 찾습니다.
업데이트된 if
블록은 다음과 같이 표시되어야 합니다.
# validate if we need to cache it and prevent from setting cookie
# images, css and js are cacheable by default so we have to remove cookie also
if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) {
unset beresp.http.set-cookie;
if (bereq.url !~ "\.(ico|css|js|jpg|jpeg|png|gif|tiff|bmp|gz|tgz|bz2|tbz|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)(\?|$)") {
set beresp.http.Pragma = "no-cache";
set beresp.http.Expires = "-1";
set beresp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";
}
}
사이트를 업그레이드하거나 자산을 배포/업데이트할 때마다 캐시된 자산을 플러시하려면 Varnish 서버를 다시 시작하십시오.
캐싱 및 세션 서버
Magento은 Redis, Memcache, 파일 시스템, 데이터베이스 등 캐시 및 세션 데이터를 저장하는 다양한 옵션을 제공합니다. 이러한 옵션 중 일부는 아래에 설명되어 있습니다.
단일 웹 노드 설정
하나의 웹 노드만으로 모든 트래픽을 처리할 계획이라면, 원격 Redis 서버에 캐시를 두는 것은 적절하지 않습니다. 대신 파일 시스템 또는 로컬 Redis 서버를 사용합니다. 파일 시스템을 사용하려면 캐시 폴더를 RAM 파일 시스템에 마운트된 볼륨에 배치합니다. 로컬 Redis 서버를 사용하려면 HTTP를 통해 데이터를 교환하는 대신 직접 연결을 위한 소켓을 사용하도록 Redis를 구성하는 것이 좋습니다.
여러 웹 노드 설정
여러 웹 노드를 설정하는 경우 Redis가 가장 적합한 옵션입니다. Commerce이(가) 성능을 향상시키기 위해 많은 데이터를 적극적으로 캐시하므로 웹 노드와 Redis 서버 사이의 네트워크 채널에 주목하십시오. 요청 처리를 위해 채널이 병목 현상이 되지 않도록 하려는 경우