Composer 오토로더 최적화 전후 검증 — dump-autoload 옵션을 배포 기준으로 선택하기

조회수 8

도입

Composer 오토로더 최적화는 한 가지 스위치가 아니다. 기본 PSR-4 탐색을 classmap으로 바꾸는 수준과 classmap에 없는 클래스는 존재하지 않는다고 확정하는 수준은 제약이 다르다.

PHP 8.3과 Composer 2.x의 작은 테스트 프로젝트에서 생성 파일과 클래스 탐색 결과를 비교한다. 실행 시간은 장비와 파일 시스템에 영향을 받으므로 특정 개선 비율을 일반화하지 않는다.

기본 오토로딩이 하는 일

PSR-4 설정은 네임스페이스 접두어를 디렉터리에 연결한다. 클래스가 필요할 때 Composer는 규칙으로 경로를 계산하고 파일 시스템에서 확인한다. 개발 중 새 클래스를 추가하기 편하지만 요청마다 탐색 비용이 생길 수 있다.

{
  "autoload": {
    "psr-4": {"Example\\\\": "src/"}
  }
}

설정을 바꾼 뒤에는 composer dump-autoload를 실행해야 생성 파일에 반영된다.

세 가지 최적화 수준

명령 핵심 동작 주의점
dump-autoload -o PSR-4 클래스를 classmap에 수집 새 클래스 추가 후 재생성 필요
dump-autoload -a classmap을 authoritative로 사용 classmap 밖 클래스는 없다고 판단
dump-autoload --apcu 찾기 성공·실패 결과를 APCu에 저장 APCu와 SAPI 설정 확인 필요
Composer 모드별 classmap 항목 수 비교
최적화 옵션에 따라 클래스 위치를 찾는 방식이 달라진다.

재현 프로젝트에서 세 모드 비교하기

재현 프로젝트 만들기

composer validate --strict
composer dump-autoload
php -r "require 'vendor/autoload.php'; var_dump(class_exists('Example\\Demo'));"

composer dump-autoload -o
composer dump-autoload -a

각 단계에서 같은 정상 클래스를 불러오고 vendor/composer/autoload_classmap.php 항목 수를 기록한다. vendor 파일을 직접 수정하지 않는다.

Authoritative 모드 검증

-a로 생성한 뒤 새 클래스 파일을 추가하고 dump를 다시 실행하지 않는다. 새 클래스가 PSR-4 경로에 있어도 classmap에 없으면 찾지 못한다. dump 후 성공해야 제약과 배포 절차가 연결된다.

Composer classmap 재생성 전후 신규 클래스 탐색 결과
Authoritative 모드는 classmap에 없는 클래스를 다른 규칙으로 탐색하지 않는다.

배포 선택 기준

코드와 vendor가 변경 불가능한 산출물이라면 composer install --no-dev --optimize-autoloader가 기본 후보다. 런타임에 클래스를 생성하거나 플러그인을 동적으로 발견하는 시스템은 authoritative 모드와 충돌할 수 있으므로 통합 테스트한다.

APCu 모드는 프로세스와 SAPI 설정을 함께 확인해야 한다. CLI에서 켜진 상태만 보고 PHP-FPM에도 적용됐다고 판단하지 않는다.

배포 산출물에서 확인할 실패

배포 후 새 클래스를 찾지 못한다

증상

개발에서는 되지만 운영에서 class not found가 발생한다.

원인

코드는 변경됐지만 authoritative classmap이 이전 산출물이다.

확인 방법

composer dump-autoload -a -vvv
php -r "require 'vendor/autoload.php'; var_dump(class_exists('Example\\NewClass'));"

해결

동일 릴리스 산출물 안에서 autoload를 다시 만들고 테스트한다.

예방

코드 복사와 autoload 생성을 하나의 빌드 단계로 고정한다.

측정 차이가 일정하지 않다

증상

반복마다 시간이 크게 달라진다.

원인

OPcache, OS 파일 캐시, 디버거와 첫 실행 비용이 섞였다.

확인 방법

cold와 warm 실행을 분리하고 SAPI, 확장, 반복 횟수를 기록한다.

해결

같은 환경에서 여러 번 측정하고 중앙값과 오류 수를 함께 비교한다.

예방

미세한 시간 차이보다 클래스 로딩 정확성과 배포 재현성을 먼저 검증한다.

배포 점검 체크리스트

  • 지원 PHP 버전에서 composer 설정 검사가 성공하는가?
  • 코드와 같은 빌드에서 autoload 파일을 생성했는가?
  • 동적 클래스 생성이 authoritative 모드와 충돌하지 않는가?
  • 운영과 같은 SAPI에서 클래스 로딩을 확인했는가?

참고 자료

한 줄 요약

Composer 오토로더 최적화는 배포 클래스 구성이 고정됐는지 확인한 뒤 classmap 최적화와 실패 캐시의 제약을 구분해 선택해야 한다.

댓글 0

  • 첫 번째 댓글을 남겨보세요.