PHP 8 마이그레이션을 위한 리포트를 생성하자

PHP

(Update : 2021-12-10)

Language :

PHP 공식 지원 기간 확인

   PHP는 다른 언어와 달리 LTS 버전이 존재하지 않습니다. 그에 따라 최소 3년에 한 번씩 PHP 버전을 올려야 주기적인 보안 지원을 받을 수 있죠. 버전 별 지원 기간은 PHP 공식 홈페이지에서 확인 가능합니다. 사용하는 버전이 언제까지 보안 지원을 하는지 확인하고, 종료 시기가 다가오면 버전 마이그레이션을 준비합시다!

sv.png

https://www.php.net/supported-versions.php

? 장기 지원 버전 Long Term Support
일반적인 경우보다 장기간 지원하도록 선언한 소프트웨어 버전을 의미한다.

PHP 마이그레이션 준비

   버전에 따른 변경 사항을 적용하기 위해 한땀한땀 모든 코드를 수작업으로 살펴볼 수 없는 노릇입니다. 코드가 많든 적든 사람의 손으로 살펴보면 누락될 여지가 높습니다. 그러므로 PHP 마이그레이션을 위해 적절한 도구를 선택할 줄 알아야 합니다.

   그 중에서 대표적인 PHP 정적분석툴인 PHP CodeSniffer와 마이그레이션 보조 도구인 PHP Compatibility를 통하여 PHP 버전 업을 위한 마이그레이션을 준비할 수 있습니다. 이를 통해 버전 업 시 어떤 코드에서 이슈가 발생할지 사전에 파악하고 작업할 수 있죠. Composer를 통해 PHP CodeSnifferPHPCompatibility를 설정해볼까요?

? 신규 버전이 나온 직후에는 PHPCompatibility가 마이그레이션 리포트를 지원하지 않을 수도 있습니다. 리포팅 도구가 아직 지원하지 않는 버전이라면 기다리거나 하위 버전을 선택합시다.

마이그레이션 리포트 도구 의존성 추가

   Composer를 통하여 글로벌로 의존성을 추가하겠습니다.

composer global require "squizlabs/php_codesniffer=*"
composer global require "phpcompatibility/php-compatibility=*"

PHP Compatibility 설정

   글로벌에 의존성을 추가했으니 composer 글로벌 경로를 알아둡시다. 글로벌 경로는 PHP CodeSnifferPHPCompatibility를 연동할 때 필요합니다.

composer global config home

PHP CodeSniffer, PHP Compatibility 연동

phpcs -i
# The installed standards are MySource, PEAR, PSR1, PSR112, Squiz, Zend and PHPCompatibility

   CodeSnifferPHPCompatibiliry가 포함되어 있으면 기본적인 설정을 마쳤습니다. 추가적으로 CodeSniffer 옵션 하나만 활성화 해볼까요?

PHP CodeSniffer 진행률 표시 옵션 활성화

phpcs --config-set show_progress 1

   CodeSniffer 실행 시 진행 상황을 파악하기 위한 옵션입니다.

마이그레이션 리포트

phpcs [PATH] --standard=PHPCompatibility

   PHPCompatibility를 사용하기 위해서는 다음과 같이 옵션을 줘야 합니다. 해당 옵션을 주고 실행하면 지정한 PATH에 대하여 문제점을 찾아줍니다. 다만 이 명령어로는 실제 마이그레이션을 작업하기 부적절하므로 몇 가지 추가 옵션을 더 겉들어야 합니다.

마이그레이션 리포트 버전 지정

phpcs [PATH] --standard=PHPCompatibility --runtime-set testVersion 8.0

   원하는 버전의 오류를 잡기 위해 PHP 버전을 다음과 같이 명시해야 합니다.

마이그레이션 리포트 범위 지정

phpcs [PATH] --standard=PHPCompatibility --extensions=php,phtml,html --ignore=*\vendor\*

   extensions로 검사할 파일 확장자를 지정하면 불필요한 파일까지 검사하지 않습니다. js나 css파일은 PHP와 무관하므로 검증이 필요한 확장자만 명시하도록 합니다. 이와 함께 Composer를 통해 생성되는 vendor 디렉토리를 제외합시다. --ingnore는 단순한 예시로 적어두었습니다. 자세한 방식은 문서를 참고하세요.

마이그레이션 리포트 문서 생성

phpcs [PATH] --standard=PHPCompatibility --report=full --report-file=Y:\workspace\report.txt

   CodeSniffer로 어떤 형식의 문서를 받을지 명시할 수 있습니다. 또한 이를 파일로 저장하고자 할 경우 원하는 경로를 지정해주세요.

   이 외에도 다양한 옵션이 존재합니다. 필요하다면 CodeSniffer 문서를 참고하세요.

실제로 사용한 마이그레이션 리포트 명령어

phpcs -p [PATH] --standard=PHPCompatibility --runtime-set testVersion 8.0 -w --extensions=php,phtml --report=full --report-file=Y:\workspace\report.txt
result_time.png

마이그레이션 리포트 실행 결과

? 환경에 따라 소스 코드가 방대할 경우 가용 메모리 부족으로 검사가 중단될 수 있습니다. 만약 메모리가 부족한 환경이라면 디렉토리 별로 나누어서 마이그레이션 검사를 진행하세요.

참고 자료

Devellany

back-end Developer

PHP, Java, JavaScript, MySQL, Redis, Ubuntu, Nginx
Codeigniter, Laravel, Zend, Phalcon, Spring Boot, JPA
PHPStorm, IntelliJ, Upsource, SVN, Git, Telegram Bot