PHP 7.3→8.0 | Laavel 5.8→8.0 업그레이드 후의 이야기

6353 단어 LaravelPHPtech

개시하다


WEB 어플리케이션에 사용된 PHP7.3의 보안 지원이 2021/12/06로 차단됨
의뢰인에게 버전 업그레이드를 부탁합니다.
그리고 계속 사용하던 라벨 5.8도 일찌감치 보안 지원을 잃었다.
같이 업그레이드하기로 했습니다.

주의


  • PHP 버전 업그레이드 후 수정 결과가 거의 없기 때문에 주로 라벨 업그레이드에 관한 이야기다.

  • 정면은 베.js로 제작되었기 때문에 서버 측의 대응만 있습니다.
  • 나 혼자 한 게 아니라 5~6명의 팀으로 갔어.
  • 업그레이드 전 환경

  • PHP 7.3
  • Laravel 5.8
  • composer 1.x
  • ※ 추후 이 내용을'옛 환경'으로 표시.

    버전 업그레이드 후 환경

  • PHP 8.0
  • Laravel 8.x
  • composer 2.x
  • ※ 추후 이 내용을'새로운 환경'으로 표시.

    미리 준비하다


    개발 환경 구축


    현지의 개발 환경에서 낡은 환경을 파괴하고 싶지 않기 때문에 현지의 다른 곳에서pull창고에서 버전 업그레이드 환경을 구축했다.
    새로운 환경은 Laavel Sail을 사용하여 구축하기로 결정했습니다.
    https://readouble.com/laravel/8.x/ja/sail.html

    분기 구조


    몇 차례의 우여곡절을 거쳐 최종적으로 다음과 같은 지점으로 구성되어 진행된다.
    지점의 명칭은 일부분으로 약기되어 있다.
    분기 이름
    소스 만들기(병합 대상)
    설명dev개발 지점pre-update devAssistant 함수 및 네임스페이스 수정update-laravel pre-update ( dev )
    패키지 업그레이드 및 수정에 따라update-factory update-laravel수정 공장update-passport update-factory인증 기능 수정update-test update-passport수정 테스트
    번거롭지만 수정된 지점부터 다시 지점이 생겨 마치 물통 릴레이와 같다.
    그 후에 저도 후회했어요. update-factoryupdate-passport는 반대로 하는 게 좋아요.

    업그레이드 작업


    Assistant 함수 및 네임스페이스 수정


    업무 지점: pre-update구환경 상태에서 사전에 할 수 있는 수정을 하고 먼저 합병하기로 했다.
  • 6.x에서 조수 함수를 삭제하고 포장하기 때문에 도입하고 수정
  • 이름 공간과 파일 이름이 다른 파일 수정
  • 기타 상세한 typo 수정
  • Laavel 호스트 업그레이드 및 업그레이드 가이드에 따라 수정


    업무 지점: update-laravel업그레이드 안내서를 읽으면서 버전을 하나하나 올리며 해당하는 부분을 수정했다.
    이 지점은 주로 다음과 같은 곳에 대응한다.
  • 【6.x】정책 추가viewAny()방법
  • [6.x] FormRequest의 validationData() 방법을 public
  • 로 변경
  • 【7.x】Symfony5로의 업그레이드 지원
  • [7.x] Eloquent 모형에서의 방법serializeDate()의 재구성
  • 【8.x】이음매와 공장에 명칭 공간 추가
  • 【8.x】failed_jobs표에 uuid열을 추가하여 uuid기존 데이터에 유입
  • 좀 더 자세히 말하면 아래의 점도 수정되었다.
  • config를 Laavel8.0 기준으로 설정하고 .env의 매개 변수 이름을 일부 변경
  • 수정 전 매개변수 이름
    수정된 매개변수 이름MAIL_DRIVER MAIL_MAILER QUEUE_DRIVER QUEUE_CONNECTION

    수정 팩토리


    업무 지점: update-factory공장은 새로운 기술 방식이 되었다, 라벨 8.x에서 이전 공장을 사용할 때laravel/legacy-factories 포장에 넣어야 합니다.
    이번에 이 포장을 넣지 않아서 모든 공장이 수정되었고 공장을 부르는 부분도 수정되었다.
    공장의 수정은 착실하게 수공으로 한 것이다.
    호출된 부분은 편집기(VScode)의 대체 기능을 이용해 대략적으로 수정한 뒤 수동으로 수정했다.
    // 単体
    検索 >> factory\((.+)::class\)
    置換 >> $1::factory()
    // 複数モデル作成
    検索 >> factory\((.+)::class, (.+)\)  
    置換 >> $1::factory()->count($2)
    
    여기는 작업량이 가장 많다.

    인증 기능 수정


    업무 지점: update-passport여러 개의 인증 제공자를 사용했기 때문에 구 환경에서 사용했다smartins/passport-multiauth.
    그러나 본가laravel/passport는 여러 공급자, PHP8에 대응했다.xsmartins/passport-multiauth는 추천하지 않기 때문에 환승하기로 했습니다.laravel/passport의 도입은 공식 문서에 따라 이루어졌고 사용passport-multiauth한 부분을 대응하는 기술로 바꾸면 인증이 가능하기 때문에 환승 자체가 생각보다 쉽다.
    다만 영향이 가장 큰 부분인 만큼 꼼꼼하게 동작 확인을 했다.
    공식 반영 시에도 인증표migrations 재작성, 서식 재작성 등이 필요하므로 절차를 미리 조사하는 등 긴장을 늦추지 말라는 설명이 뒤따른다.

    수정 테스트


    업무 지점: update-test이번phpunitcarbon 등의 포장도 업그레이드돼 테스트에 실패한 부분이 있어 수정됐다.
    수정할 때는 프로그램 자체에 영향이 있는지 확인하면서 진행했다.
  • 추천하지 않는phpunit의 결단에 대한 수정assertRegExp()
  • carbon의 오류 수정으로 인한 테스트 실패에 대한 수정 대응(팀원 조사)
  • 업데이트의 영향으로 테스트 실패 부분의 수정이 끝난 후 다른 테스트 실패 부분을 참고하여 응용 프로그램을 수정했습니다.
    일부 API 응답의 상태 코드가 변경되고 세부 사양도 변경되며 일부는 테스트에 주의하지 않은 경우도 있습니다.
    그리고 시험을 보면 안도감이 달라져요. 강해요.

    발행 시간


    위탁자의 일정에 맞추어 발행일을 결정하였다.
    발표에 앞서 개발 환경과 무대 환경에서 가능한 한 동작 확인을 진행했다.
    그리고 발매 당일 다음과 같은 작업을 진행했다.
  • 유지 관리 모드로 전환
  • 서버 PHP 업그레이드
  • 새로운 환경의 설계
  • 위 인증 양식 재작성 및 마이그레이션 수행
  • failed_jobs 테이블 추가에 대응uuid
  • 슈퍼바이저의 재부팅
  • 동작 확인
  • 유지 보수 모드 해제
  • 별다른 잘못 없이 순조롭게 발표되었다🎉

    최후


    잘 나와서 성취감도 있지만 마음이 놓인다는 게 솔직한 소감이다.
    역시 시험을 쓰는 것은 좋은 점이 많다.나는 앞으로도 계속 시험을 쓰고 싶다.
    어렵게 업그레이드됐기 때문에 PHP 7.4부터 사용하고자 하는 ARROY 함수는 PHP 8.0에 match식이 적용되는 등 새로운 기능을 계속 사용하고 있다.
    형식적인 부분을 충실하게 쓰길 바란다.
    물론 라벨의 새로운 기능도 추가하고 싶다.
    코드 규약도 다시 수정하고 싶어요...나는 하고 싶은 일이 매우 많다.
    반성하는 부분이 많은 만큼 앞으로 잘 활용하겠다.
    고생이 많았는데 너무 잘 됐다.
    향후 개발을 기대하다.

    좋은 웹페이지 즐겨찾기